Example #1
0
        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));
        }
Example #3
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)));
        }
Example #4
0
        ///<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);
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }
Example #7
0
        ///<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);
        }
Example #8
0
        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);
        }
Example #9
0
        /// <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);
        }
Example #10
0
        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);
        }
Example #11
0
        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);
            });
        }
Example #12
0
        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);
        }
Example #13
0
        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);
        }
Example #14
0
        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);
        }
Example #15
0
        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);
        }