예제 #1
0
 ///<summary>Email statements allow variables to be present in the message body and subject, this method replaces those variables with the information from the patient passed in.  Simply pass in the string for the subject or body and the corresponding patient.</summary>
 private static string ReplaceVarsForEmail(string str, Patient pat, Statement stmt)
 {
     //No need to check RemotingRole; no call to db.
     str = ReplaceVarsForSms(str, pat, stmt);
     //These were not inluded in ReplaceVarsForSms because the last name is considered PHI.
     str = str.Replace("[nameFL]", pat.GetNameFL());
     str = str.Replace("[nameFLnoPref]", pat.GetNameFLnoPref());
     return(str);
 }
예제 #2
0
 ///<summary>Email statements allow variables to be present in the message body and subject, this method replaces those variables with the information from the patient passed in.  Simply pass in the string for the subject or body and the corresponding patient.</summary>
 private static string ReplaceVarsForEmail(string str, Patient pat)
 {
     //No need to check RemotingRole; no call to db.
     str = str.Replace("[monthlyCardsOnFile]", CreditCards.GetMonthlyCardsOnFile(pat.PatNum));
     str = str.Replace("[nameF]", pat.GetNameFirst());
     str = str.Replace("[nameFL]", pat.GetNameFL());
     str = str.Replace("[nameFLnoPref]", pat.GetNameFLnoPref());
     str = str.Replace("[namePref]", pat.Preferred);
     str = str.Replace("[PatNum]", pat.PatNum.ToString());
     str = str.Replace("[currentMonth]", DateTime.Now.ToString("MMMM"));
     return(str);
 }
예제 #3
0
		private void butPatSelect_Click(object sender,EventArgs e) {
			FormPatientSelect FormPS=new FormPatientSelect();
			FormPS.ShowDialog();
			if(FormPS.DialogResult!=DialogResult.OK) {
				return;
			}
			if(PatCur!=null && PatCur.PatNum==FormPS.SelectedPatNum) {
				return;
			}
			PatCur=Patients.GetPat(FormPS.SelectedPatNum);
			textName.Text=PatCur.GetNameFL();
			labelExistingLab.Visible=true;
		}
예제 #4
0
		///<summary>Email statements allow variables to be present in the message body and subject, this method replaces those variables with the information from the patient passed in.  Simply pass in the string for the subject or body and the corresponding patient.</summary>
		private static string ReplaceVarsForEmail(string str,Patient pat) {
			//No need to check RemotingRole; no call to db.
			str=str.Replace("[monthlyCardsOnFile]",CreditCards.GetMonthlyCardsOnFile(pat.PatNum));
			str=str.Replace("[nameF]",pat.GetNameFirst());
			str=str.Replace("[nameFL]",pat.GetNameFL());
			str=str.Replace("[nameFLnoPref]",pat.GetNameFLnoPref());
			str=str.Replace("[namePref]",pat.Preferred);
			str=str.Replace("[PatNum]",pat.PatNum.ToString());
			str=str.Replace("[currentMonth]",DateTime.Now.ToString("MMMM"));
			return str;
		}
예제 #5
0
		private void FormTrojanCollect_Load(object sender,EventArgs e) {
			patCur=Patients.GetPat(PatNum);
			guarCur=Patients.GetPat(patCur.Guarantor);
			if(guarCur.EmployerNum==0){
				empCur=null;
			}
			else{
				empCur=Employers.GetEmployer(guarCur.EmployerNum);
			}
			if(guarCur.LName.Length==0){
				MessageBox.Show("Missing guarantor last name.");
				DialogResult=DialogResult.Cancel;
				return;
			}
			if(guarCur.FName.Length==0) {
				MessageBox.Show("Missing guarantor first name.");
				DialogResult=DialogResult.Cancel;
				return;
			}
			if(!Regex.IsMatch(guarCur.SSN,@"^\d{9}$")) {
				MessageBox.Show("Guarantor SSN must be exactly 9 digits.");
				DialogResult=DialogResult.Cancel;
				return;
			}
			if(guarCur.Address.Length==0) {
				MessageBox.Show("Missing guarantor address.");
				DialogResult=DialogResult.Cancel;
				return;
			}
			if(guarCur.City.Length==0) {
				MessageBox.Show("Missing guarantor city.");
				DialogResult=DialogResult.Cancel;
				return;
			}
			if(guarCur.State.Length!=2) {
				MessageBox.Show("Guarantor state must be 2 characters.");
				DialogResult=DialogResult.Cancel;
				return;
			}
			if(guarCur.Zip.Length<5) {
				MessageBox.Show("Invalid guarantor zip.");
				DialogResult=DialogResult.Cancel;
				return;
			}
			labelGuarantor.Text=guarCur.GetNameFL();
			labelAddress.Text=guarCur.Address;
			if(guarCur.Address2!=""){
				labelAddress.Text+=", "+guarCur.Address2;
			}
			labelCityStZip.Text=guarCur.City+", "+guarCur.State+" "+guarCur.Zip;
			labelSSN.Text=guarCur.SSN.Substring(0,3)+"-"+guarCur.SSN.Substring(3,2)+"-"+guarCur.SSN.Substring(5,4);
			if(guarCur.Birthdate.Year<1880){
				labelDOB.Text="";
			}
			else{
				labelDOB.Text=guarCur.Birthdate.ToString("MM/dd/yyyy");
			}
			labelPhone.Text=Clip(guarCur.HmPhone,13);
			if(empCur==null){
				labelEmployer.Text="";
				labelEmpPhone.Text="";
			}
			else{
				labelEmployer.Text=empCur.EmpName;
				labelEmpPhone.Text=empCur.Phone;
			}
			labelPatient.Text=patCur.GetNameFL();
			DataTable table=TrojanQueries.GetMaxProcedureDate(guarCur.PatNum);
			DateTime lastProcDate;
			if(table.Rows.Count==0){
				lastProcDate=DateTime.MinValue;//this should never happen
			}
			else{
				lastProcDate=PIn.Date(table.Rows[0][0].ToString());
			}
			table=TrojanQueries.GetMaxPaymentDate(guarCur.PatNum);
			DateTime lastPayDate;
			if(table.Rows.Count==0) {
				lastPayDate=DateTime.MinValue;
			}
			else {
				lastPayDate=PIn.Date(table.Rows[0][0].ToString());
			}
			if(lastPayDate>lastProcDate){
				textDate.Text=lastPayDate.ToString("MM/dd/yyyy");
			}
			else{
				textDate.Text=lastProcDate.ToString("MM/dd/yyyy");
			}
			textAmount.Text=guarCur.BalTotal.ToString("F2");
			textPassword.Text=PrefC.GetString(PrefName.TrojanExpressCollectPassword);
		}
