Esempio n. 1
0
 public X12_DTP(X12Segment seg) : base(seg)
 {
     seg.AssertType("DTP");
     DateTimeQualifier             = seg.Get(1);
     DateTimePeriodFormatQualifier = seg.Get(2);
     DateTimePeriod = seg.Get(3);
 }
Esempio n. 2
0
 public X12_HLH(X12Segment seg) : base(seg)
 {
     seg.AssertType("HLH");
     HealthRelatedCode = seg.Get(1);
     Height            = seg.Get(2);
     Weight            = seg.Get(3);
 }
Esempio n. 3
0
 public X12_DSB(X12Segment seg) : base(seg)
 {
     seg.AssertType("DSB");
     DisabilityTypeCode        = seg.Get(1);
     ProductServiceIdQualifier = seg.Get(7);
     MedicalCodeValue          = seg.Get(8);
 }
Esempio n. 4
0
        ///<summary>AMT02 of loop 2200B.</summary>
        public double GetAmountAccepted()
        {
            int segNum = GetSegNumLastSTC2200B();

            if (segNum != -1)
            {
                segNum++;
                if (segNum < segments.Count)
                {
                    X12Segment seg = segments[segNum];
                    while (seg.SegmentID == "QTY")
                    {
                        segNum++;
                        if (segNum >= segments.Count)
                        {
                            return(0);
                        }
                        seg = segments[segNum];
                    }
                    if (seg.SegmentID == "AMT" && seg.Get(1) == "YU")
                    {
                        return(double.Parse(seg.Get(2)));
                    }
                }
            }
            return(0);
        }
Esempio n. 5
0
 public X12_EC(X12Segment seg) : base(seg)
 {
     seg.AssertType("EC");
     EmploymentClassCode1 = seg.Get(1);
     EmploymentClassCode2 = seg.Get(2);
     EmploymentClassCode3 = seg.Get(3);
 }
Esempio n. 6
0
 public X12_IDC(X12Segment seg) : base(seg)
 {
     seg.AssertType("IDC");
     PlanCoverageDescription    = seg.Get(1);
     IdentificationCardTypeCode = seg.Get(2);
     Quantity   = seg.Get(3);
     ActionCode = seg.Get(4);
 }
Esempio n. 7
0
 public X12_LUI(X12Segment seg) : base(seg)
 {
     seg.AssertType("LUI");
     IdentificationCodeQualifier = seg.Get(1);
     IdentificationCode          = seg.Get(2);
     Description            = seg.Get(3);
     UseOfLanguageIndicator = seg.Get(4);
 }
Esempio n. 8
0
 public X12_N1(X12Segment seg, params string[] arrayElement01Values) : base(seg)
 {
     seg.AssertType("N1", arrayElement01Values);
     EntityIdentifierCode = seg.Get(1);
     Name = seg.Get(2);
     IdentificationCodeQualifier = seg.Get(3);
     IdentificationCode          = seg.Get(4);
 }
Esempio n. 9
0
 public X12_COB(X12Segment seg) : base(seg)
 {
     seg.AssertType("COB");
     PayerResponsibilitySequenceNumberCode = seg.Get(1);
     ReferenceIdentification    = seg.Get(2);
     CoordinationOfBenefitsCode = seg.Get(3);
     ServiceTypeCode            = seg.Get(4);
 }
Esempio n. 10
0
 public X12_PLA(X12Segment seg) : base(seg)
 {
     seg.AssertType("PLA");
     ActionCode           = seg.Get(1);
     EntityIdentifierCode = seg.Get(2);
     DatePla = seg.Get(3);
     TimePla = seg.Get(4);
     MaintenanceReasonCode = seg.Get(5);
 }
Esempio n. 11
0
 public X12_HD(X12Segment seg) : base(seg)
 {
     seg.AssertType("HD");
     MaintenanceTypeCode          = seg.Get(1);
     InsuranceLineCode            = seg.Get(3);
     PlanCoverageDescription      = seg.Get(4);
     CoverageLevelCode            = seg.Get(5);
     YesNoConditionOrResponseCode = seg.Get(9);
 }
Esempio n. 12
0
 public X12_ICM(X12Segment seg) : base(seg)
 {
     seg.AssertType("ICM");
     FrequencyCode      = seg.Get(1);
     MonetaryAmount     = seg.Get(2);
     Quantity           = seg.Get(3);
     LocationIdentifier = seg.Get(4);
     SalaryGrade        = seg.Get(5);
 }
