Skip to content

Party-first billing — production readiness

FieldValue
Date2026-09-13
StatusGo — audit High/Medium/Low engineering items closed; Ops migrate + staging smoke before production traffic
ScopeContact/company billing hubs + statements (+ PDF); vendor purchasing hubs + statements; list deep links; aged receivables customer identity; catalog contacts 1.4.0 → 1.5.0, companies 1.1.0 → 1.2.0, vendors 1.1.0 → 1.2.0
CompanionContacts user guide · Companies · Vendors · Financial reports · Contacts API · CHANGELOG

Executive summary

Party records become the hub for AR/AP discovery instead of forcing users through Billing/Purchasing lists only:

  • List deep links: /invoices?contact=, ?company=, /payments?…, quotations, credit notes, /purchase-orders?vendor=, /expenses?vendor=
  • Contact/company Billing strip (invoiced / paid / balance) + recent docs (incl. credit notes) + Statement (JSON + PDF) with opening/closing balance
  • Vendor Purchasing activity strip (PO/expense spend — not AP payable) + statement (in-app; PDF deferred)
  • Aged receivables rows include contact/company identity with SPA drill-downs
  • Platform freeze respected — extends existing Contact/Company/Vendor + list pages

Go / No-Go: Go for staging → production after CI on companion PRs and Ops pre-flight below.

GateResult
Party summary + statement APIs (authz, module entitlement, tenant isolation)Pass
Customer invoice summary excludes draft/cancelledPass
Customer statement credits = applied only (aligns aged AR; excludes issued/refunded)Pass
Vendor summary/statement exclude draft + cancelledPass
Statement opening_balance + closing balance_due (customer + vendor)Pass
SPA hubs + ErrorState on summary failure + statement routes + deep-link chipsPass
Statement button gated by related *.view (not module-only)Pass
Catalog bump migration + CatalogSeeder 1.5.0 / 1.2.0 / 1.2.0Pass
Pest PartyBilling suite (+ aged AR shape + opening balance)Pass
Playwright contacts.party-billing (contact + company + PDF smoke)Pass (verify in CI / headed)
Docs user/developer/API/CHANGELOGPass
AP bills / vendor payment module / vendor PDF / mobile statement UIN/A (explicitly deferred)

Audit findings (closed)

SeverityFindingResolution
HighVendor drafts inflated purchasing totalsExclude draft + cancelled on summary and statement
HighRefunded/issued credits reduced statement balanceStatement credits use applied status only
MediumStatement button module-only vs hub *.viewHeader Statement requires invoices/payments (or PO/expense) view
MediumThin company/vendor e2eCompany hub + PDF smoke added to contacts.party-billing.spec.ts
MediumHub silent failure on summary errorErrorState + retry on customer/vendor hub panels
LowNo opening-balance on statementAPI + SPA + PDF expose opening_balance; closing labeled clearly
LowVendor “balance” is spend, not AP payableUI/docs: “Purchasing activity” / “Activity total”; API notes clarify
LowCredit notes missing from hubRecent credit notes list on customer party hub when module entitled

Catalog version path

MigrationEffect
2026_09_12_165056_bump_contacts_companies_vendors_for_party_billingcontacts 1.5.0, companies 1.2.0, vendors 1.2.0

Production: migrate only. Do not db:seed on upgrade. Fresh local/CI seed uses CatalogSeeder versions aligned with these bumps.


Deploy order

  1. Backendphp artisan migrate --force (catalog bumps)
  2. Confirm central catalog versions: contacts 1.5.0, companies 1.2.0, vendors 1.2.0
  3. Deploy SPA (hubs, deep links, statement pages)
  4. Deploy Docs
  5. Optional: Mobile aged receivables type fields (display polish only)
  6. Staging smoke below

Suggested merge order: Backend → Frontend → Docs (+ Mobile if shipping).

No new env vars, queues, or scheduler entries.


Pre-flight checklist

#CheckOwnerPass?
1Migrations applied; catalog contacts/companies/vendors versions match table aboveOps
2Contact with invoices: Billing strip shows totals; View invoices opens ?contact= chipQA
3Contact Statement date range + opening/closing + PDF downloadQA
4Company hub + statement PDFQA
5Vendor hub PO/expense totals exclude drafts; statement shows activity labelsQA
6Aged receivables shows customer column + linksQA
7User without invoices/payments view does not see Statement / Billing on contactQA
8Pest tests/Feature/Tenant/PartyBilling green in CIEng
9Playwright e2e/tests/contacts/contacts.party-billing.spec.ts greenQA

Residual risks / follow-ups

  1. Vendor AP bills / payments module and vendor statement PDF (product backlog).
  2. EloSync-Mobile party statement UI (web-first this cycle).
  3. Optional headed vendor hub Playwright (PO/expense path) — not blocking; covered by Pest.

Verdict

Go — audit findings closed for this cycle; ship after migrate + staging smoke and green CI on companion PRs.

Official documentation for the EloSync SaaS Platform.