Lewati ke isi

T6G Fees→Finance Bridge Contract

Decision date: 2026-08-31
Status: IMMUTABLE T6G IMPLEMENTATION CONTRACT
Scope: SC-FEES ↔ SC-FIN accounting surface at /api/v1/finance/accounting/* only when both SKUs entitled
Does not: certify gateway (T6B.3), admission bridge (T6B.2), BOS/RKAS, or native W10 bill/payment lifecycle.

Canonical surface

When scola_fees_finance_bridge is installed and both parent entitlements are ON, these routes dispatch to the bridge service instead of T6B fail-close stubs:

Route Action Capability
/api/v1/finance/accounting/invoices/bulk-create create/post student invoices finance.billing.manage
/api/v1/finance/accounting/invoices/detail invoice detail finance.billing.view
/api/v1/finance/accounting/invoices/approve admin approve finance.billing.manage
/api/v1/finance/accounting/payment/wizard-init payment wizard finance.billing.manage
/api/v1/finance/accounting/payment/method-lines journal method lines finance.billing.manage
/api/v1/finance/accounting/payment/submit register payment finance.billing.manage

scola_fees retains route registration and dispatch hook only. Implementations live in scola_fees_finance_bridge.services.accounting_bridge_api.

Installation vs entitlement

Fees module Account module SC-FEES SC-FIN Bridge behavior
absent any n/a n/a module absent
any absent n/a n/a module absent
installed installed OFF OFF feature_disabled on fees flag
installed installed ON OFF accounting_excluded
installed installed OFF ON feature_disabled on fees flag
installed installed ON ON bridge may execute

auto_install=True when both parent modules coexist. Installation never substitutes for entitlement. Each HTTP attempt re-evaluates both flags.

Authority

  • Treasurer (or actor with finance.billing.manage) may bulk-create/post invoices and register payments through the bridge.
  • SC-FIN canonical accounting admin APIs (/api/v1/accounting/*) remain the authoritative finance surface for journals/moves outside this fees-owned prefix.
  • Bridge must not elevate beyond catalog env helpers inherited from scola_fees payment accounting controller.

Financial owner

  • SC-FEES owns route prefix and student/product selection UX contract.
  • SC-FIN owns account.move posting semantics once bridge entitlements pass.
  • W10 canonical bill/payment/receipt lifecycle is unchanged; this bridge is an explicit accounting overlay, not a replacement for W10 bills.

Runtime certification

Harness: scripts/golden/fees_finance_bridge_certify.py
Disposable DB prefix: scola_t6g_ff_bridge_*
HTTP port: 8103 (config/odoo-t6g.conf)

Case Class Expectation
RT-FFBR-XMD-01 XMD SC-FEES only → accounting_excluded
RT-FFBR-POS-01 POS SC-FEES + SC-FIN → bulk-create posts one invoice
RT-FFBR-DET-01 POS detail returns posted invoice
RT-FFBR-XMD-02 XMD SC-FIN only → feature_disabled (scola_fees)

Evidence (2026-08-31): T6G-evidence/T6G-FF-BRIDGE-20260831T062240Z.json and T6G-FF-BRIDGE-20260831T062410Z.json4/4 PASS ×2.