添加复核步骤,优化差旅报销流程
- 新增 Step 3(复核):生成 JSON 后必须重新读取 pdf_raw_text.txt 逐项核对 - 自动执行入口新增复核步骤(第7条) - 给大模型的推荐提示词新增复核指令(第9条) - 详细列出 6 项复核清单:金额、人员、日期、费用分类、行程单处理、单据张数
This commit is contained in:
parent
04e1592fe3
commit
20892346c5
165
README.md
165
README.md
|
|
@ -21,8 +21,9 @@
|
||||||
4. 读取本次处理目录中的 `报销输出/pdf_raw_text.txt`,按本文的 JSON Schema 分析出差人、日期、事由、费用分类、金额和证据。
|
4. 读取本次处理目录中的 `报销输出/pdf_raw_text.txt`,按本文的 JSON Schema 分析出差人、日期、事由、费用分类、金额和证据。
|
||||||
5. 如果同一笔滴滴/打车费用同时有行程单和电子发票,金额只按电子发票计入一次;行程单只作为附件和行程明细使用,不要与发票重复计入金额。
|
5. 如果同一笔滴滴/打车费用同时有行程单和电子发票,金额只按电子发票计入一次;行程单只作为附件和行程明细使用,不要与发票重复计入金额。
|
||||||
6. 如果出差人、出差事由、出发地、目的地、日期、金额等关键信息无法从原文可靠判断,必须先问用户;不要编造。
|
6. 如果出差人、出差事由、出发地、目的地、日期、金额等关键信息无法从原文可靠判断,必须先问用户;不要编造。
|
||||||
7. 将最终 JSON 保存为本次处理目录中的 `报销输出/analyzed_result.json`。
|
7. **复核**:重新读取 `pdf_raw_text.txt`,逐项核对生成的 JSON 是否与 PDF 原文中金额、日期、人员等信息一致;如果发现错误,修正后重新生成 JSON。
|
||||||
8. 确认 `questions` 为空、金额合计一致、附件张数一致后,自动运行:
|
8. 将最终 JSON 保存为本次处理目录中的 `报销输出/analyzed_result.json`。
|
||||||
|
9. 确认 `questions` 为空、金额合计一致、附件张数一致后,自动运行:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python3 差旅报销.py fill 20260529/报销输出/analyzed_result.json
|
python3 差旅报销.py fill 20260529/报销输出/analyzed_result.json
|
||||||
|
|
@ -89,32 +90,74 @@ openpyxl # 复制和填写 xlsx 模板
|
||||||
|
|
||||||
## 依赖安装
|
## 依赖安装
|
||||||
|
|
||||||
### Windows
|
### 第一步:检测 Python 环境
|
||||||
|
|
||||||
|
在运行脚本前,应先确认 Python 和 pip 可用。以下是各平台的检测方法:
|
||||||
|
|
||||||
|
#### Windows
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# 检测 Python 是否可用
|
||||||
|
py --version
|
||||||
|
py -m pip --version
|
||||||
|
|
||||||
|
# 如果提示找不到 python,或版本异常,尝试:
|
||||||
|
where python
|
||||||
|
where pip
|
||||||
|
```
|
||||||
|
|
||||||
|
**注意**:Windows 应用商店的 Python(从 Microsoft Store 安装)可能有执行限制。如果 `py` 命令不可用或行为异常,请从 [python.org](https://www.python.org/downloads/) 或使用 conda 安装官方版本。
|
||||||
|
|
||||||
|
#### Linux / macOS
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 --version
|
||||||
|
python3 -m pip --version
|
||||||
|
|
||||||
|
# 如果提示找不到 python3,尝试:
|
||||||
|
which python3
|
||||||
|
which pip3
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 第二步:安装依赖
|
||||||
|
|
||||||
|
确认 Python 可用后,安装所需的两个库:
|
||||||
|
|
||||||
|
#### Windows
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
py -m pip install pdfplumber openpyxl
|
py -m pip install pdfplumber openpyxl
|
||||||
```
|
```
|
||||||
|
|
||||||
运行时使用:
|
#### Linux / macOS
|
||||||
|
|
||||||
```powershell
|
|
||||||
py 差旅报销.py extract
|
|
||||||
py 差旅报销.py fill 20260529/报销输出/analyzed_result.json
|
|
||||||
```
|
|
||||||
|
|
||||||
### Linux / macOS
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python3 -m pip install pdfplumber openpyxl
|
python3 -m pip install pdfplumber openpyxl
|
||||||
```
|
```
|
||||||
|
|
||||||
运行时使用:
|
---
|
||||||
|
|
||||||
|
### 第三步:验证安装
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python3 差旅报销.py extract
|
python3 -c "import pdfplumber, openpyxl; print('依赖安装成功')"
|
||||||
python3 差旅报销.py fill 20260529/报销输出/analyzed_result.json
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
如果提示 `ModuleNotFoundError`,说明安装失败,需要重新执行上一步。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 常见问题
|
||||||
|
|
||||||
|
| 问题 | 解决方法 |
|
||||||
|
|------|----------|
|
||||||
|
| `py` 命令找不到 | 从 python.org 下载安装包,勾选 "Add Python to PATH" |
|
||||||
|
| `python3` 命令找不到 | `sudo apt install python3`(Linux)或从 python.org 安装(macOS)|
|
||||||
|
| 应用商店 Python 执行受限 | 卸载应用商店版本,安装官方 Python |
|
||||||
|
| pip 安装失败 | 尝试 `python3 -m pip install --upgrade pip` 先升级 pip |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 标准目录结构
|
## 标准目录结构
|
||||||
|
|
@ -233,6 +276,57 @@ python3 差旅报销.py schema --output
|
||||||
报销输出/schema_example.json
|
报销输出/schema_example.json
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Step 3(复核):核对 JSON 与 PDF 原文
|
||||||
|
|
||||||
|
**重要**:生成 JSON 后,必须重新读取 `pdf_raw_text.txt`,逐项核对:
|
||||||
|
|
||||||
|
1. **金额核对**:每个 evidence.金额 是否与 PDF 原文中该文件的实际金额一致(检查"价税合计"或"合计"字段)。
|
||||||
|
2. **人员核对**:出差人姓名是否与 PDF 原文中一致。
|
||||||
|
3. **日期核对**:出发/结束日期是否与行程单或机票日期一致。
|
||||||
|
4. **费用分类核对**:每笔费用是否归类正确(住宿/交通/饮食/其他)。
|
||||||
|
5. **行程单处理**:同一笔滴滴费用同时有行程单和电子发票时,确认金额只计入了电子发票,行程单不重复计入。
|
||||||
|
6. **单据张数核对**:附件总张数是否与 evidence 条目数一致。
|
||||||
|
|
||||||
|
如果发现错误,修正 JSON 后重新核对,直到完全一致后再进入 Step 4。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Step 4:读取 JSON 并填表
|
||||||
|
|
||||||
|
脚本会读取 JSON 并填入 Excel:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 差旅报销.py fill 20260529/报销输出/analyzed_result.json
|
||||||
|
```
|
||||||
|
|
||||||
|
Windows 可用:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
py 差旅报销.py fill 20260529/报销输出/analyzed_result.json
|
||||||
|
```
|
||||||
|
|
||||||
|
脚本会:
|
||||||
|
|
||||||
|
1. 校验 JSON 字段是否完整
|
||||||
|
2. 校验金额合计是否一致
|
||||||
|
3. 校验附件张数是否一致
|
||||||
|
4. 复制 `差旅费明细表.xlsx`
|
||||||
|
5. 用 openpyxl 填入固定单元格
|
||||||
|
6. 输出最终 XLSX 到本次处理目录的 `报销输出/`
|
||||||
|
7. 将本次处理目录重命名为 `出发日期-结束日期_出发地-目的地_事由简写` 格式
|
||||||
|
|
||||||
|
输出文件命名规则:
|
||||||
|
|
||||||
|
```text
|
||||||
|
差旅费明细表_[出差人]_[出发日期YYYYMMDD]_[目的地]_[事由简写].xlsx
|
||||||
|
```
|
||||||
|
|
||||||
|
示例:
|
||||||
|
|
||||||
|
```text
|
||||||
|
20260520-20260522_北京-广州_售后维修/报销输出/差旅费明细表_xxxx_20260520_广州_售后维修.xlsx
|
||||||
|
```
|
||||||
|
|
||||||
#### 给大模型的推荐提示词
|
#### 给大模型的推荐提示词
|
||||||
|
|
||||||
```text
|
```text
|
||||||
|
|
@ -247,9 +341,10 @@ python3 差旅报销.py schema --output
|
||||||
6. 每个金额必须写入 evidence,说明来自哪个文件、依据是哪段文本。
|
6. 每个金额必须写入 evidence,说明来自哪个文件、依据是哪段文本。
|
||||||
7. 如果同一笔滴滴/打车费用同时有行程单和电子发票,金额只按电子发票计入一次;行程单只作为附件和行程明细使用,不要与发票重复计入金额。
|
7. 如果同一笔滴滴/打车费用同时有行程单和电子发票,金额只按电子发票计入一次;行程单只作为附件和行程明细使用,不要与发票重复计入金额。
|
||||||
8. 如果某个字段无法可靠判断,必须先问用户,不要编造;在未确认前不要填表。
|
8. 如果某个字段无法可靠判断,必须先问用户,不要编造;在未确认前不要填表。
|
||||||
9. 将最终 JSON 保存到本次处理目录中的 `报销输出/analyzed_result.json`,JSON 必须符合 README 中的 schema。
|
9. **复核**:重新读取 `pdf_raw_text.txt`,逐项核对生成的 JSON 是否与 PDF 原文中金额、日期、人员等信息一致;如果发现错误,修正后重新生成 JSON。
|
||||||
10. 确认 `questions` 为空、金额合计一致、附件张数一致后,运行 `python3 差旅报销.py fill 本次处理目录/报销输出/analyzed_result.json` 生成最终 Excel,并把本次目录重命名为 `出发日期-结束日期_出发地-目的地_事由简写` 格式。
|
10. 将最终 JSON 保存到本次处理目录中的 `报销输出/analyzed_result.json`,JSON 必须符合 README 中的 schema。
|
||||||
11. 最后告诉用户生成的 Excel 文件路径和本次归档目录,并列出需要人工复核的证据或假设;如果存在行程单和电子发票对应同一笔费用,必须明确提醒用户:行程单未重复计入金额,只作为附件和行程明细使用。
|
11. 确认 `questions` 为空、金额合计一致、附件张数一致后,运行 `python3 差旅报销.py fill 本次处理目录/报销输出/analyzed_result.json` 生成最终 Excel,并把本次目录重命名为 `出发日期-结束日期_出发地-目的地_事由简写` 格式。
|
||||||
|
12. 最后告诉用户生成的 Excel 文件路径和本次归档目录,并列出需要人工复核的证据或假设;如果存在行程单和电子发票对应同一笔费用,必须明确提醒用户:行程单未重复计入金额,只作为附件和行程明细使用。
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
@ -337,42 +432,6 @@ python3 差旅报销.py schema --output
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Step 3:读取 JSON 并填表
|
|
||||||
|
|
||||||
```bash
|
|
||||||
python3 差旅报销.py fill 20260529/报销输出/analyzed_result.json
|
|
||||||
```
|
|
||||||
|
|
||||||
Windows 可用:
|
|
||||||
|
|
||||||
```powershell
|
|
||||||
py 差旅报销.py fill 20260529/报销输出/analyzed_result.json
|
|
||||||
```
|
|
||||||
|
|
||||||
脚本会:
|
|
||||||
|
|
||||||
1. 校验 JSON 字段是否完整
|
|
||||||
2. 校验金额合计是否一致
|
|
||||||
3. 校验附件张数是否一致
|
|
||||||
4. 复制 `差旅费明细表.xlsx`
|
|
||||||
5. 用 openpyxl 填入固定单元格
|
|
||||||
6. 输出最终 XLSX 到本次处理目录的 `报销输出/`
|
|
||||||
7. 将本次处理目录重命名为 `出发日期-结束日期_出发地-目的地_事由简写` 格式
|
|
||||||
|
|
||||||
输出文件命名规则:
|
|
||||||
|
|
||||||
```text
|
|
||||||
差旅费明细表_[出差人]_[出发日期YYYYMMDD]_[目的地]_[事由简写].xlsx
|
|
||||||
```
|
|
||||||
|
|
||||||
示例:
|
|
||||||
|
|
||||||
```text
|
|
||||||
20260520-20260522_北京-广州_售后维修/报销输出/差旅费明细表_xxxx_20260520_广州_售后维修.xlsx
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Excel 填写位置
|
## Excel 填写位置
|
||||||
|
|
||||||
脚本只填写这些单元格:
|
脚本只填写这些单元格:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user