Esempio n. 13
0
 ///<summary>The startIndex is zero-based.  The segmentId is case sensitive.
 ///If arrayElement01Values is specified, then will only return segments where the segment.Get(1) returns one of the specified values.
 ///Returns null if no segment is found.</summary>
 public X12Segment GetNextSegmentById(int startIndex, string segmentId, params string[] arrayElement01Values)
 {
     for (int i = startIndex; i < Segments.Count; i++)
     {
         X12Segment seg = Segments[i];
         if (seg.SegmentID != segmentId)
         {
             continue;
         }
         if (arrayElement01Values.Length > 0)
         {
             bool isMatchingElement01 = false;
             for (int j = 0; j < arrayElement01Values.Length; j++)
             {
                 if (arrayElement01Values[j] == seg.Get(1))
                 {
                     isMatchingElement01 = true;
                     break;
                 }
             }
             if (!isMatchingElement01)
             {
                 continue;
             }
         }
         return(seg);
     }
     return(null);
 }
Esempio n. 14
0
        ///<summary>Will return "" if unable to determine.  But would normally return A=Accepted or R=Rejected or P=Partially accepted if only some of the transactions were accepted.</summary>
        public string GetBatchAckCode()
        {
            if (this.FunctGroups[0].Transactions.Count != 1)
            {
                return("");
            }
            X12Segment seg = FunctGroups[0].Transactions[0].GetSegmentByID("AK9");

            if (seg == null)
            {
                return("");
            }
            string code = seg.Get(1);
            string ack  = "";

            if (code == "A" || code == "E")        //Accepted or accepted with Errors.
            {
                ack = "A";
            }
            else if (code == "P")           //Partially accepted
            {
                ack = "P";
            }
            else               //M, R, W, X
            {
                ack = "R";     //rejected
            }
            return(ack);
        }
Esempio n. 15
0
 public X12_NM1(X12Segment seg, params string[] arrayElement01Values) : base(seg)
 {
     seg.AssertType("NM1", arrayElement01Values);
     EntityIdentifierCode        = seg.Get(1);
     EntityTypeQualifier         = seg.Get(2);
     NameLast                    = seg.Get(3);
     NameFirst                   = seg.Get(4);
     NameMiddle                  = seg.Get(5);
     NamePrefix                  = seg.Get(6);
     NameSuffix                  = seg.Get(7);
     IdentificationCodeQualifier = seg.Get(8);
     IdentificationCode          = seg.Get(9);
 }
Esempio n. 16
0
        ///<summary>QTY02 of loop 2200B.</summary>
        public long GetQuantityAccepted()
        {
            int segNum = GetSegNumLastSTC2200B();

            if (segNum != -1)
            {
                segNum++;
                if (segNum < segments.Count)
                {
                    X12Segment seg = segments[segNum];
                    if (seg.SegmentID == "QTY" && seg.Get(1) == "90")
                    {
                        return(long.Parse(seg.Get(2)));
                    }
                }
            }
            return(0);
        }
Esempio n. 17
0
 public X12_DMG(X12Segment seg) : base(seg)
 {
     seg.AssertType("DMG");
     DateTimePeriodFormatQualifier = seg.Get(1);
     DateTimePeriod    = seg.Get(2);
     GenderCode        = seg.Get(3);
     MaritalStatusCode = seg.Get(4);
     CompositeRaceOrEthnicityInformation = seg.Get(5);
     CitizenshipStatusCode = seg.Get(6);
     CodeListQualifierCode = seg.Get(10);
     IndustryCode          = seg.Get(11);
 }
Esempio n. 18
0
        ///<summary>TRN02 in loop 2200D. Do this first to get a list of all claim tracking numbers that are contained within this 277.  Then, for each claim tracking number, we can later retrieve the AckCode for that single claim. The claim tracking numbers correspond to CLM01 exactly as submitted in the 837. We refer to CLM01 as the claim identifier on our end. We allow more than just digits in our claim identifiers, so we must return a list of strings.</summary>
        public List <string> GetClaimTrackingNumbers()
        {
            List <string> retVal = new List <string>();

            for (int i = 0; i < segNumsClaimTrackingNumberTRN.Count; i++)
            {
                X12Segment seg = segments[segNumsClaimTrackingNumberTRN[i]];              //TRN segment.
                retVal.Add(seg.Get(2));
            }
            return(retVal);
        }
Esempio n. 19
0
 public X12_N4(X12Segment seg) : base(seg)
 {
     seg.AssertType("N4");
     CityName               = seg.Get(1);
     StateOrProvinceCode    = seg.Get(2);
     PostalCode             = seg.Get(3);
     CountryCode            = seg.Get(4);
     LocationQualifier      = seg.Get(5);
     LocationIdentifier     = seg.Get(6);
     CountrySubdivisionCode = seg.Get(7);
 }
