docs(billing): dual-run stand-up results — shadow import done, reconciliation 2 match / 7 delta (stopped before flip)
This commit is contained in:
@@ -133,6 +133,24 @@ All four chunks of #2 are now built. The brainstorm "which slice" question resol
|
|||||||
**NOTE:** Cursor's 7-file WIP remains uncommitted locally and was never deployed — when
|
**NOTE:** Cursor's 7-file WIP remains uncommitted locally and was never deployed — when
|
||||||
Cursor finishes, a normal `./deploy.sh` will ship it (and re-sync `.env`).
|
Cursor finishes, a normal `./deploy.sh` will ship it (and re-sync `.env`).
|
||||||
|
|
||||||
|
**Dual-run stand-up results (2026-05-27) — STOPPED here for review, NOT flipped:**
|
||||||
|
- Read-only role `odoo_billing_ro` created on nexacloud Postgres (192.168.1.50); DSN set in
|
||||||
|
`ir.config_parameter` `fusion_billing.nexacloud_dsn` on nexamain. Test Connection OK
|
||||||
|
(read 7 users / 232 plans / 87 subscriptions).
|
||||||
|
- **Shadow import committed on nexamain**: 7 partners, 232 plan catalogs, 87 draft shadow
|
||||||
|
subscriptions; 0 skipped, 0 failed. (NOTE: importer takes ALL plans/subs regardless of
|
||||||
|
active status → ~464 NC-* products now in the prod ERP catalog. Consider filtering to
|
||||||
|
`is_active` plans / active subscriptions, or prune the shadow records — all reversible.)
|
||||||
|
- **Reconciliation pass**: 9 (sub,period) rows had real billing activity → **2 match, 7
|
||||||
|
delta**, 0 failed. The 7 deltas, MUST resolve before flipping:
|
||||||
|
1. **One-off / non-subscription invoices** (3 rows: $877.99, $872.66, $32.20) — nexacloud
|
||||||
|
invoices with NULL subscription_id (fees/manual/credits); not modeled per-subscription.
|
||||||
|
2. **List-price ≠ actual-invoiced** (4 rows: Odoo $200/$50 vs actual ~$9.1x) — likely
|
||||||
|
proration or NexaCloud invoicing ≠ plan list price.
|
||||||
|
- **2d bug surfaced (analysis-only, not safety):** `_reconcile_rows` with an empty
|
||||||
|
`subscription_external_id` matches NULL-field orders instead of skipping → spurious
|
||||||
|
delta rows for the one-off invoices. Add `if not sub_ext: skip`.
|
||||||
|
|
||||||
**Remaining before go-live (gated on infra / ops you do):**
|
**Remaining before go-live (gated on infra / ops you do):**
|
||||||
1. Grant the read-only DSN (`fusion_billing.nexacloud_dsn`) — see the module README — then
|
1. Grant the read-only DSN (`fusion_billing.nexacloud_dsn`) — see the module README — then
|
||||||
Test Connection → dry-run import → review → real import.
|
Test Connection → dry-run import → review → real import.
|
||||||
|
|||||||
Reference in New Issue
Block a user