public FormEtrans835ProcEdit(Hx835_Proc proc) { InitializeComponent(); Lan.F(this); _proc=proc; }
private Hx835_Proc ProcessSVC(int segNum,DateTime dateClaimServiceStart,DateTime dateClaimServiceEnd) { int segNumSVC=segNum; X12Segment segSVC=_listSegments[segNum]; Hx835_Proc proc=new Hx835_Proc(); proc.ProcCodeAdjudicated=segSVC.Get(1).Split(new string[] { Separators.Subelement },StringSplitOptions.None)[1];//SVC1-2 proc.ProcFee=PIn.Decimal(segSVC.Get(2));//SVC2 proc.InsPaid=PIn.Decimal(segSVC.Get(3));//SVC3 if(segSVC.Get(6)=="") { proc.ProcCodeBilled=proc.ProcCodeAdjudicated; } else { proc.ProcCodeBilled=segSVC.Get(6).Split(new string[] { Separators.Subelement },StringSplitOptions.None)[1];//SVC6-2 } segNum++; //2110 DTM: Service Date. Situational. Repeat 2. Guide page 194. proc.DateServiceStart=dateClaimServiceStart; proc.DateServiceEnd=dateClaimServiceEnd; while(segNum<_listSegments.Count && _listSegments[segNum].SegmentID=="DTM") { if(_listSegments[segNum].Get(1)=="151") {//Service period end. proc.DateServiceEnd=DtmToDateTime(_listSegments[segNum].Get(2)); } else {//_listSegments[segNum].Get(1)=="150" || _listSegments[segNum].Get(1)=="472"//Service period start proc.DateServiceStart=DtmToDateTime(_listSegments[segNum].Get(2)); } segNum++; } if(proc.DateServiceStart!=DateTime.MinValue && proc.DateServiceEnd==DateTime.MinValue) {//Start date provided, but end date not provided. proc.DateServiceEnd=proc.DateServiceStart; } else if(proc.DateServiceStart==DateTime.MinValue && proc.DateServiceEnd!=DateTime.MinValue) {//Start date not provided, but end date provided. Should not happen. Just in case. proc.DateServiceStart=proc.DateServiceEnd; } proc.ListProcAdjustments=new List<Hx835_Adj>(); //2110 CAS: Service Adjustment. Situational. Repeat 99. Guide page 196. while(segNum<_listSegments.Count && _listSegments[segNum].SegmentID=="CAS") { proc.ListProcAdjustments.AddRange(ProcessCAS(segNum)); segNum++; } proc.PatientPortion=0; for(int i=0;i<proc.ListProcAdjustments.Count;i++) { Hx835_Adj adj=proc.ListProcAdjustments[i]; if(adj.AdjCode=="PR") { proc.PatientPortion+=adj.AdjAmt; } } //2110 REF: Service Identification. Situational. Repeat 8. Guide page 204. We do not use. //2110 REF: Line Item Control Number. Situational. Repeat 1. Guide page 206. //2110 REF: Rendering Provider Information. Situational. Repeat 10. Guide page 207. We do not use. //2110 REF: HealthCare Policy Identification. Situational. Repeat 5. Guide page 209. We do not use. while(segNum<_listSegments.Count && _listSegments[segNum].SegmentID=="REF") {//4 segment types clumped together, but we only care about REF*6R. if(_listSegments[segNum].Get(1)=="6R") { string strRef02=_listSegments[segNum].Get(2); if(strRef02.StartsWith("p")) { //If the control number is prefixed with a "p", then it is a ProcNum. //Otherwise, for older versions, it will be the Line Counter from LX01 in the 837, which is basically an index. We will ignore these older index based values. proc.ProcNum=PIn.Long(strRef02.Substring(1));//The entire value excluding the leading "p". } } segNum++; } proc.ListSupplementalInfo=new List<Hx835_Info>(); //2110 AMT: Service Supplemental Amount. Situational. Repeat 9. Guide page 211. while(segNum<_listSegments.Count && _listSegments[segNum].SegmentID=="AMT") { proc.ListSupplementalInfo.Add(ProcessAMT(segNum)); segNum++; } //2110 QTY: Service Supplemental Quantity. Situational. Repeat 6. Guide page 213. We do not use. while(segNum<_listSegments.Count && _listSegments[segNum].SegmentID=="QTY") { segNum++; } //2110 LQ: Health Care Remark Codes. Repeat 99. Guide page 215. proc.ListRemarks=new List<string>(); while(segNum<_listSegments.Count && _listSegments[segNum].SegmentID=="LQ") { proc.ListRemarks.Add(ProcessLQ(segNum)); segNum++; } proc.SegmentCount=segNum-segNumSVC; proc.AllowedAmt=proc.InsPaid+proc.PatientPortion; proc.Writeoff=proc.ProcFee-proc.InsPaid-proc.PatientPortion; return proc; }