Esempio n. 20
0
 public X12_PER(X12Segment seg, params string[] arrayElement01Values) : base(seg)
 {
     seg.AssertType("PER", arrayElement01Values);
     ContactFunctionCode           = seg.Get(1);
     CommunicationNumberQualifier1 = seg.Get(3);
     CommunicationNumber1          = seg.Get(4);
     CommunicationNumberQualifier2 = seg.Get(5);
     CommunicationNumber2          = seg.Get(6);
     CommunicationNumberQualifier3 = seg.Get(7);
     CommunicationNumber3          = seg.Get(8);
 }
Esempio n. 21
0
 public X12_BGN(X12Segment seg) : base(seg)
 {
     seg.AssertType("BGN");
     TransactionSetPurposeCode = seg.Get(1);
     ReferenceIdentification1  = seg.Get(2);
     DateBgn  = seg.Get(3);
     TimeBgn  = seg.Get(4);
     TimeCode = seg.Get(5);
     ReferenceIdentifcation2 = seg.Get(6);
     ActionCode = seg.Get(8);
 }
Esempio n. 22
0
        ///<summary>QTY02 of loop 2200B.</summary>
        public long GetQuantityRejected()
        {
            int segNum = GetSegNumLastSTC2200B();

            if (segNum != -1)
            {
                segNum++;
                if (segNum < segments.Count)
                {
                    X12Segment seg = segments[segNum];
                    if (seg.SegmentID == "QTY")
                    {
                        try {
                            if (seg.Get(1) == "AA")
                            {
                                return(long.Parse(seg.Get(2)));
                            }
                            else
                            {
                                segNum++;
                                if (segNum < segments.Count)
                                {
                                    seg = segments[segNum];
                                    if (seg.SegmentID == "QTY" && seg.Get(1) == "AA")
                                    {
                                        return(long.Parse(seg.Get(2)));
                                    }
                                }
                            }
                        }
                        catch {
                        }
                    }
                }
            }
            return(0);
        }
Esempio n. 23
0
		///<summary>In X12 lingo, the batchNumber is known as the functional group.</summary>
		public int GetBatchNumber(){
			if(this.FunctGroups[0].Transactions.Count!=1) {
				return 0;
			}
			X12Segment seg=FunctGroups[0].Transactions[0].GetSegmentByID("AK1");
			if(seg==null) {
				return 0;
			}
			string num=seg.Get(2);
			try{
				return PIn.Int(num);
			}
			catch{
				return 0;
			}
		}
Esempio n. 24
0
		///<summary>Will return "" if unable to determine.  But would normally return A=Accepted or R=Rejected or P=Partially accepted if only some of the transactions were accepted.</summary>
		public string GetBatchAckCode(){
			if(this.FunctGroups[0].Transactions.Count!=1){
				return "";
			}
			X12Segment seg=FunctGroups[0].Transactions[0].GetSegmentByID("AK9");
			if(seg==null){
				return "";
			}
			string code=seg.Get(1);
			if(code=="A" || code=="E"){//Accepted or accepted with Errors.
				return "A";
			}
			if(code=="P") {//Partially accepted
				return "P";
			}
			return "R";//rejected
		}		
Esempio n. 25
0
        internal bool IsValidForBatchVerification(List <EB271> listBenefits, bool isCoinsuranceInverted, out string errorMsg)
        {
            errorMsg = this.GetProcessingError();
            if (errorMsg != "")
            {
                return(false);
            }
            if (listBenefits.Count == 0)
            {
                errorMsg = "No benefits reported.";
                return(false);
            }
            else if (listBenefits.Count == 1)
            {
                EB271 eb271 = listBenefits[0];
                switch (eb271.Segment.Elements[1])
                {
                case "U":                                               //Contact Following Entity for Information for Eligibility or Benefit Information
                    errorMsg = "Contact carrier for more information."; //There will be an MSG segment following this.
                    X12Segment msgSegment = eb271.SupplementalSegments.FirstOrDefault(x => x.SegmentID == "MSG");
                    if (msgSegment != null)
                    {
                        errorMsg += "\r\n" + msgSegment.Get(1);
                    }
                    break;

                //The following codes have not been reported as of yet.
                case "6":                                                           //Inactive
                case "7":                                                           //Inactive - Pending Eligibility Update
                case "8":                                                           //Inactive - Pending Investigation
                case "T":                                                           //Card(s) Reported Lost/Stolen
                case "V":                                                           //Cannot Process
                    errorMsg = eb271.GetEB01Description(eb271.Segment.Elements[1]); //Returns null if given code is not known.
                    break;

                default:
                    //Intentionally blank, most other EB01 codes are not easily identified as errors.
                    break;
                }
            }
            return(errorMsg.IsNullOrEmpty());
        }
Esempio n. 26
0
 public X12_LX(X12Segment seg) : base(seg)
 {
     seg.AssertType("LX");
     AssignedNumber = seg.Get(1);
 }
