X12 278 Health Care Services Review: Request for Review and Response

The 278 (005010X217) is the HIPAA transaction for health care services review: providers use it to request prior authorization or a referral from a utilization management organization, and the same transaction set carries the response.

The request identifies the UMO, requester, subscriber, patient and the services in HL loops, with the UM segment describing the review. The response adds HCR segments with the decision, such as certified, not certified or pended, and the authorization number.

At a glance

Standard
X12 HIPAA
Implementation guide
005010X217
Functional group
HI (GS01)
Sent by
Provider to payer or UMO, and back
Responses
278 response, 999
ediFabric .NET template
TS278 in EdiFabric.Templates.Hipaa
OpenEDI definition
View 278 in the spec library

278 structure

The full X12 278 layout from its OpenEDI definition, the same model ediFabric uses to parse, validate and generate it: 44 loops and 313 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
Loop BHTBeginning of Hierarchical TransactionSituational1
BHTBeginning of Hierarchical TransactionSituational1
Loop 2000AUtilization Management Organization UMO LevelSituational1
HLUtilization Management Organization UMO LevelRequired1
Loop 2010AUtilization Management Organization UMO NameRequired1
NM1Utilization Management Organization UMO NameRequired1
Loop 2000BRequester LevelRequired1
HLRequester LevelRequired1
Loop 2010BRequester NameRequired1
NM1Requester NameRequired1
REFRequester Supplemental IdentificationSituational8
N3Requester AddressSituational1
N4Requester City State ZIP CodeSituational1
PERRequester Contact InformationSituational1
PRVRequester Provider InformationSituational1
Loop 2000CSubscriber LevelRequired1
HLSubscriber LevelRequired1
Loop 2010CSubscriber NameRequired1
NM1Subscriber NameRequired1
REFSubscriber Supplemental IdentificationSituational9
N3Subscriber AddressSituational1
N4Subscriber City State ZIP CodeSituational1
DMGSubscriber Demographic InformationSituational1
INSSubscriber RelationshipSituational1
Loop 2000DDependent LevelSituational1
HLDependent LevelRequired1
Loop 2010DDependent NameRequired1
NM1Dependent NameRequired1
REFDependent Supplemental IdentificationSituational3
N3Dependent AddressSituational1
N4Dependent City State ZIP CodeSituational1
DMGDependent Demographic InformationSituational1
INSDependent RelationshipSituational1
Loop 2000EPatient Event LevelRequired1
HLPatient Event LevelRequired1
TRNPatient Event Tracking NumberSituational2
UMHealth Care Services Review InformationRequired1
Any orderThe loops below can appear in any orderSituational1
REFPrevious Review Authorization NumberSituational1
REFPrevious Review Administrative Reference NumberSituational1
Any orderThe loops below can appear in any orderSituational1
DTPAccident DateSituational1
DTPLast Menstrual Period DateSituational1
DTPEstimated Dateof BirthSituational1
DTPOnsetof Current Symptomsor Illness DateSituational1
DTPEvent DateSituational1
DTPAdmission DateSituational1
DTPDischarge DateSituational1
HIPatient DiagnosisSituational1
HSDHealth Care Services DeliverySituational1
Any orderThe loops below can appear in any orderSituational1
CRCAmbulance Certification InformationSituational1
CRCChiropractic Certification InformationSituational1
CRCDurable Medical Equipment InformationSituational1
CRCOxygen Therapy Certification InformationSituational1
CRCFunctional Limitations InformationSituational1
CRCActivities Permitted InformationSituational1
CRCMental Status InformationSituational1
CL1Institutional Claim CodeSituational1
CR1Ambulance Transport InformationSituational1
CR2Spinal Manipulation Service InformationSituational1
CR5Home Oxygen Therapy InformationSituational1
CR6Home Health Care InformationSituational1
PWKAdditional Patient InformationSituational10
MSGMessage TextSituational1
Any orderThe loops below can appear in any orderSituational1
Loop 2010EAPatient Event Provider NameSituational14
NM1Patient Event Provider NameRequired1
REFPatient Event Provider Supplemental InformationSituational7
N3Patient Event Provider AddressSituational1
N4Patient Event Provider City State Zip CodeSituational1
PERPatient Event Provider Contact InformationSituational1
PRVPatient Event Provider InformationSituational1
Loop 2010EBPatient Event Transport InformationSituational5
NM1Patient Event Transport InformationRequired1
N3Patient Event Transport Location AddressRequired1
N4Patient Event Transport Location City State ZIP CodeRequired1
Loop 2010ECPatient Event Other UMO NameSituational3
NM1Patient Event Other UMO NameRequired1
REFOther UMO Denial ReasonRequired1
DTPOther UMO Denial DateRequired1
Loop 2000FService LevelSituational>1
HLService LevelRequired1
TRNService Trace NumberSituational2
UMHealth Care Services Review InformationSituational1
Any orderThe loops below can appear in any orderSituational1
REFPrevious Review Authorization NumberSituational1
REFPrevious Review Administrative Reference NumberSituational1
DTPService DateSituational1
SV1Professional ServiceSituational1
SV2Institutional Service LineSituational1
SV3Dental ServiceSituational1
TOOTooth InformationSituational32
HSDHealth Care Services DeliverySituational1
PWKAdditional Service InformationSituational10
MSGMessage TextSituational1
Loop 2010FService Provider NameSituational10
NM1Service Provider NameRequired1
REFService Provider Supplemental IdentificationSituational8
N3Service Provider AddressSituational1
N4Service Provider City State ZIP CodeSituational1
PERService Provider Contact InformationSituational1
PRVService Provider InformationSituational1
Loop 2000EPatient Event LevelSituational1
HLPatient Event LevelRequired1
TRNPatient Event Tracking NumberSituational2
UMHealth Care Services Review InformationRequired1
Any orderThe loops below can appear in any orderSituational1
REFPrevious Review Authorization NumberSituational1
REFPrevious Review Administrative Reference NumberSituational1
Any orderThe loops below can appear in any orderSituational1
DTPAccident DateSituational1
DTPLast Menstrual Period DateSituational1
DTPEstimated Dateof BirthSituational1
DTPOnsetof Current Symptomsor Illness DateSituational1
DTPEvent DateSituational1
DTPAdmission DateSituational1
DTPDischarge DateSituational1
HIPatient DiagnosisSituational1
HSDHealth Care Services DeliverySituational1
Any orderThe loops below can appear in any orderSituational1
CRCAmbulance Certification InformationSituational1
CRCChiropractic Certification InformationSituational1
CRCDurable Medical Equipment InformationSituational1
CRCOxygen Therapy Certification InformationSituational1
CRCFunctional Limitations InformationSituational1
CRCActivities Permitted InformationSituational1
CRCMental Status InformationSituational1
CL1Institutional Claim CodeSituational1
CR1Ambulance Transport InformationSituational1
CR2Spinal Manipulation Service InformationSituational1
CR5Home Oxygen Therapy InformationSituational1
CR6Home Health Care InformationSituational1
PWKAdditional Patient InformationSituational10
MSGMessage TextSituational1
Any orderThe loops below can appear in any orderSituational1
Loop 2010EAPatient Event Provider NameSituational14
NM1Patient Event Provider NameRequired1
REFPatient Event Provider Supplemental InformationSituational7
N3Patient Event Provider AddressSituational1
N4Patient Event Provider City State Zip CodeSituational1
PERPatient Event Provider Contact InformationSituational1
PRVPatient Event Provider InformationSituational1
Loop 2010EBPatient Event Transport InformationSituational5
NM1Patient Event Transport InformationRequired1
N3Patient Event Transport Location AddressRequired1
N4Patient Event Transport Location City State ZIP CodeRequired1
Loop 2010ECPatient Event Other UMO NameSituational3
NM1Patient Event Other UMO NameRequired1
REFOther UMO Denial ReasonRequired1
DTPOther UMO Denial DateRequired1
Loop 2000FService LevelSituational>1
HLService LevelRequired1
TRNService Trace NumberSituational2
UMHealth Care Services Review InformationSituational1
Any orderThe loops below can appear in any orderSituational1
REFPrevious Review Authorization NumberSituational1
REFPrevious Review Administrative Reference NumberSituational1
DTPService DateSituational1
SV1Professional ServiceSituational1
SV2Institutional Service LineSituational1
SV3Dental ServiceSituational1
TOOTooth InformationSituational32
HSDHealth Care Services DeliverySituational1
PWKAdditional Service InformationSituational10
MSGMessage TextSituational1
Loop 2010FService Provider NameSituational10
NM1Service Provider NameRequired1
REFService Provider Supplemental IdentificationSituational8
N3Service Provider AddressSituational1
N4Service Provider City State ZIP CodeSituational1
PERService Provider Contact InformationSituational1
PRVService Provider InformationSituational1
Loop BHTBeginning of Hierarchical TransactionSituational1
BHTBeginning of Hierarchical TransactionSituational1
Loop 2000AUtilization Management Organization UMO LevelSituational1
HLUtilization Management Organization UMO LevelRequired1
AAARequest ValidationSituational9
Loop 2010AUtilization Management Organization UMO NameRequired1
NM1Utilization Management Organization UMO NameRequired1
PERUtilization Management Organization UMO Contact InformationSituational1
AAAUtilization Management Organization UMO Request ValidationSituational9
Loop 2000BRequester LevelSituational1
HLRequester LevelRequired1
Loop 2010BRequester NameRequired2
NM1Requester NameRequired1
REFRequester Supplemental IdentificationSituational8
AAARequester Request ValidationSituational9
PRVRequester Provider InformationSituational1
Loop 2000CSubscriber LevelSituational1
HLSubscriber LevelRequired1
Loop 2010CSubscriber NameRequired1
NM1Subscriber NameRequired1
REFSubscriber Supplemental IdentificationSituational9
N3Subscriber Mailing AddressSituational1
N4Subscriber City State ZIP CodeSituational1
AAASubscriber Request ValidationSituational9
DMGSubscriber Demographic InformationSituational1
INSSubscriber RelationshipSituational1
Loop 2000EPatient Event LevelSituational>1
HLPatient Event LevelRequired1
TRNPatient Event Tracking NumberSituational3
AAAPatient Event Request ValidationSituational9
UMHealth Care Services Review InformationRequired1
HCRHealth Care Services ReviewSituational1
Any orderThe loops below can appear in any orderSituational1
REFAdministrative Reference NumberSituational1
REFPrevious Review Authorization NumberSituational1
Any orderThe loops below can appear in any orderSituational1
DTPAccident DateSituational1
DTPLast Menstrual Period DateSituational1
DTPEstimated Dateof BirthSituational1
DTPOnsetof Current Symptomsor Illness DateSituational1
DTPEvent DateSituational1
DTPAdmission DateSituational1
DTPDischarge DateSituational1
DTPCertification Issue DateSituational1
DTPCertification Expiration DateSituational1
DTPCertification Effective DateSituational1
HIPatient DiagnosisSituational1
HSDHealth Care Services DeliverySituational1
CL1Institutional Claim CodeSituational1
CR1Ambulance Transport InformationSituational1
CR2Spinal Manipulation Service InformationSituational1
CR5Home Oxygen Therapy InformationSituational1
CR6Home Health Care InformationSituational1
PWKAdditional Patient InformationSituational10
MSGMessage TextSituational1
Any orderThe loops below can appear in any orderSituational1
Loop 2010EAPatient Event Provider NameSituational14
NM1Patient Event Provider NameRequired1
REFPatient Event Provider Supplemental IdentificationSituational7
N3Patient Event Provider AddressSituational1
N4Patient Event Provider City State ZIP CodeSituational1
PERProvider Contact InformationSituational1
AAAPatient Event Provider Request ValidationSituational9
PRVPatient Event Provider InformationSituational1
Loop 2010EBAdditional Patient Information Contact NameSituational1
NM1Additional Patient Information Contact NameRequired1
N3Additional Patient Information Contact AddressSituational1
N4Additional Patient Information Contact City State ZIP CodeSituational1
PERAdditional Patient Information Contact InformationSituational1
Loop 2010ECPatient Event Transport InformationSituational5
NM1Patient Event Transport InformationRequired1
N3Patient Event Transport Location AddressRequired1
N4Patient Event Transport Location City State ZIP CodeRequired1
AAAPatient Event Transport Location Request ValidationSituational9
Loop 2000FService LevelSituational>1
HLService LevelRequired1
TRNService Trace NumberSituational3
AAAService Request ValidationSituational9
UMHealth Care Services Review InformationSituational1
HCRHealth Care Services ReviewSituational1
Any orderThe loops below can appear in any orderSituational1
REFAdministrative Reference NumberSituational1
REFPrevious Review Authorization NumberSituational1
Any orderThe loops below can appear in any orderSituational1
DTPService DateSituational1
DTPCertification Issue DateSituational1
DTPCertification Expiration DateSituational1
DTPCertification Effective DateSituational1
HIRequest for Additional InformationSituational1
SV1Professional ServiceSituational1
SV2Institutional Service LineSituational1
SV3Dental ServiceSituational1
TOOTooth InformationSituational32
HSDHealth Care Services DeliverySituational1
PWKAdditional Service InformationSituational10
MSGMessage TextSituational1
Any orderThe loops below can appear in any orderSituational1
Loop 2010FAService Provider NameSituational12
NM1Service Provider NameRequired1
REFService Provider Supplemental IdentificationSituational8
N3Service Provider AddressSituational1
N4Service Provider City State ZIP CodeSituational1
PERService Provider Contact InformationSituational1
AAAService Provider Request ValidationSituational9
PRVService Provider InformationSituational1
Loop 2010FBAdditional Service Information Contact NameSituational1
NM1Additional Service Information Contact NameRequired1
N3Additional Service Information Contact AddressSituational1
N4Additional Service Information Contact City State ZIP CodeRequired1
PERAdditional Service Information Contact InformationSituational1
Loop 2000DDependent LevelSituational1
HLDependent LevelRequired1
Loop 2010DDependent NameRequired1
NM1Dependent NameRequired1
REFDependent Supplemental IdentificationSituational3
N3Dependent AddressSituational1
N4Dependent City State ZIP CodeSituational1
AAADependent Request ValidationSituational9
DMGDependent Demographic InformationSituational1
INSDependent RelationshipSituational1
Loop 2000EPatient Event LevelSituational>1
HLPatient Event LevelRequired1
TRNPatient Event Tracking NumberSituational3
AAAPatient Event Request ValidationSituational9
UMHealth Care Services Review InformationRequired1
HCRHealth Care Services ReviewSituational1
Any orderThe loops below can appear in any orderSituational1
REFAdministrative Reference NumberSituational1
REFPrevious Review Authorization NumberSituational1
Any orderThe loops below can appear in any orderSituational1
DTPAccident DateSituational1
DTPLast Menstrual Period DateSituational1
DTPEstimated Dateof BirthSituational1
DTPOnsetof Current Symptomsor Illness DateSituational1
DTPEvent DateSituational1
DTPAdmission DateSituational1
DTPDischarge DateSituational1
DTPCertification Issue DateSituational1
DTPCertification Expiration DateSituational1
DTPCertification Effective DateSituational1
HIPatient DiagnosisSituational1
HSDHealth Care Services DeliverySituational1
CL1Institutional Claim CodeSituational1
CR1Ambulance Transport InformationSituational1
CR2Spinal Manipulation Service InformationSituational1
CR5Home Oxygen Therapy InformationSituational1
CR6Home Health Care InformationSituational1
PWKAdditional Patient InformationSituational10
MSGMessage TextSituational1
Any orderThe loops below can appear in any orderSituational1
Loop 2010EAPatient Event Provider NameSituational14
NM1Patient Event Provider NameRequired1
REFPatient Event Provider Supplemental IdentificationSituational7
N3Patient Event Provider AddressSituational1
N4Patient Event Provider City State ZIP CodeSituational1
PERProvider Contact InformationSituational1
AAAPatient Event Provider Request ValidationSituational9
PRVPatient Event Provider InformationSituational1
Loop 2010EBAdditional Patient Information Contact NameSituational1
NM1Additional Patient Information Contact NameRequired1
N3Additional Patient Information Contact AddressSituational1
N4Additional Patient Information Contact City State ZIP CodeSituational1
PERAdditional Patient Information Contact InformationSituational1
Loop 2010ECPatient Event Transport InformationSituational5
NM1Patient Event Transport InformationRequired1
N3Patient Event Transport Location AddressRequired1
N4Patient Event Transport Location City State ZIP CodeRequired1
AAAPatient Event Transport Location Request ValidationSituational9
Loop 2000FService LevelSituational>1
HLService LevelRequired1
TRNService Trace NumberSituational3
AAAService Request ValidationSituational9
UMHealth Care Services Review InformationSituational1
HCRHealth Care Services ReviewSituational1
Any orderThe loops below can appear in any orderSituational1
REFAdministrative Reference NumberSituational1
REFPrevious Review Authorization NumberSituational1
Any orderThe loops below can appear in any orderSituational1
DTPService DateSituational1
DTPCertification Issue DateSituational1
DTPCertification Expiration DateSituational1
DTPCertification Effective DateSituational1
HIRequest for Additional InformationSituational1
SV1Professional ServiceSituational1
SV2Institutional Service LineSituational1
SV3Dental ServiceSituational1
TOOTooth InformationSituational32
HSDHealth Care Services DeliverySituational1
PWKAdditional Service InformationSituational10
MSGMessage TextSituational1
Any orderThe loops below can appear in any orderSituational1
Loop 2010FAService Provider NameSituational12
NM1Service Provider NameRequired1
REFService Provider Supplemental IdentificationSituational8
N3Service Provider AddressSituational1
N4Service Provider City State ZIP CodeSituational1
PERService Provider Contact InformationSituational1
AAAService Provider Request ValidationSituational9
PRVService Provider InformationSituational1
Loop 2010FBAdditional Service Information Contact NameSituational1
NM1Additional Service Information Contact NameRequired1
N3Additional Service Information Contact AddressSituational1
N4Additional Service Information Contact City State ZIP CodeRequired1
PERAdditional Service Information Contact InformationSituational1
SETransaction Set TrailerRequired1

