コード例 #1
0
ファイル: FormEtrans835ProcEdit.cs プロジェクト: mnisl/OD
		public FormEtrans835ProcEdit(Hx835_Proc proc) {
			InitializeComponent();
			Lan.F(this);
			_proc=proc;
		}
コード例 #2
0
ファイル: X835.cs プロジェクト: mnisl/OD
		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;
		}