發票轉庫存登錄技能
目標:將一批來自一個或多個供應商的採購發票與收據(照片、XML 或連結)轉換為經過核對的庫存表登錄項目:包含新產品建檔、補貨數量加總、更新平均成本與產生建議售價。
Trentin Solutions 提供的免費技能 · 由 Ivaldo Trentin 建立 · trentinsolutions.com.br · 版本 1.0 可自由使用,包含商業用途,但需保留此版權聲明(詳見 LICENSE.md)。
固定規則(永不違反)
- 未經核對絕不寫入。 若發票各項金額加總與列印總額不符,則該發票不會被登錄,直到使用者決定如何處理。
- 寫入前必須預覽。 顯示將要登錄的內容,並等待使用者確認「OK」。
- 現有試算表不可侵犯: 絕不刪除、重新排序或覆蓋資料,也絕不寫入含有公式的儲存格。僅可新增列。若為 Excel,則在副本上作業。
- 每張發票僅登錄一次。 在登錄前,先於試算表中搜尋該發票的存取金鑰(或供應商名稱+發票號碼)。
- 不憑空捏造。 無法辨識的段落須向使用者提問。由技能建立的代碼需標記為「暫定」;計算出的價格需標記為「建議售價」。
- 不解 SEFAZ 的 CAPTCHA,也不輸入密碼。
- 此技能不會在網路上搜尋產品圖片。
技能檔案
references/leitura.md:如何讀取 XML、QR Code、無 QR 的照片及無發票的採購;組合包;採購 vs 費用。references/formato.md:每張發票的 JSON 格式及設定檔格式。references/planilhas.md:新試算表、現有 Excel、Google Sheets 連結及欄位對應。scripts/ler_xml_nfe.py、scripts/ler_qrcode.py、scripts/lancar.py(核對 → 比對 → 寫入試算表)。
請建立任務清單:目標 → 批次 → 讀取 → 核對 → 比對 → 預覽 → 寫入 → 報告。
步驟 1 — 目標與定價規則(提問)
若可用,請使用帶選項的提問工具(AskUserQuestion);否則以文字提問。若使用者已說明,則不再重複詢問。
- 「您想將資料登錄到哪裡?」
- 我已有的 Google Sheets 試算表(請提供連結)
- 我已有的 Excel 檔案(請附加檔案)
- 新的試算表(Google Sheets 或 Excel)
- 定價:「您使用的加成倍數是多少?」(例如 2× = 以成本兩倍價格銷售)與「您希望將價格調整為整數嗎(例如 R$ 5、8、10、12…)?」。若試算表中已有 Config 工作表,或可從已建檔產品的平均加成(售價 ÷ 成本)計算出該值,則直接採用該值,不再提問。
- 僅在首次使用現有試算表時:讀取其結構並顯示欄位對應表(詳見
planilhas.md)供使用者確認。
將回答記錄在 trabalho/config.json 中(格式見 formato.md)。若為新試算表,這些設定將寫入 Config 工作表,且不再重複詢問。
若無人跟進(排程任務):建立新的 Excel 試算表,使用 2× 加成倍數並啟用整數定價,並在交付時於頂端備註此選擇。
步驟 2 — 收件
使用者可以一次傳送所有資料:多張照片、PDF、XML 和連結,可能來自不同供應商,混合在一起。
- 列出收到的所有檔案。
- 按發票分組:同一張發票可能有多張照片(詳見
leitura.md),同一張收據可能被拍了兩次。 - 在開始讀取前,顯示簡短摘要:「共找到來自 4 家供應商的 7 張發票:2 個 XML、3 張有 QR Code 的收據、2 張無 QR 的發票照片。其中 1 張照片似乎是重複的。」
步驟 3 — 讀取每張發票
遵循 references/leitura.md,務必使用最可靠的來源:
- XML →
python scripts/ler_xml_nfe.py arquivos/*.xml --saida trabalho/notas - 有 QR Code 的收據 →
python scripts/ler_qrcode.py fotos/*.jpg --json trabalho/qrcodes.json,開啟 SEFAZ 查詢連結並轉錄品項。若查詢需要 CAPTCHA,則改由照片讀取。 - 無 QR Code → 逐行轉錄照片內容,核對每列的數量 × 單價。
每張發票會產生 trabalho/notas/<名稱>.json。若遇到組合包(fator)及非轉售品項(`