The RMC (Room Coverage) data type was introduced in HL7 v2.3 to express what an insurance policy pays toward an inpatient room. It is a three-component composite carrying the room type (private, semi-private, ward), the kind of amount being expressed (a dollar limit or a percentage), and the numeric coverage amount. RMC appears in the IN2 segment's room-coverage fields and is one of the few data types that exists almost exclusively in the insurance domain.
Purpose
Inpatient billing distinguishes sharply between a private room and a semi-private room: a policy may cover semi-private at 100% but only contribute a fixed daily amount toward a private upgrade. RMC was designed to carry that distinction in a single composite — the room type, whether the next number is a dollar cap or a percentage, and the number itself — so eligibility responses and benefit detail can be exchanged without prose.
Component table
Source: HAPI HL7v2 v2.8.1 javadocs (RMC). Length is shown as — because v2.7+ deprecated fixed maximum lengths in favour of conformance-profile constraints.
| Comp | Name | Sub-type | Length | Required | Description |
|---|---|---|---|---|---|
| RMC.1 | Room Type | is (HL70145) | — | O | Room category: PRI private, SPR semi-private, WRD ward, ICU, and similar facility-level codes. |
| RMC.2 | Amount Type | is (HL70146) | — | O | Indicator that classifies RMC.3: LIMIT a dollar/unit cap; PCT (or PERCENTAGE) a percentage of allowed charges. |
| RMC.3 | Coverage Amount | nm | — | O | The numeric amount; interpretation governed by RMC.2 (currency-aligned magnitude vs. a 0–100 percentage). |
Most-used components
- RMC.1 Room Type — without it, the receiver cannot tell which room tier the rule applies to.
- RMC.2 Amount Type — flips the meaning of RMC.3 from currency to percentage; missing or wrong here is the most common defect.
- RMC.3 Coverage Amount — the number the receiver actually adjudicates against.
Where it's used
- IN2 Insurance Additional Information — RMC populates the room-coverage benefit fields when an inpatient policy enumerates per-room-type rules.
- Eligibility / benefits responses ferried through HL7 v2 (where 270/271 X12 traffic is not available end-to-end).
- Vendor Z-segments that pre-date a richer benefit model.
Version differences
- HL7 v2.3 — RMC introduced with the three-component layout above.
- HL7 v2.4 — HL70145 (Room Type) and HL70146 (Amount Type) value sets refined.
- HL7 v2.5 / v2.6 — structure unchanged; usage thinned as 5010 X12 270/271 absorbed most benefit-detail traffic.
- HL7 v2.7 / v2.8 / v2.8.1 — structure stable; fixed maximum lengths deprecated. HAPI v2.8.1 javadoc shows the three-component layout above.
Common mistakes
- Omitting RMC.2 — a bare
100is ambiguous: 100 dollars per day or 100 percent? - Sending RMC.2 =
PCTwith RMC.3 =1.0when the intent was 100% — RMC.3 is a percentage, not a ratio. - Free-text RMC.1 (
Private Room) instead of the HL70145 code (PRI) — receivers will not match. - Currency drift: RMC.3 has no embedded currency code. The currency is implied by the policy's facility context, which is fragile across cross-border claims.
- Treating RMC as a single string
PRI/LIMIT/100(slash-separated) — HL7 v2 composites are^-separated.
Examples
Minimal — semi-private fully covered (percentage):
SPR^PCT^100
Private room with a $250/day dollar cap:
PRI^LIMIT^250
Populated — private room 100% coverage (the fact form):
PRI^LIMIT^100
In context — IN2 carrying a per-room-type benefit pair (semi-private 100%, private capped at $250):
MSH|^~&|REG|MERCY|BILLING|MERCY|20260624081500||ADT^A08^ADT_A01|MSG0301|P|2.8.1
PID|1||MR884412^^^MERCY^MR||TESTPATIENT^ALEX^Q||19720508|F
IN1|1|MEDA^Medicare A^HL70072|MEDA|Medicare|||||||||||TESTPATIENT^ALEX^Q|18^Self^HL70063
IN2|||||||||||||||||||||||||||||||||||||||||||||||||SPR^PCT^100~PRI^LIMIT^250
Common pitfall — missing amount type:
PRI^^100
Without RMC.2 the receiver cannot tell whether the policy pays 100% of a private room or contributes 100 currency units per day. Eligibility logic typically falls back to "unknown" and quotes the patient nothing.
FHIR mapping
The v2-to-FHIR IG does not publish a dedicated RMC ConceptMap. Conceptually, RMC maps into a Coverage.benefit element with a category extension:
| RMC component | FHIR target | Notes |
|---|---|---|
| RMC.1 Room Type | Coverage.benefit.type (extension category) | Room tier coded against a value set that mirrors HL70145. |
| RMC.2 Amount Type | drives the value[x] choice | LIMIT → valueMoney; PCT → valueQuantity with UCUM %. |
| RMC.3 Coverage Amount | Coverage.benefit.value[x] | Money or percent quantity depending on RMC.2. |
For richer benefit responses, the FHIR ExplanationOfBenefit.benefitBalance element is the better landing place, and most implementations migrate room-tier rules there during v2-to-FHIR transformation.
Engine considerations
- Value-set translation: HL70145 codes (
PRI,SPR,WRD,ICU) do not exist in FHIR's standard benefit-category value set. Maintain an explicit map; do not coerce by matching display strings. - RMC.2 governs RMC.3's type. An engine that hard-codes RMC.3 as
Moneywill silently corrupt percentage benefits. - Repetition: IN2 room-coverage fields commonly carry
~-separated repetitions to express per-tier rules. Treat each repetition as an independentCoverage.benefitentry. - Currency context: RMC.3 has no currency component. Resolve currency from the payer or the facility before emitting
valueMoney.currencyin FHIR.
How Vorro parses and produces RMC
Vorro parses RMC into a (roomType, amountType, amount) tuple typed against HL70145 and HL70146. Inbound currency context is resolved from the IN1/IN2 payer record; inbound percentage values are normalized to 0–100 (a stray 1.0 is flagged as suspect and held for review). Unknown room-type codes are preserved verbatim with a translation-pending tag rather than dropped.
On outbound, Vorro always emits RMC.2 when RMC.3 is populated, and emits PCT percentages on the 0–100 scale. When the source is a FHIR Coverage.benefit with valueMoney, Vorro renders RMC.2 = LIMIT and RMC.3 = the money amount, with currency resolved from the policy and carried in upstream IN1/IN2 metadata.
Related pages
- CWE data type — Coded with Exceptions
- IN1 segment — Insurance
- IN2 segment — Insurance Additional Information