Usage follows the 005010X217 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 278 file

A request for review of a planned service. 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*005010X217~
ST*278*0001*005010X217~
BHT*0007*13*A12345*20050502*1101~
HL*1**20*1~
NM1*X3*2*MARYLAND CAPITAL INSURANCE COMPANY*****46*789312~
HL*2*1*21*1~
NM1*1P*1*GARDENER*JAMES****46*8189991234~
HL*3*2*22*1~
NM1*IL*1*SMITH*JOE****MI*12345678901~
HL*4*3*EV*0~
TRN*1*111099*9012345678~
UM*SC*I*3*11:B*****Y~
HI*BF:41090:D8:20050430~
HSD*VS*1~
NM1*SJ*1*WATSON*SUSAN****34*987654321~
PER*IC**TE*4029993456~
SE*16*0001~
GE*1*101~
IEA*1*000000101~

The same 278 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": "278",
    "TransactionSetControlNumber_02": "0001",
    "ImplementationConventionPreference_03": "005010X217"
  },
  "LoopBHT": {
    "BHT_BeginningOfHierarchicalTransaction": {
      "HierarchicalStructureCode_01": "0007",
      "TransactionSetPurposeCode_02": "13",
      "SubmitterTransactionIdentifier_03": "A12345",
      "TransactionSetCreationDate_04": "20050502",
      "TransactionSetCreationTime_05": "1101"
    },
    "Loop2000A": {
      "HL_UtilizationManagementOrganization_UMO_Level": {
        "HierarchicalIDNumber_01": "1",
        "HierarchicalLevelCode_03": "20",
        "HierarchicalChildCode_04": "1"
      },
      "Loop2010A": {
        "NM1_UtilizationManagementOrganization_UMO_Name": {
          "EntityIdentifierCode_01": "X3",
          "EntityTypeQualifier_02": "2",
          "ResponseContactLastorOrganizationName_03": "MARYLAND CAPITAL INSURANCE COMPANY",
          "IdentificationCodeQualifier_08": "46",
          "ResponseContactIdentifier_09": "789312"
        }
      },
      "Loop2000B": {
        "HL_RequesterLevel": {
          "HierarchicalIDNumber_01": "2",
          "HierarchicalParentIDNumber_02": "1",
          "HierarchicalLevelCode_03": "21",
          "HierarchicalChildCode_04": "1"
        },
        "Loop2010B": {
          "NM1_RequesterName": {
            "EntityIdentifierCode_01": "1P",
            "EntityTypeQualifier_02": "1",
            "ResponseContactLastorOrganizationName_03": "GARDENER",
            "ResponseContactFirstName_04": "JAMES",
            "IdentificationCodeQualifier_08": "46",
            "ResponseContactIdentifier_09": "8189991234"
          }
        },
        "Loop2000C": {
          "HL_SubscriberLevel": {
            "HierarchicalIDNumber_01": "3",
            "HierarchicalParentIDNumber_02": "2",
            "HierarchicalLevelCode_03": "22",
            "HierarchicalChildCode_04": "1"
          },
          "Loop2010C": {
            "NM1_SubscriberName": {
              "EntityIdentifierCode_01": "IL",
              "EntityTypeQualifier_02": "1",
              "ResponseContactLastorOrganizationName_03": "SMITH",
              "ResponseContactFirstName_04": "JOE",
              "IdentificationCodeQualifier_08": "MI",
              "ResponseContactIdentifier_09": "12345678901"
            }
          },
          "Loop2000E": {
            "HL_PatientEventLevel": {
              "HierarchicalIDNumber_01": "4",
              "HierarchicalParentIDNumber_02": "3",
              "HierarchicalLevelCode_03": "EV",
              "HierarchicalChildCode_04": "0"
            },
            "TRN_PatientEventTrackingNumber": [
              {
                "TraceTypeCode_01": "1",
                "CurrentTransactionTraceNumber_02": "111099",
                "OriginatingCompanyIdentifier_03": "9012345678"
              }
            ],
            "UM_HealthCareServicesReviewInformation": {
              "RequestCategoryCode_01": "SC",
              "CertificationTypeCode_02": "I",
              "ServiceTypeCode_03": "3",
              "ValuesEntered_04": {
                "FacilityTypeCode_01": "11",
                "FacilityCodeQualifier_02": "B"
              },
              "ReleaseofInformationCode_09": "Y"
            },
            "HI_PatientDiagnosis": {
              "HealthCareCodeInformation_01": {
                "CodeListQualifierCode_01": "BF",
                "IndustryCode_02": "41090",
                "DateTimePeriodFormatQualifier_03": "D8",
                "DateTimePeriod_04": "20050430"
              }
            },
            "HSD_HealthCareServicesDelivery": {
              "QuantityQualifier_01": "VS",
              "BenefitQuantity_02": "1"
            },
            "AllNM1": {
              "Loop2010EA": [
                {
                  "NM1_PatientEventProviderName": {
                    "EntityIdentifierCode_01": "SJ",
                    "EntityTypeQualifier_02": "1",
                    "ResponseContactLastorOrganizationName_03": "WATSON",
                    "ResponseContactFirstName_04": "SUSAN",
                    "IdentificationCodeQualifier_08": "34",
                    "ResponseContactIdentifier_09": "987654321"
                  },
                  "PER_PatientEventProviderContactInformation": {
                    "ContactFunctionCode_01": "IC",
                    "CommunicationNumberQualifier_03": "TE",
                    "ResponseContactCommunicationNumber_04": "4029993456"
                  }
                }
              ]
            }
          }
        }
      }
    }
  },
  "SE": {
    "NumberofIncludedSegments_01": "16",
    "TransactionSetControlNumber_02": "0001"
  }
}

