public void FeeSchedTools_GlobalUpdateWriteoffEstimates_SubscriberInDifferentFamily() { string suffix = MethodBase.GetCurrentMethod().Name; string procStr = "D0145"; double procFee = 100; ProcedureCode procCode = ProcedureCodes.GetProcCode(procStr); //Set up clinic, prov, pat Clinic clinic = ClinicT.CreateClinic(suffix); long feeSchedNum = FeeSchedT.CreateFeeSched(FeeScheduleType.Normal, suffix); long provNum = ProviderT.CreateProvider(suffix, feeSchedNum: feeSchedNum); Fee fee = FeeT.GetNewFee(feeSchedNum, procCode.CodeNum, procFee, clinic.ClinicNum, provNum); Patient pat = PatientT.CreatePatient(suffix, provNum, clinic.ClinicNum); Patient patSubscriber = PatientT.CreatePatient(suffix + "_Subscriber", provNum, clinic.ClinicNum); //Set up insurance InsuranceInfo info = InsuranceT.AddInsurance(pat, suffix, "p", feeSchedNum); info.PriInsSub.Subscriber = patSubscriber.PatNum; InsSubs.Update(info.PriInsSub); info.ListBenefits.Add(BenefitT.CreatePercentForProc(info.PriInsPlan.PlanNum, procCode.CodeNum, 100)); //Create the procedure and claimproc Procedure proc = ProcedureT.CreateProcedure(pat, procStr, ProcStat.TP, "", procFee); ClaimProc priClaimProc = ClaimProcT.CreateClaimProc(pat.PatNum, proc.ProcNum, info.PriInsPlan.PlanNum, info.PriInsSub.InsSubNum, DateTime.Today, -1, -1, -1, ClaimProcStatus.CapEstimate); Procedures.ComputeEstimates(proc, pat.PatNum, new List <ClaimProc>(), true, info.ListInsPlans, info.ListPatPlans, info.ListBenefits, pat.Age, info.ListInsSubs); priClaimProc = ClaimProcs.Refresh(pat.PatNum).FirstOrDefault(x => x.ProcNum == proc.ProcNum); Assert.AreEqual(procFee, priClaimProc.InsPayEst); GlobalUpdateWriteoffs(clinic.ClinicNum); priClaimProc = ClaimProcs.Refresh(pat.PatNum).FirstOrDefault(x => x.ClaimProcNum == priClaimProc.ClaimProcNum); Assert.AreEqual(procFee, priClaimProc.InsPayEst); }
public void PaymentEdit_Init_AutoSplitWithClaimPayments() //Legacy_TestFortyEight { string suffix = "48"; Patient pat = PatientT.CreatePatient(suffix); long patNum = pat.PatNum; InsPlan insPlan = InsPlanT.CreateInsPlan(CarrierT.CreateCarrier(suffix).CarrierNum); InsSub insSub = InsSubT.CreateInsSub(patNum, insPlan.PlanNum); PatPlan patPlan = PatPlanT.CreatePatPlan(1, patNum, insSub.InsSubNum); Procedure procedure1 = ProcedureT.CreateProcedure(pat, "D1110", ProcStat.C, "", 50, DateTime.Now.AddDays(-1)); Procedure procedure2 = ProcedureT.CreateProcedure(pat, "D0120", ProcStat.C, "", 40, DateTime.Now.AddDays(-2)); Procedure procedure3 = ProcedureT.CreateProcedure(pat, "D0220", ProcStat.C, "", 60, DateTime.Now.AddDays(-3)); ClaimProcT.AddInsPaid(patNum, insPlan.PlanNum, procedure1.ProcNum, 20, insSub.InsSubNum, 0, 0); ClaimProcT.AddInsPaid(patNum, insPlan.PlanNum, procedure2.ProcNum, 5, insSub.InsSubNum, 5, 0); ClaimProcT.AddInsPaid(patNum, insPlan.PlanNum, procedure3.ProcNum, 20, insSub.InsSubNum, 0, 10); Payment payment = PaymentT.MakePaymentNoSplits(patNum, 150, DateTime.Today); Family famForPat = Patients.GetFamily(patNum); List <Patient> listFamForPat = famForPat.ListPats.ToList(); PaymentEdit.InitData init = PaymentEdit.Init(listFamForPat, famForPat, new Family { }, payment, new List <PaySplit>(), new List <Procedure>(), patNum); //Auto Splits will be in opposite order from least recent to most recent. //ListSplitsCur should contain four splits, 30, 35, and 30, then one unallocated for the remainder of the payment 55. Assert.AreEqual(4, init.AutoSplitData.ListSplitsCur.Count); Assert.IsFalse(init.AutoSplitData.ListSplitsCur[0].SplitAmt != 40 || init.AutoSplitData.ListSplitsCur[0].ProcNum != procedure3.ProcNum || init.AutoSplitData.ListSplitsCur[0].PatNum != patNum); Assert.IsFalse(init.AutoSplitData.ListSplitsCur[1].SplitAmt != 35 || init.AutoSplitData.ListSplitsCur[1].ProcNum != procedure2.ProcNum || init.AutoSplitData.ListSplitsCur[1].PatNum != patNum); Assert.IsFalse(init.AutoSplitData.ListSplitsCur[2].SplitAmt != 30 || init.AutoSplitData.ListSplitsCur[2].ProcNum != procedure1.ProcNum || init.AutoSplitData.ListSplitsCur[2].PatNum != patNum); Assert.IsFalse(init.AutoSplitData.ListSplitsCur[3].SplitAmt != 45 || init.AutoSplitData.ListSplitsCur[3].ProcNum != 0); }
public void InsPlan_GetInsUsedDisplay_OrthoProcsNotAffectInsUsed() { string suffix = "13"; Patient pat = PatientT.CreatePatient(suffix); Carrier carrier = CarrierT.CreateCarrier(suffix); InsPlan plan = InsPlanT.CreateInsPlan(carrier.CarrierNum); InsSub sub = InsSubT.CreateInsSub(pat.PatNum, plan.PlanNum); long subNum = sub.InsSubNum; PatPlan patPlan = PatPlanT.CreatePatPlan(1, pat.PatNum, subNum); BenefitT.CreateAnnualMax(plan.PlanNum, 100); BenefitT.CreateOrthoMax(plan.PlanNum, 500); BenefitT.CreateCategoryPercent(plan.PlanNum, EbenefitCategory.Diagnostic, 100); BenefitT.CreateCategoryPercent(plan.PlanNum, EbenefitCategory.Orthodontics, 100); Procedure proc1 = ProcedureT.CreateProcedure(pat, "D0140", ProcStat.C, "", 59); //limEx Procedure proc2 = ProcedureT.CreateProcedure(pat, "D8090", ProcStat.C, "", 348); //Comprehensive ortho ClaimProcT.AddInsPaid(pat.PatNum, plan.PlanNum, proc1.ProcNum, 59, subNum, 0, 0); ClaimProcT.AddInsPaid(pat.PatNum, plan.PlanNum, proc2.ProcNum, 348, subNum, 0, 0); //Lists Family fam = Patients.GetFamily(pat.PatNum); List <InsSub> subList = InsSubs.RefreshForFam(fam); List <InsPlan> planList = InsPlans.RefreshForSubList(subList); List <PatPlan> patPlans = PatPlans.Refresh(pat.PatNum); List <Benefit> benefitList = Benefits.Refresh(patPlans, subList); List <ClaimProcHist> histList = ClaimProcs.GetHistList(pat.PatNum, benefitList, patPlans, planList, DateTime.Today, subList); //Validate double insUsed = InsPlans.GetInsUsedDisplay(histList, DateTime.Today, plan.PlanNum, patPlan.PatPlanNum, -1, planList, benefitList, pat.PatNum, subNum); Assert.AreEqual(59, insUsed); }
public void InsPlan_GetInsUsedDisplay_LimitationsOverride() { string suffix = "6"; Patient pat = PatientT.CreatePatient(suffix); long patNum = pat.PatNum; Carrier carrier = CarrierT.CreateCarrier(suffix); InsPlan plan = InsPlanT.CreateInsPlan(carrier.CarrierNum); long planNum = plan.PlanNum; InsSub sub = InsSubT.CreateInsSub(pat.PatNum, planNum); //guarantor is subscriber long subNum = sub.InsSubNum; long patPlanNum = PatPlanT.CreatePatPlan(1, pat.PatNum, subNum).PatPlanNum; BenefitT.CreateAnnualMax(planNum, 1000); BenefitT.CreateLimitation(planNum, EbenefitCategory.Diagnostic, 1000); Procedure proc = ProcedureT.CreateProcedure(pat, "D0120", ProcStat.C, "", 50); //An exam long procNum = proc.ProcNum; Procedure proc2 = ProcedureT.CreateProcedure(pat, "D2750", ProcStat.C, "8", 830); //create a crown ClaimProcT.AddInsPaid(patNum, planNum, procNum, 50, subNum, 0, 0); ClaimProcT.AddInsPaid(patNum, planNum, proc2.ProcNum, 400, subNum, 0, 0); //Lists 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 <ClaimProcHist> histList = ClaimProcs.GetHistList(patNum, benefitList, patPlans, planList, DateTime.Today, subList); //Validate double insUsed = InsPlans.GetInsUsedDisplay(histList, DateTime.Today, planNum, patPlanNum, -1, planList, benefitList, patNum, subNum); Assert.AreEqual(400, insUsed); }
public void TearDownTest() { BenefitT.ClearBenefitTable(); CarrierT.ClearCarrierTable(); ClaimT.ClearClaimTable(); ClaimProcT.ClearClaimProcTable(); EtransT.ClearEtransTable(); InsPlanT.ClearInsPlanTable(); InsSubT.ClearInsSubTable(); PatientT.ClearPatientTable(); PatPlanT.ClearPatPlanTable(); ProcedureT.ClearProcedureTable(); SubstitutionLinkT.ClearSubstitutionLinkTable(); }
public void InsPlan_GetDedRemainDisplay_IndividualAndFamilyDeductiblesInsRemaining() { string suffix = "20"; Patient pat = PatientT.CreatePatient(suffix); //guarantor long patNum = pat.PatNum; Patient pat2 = PatientT.CreatePatient(suffix); PatientT.SetGuarantor(pat2, pat.PatNum); Patient pat3 = PatientT.CreatePatient(suffix); PatientT.SetGuarantor(pat3, pat.PatNum); Carrier carrier = CarrierT.CreateCarrier(suffix); InsPlan plan = InsPlanT.CreateInsPlan(carrier.CarrierNum); long planNum = plan.PlanNum; InsSub sub = InsSubT.CreateInsSub(pat.PatNum, planNum); //guarantor is subscriber long subNum = sub.InsSubNum; PatPlan patPlan = PatPlanT.CreatePatPlan(1, pat.PatNum, subNum); //all three patients have the same plan PatPlan patPlan2 = PatPlanT.CreatePatPlan(1, pat2.PatNum, subNum); //all three patients have the same plan PatPlan patPlan3 = PatPlanT.CreatePatPlan(1, pat3.PatNum, subNum); //all three patients have the same plan BenefitT.CreateDeductibleGeneral(planNum, BenefitCoverageLevel.Individual, 75); BenefitT.CreateDeductibleGeneral(planNum, BenefitCoverageLevel.Family, 150); ClaimProcT.AddInsUsedAdjustment(pat3.PatNum, planNum, 0, subNum, 75); //Adjustment goes on the third patient Procedure proc = ProcedureT.CreateProcedure(pat2, "D2750", ProcStat.C, "20", 1280); //proc for second patient with a deductible already applied. ClaimProcT.AddInsPaid(pat2.PatNum, planNum, proc.ProcNum, 304, subNum, 50, 597); proc = ProcedureT.CreateProcedure(pat, "D4355", ProcStat.TP, "", 135); //proc is for the first patient 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 <ClaimProcHist> histList = ClaimProcs.GetHistList(patNum, benefitList, patPlans, planList, DateTime.Today, subList); List <ClaimProcHist> loopList = new List <ClaimProcHist>(); //Validate List <ClaimProcHist> HistList = ClaimProcs.GetHistList(pat.PatNum, benefitList, patPlans, planList, DateTime.Today, subList); double dedFam = Benefits.GetDeductGeneralDisplay(benefitList, planNum, patPlan.PatPlanNum, BenefitCoverageLevel.Family); double ded = Benefits.GetDeductGeneralDisplay(benefitList, planNum, patPlan.PatPlanNum, BenefitCoverageLevel.Individual); double dedRem = InsPlans.GetDedRemainDisplay(HistList, DateTime.Today, planNum, patPlan.PatPlanNum, -1, planList, pat.PatNum, ded, dedFam); //test family and individual deductible together Assert.AreEqual(25, dedRem); dedRem = InsPlans.GetDedRemainDisplay(HistList, DateTime.Today, planNum, patPlan.PatPlanNum, -1, planList, pat.PatNum, ded, -1); //test individual deductible by itself Assert.AreEqual(75, dedRem); }
public void FeeSchedTools_GlobalUpdateWriteoffEstimates() { string suffix = MethodBase.GetCurrentMethod().Name; string procStr = "D0145"; double procFee = 100; ProcedureCode procCode = ProcedureCodes.GetProcCode(procStr); //Set up clinic, prov, pat Clinic clinic = ClinicT.CreateClinic(suffix); long feeSchedNum = FeeSchedT.CreateFeeSched(FeeScheduleType.FixedBenefit, suffix); long provNum = ProviderT.CreateProvider(suffix, feeSchedNum: feeSchedNum); Fee fee = FeeT.GetNewFee(feeSchedNum, procCode.CodeNum, procFee, clinic.ClinicNum, provNum); Patient pat = PatientT.CreatePatient(suffix, provNum, clinic.ClinicNum); //Set up insurance InsuranceInfo info = InsuranceT.AddInsurance(pat, suffix, "c", feeSchedNum); List <InsSub> listSubs = info.ListInsSubs; List <InsPlan> listPlans = info.ListInsPlans; List <PatPlan> listPatPlans = info.ListPatPlans; InsPlan priPlan = info.PriInsPlan; InsSub priSub = info.PriInsSub; info.ListBenefits.Add(BenefitT.CreatePercentForProc(priPlan.PlanNum, procCode.CodeNum, 90)); //Create the procedure and claimproc Procedure proc = ProcedureT.CreateProcedure(pat, procStr, ProcStat.TP, "", procFee); ClaimProc priClaimProc = ClaimProcT.CreateClaimProc(pat.PatNum, proc.ProcNum, priPlan.PlanNum, priSub.InsSubNum, DateTime.Today, -1, -1, -1, ClaimProcStatus.CapEstimate); Procedures.ComputeEstimates(proc, pat.PatNum, new List <ClaimProc>(), true, listPlans, listPatPlans, info.ListBenefits, pat.Age, info.ListInsSubs); priClaimProc = ClaimProcs.Refresh(pat.PatNum).FirstOrDefault(x => x.ProcNum == proc.ProcNum); Assert.AreEqual(procFee, priClaimProc.WriteOff); procFee = 50; Procedure procNew = proc.Copy(); procNew.ProcFee = procFee; Procedures.Update(procNew, proc); //GlobalUpdate long updated = GlobalUpdateWriteoffs(clinic.ClinicNum); Assert.AreEqual(1, updated); ClaimProc priClaimProcDb = ClaimProcs.Refresh(pat.PatNum).FirstOrDefault(x => x.ClaimProcNum == priClaimProc.ClaimProcNum); Assert.AreEqual(procFee, priClaimProcDb.WriteOff); }
public void ClaimProcs_ComputeEstimatesByOrthoCase_SetClaimProcForEachProcType() { Prefs.UpdateString(PrefName.OrthoBandingCodes, "D8080"); Prefs.UpdateString(PrefName.OrthoDebondCodes, "D8070"); Prefs.UpdateString(PrefName.OrthoVisitCodes, "D8060"); Patient pat = PatientT.CreatePatient(MethodBase.GetCurrentMethod().Name); Procedure bandingProc = ProcedureT.CreateProcedure(pat, "D8080", ProcStat.C, "", 0); PatPlan patPlan = PatPlanT.CreatePatPlan(1, pat.PatNum, 0); ClaimProc bandingClaimProc = ClaimProcT.CreateClaimProc(pat.PatNum, bandingProc.ProcNum, 0, 0, bandingProc.ProcDate, 1, 1, 1); Procedure visitProc = ProcedureT.CreateProcedure(pat, "D8060", ProcStat.C, "", 0); ClaimProc visitClaimProc = ClaimProcT.CreateClaimProc(pat.PatNum, visitProc.ProcNum, 0, 0, visitProc.ProcDate, 1, 1, 1); Procedure debondProc = ProcedureT.CreateProcedure(pat, "D8070", ProcStat.C, "", 0); ClaimProc debondClaimProc = ClaimProcT.CreateClaimProc(pat.PatNum, debondProc.ProcNum, 0, 0, debondProc.ProcDate, 1, 1, 1); long orthoCaseNum = OrthoCaseT.InsertForFormOrthoCase(pat.PatNum, 2000, 1200, 0, 800, DateTime.Today, false, DateTime.Today.AddMonths(12), 1000, 400, 60, bandingProc); OrthoCase orthoCase = OrthoCases.GetOne(orthoCaseNum); OrthoPlanLink schedulePlanLink = OrthoPlanLinks.GetOneForOrthoCaseByType(orthoCaseNum, OrthoPlanLinkType.OrthoSchedule); OrthoSchedule orthoSchedule = OrthoSchedules.GetOne(schedulePlanLink.FKey); OrthoProcLinks.LinkProcForActiveOrthoCase(bandingProc); OrthoProcLinks.LinkProcForActiveOrthoCase(visitProc); OrthoProcLinks.LinkProcForActiveOrthoCase(debondProc); List <OrthoProcLink> allProcLinks = OrthoProcLinks.GetManyByOrthoCase(orthoCaseNum); OrthoProcLink bandingLink = allProcLinks.FirstOrDefault(x => x.ProcLinkType == OrthoProcType.Banding); OrthoProcLink debondLink = allProcLinks.FirstOrDefault(x => x.ProcLinkType == OrthoProcType.Debond); OrthoProcLink visitLink = allProcLinks.FirstOrDefault(x => x.ProcLinkType == OrthoProcType.Visit); List <ClaimProc> listAllClaimProcs = new List <ClaimProc>() { bandingClaimProc, visitClaimProc, debondClaimProc }; List <OrthoProcLink> listAllOrthoProcLinks = new List <OrthoProcLink>() { bandingLink, visitLink, debondLink }; List <PatPlan> listPatPlans = new List <PatPlan>() { patPlan }; ClaimProcs.ComputeEstimatesByOrthoCase(bandingProc, bandingLink, orthoCase, orthoSchedule, true, listAllClaimProcs, new List <ClaimProc>() { bandingClaimProc }, listPatPlans, listAllOrthoProcLinks); ClaimProcs.ComputeEstimatesByOrthoCase(debondProc, debondLink, orthoCase, orthoSchedule, true, listAllClaimProcs, new List <ClaimProc>() { debondClaimProc }, listPatPlans, listAllOrthoProcLinks); ClaimProcs.ComputeEstimatesByOrthoCase(visitProc, visitLink, orthoCase, orthoSchedule, true, listAllClaimProcs, new List <ClaimProc>() { visitClaimProc }, listPatPlans, listAllOrthoProcLinks); Assert.AreEqual(bandingClaimProc.AllowedOverride, 0); Assert.AreEqual(bandingClaimProc.CopayOverride, 0); Assert.AreEqual(bandingClaimProc.PercentOverride, 0); Assert.AreEqual(bandingClaimProc.PaidOtherInsOverride, 0); Assert.AreEqual(bandingClaimProc.WriteOffEstOverride, 0); Assert.AreEqual(bandingClaimProc.InsEstTotalOverride, 600); Assert.AreEqual(debondClaimProc.AllowedOverride, 0); Assert.AreEqual(debondClaimProc.CopayOverride, 0); Assert.AreEqual(debondClaimProc.PercentOverride, 0); Assert.AreEqual(debondClaimProc.PaidOtherInsOverride, 0); Assert.AreEqual(debondClaimProc.WriteOffEstOverride, 0); Assert.AreEqual(debondClaimProc.InsEstTotalOverride, 240); Assert.AreEqual(visitClaimProc.AllowedOverride, 0); Assert.AreEqual(visitClaimProc.CopayOverride, 0); Assert.AreEqual(visitClaimProc.PercentOverride, 0); Assert.AreEqual(visitClaimProc.PaidOtherInsOverride, 0); Assert.AreEqual(visitClaimProc.WriteOffEstOverride, 0); Assert.AreEqual(visitClaimProc.InsEstTotalOverride, 36); }