Esempio n. 27
0
 private static string SegmentToString(X12Segment segment)
 {
     string retVal="";
     string rn="\r\n";
     //HL
     if(segment.SegmentID=="HL"){
         retVal+=rn;//insert a blank line before each loop
         switch(segment.Get(3)){
             case "20":
                 retVal+="Information Source:";
                 break;
             case "21":
                 retVal+="Information Receiver:";
                 break;
             case "19":
                 retVal+="Service Provider:";
                 break;
             case "22":
                 retVal+="Subscriber:";
                 break;
             case "23":
                 retVal+="Dependent:";
                 break;
         }
         retVal+=rn;
     }
     //NM1
     else if(segment.SegmentID=="NM1"){
         switch(segment.Get(1)){//payer ID code
             case "PR":
                 retVal="Payer: ";
                 break;
             case "41":
                 retVal="Submitter: ";
                 break;
             case "1P":
                 retVal="Provider: ";
                 break;
             case "IL":
                 retVal="Insured or Subscriber: ";
                 break;
             case "QC":
                 retVal="Patient: ";
                 break;
             case "85":
                 retVal="Billing Provider: ";
                 break;
         }
         retVal+=segment.Get(3)+", "//LName
             +segment.Get(4)+" "//Fname
             +segment.Get(5)+" "//MiddleName
             +segment.Get(7)+", "//Suffix
             +"ID code: "+segment.Get(9)+rn;//ID code
     }
     //PER
     else if(segment.SegmentID=="PER"){
         retVal="Information Contact: "
             +segment.Get(2)+" "//Name
             +GetPERqualifier(segment.Get(3))+" "
             +segment.Get(4)+" "
             +GetPERqualifier(segment.Get(5))+" "
             +segment.Get(6)+" "
             +GetPERqualifier(segment.Get(7))+" "
             +segment.Get(8)+rn;
     }
     //TRN
     else if(segment.SegmentID=="TRN"){
         retVal="Trace Number: "
             +segment.Get(2)+rn;
     }
     //STC-Status information
     else if(segment.SegmentID=="STC"){
         retVal="ClaimStatus :"
             //+segment.Get(1,1)+" "//Industry R code
             +"LOINC:"+segment.Get(1,2)+", "//LOINC code
             +"DATE: "+ConvertDate(segment.Get(2))+" "
             +ConvertCurrency(segment.Get(4))+" "//monetary amount
             +segment.Get(10,2)+" "//LOINC code 2
             +segment.Get(11,2)+rn;//LOINC code 3
     }
     //REF
     else if(segment.SegmentID=="REF"){
         switch(segment.Get(1)){
             case "EJ":
                 retVal="Patient Account Number: ";
                 break;
             case "BLT":
                 retVal="Billing Type: ";
                 break;
             case "EA":
                 retVal="Medical Record ID Number: ";
                 break;
             case "D9":
                 retVal="Claim Number: ";
                 break;
             case "FJ":
                 retVal="Line Item Control Number: ";
                 break;
             case "87":
                 //functional category irrelevant
                 return "";
             case "9F":
                 retVal="Referral Number: ";
                 break;
             case "6R":
                 retVal="Provider Control Number: ";
                 break;
             case "G5":
                 retVal="Provider Site Number: ";
                 break;
             case "1B":
                 retVal="Blue Shield Provider Number: ";
                 break;
         }
         retVal+=segment.Get(2)+rn;
     }
     //DTP(x2)-Date or Time period
     else if(segment.SegmentID=="DTP"){
         switch(segment.Get(1)){
             case "434":
                 retVal="Statement date: ";
                 break;
             case "106":
                 retVal="Required by: ";
                 break;
             case "472":
                 retVal="Service date: ";
                 break;
         }
         if(segment.Get(2)=="D8"){//Date eight char
             retVal+=ConvertDate(segment.Get(3))+rn;
         }
         else if(segment.Get(2)=="RD8"){//Range Date eight char
             retVal+=ConvertDateRange(segment.Get(3))+rn;
         }
     }
     //PWK-not very useful here
     //N1
     else if(segment.SegmentID=="N1"){
         switch(segment.Get(1)){//
             case "PR":
                 retVal="Payer: ";
                 break;
         }
         retVal+=segment.Get(2)+rn;
     }
     //N3
     else if(segment.SegmentID=="N3"){
         retVal=segment.Get(1)+" "//address
             +segment.Get(2)+rn;//address2
     }
     //N4-CityStateZip
     else if(segment.SegmentID=="N4"){
         retVal=segment.Get(1)+", "//City
             +segment.Get(2)+"  "//State
             +segment.Get(3)+" ";//Zip
         if(segment.Get(5)=="B1"){//branch
             retVal+="Branch "+segment.Get(6);
         }
         else if(segment.Get(5)=="DP"){//department
             retVal+="Department "+segment.Get(6);
         }
         retVal+=rn;
     }
     //SVC-Service Line Information
     else if(segment.SegmentID=="SVC"){
         retVal=segment.Get(1,2)+" "//procedure code
             +ConvertCurrency(segment.Get(2))+" "//amount
             +segment.Get(4)+rn;//national Uniform Billing Code??? on institutional claims.
     }
     //SBR-subscriber on 837
     //DMG-birthdate,gender on 837
     //CLM-claim on 837
     //DN2-tooth status on 837
     //LX-line counter not needed
     //SV3-Dental service on 837
     //TOO-Tooth info on 837
     return retVal;
 }