예제 #6
0
 private static void FillFieldsForConsent(Sheet sheet,Patient pat)
 {
     foreach(SheetField field in sheet.SheetFields) {
         switch(field.FieldName) {
             case "patient.nameFL":
                 field.FieldValue=pat.GetNameFL();
                 break;
             case "dateTime.Today":
                 field.FieldValue=DateTime.Today.ToShortDateString();
                 break;
         }
     }
 }
예제 #7
0
 private static void FillFieldsForReferralSlip(Sheet sheet,Patient pat,Referral refer)
 {
     foreach(SheetField field in sheet.SheetFields) {
         switch(field.FieldName) {
             case "referral.nameFL":
                 field.FieldValue=Referrals.GetNameFL(refer.ReferralNum);
                 break;
             case "referral.address":
                 field.FieldValue=refer.Address;
                 if(refer.Address2!="") {
                     field.FieldValue+="\r\n"+refer.Address2;
                 }
                 break;
             case "referral.cityStateZip":
                 field.FieldValue=refer.City+", "+refer.ST+" "+refer.Zip;
                 break;
             case "referral.phone":
                 field.FieldValue="";
                 if(refer.Telephone.Length==10){
                     field.FieldValue="("+refer.Telephone.Substring(0,3)+")"
                         +refer.Telephone.Substring(3,3)+"-"
                         +refer.Telephone.Substring(6);
                 }
                 break;
             case "referral.phone2":
                 field.FieldValue=refer.Phone2;
                 break;
             case "patient.nameFL":
                 field.FieldValue=pat.GetNameFL();
                 break;
             case "dateTime.Today":
                 field.FieldValue=DateTime.Today.ToShortDateString();
                 break;
             case "patient.WkPhone":
                 field.FieldValue=pat.WkPhone;
                 break;
             case "patient.HmPhone":
                 field.FieldValue=pat.HmPhone;
                 break;
             case "patient.WirelessPhone":
                 field.FieldValue=pat.WirelessPhone;
                 break;
             case "patient.address":
                 field.FieldValue=pat.Address;
                 if(pat.Address2!="") {
                     field.FieldValue+="\r\n"+pat.Address2;
                 }
                 break;
             case "patient.cityStateZip":
                 field.FieldValue=pat.City+", "+pat.State+" "+pat.Zip;
                 break;
             case "patient.provider":
                 field.FieldValue=Providers.GetProv(Patients.GetProvNum(pat)).GetFormalName();
                 break;
             //case "notes"://an input field
         }
     }
 }
예제 #8
0
 private static void FillFieldsForReferralLetter(Sheet sheet,Patient pat,Referral refer)
 {
     foreach(SheetField field in sheet.SheetFields) {
         switch(field.FieldName) {
             case "PracticeTitle":
                 field.FieldValue=PrefC.GetString(PrefName.PracticeTitle);
                 break;
             case "PracticeAddress":
                 field.FieldValue=PrefC.GetString(PrefName.PracticeAddress);
                 if(PrefC.GetString(PrefName.PracticeAddress2) != ""){
                     field.FieldValue+="\r\n"+PrefC.GetString(PrefName.PracticeAddress2);
                 }
                 break;
             case "practiceCityStateZip":
                 field.FieldValue=PrefC.GetString(PrefName.PracticeCity)+", "
                     +PrefC.GetString(PrefName.PracticeST)+"  "
                     +PrefC.GetString(PrefName.PracticeZip);
                 break;
             case "referral.phone":
                 field.FieldValue="";
                 if(refer.Telephone.Length==10) {
                     field.FieldValue="("+refer.Telephone.Substring(0,3)+")"
                         +refer.Telephone.Substring(3,3)+"-"
                         +refer.Telephone.Substring(6);
                 }
                 break;
             case "referral.phone2":
                 field.FieldValue=refer.Phone2;
                 break;
             case "referral.nameFL":
                 field.FieldValue=Referrals.GetNameFL(refer.ReferralNum);
                 break;
             case "referral.address":
                 field.FieldValue=refer.Address;
                 if(refer.Address2!="") {
                     field.FieldValue+="\r\n"+refer.Address2;
                 }
                 break;
             case "referral.cityStateZip":
                 field.FieldValue=refer.City+", "+refer.ST+" "+refer.Zip;
                 break;
             case "today.DayDate":
                 field.FieldValue=DateTime.Today.ToString("dddd")+", "+DateTime.Today.ToShortDateString();
                 break;
             case "patient.nameFL":
                 field.FieldValue=pat.GetNameFL();
                 break;
             case "referral.salutation":
                 field.FieldValue="Dear "+refer.FName+":";
                 break;
             case "patient.priProvNameFL":
                 field.FieldValue=Providers.GetFormalName(pat.PriProv);
                 break;
         }
     }
 }
