X12 837D Health Care Claim: Dental

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.

At a glance

Standard
X12 HIPAA
Implementation guide
005010X224A2
Functional group
HC (GS01)
Sent by
Dental provider or billing service to dental payer
Responses
999, 277CA, 835
ediFabric .NET template
TS837D in EdiFabric.Templates.Hipaa
OpenEDI definition
View 837D in the spec library

837D structure

The 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
STTransaction Set HeaderRequired1
BHTBeginning of Hierarchical TransactionRequired1
Any orderThe loops below can appear in any orderRequired1
Loop 1000ASubmitter NameRequired1
NM1Submitter NameRequired1
PERSubmitter EDI Contact InformationRequired2
Loop 1000BReceiver NameRequired1
NM1Receiver NameRequired1
Loop 2000ABilling Provider Hierarchical LevelRequired>1
HLBilling Provider Hierarchical LevelRequired1
PRVBilling Provider Specialty InformationSituational1
CURForeign Currency InformationSituational1
Any orderThe loops below can appear in any orderRequired1
Loop 2010AABilling Provider NameRequired1
NM1Billing Provider NameRequired1
N3Billing Provider AddressRequired1
N4Billing Provider City State ZIP CodeRequired1
Any orderThe loops below can appear in any orderRequired1
REFBilling Provider Tax IdentificationRequired1
REFBilling Provider UPIN License InformationSituational2
PERBilling Provider Contact InformationSituational2
Loop 2010ABPay Address NameSituational1
NM1Pay Address NameRequired1
N3Pay Address ADDRESSRequired1
N4Pay Address City State ZIP CodeRequired1
Loop 2010ACPay to Plan NameSituational1
NM1Pay to Plan NameRequired1
N3Pay to Plan AddressRequired1
N4Pay to Plan City State Zip CodeRequired1
Any orderThe loops below can appear in any orderRequired1
REFPay to Plan Secondary IdentificationSituational1
REFPay to Plan Tax Identification NumberRequired1
Loop 2000BSubscriber Hierarchical LevelRequired>1
HLSubscriber Hierarchical LevelRequired1
SBRSubscriber InformationRequired1
Any orderThe loops below can appear in any orderRequired1
Loop 2010BASubscriber NameRequired1
NM1Subscriber NameRequired1
N3Subscriber AddressSituational1
N4Subscriber City State ZIP CodeSituational1
DMGSubscriber Demographic InformationSituational1
Any orderThe loops below can appear in any orderSituational1
REFSubscriber Secondary IdentificationSituational1
REFPropertyand Casualty Claim NumberSituational1
Loop 2010BBPayer NameRequired1
NM1Payer NameRequired1
N3Payer AddressSituational1
N4Payer City State ZIP CodeSituational1
Any orderThe loops below can appear in any orderSituational1
REFPayer Secondary IdentificationSituational3
REFBilling Provider Secondary IdentificationSituational1
Loop 2300Claim InformationSituational100
CLMClaim InformationRequired1
Any orderThe loops below can appear in any orderSituational1
DTPDate AccidentSituational1
DTPDate Appliance PlacementSituational1
DTPDate Service DateSituational1
DTPDate Repricer Received DateSituational1
DN1Orthodontic Total Monthsof TreatmentSituational1
DN2Tooth StatusSituational35
PWKClaim Supplemental InformationSituational10
CN1Contract InformationSituational1
AMTPatient Amount PaidSituational1
Any orderThe loops below can appear in any orderSituational1
REFPredetermination IdentificationSituational1
REFService Authorization Exception CodeSituational1
REFPayer Claim Control NumberSituational1
REFReferral NumberSituational1
REFPrior AuthorizationSituational1
REFRepriced Claim NumberSituational1
REFAdjusted Repriced Claim NumberSituational1
REFClaim Identifier for Transmission IntermediariesSituational1
K3File InformationSituational10
NTEClaim NoteSituational5
HIHealth Care Diagnosis CodeSituational1
HCPClaim Pricing Repricing InformationSituational1
Any orderThe loops below can appear in any orderSituational1
Loop 2310AReferring Provider NameSituational2
NM1Referring Provider NameRequired1
PRVReferring Provider Specialty InformationSituational1
REFReferring Provider Secondary IdentificationSituational3
Loop 2310BRendering Provider NameSituational1
NM1Rendering Provider NameRequired1
PRVRendering Provider Specialty InformationRequired1
REFRendering Provider Secondary IdentificationSituational4
Loop 2310CService Facility Location NameSituational1
NM1Service Facility Location NameRequired1
N3Service Facility Location AddressRequired1
N4Service Facility Location City State Zip CodeRequired1
REFService Facility Location Secondary IdentificationSituational3
Loop 2310DAssistant Surgeon NameSituational1
NM1Assistant Surgeon NameRequired1
PRVAssistant Surgeon Specialty InformationRequired1
REFAssistant Surgeon Secondary IdentificationSituational4
Loop 2310ESupervising Provider NameSituational1
NM1Supervising Provider NameRequired1
REFSupervising Provider Secondary IdentificationSituational4
Loop 2320Other Subscriber InformationSituational10
SBROther Subscriber InformationRequired1
CASClaim Level AdjustmentsSituational5
Any orderThe loops below can appear in any orderSituational1
AMTCoordinationof Benefits COB Payer Paid AmountSituational1
AMTRemaining Patient LiabilitySituational1
AMTCoordinationof Benefits COB Total Non AmountSituational1
OIOther Insurance Coverage InformationRequired1
MOAOutpatient Adjudication InformationSituational1
Any orderThe loops below can appear in any orderRequired1
Loop 2330AOther Subscriber NameRequired1
NM1Other Subscriber NameRequired1
N3Other Subscriber AddressSituational1
N4Other Subscriber City State Zip CodeSituational1
REFOther Subscriber Secondary IdentificationSituational2
Loop 2330BOther Payer NameRequired1
NM1Other Payer NameRequired1
N3Other Payer AddressSituational1
N4Other Payer City State ZIP CodeSituational1
DTPClaim Check or Remittance DateSituational1
Any orderThe loops below can appear in any orderSituational1
REFOther Payer Secondary IdentifierSituational3
REFOther Payer Prior Authorization NumberSituational1
REFOther Payer Referral NumberSituational1
REFOther Payer Claim Adjustment IndicatorSituational1
REFOther Payer Predetermination IdentificationSituational1
REFOther Payer Claim Control NumberSituational1
Loop 2330COther Payer Referring ProviderSituational2
NM1Other Payer Referring ProviderRequired1
REFOther Payer Referring Provider Secondary IdentificationRequired3
Loop 2330DOther Payer Rendering ProviderSituational1
NM1Other Payer Rendering ProviderRequired1
REFOther Payer Rendering Provider Secondary IdentificationRequired3
Loop 2330EOther Payer Supervising ProviderSituational1
NM1Other Payer Supervising ProviderRequired1
REFOther Payer Supervising Provider IdentificationRequired3
Loop 2330FOther Payer Billing ProviderSituational1
NM1Other Payer Billing ProviderRequired1
REFOther Payer Billing Provider Secondary IdentificationRequired2
Loop 2330GOther Payer Service Facility LocationSituational1
NM1Other Payer Service Facility LocationRequired1
REFOther Payer Service Facility Location Secondary IdentificationRequired3
Loop 2330HOther Payer Assistant SurgeonSituational1
NM1Other Payer Assistant SurgeonRequired1
REFOther Payer Assistant Surgeon Secondary IdentifierRequired3
Loop 2400Service Line NumberRequired50
LXService Line NumberRequired1
SV3Dental ServiceRequired1
TOOTooth InformationSituational32
Any orderThe loops below can appear in any orderSituational1
DTPDate Service DateSituational1
DTPDate Prior PlacementSituational1
DTPDate Appliance PlacementSituational1
DTPDate ReplacementSituational1
DTPDate Treatment StartSituational1
DTPDate Treatment CompletionSituational1
CN1Contract InformationSituational1
Any orderThe loops below can appear in any orderSituational1
REFService Predetermination IdentificationSituational5
REFPrior AuthorizationSituational5
REFLine Item Control NumberSituational1
REFRepriced Claim NumberSituational1
REFAdjusted Repriced Claim NumberSituational1
REFReferral NumberSituational5
AMTSales Tax AmountSituational1
K3File InformationSituational10
HCPLine Pricing Repricing InformationSituational1
Any orderThe loops below can appear in any orderSituational1
Loop 2420ARendering Provider NameSituational1
NM1Rendering Provider NameRequired1
PRVRendering Provider Specialty InformationRequired1
REFRendering Provider Secondary IdentificationSituational20
Loop 2420BAssistant Surgeon NameSituational1
NM1Assistant Surgeon NameRequired1
PRVAssistant Surgeon Specialty InformationSituational1
REFAssistant Surgeon Secondary IdentificationSituational20
Loop 2420CSupervising Provider NameSituational1
NM1Supervising Provider NameRequired1
REFSupervising Provider Secondary IdentificationSituational20
Loop 2420DService Facility Location NameSituational1
NM1Service Facility Location NameRequired1
N3Service Facility Location AddressRequired1
N4Service Facility Location City State ZIP CodeRequired1
REFService Facility Location Secondary IdentificationSituational20
Loop 2430Line Adjudication InformationSituational15
SVDLine Adjudication InformationRequired1
CASLine AdjustmentSituational5
DTPLine Checkor Remittance DateRequired1
AMTRemaining Patient LiabilitySituational1
Loop 2000CPatient Hierarchical LevelSituational>1
HLPatient Hierarchical LevelRequired1
PATPatient InformationRequired1
Loop 2010CAPatient NameRequired1
NM1Patient NameRequired1
N3Patient AddressRequired1
N4Patient City State ZIP CodeRequired1
DMGPatient Demographic InformationRequired1
Any orderThe loops below can appear in any orderSituational1
REFPropertyand Casualty Claim NumberSituational1
REFPropertyand Casualty Patient IdentifierSituational1
Loop 2300Claim InformationRequired100
CLMClaim InformationRequired1
Any orderThe loops below can appear in any orderSituational1
DTPDate AccidentSituational1
DTPDate Appliance PlacementSituational1
DTPDate Service DateSituational1
DTPDate Repricer Received DateSituational1
DN1Orthodontic Total Monthsof TreatmentSituational1
DN2Tooth StatusSituational35
PWKClaim Supplemental InformationSituational10
CN1Contract InformationSituational1
AMTPatient Amount PaidSituational1
Any orderThe loops below can appear in any orderSituational1
REFPredetermination IdentificationSituational1
REFService Authorization Exception CodeSituational1
REFPayer Claim Control NumberSituational1
REFReferral NumberSituational1
REFPrior AuthorizationSituational1
REFRepriced Claim NumberSituational1
REFAdjusted Repriced Claim NumberSituational1
REFClaim Identifier for Transmission IntermediariesSituational1
K3File InformationSituational10
NTEClaim NoteSituational5
HIHealth Care Diagnosis CodeSituational1
HCPClaim Pricing Repricing InformationSituational1
Any orderThe loops below can appear in any orderSituational1
Loop 2310AReferring Provider NameSituational2
NM1Referring Provider NameRequired1
PRVReferring Provider Specialty InformationSituational1
REFReferring Provider Secondary IdentificationSituational3
Loop 2310BRendering Provider NameSituational1
NM1Rendering Provider NameRequired1
PRVRendering Provider Specialty InformationRequired1
REFRendering Provider Secondary IdentificationSituational4
Loop 2310CService Facility Location NameSituational1
NM1Service Facility Location NameRequired1
N3Service Facility Location AddressRequired1
N4Service Facility Location City State Zip CodeRequired1
REFService Facility Location Secondary IdentificationSituational3
Loop 2310DAssistant Surgeon NameSituational1
NM1Assistant Surgeon NameRequired1
PRVAssistant Surgeon Specialty InformationRequired1
REFAssistant Surgeon Secondary IdentificationSituational4
Loop 2310ESupervising Provider NameSituational1
NM1Supervising Provider NameRequired1
REFSupervising Provider Secondary IdentificationSituational4
Loop 2320Other Subscriber InformationSituational10
SBROther Subscriber InformationRequired1
CASClaim Level AdjustmentsSituational5
Any orderThe loops below can appear in any orderSituational1
AMTCoordinationof Benefits COB Payer Paid AmountSituational1
AMTRemaining Patient LiabilitySituational1
AMTCoordinationof Benefits COB Total Non AmountSituational1
OIOther Insurance Coverage InformationRequired1
MOAOutpatient Adjudication InformationSituational1
Any orderThe loops below can appear in any orderRequired1
Loop 2330AOther Subscriber NameRequired1
NM1Other Subscriber NameRequired1
N3Other Subscriber AddressSituational1
N4Other Subscriber City State Zip CodeSituational1
REFOther Subscriber Secondary IdentificationSituational2
Loop 2330BOther Payer NameRequired1
NM1Other Payer NameRequired1
N3Other Payer AddressSituational1
N4Other Payer City State ZIP CodeSituational1
DTPClaim Check or Remittance DateSituational1
Any orderThe loops below can appear in any orderSituational1
REFOther Payer Secondary IdentifierSituational3
REFOther Payer Prior Authorization NumberSituational1
REFOther Payer Referral NumberSituational1
REFOther Payer Claim Adjustment IndicatorSituational1
REFOther Payer Predetermination IdentificationSituational1
REFOther Payer Claim Control NumberSituational1
Loop 2330COther Payer Referring ProviderSituational2
NM1Other Payer Referring ProviderRequired1
REFOther Payer Referring Provider Secondary IdentificationRequired3
Loop 2330DOther Payer Rendering ProviderSituational1
NM1Other Payer Rendering ProviderRequired1
REFOther Payer Rendering Provider Secondary IdentificationRequired3
Loop 2330EOther Payer Supervising ProviderSituational1
NM1Other Payer Supervising ProviderRequired1
REFOther Payer Supervising Provider IdentificationRequired3
Loop 2330FOther Payer Billing ProviderSituational1
NM1Other Payer Billing ProviderRequired1
REFOther Payer Billing Provider Secondary IdentificationRequired2
Loop 2330GOther Payer Service Facility LocationSituational1
NM1Other Payer Service Facility LocationRequired1
REFOther Payer Service Facility Location Secondary IdentificationRequired3
Loop 2330HOther Payer Assistant SurgeonSituational1
NM1Other Payer Assistant SurgeonRequired1
REFOther Payer Assistant Surgeon Secondary IdentifierRequired3
Loop 2400Service Line NumberRequired50
LXService Line NumberRequired1
SV3Dental ServiceRequired1
TOOTooth InformationSituational32
Any orderThe loops below can appear in any orderSituational1
DTPDate Service DateSituational1
DTPDate Prior PlacementSituational1
DTPDate Appliance PlacementSituational1
DTPDate ReplacementSituational1
DTPDate Treatment StartSituational1
DTPDate Treatment CompletionSituational1
CN1Contract InformationSituational1
Any orderThe loops below can appear in any orderSituational1
REFService Predetermination IdentificationSituational5
REFPrior AuthorizationSituational5
REFLine Item Control NumberSituational1
REFRepriced Claim NumberSituational1
REFAdjusted Repriced Claim NumberSituational1
REFReferral NumberSituational5
AMTSales Tax AmountSituational1
K3File InformationSituational10
HCPLine Pricing Repricing InformationSituational1
Any orderThe loops below can appear in any orderSituational1
Loop 2420ARendering Provider NameSituational1
NM1Rendering Provider NameRequired1
PRVRendering Provider Specialty InformationRequired1
REFRendering Provider Secondary IdentificationSituational20
Loop 2420BAssistant Surgeon NameSituational1
NM1Assistant Surgeon NameRequired1
PRVAssistant Surgeon Specialty InformationSituational1
REFAssistant Surgeon Secondary IdentificationSituational20
Loop 2420CSupervising Provider NameSituational1
NM1Supervising Provider NameRequired1
REFSupervising Provider Secondary IdentificationSituational20
Loop 2420DService Facility Location NameSituational1
NM1Service Facility Location NameRequired1
N3Service Facility Location AddressRequired1
N4Service Facility Location City State ZIP CodeRequired1
REFService Facility Location Secondary IdentificationSituational20
Loop 2430Line Adjudication InformationSituational15
SVDLine Adjudication InformationRequired1
CASLine AdjustmentSituational5
DTPLine Checkor Remittance DateRequired1
AMTRemaining Patient LiabilitySituational1
SETransaction Set TrailerRequired1

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.

Sample 837D file

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~

The same 837D as JSON

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"
  }
}

Parse and validate an 837D file

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'

Generate an 837D file

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'

837D questions

How does the 837D identify teeth and surfaces?

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.

Which procedure codes does an 837D use?

Dental procedures are reported with CDT codes in the SV3 segment, qualified with AD (American Dental Association codes).

Is the 837D answered like the 837P?

Yes. The payer returns a 999 for syntax, a 277CA for claim acceptance and an 835 with the payment.

How do I parse and generate X12 837D files in .NET, Python, Java and C?

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.

Related transactions

Parse your first 837D in five minutes

The Community plan is free forever and needs no credit card. It includes ediFabric .NET, Native and Cloud.