Esempio n. 28
0
 public X12_N3(X12Segment seg) : base(seg)
 {
     seg.AssertType("N3");
     AddressInformation1 = seg.Get(1);
     AddressInformation2 = seg.Get(2);
 }
Esempio n. 29
0
 ///<summary>Result will contain strings in the following order: 0 Patient Last Name (NM103), 1 Patient First Name (NM104), 2 Patient Middle Name (NM105),
 ///3 Claim Status (STC03), 4 Payor's Claim Control Number (REF02), 5 Institutional Type of Bill (REF02), 6 Claim Date Service Start (DTP03),
 ///7 Claim Date Service End (DTP03), 8 Reason (STC01-2), 9 Amount (STC04)</summary>
 public string[] GetClaimInfo(string trackingNumber)
 {
     string[] result = new string[10];
     for (int i = 0; i < result.Length; i++)
     {
         result[i] = "";
     }
     for (int i = 0; i < segNumsClaimTrackingNumberTRN.Count; i++)
     {
         int        segNum = segNumsClaimTrackingNumberTRN[i];
         X12Segment seg    = segments[segNum];           //TRN segment.
         if (seg.Get(2) == trackingNumber)               //TRN02
         //Locate the NM1 segment corresponding to the claim tracking number. One NM1 segment can be shared with multiple TRN segments.
         //The strategy is to locate the NM1 segment furthest down in the message that is above the TRN segment for the tracking number.
         {
             int segNumNM1 = segNumsPatientDetailNM1[segNumsPatientDetailNM1.Count - 1];                //very last NM1 segment
             for (int j = 0; j < segNumsPatientDetailNM1.Count - 1; j++)
             {
                 if (segNum > segNumsPatientDetailNM1[j] && segNum < segNumsPatientDetailNM1[j + 1])
                 {
                     segNumNM1 = segNumsPatientDetailNM1[j];
                     break;
                 }
             }
             seg       = segments[segNumNM1];         //NM1 segment.
             result[0] = seg.Get(3);                  //NM103 Last Name
             result[1] = seg.Get(4);                  //NM104 First Name
             result[2] = seg.Get(5);                  //NM105 Middle Name
             segNum++;
             seg = segments[segNum];                  //STC segment. At least one, maybe multiple, but we only care about the first one.
             string[] stc01 = seg.Get(1).Split(new string[] { Separators.Subelement }, StringSplitOptions.None);
             result[3] = GetStringForExternalSourceCode507(stc01[0]);
             if (stc01.Length > 1)
             {
                 result[8] = GetStringForExternalSourceCode508(stc01[1]);                      //STC01-2
             }
             result[9] = seg.Get(4);
             //Skip the remaining STC segments (if any).
             segNum++;
             if (segNum >= segments.Count)
             {
                 return(result);                       //End of file
             }
             seg = segments[segNum];
             while (seg.SegmentID == "STC")
             {
                 segNum++;
                 seg = segments[segNum];
             }
             while (seg.SegmentID == "REF")
             {
                 string refIdQualifier = seg.Get(1);
                 if (refIdQualifier == "1K")
                 {
                     result[4] = seg.Get(2);                          //REF02 Payor's Claim Control Number.
                 }
                 else if (refIdQualifier == "D9")
                 {
                     //REF02 Claim Identifier Number for Clearinghouse and Other Transmission Intermediary from the 837.
                     //When we send this it is the same as the claim identifier/claim tracking number, so we don't use this for now.
                 }
                 else if (refIdQualifier == "BLT")
                 {
                     //REF02 Institutional Type of Bill that was sent in the 837.
                     result[5] = seg.Get(2);
                 }
                 segNum++;
                 if (segNum >= segments.Count)
                 {
                     return(result);                           //End of file
                 }
                 seg = segments[segNum];
             }
             //The DTP segment for the date of service will not be present when an invalid date was originally sent to the carrier (even though the specifications have it marked as a required segment).
             if (seg.SegmentID == "DTP")
             {
                 string dateServiceStr        = seg.Get(3);
                 int    dateServiceStartYear  = PIn.Int(dateServiceStr.Substring(0, 4));
                 int    dateServiceStartMonth = PIn.Int(dateServiceStr.Substring(4, 2));
                 int    dateServiceStartDay   = PIn.Int(dateServiceStr.Substring(6, 2));
                 result[6] = (new DateTime(dateServiceStartYear, dateServiceStartMonth, dateServiceStartDay)).ToShortDateString();
                 if (dateServiceStr.Length == 17)                        //Date range.
                 {
                     int dateServiceEndYear  = PIn.Int(dateServiceStr.Substring(9, 4));
                     int dateServiceEndMonth = PIn.Int(dateServiceStr.Substring(13, 2));
                     int dateServiceEndDay   = PIn.Int(dateServiceStr.Substring(15, 2));
                     result[7] = (new DateTime(dateServiceEndYear, dateServiceEndMonth, dateServiceEndDay)).ToShortDateString();
                 }
             }
         }
     }
     return(result);
 }
