CRM with finance-native context
Pipeline covers prospect through closed-won with product-scoped deals, stage automation that queues follow-up work on advance, and a forecasting report with win/loss trends and weighted pipeline. Activity queues surface fit-and-intent scoring with ranked worklists and a next-best-action per row — eligibility is guidance only, with finance-blocked rows disabled at the CTA rather than hidden. The customer workspace shows every product subscription with sold-contract details. Deal conversion creates the subscription and emits product_contract.changed. Explainable duplicate detection blocks creation on exact billing-email matches or same normalized name with matching domain. Churn risk alerts dispatch via notification and comms engine when daily health scoring crosses the threshold — only newly deteriorated customers trigger alerts, not ones already flagged.
Billing without authority scatter
First Portal login auto-provisions a customer record and trial subscription — no manual setup. Plans carry a shared_plan_key, readiness flags (billing_ready + product_ready = is_sellable), and billable dimensions. Every subscription creates a versioned sold-contract foundation. Plan changes create a durable contract_change_request before any mutation — auto-approved changes apply immediately; approval-exception policies leave the request in pending_approval rather than guessing. Stripe is integrated but downstream products do not receive Stripe credentials, price IDs, or subscription authority: they use a product-authenticated hosted handoff endpoint and Keystone resolves the checkout session, validates return URL allowlists, and reconciles via webhooks. Revenue recognition performance obligations are seeded automatically from sold-contract line items.
Close engine that does accounting work
The close engine executes nine sequential steps in a single database transaction: posting integrity check (debits equal credits on every entry), depreciation run, recurring accrual posting, FX revaluation, monthly tax provision, deferred tax computation and posting (depreciation timing, bad debt allowance, deferred revenue, prepaid differences → DTA/DTL adjusting entries), prepaid amortization, bad debt estimation (aging-bucket expected credit losses against Allowance for Doubtful Accounts), financial statement snapshot, and material variance check with per-category evidence. A step failure sets status to blocked and requires an override reason plus approver audit record. Three-way PO matching (PO → goods receipt → bill) validates quantities and prices against configurable tolerance thresholds, with exception escalation levels and SoD: the bill creator cannot approve match exceptions on their own bill.
Reporting from a real ledger
Financial statements cover trial balance, P&L with compare-period option, balance sheet (with synthetic current-year net income equity line before year-end close), cash flow (indirect method), AR and AP aging, and cash position. Multi-entity consolidation aggregates across an entity hierarchy with intercompany elimination entries. The annual reporting package generates on demand: trial balance, income statement, balance sheet, deduction schedule, depreciation schedule, tax payment ledger, 1099-NEC candidates, and K-1 summaries. A filing readiness checklist validates approximately 19 standard obligations, tax table freshness, all fiscal periods closed, and 1099 vendor review before flagging the package as ready to file. Quarterly tax estimates compute from live GL data through bracket tables with entity-type-aware breakdown.