From 20892346c5f9884682d3e557b76f2d42bd6c3dd9 Mon Sep 17 00:00:00 2001 From: copper-xw Date: Fri, 29 May 2026 16:32:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A4=8D=E6=A0=B8=E6=AD=A5?= =?UTF-8?q?=E9=AA=A4=EF=BC=8C=E4=BC=98=E5=8C=96=E5=B7=AE=E6=97=85=E6=8A=A5?= =?UTF-8?q?=E9=94=80=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 Step 3(复核):生成 JSON 后必须重新读取 pdf_raw_text.txt 逐项核对 - 自动执行入口新增复核步骤(第7条) - 给大模型的推荐提示词新增复核指令(第9条) - 详细列出 6 项复核清单:金额、人员、日期、费用分类、行程单处理、单据张数 --- README.md | 165 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 112 insertions(+), 53 deletions(-) diff --git a/README.md b/README.md index bbf9400..49f75a9 100644 --- a/README.md +++ b/README.md @@ -21,8 +21,9 @@ 4. 读取本次处理目录中的 `报销输出/pdf_raw_text.txt`,按本文的 JSON Schema 分析出差人、日期、事由、费用分类、金额和证据。 5. 如果同一笔滴滴/打车费用同时有行程单和电子发票,金额只按电子发票计入一次;行程单只作为附件和行程明细使用,不要与发票重复计入金额。 6. 如果出差人、出差事由、出发地、目的地、日期、金额等关键信息无法从原文可靠判断,必须先问用户;不要编造。 -7. 将最终 JSON 保存为本次处理目录中的 `报销输出/analyzed_result.json`。 -8. 确认 `questions` 为空、金额合计一致、附件张数一致后,自动运行: +7. **复核**:重新读取 `pdf_raw_text.txt`,逐项核对生成的 JSON 是否与 PDF 原文中金额、日期、人员等信息一致;如果发现错误,修正后重新生成 JSON。 +8. 将最终 JSON 保存为本次处理目录中的 `报销输出/analyzed_result.json`。 +9. 确认 `questions` 为空、金额合计一致、附件张数一致后,自动运行: ```bash 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 py -m pip install pdfplumber openpyxl ``` -运行时使用: - -```powershell -py 差旅报销.py extract -py 差旅报销.py fill 20260529/报销输出/analyzed_result.json -``` - -### Linux / macOS +#### Linux / macOS ```bash python3 -m pip install pdfplumber openpyxl ``` -运行时使用: +--- + +### 第三步:验证安装 ```bash -python3 差旅报销.py extract -python3 差旅报销.py fill 20260529/报销输出/analyzed_result.json +python3 -c "import pdfplumber, openpyxl; print('依赖安装成功')" ``` +如果提示 `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 ``` +### 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 @@ -247,9 +341,10 @@ python3 差旅报销.py schema --output 6. 每个金额必须写入 evidence,说明来自哪个文件、依据是哪段文本。 7. 如果同一笔滴滴/打车费用同时有行程单和电子发票,金额只按电子发票计入一次;行程单只作为附件和行程明细使用,不要与发票重复计入金额。 8. 如果某个字段无法可靠判断,必须先问用户,不要编造;在未确认前不要填表。 -9. 将最终 JSON 保存到本次处理目录中的 `报销输出/analyzed_result.json`,JSON 必须符合 README 中的 schema。 -10. 确认 `questions` 为空、金额合计一致、附件张数一致后,运行 `python3 差旅报销.py fill 本次处理目录/报销输出/analyzed_result.json` 生成最终 Excel,并把本次目录重命名为 `出发日期-结束日期_出发地-目的地_事由简写` 格式。 -11. 最后告诉用户生成的 Excel 文件路径和本次归档目录,并列出需要人工复核的证据或假设;如果存在行程单和电子发票对应同一笔费用,必须明确提醒用户:行程单未重复计入金额,只作为附件和行程明细使用。 +9. **复核**:重新读取 `pdf_raw_text.txt`,逐项核对生成的 JSON 是否与 PDF 原文中金额、日期、人员等信息一致;如果发现错误,修正后重新生成 JSON。 +10. 将最终 JSON 保存到本次处理目录中的 `报销输出/analyzed_result.json`,JSON 必须符合 README 中的 schema。 +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 填写位置 脚本只填写这些单元格: