Example #1
0
        private void CheckAgingProcLifo(long patNum, double bal_0_30, double bal_31_60, double bal_61_90, double balOver90, double payPlanDue, YN prefVal)
        {
            int agingProcLifoPrev = PrefC.GetInt(PrefName.AgingProcLifo);

            try {
                PrefT.UpdateInt(PrefName.AgingProcLifo, (int)prefVal);
                Ledgers.ComputeAging(patNum, DateTime.Today);
                PatAssertBalances(patNum, bal_0_30, bal_31_60, bal_61_90, balOver90, payPlanDue);
            }
            finally {
                PrefT.UpdateInt(PrefName.AgingProcLifo, agingProcLifoPrev);
            }
        }
Example #2
0
 /// <summary>Creates patient objects corresponding to the totalPat parameter. Each patient has a procedure
 /// and statement created on the specified date. Aging is run for each patient.</summary>
 public static void CreatePatWithProcAndStatement(int totalPat, DateTime dateTimeSentStmt = default(DateTime), bool hasPortalAccessInfo = false,
                                                  PatientStatus patStatus = PatientStatus.Patient, StatementMode stmtMode = StatementMode.Mail, bool hasSignedTil = false, double procFee = 0)
 {
     for (int i = 0; i < totalPat; i++)
     {
         Patient  patient  = CreatePatient("", 0, 0, "", "", ContactMethod.Email, "", "", "", default(DateTime), 0, 0, hasPortalAccessInfo, patStatus, hasSignedTil);
         DateTime dateProc = DateTime.Today.AddDays(-1);
         //Create a completed procedure that was completed the day before the first payplan charge date AND before the payment plan creation date.
         ProcedureT.CreateProcedure(patient, "D1100", ProcStat.C, "", procFee, dateProc);
         //Run Ledgers to update the patient balance from the procedure fee
         Ledgers.ComputeAging(patient.PatNum, dateTimeSentStmt);
         //Insert a statement that was sent during the "bill in advance days" for the payment plan charge AND before the payment plan creation date.
         StatementT.CreateStatement(patient.PatNum, mode_: stmtMode, isSent: true, dateSent: dateTimeSentStmt);
     }
 }
Example #3
0
        public void LedgersTests_ComputeAgingForPaysplitsAllocatedToDiffPats()
        {
            string  suffix   = MethodBase.GetCurrentMethod().Name;
            Patient patDad   = PatientT.CreatePatient(fName: "Father", suffix: suffix);     //Father-guarantor
            Patient patChild = PatientT.CreatePatient(fName: "Child", suffix: suffix);      //Child

            PatientT.SetGuarantor(patChild, patDad.PatNum);
            Procedure proc1 = ProcedureT.CreateProcedure(patChild, "D1110", ProcStat.C, "", 50, DateTime.Today.AddDays(-45));
            Procedure proc2 = ProcedureT.CreateProcedure(patChild, "D0120", ProcStat.C, "", 40, DateTime.Today.AddDays(-45));

            Ledgers.ComputeAging(patDad.PatNum, DateTime.Today);
            patDad = Patients.GetPat(patDad.PatNum);
            Assert.AreEqual(90, patDad.Bal_31_60);
            Patient patMom = PatientT.CreatePatient(fName: "Mom", suffix: suffix);       //Mom is not associated to the father and childs account
            long    patNum = patMom.PatNum;
            //complete procedures for patMom.
            Procedure proc3 = ProcedureT.CreateProcedure(patMom, "D1110", ProcStat.C, "", 50, DateTime.Today.AddDays(-1));
            Procedure proc4 = ProcedureT.CreateProcedure(patMom, "D0120", ProcStat.C, "", 40, DateTime.Today.AddDays(-1));

            //Compute aging. Check that the aging is correct before we continue
            Ledgers.ComputeAging(patNum, DateTime.Today);
            patMom = Patients.GetPat(patNum);
            Assert.AreEqual(90, patMom.Bal_0_30);
            //patMom will now make a payment for her procedures and patChilds
            Payment         pay           = PaymentT.MakePaymentNoSplits(patNum, 100, clinicNum: proc3.ClinicNum);
            List <PaySplit> listPaySplits = new List <PaySplit>();

            listPaySplits.Add(PaySplitT.CreateSplit(proc3.ClinicNum, patNum, pay.PayNum, 0, DateTime.Today, proc3.ProcNum, proc3.ProvNum, 50, 0));
            //Create a paysplit for patChild. PatChild is from a different family.
            listPaySplits.Add(PaySplitT.CreateSplit(proc1.ClinicNum, patChild.PatNum, pay.PayNum, 0, DateTime.Today, proc1.ProcNum, proc1.ProvNum, 50, 0));
            //This should compute the aging for the
            string strErrorMsg = Ledgers.ComputeAgingForPaysplitsAllocatedToDiffPats(patNum, listPaySplits);

            Assert.IsTrue(string.IsNullOrEmpty(strErrorMsg));
            patDad = Patients.GetPat(patDad.PatNum);
            Assert.AreEqual(40, patDad.Bal_31_60);
            //Compute patMom aging to verify that it is correct.
            Ledgers.ComputeAging(patNum, DateTime.Today);
            patMom = Patients.GetPat(patNum);
            Assert.AreEqual(40, patMom.Bal_0_30);
        }
