Topics

我需要一份採購訂單,所以我使用 Claude Code 建立了一個採購訂單產生工具(桌面應用程式)。

  • column

每當我們日常工作中遇到一些過於繁瑣而無法繼續手動完成的事情時,使用 Claude Code 創建一個小型系統就成了司空見慣的做法!

這個故事就是個完美的例子,而這一切都始於我們增加了公司的資本。

我們的財政年度從二月開始,此次增資也發生在二月。然而,隨著資金的增加,我們現在需要更細緻地組織與外部合作夥伴和協作公司的訂購流程。

這部分內容稱為《分包法》,根據現行製度,從2026年1月起將更名為《分包法》。訂購方將需要處理更多事項,例如明確說明訂單詳情、建立和保存交易文件以及設定付款期限。

當然,這不僅僅是“我們必須這樣做,因為這是法律規定”的問題!

將工作外包給外部合作夥伴時,客戶和服務提供者都必須明確定義訂單詳情、價格、日期以及與報價單的往來。

此功能並非會計工具自備的功能。

本公司使用 MoneyForward(以下簡稱 MoneyForward)工具進行會計、報價和開立發票。
它很適合日常的會計和帳單處理工作,但我這次想做的事情略有不同。

根據從外部合作夥伴收到的報價 PDF,我們為 Liberogic 建立採購訂單 PDF。

至少就我們公司的使用範圍而言,MoneyForward 的功能並不完全符合我們的需求,僅僅為了這個目的而訂閱該服務是浪費錢。

如果要手動完成,

  • 建立採購訂單格式
  • 手動將報價單上的資訊謄寫成採購訂單格式。
  • 請填寫訂單日期。
  • 抄錄引號。
  • 轉錄細節
  • 請核對總金額及其他詳情。
  • 格式化檔案名稱
  • 其他雜項…

這項額外的任務很麻煩……所以我決定把它創建出來。

利用克勞德代碼,不到一個小時就投入了實際應用。

時機也恰到好處。

2 月是財政年度的開始,2 月是資本增加的月份,同時發布的還有 Claude Code,以及我們的員工對該準則的採納,所有這些時間點都恰好相同。

當時,公司內部正興起一場類似黑客馬拉鬆的運動,人們使用 Claude Code 等工具來創建業務改進工具、小型內部應用程序,甚至部署一些自發的想法!

從最基本的規格概述到 Claude Code 的使用說明,包括微調…

不到一個小時,我就把它修好了,達到了可以使用的狀態。

當然,你不能把所有事情都交給人工智慧,然後指望它完成,但是如果你把它正確地轉換成提示,它就能快速便捷地完成!

桌面應用程式已完成

這是一個簡單的採購訂單產生工具,可以在您可能已經使用的作業系統上運行。

請將報價單PDF文件寄至指定聯絡人。.app當您拖放檔案時,將執行一個 Python 腳本,該腳本將讀取報價單 PDF 的內容,並在同一資料夾中產生採購訂單 PDF。
完成後,整個過程很簡單,macOS 上會顯示通知,並自動開啟產生的採購訂單 PDF。

結構如下:

~/Desktop/產生採購訂單/

刪除報價單 → 產生採購訂單.app

_lib/

generate_purchase_order.py

liberogic_logo.png

liberogic_seal.png

purchase_order_counter.json

為了方便會計和行政人員在不打開終端的情況下使用它,我們使用 AppleScript droplet 作為入口點,實際的 PDF 生成過程由 Python 處理。

簡而言之,只需將報價單 PDF 文件放入即可。一款桌面應用程序,可透過拖放操作產生 PDF 採購訂單。無需打開終端即可使用,即使是內部管理任務也易於操作。

採購訂單 PDF 的設計與我們公司使用的發票和報價單 PDF 格式相似。
以下文字包含在備註欄中:

本採購訂單構成正式訂單。該訂單依據報價單號XXX下達。

訂單號碼格式如下:

{会社略称}様 発注書{YYYY}{MM}{3桁連番}

