Onboarding program settings, payers and contracts
Outcome
Every program the tenant bills has a program setting (filing window, auth workflow, NPI type, group caps) that every payer follows, payer-specific settings only where a payer bills the program differently, and each payer has its contract and aliases.
Prerequisites
config.readto browse,config.updateto mutate.- Master payer row already exists (master payer creation isn't in this UI's scope — use Configure a new payer).
Find or verify the payer
Navigate to
/admin/payers. Filter by state + payer type + text search.If the payer is missing, the master row still has to be seeded — master-payer creation is not in this UI's scope. Open a ticket and request a seed row before proceeding.
Add a program setting
Program settings live in tenant config.program_config, keyed by program
(program_id, a rcm_master.program row) with an optional payer
(payer_id). They drive claim-scrub behavior: whether the program accepts
claims, filing windows, auth workflow, institutional billing period, group
caps, no-show rules.
payer_idNULL — the program setting, followed by every payer of the program.payer_idset — a payer-specific setting. It replaces the program setting for that payer on the days it is in force; it does not merge with it.
There are no payer program enrollments any more (#5990): rates and code rules
are resolved from the program, the facility's state and the payer. A claim
whose program has no setting in force on its first date of service, or whose
setting does not accept claims, is blocked at scrub with
PROGRAM_CONFIG_MISSING. Configure the program settings before the first
scrub.
Open Configuration → Programs (
/admin/programs) → New program setting. For a payer-specific setting, either pick the payer there or open the payer → Programs tab → New payer-specific setting (payer fixed).Binding — leave Payer (optional) empty for the program setting; pick the Program by name from the list. Pick an effective from date — the tenant's first date of service, or earlier to back-bill.
Submission — claim type (P/I), submission method (EDI today for most payers; PORTAL / PAPER / API available), and billing NPI type (
GROUPdefault;INDIVIDUALorFACILITYper contract).Filing — timely filing days. Leave blank to fall back to the payer's submission-capability TFD.
Authorization — auth workflow:
Workflow Required additional field Behavior EDI_278— Outbound 278s flow through AuthRequestService.PORTALauthPortalUrl(inline-required field)Auth UI links out to the URL. MANUAL— Authorizations are entered by hand; no automation runs. Institutional — billing period (
WEEKLY/MONTHLY/SPAN). Only consumed for institutional claims.Limits — max units per day / week and max group size. Null means no UI-enforced cap.
No-show — if "Allows no-show billing" is on, a procedure code is required. Pick at least one attendance status (
ABSENT/LATE) to bill.Save. The grid refreshes; changes are live for subsequent claim scrubs without a restart.
Edit vs. new: the form disables the program and the payer in edit mode.
effectiveFrom stays editable so a setting can be backdated to back-bill
older claims; a date before today needs a reason (audited). Two settings for
the same program and payer (or both with no payer) cannot start on the same
day. To roll out a new filing window, create a new setting with a later
effectiveFrom.
A payer-specific setting replaces the whole program setting for that payer, so fill in every field, not only the ones that differ.
Add a contract
Open the payer → Contracts tab → New contract.
Pick a billing entity (or leave "No billing entity" to attach the contract at the payer level). The dropdown pulls from
/admin/billing-entities.Enter the contract number. Uniqueness is enforced per
(payer, billing_entity)— server returns 409 on collision.Set effective from / to and optional notes. Save.
Once the contract exists, a fee schedule can be linked back via
/admin/fee-schedules/:id → Contract ID field.
The cross-payer trigger enforces referential integrity at save.
Manage aliases
Aliases live in rcm_master.payer_alias and let inbound ingestion map
external payer names (e.g., "UHC Behavioral", "United Behavioral Health")
to a single canonical payer row.
Open the payer → Aliases tab → Add alias. Free-text alias name + optional context tag (e.g.
BEHAVIORAL,INGEST_FEED, state abbreviation).To retire an alias, click the
×icon. Aliases are soft-deleted (is_active=false) so historical inbound lookups still resolve.
Audit trail
Every mutating route emits a structured log line:
| Event | When |
|---|---|
admin.payer.program-config.created | POST succeeds |
admin.payer.program-config.updated | PATCH succeeds |
admin.payer.contract.created | POST succeeds |
admin.payer.contract.updated | PATCH succeeds |
admin.payer.alias.created | POST succeeds |
admin.payer.alias.deactivated | DELETE succeeds |
Each line carries orgId, userId, entityId, and the key changed
fields. Grep journalctl -u rcm-core (or the log aggregator) when
reconciling tenant-onboarding tickets.
Validation
| Check | Expected |
|---|---|
One config.program_config row with payer_id NULL per program billed | Listed under Program setting · all payers on Configuration → Programs |
| Payer-specific rows | Listed on Configuration → Programs and on the payer's Programs tab |
| Getting Started B5/B6 checks | No program on active coverage without a setting |
| Auth workflow honored on submit | Per Auth workflow + 278 lifecycle |
| Contract uniqueness violation | 409 returned |
| Aliases soft-deleted, not hard-deleted | is_active=false row remains |
Cross-references
- Configure a new payer for master setup.
- Commercial payer onboarding for bulk seeds.
- Customer help: Payers, contracts and fee schedules and Code overrides —
your own rates for a program (
docs/help/rcm/). - Authorization workflow + 278 lifecycle UI for runtime auth behavior.