NEWFree ROI Calculators — quantify what prior auth and siloed data are costing your organization.Prior Auth ROI Siloed Data ROI
HL7 v2Data Type6 min read

HL7 DLT Data Type: Daily Deductible

The DLT (Daily Deductible) data type was introduced in HL7 v2.5 to model a class of insurance benefits that flat-amount deductibles cannot express: a per-diem cost-share that begins after a delay period, runs for a bounded number of days, and rolls up to an accumulated maximum. DLT appears in insurance coverage detail fields where a plan needs to declare, for example, "after the first three inpatient days, the patient pays $200 per day for up to thirty days, capped at $6,000." A single MOP cannot carry this - DLT exists precisely because the daily structure is a payer-policy primitive.

Purpose

US-style Medicare-supplement and indemnity plans frequently structure inpatient cost-share as a daily amount with a delay (a waiting period before the deductible kicks in), a duration (how many days it applies), and a total cap. Encoding any one of those numbers alone misrepresents the benefit: a flat "$200 deductible" is wrong because it is per day; "$6,000 deductible" is wrong because the patient only owes it if they stay the full duration. DLT bundles all four facts - delay days, daily amount, number of days, total amount - so a receiver can compute patient liability for any given length of stay without consulting the plan document.

Components

Source: HAPI HL7v2 v2.8.1 javadoc (DLT).

CompNameSub-typeLengthRequiredDescription
DLT.1Delay Daysnm-ONumber of days that must elapse before the daily deductible begins to apply (e.g. 3 means the deductible starts on day 4).
DLT.2Monetary Amountmo-OThe deductible amount charged per day once the delay has elapsed.
DLT.3Number of Daysnm-OThe number of days over which the daily deductible applies.
DLT.4Total Amountmo-OThe accumulated maximum the patient can be charged under this daily deductible.

Most-used components

  • DLT.2 Monetary Amount - the per-day figure receivers post to patient ledgers.
  • DLT.3 Number of Days - bounds the exposure; without it, a daily charge is open-ended.
  • DLT.4 Total Amount - the cap; receivers stop accruing patient liability once this is reached.

Where it's used

  • IN2 daily-deductible benefit fields in coverage-detail messages.
  • IN1 deductible overlay fields when the plan's deductible is structured per-diem rather than flat.
  • IN3-23 Daily Charge fields where per-diem patient share interacts with per-diem plan charge.
  • Custom Z-segments emitted by US-payer EDI bridges that translate Medicare-supplement daily deductible loops.
  • Outbound 271 (Eligibility Response) generators that derive per-diem benefit lines from DLT.

Version differences

  • HL7 v2.5 - DLT introduced with the four-component layout (delay, daily amount, days, total).
  • HL7 v2.6 through v2.8 - no structural changes; MO sub-type tightened in line with the broader MO refinement (ISO 4217 alpha-3 in MO.2).
  • HL7 v2.8.1 - HAPI javadoc confirms the four-component definition unchanged.
  • HL7 v2.8.2 - no structural changes; table refreshes only.

Common mistakes

  • Putting the daily amount in DLT.4 and leaving DLT.2 empty - receivers see a single total and treat it as a flat deductible, materially understating patient liability for short stays.
  • Conflating DLT.1 Delay Days with DLT.3 Number of Days - 3^200^30 (3-day delay, $200/day for 30 days) is very different from 30^200^3; ordering matters.
  • Omitting DLT.4 Total Amount on plans that have a cap - without the cap, receivers either compute unbounded liability or invent one from the daily × days product, which is wrong when the cap is lower than that product.
  • Using DLT.2/.4 as plain NM and dropping the MO currency sub-component - without ISO 4217 the amount is ambiguous across multi-country payer feeds.
  • Treating DLT.1 = 0 as "missing" - 0 is the meaningful value "no delay, starts on day 1" and must round-trip distinct from a truly empty DLT.1.

Examples

Minimal value - $200/day for 30 days, $6,000 max, no delay:

0^200.00^USD^30^6000.00^USD

Populated - $200/day with a 3-day delay, 30 days, $6,000 max:

3^200.00^USD^30^6000.00^USD

In context - IN2 daily-deductible field carrying a per-diem benefit:

IN2|1||||||||||||||||||||||0^200.00^USD^30^6000.00^USD||||||||||||||||||||||||||

Common pitfall - daily amount placed in the total slot:

^^^^200.00^USD       <- WRONG; reads as a $200 flat total, not $200/day
0^200.00^USD^30^6000.00^USD   <- CORRECT

FHIR mapping

The v2-to-FHIR Implementation Guide does not publish a per-datatype ConceptMap for DLT. The mapping target is Coverage.benefit with category set to a deductible code and the daily structure decomposed across the benefit's value, limit, and a small extension for the delay:

DLT componentFHIR target
DLT.1 Delay DaysCoverage.benefit.extension[delay-days].valueUnsignedInt
DLT.2 Monetary AmountCoverage.benefit.limit.value (per-day) with Coverage.benefit.unit = day
DLT.3 Number of DaysCoverage.benefit.limit.code carrying days; or a duration extension
DLT.4 Total AmountCoverage.benefit.value[x] as Money representing the accumulated max

In claim contexts the same content surfaces on ExplanationOfBenefit.benefitBalance.financial with allowed and used Money values.

Engine considerations

  • Slot ordering: DLT is positional and easy to mis-emit; engines should validate that DLT.2 is the per-day amount and DLT.4 the cap, with DLT.4 ≥ DLT.2 (a one-day daily deductible can equal its cap, but never exceed it).
  • Currency consistency: DLT.2.2 and DLT.4.2 must use the same ISO 4217 code; engines that allow mixed currencies (USD daily, CAD cap) produce nonsense ledgers.
  • Cap reconciliation: when DLT.4 < DLT.2 × DLT.3, the cap binds first and receivers must honour the cap; engines should compute and surface this as a derived fact rather than re-deriving on the fly.
  • BigDecimal precision: amounts carry minor units and require BigDecimal; days are integers and must be parsed as such even though NM permits decimals.
  • Empty vs zero: DLT.1 = 0 (no delay) and DLT.1 empty (unknown) must round-trip distinct - engines that normalise empty to zero on inbound corrupt the meaning.

How Vorro parses and produces DLT

On inbound, Vorro parses DLT as a structured DailyDeductible value object with delayDays: Optional<Int>, dailyAmount: Optional<Money>, numberOfDays: Optional<Int>, and totalAmount: Optional<Money>. Empties are preserved as None rather than coerced to zero. Currency is validated against ISO 4217 on both .2 and .4, and a same-currency invariant is enforced; violations route to a curation queue with provenance.

On outbound, Vorro emits DLT components in canonical order with explicit currency on every MO sub-component. Caps are emitted only when the source benefit record carries one - never synthesised from dailyAmount × numberOfDays. Where the source daily deductible is open-ended (no cap, no day count), Vorro emits only DLT.1 and DLT.2 and leaves DLT.3/.4 empty rather than fabricating sentinel values.

Sources

← Back to HL7 v2 Guide

Ready to Integrate This Into Your Workflow?

Talk to a Vorro expert about implementing HL7 v2 in your specific environment.

Browse HL7 v2 Guides