Esempio n. 30
0
 public X277(string messageText)
     : base(messageText)
 {
     segments = FunctGroups[0].Transactions[0].Segments;          //The GS segment contains exactly one ST segment below it.
     segNumInfoSourceNM101         = -1;
     segNumInfoReceiverNM101       = -1;
     segNumsBillingProviderNM1     = new List <int>();
     segNumsPatientDetailNM1       = new List <int>();
     segNumsClaimTrackingNumberTRN = new List <int>();
     for (int i = 0; i < segments.Count; i++)
     {
         X12Segment seg = segments[i];
         if (seg.SegmentID == "NM1")
         {
             string entityIdentifierCode = seg.Get(1);
             if (entityIdentifierCode == "AY" || entityIdentifierCode == "PR")
             {
                 segNumInfoSourceNM101 = i;
                 i += 4;
             }
             else if (entityIdentifierCode == "41")
             {
                 segNumInfoReceiverNM101 = i;
                 i  += 3;
                 seg = segments[i];
                 while (seg.SegmentID == "STC")
                 {
                     i++;
                     seg = segments[i];
                 }
                 i += 4;
             }
             else if (entityIdentifierCode == "85")
             {
                 segNumsBillingProviderNM1.Add(i);
             }
             else if (entityIdentifierCode == "QC")
             {
                 segNumsPatientDetailNM1.Add(i);
                 //Loop 2200D: There can be multiple TRN segments for each NM1*QC.
                 do
                 {
                     i++;
                     segNumsClaimTrackingNumberTRN.Add(i);       //a TRN segment is required at this location.
                     i++;
                     seg = segments[i];                          //at least one STC segment is required at this location.
                     while (seg.SegmentID == "STC")              //there may be multiple STC segments.
                     {
                         i++;
                         if (i >= segments.Count)
                         {
                             return;                                    //End of file
                         }
                         seg = segments[i];
                     }
                     //Followed by 0 to 3 situational REF segments.
                     for (int j = 0; j < 3 && (seg.SegmentID == "REF"); j++)
                     {
                         i++;
                         if (i >= segments.Count)
                         {
                             return;                                    //End of file
                         }
                         seg = segments[i];
                     }
                     //Followed by 0 or 1 DTP segments.
                     if (seg.SegmentID == "DTP")
                     {
                         i++;
                         if (i >= segments.Count)
                         {
                             return;                                    //End of file
                         }
                         seg = segments[i];
                     }
                     //An entire iteration of loop 2200D is now finished. If another iteration is present, it will begin with a TRN segment.
                 } while(seg.SegmentID == "TRN");
             }
         }
     }
 }
