Skip to main content
Version: 1.1
Last Updated: 2026-03-02 (manual follow-up: FA journal entry guidance, deleted_at, pending contracts updated)
Status: 📋 Planned
Spec: PM-33 Capitation & PMPM Revenue Reconciliation
Constitution Reference: Section 1.2 (Core Independence), Section 1.3 (Integration Patterns)

Overview

PM-33 adds capitation contract management, roster tracking (enrollment/dis-enrollment), monthly period generation, and payment reconciliation for PMPM contracts. It integrates with PM-01 (patient/member identity for roster events), PM-09 (payment posting), PM-11 (RCM dashboard — capitation revenue and utilization), PM-23 (contract terms reference), and FA (revenue recognition via capitation_payment_received event).

Integration Points (from spec)


Data Source Tables (PM-33)


Event Contract: capitation_payment_received

Publisher: PM (pm_capitation_reconciliations on payment post)
Subscriber: FA (AR / revenue recognition)
Status: 📋 Pending — EVENT_CONTRACTS.md entry to be created as a generate-tasks task.
Draft payload:
Security: Event payload must not include member_id_external or any PHI. organization_id is required for FA tenant isolation.

FA Journal Entry Guidance (GAAP ASC 606)

Capitation revenue is recognized ratably over the service period (not upon cash receipt). The FA consumer of capitation_payment_received should post the following journal entry: Period matching: FA must use period_id (→ pm_capitation_periods.period_start_date / period_end_date) to post revenue to the correct accounting period. Payments received outside the service month (early or late) must still credit the revenue account for the period covered, not the cash receipt date — confirm with CFO/Controller. Deferred revenue consideration: If MCO pays capitation in advance of the service month, FA may need a deferred revenue liability entry until the period begins. Confirm with FA team whether advance capitation payments occur in practice. FA team confirmation required (PENDING_CONTRACTS.md): FA team must confirm the chart of accounts structure (account codes for MCO capitation revenue, payer-specific AR) before EVENT_CONTRACTS.md entry is finalized.

Platform Layer Usage

  • PM-11: Reads pm_capitation_periods (expected_revenue, received_revenue, status) and pm_encounters (encounter count vs. capitation amount) for dashboard widgets. No new event contracts; same-core data access.
  • PF-30 Permissions: pm.capitation.view and pm.capitation.manage seeded via migration; checked via useHasPermission in UI.
  • @/platform/csv: Bulk import pattern for CSV roster upload; column mapping derived from pm_capitation_roster_events schema.

Integration Matrix


Pending Contracts


Security Notes

  • All four PM-33 tables are RLS-protected with pm_has_org_access(organization_id, auth.uid()).
  • UPDATE policies include WITH CHECK preventing organization_id modification.
  • member_id_external is PHI; encrypted at rest via pgcrypto; decrypt only via pm_decrypt_member_id() SECURITY DEFINER function.
  • capitation_payment_received event must never include PHI in payload.

References