예제 #9
0
 ///<summary>Pat can be null sometimes.  For example, in deposit slip.</summary>
 private static void FillFieldsInStaticText(Sheet sheet,Patient pat)
 {
     string fldval="";
     string address="";
     string apptsAllFuture="";
     string birthdate="";
     string carrierName="";
     string carrierAddress="";
     string carrierCityStZip="";
     string subscriberId="";
     string subscriberNameFL="";
     string insAnnualMax="";
     string insDeductible="";
     string insDeductibleUsed="";
     string insPending="";
     string insPercentages="";
     string insPlanGroupNumber="";
     string insPlanGroupName="";
     string insPlanNote="";
     string insSubNote="";
     string insRemaining="";
     string insUsed="";
     string carrier2Name="";
     string subscriber2NameFL="";
     string ins2AnnualMax="";
     string ins2Deductible="";
     string ins2DeductibleUsed="";
     string ins2Pending="";
     string ins2Percentages="";
     string ins2Remaining="";
     string ins2Used="";
     string clinicDescription="";
     string clinicAddress="";
     string clinicCityStZip="";
     string phone="";
     string clinicPhone="";
     string plannedAppointmentInfo="";
     string dateFirstVisit="";
     string treatmentPlanProcs="";
     string dateOfLastSavedTP="";
     string tpResponsPartyAddress="";
     string tpResponsPartyCityStZip="";
     string tpResponsPartyNameFL="";
     string dateRecallDue="";
     string recallInterval="";
     string nextSchedApptDateT="";
     string dateTimeLastAppt="";
     string nextSchedApptsFam="";
     string serviceNote="";
     string insFreqBW="";
     string insFreqExams="";
     string insFreqPanoFMX="";
     string insType=""; //(ppo, etc)
     string referredFrom=""; //(just one)
     string referredTo=""; //(typically Drs. could be multiline. Include date)
     string dateLastBW="";
     string dateLastExam="";
     string dateLastPanoFMX="";
     string dateLastProphy="";
     string genderHeShe="";
     string genderheshe="";
     string genderHimHer="";
     string genderhimher="";
     string genderHimselfHerself="";
     string genderhimselfherself="";
     string genderHisHer="";
     string genderhisher="";
     string genderHisHers="";
     string genderhishers="";
     string guarantorNameF="";
     string guarantorNameFL="";
     string guarantorNameL="";
     string guarantorNamePref="";
     string guarantorNameLF="";
     Family fam=null;
     Provider priProv=null;
     if(pat!=null) {
         switch(pat.Gender) {
             case PatientGender.Male:
                 genderHeShe="He";
                 genderheshe="he";
                 genderHimHer="Him";
                 genderhimher="him";
                 genderHimselfHerself="Himself";
                 genderhimselfherself="Herself";
                 genderHisHer="His";
                 genderhisher="his";
                 genderHisHers="His";
                 genderhishers="his";
                 break;
             case PatientGender.Female:
                 genderHeShe="She";
                 genderheshe="she";
                 genderHimHer="Her";
                 genderhimher="her";
                 genderHimselfHerself="Herself";
                 genderhimselfherself="herself";
                 genderHisHer="Her";
                 genderhisher="her";
                 genderHisHers="Hers";
                 genderhishers="hers";
                 break;
             case PatientGender.Unknown:
                 genderHeShe="The patient";
                 genderheshe="the patient";
                 genderHimHer="The patient";
                 genderhimher="the patient";
                 genderHimselfHerself="The patient";
                 genderhimselfherself="the patient";
                 genderHisHer="The patient's";
                 genderhisher="the patient's";
                 genderHisHers="The patient's";
                 genderhishers="the patient's";
                 break;
         }
         Patient guar=Patients.GetPat(pat.Guarantor);
         if(guar!=null) {
             guarantorNameF=guar.FName;
             guarantorNameFL=guar.GetNameFL();
             guarantorNameL=guar.LName;
             guarantorNameLF=guar.GetNameLF();
             guarantorNamePref=guar.Preferred;
         }
         address=pat.Address;
         if(pat.Address2!="") {
             address+=", "+pat.Address2;
         }
         birthdate=pat.Birthdate.ToShortDateString();
         if(pat.Birthdate.Year<1880) {
             birthdate="";
         }
         dateFirstVisit=pat.DateFirstVisit.ToShortDateString();
         if(pat.DateFirstVisit.Year<1880) {
             dateFirstVisit="";
         }
         fam=Patients.GetFamily(pat.PatNum);
         List<Procedure> procsList=null;
         if(Sheets.ContainsStaticField(sheet,"treatmentPlanProcs") || Sheets.ContainsStaticField(sheet,"plannedAppointmentInfo")) {
             procsList=Procedures.Refresh(pat.PatNum);
             if(Sheets.ContainsStaticField(sheet,"treatmentPlanProcs")) {
                 for(int i=0;i<procsList.Count;i++) {
                     if(procsList[i].ProcStatus!=ProcStat.TP) {
                         continue;
                     }
                     if(treatmentPlanProcs!="") {
                         treatmentPlanProcs+="\r\n";
                     }
                     treatmentPlanProcs+=ProcedureCodes.GetStringProcCode(procsList[i].CodeNum)+", "
                     +Procedures.GetDescription(procsList[i])+", "
                     +procsList[i].ProcFee.ToString("c");
                 }
             }
         }
         serviceNote=PatientNotes.Refresh(pat.PatNum,pat.Guarantor).Service;
         List<RefAttach> RefAttachList=RefAttaches.Refresh(pat.PatNum);
         Referral tempReferralFrom = Referrals.GetReferralForPat(pat.PatNum);
         if(Referrals.GetReferralForPat(pat.PatNum)!=null) {
             if(tempReferralFrom.IsDoctor) {
                 referredFrom+=tempReferralFrom.FName+" "+tempReferralFrom.LName+" "+tempReferralFrom.Title+" : "+tempReferralFrom.Specialty.ToString();
             }
             else {
                 referredFrom+=tempReferralFrom.FName+" "+tempReferralFrom.LName;
             }
         }
         for(int i=0;i<RefAttachList.Count;i++) {
             if(RefAttachList[i].IsFrom) {
                 continue;
             }
             Referral tempRef = Referrals.GetReferral(RefAttachList[i].ReferralNum);
             if(tempRef.IsDoctor) {
                 referredTo+=tempRef.FName+" "+tempRef.LName+" "+tempRef.Title+" : "+tempRef.Specialty.ToString()+" "+RefAttachList[i].RefDate.ToShortDateString()+"\r\n";
             }
             else {
                 referredTo+=tempRef.FName+" "+tempRef.LName+" "+RefAttachList[i].RefDate.ToShortDateString()+"\r\n";
             }
         }
         //Insurance-------------------------------------------------------------------------------------------------------------------
         List<PatPlan> patPlanList=PatPlans.Refresh(pat.PatNum);
         long subNum=PatPlans.GetInsSubNum(patPlanList,1);
         long patPlanNum=PatPlans.GetPatPlanNum(subNum,patPlanList);
         List<InsSub> subList=InsSubs.RefreshForFam(fam);
         List<InsPlan> planList=InsPlans.RefreshForSubList(subList);
         InsSub sub=InsSubs.GetSub(subNum,subList);
         InsPlan plan=null;
         if(sub!=null) {
             plan=InsPlans.GetPlan(sub.PlanNum,planList);
             insSubNote=sub.SubscNote;
         }
         Carrier carrier=null;
         List<Benefit> benefitList=Benefits.Refresh(patPlanList,subList);
         List<ClaimProcHist> histList=ClaimProcs.GetHistList(pat.PatNum,benefitList,patPlanList,planList,DateTime.Today,subList);
         double doubAnnualMax;
         double doubDeductible;
         double doubDeductibleUsed;
         double doubPending;
         double doubRemain;
         double doubUsed;
         if(plan!=null) {
             insPlanGroupName=plan.GroupName;
             insPlanGroupNumber=plan.GroupNum;
             insPlanNote=plan.PlanNote;
             carrier=Carriers.GetCarrier(plan.CarrierNum);
             carrierName=carrier.CarrierName;
             carrierAddress=carrier.Address;
             if(carrier.Address2!="") {
                 carrierAddress+=", "+carrier.Address2;
             }
             carrierCityStZip=carrier.City+", "+carrier.State+"  "+carrier.Zip;
             subscriberId=sub.SubscriberID;
             subscriberNameFL=Patients.GetLim(sub.Subscriber).GetNameFL();
             doubAnnualMax=Benefits.GetAnnualMaxDisplay(benefitList,plan.PlanNum,patPlanNum,false);
             doubRemain=-1;
             if(doubAnnualMax!=-1) {
                 insAnnualMax=doubAnnualMax.ToString("c");
                 doubRemain=doubAnnualMax;
             }
             doubDeductible=Benefits.GetDeductGeneralDisplay(benefitList,plan.PlanNum,patPlanNum,BenefitCoverageLevel.Individual);
             if(doubDeductible!=-1) {
                 insDeductible=doubDeductible.ToString("c");
             }
             doubDeductibleUsed=InsPlans.GetDedUsedDisplay(histList,DateTime.Today,plan.PlanNum,patPlanNum,-1,planList,BenefitCoverageLevel.Individual,pat.PatNum);
             if(doubDeductibleUsed!=-1) {
                 insDeductibleUsed=doubDeductibleUsed.ToString("c");
             }
             doubPending=InsPlans.GetPendingDisplay(histList,DateTime.Today,plan,patPlanNum,-1,pat.PatNum,subNum);
             if(doubPending!=-1) {
                 insPending=doubPending.ToString("c");
                 if(doubRemain!=-1) {
                     doubRemain-=doubPending;
                 }
             }
             doubUsed=InsPlans.GetInsUsedDisplay(histList,DateTime.Today,plan.PlanNum,patPlanNum,-1,planList,benefitList,pat.PatNum,subNum);
             if(doubUsed!=-1) {
                 insUsed=doubUsed.ToString("c");
                 if(doubRemain!=-1) {
                     doubRemain-=doubUsed;
                 }
             }
             if(doubRemain!=-1) {
                 insRemaining=doubRemain.ToString("c");
             }
             for(int j=0;j<benefitList.Count;j++) {
                 if(benefitList[j].PlanNum != plan.PlanNum) {
                     continue;
                 }
                 if(benefitList[j].BenefitType != InsBenefitType.CoInsurance) {
                     continue;
                 }
                 if(insPercentages!="") {
                     insPercentages+=",  ";
                 }
                 insPercentages+=CovCats.GetDesc(benefitList[j].CovCatNum)+" "+benefitList[j].Percent.ToString()+"%";
             }
             insFreqBW=Benefits.GetFrequencyDisplay(FrequencyType.BW,benefitList);
             insFreqExams=Benefits.GetFrequencyDisplay(FrequencyType.Exam,benefitList);
             insFreqPanoFMX=Benefits.GetFrequencyDisplay(FrequencyType.PanoFMX,benefitList);
             switch(plan.PlanType) {//(ppo, etc)
                 case "p":
                     insType="PPO Percentage";
                     break;
                 case "f":
                     insType="Medicaid or Flat Copay";
                     break;
                 case "c":
                     insType="Capitation";
                     break;
                 case "":
                     insType="Category Percentage";
                     break;
             }
         }
         subNum=PatPlans.GetInsSubNum(patPlanList,2);
         patPlanNum=PatPlans.GetPatPlanNum(subNum,patPlanList);
         sub=InsSubs.GetSub(subNum,subList);
         if(sub!=null) {
             plan=InsPlans.GetPlan(sub.PlanNum,planList);
         }
         if(plan!=null) {
             carrier=Carriers.GetCarrier(plan.CarrierNum);
             carrier2Name=carrier.CarrierName;
             //carrierAddress=carrier.Address;
             //if(carrier.Address2!="") {
             //	carrierAddress+=", "+carrier.Address2;
             //}
             //carrierCityStZip=carrier.City+", "+carrier.State+"  "+carrier.Zip;
             //subscriberId=plan.SubscriberID;
             subscriber2NameFL=Patients.GetLim(sub.Subscriber).GetNameFL();
             doubAnnualMax=Benefits.GetAnnualMaxDisplay(benefitList,plan.PlanNum,patPlanNum,false);
             doubRemain=-1;
             if(doubAnnualMax!=-1) {
                 ins2AnnualMax=doubAnnualMax.ToString("c");
                 doubRemain=doubAnnualMax;
             }
             doubDeductible=Benefits.GetDeductGeneralDisplay(benefitList,plan.PlanNum,patPlanNum,BenefitCoverageLevel.Individual);
             if(doubDeductible!=-1) {
                 ins2Deductible=doubDeductible.ToString("c");
             }
             doubDeductibleUsed=InsPlans.GetDedUsedDisplay(histList,DateTime.Today,plan.PlanNum,patPlanNum,-1,planList,BenefitCoverageLevel.Individual,pat.PatNum);
             if(doubDeductibleUsed!=-1) {
                 ins2DeductibleUsed=doubDeductibleUsed.ToString("c");
             }
             doubPending=InsPlans.GetPendingDisplay(histList,DateTime.Today,plan,patPlanNum,-1,pat.PatNum,subNum);
             if(doubPending!=-1) {
                 ins2Pending=doubPending.ToString("c");
                 if(doubRemain!=-1) {
                     doubRemain-=doubPending;
                 }
             }
             doubUsed=InsPlans.GetInsUsedDisplay(histList,DateTime.Today,plan.PlanNum,patPlanNum,-1,planList,benefitList,pat.PatNum,subNum);
             if(doubUsed!=-1) {
                 ins2Used=doubUsed.ToString("c");
                 if(doubRemain!=-1) {
                     doubRemain-=doubUsed;
                 }
             }
             if(doubRemain!=-1) {
                 ins2Remaining=doubRemain.ToString("c");
             }
             for(int j=0;j<benefitList.Count;j++) {
                 if(benefitList[j].PlanNum != plan.PlanNum) {
                     continue;
                 }
                 if(benefitList[j].BenefitType != InsBenefitType.CoInsurance) {
                     continue;
                 }
                 if(ins2Percentages!="") {
                     ins2Percentages+=",  ";
                 }
                 ins2Percentages+=CovCats.GetDesc(benefitList[j].CovCatNum)+" "+benefitList[j].Percent.ToString()+"%";
             }
         }
         //Treatment plan-----------------------------------------------------------------------------------------------------------
         TreatPlan[] treatPlanList=TreatPlans.Refresh(pat.PatNum);
         TreatPlan treatPlan=null;
         if(treatPlanList.Length>0) {
             treatPlan=treatPlanList[treatPlanList.Length-1].Copy();
             dateOfLastSavedTP=treatPlan.DateTP.ToShortDateString();
             Patient patRespParty=Patients.GetPat(treatPlan.ResponsParty);
             if(patRespParty!=null) {
                 tpResponsPartyAddress=patRespParty.Address;
                 if(patRespParty.Address2!="") {
                     tpResponsPartyAddress+=", "+patRespParty.Address2;
                 }
                 tpResponsPartyCityStZip=patRespParty.City+", "+patRespParty.State+"  "+patRespParty.Zip;
                 tpResponsPartyNameFL=patRespParty.GetNameFL();
             }
         }
         //Procedure Log-------------------------------------------------------------------------------------------------------------
         List<Procedure> proceduresList=Procedures.Refresh(pat.PatNum);
         DateTime dBW=DateTime.MinValue;
         DateTime dExam=DateTime.MinValue;
         DateTime dPanoFMX=DateTime.MinValue;
         DateTime dProphy=DateTime.MinValue;
         for(int i=0;i<proceduresList.Count;i++) {
             Procedure proc = proceduresList[i];//cache Proc to speed up process
             if(proc.ProcStatus!=ProcStat.C
             && proc.ProcStatus!=ProcStat.EC
             && proc.ProcStatus!=ProcStat.EO) {
                 continue;//only look at completed or existing procedures
             }
             if((proc.CodeNum==ProcedureCodes.GetCodeNum("D0210")//intraoral - complete series (including bitewings)
             ||proc.CodeNum==ProcedureCodes.GetCodeNum("D0270")//bitewing - single film
             ||proc.CodeNum==ProcedureCodes.GetCodeNum("D0272")//bitewings - two films
             ||proc.CodeNum==ProcedureCodes.GetCodeNum("D0274")//bitewings - four films
             ||proc.CodeNum==ProcedureCodes.GetCodeNum("D0277")//vertical bitewings - 7 to 8 films
             ||proc.CodeNum==ProcedureCodes.GetCodeNum("D0273"))//bitewings - three films
             && proc.ProcDate>dBW) //newest
         {
                 dBW=proc.ProcDate;
                 dateLastBW=proc.ProcDate.ToShortDateString();
             }
             if((proc.CodeNum==ProcedureCodes.GetCodeNum("D0120")//periodic oral evaluation - established patient
             ||proc.CodeNum==ProcedureCodes.GetCodeNum("D0140")//limited oral evaluation - problem focused
             ||proc.CodeNum==ProcedureCodes.GetCodeNum("D0150")//comprehensive oral evaluation - new or established patient
             ||proc.CodeNum==ProcedureCodes.GetCodeNum("D0160"))//detailed and extensive oral evaluation - problem focused, by report
             && proc.ProcDate>dExam) //newest
         {
                 dExam=proc.ProcDate;
                 dateLastExam=proc.ProcDate.ToShortDateString();
             }
             if((proc.CodeNum==ProcedureCodes.GetCodeNum("D0210")//intraoral - complete series (including bitewings)
             ||proc.CodeNum==ProcedureCodes.GetCodeNum("D0330"))//panoramic film
             && proc.ProcDate>dPanoFMX) //newest
         {
                 dPanoFMX=proc.ProcDate;
                 dateLastPanoFMX=proc.ProcDate.ToShortDateString();
             }
             if((proc.CodeNum==ProcedureCodes.GetCodeNum("D1110")//prophylaxis - adult
             ||proc.CodeNum==ProcedureCodes.GetCodeNum("D1120")//prophylaxis - child
             ||proc.CodeNum==ProcedureCodes.GetCodeNum("D1201")//Topical Fluoride Including Prophy-Child
             ||proc.CodeNum==ProcedureCodes.GetCodeNum("D1205"))//Topical Fluoride Including Prophy-Adult
             && proc.ProcDate>dProphy) //newest
         {
                 dProphy=proc.ProcDate;
                 dateLastProphy=proc.ProcDate.ToShortDateString(); ;
             }
         }
         //Recall--------------------------------------------------------------------------------------------------------------------
         Recall recall=Recalls.GetRecallProphyOrPerio(pat.PatNum);
         if(recall!=null) {
             if(recall.DateDue.Year>1880) {
                 dateRecallDue=recall.DateDue.ToShortDateString();
             }
             recallInterval=recall.RecallInterval.ToString();
         }
         //Appointments--------------------------------------------------------------------------------------------------------------
         List<Appointment> apptList=Appointments.GetListForPat(pat.PatNum);
         List<Appointment> apptFutureList=Appointments.GetFutureSchedApts(pat.PatNum);
         for(int i=0;i<apptList.Count;i++) {
             if(apptList[i].AptStatus != ApptStatus.Scheduled
             && apptList[i].AptStatus != ApptStatus.Complete
             && apptList[i].AptStatus != ApptStatus.None
             && apptList[i].AptStatus != ApptStatus.ASAP) {
                 continue;
             }
             if(apptList[i].AptDateTime < DateTime.Now) {
                 //this will happen repeatedly up until the most recent.
                 dateTimeLastAppt=apptList[i].AptDateTime.ToShortDateString()+"  "+apptList[i].AptDateTime.ToShortTimeString();
             }
             else {//after now
                 if(nextSchedApptDateT=="") {//only the first one found
                     nextSchedApptDateT=apptList[i].AptDateTime.ToShortDateString()+"  "+apptList[i].AptDateTime.ToShortTimeString();
                     break;//we're done with the list now.
                 }
             }
         }
         for(int i=0;i<apptFutureList.Count;i++) {//cannot be combined in loop above because of the break in the loop.
             apptsAllFuture+=apptFutureList[i].AptDateTime.ToShortDateString()+" "+apptFutureList[i].AptDateTime.ToShortTimeString()+" : "+apptFutureList[i].ProcDescript+"\r\n";
         }
         for(int i=0;i<fam.ListPats.Length;i++) {
             List<Appointment> futAptsList=Appointments.GetFutureSchedApts(fam.ListPats[i].PatNum);
             if(futAptsList.Count>0) {//just gets one future appt for each person
                 nextSchedApptsFam+=fam.ListPats[i].FName+": "+futAptsList[0].AptDateTime.ToShortDateString()+" "+futAptsList[0].AptDateTime.ToShortTimeString()+" : "+futAptsList[0].ProcDescript+"\r\n";
             }
         }
         if(Sheets.ContainsStaticField(sheet,"plannedAppointmentInfo")) {
             PlannedAppt plannedAppt=PlannedAppts.GetOneOrderedByItemOrder(pat.PatNum);
             for(int i=0;i<apptList.Count;i++) {
                 if(plannedAppt!=null && apptList[i].AptNum==plannedAppt.AptNum) {
                     plannedAppointmentInfo="Procedures: ";
                     plannedAppointmentInfo+=apptList[i].ProcDescript+"\r\n";
                     int minutesTotal=apptList[i].Pattern.Length*5;
                     int hours=minutesTotal/60;//automatically rounds down
                     int minutes=minutesTotal-hours*60;
                     plannedAppointmentInfo+="Appt Length: ";
                     if(hours>0) {
                         plannedAppointmentInfo+=hours.ToString()+" hours, ";
                     }
                     plannedAppointmentInfo+=minutes.ToString()+" min\r\n";
                     if(Programs.UsingOrion) {
                         DateTime newDateSched=new DateTime();
                         for(int p=0;p<procsList.Count;p++) {
                             if(procsList[p].PlannedAptNum==apptList[i].AptNum) {
                                 OrionProc op=OrionProcs.GetOneByProcNum(procsList[p].ProcNum);
                                 if(op!=null && op.DateScheduleBy.Year>1880) {
                                     if(newDateSched.Year<1880) {
                                         newDateSched=op.DateScheduleBy;
                                     }
                                     else {
                                         if(op.DateScheduleBy<newDateSched) {
                                             newDateSched=op.DateScheduleBy;
                                         }
                                     }
                                 }
                             }
                         }
                         if(newDateSched.Year>1880) {
                             plannedAppointmentInfo+="Schedule by: "+newDateSched.ToShortDateString();
                         }
                         else {
                             plannedAppointmentInfo+="No schedule by date.";
                         }
                     }
                 }
             }
         }
         priProv=Providers.GetProv(Patients.GetProvNum(pat));//guaranteed to work
         //Clinic-------------------------------------------------------------------------------------------------------------
         Clinic clinic=Clinics.GetClinic(pat.ClinicNum);
         if(clinic==null) {
             clinicDescription=PrefC.GetString(PrefName.PracticeTitle);
             clinicAddress=PrefC.GetString(PrefName.PracticeAddress);
             if(PrefC.GetString(PrefName.PracticeAddress2)!="") {
                 clinicAddress+=", "+PrefC.GetString(PrefName.PracticeAddress2);
             }
             clinicCityStZip=PrefC.GetString(PrefName.PracticeCity)+", "+PrefC.GetString(PrefName.PracticeST)+"  "+PrefC.GetString(PrefName.PracticeZip);
             phone=PrefC.GetString(PrefName.PracticePhone);
         }
         else {
             clinicDescription=clinic.Description;
             clinicAddress=clinic.Address;
             if(clinic.Address2!="") {
                 clinicAddress+=", "+clinic.Address2;
             }
             clinicCityStZip=clinic.City+", "+clinic.State+"  "+clinic.Zip;
             phone=clinic.Phone;
         }
         if(phone.Length==10 && System.Globalization.CultureInfo.CurrentCulture.Name=="en-US") {
             clinicPhone="("+phone.Substring(0,3)+")"+phone.Substring(3,3)+"-"+phone.Substring(6);
         }
         else {
             clinicPhone=phone;
         }
     }//End of if(pat!=null)
     //Fill fields---------------------------------------------------------------------------------------------------------
     foreach(SheetField field in sheet.SheetFields) {
         if(field.FieldType!=SheetFieldType.StaticText) {
             continue;
         }
         fldval=field.FieldValue;
         if(pat!=null) {
             fldval=fldval.Replace("[address]",address);
             fldval=fldval.Replace("[apptsAllFuture]",apptsAllFuture.TrimEnd());
             fldval=fldval.Replace("[age]",Patients.AgeToString(pat.Age));
             fldval=fldval.Replace("[balTotal]",fam.ListPats[0].BalTotal.ToString("c"));
             fldval=fldval.Replace("[bal_0_30]",fam.ListPats[0].Bal_0_30.ToString("c"));
             fldval=fldval.Replace("[bal_31_60]",fam.ListPats[0].Bal_31_60.ToString("c"));
             fldval=fldval.Replace("[bal_61_90]",fam.ListPats[0].Bal_61_90.ToString("c"));
             fldval=fldval.Replace("[balOver90]",fam.ListPats[0].BalOver90.ToString("c"));
             fldval=fldval.Replace("[balInsEst]",fam.ListPats[0].InsEst.ToString("c"));
             fldval=fldval.Replace("[balTotalMinusInsEst]",(fam.ListPats[0].BalTotal-fam.ListPats[0].InsEst).ToString("c"));
             fldval=fldval.Replace("[BillingType]",DefC.GetName(DefCat.BillingTypes,pat.BillingType));
             fldval=fldval.Replace("[Birthdate]",birthdate);
             fldval=fldval.Replace("[carrierName]",carrierName);
             fldval=fldval.Replace("[carrier2Name]",carrier2Name);
             fldval=fldval.Replace("[ChartNumber]",pat.ChartNumber);
             fldval=fldval.Replace("[carrierAddress]",carrierAddress);
             fldval=fldval.Replace("[carrierCityStZip]",carrierCityStZip);
             fldval=fldval.Replace("[cityStateZip]",pat.City+", "+pat.State+"  "+pat.Zip);
             fldval=fldval.Replace("[clinicDescription]",clinicDescription);
             fldval=fldval.Replace("[clinicAddress]",clinicAddress);
             fldval=fldval.Replace("[clinicCityStZip]",clinicCityStZip);
             fldval=fldval.Replace("[clinicPhone]",clinicPhone);
             fldval=fldval.Replace("[DateFirstVisit]",dateFirstVisit);
             fldval=fldval.Replace("[dateLastBW]",dateLastBW);
             fldval=fldval.Replace("[dateLastExam]",dateLastExam);
             fldval=fldval.Replace("[dateLastPanoFMX]",dateLastPanoFMX);
             fldval=fldval.Replace("[dateLastProphy]",dateLastProphy);
             fldval=fldval.Replace("[dateOfLastSavedTP]",dateOfLastSavedTP);
             fldval=fldval.Replace("[dateRecallDue]",dateRecallDue);
             fldval=fldval.Replace("[dateTimeLastAppt]",dateTimeLastAppt);
             fldval=fldval.Replace("[Email]",pat.Email);
             fldval=fldval.Replace("[famFinUrgNote]",fam.ListPats[0].FamFinUrgNote);
             fldval=fldval.Replace("[guarantorNameF]",guarantorNameF);
             fldval=fldval.Replace("[guarantorNameFL]",guarantorNameFL);
             fldval=fldval.Replace("[guarantorNameL]",guarantorNameL);
             fldval=fldval.Replace("[guarantorNamePref]",guarantorNamePref);
             fldval=fldval.Replace("[guarantorNameLF]",guarantorNameLF);
             fldval=fldval.Replace("[gender]",Lan.g("enumPatientGender",pat.Gender.ToString()));
             fldval=fldval.Replace("[genderHeShe]",genderHeShe);
             fldval=fldval.Replace("[genderheshe]",genderheshe);
             fldval=fldval.Replace("[genderHimHer]",genderHimHer);
             fldval=fldval.Replace("[genderhimher]",genderhimher);
             fldval=fldval.Replace("[genderHimselfHerself]",genderHimselfHerself);
             fldval=fldval.Replace("[genderhimselfherself]",genderhimselfherself);
             fldval=fldval.Replace("[genderHisHer]",genderHisHer);
             fldval=fldval.Replace("[genderhisher]",genderhisher);
             fldval=fldval.Replace("[genderHisHers]",genderHisHers);
             fldval=fldval.Replace("[genderhishers]",genderhishers);
             fldval=fldval.Replace("[guarantorNameFL]",fam.ListPats[0].GetNameFL());
             fldval=fldval.Replace("[HmPhone]",StripPhoneBeyondSpace(pat.HmPhone));
             fldval=fldval.Replace("[insAnnualMax]",insAnnualMax);
             fldval=fldval.Replace("[insDeductible]",insDeductible);
             fldval=fldval.Replace("[insDeductibleUsed]",insDeductibleUsed);
             fldval=fldval.Replace("[insFreqBW]",insFreqBW.TrimEnd());
             fldval=fldval.Replace("[insFreqExams]",insFreqExams.TrimEnd());
             fldval=fldval.Replace("[insFreqPanoFMX]",insFreqPanoFMX.TrimEnd());
             fldval=fldval.Replace("[insPending]",insPending);
             fldval=fldval.Replace("[insPercentages]",insPercentages);
             fldval=fldval.Replace("[insPlanGroupNumber]",insPlanGroupNumber);
             fldval=fldval.Replace("[insPlanGroupName]",insPlanGroupName);
             fldval=fldval.Replace("[insPlanNote]",insPlanNote);
             fldval=fldval.Replace("[insType]",insType);
             fldval=fldval.Replace("[insSubNote]",insSubNote);
             fldval=fldval.Replace("[insRemaining]",insRemaining);
             fldval=fldval.Replace("[insUsed]",insUsed);
             fldval=fldval.Replace("[ins2AnnualMax]",ins2AnnualMax);
             fldval=fldval.Replace("[ins2Deductible]",ins2Deductible);
             fldval=fldval.Replace("[ins2DeductibleUsed]",ins2DeductibleUsed);
             fldval=fldval.Replace("[ins2Pending]",ins2Pending);
             fldval=fldval.Replace("[ins2Percentages]",ins2Percentages);
             fldval=fldval.Replace("[ins2Remaining]",ins2Remaining);
             fldval=fldval.Replace("[ins2Used]",ins2Used);
             fldval=fldval.Replace("[MedUrgNote]",pat.MedUrgNote);
             fldval=fldval.Replace("[nameF]",pat.FName);
             fldval=fldval.Replace("[nameFL]",pat.GetNameFL());
             fldval=fldval.Replace("[nameFLFormal]",pat.GetNameFLFormal());
             fldval=fldval.Replace("[nameL]",pat.LName);
             fldval=fldval.Replace("[nameLF]",pat.GetNameLF());
             fldval=fldval.Replace("[nameMI]",pat.MiddleI);
             fldval=fldval.Replace("[namePref]",pat.Preferred);
             fldval=fldval.Replace("[nextSchedApptDateT]",nextSchedApptDateT);
             fldval=fldval.Replace("[nextSchedApptsFam]",nextSchedApptsFam.TrimEnd());
             fldval=fldval.Replace("[PatNum]",pat.PatNum.ToString());
             fldval=fldval.Replace("[plannedAppointmentInfo]",plannedAppointmentInfo);
             fldval=fldval.Replace("[priProvNameFormal]",priProv.GetFormalName());
             fldval=fldval.Replace("[recallInterval]",recallInterval);
             fldval=fldval.Replace("[referredFrom]",referredFrom);
             fldval=fldval.Replace("[referredTo]",referredTo.TrimEnd());
             fldval=fldval.Replace("[salutation]",pat.GetSalutation());
             fldval=fldval.Replace("[serviceNote]",serviceNote);
             fldval=fldval.Replace("[siteDescription]",Sites.GetDescription(pat.SiteNum));
             fldval=fldval.Replace("[subscriberID]",subscriberId);
             fldval=fldval.Replace("[subscriberNameFL]",subscriberNameFL);
             fldval=fldval.Replace("[subscriber2NameFL]",subscriber2NameFL);
             fldval=fldval.Replace("[timeNow]",DateTime.Now.ToShortTimeString());
             fldval=fldval.Replace("[tpResponsPartyAddress]",tpResponsPartyAddress);
             fldval=fldval.Replace("[tpResponsPartyCityStZip]",tpResponsPartyCityStZip);
             fldval=fldval.Replace("[tpResponsPartyNameFL]",tpResponsPartyNameFL);
             fldval=fldval.Replace("[treatmentPlanProcs]",treatmentPlanProcs);
             fldval=fldval.Replace("[WirelessPhone]",StripPhoneBeyondSpace(pat.WirelessPhone));
             fldval=fldval.Replace("[WkPhone]",StripPhoneBeyondSpace(pat.WkPhone));
         }
         fldval=fldval.Replace("[dateToday]",DateTime.Today.ToShortDateString());
         fldval=fldval.Replace("[practiceTitle]",PrefC.GetString(PrefName.PracticeTitle));
         field.FieldValue=fldval;
     }
 }