public void RepeatCharges_RunRepeatingCharges_ChangeRepeatChargeStartDateWithManuallyAddedProc() { Patient pat = CreatePatForRepeatCharge("RepeatCharge", 15); //add a repeat charge with start 01/15/2017 RepeatCharge rc = new RepeatCharge(); rc.ChargeAmt = 99; rc.PatNum = pat.PatNum; rc.ProcCode = "D2750"; rc.IsEnabled = true; rc.DateStart = new DateTime(2017, 01, pat.BillingCycleDay); rc.RepeatChargeNum = RepeatCharges.Insert(rc); //add a procedures with procdate 01/18/2017 Procedure p = new Procedure(); p.PatNum = pat.PatNum; p.ProcStatus = ProcStat.C; p.ProcDate = new DateTime(2017, 01, 18); p.ProcFee = 99; p.CodeNum = ProcedureCodes.GetCodeNum("D2750"); p.RepeatChargeNum = rc.RepeatChargeNum; Procedures.Insert(p); //change the repeatcharge start date to 02/15/2017 rc.DateStart = new DateTime(2017, 02, pat.BillingCycleDay); RepeatCharges.Update(rc); DateTime dateRun = new DateTime(2017, 02, pat.BillingCycleDay); RepeatCharges.RunRepeatingCharges(dateRun); List <Procedure> listProcs = Procedures.Refresh(pat.PatNum); Assert.AreEqual(2, listProcs.Count); }
public void FeeSchedTools_ImportCanada() { string canadianCodes = Properties.Resources.canadianprocedurecodes; //If we need to import these procedures codes, do so foreach (string line in canadianCodes.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None)) { string[] properties = line.Split('\t'); if (properties.Count() != 10) { continue; } if (ProcedureCodes.GetCodeNum(properties[0]) != 0) { continue; } ProcedureCode procCode = new ProcedureCode() { ProcCode = properties[0], Descript = properties[1], ProcTime = properties[8], AbbrDesc = properties[9], }; ProcedureCodes.Insert(procCode); } //Now import the fees string feeData = Properties.Resources.BC_BCDA_2018_GPOOC; FeeSched feeSched = FeeSchedT.GetNewFeeSched(FeeScheduleType.Normal, MethodBase.GetCurrentMethod().Name, isGlobal: false); List <Fee> listNewFees = FeeScheds.ImportCanadaFeeSchedule2(feeSched, feeData, 0, 0, out int numImported, out int numSkipped); Assert.IsTrue(DoAmountsMatch(listNewFees, feeSched.FeeSchedNum, 0, 0)); }
public void RepeatCharges_ExistingProcsOnStartDate() { Patient pat = CreatePatForRepeatCharge("RepeatCharge", 13); RepeatCharge rc = new RepeatCharge(); rc.ChargeAmt = 99; rc.PatNum = pat.PatNum; rc.ProcCode = "D2750"; rc.IsEnabled = true; rc.DateStart = new DateTime(2017, 10, 15); rc.DateStop = new DateTime(2017, 11, 30); rc.RepeatChargeNum = RepeatCharges.Insert(rc); DateTime dateRun = new DateTime(2017, 12, 15); Procedure p = new Procedure(); p.PatNum = pat.PatNum; p.ProcStatus = ProcStat.C; p.ProcDate = new DateTime(2017, 10, 15); p.ProcFee = 99; p.CodeNum = ProcedureCodes.GetCodeNum("D2750"); p.RepeatChargeNum = rc.RepeatChargeNum; Procedures.Insert(p); RepeatCharges.RunRepeatingCharges(dateRun); List <Procedure> listProcs = Procedures.Refresh(pat.PatNum); Assert.AreEqual(2, listProcs.Count); Assert.AreEqual(1, listProcs.Count(x => x.ProcDate == new DateTime(2017, 11, pat.BillingCycleDay))); }
///<summary>Returns the proc</summary> ///<param name="procDate">If not included, will be set to DateTime.Now.</param> public static Procedure CreateProcedure(Patient pat, string procCodeStr, ProcStat procStatus, string toothNum, double procFee, DateTime procDate = default(DateTime), int priority = 0, long plannedAptNum = 0, long provNum = 0) { Procedure proc = new Procedure(); proc.CodeNum = ProcedureCodes.GetCodeNum(procCodeStr); proc.PatNum = pat.PatNum; if (procDate == default(DateTime)) { proc.ProcDate = DateTime.Today; } else { proc.ProcDate = procDate; } proc.ProcStatus = procStatus; proc.ProvNum = provNum; if (provNum == 0) { proc.ProvNum = pat.PriProv; } proc.ProcFee = procFee; proc.ToothNum = toothNum; proc.Prosthesis = "I"; proc.Priority = Defs.GetDefsForCategory(DefCat.TxPriorities, true)[priority].DefNum; proc.PlannedAptNum = plannedAptNum; proc.ClinicNum = pat.ClinicNum; Procedures.Insert(proc); return(proc); }
public static Benefit CreateFrequencyLimitation(string procCode, byte quantity, BenefitQuantity quantityQualifier, long planNum, BenefitTimePeriod timePeriod) { Benefit ben = Benefits.CreateFrequencyBenefit(ProcedureCodes.GetCodeNum(procCode), quantity, quantityQualifier, planNum, timePeriod); Benefits.Insert(ben); return(ben); }
public static void CreateLimitationProc(long planNum, string procCodeStr, double amt) { Benefit ben = new Benefit(); ben.PlanNum = planNum; ben.BenefitType = InsBenefitType.Limitations; ben.CodeNum = ProcedureCodes.GetCodeNum(procCodeStr); ben.CoverageLevel = BenefitCoverageLevel.Individual; ben.MonetaryAmt = amt; ben.TimePeriod = BenefitTimePeriod.CalendarYear; Benefits.Insert(ben); }
///<summary>The tooth number passed in should be in international format.</summary> public static void SetExtracted(string toothNumInternat, DateTime procDate, long patNum) { Procedure proc = new Procedure(); proc.CodeNum = ProcedureCodes.GetCodeNum("71101"); proc.PatNum = patNum; proc.ProcDate = procDate; proc.ToothNum = Tooth.FromInternat(toothNumInternat); proc.ProcStatus = ProcStat.EO; Procedures.Insert(proc); ToothInitialTC.SetMissing(toothNumInternat, patNum); }
public static void CreateFrequencyProc(long planNum, string procCodeStr, BenefitQuantity quantityQualifier, Byte quantity) { Benefit ben = new Benefit(); ben.PlanNum = planNum; ben.BenefitType = InsBenefitType.Limitations; ben.CovCatNum = 0; ben.CodeNum = ProcedureCodes.GetCodeNum(procCodeStr); ben.CoverageLevel = BenefitCoverageLevel.None; ben.TimePeriod = BenefitTimePeriod.None; ben.Quantity = quantity; ben.QuantityQualifier = quantityQualifier; Benefits.Insert(ben); }
/// <summary>Returns the proc</summary> public static Procedure CreateProcedure(Patient pat, string procCodeStr, ProcStat procStatus, string toothNum, double procFee) { Procedure proc = new Procedure(); proc.CodeNum = ProcedureCodes.GetCodeNum(procCodeStr); proc.PatNum = pat.PatNum; proc.ProcDate = DateTime.Today; proc.ProcStatus = procStatus; proc.ProvNum = pat.PriProv; proc.ProcFee = procFee; proc.ToothNum = toothNum; proc.Prosthesis = "I"; Procedures.Insert(proc); return(proc); }
public void Fees_GetFee_ClinicSpecificFees() { Patient pat = PatientT.CreatePatient("58"); long feeSchedNum = FeeSchedT.CreateFeeSched(FeeScheduleType.Normal, "Standard UCR", false); long codeNum = ProcedureCodes.GetCodeNum("D2750"); long clinicNum2 = ClinicT.CreateClinic("2-58").ClinicNum; long clinicNum3 = ClinicT.CreateClinic("3-58").ClinicNum; long clinicNum1 = ClinicT.CreateClinic("1-58").ClinicNum; FeeT.CreateFee(feeSchedNum, codeNum, 65, clinicNum1, 0); FeeT.CreateFee(feeSchedNum, codeNum, 70, clinicNum2, 0); FeeT.CreateFee(feeSchedNum, codeNum, 75, clinicNum3, 0); double fee1 = Fees.GetFee(codeNum, feeSchedNum, clinicNum1, 0).Amount; double fee2 = Fees.GetFee(codeNum, feeSchedNum, clinicNum2, 0).Amount; double fee3 = Fees.GetFee(codeNum, feeSchedNum, clinicNum3, 0).Amount; Assert.AreEqual(fee1, 65); Assert.AreEqual(fee2, 70); Assert.AreEqual(fee3, 75); }
public void Fees_GetByFeeSchedNumsClinicNums_MiddleTier() { List <long> listFeeSchedNums = new List <long>(); long codeNum1 = ProcedureCodes.GetCodeNum("D1110"); long codeNum2 = ProcedureCodes.GetCodeNum("D1206"); for (int i = 0; i < 300; i++) { FeeSched feeSched = FeeSchedT.GetNewFeeSched(FeeScheduleType.Normal, "FS" + i); FeeT.GetNewFee(feeSched.FeeSchedNum, codeNum1, 11); FeeT.GetNewFee(feeSched.FeeSchedNum, codeNum2, 13); listFeeSchedNums.Add(feeSched.FeeSchedNum); } DataAction.RunMiddleTierMock(() => { List <FeeLim> listFees = Fees.GetByFeeSchedNumsClinicNums(listFeeSchedNums, new List <long> { 0 }); Assert.AreEqual(600, listFees.Count); }); }
public void Fees_GetFee_ProviderSpecificFees() { Patient pat = PatientT.CreatePatient("57"); long feeSchedNum = FeeSchedT.CreateFeeSched(FeeScheduleType.Normal, "PPOInsPlan1", false); long codeNum = ProcedureCodes.GetCodeNum("D2750"); long provNum1 = ProviderT.CreateProvider("1-57"); long provNum2 = ProviderT.CreateProvider("2-57"); long provNum3 = ProviderT.CreateProvider("3-57"); FeeT.CreateFee(feeSchedNum, codeNum, 50, 0, provNum1); FeeT.CreateFee(feeSchedNum, codeNum, 55, 0, provNum2); FeeT.CreateFee(feeSchedNum, codeNum, 60, 0, provNum3); double fee1 = Fees.GetFee(codeNum, feeSchedNum, 0, provNum1).Amount; double fee2 = Fees.GetFee(codeNum, feeSchedNum, 0, provNum2).Amount; double fee3 = Fees.GetFee(codeNum, feeSchedNum, 0, provNum3).Amount; Assert.AreEqual(50, fee1); Assert.AreEqual(55, fee2); Assert.AreEqual(60, fee3); }
public void Fees_GetFee_ClinicAndProviderSpecificFees() { Patient pat = PatientT.CreatePatient("59"); long feeSchedNum = FeeSchedT.CreateFeeSched(FeeScheduleType.Normal, "Standard", false); long codeNum = ProcedureCodes.GetCodeNum("D2750"); long provNum1 = ProviderT.CreateProvider("1-59"); long provNum2 = ProviderT.CreateProvider("2-59"); long clinicNum1 = ClinicT.CreateClinic("1-59").ClinicNum; long clinicNum2 = ClinicT.CreateClinic("2-59").ClinicNum; FeeT.CreateFee(feeSchedNum, codeNum, 80, clinicNum1, provNum1); FeeT.CreateFee(feeSchedNum, codeNum, 85, clinicNum1, provNum2); FeeT.CreateFee(feeSchedNum, codeNum, 90, clinicNum2, provNum2); double fee1 = Fees.GetFee(codeNum, feeSchedNum, clinicNum1, provNum1).Amount; double fee2 = Fees.GetFee(codeNum, feeSchedNum, clinicNum1, provNum2).Amount; double fee3 = Fees.GetFee(codeNum, feeSchedNum, clinicNum2, provNum2).Amount; Assert.AreEqual(fee1, 80); Assert.AreEqual(fee2, 85); Assert.AreEqual(fee3, 90); }
public void RepeatCharges_RunRepeatingCharges_ProcDateBeforeRepeatChargeStartDate() { Patient pat = CreatePatForRepeatCharge("RepeatCharge", 15); //add a repeat charge with start date 11/15/2017 RepeatCharge rc = new RepeatCharge(); rc.ChargeAmt = 99; rc.PatNum = pat.PatNum; rc.ProcCode = "D2750"; rc.IsEnabled = true; rc.DateStart = new DateTime(2017, 11, pat.BillingCycleDay); rc.RepeatChargeNum = RepeatCharges.Insert(rc); //add a new procedure with procdate 10/15/2017 Procedure p = new Procedure(); p.PatNum = pat.PatNum; p.ProcStatus = ProcStat.C; p.ProcDate = new DateTime(2017, 10, pat.BillingCycleDay); p.ProcFee = 99; p.CodeNum = ProcedureCodes.GetCodeNum("D2750"); p.RepeatChargeNum = rc.RepeatChargeNum; Procedures.Insert(p); //add a new procedure with procdate 11/15/2017 p = new Procedure(); p.PatNum = pat.PatNum; p.ProcStatus = ProcStat.C; p.ProcDate = new DateTime(2017, 11, pat.BillingCycleDay); p.ProcFee = 99; p.CodeNum = ProcedureCodes.GetCodeNum("D2750"); p.RepeatChargeNum = rc.RepeatChargeNum; Procedures.Insert(p); DateTime dateRun = new DateTime(2017, 12, pat.BillingCycleDay); RepeatCharges.RunRepeatingCharges(dateRun); List <Procedure> listProcs = Procedures.Refresh(pat.PatNum); Assert.AreEqual(3, listProcs.Count); }
public void Claims_CalculateAndUpdate_Allowed1Allowed2CompletedProcedures() { string suffix = "8"; Patient pat = PatientT.CreatePatient(suffix); long patNum = pat.PatNum; long feeSchedNum1 = FeeSchedT.CreateFeeSched(FeeScheduleType.Normal, suffix); long feeSchedNum2 = FeeSchedT.CreateFeeSched(FeeScheduleType.Normal, suffix + "b"); //Standard Fee long codeNum = ProcedureCodes.GetCodeNum("D2750"); Fee fee = Fees.GetFee(codeNum, 53, 0, 0); if (fee == null) { fee = new Fee(); fee.CodeNum = codeNum; fee.FeeSched = 53; fee.Amount = 1200; Fees.Insert(fee); } else { fee.Amount = 1200; Fees.Update(fee); } //PPO fees fee = new Fee(); fee.CodeNum = codeNum; fee.FeeSched = feeSchedNum1; fee.Amount = 600; Fees.Insert(fee); fee = new Fee(); fee.CodeNum = codeNum; fee.FeeSched = feeSchedNum2; fee.Amount = 800; Fees.Insert(fee); //Carrier Carrier carrier = CarrierT.CreateCarrier(suffix); long planNum1 = InsPlanT.CreateInsPlanPPO(carrier.CarrierNum, feeSchedNum1).PlanNum; long planNum2 = InsPlanT.CreateInsPlanPPO(carrier.CarrierNum, feeSchedNum2).PlanNum; InsSub sub1 = InsSubT.CreateInsSub(pat.PatNum, planNum1); long subNum1 = sub1.InsSubNum; InsSub sub2 = InsSubT.CreateInsSub(pat.PatNum, planNum2); long subNum2 = sub2.InsSubNum; BenefitT.CreateCategoryPercent(planNum1, EbenefitCategory.Crowns, 50); BenefitT.CreateCategoryPercent(planNum2, EbenefitCategory.Crowns, 50); BenefitT.CreateAnnualMax(planNum1, 1000); BenefitT.CreateAnnualMax(planNum2, 1000); PatPlanT.CreatePatPlan(1, patNum, subNum1); PatPlanT.CreatePatPlan(2, patNum, subNum2); Procedure proc = ProcedureT.CreateProcedure(pat, "D2750", ProcStat.TP, "8", Fees.GetAmount0(codeNum, 53)); //crown on 8 long procNum = proc.ProcNum; //Lists List <ClaimProc> claimProcs = ClaimProcs.Refresh(patNum); Family fam = Patients.GetFamily(patNum); List <InsSub> subList = InsSubs.RefreshForFam(fam); List <InsPlan> planList = InsPlans.RefreshForSubList(subList); List <PatPlan> patPlans = PatPlans.Refresh(patNum); List <Benefit> benefitList = Benefits.Refresh(patPlans, subList); List <Procedure> procList = Procedures.Refresh(patNum); //Set complete and attach to claim ProcedureT.SetComplete(proc, pat, planList, patPlans, claimProcs, benefitList, subList); claimProcs = ClaimProcs.Refresh(patNum); List <Procedure> procsForClaim = new List <Procedure>(); procsForClaim.Add(proc); Claim claim = ClaimT.CreateClaim("P", patPlans, planList, claimProcs, procList, pat, procsForClaim, benefitList, subList); //Validate Assert.AreEqual(500, claim.WriteOff); }