Master database — data model
The master database (rcm_master) holds cross-tenant registries: tenant
metadata, platform users, payer / trading-partner / companion-guide registries,
and shared reference data (NPI provider registry, X12 code sets). One master
DB per environment, replicated for read scale.
Diagrams are grouped by Postgres schema. Each diagram shows table boxes with
primary keys + foreign keys + status / type / code columns. Full column
inventories follow each diagram. Tables outside the diagrams (e.g. NPI
staging) are intentionally omitted as ETL-internal.
Table of contents
identity + security
Tenant lifecycle, DB-server placement, platform users and roles.
Column inventory
identity.db_server
| Column | Type | Null | Notes |
|---|
db_server_id | uuid | N | PK |
name | varchar(100) | N | |
pgbouncer_host | varchar(255) | N | |
pgbouncer_port | integer | N | |
admin_secret_ref | varchar(200) | N | |
region | varchar(50) | Y | |
capacity_hint | integer | Y | |
is_active | boolean | N | |
created_at | timestamptz | N | |
updated_at | timestamptz | N | |
identity.dr_drill
| Column | Type | Null | Notes |
|---|
drill_id | uuid | N | PK |
tenant_id | uuid | Y | FK |
environment | varchar(16) | N | |
source_db_server_id | varchar(128) | N | |
restored_db_server_id | varchar(128) | N | |
target_pitr_at | timestamptz | N | |
started_at | timestamptz | N | |
completed_at | timestamptz | N | |
rto_seconds | integer | N | |
rpo_seconds | integer | N | |
post_rotation_phi_dek_kid | smallint | Y | |
outcome | varchar(16) | N | |
details | jsonb | N | |
initiated_by | varchar(128) | N | |
recorded_at | timestamptz | N | |
identity.migration_cohort_run
| Column | Type | Null | Notes |
|---|
run_id | uuid | N | PK |
started_at | timestamptz | N | |
finished_at | timestamptz | Y | |
total_tenants | integer | N | |
cohort_size | integer | N | |
stagger_ms | integer | N | |
succeeded_count | integer | N | |
failed_count | integer | N | |
last_completed_cohort | integer | N | |
aborted_at | timestamptz | Y | |
abort_reason | text | Y | |
operator | varchar(200) | Y | |
migration_args | jsonb | N | |
report | jsonb | Y | |
| Column | Type | Null | Notes |
|---|
job_id | uuid | N | PK |
kind | varchar(32) | N | |
status | varchar(16) | N | |
started_by | uuid | Y | FK |
tenant_id | uuid | Y | FK |
payload | jsonb | N | |
result | jsonb | N | |
error_code | varchar(64) | Y | |
error_message | text | Y | |
started_at | timestamptz | N | |
finished_at | timestamptz | Y | |
identity.tenant
| Column | Type | Null | Notes |
|---|
tenant_id | uuid | N | PK |
slug | varchar(64) | N | |
name | varchar(200) | N | |
db_server_ref | uuid | N | FK |
db_config_ref | varchar(200) | N | |
status | enum | N | |
provisioned_at | timestamptz | Y | |
status_changed_at | timestamptz | Y | |
offboarded_at | timestamptz | Y | |
created_at | timestamptz | N | |
updated_at | timestamptz | N | |
preferred_region | varchar(50) | Y | |
phi_dek_kid | smallint | N | |
identity.tenant_audit
| Column | Type | Null | Notes |
|---|
audit_id | uuid | N | PK |
event_type | varchar(64) | N | |
tenant_id | uuid | Y | FK |
platform_user_id | uuid | Y | FK |
details | jsonb | N | |
ip_address | inet | Y | |
user_agent | text | Y | |
occurred_at | timestamptz | N | |
identity.worker_lease
| Column | Type | Null | Notes |
|---|
worker_id | varchar(200) | N | PK |
hostname | varchar(255) | N | |
pid | integer | N | |
started_at | timestamptz | N | |
last_heartbeat_at | timestamptz | N | |
generation | integer | N | |
metadata | jsonb | Y | |
| Column | Type | Null | Notes |
|---|
platform_role_id | uuid | N | PK |
code | varchar(50) | N | |
description | text | N | |
created_at | timestamptz | N | |
| Column | Type | Null | Notes |
|---|
platform_user_id | uuid | N | PK, FK |
platform_role_id | uuid | N | PK, FK |
assigned_at | timestamptz | N | |
assigned_by | uuid | Y | FK |
| Column | Type | Null | Notes |
|---|
platform_user_id | uuid | N | PK |
email | enum | N | |
password_hash | varchar(255) | N | |
full_name | varchar(200) | Y | |
is_active | boolean | N | |
last_login_at | timestamptz | Y | |
created_at | timestamptz | N | |
updated_at | timestamptz | N | |
rcm_master — payer and EDI registry
Payers, programs, aliases, trading partners, companion guides, submission routing.
Column inventory
rcm_master.canonical_program
| Column | Type | Null | Notes |
|---|
canonical_program_id | uuid | N | PK |
name | varchar(100) | N | |
service_line | varchar(50) | N | |
description | text | Y | |
is_active | boolean | N | |
created_at | timestamptz | N | |
updated_at | timestamptz | N | |
rcm_master.companion_guide
| Column | Type | Null | Notes |
|---|
companion_guide_id | uuid | N | PK |
trading_partner_id | uuid | N | FK |
tx_type | varchar(10) | N | |
guide_version | varchar(50) | N | |
description | text | Y | |
effective_from | date | Y | |
effective_to | date | Y | |
is_active | boolean | N | |
created_at | timestamptz | N | |
updated_at | timestamptz | N | |
rcm_master.companion_guide_rule
| Column | Type | Null | Notes |
|---|
rule_id | uuid | N | PK |
companion_guide_id | uuid | N | FK |
loop_id | varchar(20) | Y | |
segment_id | varchar(10) | N | |
element_position | integer | Y | |
component_position | integer | Y | |
rule_type | varchar(20) | N | |
condition | jsonb | Y | |
value_override | text | Y | |
value_source | varchar(100) | Y | |
validation_regex | varchar(255) | Y | |
max_length | integer | Y | |
notes | text | Y | |
sort_order | integer | N | |
created_at | timestamptz | N | |
rcm_master.payer
| Column | Type | Null | Notes |
|---|
payer_id | uuid | N | PK |
name | varchar(255) | N | |
payer_code | varchar(50) | Y | |
payer_type | varchar(50) | Y | |
is_active | boolean | N | |
created_at | timestamptz | N | |
updated_at | timestamptz | N | |
short_name | varchar(100) | Y | |
state | varchar(2) | Y | |
address_line1 | varchar(255) | Y | |
address_line2 | varchar(255) | Y | |
city | varchar(100) | Y | |
state_addr | varchar(2) | Y | |
zip | varchar(10) | Y | |
phone | varchar(20) | Y | |
website | varchar(255) | Y | |
electronic_payer_id | varchar(50) | Y | |
clearinghouse_payer_id | varchar(50) | Y | |
rcm_master.payer_alias
| Column | Type | Null | Notes |
|---|
alias_id | uuid | N | PK |
payer_id | uuid | N | FK |
alias_name | varchar(255) | N | |
alias_context | varchar(100) | Y | |
is_active | boolean | N | |
created_at | timestamptz | N | |
rcm_master.payer_lob
| Column | Type | Null | Notes |
|---|
lob_id | uuid | N | PK |
payer_id | uuid | N | FK |
lob_code | varchar(50) | N | |
lob_name | varchar(255) | N | |
state | varchar(2) | Y | |
is_active | boolean | N | |
created_at | timestamptz | N | |
updated_at | timestamptz | N | |
rcm_master.payer_plan
| Column | Type | Null | Notes |
|---|
plan_id | uuid | N | PK |
lob_id | uuid | N | FK |
plan_code | varchar(50) | N | |
plan_name | varchar(255) | N | |
plan_type | varchar(50) | Y | |
is_active | boolean | N | |
created_at | timestamptz | N | |
updated_at | timestamptz | N | |
rcm_master.payer_submission_capability
| Column | Type | Null | Notes |
|---|
capability_id | uuid | N | PK |
payer_id | uuid | N | FK |
claim_type | varchar(1) | N | |
submission_method | varchar(20) | N | |
trading_partner_id | uuid | Y | FK |
accepts_secondary | boolean | N | |
accepts_corrected | boolean | N | |
timely_filing_days | integer | Y | |
notes | text | Y | |
is_active | boolean | N | |
created_at | timestamptz | N | |
updated_at | timestamptz | N | |
rcm_master.payer_trading_partner_id
| Column | Type | Null | Notes |
|---|
ptp_id | uuid | N | PK |
payer_id | uuid | N | FK |
trading_partner_id | uuid | N | FK |
external_payer_id | varchar(50) | N | |
is_active | boolean | N | |
created_at | timestamptz | N | |
rcm_master.schema_version