例如,如果這是 XX 先生/女士在 2026 年 2 月的第一件物品,

親愛的XX先生/女士:採購訂單202602001

它看起來會像這樣。

按公司和月份排列的順序編號是purchase_order_counter.json系統會自動處理訂單,訂單日期將自動計算為報價單日期後的5個工作天。 (這只是一個臨時規定!管理層稍後會進行更改!)
為了排除週六、週日以及日本的公共假日,Pythonjpholiday我用過。

只有幾個稍微難一點的部分。

採購訂單的基礎報價來自外部合作夥伴和合作公司,因此格式因公司而異。
僅僅假設「公司名稱位於此座標」或「總金額位於此位置」是不夠的。

最終,這個過程涉及使用正則表達式盡可能靈活地提取供應商名稱、地址、電話號碼、報價單號、報價日期、主題、詳細信息、小計、消費稅和總計,將帶有“Attn:”的公司視為我們自己的公司,將其他公司視為供應商,並處理諸如在從 PDF 中提取文本時,視覺上看起來分開的信息合併到文本中之類的問題。

由於有些郵件主旨行後面會包含建築物名稱或樓層號,我們增加了一個流程,使用「建築物」和「樓層」等字眼作為線索來過濾掉不必要的地址資訊。

無論是人工智慧還是其他什麼技術,這仍然是PDF處理中常見的問題。

提示已傳遞給克勞德·科德

與其提出模糊的請求,不如盡可能具體地使用令牌,包括資料夾結構、處理流程、佈局、編號規則、工作日計算、PDF 提取項目等,這樣更經濟。
我們還要讓他們閱讀範例 PDF 檔案!

以下の条件で、見積書PDFを発注書PDFに自動変換するツールをmacOS向けに作ってください。

## 環境

- macOS / Python3(pip可)
- フォント:`~/Library/Fonts/NotoSansJP-Regular.ttf` / `NotoSansJP-Bold.ttf`

## フォルダ構成

`~/Desktop/発注書生成/
  見積書をドロップ→発注書生成.app
  _lib/
    generate_purchase_order.py
    liberogic_logo.png
    liberogic_seal.png
    purchase_order_counter.json`

## 処理フロー

1. `.app` に見積書PDFをドラッグ&ドロップ
2. Pythonスクリプトを実行し発注書PDFを生成
3. 完了通知(macOS通知)を出して発注書PDFを自動で開く
4. 発注書PDFは見積書と同じフォルダに保存

## 発注書の仕様

出力フォーマットは添付のMoneyForward形式のPDFに合わせること。

このPDFから以下を抽出して使う:

- ロゴ画像
- 押印画像
- レイアウト座標
- 列幅
- 余白
- フォントサイズ

## 自社情報

リベロジック株式会社
登録番号:T2010401081132
〒108-0073 東京都港区三田1-3-37 板金会館2F
TEL: 03-6809-4366 / FAX: 03-6809-4367

## 発注書番号

- 形式:`{会社略称}様 発注書{YYYY}{MM}{3桁連番}`
- 会社別・月別の連番を `purchase_order_counter.json` で管理
- 出力ファイル名もこの発注書番号に揃える

## 発注日

- 見積書の日付から5営業日後
- 土日と日本の祝日を除外する

## 見積書からの情報抽出

- どんな会社のフォーマットでも対応できる柔軟な正規表現で抽出
- 抽出項目:ベンダー名・住所・TEL、見積書番号、見積日、件名、明細、小計・消費税・合計
- ベンダー判定:「御中」の付いた会社=自社、それ以外=発注先
- 件名に住所の建物名が混入するケースに対応

## 発注書レイアウト

- タイトル「発注書」中央大文字
- 左:発注先の社名・住所・TEL
- 右:自社情報+ロゴ+押印+発注書番号・発注日・見積書番号・見積日
- 件名・発注金額を大きく表示
- 明細テーブル:品目/単価/数量/単位/価格
- 交互グレー背景
- 最低8行
- 合計エリア:小計・消費税・合計のみ
- 備考欄を枠付きで表示
- ページ番号なし

