Claim
Org-scoped. Trust Tier: T1 (PHI + financial).
Schema
| Field | Type | Required | PK | FK | Notes |
| ClaimID | UUID | Yes | Yes | | Primary key |
| PatientID | UUID | Yes | | Patient | |
| EncounterID | UUID | Yes | | Encounter | |
| ProviderID | UUID | Yes | | Provider | Rendering provider |
| PayerID | String(50) | Yes | | | Payer identifier |
| ClaimType | String(50) | Yes | | | Professional / Institutional / Dental |
| Status | String(50) | Yes | | | Draft / Scrubbed / Submitted / Accepted / Denied / Paid / PartiallyPaid / WrittenOff / Voided |
| TotalChargeAmount | Money | Yes | | | |
| TotalChargeCurrencyCode | String(3) | Yes | | | ISO 4217 |
| TotalAllowedAmount | Money | No | | | |
| TotalAllowedCurrencyCode | String(3) | No | | | ISO 4217 |
| TotalPaidAmount | Money | No | | | |
| TotalPaidCurrencyCode | String(3) | No | | | ISO 4217 |
| PatientResponsibilityAmount | Money | No | | | |
| PatientResponsibilityCurrencyCode | String(3) | No | | | ISO 4217 |
| AdjustmentAmount | Money | No | | | |
| AdjustmentCurrencyCode | String(3) | No | | | ISO 4217 |
| SubmissionDateTime | DateTime (UTC) | No | | | |
| ClearinghouseTrackingId | String(50) | No | | | |
| OrganizationID | UUID | Yes | | Organization | Tenant partition key |
| CreatedByUserID | UUID | Yes | | User | Audit |
| CreatedDateTime | DateTime (UTC) | Yes | | | Audit |
| UpdatedByUserID | UUID | Yes | | User | Audit |
| UpdatedDateTime | DateTime (UTC) | Yes | | | Audit |
RBAC
| Role | Tier | Permissions |
| Patient (10) | T1 | Read own claims via portal |
| Front Desk (30) | T1 | Read status; post cash/card payments |
| MA / RN (40) | T1 | Read |
| Coder / Biller (50) | T1 | Read / write claims and claim lines |
| Clinician (60) | T1 | Read; sign-off on coding |
| Billing Manager (70) | T1 | Read / write / submit / appeal |
| Practice Admin (80) | T1 | Full CRUD |
| EditAMI (90) | T1 | Schema administration |
ClaimLine
Org-scoped. Trust Tier: T1 (procedure-level financial detail).
Schema
| Field | Type | Required | PK | FK | Notes |
| ClaimLineID | UUID | Yes | Yes | | Primary key |
| ClaimID | UUID | Yes | | Claim | |
| LineNumber | Int | Yes | | | Sequence within claim |
| CptCode | String(50) | Yes | | | CPT/HCPCS code |
| Icd10Pointer | String(50) | Yes | | | Diagnosis pointer (e.g. 1,2) |
| Modifier | String(50) | No | | | CPT modifier(s) |
| ChargeAmount | Money | Yes | | | |
| ChargeCurrencyCode | String(3) | Yes | | | ISO 4217 |
| AllowedAmount | Money | No | | | |
| AllowedCurrencyCode | String(3) | No | | | ISO 4217 |
| PaidAmount | Money | No | | | |
| PaidCurrencyCode | String(3) | No | | | ISO 4217 |
| PatientResponsibilityAmount | Money | No | | | |
| PatientResponsibilityCurrencyCode | String(3) | No | | | ISO 4217 |
| AdjustmentAmount | Money | No | | | |
| AdjustmentCurrencyCode | String(3) | No | | | ISO 4217 |
| OrganizationID | UUID | Yes | | Organization | Tenant partition key |
| CreatedByUserID | UUID | Yes | | User | Audit |
| CreatedDateTime | DateTime (UTC) | Yes | | | Audit |
| UpdatedByUserID | UUID | Yes | | User | Audit |
| UpdatedDateTime | DateTime (UTC) | Yes | | | Audit |
RBAC
| Role | Tier | Permissions |
| Coder / Biller (50) | T1 | Read / write claim lines |
| Clinician (60) | T1 | Read; sign-off |
| Billing Manager (70) | T1 | Read / write |
| Practice Admin (80) | T1 | Full CRUD |
| EditAMI (90) | T1 | Schema administration |
Payment (RCM)
Org-scoped. Trust Tier: T2 (financial posting, no direct PHI).
Schema
| Field | Type | Required | PK | FK | Notes |
| PaymentID | UUID | Yes | Yes | | Primary key |
| ClaimID | UUID | Yes | | Claim | |
| PayerName | String(100) | Yes | | | |
| Amount | Money | Yes | | | |
| CurrencyCode | String(3) | Yes | | | ISO 4217 |
| Method | String(50) | Yes | | | EFT / Check / VirtualCard |
| EraTraceNumber | String(50) | No | | | ERA 835 trace number |
| PostingDateTime | DateTime (UTC) | Yes | | | |
| OrganizationID | UUID | Yes | | Organization | Tenant partition key |
| CreatedByUserID | UUID | Yes | | User | Audit |
| CreatedDateTime | DateTime (UTC) | Yes | | | Audit |
| UpdatedByUserID | UUID | Yes | | User | Audit |
| UpdatedDateTime | DateTime (UTC) | Yes | | | Audit |
RBAC
| Role | Tier | Permissions |
| Front Desk (30) | T2 | Read; post cash/card payments |
| Coder / Biller (50) | T2 | Read / write / post ERA payments |
| Billing Manager (70) | T2 | Read / write / adjust / void |
| Practice Admin (80) | T2 | Full CRUD |
| EditAMI (90) | T2 | Schema administration |
Denial
Org-scoped. Trust Tier: T2 (claim adjudication metadata).
Schema
| Field | Type | Required | PK | FK | Notes |
| DenialID | UUID | Yes | Yes | | Primary key |
| ClaimID | UUID | Yes | | Claim | |
| DenialCode | String(50) | Yes | | | CARC/RARC code |
| DenialReason | String(200) | Yes | | | |
| DenialCategory | String(50) | Yes | | | Clinical / Administrative / Technical |
| AppealStatus | String(50) | No | | | NotAppealed / Pending / Won / Lost / Expired |
| AppealDeadlineDateTime | DateTime (UTC) | No | | | |
| RootCause | String(50) | No | | | e.g. MissingAuth, CodingError, Timely Filing |
| OrganizationID | UUID | Yes | | Organization | Tenant partition key |
| CreatedByUserID | UUID | Yes | | User | Audit |
| CreatedDateTime | DateTime (UTC) | Yes | | | Audit |
| UpdatedByUserID | UUID | Yes | | User | Audit |
| UpdatedDateTime | DateTime (UTC) | Yes | | | Audit |
RBAC
| Role | Tier | Permissions |
| Coder / Biller (50) | T2 | Read / write denials; initiate appeals |
| Billing Manager (70) | T2 | Read / write / escalate appeals |
| Practice Admin (80) | T2 | Full CRUD |
| EditAMI (90) | T2 | Schema administration |
PatientStatement
Org-scoped. Trust Tier: T2 (patient financial summary).
Schema
| Field | Type | Required | PK | FK | Notes |
| PatientStatementID | UUID | Yes | Yes | | Primary key |
| PatientID | UUID | Yes | | Patient | |
| TotalDueAmount | Money | Yes | | | |
| TotalDueCurrencyCode | String(3) | Yes | | | ISO 4217 |
| StatementDate | DateTime (UTC) | Yes | | | |
| PaymentPlanID | String(50) | No | | | Optional payment plan reference |
| IsPaid | Bool | Yes | | | |
| OrganizationID | UUID | Yes | | Organization | Tenant partition key |
| CreatedByUserID | UUID | Yes | | User | Audit |
| CreatedDateTime | DateTime (UTC) | Yes | | | Audit |
| UpdatedByUserID | UUID | Yes | | User | Audit |
| UpdatedDateTime | DateTime (UTC) | Yes | | | Audit |
RBAC
| Role | Tier | Permissions |
| Patient (10) | T2 | Read own statements via portal |
| Front Desk (30) | T2 | Read; collect payments |
| Coder / Biller (50) | T2 | Read / write / generate statements |
| Billing Manager (70) | T2 | Read / write / adjust / write-off |
| Practice Admin (80) | T2 | Full CRUD |
| EditAMI (90) | T2 | Schema administration |
icApplication Overrides
How the five RCM AMI schemas turn into a live application: module-specific stack additions, override component bindings, the clearinghouse integration pipeline, the denial triage & appeal pipeline, a versioning worked example, environment cascade, and RBAC enforcement.
Shared generation map. The IC platform code-gen flow, default bindings, environment cascade, RBAC model, and CLI commands are identical across all modules. See the
IC Reference for the canonical shared reference. This section covers only RCM-specific content.
Technology stack P0
The shared platform stack (Cosmos DB, Redis, IC-generated API, Angular 21, SQS+SNS, OpenTelemetry, etc.) is documented in the IC Reference. Module-specific additions:
| Layer | Technology | Notes |
| Clearinghouse (primary) | Waystar | 837P submission, 276/277 status, ERA/835 ingestion. BUY decision per Integration Ecosystem. |
| Clearinghouse (secondary) | Availity | Direct-connect payers that require Availity routing (e.g., some BCBS plans). BUY decision. |
| Claim scrubbing | HYBRID: core engine built, rule content licensed | 10K+ payer-specific rules (NCCI, MUE, LCD/NCD). Weekly rule-content updates from licensed source. Engine is platform-native. |
| AI coding | HYBRID: model trained on practice data, rules from Coding/CDS | AI coding suggestions per §4.4 integrated with Coding / CDS module. |
| Patient statements | InstaMed | Statement rendering, delivery, and payment processing via InstaMed. BUY decision. |
| Online bill pay | InstaMed | PCI-compliant payment processing integrated with Patient Portal. BUY decision. |
| Collections | Collection agency API | Bad-debt routing with audit trail. BUY decision (agency selection per org). |
| Denial AI triage | Internal model (BERT-based classifier) | Categorizes denials into 6 buckets + root-cause tagging. Retrained quarterly on labeled denial outcomes. |
| FHIR resource profiles | Claim, ClaimResponse, ExplanationOfBenefit, PaymentNotice | R4 baseline; USCDI v3 alignment for CY 2026. |
RCM-specific override bindings P0
These overrides are declared in rules/*.rules.json and replace the default for the matching field name pattern.
| Field | Default would render | Override component | Why |
Claim.StatusString50 | plain text display | ic-ng21-rcm-1-claim-status-pill | Color-coded status pill (Draft / Scrubbed / Submitted / Accepted / Rejected / Denied / Paid / PartiallyPaid / WrittenOff / Voided) with aging indicator. |
ClaimLine.CptCodeString50 | plain text input | ic-ng21-rcm-1-coding-suggestion | CPT/HCPCS code search with AI coding suggestions, modifier warnings, and scrubbing feedback inline. |
ClaimLine.Icd10PointerString50 | plain text input | ic-ng21-rcm-1-coding-suggestion | ICD-10-CM diagnosis pointer selector with AI suggestions from encounter documentation. |
ClaimLine.ModifierString50 | plain text input | ic-ng21-rcm-1-charge-capture | Modifier intelligence selector with conflict warnings (NCCI pair, bilateral modifier). |
Claim.TotalChargeAmountMoney + Claim.TotalChargeCurrencyCodeString3 + financial summary | plain money display | ic-ng21-rcm-1-charge-capture | Charge summary panel with auto-calculated totals, scrubbing status badge, and submission gate. |
Denial.DenialCategoryString50 | plain text display | ic-ng21-rcm-1-denial-triage | AI-categorized denial card with root-cause tag, appeal deadline countdown, and routing queue assignment. |
Denial.AppealStatusString50 | plain text display | ic-ng21-rcm-1-appeal-editor | Appeal workflow panel: letter editor with regulatory citations, deadline tracker, and submission gate. |
Payment.PaymentMethodString50 + posting | plain text input | ic-ng21-rcm-1-era-posting | Payment posting panel: ERA auto-post status, manual entry form with split-allocation, and contractual adjustment display. |
PatientStatement.TotalDueAmountMoney + PatientStatement.TotalDueCurrencyCodeString3 + billing | plain money display | ic-ng21-rcm-1-patient-statement | Statement card with InstaMed delivery status, online pay link, payment plan enrollment, and credit balance indicator. |
| (synthetic) AR aging dashboard | n/a | ic-ng21-rcm-1-ar-dashboard | Real-time AR aging: days in AR, clean-claim rate, denial rate, collection rate, aging buckets, payer and provider drill-down. |
| (synthetic) MIPS performance | n/a | ic-ng21-rcm-1-mips-dashboard | MIPS quality measures, promoting interoperability, improvement activities, APP Plus, 27 MVPs with benchmark comparison. |
Clearinghouse integration pipeline P0
Claim submission and remittance ingestion flow through two clearinghouse connectors. Waystar is primary; Availity is used for direct-connect payers that require it (some BCBS plans). Both are BUY integrations per the Integration Ecosystem decision.
flowchart LR
CLAIM[Claim ready
Status = Scrubbed]
WAYSTAR[Waystar
primary]
AVAILITY[Availity
secondary]
PAYER[Payer
adjudication]
ERA[ERA/835
remittance]
CLAIM --> WAYSTAR
CLAIM --> AVAILITY
WAYSTAR --> PAYER
AVAILITY --> PAYER
PAYER --> ERA
ERA --> POSTING[Auto-posting
+ Denial routing]
| Stage | Direction | Connector | Transaction |
| Claim submission | Outbound | Waystar (primary) / Availity (secondary) | 837P professional claim |
| Claim status query | Outbound | Waystar | 276/277 real-time status |
| Remittance ingestion | Inbound | Waystar / Availity | ERA/835 auto-posting |
| Secondary claim | Outbound | Waystar | 837P with COB adjustments |
The waystar-clearinghouse.ts adapter handles 837P serialization, 276/277 polling, and ERA/835 deserialization. The availity-clearinghouse.ts adapter handles direct-connect payer routing. Payer routing rules are maintained in rules/claim.rules.json and specify which PayerIDString50 values route through Availity vs. Waystar.
Denial triage & appeal pipeline P0
Denied claims are processed through an AI-powered triage pipeline that categorizes, routes, and enables appeal generation:
flowchart TD
DENIAL[Denial received
from ERA/835]
TRIAGE[AI Triage Engine
BERT classifier]
CAT{Category?}
QUEUE[Work Queue
assignment]
APPEAL[Appeal Letter
Generator]
SUBMIT[Appeal Submitted
to payer]
TRACK[SLA Tracking
+ Escalation]
DENIAL --> TRIAGE
TRIAGE --> CAT
CAT -- Eligibility --> QUEUE
CAT -- Authorization --> QUEUE
CAT -- Coding --> QUEUE
CAT -- TimelyFiling --> QUEUE
CAT -- COB --> QUEUE
CAT -- MedicalNecessity --> QUEUE
QUEUE --> APPEAL
APPEAL --> SUBMIT
SUBMIT --> TRACK
The denial-triage-worker.ts job consumes denials from the ERA ingestion queue, runs them through the BERT-based classifier, populates Denial.DenialCategoryString50 and Denial.RootCauseString50, and routes to the appropriate work queue. The appeal-letter-generator.ts adapter generates appeal letters with regulatory citations when the billing manager initiates an appeal. The appeal-deadline-monitor.ts job tracks SLA deadlines and escalates via Task Management.
Versioning — worked example P0
All RCM artifacts are versioned break.feature.bug.buildtimestamp per IC hard rule #9. The example below traces a feature bump on Claim.
Claim 1.0.0.20260401T120000Z — Initial schema. 14 business fields plus four org-scoped audit columns. Component ic-ng21-rcm-1-charge-capture and ic-ng21-rcm-1-claim-submit bind to claim@1.0.0.* via the DI manifest.
Claim 1.1.0.20260715T093000Z — feature bump — Adds a single optional field, SecondaryPayerIDString, to support explicit secondary payer tracking on the claim header (previously derived from Eligibility COB data at runtime). Per the IC change matrix:
| Change | Version impact | Approval needed | Min permission |
Add optional field SecondaryPayerIDString50 | feature bump (1.0.0 → 1.1.0) | No | Write (50) |
Because the change is backward-compatible, the component tag stays ic-ng21-rcm-1-charge-capture. Existing UI consumers continue to bind claim@1.x.* and ignore the new field. New UI surfaces that need explicit secondary payer display bind claim@^1.1.0. No new database is required (IC rule #13 only applies to break bumps).
Claim 2.0.0.20280101T120000Z — break bump (illustrative) — An illustrative future break bump: StatusString50 is replaced with a StatusInt enum-backed integer for faster index scans and type safety. Per the IC change matrix this is change field type — break bump, EditAMI (90) approval, and per IC rule #13 a new database is provisioned with ETL from the old one. The component tag becomes ic-ng21-rcm-2-charge-capture; consumers must re-bind. The old database stays live for the configured grace period (default 90 days) for rollback.
Illustrative. The 2.0.0 example is illustrative of the change matrix and IC rule #13; it is not a committed roadmap item.
RCM environment details
| Env | Clearinghouse | InstaMed | Denial AI |
| Dev | Waystar sandbox (test trading partners) | InstaMed sandbox | Model sandbox (mock predictions) |
| QA | Waystar sandbox + Availity sandbox | InstaMed sandbox | Model QA (labeled test set) |
| UAT | Waystar staging (pre-prod payer connectivity) | InstaMed staging | Model staging (production weights) |
| Prod | Waystar prod + Availity prod | InstaMed prod | Model prod (live predictions) |
RCM RBAC notes
- Claim submission gate. Claim submission is gated at level ≥ 70 (billing manager). Appeal submission is gated at level ≥ 70. Write-off approval requires level ≥ 80 (practice admin).
- Clearinghouse submission gate. The
claim-submit component enforces that only claims with StatusString50 = "Scrubbed" can be submitted, and only by users with level ≥ 70. The API layer re-validates both conditions server-side.