Esempio n. 31
0
        private static string SegmentToString(X12Segment segment)
        {
            string retVal = "";
            string rn     = "\r\n";

            //HL
            if (segment.SegmentID == "HL")
            {
                retVal += rn;              //insert a blank line before each loop
                switch (segment.Get(3))
                {
                case "20":
                    retVal += "Information Source:";
                    break;

                case "21":
                    retVal += "Information Receiver:";
                    break;

                case "19":
                    retVal += "Service Provider:";
                    break;

                case "22":
                    retVal += "Subscriber:";
                    break;

                case "23":
                    retVal += "Dependent:";
                    break;
                }
                retVal += rn;
            }
            //NM1
            else if (segment.SegmentID == "NM1")
            {
                switch (segment.Get(1))                //payer ID code
                {
                case "PR":
                    retVal = "Payer: ";
                    break;

                case "41":
                    retVal = "Submitter: ";
                    break;

                case "1P":
                    retVal = "Provider: ";
                    break;

                case "IL":
                    retVal = "Insured or Subscriber: ";
                    break;

                case "QC":
                    retVal = "Patient: ";
                    break;

                case "85":
                    retVal = "Billing Provider: ";
                    break;
                }
                retVal += segment.Get(3) + ", "                //LName
                          + segment.Get(4) + " "               //Fname
                          + segment.Get(5) + " "               //MiddleName
                          + segment.Get(7) + ", "              //Suffix
                          + "ID code: " + segment.Get(9) + rn; //ID code
            }
            //PER
            else if (segment.SegmentID == "PER")
            {
                retVal = "Information Contact: "
                         + segment.Get(2) + " "            //Name
                         + GetPERqualifier(segment.Get(3)) + " "
                         + segment.Get(4) + " "
                         + GetPERqualifier(segment.Get(5)) + " "
                         + segment.Get(6) + " "
                         + GetPERqualifier(segment.Get(7)) + " "
                         + segment.Get(8) + rn;
            }
            //TRN
            else if (segment.SegmentID == "TRN")
            {
                retVal = "Trace Number: "
                         + segment.Get(2) + rn;
            }
            //STC-Status information
            else if (segment.SegmentID == "STC")
            {
                retVal = "ClaimStatus :"
                                                                 //+segment.Get(1,1)+" "//Industry R code
                         + "LOINC:" + segment.Get(1, 2) + ", "   //LOINC code
                         + "DATE: " + ConvertDate(segment.Get(2)) + " "
                         + ConvertCurrency(segment.Get(4)) + " " //monetary amount
                         + segment.Get(10, 2) + " "              //LOINC code 2
                         + segment.Get(11, 2) + rn;              //LOINC code 3
            }
            //REF
            else if (segment.SegmentID == "REF")
            {
                switch (segment.Get(1))
                {
                case "EJ":
                    retVal = "Patient Account Number: ";
                    break;

                case "BLT":
                    retVal = "Billing Type: ";
                    break;

                case "EA":
                    retVal = "Medical Record ID Number: ";
                    break;

                case "D9":
                    retVal = "Claim Number: ";
                    break;

                case "FJ":
                    retVal = "Line Item Control Number: ";
                    break;

                case "87":
                    //functional category irrelevant
                    return("");

                case "9F":
                    retVal = "Referral Number: ";
                    break;

                case "6R":
                    retVal = "Provider Control Number: ";
                    break;

                case "G5":
                    retVal = "Provider Site Number: ";
                    break;

                case "1B":
                    retVal = "Blue Shield Provider Number: ";
                    break;
                }
                retVal += segment.Get(2) + rn;
            }
            //DTP(x2)-Date or Time period
            else if (segment.SegmentID == "DTP")
            {
                switch (segment.Get(1))
                {
                case "434":
                    retVal = "Statement date: ";
                    break;

                case "106":
                    retVal = "Required by: ";
                    break;

                case "472":
                    retVal = "Service date: ";
                    break;
                }
                if (segment.Get(2) == "D8")              //Date eight char
                {
                    retVal += ConvertDate(segment.Get(3)) + rn;
                }
                else if (segment.Get(2) == "RD8")              //Range Date eight char
                {
                    retVal += ConvertDateRange(segment.Get(3)) + rn;
                }
            }
            //PWK-not very useful here
            //N1
            else if (segment.SegmentID == "N1")
            {
                switch (segment.Get(1))                //
                {
                case "PR":
                    retVal = "Payer: ";
                    break;
                }
                retVal += segment.Get(2) + rn;
            }
            //N3
            else if (segment.SegmentID == "N3")
            {
                retVal = segment.Get(1) + " "            //address
                         + segment.Get(2) + rn;          //address2
            }
            //N4-CityStateZip
            else if (segment.SegmentID == "N4")
            {
                retVal = segment.Get(1) + ", "           //City
                         + segment.Get(2) + "  "         //State
                         + segment.Get(3) + " ";         //Zip
                if (segment.Get(5) == "B1")              //branch
                {
                    retVal += "Branch " + segment.Get(6);
                }
                else if (segment.Get(5) == "DP")              //department
                {
                    retVal += "Department " + segment.Get(6);
                }
                retVal += rn;
            }
            //SVC-Service Line Information
            else if (segment.SegmentID == "SVC")
            {
                retVal = segment.Get(1, 2) + " "                 //procedure code
                         + ConvertCurrency(segment.Get(2)) + " " //amount
                         + segment.Get(4) + rn;                  //national Uniform Billing Code??? on institutional claims.
            }
            //SBR-subscriber on 837
            //DMG-birthdate,gender on 837
            //CLM-claim on 837
            //DN2-tooth status on 837
            //LX-line counter not needed
            //SV3-Dental service on 837
            //TOO-Tooth info on 837
            return(retVal);
        }
