- Python 92.7%
- JavaScript 3.8%
- HTML 3.1%
- CSS 0.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .planning | ||
| docs | ||
| migrations | ||
| scripts | ||
| src/o2 | ||
| tests | ||
| .gitignore | ||
| AGENTS.md | ||
| alembic.ini | ||
| demo.py | ||
| HANDOFF_F7_F11.md | ||
| o2.service | ||
| pyproject.toml | ||
| README.md | ||
| start.sh | ||
| uv.lock | ||
お局様(o2) — 統合会計+販売管理システム
DD簿記(Debit-Debit)コア基盤を Python で実装した統合会計・販売管理システム。 FastAPI REST API と MCP(JSON-RPC)サーバーの両方を提供し、AI アシスタントやフロントエンドからの連携が可能です。
概要
本プロジェクトは h1-c2 の母艦として機能する独立した会計・販売管理システムで、弥生会計・販売との同等以上を目標に開発中です。 コア会計・購買・販売・在庫・給与・税務・セキュリティの主要バックエンド機能は API 露出・テストまで実装済みです。v24 マイルストーンで Alembic マイグレーション基盤・給与仕訳自動生成・購買整合性・引当金自動計算・伝票番号一意性・棚番/ロット別評価・プラットフォーム管理者ロール・セキュリティ強化・e-Tax 強化・Zengin 対応が完了しました。続く Phase 0(販売帳票PDF・値引・納品書・端数統一・入金消込)と Phase 1(h1⇔o2 同期・監査・修正承認・集約)を実装しました。
注意: 本プロジェクトは開発途中です。機能の「実装済み / 制限 / 未実装」は本 README の各節で明示しています。誇張を避けるため、「API が存在する」= 「実装済み」とは判定していません。詳細な検証記録は
.planning/GAP_ANALYSIS_B.mdとHANDOFF_E1_E4.md/HANDOFF_F7_F11.mdを参照してください。本番運用前に、外部連携の本番接続検証(e-Tax 電子証明書・銀行 API・eLTAX 等)が必要です。
ドキュメント
- docs/README.md — ドキュメント索引
- docs/ARCHITECTURE.md — システム構成(モジュール・テナント分離・認証・API/MCP・Web UI)
- docs/OPERATIONS.md — 運用(起動・環境変数・DB/マイグレーション・バックアップ・鍵管理)
- docs/API_CONTRACT.md / docs/openapi.json — API 契約・スキーマ
- AGENTS.md — 開発者/エージェント向けガイド
実装済み機能
カテゴリ別の概要です。各機能の実装範囲と制限は「実装済み機能の詳細」を参照してください。
会計コア
- 勘定科目管理(5 カテゴリ)・勘定科目階層(parent/children)
- 仕訳・DD 検証(貸借均衡・副次方程式 5 方式)・総勘定元帳・試算表
- 損益計算書・貸借対照表・キャッシュフロー計算書(間接法)
- 補助元帳(現金出納帳・預金台帳・売掛金元帳・買掛金元帳・経費元帳)
- 部門・プロジェクト別集計、取引先統合(Counterparty)
- 予算管理、自動仕訳ルール、仕訳テンプレート、証憑管理
- 会計期間管理・月次/年次決算・期間ロック
- 年次決算の損益振替・繰越利益剰余金振替、任意の決算整理仕訳
販売管理
- 商品・顧客・仕入先管理、倉庫・在庫管理、出庫伝票
- 見積 → 受注 → 納品 → 請求 → 入金 → 完了のフルサイクル
- 請求グループ・まとめ請求・入金記録・入金締・未収入金・期限超過管理
- 価格表(標準価格・顧客別価格・数量割引・有効期間・仕入価格)
- 適格請求書(インボイス制度)発行・登録番号検証・PDF 出力
- 帳票PDF: 見積書・納品書・請求書(通常)・適格請求書(発行者情報・振込先に対応)
- 値引・端数調整(明細額/率・伝票額/率・端数調整 1/10/100/1000円)を見積〜受注〜請求〜適格請求書へ一貫反映
- 納品書の一覧・画面・受注
deliverからの自動生成(二重計上防止) - 入金消込(1回の入金を未収の複数請求へ期日順に自動割当、仕訳は1本)
- 消費税端数処理の統一(税率グループ1回丸め、
InvoiceSetting.rounding_method準拠) - 棚番(ロケーション)管理(階層構造・倉庫別・在庫数量照会)
購買管理
- 発注 → 受入 → 請求 → 支払 → 完了のフルサイクル
- 部分受入・部分支払、受入時の在庫連動
- 仕入先請求書+3-way matching(発注・受入・請求書、請求書単位)
- 仕入返品(逆仕訳)、差異調整仕訳、発注一覧・取消
- 消費税端数丸めの統一(合計単位丸め・floor・軽減税率8%対応)
- 仕入先請求書と買掛金元帳の連携(
supplier_invoice_id・支払期日) - 請求計上のトランザクション原子性(単一トランザクション化)
在庫・生産
- 商品別・倉庫別在庫、入出庫履歴、倉庫間移動、在庫調整、在庫カード
- 棚卸記録・確認・在庫自動調整・棚卸損益仕訳
- 棚卸資産評価(平均法・FIFO・LIFO・低価法)、売上原価計算
- セット商品・BOM・生産指示 → 着工 → 完成(部分完成・原価計算)
- ロット番号・有効期限管理(ロット別残高・期限切れアラート)
- シリアル番号(個体管理、入出庫連動の状態遷移)
- ロット別・シリアル別在庫評価(平均/FIFO/LIFO/個別法・テナントスコープ)
- 在庫移動 API の
lot_id/serial_id/unit_cost対応
税務・固定資産
- 経費記帳(仕訳自動作成)、固定資産管理・減価償却(定額法/定率法/一括償却)
- 消費税申告書(税率別集計・仕入税額控除・課税売上割合・還付/納付)
- 消費税簡易課税・中間申告、固定資産税計算・償却資産申告データ
- 源泉徴収計算、法人税等計算、雑所得・一時所得計算
- 青色申告決算書・収支内訳書・消費税申告書 PDF 生成
- e-Tax 提出準備(XML 生成・検証・提出準備状態管理)
- 引当金自動計算(貸倒引当金・賞与引当金・退職給付引当金・決算整理仕訳自動計上)
- 税務調整後課税所得の自動計算(交際費不算入・中小法人800万円特例)
- e-Tax 申告書の DB 永続化(TaxReturn・ステータス管理・テナント分離)
- XML 検証強化(申告書種別ごとの金額整合性チェック)
- 法人税 e-Tax 提出準備 API(3種類すべて対応)
- 税務申告書管理 API(一覧・詳細・ステータス更新)
- e-Tax 電子署名(RSA-2048/SHA-256・署名鍵は環境変数
O2_ETAX_PRIVATE_KEY_PATH/O2_ETAX_PRIVATE_KEYで供給。鍵未設定時は送信せずフェイルクローズ)
給与・人事
- 給与計算(社会保険・雇用保険・所得税・手取り、標準報酬月額全 50 等級)
- 賞与・退職金・年末調整の計算
- 社員マスタ(Employee)、給与明細の月次バッチ永続化
- 賞与・退職金・年末調整の永続化
- 給与・賞与・退職金・年末調整の仕訳自動生成(日本会計基準準拠の勘定構成・冪等)
- 源泉徴収票・給与支払報告書の集計データ API と法定様式 PDF(reportlab・v37-01/v38-01)
- 賞与支給明細・退職所得の源泉徴収票の集計データ API と PDF(v38-01)
- 退職金計算 API(
/api/payroll/retirement/calculate・/summary・一括/分割/障害退職・v41-01) - 退職金分割支給の追加税計算(
additional_tax=averaged_tax・5年超分割で非0・v40-01) - 社会保険料率の都道府県別設定(
SocialInsuranceRateConfig・テナント別・v38-03) - 月次源泉徴収の税額表ベース計算(
MonthlyTaxTable・課税支給額×扶養親族数の2Dルックアップ・v39-03)
多通貨
- 通貨マスタ、為替レート(テナント固有優先 → グローバルフォールバック)
- 外貨建て仕訳・為替差損益・外貨決済
- 通貨別財務諸表・IFRS 財務諸表・通貨換算の API
認証・セキュリティ・運用
- ユーザー認証、ロールベース権限管理(プラットフォーム管理者/テナント管理者/会計/閲覧者)
- 監査ログ、監査フック(request_context 経由の actor 伝播)
- RFC 6238 準拠 MFA+2 段階ログイン+リカバリーコード+otpauth URI
- ログイン試行レート制限(IP+username 別・ロックアウト)
- IP ホワイトリスト(IPv4/IPv6・CIDR 対応)、アクセスログ、セキュリティ管理 API(
/api/security) - マルチテナント(テナント管理・テナントスコープ・データ分離・プラットフォーム管理者ロール)
AI・外部連携
- AI 仕訳生成、ローカル LLM(Ollama / llama.cpp)、h1-c2 SDK
- EC 連携(Shopify/Amazon 等の接続設定・受注取込・在庫同期・売上計上)
- POS 取込(CSV/JSON)・在庫移動(売上減)・売上伝票(SalesOrder)連携(商品ID・数量を含む場合・v40-03)・レシート生成・ESC/POS 出力
- POS 勘定科目コードのテナント別外部化(
PosConfig・GET/PUT /api/pos/config・v35-03) - IoT デバイス管理・自動記帳・履歴
- IoT
SensorDataConverterのテナント別設定外部化(IotConversionConfig・GET/PUT /api/iot/config・v37-02) - SaaS 管理画面(テナント別請求書・利用量監視・月次レポート)
- CSV 取込/出力(勘定科目・取引先・仕訳)
銀行・自動化・電帳法
- 銀行照合(明細と預金台帳の突合・未照合検出)
- 銀行明細パーサー(CSV / OFX / MT940 / Zengin 全銀)+ファイル取込 API
- OFX 複数口座・期首/期末残高対応(
LEDGERBAL→AVAILBAL→BALAMT・v39-01) - MT940 funds code 付き
:61:・:86:構造化サブフィールド対応(v37-03) - Zengin 可変長フォーマット・振込結果返還ファイル取込(v38-02)
- 銀行取込重複判定の摘要正規化強化(NFKC・全角スペース→半角・連続空白統一・v41-03)
- Zengin 総合振込データ生成(全銀協標準・固定長120バイト)
- Open Banking 接続・差分取込(v31-02)・自動取込スケジューリング(
OpenBankingSyncSchedule・run_scheduled_sync・v36-02) - 定期仕訳の実行(月末補正・実行履歴による冪等化・変動金額ソース・実行ごとの金額オーバーライド・部分失敗レポート)
- プロセス内スケジューラ(
SchedulerService・threading ベース・init_schedulerで定期仕訳・Open Banking 同期をデフォルト登録・v39-02/v40-02) - 電帳法対応(SHA-256 ハッシュチェーン・Merkle ルート・決算封印)
- 自動経理・自立AI会計士(v52): 未仕訳経費から検証済みの仕訳下書きを生成し、承認制で計上(
/api/auto-accounting/*・任意の定期生成O2_AUTO_ACCOUNTING_SCHEDULE)
汎用伝票・弥生風フォーム・事業所切替(追補)
- 汎用伝票層: h1 の
DocumentModelを包含するDocument/DocumentItem+DocType12種(見積/注文/納品/請求/領収/売上伝票/仕入伝票/入金/支払/受領請求/受領領収/作業報告)。h1 の全項目(件名/案件/作業報告/明細のメーカー・型番・測定値・備考/content_hash/version/is_locked等)を保持。CRUD/プレビュー/PDF(値引表示モード・内税・作業報告対応)/複写・赤伝・ロック - h1 伝票の取込: 同期 push 時にミラー伝票を汎用伝票層へ射影(
(tenant_id, uuid)で冪等、delete は取消) - 弥生風フォーム: 全入力フォームを
.doc-*レイアウト+o2.openRefModal+o2.pageShortcuts(F2=新規/クリア, F8=参照, F12=登録)で統一(見積/受注/請求/納品/発注/仕入請求/汎用伝票/マスタ/在庫/棚卸/ロット/シリアル/経費/給与) - 内税(
include_tax): 計算・プレビュー・フォーム・PDF に反映(税率グループround(incl*rate/(1+rate))) - 値引表示モード:
gross_only/net_amount/gross_with_noteを伝票・見積・請求のPDF/画面に反映 - 事業所(テナント)切替:
GET /api/auth/tenants/POST /api/auth/switch-tenant、メニューバーの切替(PLATFORM_ADMINは任意、一般は自事業所) - API制御: 更新は
exclude_unset(送信フィールドを設定、nullで解除、省略は変更なし)。参照先(Project顧客 / 経費の部門・取引先・PJ / 銀行口座の勘定科目 / 商品の仕入先・カテゴリ等)を API で操作可能
h1-c2 連携・同期・監査(Phase 1)
- 端末登録・端末別トークン(
o2_dev_、SHA-256 保存)・汎用ミラー層(SyncRecord)・双方向 push/pull(Tailscale IP、冪等・LWW) - 共有計算スペック(
docs/specs/sales-calculation.md)+ゴールデン fixture。o2 が再計算して監査(AuditFinding) - 修正承認フロー(
SyncCorrection配信 → h1 承認キュー → ack)とcode名寄せ集約 - 帳票発行の一元化:
DocumentIssuance(発行者・端末・チャネル・方法・状態を記録、担当者 h1 へSyncOutbox通知)と/issuance発行履歴画面 - Google 汎用 OAuth 基盤(認可 URL・state 検証・コード交換・refresh、purpose 別スコープ、トークン Fernet 暗号化)+ Gmail 帳票送信(
/api/issuance/send)/Drive 帳票保管(/api/issuance/archive)/Sheets エクスポート(/api/export/sheets/h1-documents)/設定画面/google-settings - API:
/api/sync/peers,/api/sync/push,/api/sync/pull,/api/sync/corrections(/ack),/api/sync/aggregate/{customers,products},/api/audit/findings,/api/audit/run,/api/issuance,/api/issuance/send,/api/google/{authorize,callback,status,disconnect} - 設計:
docs/adr/0001-sync-audit-mode-issuance.md/docs/superpowers/specs/2026-09-20-phase1-sync-audit-design.md - 実通信: h1 ⇄ o2 の同期成功を実地で確認(2026-09-21)。h1 側は別リポジトリで実装(端末登録/push/pull/承認キュー/発行報告)
- 射影・会計統合(Phase 1e): マスタ射影(
Product/Counterparty)/統合伝票ビュー(/api/h1-documents・/h1-documents、読み取り専用)/会計射影(h1salesSlip→売掛金/売上、paymentReceipt→現金/売掛金、H1JournalLinkで冪等)/監督ダッシュボード(/api/sync/supervision/*・/h1-supervision、端末間重複検出)。設計:docs/superpowers/specs/2026-09-21-phase1e-projection-design.md - 競合修正の自動配信(
SyncOutbox自動生成):POST /api/sync/corrections/dispatch(集約の端末間競合を LWW 勝者に揃える) - 未実装(後続): Google API の実接続検証(クレデンシャル未設定。検証は
scripts/verify_google_connection.py)
DB マイグレーション・データ基盤
- Alembic マイグレーション基盤(差分マイグレーション・ロールバック検証済み)
- デフォルトテナント(
DEFAULT_TENANT_ID=1)・tenant_id バックフィール - 伝票番号の複合 UNIQUE 制約(
(tenant_id, number)・5テーブル)+採番リトライ - Inventory のテナント包含 UNIQUE 制約
実装済み機能の詳細
以下は「旧・既知の制限事項」に列挙していた項目を実装状況つきで整理したものです。 「実装済み」は API 露出・テスト済みを意味し、「制限」は既知の注意点です。
会計コア
| 機能 | 実装済み | 制限 |
|---|---|---|
| DD 検証 | 借方=貸方、金額上限・同一科目借貸・科目存在・未来日付検証、DD 副次方程式 5 方式(借貸均衡・B/S・試算表・P/L・財務諸表間整合性) | — |
| 試算表・財務諸表 | 期間指定(date_from/date_to)・部門別集計 | — |
| キャッシュフロー計算書 | 間接法(営業・投資・財務活動の 3 区分) | — |
| 補助元帳 | 現金出納帳・預金台帳・売掛金元帳・買掛金元帳・経費元帳。仕訳登録時に勘定科目の ledger_type に基づき自動更新。tenant_scope_clause でテナント分離 |
— |
| 部門・プロジェクト集計 | 両モデル・仕訳行への紐付け・部門別集計 | — |
| 勘定科目階層 | parentId/children による階層構造 | — |
| 取引先統合 | Counterparty(顧客・仕入先統合)。legacy Customer の create/update は同一 Tx で Counterparty へ同期し、既存 Customer は migration b1a2c3d4e5f6 でバックフィル |
逆方向同期・完全統合は未対応。仕入先は Supplier との二重管理が残 |
| 自動仕訳ルール | パターンマッチ(contains/exact/regex) | — |
| 仕訳テンプレート | テンプレートからの仕訳作成 | — |
| 証憑管理 | 領収証・支払証・明細行 | — |
| 予算管理 | 予算登録・実績比較 | — |
| 財務比率分析 | 流動比率・自己資本比率・ROA・ROE・売上総利益率・在庫回転率等 | — |
| 前年比較・月次推移 | YoY・MoM・複数年比較 | — |
| 部門別損益計算 | 全部門一覧・部門間比較・部門別詳細 | — |
| 与信管理 | 与信限度額(DB 永続化)・残高監視・超過アラート・回収予測 | — |
| 現金流量予測 | 入金予定・出金予定・日別予測・資金ショート予警報 | — |
| 経営分析 API | 上記分析機能の REST エンドポイント | — |
販売管理
| 機能 | 実装済み | 制限 |
|---|---|---|
| 見積管理 | 作成・送付・受諾・拒否・失効・受注変換 | — |
| 受注管理 | 受注 → 確定 → 納品 → 請求 → 入金 → 完了。各ステップで仕訳自動生成。納品時にセット商品は構成商品在庫を、通常商品は在庫管理対象(在庫行あり)なら自商品在庫を自動消費。納品済みの取消は納品書取消+売上逆仕訳で帳簿を整合 | 在庫管理フラグが無く「在庫行の有無」で在庫管理対象を判定。INVOICED の Invoice 無効化は未対応 |
| 請求管理 | 請求グループ・複数受注のまとめ発行・入金記録・入金締・未収入金一覧・期限超過管理 | — |
| 価格表 | 標準価格・顧客別価格・数量割引・有効期間・仕入価格管理。設定/取得/無効化をテナントスコープ化 | deactivate は非テナントスコープ(None)で任意レコードを許容 |
| インボイス制度対応 | 適格請求書発行・8%/10% 税率区分・登録番号検証・発行履歴・PDF 出力 | — |
| 売上分析 | 顧客別・商品別・クロス分析・上位ランキング | — |
| AR エイジング | 売掛金を取引先別・経過期間別(5 区分)に集計。テナント分離済み | — |
購買管理
| 機能 | 実装済み | 制限 |
|---|---|---|
| 仕入管理 | 仕入 → 発注 → 着荷 → 請求 → 支払 → 完了。各ステップで仕訳自動生成 | 消費税端数は税率グループ1回丸めに統一済み(InvoiceSetting.rounding_method 準拠) |
| 部分受入・部分支払 | 明細 received_quantity、発注 received_amount、支払 paid_amount/balance、PARTIALLY_RECEIVED/PARTIALLY_PAID |
返品/受入の複数行処理の原子性は未担保 |
| 受入時の在庫連動 | 受入で在庫を増加(従来は在庫が増えなかった不具合を修正) | — |
| 仕入先請求書+3-way matching | SupplierInvoice/SupplierInvoiceLine、PurchaseMatchingService。発注・受入・請求書を請求書単位で照合。返品控除した純受入(received − returned)を基準 |
PayableLedger.invoice_id は既存 Invoice を指し、SupplierInvoice との元帳連携は未実装 |
| 仕入返品 | return_purchase・returned_quantity/returned_amount・MovementType.PURCHASE_RETURN・逆仕訳 |
— |
| 差異調整仕訳 | adjust_supplier_invoice・ADJUSTED ステータス |
返品を跨ぐ数量差異のみの請求書の扱いは未定義 |
| 発注一覧・取消 | /api/purchase-orders 一覧・/{id}/cancel |
取引先は Counterparty(Supplier と未統合) |
| 仕入分析 | 仕入先別・商品別・クロス分析・上位ランキング | — |
| AP エイジング | 買掛金を取引先別・経過期間別(5 区分)に集計。テナント分離済み | — |
在庫・生産
| 機能 | 実装済み | 制限 |
|---|---|---|
| 在庫移動履歴 | 入出庫記録・倉庫間移動・在庫調整・在庫カード | — |
| 棚卸管理 | 棚卸記録・確認・在庫自動調整・棚卸損益仕訳 | — |
| 棚卸資産評価 | 平均法・FIFO・LIFO・売上原価計算。低価法(切放・洗替) | ロット/シリアル別の評価按分は未対応 |
| セット商品・生産管理 | BOM 定義・生産指示 → 着工 → 完成(在庫移動)・部分完成・原価計算・SetProduct 全階層のテナント継承 |
— |
| ロット番号・有効期限 | Lot CRUD・ロット別残高・有効期限アラート・StockMovement.lot_id(nullable) |
棚番(ロケーション)管理は未実装。ロット別評価は未実装。在庫移動 API への lot_id 受け渡しは未追加 |
| シリアル番号 | SerialNumber CRUD・StockMovement.serial_id・入出庫の状態遷移(IN_STOCK/SOLD/RETURNED/VOID)・/api/serials |
棚番管理・シリアル別原価評価は未実装。`/api/inventory/add |
税務・固定資産
| 機能 | 実装済み | 制限 |
|---|---|---|
| 経費記帳 | 経費科目と連動した仕訳自動作成 | — |
| 固定資産管理 | 登録・減価償却(定額法/定率法)・減価償却仕訳自動生成 | — |
| 減価償却(拡張) | 一括償却・月次/年次償却仕訳・売却損益・資産サマリー | — |
| 消費税申告書 | 月次集計・年次申告書・税率別集計・仕入税額控除・課税売上割合・納付/還付 | 課税売上割合の細目・インボイス経過措置は要検証 |
| 消費税簡易課税 | みなし仕入率・事業区分別計算・複数事業区分 | — |
| 消費税中間申告 | 予定申告・実績申告・年 1/3/11 回/月次・過不足額 | — |
| 固定資産税 | 1.4% 計算・償却資産申告書データ・種類別集計 | — |
| 源泉徴収 | 報酬・料金 10.21%・外交員報酬 5%・給与所得・復興特別所得税 | 月次源泉徴収は公式税額表ではなく簡易近似 |
| 法人税等 | 法人税・地方法人税・住民税・事業税・中小軽減税率・特別控除・試験研究費控除 | — |
| 棚卸資産低価法 | 原価と時価の低い方評価・切放/洗替 | — |
| 確定申告書類 PDF | 青色申告決算書・収支内訳書・消費税申告書(reportlab) | — |
| 国税庁様式参考 PDF | 公式様式の構造を参考にした PDF 2 種(Table-based・独自座標レイアウト) | 座標配置版は公式座標の再現ではなく独自レイアウト |
| e-Tax 提出準備 | 青色申告決算書・消費税申告書の提出用 XML 生成・検証・準備状態管理 | XML は国税庁公式スキーマ未検証。付表 5・6 は XbrlAppendix で構造化データ+XBRL XML 出力(v41-02/v42-01・簡易独自スキーマ・公式タクソノミは将来課題)。実際の本番提出はダミー URL のため不可 |
| 月別売上集計 / 税務 API | 仕訳から月別売上・仕入を集計。月別集計・公式様式 PDF・e-Tax 提出準備の REST API | — |
| 雑所得・一時所得 | 公的年金等・副収入・年齢別控除、特別控除 50 万円・1/2 課税 | — |
給与・人事
| 機能 | 実装済み | 制限 |
|---|---|---|
| 給与計算 | 社会保険料・雇用保険料・所得税源泉徴収・手取り・標準報酬月額全 50 等級。社会保険料率は SocialInsuranceRateConfig でテナント別・都道府県別設定可(v38-03・未設定時は全国平均フォールバック)。月次源泉徴収は MonthlyTaxTable で公式税額表ベース計算(v39-03・未設定時は年換算フォールバック) |
— |
| 社員マスタ | Employee(tenant 内 code 一意)・EmployeeService・/api/employees(CRUD + deactivate、テナント分離) |
給与画面あり(Web UI) |
| 給与明細の月次バッチ永続化 | Payslip(tenant×employee×year×month 一意)・DRAFT 再計算 / CONFIRMED スキップ・confirm 冪等・/api/payroll/run |
— |
| 賞与・退職金・年末調整の永続化 | BonusPayRecord/RetirementPayRecord/YearEndAdjustmentRecord・一覧/詳細/confirm 冪等・inputs_json 保持。退職金分割支給の additional_tax = averaged_tax(v40-01・5年超分割で非0) |
— |
| 源泉徴収票 / 給与支払報告書 | WithholdingSlipService が Payslip・年末調整レコードを集計。source・注意書き note 付き。CSV 出力。法定様式 PDF(PdfReportService・v37-01)。賞与支給明細・退職所得の源泉徴収票(v38-01) |
eLTAX/光ディスク等の電子申告は未実装。年末調整レコードが無い場合は概算(source=payslips_only) |
| 退職金計算 API | GET /api/payroll/retirement/calculate・/summary(一括/分割/障害退職・v41-01) |
— |
決算
| 機能 | 実装済み | 制限 |
|---|---|---|
| 期間管理・決算 | 期間作成・閉鎖・DD 副次方程式検証・スナップショット・月次/年次決算・期間ロック | — |
| 年次決算(F-8 Phase 1) | YearEndClosingService で損益振替・繰越利益剰余金振替を自動計上。摘要による冪等化。/api/accounting/closing-entries/{year} |
会計年度は暦年固定。決算取消・再計算は未実装 |
| 決算整理仕訳(F-8 Phase 2) | post_adjustment_entries で利用者指定の整理仕訳(貸倒引当金繰入等)を貸借一致・テナント検証つきで計上。batch_key 冪等化。/api/accounting/closing-adjustments/{year} |
引当率の自動計算・税額の自動判定・引当金の自動計上は未実装(会計方針は利用者指定)。同一 batch_key の再送は上書き・取消不可 |
多通貨
| 機能 | 実装済み | 制限 |
|---|---|---|
| 通貨マスタ | Currency(共有マスタ)・/api/currencies(POST/GET、/base、/{code}) |
base_currency_code と基準通貨マスタ(is_base)の整合は未整理 |
| 為替レート | DB 永続化・テナント固有優先 → グローバルフォールバック・upsert・/api/exchange-rates(/rate、/convert) |
— |
| 外貨建て仕訳 | /api/multi-currency/journals。勘定科目をテナント検証 |
— |
| 為替差損益・外貨決済 | /gain-loss・/settlements。決済時の勘定科目をテナントスコープ化 |
— |
| 通貨別・IFRS 財務諸表 | /transactions・/balances(account_id 無視バグ修正)・`/statements/income |
balance-sheet |
銀行・自動化・電帳法
| 機能 | 実装済み | 制限 |
|---|---|---|
| 銀行照合 | 銀行明細と預金台帳の突合・未照合明細検出・JSON 明細取込 | — |
| 銀行明細パーサー(F-4) | CSV / OFX(1.x SGML・2.x XML)/ MT940 / Zengin(全銀・固定長120バイト+可変長・振込結果返還ファイル) を標準ライブラリで解析。/api/bank-reconciliation/parse(プレビュー)・/import-file。Zengin 総合振込データ生成(/zengin/transfer/export)。OFX 複数口座・期首/期末残高対応(v39-01)。MT940 funds code・:86: 構造化サブフィールド対応(v37-03) |
Open Banking 本番ライブ接続・電子決済等代行業者登録は外部依存。重複判定は external_id 優先+複合キー(日付・入出金区分・金額・正規化摘要・銀行提示残高)フォールバック(v41-03 で摘要正規化)。外部ID・残高・正規化摘要差異が全て無い同日同額の別明細はスキップされ得る |
| Open Banking(F-4) | GMOあおぞらの実 API ホストへの接続実装(httpx)。sandbox 専用分岐は無く、本番接続は未検証。差分取込(v31-02)。自動取込スケジューリング(OpenBankingSyncSchedule・run_scheduled_sync・v36-02) |
本番ライブ接続は外部依存 |
| 自動仕訳ルール | パターンマッチによる自動仕訳。複数明細テンプレート連動(template_lines_json・amount_ratio 按分・v35-01/v36-03) |
— |
| 定期仕訳(F-6) | AutoJournalRule の定期フィールド・RecurringExecution(rule_id+executed_date で冪等)・月末補正・run_due/execute_recurring・金額ソース(fixed/last_entry 前回仕訳継承)・実行ごとの amount オーバーライド・実行履歴に転記金額を記録・run-due は部分失敗を errors に返し継続・実行履歴 API |
— |
| プロセス内スケジューラ(F-6) | SchedulerService(threading ベース・start/stop/run_once/status・v39-02)。init_scheduler で定期仕訳・Open Banking 同期をデフォルト登録(v40-02)。API /api/scheduler/* |
本番運用では外部 cron / systemd timer との併用を推奨 |
| 電帳法対応 | DocumentChain/FiscalYearSeal(SHA-256 ハッシュチェーン・Merkle ルート・決算封印)。テナントスコープ化済み |
FiscalYearSeal の (tenant_id, year) 複合 unique への本番移行が必要(Alembic なし) |
自動経理・自立AI会計士(v52)
| 機能 | 実装済み | 制限 |
|---|---|---|
| 仕訳下書きの自動生成 | 未仕訳の経費(ExpenseEntry)から仕訳下書きを生成。POST /api/auto-accounting/drafts/generate(year/month/dry_run)。AutoJournalDraft は (tenant_id, source_type, source_id) で一意・冪等 |
— |
| ルールベース検証(自立AI会計士) | 貸借・科目種別・金額・日付・期間閉鎖・重複・税区分・高額を検証し、指摘(findings)・深刻度(INFO/WARNING/BLOCK)・信頼度を付与 |
検証はベストエフォート。最終判定は承認時の JournalService(DD検証・期間チェック) |
| 承認制の計上 | POST /api/auto-accounting/drafts/{id}/approve。JournalService.create 経由(DD検証・補助簿更新)で計上し、生成元の経費へ journal_entry_id をリンク。verifier の BLOCK ゲートは force=true で通過できるが、JournalService の会計不変条件(DD均衡・科目存在・期間閉鎖・未来日付)は常に適用され上書き不可。貸方科目の上書き可 |
下書きは承認まで本帳簿に入らない |
| 却下・再生成 | POST /api/auto-accounting/drafts/{id}/reject。却下後に再生成すると同一ソースを PENDING に更新 |
— |
| サマリ(AI会計士レポート) | GET /api/auto-accounting/summary?year=&month=。下書き件数(pending/approved/rejected)・blocked・指摘コード別集計・試算表の貸借一致を返す |
— |
| 下書き一覧・詳細 | GET /api/auto-accounting/drafts(status/期間/limit/offset)・GET /api/auto-accounting/drafts/{id} |
読み取り/書き込みは require_read/require_write。tenant_id=None のプラットフォームアクセス(読取含む全6エンドポイント)は PLATFORM_ADMIN のみ(非該当は 403) |
| 定期生成・テナント分離 | スケジューラへ任意登録(O2_AUTO_ACCOUNTING_SCHEDULE=1、既定 OFF)。下書き・API はテナントスコープ化(resolve_write_tenant) |
本番運用では外部 cron / systemd timer との併用を推奨 |
| 一本化 | 旧 final/ultimate/future_auto_accounting・experimental/fully_automated_*・experimental/fully_autonomous_*(重複する 13 サービス)を削除し本実装へ一本化 |
— |
認証・セキュリティ
| 機能 | 実装済み | 制限 |
|---|---|---|
| ユーザー認証 | 登録・パスワードハッシュ化(salt + SHA-256)・ログイン・JWT 風トークン | — |
| ロールベース権限 | 3 ロール(管理者/会計/閲覧者) | — |
| MFA(F-10) | RFC 6238 準拠 TOTP・User.mfa_secret 分離保存・2 段階ログイン(mfa_required + mfa_token 300 秒 → /api/auth/mfa)・JWT の purpose 用途分離 |
リカバリーコード・QR/otpauth URI 発行は実装済み。MFA 設定 UI は未実装 |
| IP ホワイトリスト | IPWhitelistMiddleware(O2_ENABLE_IP_WHITELIST 既定 ON)・/api/security/ip-whitelist CRUD |
IPv6/CIDR 非対応(完全一致のみ)。DB 例外時はフェイルオープン。認証前のグローバル設定でテナント分離対象外 |
| アクセスログ | AccessLogMiddleware(O2_ENABLE_ACCESS_LOG 既定 ON)・/api/security/access-logs |
user_id/tenant_id は JWT から best-effort |
| 監査ログ・監査フック | データ変更追跡・O2_ENABLE_AUDIT_HOOKS 既定 ON・request_context ContextVar で actor 伝播・/api/security/audit-logs |
AuditService.log_change を直接呼ぶ手動監査には actor が伝播しない。セキュリティ管理 API は全体管理リソースでテナント分離未適用 |
| マルチテナント | テナント管理・tenant_scope_clause/verify_tenant_ownership によるデータ分離。補助簿・エイジング・勘定科目参照・在庫/セット商品・電子帳簿封印・価格表を強化。期首残高は AccountOpeningBalance でテナント別管理(共有勘定は所有者値を漏洩しない) |
A 系残: Role.PLATFORM_ADMIN は実装済みで、テナント管理 API(/api/tenants)は require_platform_manage で保護される |
AI・外部連携
| 機能 | 実装済み | 制限 |
|---|---|---|
| AI 仕訳生成 | 自然言語からキーワード分類・AI 分類による仕訳候補生成 | — |
| ローカル LLM | Qwen3.5:4b(Ollama / llama.cpp) | — |
| h1-c2 SDK | 仕訳提案・確定の統合 API | — |
| EC 連携 | Shopify/Amazon 等の接続設定・受注取込・在庫同期・売上計上 | — |
| POS 連携(F-11) | /api/pos/import(data/csv/json)。勘定科目コードは PosConfig でテナント別外部化(v35-03・未設定時は 1100/4100/2100 フォールバック)。商品ID・数量を含む場合は StockMovement(SALES_OUT)と SalesOrder+SalesOrderLine(DELIVERED)を生成(v40-03) |
商品IDなしの場合は仕訳のみ(後方互換)。unit_cost は売上単価を流用(実際原価は未解決・v42-02 で改善予定) |
| IoT 連携(F-11) | /api/iot(デバイス CRUD・自動記帳・履歴)。勘定解決・仕訳生成・履歴照会をテナントスコープ化。SensorDataConverter の変換ルールは IotConversionConfig でテナント別外部化(v37-02・未設定時はデフォルトフォールバック) |
device_type→energy_meter 固定マッピングは既存仕様 |
| SaaS 管理画面 | テナント別請求書・利用量監視・月次レポート | — |
| CSV 取込/出力 | 勘定科目・取引先・仕訳の CSV 取込/出力 | — |
伝票番号(N-1)
PO/SO/QT/BILL/PRD の採番を日付別・テナント別のサフィックス最大値+1 に修正(tenant_scope_clause)。
- 実装済み: 日付が変わると 0001 に戻る、途中削除でも重複しない、テナント別に独立
- 実装済み:
(tenant_id, number)複合 UNIQUE 制約(5テーブル)+IntegrityError時の再採番リトライ - 制限: 旧
tenant_id IS NULLでは UNIQUE 制約が効かない(標準SQL: NULL != NULL)。F-12 Phase 2 の non-null 化で解消済み。非数値サフィックスは無視
未実装・制限事項
以下は現時点で未実装または未検証です。実装済みと混同しないでください。
実装と名称の乖離の全体像は docs/AUDIT_HOLLOW_IMPLEMENTATIONS_2026-09-16.md を参照。
外部連携(本番接続が必要なもの)
- e-Tax 本番提出 — XML 生成・検証・署名・申告書永続化までは実装済み。署名は証明書があれば XMLDSig(enveloped / rsa-sha256)、無ければ従来のコメント付加(legacy)。鍵/証明書は
O2_ETAX_PRIVATE_KEY_PATH/O2_ETAX_PRIVATE_KEY(PEM)、O2_ETAX_PKCS12_PATH/O2_ETAX_PKCS12_PASSWORD(PKCS#12)、O2_ETAX_CERT_PATHで供給。鍵未設定時は送信せずフェイルクローズ。送信 endpoint はO2_ETAX_ENDPOINT(未設定はダミー)、公式 xsd はO2_ETAX_XSD_DIR/O2_ETAX_XSD_PATHを配置すれば検証。IC カード読取(PKCS#11)・国税庁 API 実接続・公式 xsd の入手・e-Tax 仕様への完全適合検証は外部依存(実提出は不可) — 到達点と不足の棚卸しは docs/superpowers/specs/2026-09-21-etax-status.md - 税務 XML の国税庁公式スキーマ準拠 — XML は生成するが公式スキーマ(xsd)未検証。付表 5・6 は枠組みのみ。XBRL 未対応
- 公式様式 PDF / eLTAX — 源泉徴収票・給与支払報告書は集計データまで。公式様式 PDF レイアウト・eLTAX/光ディスク等の電子申告は未実装
- Open Banking API 連携 — 各銀行の OAuth/Mutual TLS 認証・自動取込スケジューリング(定期ポーリングの本番接続)は外部依存。Zengin(全銀)固定長フォーマットの入出金明細取込・総合振込エクスポートは実装済み
本番 DB 移行・設計
tenant_idnullable → non-null 移行(F-12 Phase 2) — F-12 Phase 2 完了: モデルレベルでtenant_idを non-null 化(例外:ExchangeRate、User)。バックフィルマイグレーション適用済み- FiscalYearSeal の複合 UNIQUE —
(tenant_id, year)複合 unique への本番移行が必要
Web UI(弥生風)
- 弥生風の事務担当者向け Web UI を実装(サーバ同梱: Jinja2 + Alpine.js + 手書きCSS、IPA Pゴシック同梱)
- 画面: ダッシュボード / 仕訳帳 / 試算表 / 貸借対照表 / 損益計算書 / 経費 / 経営分析 / 給与 / 消費税 / 見積 / 受注 / 納品書 / 請求 / 入金消込 / 発注 / 仕入請求書 / 在庫 / 棚卸 / ロット / シリアル / 得意先 / 商品 / 勘定科目 / 仕入先 / 倉庫 / 部門 / プロジェクト / 銀行口座 / AI設定 / 発行者設定 / 発行履歴 / Google設定
- 認証は既存(clerk Cookie / JWT)。ロール別に書き込みUIを出し分け(APIは
require_write)。ダークモード・レスポンシブ対応 - 設計:
docs/superpowers/specs/2026-09-17-web-ui-yayoi-design.md - 残: メニューバー各項目の実機能、一部の詳細編集/印刷
実験的機能(src/o2/experimental/)
src/o2/experimental/ は本番コードから未接続の実験領域です(API/MCP/scheduler へ配線していません)。
- 削除済み: 量子コンピュータ/量子AI・ブロックチェーン・Post-Quantum 暗号(実体が SHA-256/XOR/乱数)、旧「完全自動経理/自立AI会計士」の重複実装(正典へ一本化)
- 残置(AI基盤):
agent_*/autonomous_*/ai_financial_statement_*等。AI接続方針のため温存(本番未接続) - 実運用の AI 経路:
/api/ai(ai_classifier/hybrid_classifier/journal_entry_generator→ollama_client)。local_llm_inference/llamacpp_client(llama.cpp)は未接続
完全自動経理・自立AI会計士は承認制の実動機能として実装済み(後述の「自動経理・自立AI会計士」節参照)。
インストール
git clone <repository-url>
cd o2
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
初回は DB を最新スキーマへ適用します(初期管理者の作成を含む詳細は docs/OPERATIONS.md の「初回セットアップ」を参照):
export O2_DB_PATH=o2.db
.venv/bin/alembic upgrade head
起動は ./start.sh(http://<host>:9000/login)。create_app は環境変数 O2_DB_PATH を尊重します(未設定時はテスト用のインメモリ)。
使い方
REST API
FastAPI ベースの REST API を起動します:
uvicorn o2.api:create_app --factory --reload
主要エンドポイント(抜粋):
| メソッド | パス | 説明 |
|---|---|---|
GET |
/api/accounts |
勘定科目一覧 |
GET |
/api/accounts/{code} |
勘定科目取得 |
POST |
/api/accounts |
勘定科目作成 |
PUT |
/api/accounts/{id}/opening-balance |
期首残高のテナント別設定(共有勘定はオーバーライド記録) |
GET |
/api/journals |
仕訳一覧 |
GET |
/api/journals/{id} |
仕訳詳細(明細付き) |
POST |
/api/journals |
仕訳作成(DD 検証付き) |
POST |
/api/products |
商品作成 |
POST |
/api/delivery-notes |
出庫伝票作成 |
GET |
/api/fixed-assets |
固定資産一覧 |
POST |
/api/fixed-assets |
固定資産登録 |
GET |
/api/trial-balance |
試算表 |
GET |
/api/income-statement |
損益計算書 |
GET |
/api/balance-sheet |
貸借対照表 |
GET |
/api/schema/{table_name} |
DB スキーマ取得 |
GET |
/api/tenants |
テナント一覧(require_manage) |
POST |
/api/tenants |
テナント作成(require_manage) |
POST |
/api/auth/login |
ログイン(MFA 有効時は 2 段階) |
POST |
/api/auth/mfa |
MFA コード検証・トークン取得 |
| 購買 | ||
POST |
/api/purchase-orders |
発注作成 |
GET |
/api/purchase-orders |
発注一覧 |
GET |
/api/purchase-orders/{id} |
発注詳細 |
POST |
/api/purchase-orders/{id}/order |
発注確定 |
POST |
/api/purchase-orders/{id}/receive |
受入(在庫連動・部分受入) |
POST |
/api/purchase-orders/{id}/invoice |
請求計上 |
POST |
/api/purchase-orders/{id}/pay |
支払(部分支払) |
POST |
/api/purchase-orders/{id}/return |
仕入返品(逆仕訳) |
POST |
/api/purchase-orders/{id}/cancel |
発注取消 |
POST |
/api/purchase-invoices |
仕入先請求書登録 |
GET |
/api/purchase-invoices |
仕入先請求書一覧 |
POST |
/api/purchase-invoices/{id}/match |
3-way matching(請求書単位) |
POST |
/api/purchase-invoices/{id}/adjust |
差異調整仕訳 |
GET |
/api/purchase-matching/purchase-order/{order_id} |
発注のマッチング状態 |
| 多通貨 | ||
POST / GET |
/api/currencies |
通貨マスタ作成・一覧 |
GET |
/api/currencies/base |
基準通貨取得 |
GET |
/api/currencies/{code} |
通貨取得 |
POST / GET |
/api/exchange-rates |
為替レート設定・一覧 |
GET |
/api/exchange-rates/rate |
レート取得(テナント優先) |
POST |
/api/exchange-rates/convert |
通貨換算 |
POST |
/api/multi-currency/journals |
外貨建て仕訳 |
POST |
/api/multi-currency/gain-loss |
為替差損益 |
POST |
/api/multi-currency/settlements |
外貨決済 |
GET |
/api/multi-currency/balances |
通貨別残高 |
GET |
/api/multi-currency/statements/income |
通貨別損益計算書 |
GET |
/api/multi-currency/statements/balance-sheet |
通貨別貸借対照表 |
GET |
/api/multi-currency/ifrs/income |
IFRS 損益計算書 |
GET |
/api/multi-currency/ifrs/balance-sheet |
IFRS 貸借対照表 |
| 給与 | ||
POST / GET |
/api/employees |
社員マスタ作成・一覧 |
PUT |
/api/employees/{id} |
社員更新 |
POST / GET |
/api/payroll/run |
月次給与計算バッチ(永続化) |
GET |
/api/payroll/payslips |
給与明細一覧 |
POST |
/api/payroll/payslips/{id}/confirm |
給与明細確定 |
POST / GET |
/api/payroll/bonus |
賞与計算・永続化 |
POST / GET |
/api/payroll/retirements |
退職金計算・永続化 |
POST / GET |
/api/payroll/year-end |
年末調整計算・永続化 |
GET |
/api/payroll/withholding-slip/{employee_id}/{year} |
源泉徴収票集計データ |
GET |
/api/payroll/payment-report/{year} |
給与支払報告書集計データ |
| 在庫 | ||
POST / GET |
/api/lots |
ロット作成・一覧 |
GET |
/api/lots/expiring |
有効期限アラート |
GET |
/api/lots/{id}/balance |
ロット別残高 |
POST / GET |
/api/serials |
シリアル登録・一覧 |
POST |
/api/serials/{id}/status |
シリアル状態変更 |
| 決算 | ||
POST |
/api/accounting/closing-entries/{year} |
損益振替・繰越利益剰余金振替 |
GET |
/api/accounting/closing-entries/{year} |
年次決算仕訳一覧 |
POST |
/api/accounting/closing-adjustments/{year} |
任意の決算整理仕訳 |
GET |
/api/accounting/closing-adjustments/{year} |
決算整理仕訳一覧 |
| 自動化 | ||
POST / GET |
/api/automation/rules |
自動仕訳ルール(定期フィールド付き) |
POST |
/api/automation/rules/run-due |
期限到来分の定期仕訳実行 |
POST |
/api/automation/rules/{id}/execute-recurring |
定期仕訳実行 |
GET |
/api/automation/rules/{id}/executions |
実行履歴 |
GET |
/api/automation/executions |
全実行履歴 |
| 銀行 | ||
POST |
/api/bank-reconciliation/parse |
明細パース(プレビュー・CSV/OFX/MT940/Zengin) |
POST |
/api/bank-reconciliation/import-file |
明細ファイル取込(CSV/OFX/MT940/Zengin) |
POST |
/api/bank-reconciliation/reconcile |
照合実行 |
POST |
/api/bank-reconciliation/zengin/transfer/export |
Zengin 総合振込データ生成 |
| 棚番(F-5) | ||
POST / GET |
/api/locations |
棚番作成・一覧 |
| 税務申告書(F-1/F-2) | ||
POST |
/api/tax/etax/prepare/blue-return/{year} |
青色申告 e-Tax 提出準備 |
POST |
/api/tax/etax/prepare/consumption-tax/{year} |
消費税 e-Tax 提出準備 |
POST |
/api/tax/etax/prepare/corporate-tax/{year} |
法人税 e-Tax 提出準備 |
GET |
/api/tax/tax-returns |
申告書一覧 |
GET |
/api/tax/tax-returns/{id} |
申告書詳細(include_xml) |
POST |
/api/tax/tax-returns/{id}/status |
申告書ステータス更新 |
| 引当金・税額(F-8) | ||
POST |
/api/accounting/provisions/{year} |
引当金計算・計上 |
GET |
/api/accounting/provisions/{year}/estimate |
引当金プレビュー |
GET |
/api/accounting/taxable-income/{year} |
税務調整後課税所得 |
| 給与仕訳(F-3) | ||
POST |
/api/payroll/{type}/{id}/journal |
給与系レコードの仕訳自動生成 |
| セキュリティ | ||
GET / POST |
/api/security/ip-whitelist |
IP ホワイトリスト一覧・追加 |
DELETE |
/api/security/ip-whitelist/{ip_address} |
IP 削除 |
GET |
/api/security/access-logs |
アクセスログ |
GET |
/api/security/audit-logs |
監査ログ |
POST |
/api/security/users/{id}/mfa/enable |
MFA 有効化 |
POST |
/api/security/users/{id}/mfa/disable |
MFA 無効化 |
POST |
/api/security/users/{id}/mfa/verify |
MFA 検証 |
| POS / IoT | ||
POST |
/api/pos/import |
POS 売上取込(CSV/JSON) |
POST / GET |
/api/iot/devices |
IoT デバイス作成・一覧 |
POST |
/api/iot/devices/{id}/auto-journal |
IoT 自動記帳 |
POST |
/api/iot/auto-journal/batch |
自動記帳バッチ |
GET |
/api/iot/devices/{id}/history |
IoT 記帳履歴 |
| EC / AI | ||
POST |
/api/ec/connections |
EC 接続作成 |
POST |
/api/ec/import |
EC 受注取込 |
POST |
/api/ai/suggest |
AI 仕訳候補生成 |
POST |
/api/ai/confirm |
AI 仕訳確定・登録 |
MCP サーバー
JSON-RPC ベースの MCP サーバーを起動します:
python -m o2.mcp
HTTP エンドポイント(FastAPI 内蔵): POST /mcp
利用可能なツール:
| ツール名 | 説明 |
|---|---|
list_accounts |
勘定科目の一覧を取得 |
create_journal |
仕訳を作成(DD 検証付き) |
get_trial_balance |
試算表を取得 |
get_income_statement |
損益計算書を取得 |
get_balance_sheet |
貸借対照表を取得 |
create_product |
商品を作成 |
create_delivery_note |
出庫伝票を作成 |
complete_delivery_note |
出庫伝票を完了(在庫減算・売上計上) |
リクエスト/レスポンス例
勘定科目作成
curl -X POST http://localhost:9000/api/accounts \
-H "Content-Type: application/json" \
-d '{"code": "1100", "name": "現金", "type": "asset"}'
仕訳作成(DD 検証付き)
curl -X POST http://localhost:9000/api/journals \
-H "Content-Type: application/json" \
-d '{
"date": "2026-09-01",
"description": "文房具購入",
"lines": [
{"account_code": "5200", "side": "debit", "amount": "1000"},
{"account_code": "1100", "side": "credit", "amount": "1000"}
]
}'
試算表取得
curl http://localhost:9000/api/trial-balance
テスト
# コアスイート(全テスト)
.venv/bin/python -m pytest tests/ -q
# 実験的機能テストのみ
.venv/bin/python -m pytest tests/experimental/ -q
# テナント分離テスト
.venv/bin/python -m pytest tests/test_tenant_data_isolation.py -q
現在のテスト数: 6345 passed(コアスイート)。
既知の警告: StarletteDeprecationWarning: Using httpx with starlette.testclient is deprecated(httpx2 移行は別タスク)。
マイグレーション(Alembic)
スキーマ変更は Alembic で管理します。テストは create_all(インメモリDB)を継続し、本番は alembic upgrade head で構築します。
# 新規DB構築・未適用分の適用
.venv/bin/alembic upgrade head
# 1つ前へロールバック
.venv/bin/alembic downgrade -1
# モデル変更後の差分マイグレーション生成
.venv/bin/alembic revision --autogenerate -m "description"
# 現在の状態確認
.venv/bin/alembic current
# マイグレーション履歴
.venv/bin/alembic history
DBパスは環境変数 O2_DB_PATH(既定 o2.db)で上書き可能。
技術スタック
- Python 3.11+
- SQLModel + SQLite — ORM・DB
- FastAPI — REST API
- Pydantic — データバリデーション
- Alembic — DBマイグレーション
- cryptography — RSA 電子署名・PKCS#12(e-Tax 用)
- signxml / lxml — e-Tax XMLDSig(enveloped)署名・xsd 検証
- httpx — 外部 API クライアント(Open Banking / Google)
- ruff — リンティング・フォーマット
- PyJWT-free JWT — hashlib + hmac による JWT 風トークン
プロジェクト構造
src/o2/
├── core/ # DB接続・監査フック・リクエストコンテキスト
├── models/ # SQLModel ORM(コアモデル)
├── services/ # ビジネスロジック(コアサービス)
├── api/ # FastAPI REST エンドポイント
├── mcp/ # JSON-RPC MCP サーバー
└── experimental/ # 実験的機能(自律AI等)
├── services/
└── models/
migrations/ # Alembic マイグレーション
ライセンス
MIT