Parse and validate a 278 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\ServicesReview.txt"))
using (var reader = new X12Reader(stream, "EdiFabric.Templates.Hipaa"))
{
    var items = await reader.ReadToEndAsync();
    foreach (var transaction in items.OfType<TS278>())
    {
        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("ServicesReview.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("ServicesReview.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("ServicesReview.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 '@ServicesReview.txt'

Generate a 278 file

Populate a TS278 object in .NET, or pass JSON in the shape shown above to ediFabric Native or ediFabric Cloud, and get a valid 278 file back.

using EdiFabric.Templates.Hipaa5010;

License.SetSerial("YOUR_SERIAL_KEY");

var transaction = new TS278();

//  Begin transaction set 278, control #0001, and implementation convention reference is 005010X217.
transaction.ST = new ST();
transaction.ST.TransactionSetIdentifierCode_01 = "278";
transaction.ST.TransactionSetControlNumber_02 = "0001";
transaction.ST.ImplementationConventionPreference_03 = "005010X217";

//  Begin Loop BHT
transaction.LoopBHT = new Loop_BHT_278();

//  This transaction is a request using hierarchical structure 0007 (information source, information receiver, subscriber, dependent, event, services). 
//  The originating system has assigned the Submitter Transaction Identifier “A12345" along with the transaction set creation date and time.
transaction.LoopBHT.BHT_BeginningOfHierarchicalTransaction = new BHT_BeginningOfHierarchicalTransaction_6();
transaction.LoopBHT.BHT_BeginningOfHierarchicalTransaction.HierarchicalStructureCode_01 = "0007";
transaction.LoopBHT.BHT_BeginningOfHierarchicalTransaction.TransactionSetPurposeCode_02 = "13";
transaction.LoopBHT.BHT_BeginningOfHierarchicalTransaction.SubmitterTransactionIdentifier_03 = "A12345";
transaction.LoopBHT.BHT_BeginningOfHierarchicalTransaction.TransactionSetCreationDate_04 = "20050502";
transaction.LoopBHT.BHT_BeginningOfHierarchicalTransaction.TransactionSetCreationTime_05 = "1101";

//  Begin 2000A Loop hierarchical level identifies the Insurance Company.
transaction.LoopBHT.Loop2000A = new Loop_2000A_278();

// ... 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", "005010X217"));
        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("ServicesReview.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("ServicesReview.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("ServicesReview.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 '@ServicesReview.json' \
-o 'ServicesReview.txt'

278 questions

Is the 278 request the same transaction as the response?

Yes. Both are ST*278 with the same implementation guide. BHT02 and the presence of HCR segments show whether a document is a request or a response.

Where is the authorization decision?

In the HCR segment. HCR01 A1 means certified in total, A3 not certified, A4 pended and A6 modified. HCR02 carries the authorization or reference number.

Is prior authorization done in real time?

It can be. The 278 is exchanged both in real time and in batch, depending on the payer's connectivity.

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

In .NET, install EdiFabric and EdiFabric.Templates.Hipaa, read the file with X12Reader into TS278 objects and write them back with X12Writer. From Python, Java or C, use ediFabric Native, which converts 278 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 278 in five minutes

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