Files
Meeting_Assistant/openspec/changes/archive/2025-12-11-update-excel-template-export/proposal.md
egg e790f48967 feat: Excel template export with meeting number auto-generation
- Add meeting_number field (M-YYYYMMDD-XX format) with auto-generation
- Refactor Excel export to use cell coordinates instead of placeholders
- Export files saved to backend/record/ directory with meeting number filename
- Add database migration for meeting_number column
- Add start.sh script for managing frontend/backend/sidecar services
- Update OpenSpec documentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 19:45:53 +08:00

187 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Change: Update Excel Export with Template Cell Mapping
## Why
目前的 Excel 導出功能使用佔位符方式(`{{subject}}`),但實際模板 `meeting_template.xlsx` 使用固定儲存格座標。此外,數據模型缺少「會議編號」欄位,且需要支援代辦事項的「執行現況」欄位以符合模板需求。
## What Changes
### Backend 修改
- **BREAKING** 重構 `export.py`改用儲存格座標填充方式D3, D4 等)
- 修正模板路徑:`templates/``template/`
- 新增 `meeting_number` 欄位並實作自動生成邏輯
- 實作動態行填充:代辦事項從第 10 行往下延伸
### 數據模型修改
- `MeetingCreate/MeetingResponse`: 新增 `meeting_number` 欄位
### AI 整合調整
- 提供詳細的 Dify System Prompt供用戶在 Dify 後台設定)
## Impact
- Affected specs: `excel-export`, `meeting-management`, `ai-summarization`
- Affected code:
- `backend/app/routers/export.py`
- `backend/app/models/schemas.py`
- `backend/app/routers/meetings.py`
- `backend/app/routers/ai.py`
- `client/src/pages/meeting-detail.html`
## Template Cell Mapping
| 儲存格 | 內容 | 數據來源 |
|--------|------|----------|
| D3 | 會議主題 | `meeting.subject` |
| D4 | 會議時間 | `meeting.meeting_time` |
| D5 | 會議主席 | `meeting.chairperson` |
| F4 | 會議地點 | `meeting.location` |
| F5 | 記錄人員 | `meeting.recorder` |
| D6 | 會議參與人員 | `meeting.attendees`(逗號分隔) |
| C8 | 會議編號 | `meeting.meeting_number` 或生成規則 |
| D8 | 會議結論 | 結論內容(多條用換行分隔) |
| C10+ | 代辦事項編號 | `action.system_code` |
| D10+ | 事項內容 | `action.content` |
| F10+ | 負責人 | `action.owner` |
| G10+ | 預計完成日期 | `action.due_date` |
| H10+ | 執行現況 | `action.status`Open/In Progress/Done/Delayed |
## 現有編號生成機制確認
| 編號類型 | 格式 | 狀態 | 說明 |
|----------|------|------|------|
| 結論編號 | `C-YYYYMMDD-XX` | ✅ 已實作 | `generate_system_code("C", ...)` |
| 行動項編號 | `A-YYYYMMDD-XX` | ✅ 已實作 | `generate_system_code("A", ...)` |
| **會議編號** | `M-YYYYMMDD-XX` | ❌ 需新增 | 需在 DB 新增欄位並實作生成邏輯 |
## 已確認決策
1. **多條結論處理**:✅ 將多條結論用換行符合併放入 D8 單一儲存格
2. **執行現況欄位**:✅ 直接使用現有 `status` 欄位Open/In Progress/Done/Delayed
## Dify System Prompt
以下是完整的 System Prompt請在 Dify 後台設定:
```
# 角色定義
你是專業的會議記錄助手,負責分析會議逐字稿並提取結構化的會議紀錄。
# 任務說明
請仔細閱讀使用者提供的會議逐字稿,從中提取:
1. 會議結論:會議中達成的決定、共識或重要決議
2. 待辦事項:需要後續執行的具體行動項目
# 輸出格式要求
你必須以 JSON 格式回覆,結構如下:
{
"conclusions": [
"結論內容1",
"結論內容2"
],
"action_items": [
{
"content": "待辦事項的具體描述",
"owner": "負責人姓名",
"due_date": "YYYY-MM-DD"
}
]
}
# 欄位說明
## conclusions結論陣列
- 類型:字串陣列
- 數量:根據實際內容決定,可能是 0 個、1 個或多個
- 內容:每個結論應該是完整的一句話,清楚描述決議內容
- 若逐字稿中沒有明確的結論或決議,回傳空陣列 []
## action_items待辦事項陣列
- 類型:物件陣列
- 數量:根據實際內容決定,可能是 0 個、1 個或多個
- 各欄位說明:
- content必填待辦事項的具體描述應清楚說明要做什麼
- owner選填負責執行此事項的人員姓名。若逐字稿中有提及負責人則填入否則填空字串 ""
- due_date選填預計完成日期格式為 YYYY-MM-DD。若逐字稿中有提及日期則填入否則填 null
# 提取原則
1. **結論提取原則**
- 尋找「決定」、「同意」、「確認」、「通過」、「結論是」等關鍵詞
- 提取具有決策性質的陳述
- 不要將一般討論內容當作結論
- 每個結論應該是獨立且完整的
2. **待辦事項提取原則**
- 尋找「請...」、「需要...」、「負責...」、「跟進...」、「處理...」等動作詞
- 提取有明確執行要求的事項
- 若有提到負責人,填入 owner 欄位
- 若有提到期限如「下週」、「月底前」、「12月15日」轉換為 YYYY-MM-DD 格式
3. **數量彈性原則**
- 結論和待辦事項的數量完全取決於逐字稿內容
- 不要為了填充而虛構內容
- 不要合併應該分開的項目
- 不要拆分應該合併的項目
# 輸出範例
## 範例1有多個結論和待辦事項
{
"conclusions": [
"本季度預算調整為新台幣500萬元",
"新產品發布日期確定為2025年3月1日",
"同意增聘兩名工程師"
],
"action_items": [
{
"content": "準備預算調整報告提交財務部",
"owner": "王小明",
"due_date": "2025-12-20"
},
{
"content": "聯繫供應商確認交貨時程",
"owner": "李小華",
"due_date": "2025-12-15"
},
{
"content": "發布工程師職缺招募公告",
"owner": "",
"due_date": null
}
]
}
## 範例2只有一個結論沒有待辦事項
{
"conclusions": [
"維持現有方案不做調整"
],
"action_items": []
}
## 範例3沒有結論有待辦事項
{
"conclusions": [],
"action_items": [
{
"content": "收集更多市場數據供下次會議討論",
"owner": "張三",
"due_date": "2025-12-25"
}
]
}
## 範例4都沒有
{
"conclusions": [],
"action_items": []
}
# 重要提醒
1. 只輸出 JSON不要有其他文字說明
2. 確保 JSON 格式正確,可被程式解析
3. 使用繁體中文
4. 日期格式必須是 YYYY-MM-DD 或 null
5. owner 欄位若無資料請填空字串 "",不要填 null
```