Example #4
0
        public void LedgersTests_ComputeAgingProcLifo_LargeDb()
        {
            Def            defNeg   = DefT.CreateDefinition(DefCat.AdjTypes, "Ortho Revenue", "-");
            Def            defPos   = DefT.CreateDefinition(DefCat.AdjTypes, "Ortho Revenue", "+");
            Def            defPay   = DefT.CreateDefinition(DefCat.PaymentTypes, "Check");
            List <Patient> listPats = new List <Patient>();

            for (int i = 0; i < 1000; i++)
            {
                Patient       pat     = PatientT.CreatePatient(fName: "Schedule Based", lName: "UDP Ortho LargeDb");
                Procedure     proc    = ProcedureT.CreateProcedure(pat, "D8090", ProcStat.C, "", 4000, DateTime.Today.AddMonths(-6).AddDays(-1));
                PayPlan       payPlan = PayPlanT.CreatePayPlan(pat.PatNum, 4000, 166.67, DateTime.Today.AddMonths(-6).AddDays(-1), proc.ProvNum);
                Adjustment    adj6    = AdjustmentT.MakeAdjustment(pat.PatNum, -2800, DateTime.Today.AddMonths(-6).AddDays(-1), proc.ProcDate, proc.ProcNum, provNum: proc.ProvNum, adjType: defNeg.DefNum);
                Payment       pay6    = PaymentT.MakePayment(pat.PatNum, 166.67, DateTime.Today.AddMonths(-6).AddDays(-1), payPlanNum: payPlan.PayPlanNum, provNum: proc.ProvNum, procNum: proc.ProcNum, payType: defPay.DefNum);
                PayPlanCharge ppc6    = PayPlanChargeT.CreateOne(payPlan.PayPlanNum, pat.Guarantor, pat.PatNum, DateTime.Today.AddMonths(-6).AddDays(-1), 1200, 0, "D8090:  CompOrthoAdlt", proc.ProvNum, 0, PayPlanChargeType.Credit, proc.ProcNum);
                Adjustment    adj5    = AdjustmentT.MakeAdjustment(pat.PatNum, 121.74, DateTime.Today.AddMonths(-5).AddDays(-1), proc.ProcDate, proc.ProcNum, provNum: proc.ProvNum, adjType: defPos.DefNum);
                Payment       pay5    = PaymentT.MakePayment(pat.PatNum, 166.67, DateTime.Today.AddMonths(-5).AddDays(-1), payPlanNum: payPlan.PayPlanNum, provNum: proc.ProvNum, procNum: proc.ProcNum, payType: defPay.DefNum);
                PayPlanCharge ppc5    = PayPlanChargeT.CreateOne(payPlan.PayPlanNum, pat.Guarantor, pat.PatNum, DateTime.Today.AddMonths(-5).AddDays(-1), 121.74, 0, "D8090:  CompOrthoAdlt", proc.ProvNum, 0, PayPlanChargeType.Credit, proc.ProcNum);
                Adjustment    adj4    = AdjustmentT.MakeAdjustment(pat.PatNum, 121.74, DateTime.Today.AddMonths(-4).AddDays(-1), proc.ProcDate, proc.ProcNum, provNum: proc.ProvNum, adjType: defPos.DefNum);
                PayPlanCharge ppc4    = PayPlanChargeT.CreateOne(payPlan.PayPlanNum, pat.Guarantor, pat.PatNum, DateTime.Today.AddMonths(-4).AddDays(-1), 121.74, 0, "D8090:  CompOrthoAdlt", proc.ProvNum, 0, PayPlanChargeType.Credit, proc.ProcNum);
                Adjustment    adj3    = AdjustmentT.MakeAdjustment(pat.PatNum, 121.74, DateTime.Today.AddMonths(-3).AddDays(-1), proc.ProcDate, proc.ProcNum, provNum: proc.ProvNum, adjType: defPos.DefNum);
                PayPlanCharge ppc3    = PayPlanChargeT.CreateOne(payPlan.PayPlanNum, pat.Guarantor, pat.PatNum, DateTime.Today.AddMonths(-3).AddDays(-1), 121.74, 0, "D8090:  CompOrthoAdlt", proc.ProvNum, 0, PayPlanChargeType.Credit, proc.ProcNum);
                Adjustment    adj2    = AdjustmentT.MakeAdjustment(pat.PatNum, 121.74, DateTime.Today.AddMonths(-2).AddDays(-1), proc.ProcDate, proc.ProcNum, provNum: proc.ProvNum, adjType: defPos.DefNum);
                PayPlanCharge ppc2    = PayPlanChargeT.CreateOne(payPlan.PayPlanNum, pat.Guarantor, pat.PatNum, DateTime.Today.AddMonths(-2).AddDays(-1), 121.74, 0, "D8090:  CompOrthoAdlt", proc.ProvNum, 0, PayPlanChargeType.Credit, proc.ProcNum);
                Adjustment    adj1    = AdjustmentT.MakeAdjustment(pat.PatNum, 121.74, DateTime.Today.AddMonths(-1).AddDays(-1), proc.ProcDate, proc.ProcNum, provNum: proc.ProvNum, adjType: defPos.DefNum);
                PayPlanCharge ppc1    = PayPlanChargeT.CreateOne(payPlan.PayPlanNum, pat.Guarantor, pat.PatNum, DateTime.Today.AddMonths(-1).AddDays(-1), 121.74, 0, "D8090:  CompOrthoAdlt", proc.ProvNum, 0, PayPlanChargeType.Credit, proc.ProcNum);
                listPats.Add(pat);
            }
            int       payPlansVersionPrev = PrefC.GetInt(PrefName.PayPlansVersion);
            int       agingProcLifoPrev   = PrefC.GetInt(PrefName.AgingProcLifo);
            Stopwatch swOn    = new Stopwatch();
            Stopwatch swOff   = new Stopwatch();
            Stopwatch swUnset = new Stopwatch();

            try {
                PrefT.UpdateInt(PrefName.PayPlansVersion, (int)PayPlanVersions.AgeCreditsAndDebits);
                swOn.Start();
                PrefT.UpdateInt(PrefName.AgingProcLifo, (int)YN.Yes);
                Ledgers.ComputeAging(0, DateTime.Today);               //Compute aging for all patients.
                foreach (Patient pat in listPats)
                {
                    PatAssertBalances(pat.PatNum, 166.67, 166.67, 166.67, 333.34, 833.35);
                }
                swOn.Stop();
                swOff.Start();
                PrefT.UpdateInt(PrefName.AgingProcLifo, (int)YN.No);
                Ledgers.ComputeAging(0, DateTime.Today);               //Compute aging for all patients.
                foreach (Patient pat in listPats)
                {
                    PatAssertBalances(pat.PatNum, 166.67, 288.41, 288.41, 89.86, 833.35);
                }
                swOff.Stop();
                swUnset.Start();
                PrefT.UpdateInt(PrefName.AgingProcLifo, (int)YN.Unknown);
                Ledgers.ComputeAging(0, DateTime.Today);               //Compute aging for all patients.
                foreach (Patient pat in listPats)
                {
                    PatAssertBalances(pat.PatNum, 166.67, 288.41, 288.41, 89.86, 833.35);
                }
                swUnset.Stop();
            }
            finally {
                PrefT.UpdateInt(PrefName.PayPlansVersion, payPlansVersionPrev);
                PrefT.UpdateInt(PrefName.AgingProcLifo, agingProcLifoPrev);
            }
            //Fails if swOn run time is at least 10 times as large as the average of the runtimes for swUnset and swOff.
            Assert.IsTrue(swOn.Elapsed.TotalMilliseconds < (swUnset.Elapsed.TotalMilliseconds + swOff.Elapsed.TotalMilliseconds) * 5,
                          "Pref On: " + swOn.Elapsed + "\r\n"
                          + "Pref Off: " + swOff.Elapsed + "\r\n"
                          + "Pref Unset: " + swUnset.Elapsed);
        }