雖然它本質上是一份簡化的規範文件,但重要的是要盡可能詳細地說明業務限制和所需的最終產品,而是簡單地說「讓它看起來漂亮」。
最後,當我嘗試讓它讀取不同的格式時,它失敗了,所以我需要克勞德更加努力工作,但它仍然很快,所以我想還不錯。
(我們合作的外部員工和合作夥伴人數甚至不到兩位數,所以這沒什麼大不了的!)

因為它非常方便,所以我們也需要注意它的安全性。

另一方面,在使用人工智慧開發支援時,不僅需要考慮便利性,還需要考慮安全性。

在您依照流程操作並向 Claude Code 發出指令的過程中,將會在您的本地環境中執行幾個操作。

- 讀取並寫入 ~/Desktop 目錄下的文件

- 考慮存取 ~/Library/Services/ 目錄

- 使用 pip install 新增 Python 函式庫

- 使用 osacompile 產生 AppleScript 應用程式

- 讀取位於 ~/Library/Fonts/ 目錄下的字型文件

這雖然不是什麼特別重要的事,但賦予人工智慧在本地環境中執行權限還是有點擔心,不是嗎? 😨

當終端操作或文件操作委託給系統時,可能會出現意外的文件建立/覆蓋/刪除的情況。

  • 檢查一下你允許了什麼!
  • 請務必備份!
  • 凡是可以用 Git 管理的東西,都要檢查一下差異!
  • 讓我們建立單獨的工作資料夾!

這些基本措施很重要。如果您將其用於開發工作,最好透過 1Password 載入 .env 檔案。雖然有點麻煩,但效果顯著。 (作者)我們的首席技術官

另一方面,就像本案一樣。若僅供本地環境使用,風險相對較小。在大多數情況下,這種影響很少會透過網路向外擴散,最糟的情況也只是影響到自身的環境。

還有很多其他需要注意的地方,但「快速創建」和「安全使用」是兩回事。在使用人工智慧進行開發時,請務必隨時檢查執行權限、文件操作、外部程式庫以及輸入資料的處理方式!

接下來,我們將專注於人員共享以及與 Supabase 的整合。

所以,這次我創建的是一個簡單的採購訂單產生工具,它可以在本地環境中運作。

在初始階段,purchase_order_counter.json我們已經建立了一個系統,用於按公司和月份管理順序編號,但考慮到將來我們會與員工共享此系統,僅使用本地 JSON 文件管理順序編號自然會導致採購訂單號重複等問題。

因此,我計劃在 Supabase 端實現公司特定和月度計數器,這樣即使多人使用也不會出現重複的順序編號,並且還會添加採購訂單簽發歷史記錄、供應商、報價單號、訂單金額、訂單日期和 PDF 保存位置等功能!

撰稿人

儘管身為首席執行官,他始終保持著平易近人的姿態。他樂於了解新技術,並享受科技帶來的便利,他是個親力親為、全心投入的人。他對未來科技充滿熱情,並希望無論年齡多大都能繼續體驗新事物。

Morimoto

專案經理/總監/成立於2007年

看看這位員工的文章

我們以可靠的團隊結構和快速的回​​應能力而自豪。

在 Liberogic,我們經驗豐富的員工積極推動專案進展,這也是我們受到客戶高度評價的原因。
我們確保專案經理和主管得到合理分配,以確保整個專案的順利進行。 我們避免因全額承諾而導致不必要的成本增加,並將資源分配給合適的人員和合適的職位,並以快速掌握工作內容、創建和提交預算而聞名。

請注意,我們不積極參與SES式的現場工作。

我們支援幾乎所有主流的專案管理和聊天工具,包括 Slack、Teams、Redmine、Backlog、Asana、Jira、Notion、Google Workspace、Zoom 和 Webex。

如果您有任何與網路相關的問題,請與我們聯絡。

案例研究