Issue #161 — 全パイプラインの要件・フロー・データモデルの統合整理 | 2026-04-06
合同会社MNMLの月次業務を自動化するパイプライン群。経費処理、請求書管理、メール振り分け、作業報告書作成、TFHD案件の月次フロー、ニュース巡回など、毎月繰り返す定型業務をプログラムで処理する。
すべてのパイプラインはMac mini上で動作し、Slackを通じてCEOに通知・確認を行う。
現在 9つのパイプライン(+1つ設計中)で構成される。
| パイプライン | ひとことで言うと | 状態 | 頻度 |
|---|---|---|---|
accounting |
経費を自動仕訳してMFクラウドに登録 | 稼働中 | 月次 |
invoice |
MFクラウドの請求書を確定しPDFを取得 | 稼働中 | 月次 |
tfhd |
TFHD案件の月次報告・請求の一連フロー | 稼働中 | 月次 |
mnml |
MNML委託先の請求書受領・支払い管理 | 稼働中 | 月次 |
mail_filing |
メール添付ファイルを自動で振り分け・保管 | 稼働中 | 日次 |
work_report |
カレンダーから月次作業報告書(Excel)を生成 | 稼働中 | 月次 |
scheduler |
カレンダーの空き時間を検索・会議を設定 | 稼働中 | 随時 |
news_reminder |
AI・金融ニュースの巡回と通知 | 稼働中 | 日次 |
contract |
契約情報の一元管理(顧客・委託先) | 設計中 | 随時 |
やること:MFクラウド経費から連携明細を取得し、ルールに基づいて勘定科目を自動判定。LLMによる推定も併用し、最終的にMFクラウドに登録する。
| 項目 | 内容 |
|---|---|
| 処理の流れ | スクレイピング → ルール適用 → LLM推定 → 手動調整 → 登録 → レポート生成 |
| 外部サービス | MFクラウド経費(OAuth2 + Playwright)、Amazon API |
| 入力 | MFクラウド連携明細、Amazon注文履歴 |
| 出力 | 仕訳結果CSV、登録済みID、HTML月次レポート |
| データ | ops/accounting/data/rules.csv(仕訳ルール)、expenses/YYYYMM/(月別作業データ) |
| トリガー | 月次(第2金曜)、手動CLI |
| CEOの関与 | 手動調整の確認、登録前の最終承認 |
manual_overrides.csv)を持つ--dry-runで確認できるやること:MFクラウド請求書APIで当月の下書きを確定し、PDFをダウンロードして保管する。
| 項目 | 内容 |
|---|---|
| 処理の流れ | 状態確認 → 一覧取得 → 下書き確定 → PDF取得・保存 |
| 外部サービス | MFクラウド請求書API(OAuth2 + PKCE) |
| 入力 | MFクラウドの下書き状態請求書 |
| 出力 | 確定済みPDF(data/invoices/YYYYMM/) |
| トリガー | 月次(第3金曜頃)、手動CLI |
| CEOの関与 | なし(自動処理) |
--dry-runで対象を確認できるやること:TFHD向けコンサル案件の月次業務を一貫して自動化する。メール受領確認からお礼返信、作業報告書生成、請求書PDF取得、納品メール下書きまで6ステップで処理する。
| 項目 | 内容 |
|---|---|
| 処理の流れ | 対象者特定 → 受領確認 → お礼返信 → 報告書作成 → 請求書取得 → メール下書き → CEO送信 |
| 外部サービス | Outlook(メール/カレンダー)、SharePoint、MFクラウド請求書API、Slack |
| 入力 | 委託先からのメール(報告書・請求書)、カレンダーイベント |
| 出力 | お礼メール送信、作業報告書Excel、請求書PDF、TFHD宛メール下書き |
| トリガー | 月初(手動CLI / ステップ連鎖) |
| CEOの関与 | 報告書内容の確認(約3分)、納品メールの送信(約2分) = 合計約5分/月 |
※ 詳細は 第6章「TFHD月次フローの詳細」を参照。
やること:MNML自社案件の委託先(森屋、小川さとこ、Josh等)から届く請求書を受領・保管し、支払い通知をSlackに送る。
| 項目 | 内容 |
|---|---|
| 処理の流れ | メール受領チェック → SharePoint保管 → お礼返信 → 支払い通知 |
| 外部サービス | Outlook(メール)、SharePoint、Slack |
| 入力 | 委託先からのメール(請求書添付) |
| 出力 | SharePointへの保管、Slack支払い通知 |
| データ | tfhd/app/data/targets.jsonのclient="MNML"エントリ、mail_filing/data/received_YYYYMM.json |
| トリガー | 月次、手動CLI |
| CEOの関与 | なし(通知を確認するのみ) |
/10_Corporate/accounting/40_仕入れ請求/{委託先名})に保管する#bo-notification へ支払い通知を投稿するやること:Outlookの受信メールから添付ファイルを自動取得し、ルールに従ってSharePointの各フォルダに振り分ける。処理結果をSlackのダイジェストで通知する。
| 項目 | 内容 |
|---|---|
| 処理の流れ | メール取得 → 添付ファイル保存 → 振り分け → 既読化 → ダイジェスト通知 |
| 外部サービス | Outlook(MS Graph)、SharePoint、Slack、Playwright(ブラウザ取得型) |
| 入力 | Outlook受信メール |
| 出力 | SharePointの各フォルダへのファイル配置、Slackダイジェスト |
| データ | data/rules.json(振り分けルール)、data/processed.json(処理済みID) |
| トリガー | 日次(毎朝8時)、手動CLI |
| CEOの関与 | なし(ダイジェストを確認するのみ) |
~/OneDrive/20_AI/00_受領一時)→ 正式保存先へ2段階で振り分けるreceived_YYYYMM.json)を他パイプライン(tfhd, mnml)と共有するやること:OutlookカレンダーからCEO(内山)の月間イベントを取得し、作業報告書(Excel)を自動生成する。
| 項目 | 内容 |
|---|---|
| 処理の流れ | カレンダーイベント取得 → キーワード分類 → Excel生成 |
| 外部サービス | Outlook カレンダー(MS Graph)、SharePoint(保存先) |
| 入力 | Outlookカレンダーイベント |
| 出力 | Excel(作業報告書_YYYYMM_TFHD_合同会社MNML_内山.xlsx) |
| データ | data/keywords.json(カテゴリ分類ルール)、data/events_YYYYMM.json(キャッシュ) |
| トリガー | 月次(第3金曜頃)、手動CLI |
| CEOの関与 | 報告書内容の確認(カレンダーが正しく反映されているか) |
/60_TFHD/30_成果物/{year}/)に配置するやること:Outlookカレンダーの空き時間を検索し、相手との共通空き時間を見つけ、会議を設定する。
| 項目 | 内容 |
|---|---|
| 機能 | 空き時間抽出、相手との共通空き時間検索、カレンダー直接登録 |
| 外部サービス | Outlook カレンダー(MS Graph) |
| トリガー | 随時(手動CLI) |
| CEOの関与 | 調整依頼時のみ |
やること:AI・金融分野のニュースを11のソースから自動巡回し、関連度をLLMで評価してSlackに通知する。重要な技術トピックはGitHub Issueに自動起票する。
| 項目 | 内容 |
|---|---|
| 処理の流れ | RSS/API巡回 → LLM評価(Haiku) → Slack通知 / Issue起票 |
| 外部サービス | RSS/arXiv/Hacker News、Anthropic Haiku、GitHub API、Slack |
| 入力 | 11ニュースソース(primary 7 + secondary 4) |
| 出力 | Slack #news-reminder への通知、GitHub Issue |
| データ | data/sources.json、data/scanned.json(処理済み追跡)、data/holdings.json(保有銘柄) |
| トリガー | 日次(毎朝7時 + 8時/12時/18時)、手動CLI |
| CEOの関与 | なし(通知を確認するのみ) |
やること:顧客(売上側)と委託先(仕入側)の契約情報を一元管理する。契約期間の管理、更新通知、金額照合の基盤となるマスターデータを提供する。
| 項目 | 内容 |
|---|---|
| 機能 | 契約一覧・詳細表示、契約追加、期限チェック・通知 |
| 外部サービス | Slack(通知)、SharePoint(将来:契約書PDF保管) |
| 入力 | CEO手入力(初期データ)、将来的にSharePoint自動連携 |
| 出力 | JSON(ops/contract/app/data/contracts.json)、Slack通知 |
| トリガー | 随時(CLI)、定期チェック(将来) |
| CEOの関与 | 初期データ投入、契約追加時 |
※ 詳細は 第7章「契約管理パイプラインの位置づけ」を参照。
全パイプラインの関係性、外部サービス連携、データの流れを俯瞰する図。
どのパイプラインが何を参照しているか、データがどう流れるかを整理する。
| 呼び出す側 ↓ / 呼ばれる側 → | shared | invoice | work_report | mail_filing | contract |
|---|---|---|---|---|---|
| accounting | OAuth, Slack | — | — | — | — |
| invoice | OAuth | — | — | — | — |
| tfhd | OAuth, Slack, Graph | Step4: PDF取得 | Step3: Excel生成 | Step1: 受領状態 | 将来: 契約参照 |
| mnml | Graph, Slack | — | — | 受領状態共有 | 将来: 契約参照 |
| mail_filing | Graph, Slack | — | — | — | — |
| work_report | Graph, OAuth | — | — | — | — |
| scheduler | Graph, OAuth | — | — | — | — |
| news_reminder | Slack | — | — | — | — |
| contract | Slack | — | — | — | — |
| データファイル | 場所 | 書き込む側 | 読み込む側 |
|---|---|---|---|
| 受領状態 | mail_filing/data/received_YYYYMM.json |
mail_filing, tfhd | tfhd, mnml |
| 対象者リスト | tfhd/app/data/targets.json |
CEO(手動) | tfhd, mnml |
| 振り分けルール | mail_filing/data/rules.json |
CEO(手動) | mail_filing |
| 契約マスター | contract/app/data/contracts.json |
CEO(手動)→ contract CLI | 将来: tfhd, invoice, mnml |
| DocID台帳 | tfhd/app/data/docid_ledger.json |
tfhd | tfhd |
| ステップ実行状態 | tfhd/app/data/step_state_YYYYMM.json |
tfhd | tfhd |
いつ何が動くかの全体スケジュール。
TFHD案件の月次業務フロー。6ステップ(+Step 0)で構成され、他パイプラインを統合的に呼び出す。
| ステップ | 内容 | 自動化 | 利用するパイプライン | 開発状況 |
|---|---|---|---|---|
| Step 0 | 対象者特定 — SharePoint契約フォルダから稼働中の委託先を動的に抽出 | 全自動 | —(SP直接走査) | 未実装 |
| Step 1 | 受領・振り分け — 委託先からの作業報告書・請求書メールを検知し、SharePointへ配置 | 全自動 | mail_filing | 稼働中 |
| Step 2 | お礼返信 — 受領確認後、定型文でお礼メールを自動送信 | 全自動 | —(Graph Mail直接) | 一部実装 |
| Step 3 | 作業報告書 — CEO(内山)の作業報告書をExcel生成。CEOが内容を確認 | 半自動 | work_report | 稼働中 |
| Step 4 | 請求書取得 — MFクラウドのWF状態を確認し、完了後にPDFを取得 | 全自動 | invoice | 一部実装 |
| Step 5 | メール下書き — TFHD宛の納品メールを下書き。全成果物を添付 | 全自動 | —(Graph Mail直接) | 一部実装 |
| Step 6 | CEO送信 — CEOがメール内容を確認し、手動で送信ボタンを押す | 手動 | — | 稼働中 |
現在はtargets.jsonにハードコードされた委託先リストを参照している。将来はcontractパイプラインのcontracts.jsonを参照し、契約期間内の委託先を自動的に抽出する。
period_start〜period_end)で自動フィルタ → 契約終了者は自動除外、新規追加者は自動含入| ステップ | メールの性質 | 判断 | 理由 |
|---|---|---|---|
| Step 2(お礼) | 社内的な定型挨拶 | 全自動送信 | テンプレート固定、リスクなし |
| Step 5→6(納品) | 外部顧客(TFHD)宛 | CEO確認後に手動送信 | 顧客向けは内容が月ごとに変わりうる |
MNML自社案件の委託先(森屋、小川さとこ、Josh等)からの請求書受領・保管・支払い通知フロー。 委託先ごとに処理差異があり、全員の請求書が揃った時点で支払い一括通知を行う。
| ステップ | 内容 | 自動化 | 利用するパイプライン |
|---|---|---|---|
| Step A | 対象者特定 — targets.jsonのclient="MNML"エントリから稼働中の委託先を抽出 |
全自動 | —(targets.json直接参照) |
| Step B | メール受領チェック — 各委託先から請求書メールが届いているか確認 | 全自動 | mail_filing(受領状態ファイル参照) |
| Step C | SharePoint保管 — 請求書添付ファイルを委託先別フォルダに配置 | 全自動 | mail_filing(振り分けルール適用) |
| Step D | お礼返信 — 受領確認後、委託先へ定型お礼メールを自動送信 | 全自動 | —(Graph Mail直接) |
| Step E | 全員揃いチェック — 全委託先の請求書が受領済みか判定 | 全自動 | —(received_YYYYMM.json照合) |
| Step F | 金額照合 — 各請求書の金額が契約金額(contracts.json / targets.json)と一致するか検証 | 半自動 | contract(将来) |
| Step G | 支払い一括通知 — Slack #bo-notification に全委託先分の支払い一覧を投稿 |
全自動 | —(Slack通知) |
| 委託先 | 請求書の届き方 | SharePoint保管先 | 金額照合の基準 |
|---|---|---|---|
| 森屋 | メール添付(PDF) | /10_Corporate/accounting/40_仕入れ請求/森屋/ |
targets.json の月額(将来: contracts.json) |
| 小川さとこ | メール添付(PDF) | /10_Corporate/accounting/40_仕入れ請求/小川/ |
targets.json の月額(将来: contracts.json) |
| Josh | メール添付(PDF / Invoice) | /10_Corporate/accounting/40_仕入れ請求/Josh/ |
targets.json の月額(将来: contracts.json) |
| (新規委託先) | targets.jsonに追加時点で自動認識 | 委託先名でフォルダ自動生成 | 同上 |
判定基準: targets.jsonのclient="MNML"全エントリに対し、
received_YYYYMM.jsonで受領済みフラグが立っていること。
冪等性: 一括通知は月に1回のみ発行。step_state_YYYYMM.jsonに
mnml_payment_notified: trueを記録し、二重通知を防ぐ。
| 項目 | TFHDフロー | MNMLフロー |
|---|---|---|
| 作業報告書 | CEOの報告書をExcel自動生成(Step 3) | なし(委託先から受領するのみ) |
| 請求書 | MFクラウドからPDF取得(Step 4) | 委託先からメールで受領 |
| 納品メール | TFHD宛に下書き → CEO送信(Step 5-6) | なし(支払い通知のみ) |
| 金額照合 | MFクラウドWF確認 | 受領請求額 vs 契約金額の突合 |
| 支払い通知 | なし(MNMLが請求する側) | 全員分を一括でSlack通知 |
| CEO関与 | 報告書確認 + メール送信(約5分) | 通知確認のみ(金額不一致時のみ対応) |
現在、契約に関する情報は複数箇所に分散している:
tfhd/app/data/targets.json — 委託先の名前・メール・クライアント情報mail_filing/data/rules.json — メール振り分けルールの中に委託先情報これを1つのJSONファイルに集約し、全パイプラインが参照できるマスターデータにする。
| フィールド | 型 | 説明 |
|---|---|---|
id | str | 一意のID(C=顧客, S=委託先。例: C001, S001) |
type | "sales" | "purchase" | 顧客契約(売上)か委託先契約(仕入)か |
counterparty | str | 相手先の名前(会社名または個人名) |
vdu | list[str] | 関連するVDU(事業単位)のリスト |
amount | int | 月額金額(税抜、円、整数) |
period_start | date | 契約開始日 |
period_end | date | 契約終了日 |
status | "active" | "expired" | "terminated" | 契約状態 |
payment_cycle | str | 支払いサイクル(例: "monthly") |
report_due_day | int | null | 報告書の提出期限日(1〜31) |
sharepoint_path | str | null | SharePoint上の契約書保管パス |
invoice_folder | str | null | 請求書の保管フォルダパス |
notes | str | null | 備考 |
| フェーズ | 内容 | 影響範囲 |
|---|---|---|
| Phase 1(今) |
contracts.jsonを新規作成。targets.jsonは残して共存する。targets.jsonにcontract_idフィールドを追加し、相互参照可能にする。
|
contract(新規)、tfhd(targets.jsonに項目追加のみ) |
| Phase 2(将来) |
名前・メール・SharePointパスなどの重複情報をcontracts.jsonに一本化。targets.jsonからは重複項目を削除し、contract_idで参照する。
|
tfhd, mnml(contracts.jsonを参照するよう変更) |
| Phase 3(将来) |
targets.jsonをrecipients.jsonに改名し、メール送信先の情報のみに限定。契約情報は完全にcontractsから参照する。 |
tfhd, mnml, invoice |
| 関数 | 用途 | 利用パイプライン |
|---|---|---|
get_active_contracts(type, vdu) | 稼働中の契約を条件付きで取得 | tfhd(Step 0)、mnml |
get_monthly_amount(counterparty) | 相手先の月額金額を取得 | tfhd、invoice(金額照合) |
get_contract_by_id(id) | ID指定で契約詳細を取得 | 全パイプライン |
get_contracts_by_vdu(vdu) | VDU単位で契約を一覧 | invoice(VDU別集計) |
保管先: SharePoint → 10_Corporate/contracts/
contracts/clients/ — 顧客の契約書(例: TFHD/)contracts/suppliers/ — 委託先の契約書(個人名ごと)既存の30_VDU/consulting/20_suppliers/はレガシーとして残す。新規契約書は上記パスに配置する。
各パイプラインの主要なデータ構造を一覧する。
委託先・TFHD側メンバーの情報を管理する。場所: ops/tfhd/app/data/targets.json
| フィールド | 型 | 説明 |
|---|---|---|
name | str | 名前 |
email | str | メールアドレス |
client | str | "TFHD" or "MNML" |
role | str | "to"(TFHD送信先)/ ""(委託先) |
contract_id | str | null | contracts.jsonへの参照(Phase 1で追加予定) |
例: 根崎(委託先)、西出(TFHD側 to)、森屋(MNML委託先)
メール振り分けルール。場所: ops/mail_filing/data/rules.json
| フィールド | 型 | 説明 |
|---|---|---|
name | str | ルール名 |
sender | str | 送信者フィルタ(メールアドレス or ドメイン) |
filename_pattern | str | ファイル名の正規表現フィルタ |
destination | str | 一時保存先パス |
distribute | array | 正式保存先のマッピング(pattern → dest) |
enabled | bool | ルールの有効/無効 |
type | str | "standard" or "catch"(ブラウザ取得型) |
経費の自動仕訳ルール。場所: ops/accounting/data/rules.csv
| フィールド | 説明 |
|---|---|
| 支払先パターン | 正規表現で支払先名をマッチ |
| 勘定科目 | マッチ時に適用する科目 |
| 優先度 | 複数ルールがマッチした場合の優先順 |
| 確認要否 | 自動登録可 or 手動確認必要 |
ニュース巡回ソース。場所: ops/news_reminder/data/sources.json
| フィールド | 型 | 説明 |
|---|---|---|
name | str | ソース名 |
url | str | RSS/APIのURL |
type | str | "rss" / "arxiv_api" / "hn_api" |
tier | str | "primary"(高信頼)/ "secondary"(要裏取り) |
category | str | "ai" / "geopolitical" |
合計11ソース(primary 7、secondary 4)。
月次フローの各ステップ実行状態。場所: ops/tfhd/app/data/step_state_YYYYMM.json
| フィールド | 型 | 説明 |
|---|---|---|
step1〜step6 | "pending" | "completed" | 各ステップの実行状態 |
year_month | str | 対象年月(YYYYMM) |
冪等性の保証: 完了済みステップはスキップされる。
成果物のDocID採番履歴。場所: ops/tfhd/app/data/docid_ledger.json
報告書や納品物に一意のDocIDを付与し、SharePoint上のファイルと紐づける。
| サービス | 認証方式 | 利用パイプライン | 用途 |
|---|---|---|---|
| MFクラウド経費 | OAuth2 + Playwright | accounting | 連携明細スクレイピング、仕訳登録 |
| MFクラウド請求書 | OAuth2 + PKCE | invoice, tfhd | 請求書確定、PDF取得 |
| Outlook メール | MS Graph OAuth2 | mail_filing, tfhd, mnml | メール受信・送信・下書き作成 |
| Outlook カレンダー | MS Graph OAuth2 | work_report, scheduler, tfhd | イベント取得・作成 |
| SharePoint | MS Graph OAuth2 | tfhd, work_report, mail_filing, mnml, contract(将来) | ファイル保存・配置 |
| Slack | Bot Token | 全パイプライン | 通知・ダイジェスト・確認 |
| GitHub | Token | news_reminder | Issue自動起票 |
| RSS / arXiv / Hacker News | なし(公開API) | news_reminder | ニュース取得 |
| Amazon | API Keys | accounting | 注文履歴取得(経費突合) |
| Anthropic LLM | API Key / CLI | accounting, news_reminder, mail_filing, tfhd | 分類推定・評価・解釈 |
| ポート | パイプライン | 対象サービス |
|---|---|---|
| 8585 | accounting | MFクラウド経費 |
| 8586 | invoice | MFクラウド請求書 |
| 8787 | work_report / mail_filing / scheduler | MS Graph(共有ポート、同時実行不可) |
ops/shared/ は全パイプラインが利用する共通ユーティリティを提供する。
| モジュール | 機能 | 利用者 |
|---|---|---|
notify.py |
Slack通知(Bot Token方式)。デフォルト投稿先は #bo-notification |
全パイプライン |
oauth.py |
OAuth2トークン管理の基底クラス。トークン永続化(JSON)、自動リフレッシュ、リトライ | accounting, invoice, work_report, mail_filing, scheduler |
ms_graph/client.py |
MS Graph APIクライアント。カレンダーイベント取得・作成、Rate limit対応 | work_report, scheduler, tfhd, mail_filing, mnml |
ms_graph/models.py |
CalendarEvent等のデータモデル | work_report, scheduler |
graph_retry.py |
Graph API用リトライ管理(exponential backoff) | ms_graph利用の全パイプライン |
| パイプライン | 操作 | 安全装置 |
|---|---|---|
| accounting | register(MFクラウドに仕訳登録) |
--dry-runで事前確認、registered_ids.csvで二重登録防止 |
| accounting | cleanup(連携明細削除) |
--dry-runで事前確認 |
| invoice | confirm(下書き→確定) |
--dry-runで事前確認、確定済みスキップ |
| tfhd Step 2 | お礼メール自動送信 | 受領確認済みの場合のみ送信、テンプレート固定 |
| 仕組み | パイプライン | 内容 |
|---|---|---|
| 処理済みID追跡 | mail_filing, news_reminder, accounting | 処理済みメッセージ/記事/明細のIDをJSONファイルで追跡。同じ対象は2回処理しない |
| 受領状態ファイル | tfhd, mnml | received_YYYYMM.jsonで月ごとの受領状態を管理。確認済みはスキップ |
| ステップ実行状態 | tfhd | step_state_YYYYMM.jsonで各ステップの完了を記録。完了済みはスキップ |
| イベントキャッシュ | work_report | events_YYYYMM.jsonでAPI取得結果をキャッシュ。2回目以降はAPI不要 |
| dry-runオプション | 全パイプライン | --dry-runで実際の変更を加えずに結果をプレビュー可能 |
ops統合設計書 — Issue #161 | 2026-04-06 作成 | 合同会社MNML