The 271 (005010X279A1) is the payer's answer to a 270 eligibility inquiry. It tells the provider whether the patient has active coverage and what the plan covers.
Benefits are reported in EB segments: coverage status, service type, co-payments, co-insurance, deductibles and out-of-pocket amounts, often with time periods and network indicators.
005010X279A1HB (GS01)TS271 in EdiFabric.Templates.HipaaThe full X12 271 layout from its OpenEDI definition, the same model ediFabric uses to parse, validate and generate it: 16 loops and 69 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 |
| Loop 2000A | Information Source Level | Required | >1 |
HL | Information Source Level | Required | 1 |
AAA | Request Validation | Situational | 9 |
| Loop 2100A | Information Source Name | Required | 1 |
NM1 | Information Source Name | Required | 1 |
PER | Information Source Contact Information | Situational | 3 |
AAA | Request Validation | Situational | 9 |
| Loop 2000B | Information Receiver Level | Situational | >1 |
HL | Information Receiver Level | Required | 1 |
| Loop 2100B | Information Receiver Name | Required | 1 |
NM1 | Information Receiver Name | Required | 1 |
REF | Information Receiver Additional Identification | Situational | 9 |
N3 | Information Receiver Address | Situational | 1 |
N4 | Information Receiver City State ZIP Code | Situational | 1 |
AAA | Information Receiver Request Validation | Situational | 9 |
PRV | Information Receiver Provider Information | Situational | 1 |
| Loop 2000C | Subscriber Level | Situational | >1 |
HL | Subscriber Level | Required | 1 |
TRN | Subscriber Trace Number | Situational | 3 |
| Loop 2100C | Subscriber Name | Required | 1 |
NM1 | Subscriber Name | Required | 1 |
REF | Subscriber Additional Identification | Situational | 9 |
N3 | Subscriber Address | Situational | 1 |
N4 | Subscriber City State ZIP Code | Situational | 1 |
AAA | Subscriber Request Validation | Situational | 9 |
PRV | Provider Information | Situational | 1 |
DMG | Subscriber Demographic Information | Situational | 1 |
INS | Subscriber Relationship | Situational | 1 |
HI | Subscriber Health Care Diagnosis Code | Situational | 1 |
DTP | Subscriber Date | Situational | 9 |
MPI | Subscriber Military Personnel Information | Situational | 1 |
| Loop 2110C | Subscriber Eligibilityor Benefit Information | Situational | >1 |
EB | Subscriber Eligibilityor Benefit Information | Required | 1 |
HSD | Health Care Services Delivery | Situational | 9 |
REF | Subscriber Additional Identification | Situational | 9 |
DTP | Subscriber Eligibility Benefit Date | Situational | 20 |
AAA | Subscriber Request Validation | Situational | 9 |
MSG | Message Text | Situational | 10 |
| Loop 2115C | Subscriber Eligibilityor Benefit Additional Information | Situational | 10 |
III | Subscriber Eligibilityor Benefit Additional Information | Required | 1 |
| Loop LS | Header | Situational | 1 |
LS | Header | Required | 1 |
| Loop 2120C | Subscriber Benefit Related Entity Name | Situational | 23 |
NM1 | Subscriber Benefit Related Entity Name | Required | 1 |
N3 | Subscriber Benefit Related Entity Address | Situational | 1 |
N4 | Subscriber Benefit Related Entity City State ZIP Code | Situational | 1 |
PER | Subscriber Benefit Related Entity Contact Information | Situational | 3 |
PRV | Subscriber Benefit Related Provider Information | Situational | 1 |
LE | Trailer | Required | 1 |
| Loop 2000D | Dependent Level | Situational | >1 |
HL | Dependent Level | Required | 1 |
TRN | Dependent Trace Number | Situational | 3 |
| Loop 2100D | Dependent Name | Required | 1 |
NM1 | Dependent Name | Required | 1 |
REF | Dependent Additional Identification | Situational | 9 |
N3 | Dependent Address | Situational | 1 |
N4 | Dependent City State ZIP Code | Situational | 1 |
AAA | Dependent Request Validation | Situational | 9 |
PRV | Provider Information | Situational | 1 |
DMG | Dependent Demographic Information | Situational | 1 |
INS | Dependent Relationship | Situational | 1 |
HI | Dependent Health Care Diagnosis Code | Situational | 1 |
DTP | Dependent Date | Situational | 9 |
MPI | Dependent Military Personnel Information | Situational | 1 |
| Loop 2110D | Dependent Eligibilityor Benefit Information | Situational | >1 |
EB | Dependent Eligibilityor Benefit Information | Required | 1 |
HSD | Health Care Services Delivery | Situational | 9 |
REF | Dependent Additional Identification | Situational | 9 |
DTP | Dependent Eligibility Benefit Date | Situational | 20 |
AAA | Dependent Request Validation | Situational | 9 |
MSG | Message Text | Situational | 10 |
| Loop 2115D | Dependent Eligibilityor Benefit Additional Information | Situational | 10 |
III | Dependent Eligibilityor Benefit Additional Information | Required | 1 |
| Loop LS | Header | Situational | 1 |
LS | Header | Required | 1 |
| Loop 2120D | Dependent Benefit Related Entity Name | Situational | 23 |
NM1 | Dependent Benefit Related Entity Name | Required | 1 |
N3 | Dependent Benefit Related Entity Address | Situational | 1 |
N4 | Dependent Benefit Related Entity City State ZIP Code | Situational | 1 |
PER | Dependent Benefit Related Entity Contact Information | Situational | 3 |
PRV | Dependent Benefit Related Provider Information | Situational | 1 |
LE | Trailer | Required | 1 |
SE | Transaction Set Trailer | Required | 1 |
Usage follows the 005010X279A1 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.
An eligibility response with active coverage and benefit details. 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*005010X279A1~ ST*271*4321*005010X279A1~ BHT*0022*11*10001234*20060501*1319~ HL*1**20*1~ NM1*PR*2*ABC COMPANY*****PI*842610001~ HL*2*1*21*1~ NM1*1P*2*BONE AND JOINT CLINIC*****SV*2000035~ HL*3*2*22*0~ TRN*2*93175-012547*9877281234~ NM1*IL*1*SMITH*JOHN****MI*123456789~ N3*15197 BROADWAY AVENUE*APT 215~ N4*KANSAS CITY*MO*64108~ DMG*D8*19630519*M~ DTP*346*D8*20060101~ EB*1**30**GOLD 123 PLAN~ EB*L~ EB*1**1>33>35>47>86>88>98>AL>MH>UC~ EB*B**1>33>35>47>86>88>98>AL>MH>UC*HM*GOLD 123 PLAN*27*10*****Y~ EB*B**1>33>35>47>86>88>98>AL>MH>UC*HM*GOLD 123 PLAN*27*30*****N~ LS*2120~ NM1*P3*1*JONES*MARCUS****SV*0202034~ LE*2120~ SE*22*4321~ 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": "271",
"TransactionSetControlNumber_02": "4321",
"ImplementationConventionPreference_03": "005010X279A1"
},
"BHT_BeginningOfHierarchicalTransaction": {
"HierarchicalStructureCode_01": "0022",
"TransactionSetPurposeCode_02": "11",
"SubmitterTransactionIdentifier_03": "10001234",
"TransactionSetCreationDate_04": "20060501",
"TransactionSetCreationTime_05": "1319"
},
"Loop2000A": [
{
"HL_InformationSourceLevel": {
"HierarchicalIDNumber_01": "1",
"HierarchicalLevelCode_03": "20",
"HierarchicalChildCode_04": "1"
},
"Loop2100A": {
"NM1_InformationSourceName": {
"EntityIdentifierCode_01": "PR",
"EntityTypeQualifier_02": "2",
"ResponseContactLastorOrganizationName_03": "ABC COMPANY",
"IdentificationCodeQualifier_08": "PI",
"ResponseContactIdentifier_09": "842610001"
}
},
"Loop2000B": [
{
"HL_InformationReceiverLevel": {
"HierarchicalIDNumber_01": "2",
"HierarchicalParentIDNumber_02": "1",
"HierarchicalLevelCode_03": "21",
"HierarchicalChildCode_04": "1"
},
"Loop2100B": {
"NM1_InformationReceiverName": {
"EntityIdentifierCode_01": "1P",
"EntityTypeQualifier_02": "2",
"ResponseContactLastorOrganizationName_03": "BONE AND JOINT CLINIC",
"IdentificationCodeQualifier_08": "SV",
"ResponseContactIdentifier_09": "2000035"
}
},
"Loop2000C": [
{
"HL_SubscriberLevel": {
"HierarchicalIDNumber_01": "3",
"HierarchicalParentIDNumber_02": "2",
"HierarchicalLevelCode_03": "22",
"HierarchicalChildCode_04": "0"
},
"TRN_SubscriberTraceNumber": [
{
"TraceTypeCode_01": "2",
"CurrentTransactionTraceNumber_02": "93175-012547",
"OriginatingCompanyIdentifier_03": "9877281234"
}
],
"Loop2100C": {
"NM1_SubscriberName": {
"EntityIdentifierCode_01": "IL",
"EntityTypeQualifier_02": "1",
"ResponseContactLastorOrganizationName_03": "SMITH",
"ResponseContactFirstName_04": "JOHN",
"IdentificationCodeQualifier_08": "MI",
"ResponseContactIdentifier_09": "123456789"
},
"N3_SubscriberAddress": {
"ResponseContactAddressLine_01": "15197 BROADWAY AVENUE",
"ResponseContactAddressLine_02": "APT 215"
},
"N4_SubscriberCity_State_ZIPCode": {
"AdditionalPatientInformationContactCityName_01": "KANSAS CITY",
"AdditionalPatientInformationContactStateCode_02": "MO",
"AdditionalPatientInformationContactPostalZoneorZIPCode_03": "64108"
},
"DMG_SubscriberDemographicInformation": {
"DateTimePeriodFormatQualifier_01": "D8",
"DependentBirthDate_02": "19630519",
"DependentGenderCode_03": "M"
},
"DTP_SubscriberDate": [
{
"DateTimeQualifier_01": "346",
"DateTimePeriodFormatQualifier_02": "D8",
"DateTimePeriod_03": "20060101"
}
],
"Loop2110C": [
{
"EB_SubscriberEligibilityorBenefitInformation": {
"EligibilityorBenefitInformation_01": "1",
"ServiceTypeCode_03": [
"30"
],
"PlanCoverageDescription_05": "GOLD 123 PLAN"
}
},
{
"EB_SubscriberEligibilityorBenefitInformation": {
"EligibilityorBenefitInformation_01": "L"
}
},
{
"EB_SubscriberEligibilityorBenefitInformation": {
"EligibilityorBenefitInformation_01": "1",
"ServiceTypeCode_03": [
"1",
"33",
"35",
"47",
"86",
"88",
"98",
"AL",
"MH",
"UC"
]
}
},
{
"EB_SubscriberEligibilityorBenefitInformation": {
"EligibilityorBenefitInformation_01": "B",
"ServiceTypeCode_03": [
"1",
"33",
"35",
"47",
"86",
"88",
"98",
"AL",
"MH",
"UC"
],
"InsuranceTypeCode_04": "HM",
"PlanCoverageDescription_05": "GOLD 123 PLAN",
"TimePeriodQualifier_06": "27",
"BenefitAmount_07": "10",
"InPlanNetworkIndicator_12": "Y"
}
},
{
"EB_SubscriberEligibilityorBenefitInformation": {
"EligibilityorBenefitInformation_01": "B",
"ServiceTypeCode_03": [
"1",
"33",
"35",
"47",
"86",
"88",
"98",
"AL",
"MH",
"UC"
],
"InsuranceTypeCode_04": "HM",
"PlanCoverageDescription_05": "GOLD 123 PLAN",
"TimePeriodQualifier_06": "27",
"BenefitAmount_07": "30",
"InPlanNetworkIndicator_12": "N"
},
"LoopLS": {
"LS_Header": {
"LoopIdentifierCode_01": "2120"
},
"Loop2120C": [
{
"NM1_SubscriberBenefitRelatedEntityName": {
"EntityIdentifierCode_01": "P3",
"EntityTypeQualifier_02": "1",
"ResponseContactLastorOrganizationName_03": "JONES",
"ResponseContactFirstName_04": "MARCUS",
"IdentificationCodeQualifier_08": "SV",
"ResponseContactIdentifier_09": "0202034"
}
}
],
"LE_Trailer": {
"LoopIdentifierCode_01": "2120"
}
}
}
]
}
}
]
}
]
}
],
"SE": {
"NumberofIncludedSegments_01": "22",
"TransactionSetControlNumber_02": "4321"
}
}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\GenericResponse.txt")) using (var reader = new X12Reader(stream, "EdiFabric.Templates.Hipaa")) { var items = await reader.ReadToEndAsync(); foreach (var transaction in items.OfType<TS271>()) { 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("GenericResponse.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("GenericResponse.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("GenericResponse.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 '@GenericResponse.txt'
Populate a TS271 object in .NET, or pass JSON in the shape shown above to ediFabric Native or ediFabric Cloud, and get a valid 271 file back.
using EdiFabric.Templates.Hipaa5010; License.SetSerial("YOUR_SERIAL_KEY"); var transaction = new TS271(); // Transaction Set ID Code = 271 (Eligibility, Coverage or Benefit Information) // Transaction Set Control Number = 4321 // Implementation Convention Reference = 005010X279A1 transaction.ST = new ST(); transaction.ST.TransactionSetIdentifierCode_01 = "271"; transaction.ST.TransactionSetControlNumber_02 = "0001"; transaction.ST.ImplementationConventionPreference_03 = "005010X279A1"; // Hierarchical Structure Code = 0022 (Information Source, Information Receiver, Subscriber, Dependent) // Transaction Set Purpose Code = 11(Response) Identification // Reference Identification = 10001234 // Date = 20060501(May 1, 2006) // Time = 1:19 PM transaction.BHT_BeginningOfHierarchicalTransaction = new BHT_BeginningOfHierarchicalTransaction_2(); transaction.BHT_BeginningOfHierarchicalTransaction.HierarchicalStructureCode_01 = "0022"; transaction.BHT_BeginningOfHierarchicalTransaction.TransactionSetPurposeCode_02 = "11"; transaction.BHT_BeginningOfHierarchicalTransaction.SubmitterTransactionIdentifier_03 = "10001234"; transaction.BHT_BeginningOfHierarchicalTransaction.TransactionSetCreationDate_04 = "20060501"; transaction.BHT_BeginningOfHierarchicalTransaction.TransactionSetCreationTime_05 = "1319"; // ... 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", "005010X279A1")); 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("GenericResponse.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("GenericResponse.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("GenericResponse.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 '@GenericResponse.json' \ -o 'GenericResponse.txt'
EB01 is the eligibility or benefit code (1 active coverage, 6 inactive, A co-insurance, B co-payment, C deductible), EB03 the service type code, EB06 the time period and EB07 or EB08 the amount or percent.
Mostly. Eligibility checks usually run as real-time request and response pairs, though batch 270/271 files are also supported.
The payer returns AAA segments with a reject reason, such as 72 invalid member ID or 75 subscriber not found, instead of EB segments.
In .NET, install EdiFabric and EdiFabric.Templates.Hipaa, read the file with X12Reader into TS271 objects and write them back with X12Writer. From Python, Java or C, use ediFabric Native, which converts 271 files to JSON and JSON back to X12 inside your process. From any other language, post the file to the ediFabric Cloud REST API.