The 837D is the HIPAA transaction a dental practice or its billing service sends to a dental payer to bill for dental services. It carries the same information as the ADA dental claim form.
Compared with the 837P it adds tooth-level detail: the TOO segment identifies the tooth number and surfaces for each procedure, and DN1/DN2 carry orthodontic and tooth status information.
005010X224A2HC (GS01)TS837D in EdiFabric.Templates.HipaaThe full X12 837D layout from its OpenEDI definition, the same model ediFabric uses to parse, validate and generate it: 53 loops and 254 segment positions, in file order. Loops are shaded and their segments indented; Max use is how many times a segment or loop may repeat.
| Segment / loop | Name | Usage | Max use |
|---|---|---|---|
ST | Transaction Set Header | Required | 1 |
BHT | Beginning of Hierarchical Transaction | Required | 1 |
| Any order | The loops below can appear in any order | Required | 1 |
| Loop 1000A | Submitter Name | Required | 1 |
NM1 | Submitter Name | Required | 1 |
PER | Submitter EDI Contact Information | Required | 2 |
| Loop 1000B | Receiver Name | Required | 1 |
NM1 | Receiver Name | Required | 1 |
| Loop 2000A | Billing Provider Hierarchical Level | Required | >1 |
HL | Billing Provider Hierarchical Level | Required | 1 |
PRV | Billing Provider Specialty Information | Situational | 1 |
CUR | Foreign Currency Information | Situational | 1 |
| Any order | The loops below can appear in any order | Required | 1 |
| Loop 2010AA | Billing Provider Name | Required | 1 |
NM1 | Billing Provider Name | Required | 1 |
N3 | Billing Provider Address | Required | 1 |
N4 | Billing Provider City State ZIP Code | Required | 1 |
| Any order | The loops below can appear in any order | Required | 1 |
REF | Billing Provider Tax Identification | Required | 1 |
REF | Billing Provider UPIN License Information | Situational | 2 |
PER | Billing Provider Contact Information | Situational | 2 |
| Loop 2010AB | Pay Address Name | Situational | 1 |
NM1 | Pay Address Name | Required | 1 |
N3 | Pay Address ADDRESS | Required | 1 |
N4 | Pay Address City State ZIP Code | Required | 1 |
| Loop 2010AC | Pay to Plan Name | Situational | 1 |
NM1 | Pay to Plan Name | Required | 1 |
N3 | Pay to Plan Address | Required | 1 |
N4 | Pay to Plan City State Zip Code | Required | 1 |
| Any order | The loops below can appear in any order | Required | 1 |
REF | Pay to Plan Secondary Identification | Situational | 1 |
REF | Pay to Plan Tax Identification Number | Required | 1 |
| Loop 2000B | Subscriber Hierarchical Level | Required | >1 |
HL | Subscriber Hierarchical Level | Required | 1 |
SBR | Subscriber Information | Required | 1 |
| Any order | The loops below can appear in any order | Required | 1 |
| Loop 2010BA | Subscriber Name | Required | 1 |
NM1 | Subscriber Name | Required | 1 |
N3 | Subscriber Address | Situational | 1 |
N4 | Subscriber City State ZIP Code | Situational | 1 |
DMG | Subscriber Demographic Information | Situational | 1 |
| Any order | The loops below can appear in any order | Situational | 1 |
REF | Subscriber Secondary Identification | Situational | 1 |
REF | Propertyand Casualty Claim Number | Situational | 1 |
| Loop 2010BB | Payer Name | Required | 1 |
NM1 | Payer Name | Required | 1 |
N3 | Payer Address | Situational | 1 |
N4 | Payer City State ZIP Code | Situational | 1 |
| Any order | The loops below can appear in any order | Situational | 1 |
REF | Payer Secondary Identification | Situational | 3 |
REF | Billing Provider Secondary Identification | Situational | 1 |
| Loop 2300 | Claim Information | Situational | 100 |
CLM | Claim Information | Required | 1 |
| Any order | The loops below can appear in any order | Situational | 1 |
DTP | Date Accident | Situational | 1 |
DTP | Date Appliance Placement | Situational | 1 |
DTP | Date Service Date | Situational | 1 |
DTP | Date Repricer Received Date | Situational | 1 |
DN1 | Orthodontic Total Monthsof Treatment | Situational | 1 |
DN2 | Tooth Status | Situational | 35 |
PWK | Claim Supplemental Information | Situational | 10 |
CN1 | Contract Information | Situational | 1 |
AMT | Patient Amount Paid | Situational | 1 |
| Any order | The loops below can appear in any order | Situational | 1 |
REF | Predetermination Identification | Situational | 1 |
REF | Service Authorization Exception Code | Situational | 1 |
REF | Payer Claim Control Number | Situational | 1 |
REF | Referral Number | Situational | 1 |
REF | Prior Authorization | Situational | 1 |
REF | Repriced Claim Number | Situational | 1 |
REF | Adjusted Repriced Claim Number | Situational | 1 |
REF | Claim Identifier for Transmission Intermediaries | Situational | 1 |
K3 | File Information | Situational | 10 |
NTE | Claim Note | Situational | 5 |
HI | Health Care Diagnosis Code | Situational | 1 |
HCP | Claim Pricing Repricing Information | Situational | 1 |
| Any order | The loops below can appear in any order | Situational | 1 |
| Loop 2310A | Referring Provider Name | Situational | 2 |
NM1 | Referring Provider Name | Required | 1 |
PRV | Referring Provider Specialty Information | Situational | 1 |
REF | Referring Provider Secondary Identification | Situational | 3 |
| Loop 2310B | Rendering Provider Name | Situational | 1 |
NM1 | Rendering Provider Name | Required | 1 |
PRV | Rendering Provider Specialty Information | Required | 1 |
REF | Rendering Provider Secondary Identification | Situational | 4 |
| Loop 2310C | Service Facility Location Name | Situational | 1 |
NM1 | Service Facility Location Name | Required | 1 |
N3 | Service Facility Location Address | Required | 1 |
N4 | Service Facility Location City State Zip Code | Required | 1 |
REF | Service Facility Location Secondary Identification | Situational | 3 |
| Loop 2310D | Assistant Surgeon Name | Situational | 1 |
NM1 | Assistant Surgeon Name | Required | 1 |
PRV | Assistant Surgeon Specialty Information | Required | 1 |
REF | Assistant Surgeon Secondary Identification | Situational | 4 |
| Loop 2310E | Supervising Provider Name | Situational | 1 |
NM1 | Supervising Provider Name | Required | 1 |
REF | Supervising Provider Secondary Identification | Situational | 4 |
| Loop 2320 | Other Subscriber Information | Situational | 10 |
SBR | Other Subscriber Information | Required | 1 |
CAS | Claim Level Adjustments | Situational | 5 |
| Any order | The loops below can appear in any order | Situational | 1 |
AMT | Coordinationof Benefits COB Payer Paid Amount | Situational | 1 |
AMT | Remaining Patient Liability | Situational | 1 |
AMT | Coordinationof Benefits COB Total Non Amount | Situational | 1 |
OI | Other Insurance Coverage Information | Required | 1 |
MOA | Outpatient Adjudication Information | Situational | 1 |
| Any order | The loops below can appear in any order | Required | 1 |
| Loop 2330A | Other Subscriber Name | Required | 1 |
NM1 | Other Subscriber Name | Required | 1 |
N3 | Other Subscriber Address | Situational | 1 |
N4 | Other Subscriber City State Zip Code | Situational | 1 |
REF | Other Subscriber Secondary Identification | Situational | 2 |
| Loop 2330B | Other Payer Name | Required | 1 |
NM1 | Other Payer Name | Required | 1 |
N3 | Other Payer Address | Situational | 1 |
N4 | Other Payer City State ZIP Code | Situational | 1 |
DTP | Claim Check or Remittance Date | Situational | 1 |
| Any order | The loops below can appear in any order | Situational | 1 |
REF | Other Payer Secondary Identifier | Situational | 3 |
REF | Other Payer Prior Authorization Number | Situational | 1 |
REF | Other Payer Referral Number | Situational | 1 |
REF | Other Payer Claim Adjustment Indicator | Situational | 1 |
REF | Other Payer Predetermination Identification | Situational | 1 |
REF | Other Payer Claim Control Number | Situational | 1 |
| Loop 2330C | Other Payer Referring Provider | Situational | 2 |
NM1 | Other Payer Referring Provider | Required | 1 |
REF | Other Payer Referring Provider Secondary Identification | Required | 3 |
| Loop 2330D | Other Payer Rendering Provider | Situational | 1 |
NM1 | Other Payer Rendering Provider | Required | 1 |
REF | Other Payer Rendering Provider Secondary Identification | Required | 3 |
| Loop 2330E | Other Payer Supervising Provider | Situational | 1 |
NM1 | Other Payer Supervising Provider | Required | 1 |
REF | Other Payer Supervising Provider Identification | Required | 3 |
| Loop 2330F | Other Payer Billing Provider | Situational | 1 |
NM1 | Other Payer Billing Provider | Required | 1 |
REF | Other Payer Billing Provider Secondary Identification | Required | 2 |
| Loop 2330G | Other Payer Service Facility Location | Situational | 1 |
NM1 | Other Payer Service Facility Location | Required | 1 |
REF | Other Payer Service Facility Location Secondary Identification | Required | 3 |
| Loop 2330H | Other Payer Assistant Surgeon | Situational | 1 |
NM1 | Other Payer Assistant Surgeon | Required | 1 |
REF | Other Payer Assistant Surgeon Secondary Identifier | Required | 3 |
| Loop 2400 | Service Line Number | Required | 50 |
LX | Service Line Number | Required | 1 |
SV3 | Dental Service | Required | 1 |
TOO | Tooth Information | Situational | 32 |
| Any order | The loops below can appear in any order | Situational | 1 |
DTP | Date Service Date | Situational | 1 |
DTP | Date Prior Placement | Situational | 1 |
DTP | Date Appliance Placement | Situational | 1 |
DTP | Date Replacement | Situational | 1 |
DTP | Date Treatment Start | Situational | 1 |
DTP | Date Treatment Completion | Situational | 1 |
CN1 | Contract Information | Situational | 1 |
| Any order | The loops below can appear in any order | Situational | 1 |
REF | Service Predetermination Identification | Situational | 5 |
REF | Prior Authorization | Situational | 5 |
REF | Line Item Control Number | Situational | 1 |
REF | Repriced Claim Number | Situational | 1 |
REF | Adjusted Repriced Claim Number | Situational | 1 |
REF | Referral Number | Situational | 5 |
AMT | Sales Tax Amount | Situational | 1 |
K3 | File Information | Situational | 10 |
HCP | Line Pricing Repricing Information | Situational | 1 |
| Any order | The loops below can appear in any order | Situational | 1 |
| Loop 2420A | Rendering Provider Name | Situational | 1 |
NM1 | Rendering Provider Name | Required | 1 |
PRV | Rendering Provider Specialty Information | Required | 1 |
REF | Rendering Provider Secondary Identification | Situational | 20 |
| Loop 2420B | Assistant Surgeon Name | Situational | 1 |
NM1 | Assistant Surgeon Name | Required | 1 |
PRV | Assistant Surgeon Specialty Information | Situational | 1 |
REF | Assistant Surgeon Secondary Identification | Situational | 20 |
| Loop 2420C | Supervising Provider Name | Situational | 1 |
NM1 | Supervising Provider Name | Required | 1 |
REF | Supervising Provider Secondary Identification | Situational | 20 |
| Loop 2420D | Service Facility Location Name | Situational | 1 |
NM1 | Service Facility Location Name | Required | 1 |
N3 | Service Facility Location Address | Required | 1 |
N4 | Service Facility Location City State ZIP Code | Required | 1 |
REF | Service Facility Location Secondary Identification | Situational | 20 |
| Loop 2430 | Line Adjudication Information | Situational | 15 |
SVD | Line Adjudication Information | Required | 1 |
CAS | Line Adjustment | Situational | 5 |
DTP | Line Checkor Remittance Date | Required | 1 |
AMT | Remaining Patient Liability | Situational | 1 |
| Loop 2000C | Patient Hierarchical Level | Situational | >1 |
HL | Patient Hierarchical Level | Required | 1 |
PAT | Patient Information | Required | 1 |
| Loop 2010CA | Patient Name | Required | 1 |
NM1 | Patient Name | Required | 1 |
N3 | Patient Address | Required | 1 |
N4 | Patient City State ZIP Code | Required | 1 |
DMG | Patient Demographic Information | Required | 1 |
| Any order | The loops below can appear in any order | Situational | 1 |
REF | Propertyand Casualty Claim Number | Situational | 1 |
REF | Propertyand Casualty Patient Identifier | Situational | 1 |
| Loop 2300 | Claim Information | Required | 100 |
CLM | Claim Information | Required | 1 |
| Any order | The loops below can appear in any order | Situational | 1 |
DTP | Date Accident | Situational | 1 |
DTP | Date Appliance Placement | Situational | 1 |
DTP | Date Service Date | Situational | 1 |
DTP | Date Repricer Received Date | Situational | 1 |
DN1 | Orthodontic Total Monthsof Treatment | Situational | 1 |
DN2 | Tooth Status | Situational | 35 |
PWK | Claim Supplemental Information | Situational | 10 |
CN1 | Contract Information | Situational | 1 |
AMT | Patient Amount Paid | Situational | 1 |
| Any order | The loops below can appear in any order | Situational | 1 |
REF | Predetermination Identification | Situational | 1 |
REF | Service Authorization Exception Code | Situational | 1 |
REF | Payer Claim Control Number | Situational | 1 |
REF | Referral Number | Situational | 1 |
REF | Prior Authorization | Situational | 1 |
REF | Repriced Claim Number | Situational | 1 |
REF | Adjusted Repriced Claim Number | Situational | 1 |
REF | Claim Identifier for Transmission Intermediaries | Situational | 1 |
K3 | File Information | Situational | 10 |
NTE | Claim Note | Situational | 5 |
HI | Health Care Diagnosis Code | Situational | 1 |
HCP | Claim Pricing Repricing Information | Situational | 1 |
| Any order | The loops below can appear in any order | Situational | 1 |
| Loop 2310A | Referring Provider Name | Situational | 2 |
NM1 | Referring Provider Name | Required | 1 |
PRV | Referring Provider Specialty Information | Situational | 1 |
REF | Referring Provider Secondary Identification | Situational | 3 |
| Loop 2310B | Rendering Provider Name | Situational | 1 |
NM1 | Rendering Provider Name | Required | 1 |
PRV | Rendering Provider Specialty Information | Required | 1 |
REF | Rendering Provider Secondary Identification | Situational | 4 |
| Loop 2310C | Service Facility Location Name | Situational | 1 |
NM1 | Service Facility Location Name | Required | 1 |
N3 | Service Facility Location Address | Required | 1 |
N4 | Service Facility Location City State Zip Code | Required | 1 |
REF | Service Facility Location Secondary Identification | Situational | 3 |
| Loop 2310D | Assistant Surgeon Name | Situational | 1 |
NM1 | Assistant Surgeon Name | Required | 1 |
PRV | Assistant Surgeon Specialty Information | Required | 1 |
REF | Assistant Surgeon Secondary Identification | Situational | 4 |
| Loop 2310E | Supervising Provider Name | Situational | 1 |
NM1 | Supervising Provider Name | Required | 1 |
REF | Supervising Provider Secondary Identification | Situational | 4 |
| Loop 2320 | Other Subscriber Information | Situational | 10 |
SBR | Other Subscriber Information | Required | 1 |
CAS | Claim Level Adjustments | Situational | 5 |
| Any order | The loops below can appear in any order | Situational | 1 |
AMT | Coordinationof Benefits COB Payer Paid Amount | Situational | 1 |
AMT | Remaining Patient Liability | Situational | 1 |
AMT | Coordinationof Benefits COB Total Non Amount | Situational | 1 |
OI | Other Insurance Coverage Information | Required | 1 |
MOA | Outpatient Adjudication Information | Situational | 1 |
| Any order | The loops below can appear in any order | Required | 1 |
| Loop 2330A | Other Subscriber Name | Required | 1 |
NM1 | Other Subscriber Name | Required | 1 |
N3 | Other Subscriber Address | Situational | 1 |
N4 | Other Subscriber City State Zip Code | Situational | 1 |
REF | Other Subscriber Secondary Identification | Situational | 2 |
| Loop 2330B | Other Payer Name | Required | 1 |
NM1 | Other Payer Name | Required | 1 |
N3 | Other Payer Address | Situational | 1 |
N4 | Other Payer City State ZIP Code | Situational | 1 |
DTP | Claim Check or Remittance Date | Situational | 1 |
| Any order | The loops below can appear in any order | Situational | 1 |
REF | Other Payer Secondary Identifier | Situational | 3 |
REF | Other Payer Prior Authorization Number | Situational | 1 |
REF | Other Payer Referral Number | Situational | 1 |
REF | Other Payer Claim Adjustment Indicator | Situational | 1 |
REF | Other Payer Predetermination Identification | Situational | 1 |
REF | Other Payer Claim Control Number | Situational | 1 |
| Loop 2330C | Other Payer Referring Provider | Situational | 2 |
NM1 | Other Payer Referring Provider | Required | 1 |
REF | Other Payer Referring Provider Secondary Identification | Required | 3 |
| Loop 2330D | Other Payer Rendering Provider | Situational | 1 |
NM1 | Other Payer Rendering Provider | Required | 1 |
REF | Other Payer Rendering Provider Secondary Identification | Required | 3 |
| Loop 2330E | Other Payer Supervising Provider | Situational | 1 |
NM1 | Other Payer Supervising Provider | Required | 1 |
REF | Other Payer Supervising Provider Identification | Required | 3 |
| Loop 2330F | Other Payer Billing Provider | Situational | 1 |
NM1 | Other Payer Billing Provider | Required | 1 |
REF | Other Payer Billing Provider Secondary Identification | Required | 2 |
| Loop 2330G | Other Payer Service Facility Location | Situational | 1 |
NM1 | Other Payer Service Facility Location | Required | 1 |
REF | Other Payer Service Facility Location Secondary Identification | Required | 3 |
| Loop 2330H | Other Payer Assistant Surgeon | Situational | 1 |
NM1 | Other Payer Assistant Surgeon | Required | 1 |
REF | Other Payer Assistant Surgeon Secondary Identifier | Required | 3 |
| Loop 2400 | Service Line Number | Required | 50 |
LX | Service Line Number | Required | 1 |
SV3 | Dental Service | Required | 1 |
TOO | Tooth Information | Situational | 32 |
| Any order | The loops below can appear in any order | Situational | 1 |
DTP | Date Service Date | Situational | 1 |
DTP | Date Prior Placement | Situational | 1 |
DTP | Date Appliance Placement | Situational | 1 |
DTP | Date Replacement | Situational | 1 |
DTP | Date Treatment Start | Situational | 1 |
DTP | Date Treatment Completion | Situational | 1 |
CN1 | Contract Information | Situational | 1 |
| Any order | The loops below can appear in any order | Situational | 1 |
REF | Service Predetermination Identification | Situational | 5 |
REF | Prior Authorization | Situational | 5 |
REF | Line Item Control Number | Situational | 1 |
REF | Repriced Claim Number | Situational | 1 |
REF | Adjusted Repriced Claim Number | Situational | 1 |
REF | Referral Number | Situational | 5 |
AMT | Sales Tax Amount | Situational | 1 |
K3 | File Information | Situational | 10 |
HCP | Line Pricing Repricing Information | Situational | 1 |
| Any order | The loops below can appear in any order | Situational | 1 |
| Loop 2420A | Rendering Provider Name | Situational | 1 |
NM1 | Rendering Provider Name | Required | 1 |
PRV | Rendering Provider Specialty Information | Required | 1 |
REF | Rendering Provider Secondary Identification | Situational | 20 |
| Loop 2420B | Assistant Surgeon Name | Situational | 1 |
NM1 | Assistant Surgeon Name | Required | 1 |
PRV | Assistant Surgeon Specialty Information | Situational | 1 |
REF | Assistant Surgeon Secondary Identification | Situational | 20 |
| Loop 2420C | Supervising Provider Name | Situational | 1 |
NM1 | Supervising Provider Name | Required | 1 |
REF | Supervising Provider Secondary Identification | Situational | 20 |
| Loop 2420D | Service Facility Location Name | Situational | 1 |
NM1 | Service Facility Location Name | Required | 1 |
N3 | Service Facility Location Address | Required | 1 |
N4 | Service Facility Location City State ZIP Code | Required | 1 |
REF | Service Facility Location Secondary Identification | Situational | 20 |
| Loop 2430 | Line Adjudication Information | Situational | 15 |
SVD | Line Adjudication Information | Required | 1 |
CAS | Line Adjustment | Situational | 5 |
DTP | Line Checkor Remittance Date | Required | 1 |
AMT | Remaining Patient Liability | Situational | 1 |
SE | Transaction Set Trailer | Required | 1 |
Usage follows the 005010X224A2 implementation guide: Required segments must be sent, Situational ones only when the guide's condition applies. Trading partners often add their own rules in companion guides - ediFabric templates can be adjusted to match. Open the element-level definition in the EdiNation spec library.
A dental claim with CDT procedure codes and tooth information on the service lines. Paste it into EdiNation to see every element named and validated.
ISA*00* *00* *ZZ*1234567 *ZZ*11111 *170508*1141*^*00501*000000101*1*P*:~ GS*HC*XXXXXXX*XXXXX*20170617*1741*101*X*005010X224A2~ ST*837*3456*005010X224A2~ BHT*0019*00*0123*20061123*1023*CH~ NM1*41*2*PREMIER BILLING SERVICE*****46*TGJ23~ PER*IC*JERRY*TE*7176149999~ NM1*40*2*INSURANCE COMPANY XYZ*****46*66783JJT~ HL*1**20*1~ NM1*85*2*DENTAL ASSOCIATES*****XX*1234567890~ N3*234 SEAWAY ST~ N4*MIAMI*FL*33111~ REF*EI*587654321~ HL*2*1*22*1~ SBR*P********CI~ NM1*IL*1*SMITH*JANE****MI*111223333~ NM1*PR*2*INSURANCE COMPANY XYZ*****PI*66783JJT~ HL*3*2*23*0~ PAT*19~ NM1*QC*1*SMITH*TED~ N3*236 N MAIN ST~ N4*MIAMI*FL*33413~ DMG*D8*19920501*M~ CLM*26403774*150***11:B:1*Y*A*Y*I~ DTP*472*D8*20061029~ REF*D9*17312345600006351~ NM1*82*1*KILDARE*BEN****XX*9876543210~ PRV*PE*PXC*1223G0001X~ LX*1~ SV3*AD:D2150*100****1~ TOO*JP*12*M:O~ LX*2~ SV3*AD:D1110*50****1~ SE*31*3456~ GE*1*101~ IEA*1*000000101~
ediFabric turns every loop, segment and element into a named field. This is the transaction from the sample, in the JSON that ediFabric Native and Cloud return and accept.
{
"ST": {
"TransactionSetIdentifierCode_01": "837",
"TransactionSetControlNumber_02": "3456",
"ImplementationConventionPreference_03": "005010X224A2"
},
"BHT_BeginningOfHierarchicalTransaction": {
"HierarchicalStructureCode_01": "0019",
"TransactionSetPurposeCode_02": "00",
"SubmitterTransactionIdentifier_03": "0123",
"TransactionSetCreationDate_04": "20061123",
"TransactionSetCreationTime_05": "1023",
"TransactionTypeCode_06": "CH"
},
"AllNM1": {
"Loop1000A": {
"NM1_SubmitterName": {
"EntityIdentifierCode_01": "41",
"EntityTypeQualifier_02": "2",
"ResponseContactLastorOrganizationName_03": "PREMIER BILLING SERVICE",
"IdentificationCodeQualifier_08": "46",
"ResponseContactIdentifier_09": "TGJ23"
},
"PER_SubmitterEDIContactInformation": [
{
"ContactFunctionCode_01": "IC",
"ResponseContactName_02": "JERRY",
"CommunicationNumberQualifier_03": "TE",
"ResponseContactCommunicationNumber_04": "7176149999"
}
]
},
"Loop1000B": {
"NM1_ReceiverName": {
"EntityIdentifierCode_01": "40",
"EntityTypeQualifier_02": "2",
"ResponseContactLastorOrganizationName_03": "INSURANCE COMPANY XYZ",
"IdentificationCodeQualifier_08": "46",
"ResponseContactIdentifier_09": "66783JJT"
}
}
},
"Loop2000A": [
{
"HL_BillingProviderHierarchicalLevel": {
"HierarchicalIDNumber_01": "1",
"HierarchicalLevelCode_03": "20",
"HierarchicalChildCode_04": "1"
},
"AllNM1": {
"Loop2010AA": {
"NM1_BillingProviderName": {
"EntityIdentifierCode_01": "85",
"EntityTypeQualifier_02": "2",
"ResponseContactLastorOrganizationName_03": "DENTAL ASSOCIATES",
"IdentificationCodeQualifier_08": "XX",
"ResponseContactIdentifier_09": "1234567890"
},
"N3_BillingProviderAddress": {
"ResponseContactAddressLine_01": "234 SEAWAY ST"
},
"N4_BillingProviderCity_State_ZIPCode": {
"AdditionalPatientInformationContactCityName_01": "MIAMI",
"AdditionalPatientInformationContactStateCode_02": "FL",
"AdditionalPatientInformationContactPostalZoneorZIPCode_03": "33111"
},
"AllREF": {
"REF_BillingProviderTaxIdentification": {
"ReferenceIdentificationQualifier_01": "EI",
"MemberGrouporPolicyNumber_02": "587654321"
}
}
}
},
"Loop2000B": [
{
"HL_SubscriberHierarchicalLevel": {
"HierarchicalIDNumber_01": "2",
"HierarchicalParentIDNumber_02": "1",
"HierarchicalLevelCode_03": "22",
"HierarchicalChildCode_04": "1"
},
"SBR_SubscriberInformation": {
"PayerResponsibilitySequenceNumberCode_01": "P",
"ClaimFilingIndicatorCode_09": "CI"
},
"AllNM1": {
"Loop2010BA": {
"NM1_SubscriberName": {
"EntityIdentifierCode_01": "IL",
"EntityTypeQualifier_02": "1",
"ResponseContactLastorOrganizationName_03": "SMITH",
"ResponseContactFirstName_04": "JANE",
"IdentificationCodeQualifier_08": "MI",
"ResponseContactIdentifier_09": "111223333"
}
},
"Loop2010BB": {
"NM1_PayerName": {
"EntityIdentifierCode_01": "PR",
"EntityTypeQualifier_02": "2",
"ResponseContactLastorOrganizationName_03": "INSURANCE COMPANY XYZ",
"IdentificationCodeQualifier_08": "PI",
"ResponseContactIdentifier_09": "66783JJT"
}
}
},
"Loop2000C": [
{
"HL_PatientHierarchicalLevel": {
"HierarchicalIDNumber_01": "3",
"HierarchicalParentIDNumber_02": "2",
"HierarchicalLevelCode_03": "23",
"HierarchicalChildCode_04": "0"
},
"PAT_PatientInformation": {
"IndividualRelationshipCode_01": "19"
},
"Loop2010CA": {
"NM1_PatientName": {
"EntityIdentifierCode_01": "QC",
"EntityTypeQualifier_02": "1",
"ResponseContactLastorOrganizationName_03": "SMITH",
"ResponseContactFirstName_04": "TED"
},
"N3_PatientAddress": {
"ResponseContactAddressLine_01": "236 N MAIN ST"
},
"N4_PatientCity_State_ZIPCode": {
"AdditionalPatientInformationContactCityName_01": "MIAMI",
"AdditionalPatientInformationContactStateCode_02": "FL",
"AdditionalPatientInformationContactPostalZoneorZIPCode_03": "33413"
},
"DMG_PatientDemographicInformation": {
"DateTimePeriodFormatQualifier_01": "D8",
"DependentBirthDate_02": "19920501",
"DependentGenderCode_03": "M"
}
},
"Loop2300": [
{
"CLM_ClaimInformation": {
"PatientControlNumber_01": "26403774",
"TotalClaimChargeAmount_02": "150",
"HealthCareServiceLocationInformation_05": {
"FacilityTypeCode_01": "11",
"FacilityCodeQualifier_02": "B",
"ClaimFrequencyTypeCode_03": "1"
},
"ProviderorSupplierSignatureIndicator_06": "Y",
"AssignmentorPlanParticipationCode_07": "A",
"BenefitsAssignmentCertificationIndicator_08": "Y",
"ReleaseofInformationCode_09": "I"
},
"AllDTP": {
"DTP_Date_ServiceDate": {
"DateTimeQualifier_01": "472",
"DateTimePeriodFormatQualifier_02": "D8",
"DateTimePeriod_03": "20061029"
}
},
"AllREF": {
"REF_ClaimIdentifierForTransmissionIntermediaries": {
"ReferenceIdentificationQualifier_01": "D9",
"MemberGrouporPolicyNumber_02": "17312345600006351"
}
},
"AllNM1": {
"Loop2310B": {
"NM1_RenderingProviderName": {
"EntityIdentifierCode_01": "82",
"EntityTypeQualifier_02": "1",
"ResponseContactLastorOrganizationName_03": "KILDARE",
"ResponseContactFirstName_04": "BEN",
"IdentificationCodeQualifier_08": "XX",
"ResponseContactIdentifier_09": "9876543210"
},
"PRV_RenderingProviderSpecialtyInformation": {
"ProviderCode_01": "PE",
"ReferenceIdentificationQualifier_02": "PXC",
"ProviderTaxonomyCode_03": "1223G0001X"
}
}
},
"Loop2400": [
{
"LX_ServiceLineNumber": {
"AssignedNumber_01": "1"
},
"SV3_DentalService": {
"CompositeMedicalProcedureIdentifier_01": {
"ProductorServiceIDQualifier_01": "AD",
"ProcedureCode_02": "D2150"
},
"LineItemChargeAmount_02": "100",
"ProcedureCount_06": "1"
},
"TOO_ToothInformation": [
{
"CodeListQualifierCode_01": "JP",
"ToothCode_02": "12",
"ToothSurface_03": {
"ToothSurfaceCode_01": "M",
"ToothSurfaceCode_02": "O"
}
}
]
},
{
"LX_ServiceLineNumber": {
"AssignedNumber_01": "2"
},
"SV3_DentalService": {
"CompositeMedicalProcedureIdentifier_01": {
"ProductorServiceIDQualifier_01": "AD",
"ProcedureCode_02": "D1110"
},
"LineItemChargeAmount_02": "50",
"ProcedureCount_06": "1"
}
}
]
}
]
}
]
}
]
}
],
"SE": {
"NumberofIncludedSegments_01": "31",
"TransactionSetControlNumber_02": "3456"
}
}Read the file into typed objects with ediFabric .NET, convert it to JSON in process with the ediFabric Native bindings for Python, Java and C, or post it to the ediFabric Cloud REST API from any language.
using EdiFabric.Templates.Hipaa5010; License.SetSerial("YOUR_SERIAL_KEY"); using (var stream = File.OpenRead(@"C:\edi\DentalClaim.txt")) using (var reader = new X12Reader(stream, "EdiFabric.Templates.Hipaa")) { var items = await reader.ReadToEndAsync(); foreach (var transaction in items.OfType<TS837D>()) { if (transaction.IsValid(out MessageErrorContext errors)) Console.WriteLine($"{transaction.ST.TransactionSetControlNumber_02} is valid"); else Console.WriteLine(string.Join(Environment.NewLine, errors.Flatten())); } }
import json import edifabric_x12 as ef serial = "YOUR_SERIAL_KEY" ef.load_library() ef.set_serial(serial) ef.set_map(json.dumps({"default": serial, "maps": {}})) edi = open("DentalClaim.txt", "rb").read() output, offset = ef.parse(edi, ef.ParseMode.JSON_VALIDATE) transactions = output[:offset] report = json.loads(output[offset:]) print(report["errors_count"])
import com.edifabric.nativex12.EdiFabricX12; import com.edifabric.nativex12.ParseMode; import com.edifabric.nativex12.ParseResult; String serial = "YOUR_SERIAL_KEY"; EdiFabricX12.loadLibrary(); EdiFabricX12.setSerial(serial); EdiFabricX12.setMap("{\"default\":\"" + serial + "\",\"maps\":{}}"); String edi = Files.readString(Path.of("DentalClaim.txt")); ParseResult result = EdiFabricX12.parse(edi, ParseMode.JSON_VALIDATE); System.out.println(result.getTransactions()); System.out.println(result.getReport());
#include "edifabric_x12.h" const char *serial = "YOUR_SERIAL_KEY"; ef_parse_result result; if (ef_load_library(NULL) != 0) return 1; ef_set_serial(serial); ef_set_map("{\"default\":\"YOUR_SERIAL_KEY\",\"maps\":{}}"); char *edi = read_file("DentalClaim.txt", NULL); /* helper in example_all_functions.c */ if (ef_parse(edi, EF_PARSE_JSON_VALIDATE, NULL, &result) == 0) { /* transactions = output[0 .. offset), report = output[offset .. length) */ fwrite(result.output.data, 1, (size_t)result.output.length, stdout); ef_free(result.output.data); }
curl -X POST 'https://api.edination.com/v2/x12/read' \ -H 'Ocp-Apim-Subscription-Key: YOUR_SERIAL_KEY' \ -H 'Content-Type: application/octet-stream' \ --data-binary '@DentalClaim.txt'
Populate a TS837D object in .NET, or pass JSON in the shape shown above to ediFabric Native or ediFabric Cloud, and get a valid 837D file back.
using EdiFabric.Templates.Hipaa5010; License.SetSerial("YOUR_SERIAL_KEY"); var transaction = new TS837D(); // ST TRANSACTION SET HEADER transaction.ST = new ST(); transaction.ST.TransactionSetIdentifierCode_01 = "837"; transaction.ST.TransactionSetControlNumber_02 = "0001"; transaction.ST.ImplementationConventionPreference_03 = "005010X224A2"; // BHT TRANSACTION SET HIERARCHY AND CONTROL INFORMATION transaction.BHT_BeginningOfHierarchicalTransaction = new BHT_BeginningOfHierarchicalTransaction_8(); transaction.BHT_BeginningOfHierarchicalTransaction.HierarchicalStructureCode_01 = "0019"; transaction.BHT_BeginningOfHierarchicalTransaction.TransactionSetPurposeCode_02 = "00"; transaction.BHT_BeginningOfHierarchicalTransaction.SubmitterTransactionIdentifier_03 = "0123"; transaction.BHT_BeginningOfHierarchicalTransaction.TransactionSetCreationDate_04 = "20061123"; transaction.BHT_BeginningOfHierarchicalTransaction.TransactionSetCreationTime_05 = "1023"; transaction.BHT_BeginningOfHierarchicalTransaction.TransactionTypeCode_06 = "CH"; // Occurrence of NM1 Loops in any order transaction.AllNM1 = new All_NM1_837D_6(); // Begin 1000A Loop SUBMITTER NAME transaction.AllNM1.Loop1000A = new Loop_1000A_837D(); // ... set the remaining loops and segments the same way // SegmentBuilders is in the Common project of the example repository using (var stream = new MemoryStream()) { using (var writer = new X12Writer(stream)) { writer.Write(SegmentBuilders.BuildIsa("1")); writer.Write(SegmentBuilders.BuildGs("1", "SENDER1", "RECEIVER1", "005010X224A2")); writer.Write(transaction); } Console.WriteLine(Encoding.UTF8.GetString(stream.ToArray())); }
import json import edifabric_x12 as ef serial = "YOUR_SERIAL_KEY" ef.load_library() ef.set_serial(serial) ef.set_map(json.dumps({"default": serial, "maps": {}})) # the transactions JSON returned by ef.parse, edited or produced by your application transactions = open("DentalClaim.json", "rb").read() edi = ef.build(transactions, postfix="\r\n") print(edi)
import com.edifabric.nativex12.EdiFabricX12; String serial = "YOUR_SERIAL_KEY"; EdiFabricX12.loadLibrary(); EdiFabricX12.setSerial(serial); EdiFabricX12.setMap("{\"default\":\"" + serial + "\",\"maps\":{}}"); // the transactions JSON returned by parse, edited or produced by your application String transactions = Files.readString(Path.of("DentalClaim.json")); String edi = EdiFabricX12.build(transactions, "\r\n"); System.out.println(edi);
#include "edifabric_x12.h" ef_buffer edi; if (ef_load_library(NULL) != 0) return 1; ef_set_serial("YOUR_SERIAL_KEY"); ef_set_map("{\"default\":\"YOUR_SERIAL_KEY\",\"maps\":{}}"); /* the transactions JSON returned by ef_parse, edited or produced by your application */ char *transactions = read_file("DentalClaim.json", NULL); if (ef_build(transactions, "\r\n", &edi) == 0) { fwrite(edi.data, 1, (size_t)edi.length, stdout); ef_free(edi.data); }
# the JSON returned by /read, edited or produced by your application curl -X POST 'https://api.edination.com/v2/x12/write' \ -H 'Ocp-Apim-Subscription-Key: YOUR_SERIAL_KEY' \ -H 'Content-Type: application/json' \ --data-binary '@DentalClaim.json' \ -o 'DentalClaim.txt'
Each service line (loop 2400) can repeat the TOO segment. TOO02 holds the tooth number from the ADA Universal/National Tooth Designation System and TOO03 the tooth surfaces, such as M, O, D, B or L.
Dental procedures are reported with CDT codes in the SV3 segment, qualified with AD (American Dental Association codes).
Yes. The payer returns a 999 for syntax, a 277CA for claim acceptance and an 835 with the payment.
In .NET, install EdiFabric and EdiFabric.Templates.Hipaa, read the file with X12Reader into TS837D objects and write them back with X12Writer. From Python, Java or C, use ediFabric Native, which converts 837D files to JSON and JSON back to X12 inside your process. From any other language, post the file to the ediFabric Cloud REST API.