Esempio n. 32
0
File: EB271.cs Progetto: mnisl/OD
		public EB271(X12Segment segment,bool isInNetwork) {
			if(eb01==null) {
				FillDictionaries();
			}
			Segment=segment;
			SupplementalSegments=new List<X12Segment>();
			//start pattern matching to generate closest Benefit
			EB01 eb01val=eb01.Find(EB01MatchesCode);
			EB02 eb02val=eb02.Find(EB02MatchesCode);
			EB03 eb03val=eb03.Find(EB03MatchesCode);
			EB06 eb06val=eb06.Find(EB06MatchesCode);
			EB09 eb09val=eb09.Find(EB09MatchesCode);
			ProcedureCode proccode=null;
			if(ProcedureCodes.IsValidCode(Segment.Get(13,2))) {
				proccode=ProcedureCodes.GetProcCode(Segment.Get(13,2));
			}
			if(!eb01val.IsSupported
				|| (eb02val!=null && !eb02val.IsSupported)
				|| (eb03val!=null && !eb03val.IsSupported)
				|| (eb06val!=null && !eb06val.IsSupported)
				|| (eb09val!=null && !eb09val.IsSupported)) 
			{
				Benefitt=null;
				return;
			}
			if(eb01val.BenefitType==InsBenefitType.ActiveCoverage	&& Segment.Get(3)=="30") {
				Benefitt=null;
				return;
			}
			if(eb01val.BenefitType==InsBenefitType.ActiveCoverage && proccode!=null) {
				//A code is covered.  Informational only.
				Benefitt=null;
				return;
			}
			if(Segment.Get(8)!="") {//if percentage
				//must have either a category or a proc code
				if(proccode==null) {//if no proc code is specified
					if(eb03val==null || eb03val.ServiceType==EbenefitCategory.None || eb03val.ServiceType==EbenefitCategory.General) {//and no category specified
						Benefitt=null;
						return;
					}
				}
			}
			//coinsurance amounts are handled with fee schedules rather than benefits
			if(eb01val.BenefitType==InsBenefitType.CoPayment || eb01val.BenefitType==InsBenefitType.CoInsurance) {
				if(Segment.Get(7)!="") {//and a monetary amount specified
					Benefitt=null;
					return;
				}
			}
			//a limitation without an amount is meaningless
			if(eb01val.BenefitType==InsBenefitType.Limitations) {
				if(Segment.Get(7)=="") {//no monetary amount specified
					Benefitt=null;
					return;
				}
			}
			if(isInNetwork && Segment.Get(12)=="N") {
				Benefitt=null;
				return;
			}
			if(!isInNetwork && Segment.Get(12)=="Y") {
				Benefitt=null;
				return;
			}
			//if only a quantity is specified with no qualifier, it's meaningless
			if(Segment.Get(10)!="" && eb09val==null) {
				Benefitt=null;
				return;
			}
			//if only a qualifier is specified with no quantity, it's meaningless
			if(eb09val!=null && Segment.Get(10)=="") {
				Benefitt=null;
				return;
			}
			Benefitt=new Benefit();
			//1
			Benefitt.BenefitType=eb01val.BenefitType;
			//2
			if(eb02val!=null) {
				Benefitt.CoverageLevel=eb02val.CoverageLevel;
			}
			//3
			if(eb03val!=null) {
				Benefitt.CovCatNum=CovCats.GetForEbenCat(eb03val.ServiceType).CovCatNum;
			}
			//4-Insurance type - we ignore.
			//5-Plan description - we ignore.
			//6
			if(eb06val!=null) {
				Benefitt.TimePeriod=eb06val.TimePeriod;
			}
			//7
			if(Segment.Get(7)!="") {
				Benefitt.MonetaryAmt=PIn.Double(Segment.Get(7));//Monetary amount. Situational
			}
			//8
			if(Segment.Get(8)!="") {
				Benefitt.Percent=100-(int)(PIn.Double(Segment.Get(8))*100);//Percent. Situational
				Benefitt.CoverageLevel=BenefitCoverageLevel.None;
			}
			//9-Quantity qualifier
			if(eb09val!=null) {
				Benefitt.QuantityQualifier=eb09val.QuantityQualifier;
			}
			//10-Quantity
			if(Segment.Get(10)!="") {
				Benefitt.Quantity=(byte)PIn.Double(Segment.Get(10));//Example: "19.0" with Quantity qualifier "S7" (age).
			}
			//11-Authorization. Ignored.
			//12-In network. Ignored.
			//13-proc
			if(proccode!=null) {
				Benefitt.CodeNum=proccode.CodeNum;//element 13,2
			}
		}