Beispiel #1
0
        public void InsPlan_PpoNoSubWriteoffsNoSub()
        {
            string        suffix         = MethodBase.GetCurrentMethod().Name;
            Patient       pat            = PatientT.CreatePatient(suffix);
            long          ucrFeeSchedNum = FeeSchedT.CreateFeeSched(FeeScheduleType.Normal, "UCR Fees" + suffix);
            long          ppoFeeSchedNum = FeeSchedT.CreateFeeSched(FeeScheduleType.Normal, "PPO " + suffix);
            InsuranceInfo ins            = InsuranceT.AddInsurance(pat, suffix, planType: "p", feeSchedNum: ppoFeeSchedNum);

            ins.PriInsPlan.HasPpoSubstWriteoffs = false;
            InsPlans.Update(ins.PriInsPlan);
            BenefitT.CreateCategoryPercent(ins.PriInsPlan.PlanNum, EbenefitCategory.Restorative, 50);
            ProcedureCode originalProcCode  = ProcedureCodes.GetProcCode("D2330");
            ProcedureCode downgradeProcCode = ProcedureCodes.GetProcCode("D2140");

            originalProcCode.SubstitutionCode = "";          //NOT substituting
            originalProcCode.SubstOnlyIf      = SubstitutionCondition.Always;
            ProcedureCodeT.Update(originalProcCode);
            FeeT.CreateFee(ucrFeeSchedNum, originalProcCode.CodeNum, 100);
            FeeT.CreateFee(ucrFeeSchedNum, downgradeProcCode.CodeNum, 80);
            FeeT.CreateFee(ppoFeeSchedNum, originalProcCode.CodeNum, 60);
            FeeT.CreateFee(ppoFeeSchedNum, downgradeProcCode.CodeNum, 50);
            Procedure        proc           = ProcedureT.CreateProcedure(pat, "D2330", ProcStat.C, "9", 100);//Tooth 9
            List <ClaimProc> listClaimProcs = ClaimProcs.Refresh(pat.PatNum);
            List <Procedure> listProcs      = Procedures.Refresh(pat.PatNum);

            ins.RefreshBenefits();
            Claim     claim  = ClaimT.CreateClaim("P", ins.ListPatPlans, ins.ListInsPlans, listClaimProcs, listProcs, pat, listProcs, ins.ListBenefits, ins.ListInsSubs);
            ClaimProc clProc = ClaimProcs.Refresh(pat.PatNum)[0];          //Should only be one

            Assert.AreEqual(50, clProc.Percentage);
            Assert.AreEqual(30, clProc.BaseEst);
            Assert.AreEqual(30, clProc.InsPayEst);
            Assert.AreEqual(40, clProc.WriteOffEst);
        }
Beispiel #2
0
        public void X835_TryGetMatchedClaimProc_SpecificSupplemental()
        {
            TryEnterPayment(_x835, _eraJustinSmithClaim, _claimPrimaryJustinSmith, true);          //Will return if payment already entered.
            List <ClaimProc> listClaimProcs = ClaimProcs.Refresh(_claimPrimaryJustinSmith.PatNum); //TODO: limit list to claimProcs for primary claim only.

            listClaimProcs.AddRange(ClaimProcs.CreateSuppClaimProcs(listClaimProcs));
            long claimProcNumExpected = listClaimProcs.Find(x => x.ClaimNum == _claimPrimaryJustinSmith.ClaimNum &&
                                                            x.Status == ClaimProcStatus.Received &&
                                                            x.CodeSent == "D0120"
                                                            ).ClaimProcNum;
            long claimProcNumActual = 0;
            bool isSupplemental     = _eraJustinSmithClaim.GetIsSupplemental(_listEtrans835Attaches, listClaimProcs);
            List <Hx835_Proc> listProcsNotMatched = new List <Hx835_Proc>();

            foreach (Hx835_Proc proc in _eraJustinSmithClaim.ListProcs)
            {
                ClaimProc matchedClaimProc = null;
                if (!proc.TryGetMatchedClaimProc(out matchedClaimProc, listClaimProcs, isSupplemental))
                {
                    listProcsNotMatched.Add(proc);
                    continue;
                }
                listClaimProcs.Remove(matchedClaimProc);                //So it cannot be matched twice.
                if (claimProcNumActual != claimProcNumExpected)
                {
                    claimProcNumActual = matchedClaimProc.ClaimProcNum;
                }
                else                  //Found a match, thats all we care about.
                {
                    break;
                }
            }
            Assert.AreEqual(claimProcNumExpected, claimProcNumActual);
        }
Beispiel #3
0
 ///<summary>Inserts one ClaimProc into the database.  Returns the new priKey.</summary>
 internal static long Insert(ClaimProc claimProc)
 {
     if (DataConnection.DBtype == DatabaseType.Oracle)
     {
         claimProc.ClaimProcNum = DbHelper.GetNextOracleKey("claimproc", "ClaimProcNum");
         int loopcount = 0;
         while (loopcount < 100)
         {
             try {
                 return(Insert(claimProc, true));
             }
             catch (Oracle.DataAccess.Client.OracleException ex) {
                 if (ex.Number == 1 && ex.Message.ToLower().Contains("unique constraint") && ex.Message.ToLower().Contains("violated"))
                 {
                     claimProc.ClaimProcNum++;
                     loopcount++;
                 }
                 else
                 {
                     throw ex;
                 }
             }
         }
         throw new ApplicationException("Insert failed.  Could not generate primary key.");
     }
     else
     {
         return(Insert(claimProc, false));
     }
 }
        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);
        }
Beispiel #5
0
        /// <summary>Returns the text box control corresponding to the given procType</summary>
        private void FillDates()
        {
            List <Pref> listInsHistPref = Prefs.GetInsHistPrefs();
            string      text            = NO_INSHIST;

            foreach (PrefName prefName in Prefs.GetInsHistPrefNames())
            {
                Procedure proc      = _dictInsHistProcs[prefName];
                ClaimProc claimProc = null;
                if (proc != null)
                {
                    claimProc = _listClaimProcsForInsHistProcs.Find(x => x.InsSubNum == _insSubCur.InsSubNum && x.Status.In(ClaimProcStatus.InsHist, ClaimProcStatus.Received) &&
                                                                    x.ProcNum == proc.ProcNum);
                }
                text = ((claimProc != null && proc != null && proc.ProcDate.Year > 1880) ? proc.ProcDate.ToShortDateString() : NO_INSHIST);
                bool    isPrefSet  = listInsHistPref.Exists(x => x.PrefName == prefName.ToString() && !string.IsNullOrWhiteSpace(x.ValueString));
                TextBox textBoxCur = GetControlForPrefName(prefName);
                if (!isPrefSet)
                {
                    text = NO_INSHISTSET;
                    textBoxCur.Enabled = false;
                }
                textBoxCur.Text = text;
            }
        }
Beispiel #6
0
 ///<summary>Inserts one ClaimProc into the database.  Returns the new priKey.</summary>
 internal static long Insert(ClaimProc claimProc)
 {
     if(DataConnection.DBtype==DatabaseType.Oracle) {
         claimProc.ClaimProcNum=DbHelper.GetNextOracleKey("claimproc","ClaimProcNum");
         int loopcount=0;
         while(loopcount<100){
             try {
                 return Insert(claimProc,true);
             }
             catch(Oracle.DataAccess.Client.OracleException ex){
                 if(ex.Number==1 && ex.Message.ToLower().Contains("unique constraint") && ex.Message.ToLower().Contains("violated")){
                     claimProc.ClaimProcNum++;
                     loopcount++;
                 }
                 else{
                     throw ex;
                 }
             }
         }
         throw new ApplicationException("Insert failed.  Could not generate primary key.");
     }
     else {
         return Insert(claimProc,false);
     }
 }
        /// <summary>Returns true if ClaimProcAllowCreditsGreaterThanProcFee preference allows the user to add credits greater than the proc fee. Otherwise returns false </summary>
        private bool isClaimProcGreaterThanProcFee()
        {
            ClaimProcCreditsGreaterThanProcFee creditsGreaterPref = (ClaimProcCreditsGreaterThanProcFee)PrefC.GetInt(PrefName.ClaimProcAllowCreditsGreaterThanProcFee);

            if (creditsGreaterPref == ClaimProcCreditsGreaterThanProcFee.Allow)
            {
                return(true);
            }
            List <Procedure>  listProcs                 = Procedures.GetManyProc(ClaimProcsToEdit.Select(x => x.ProcNum).ToList(), false);
            List <ClaimProc>  listClaimProcsForPat      = ClaimProcs.Refresh(PatCur.PatNum);
            List <PaySplit>   listPaySplitForSelectedCP = PaySplits.GetPaySplitsFromProcs(ClaimProcsToEdit.Select(x => x.ProcNum).ToList());
            List <Adjustment> listAdjForSelectedCP      = Adjustments.GetForProcs(ClaimProcsToEdit.Select(x => x.ProcNum).ToList());
            bool          isCreditGreater               = false;
            List <string> listProcDescripts             = new List <string>();

            for (int i = 0; i < ClaimProcsToEdit.Length; i++)
            {
                ClaimProc claimProcCur = ClaimProcsToEdit[i];
                int       insPayIdx    = gridMain.ListGridColumns.GetIndex(Lan.g("TableClaimProc", "Ins Pay"));
                int       writeoffIdx  = gridMain.ListGridColumns.GetIndex(Lan.g("TableClaimProc", "Writeoff"));
                int       feeAcctIdx   = gridMain.ListGridColumns.GetIndex(Lan.g("TableClaimProc", "Fee"));
                decimal   insPayAmt    = (decimal)ClaimProcs.ProcInsPay(listClaimProcsForPat.FindAll(x => x.ClaimProcNum != claimProcCur.ClaimProcNum), claimProcCur.ProcNum)
                                         + PIn.Decimal(gridMain.ListGridRows[i].Cells[insPayIdx].Text);
                decimal writeOff = (decimal)ClaimProcs.ProcWriteoff(listClaimProcsForPat.FindAll(x => x.ClaimProcNum != claimProcCur.ClaimProcNum), claimProcCur.ProcNum)
                                   + PIn.Decimal(gridMain.ListGridRows[i].Cells[writeoffIdx].Text);
                decimal feeAcct   = PIn.Decimal(gridMain.ListGridRows[i].Cells[feeAcctIdx].Text);
                decimal adj       = listAdjForSelectedCP.Where(x => x.ProcNum == claimProcCur.ProcNum).Select(x => (decimal)x.AdjAmt).Sum();
                decimal patPayAmt = listPaySplitForSelectedCP.Where(x => x.ProcNum == claimProcCur.ProcNum).Select(x => (decimal)x.SplitAmt).Sum();
                //Any changes to this calculation should also consider FormClaimProc.IsClaimProcGreaterThanProcFee().
                decimal creditRem = feeAcct - patPayAmt - insPayAmt - writeOff + adj;
                isCreditGreater |= (creditRem.IsLessThanZero());
                if (creditRem.IsLessThanZero())
                {
                    Procedure proc = listProcs.FirstOrDefault(x => x.ProcNum == claimProcCur.ProcNum);
                    listProcDescripts.Add((proc == null ? "" : ProcedureCodes.GetProcCode(proc.CodeNum).ProcCode)
                                          + "\t" + Lan.g(this, "Fee") + ": " + feeAcct.ToString("F")
                                          + "\t" + Lan.g(this, "Credits") + ": " + (Math.Abs(-patPayAmt - insPayAmt - writeOff + adj)).ToString("F")
                                          + "\t" + Lan.g(this, "Remaining") + ": (" + Math.Abs(creditRem).ToString("F") + ")");
                }
            }
            if (!isCreditGreater)
            {
                return(true);
            }
            if (creditsGreaterPref == ClaimProcCreditsGreaterThanProcFee.Block)
            {
                MsgBoxCopyPaste msgBox = new MsgBoxCopyPaste(Lan.g(this, "Remaining amount is negative for the following procedures") + ":\r\n"
                                                             + string.Join("\r\n", listProcDescripts) + "\r\n" + Lan.g(this, "Not allowed to continue."));
                msgBox.Text = Lan.g(this, "Overpaid Procedure Warning");
                msgBox.ShowDialog();
                return(false);
            }
            if (creditsGreaterPref == ClaimProcCreditsGreaterThanProcFee.Warn)
            {
                return(MessageBox.Show(Lan.g(this, "Remaining amount is negative for the following procedures") + ":\r\n"
                                       + string.Join("\r\n", listProcDescripts.Take(10)) + "\r\n" + (listProcDescripts.Count > 10?"...\r\n":"") + Lan.g(this, "Continue?")
                                       , Lan.g(this, "Overpaid Procedure Warning"), MessageBoxButtons.OKCancel) == DialogResult.OK);
            }
            return(true);           //should never get to this line, only possible if another enum value is added to allow, warn, and block
        }
Beispiel #8
0
        ///<summary>Creates a general deductible of $50, a deductible of $50 on D0220, sets a $30 D0220 complete and creates a claim,
        ///creates a $100 D2750, that is TP'ed, and then creates a $30 D0220 that is TP'ed.</summary>
        ///<param name="actAssert">The first claimproc is for the D2750 and the second claimproc is for the second D0220.</param>
        public void GetDeductibleByCodeDeductLessThanGeneral(string suffix, Action <ClaimProc, ClaimProc> actAssert)
        {
            Patient pat = PatientT.CreatePatient(suffix);

            InsuranceT.AddInsurance(pat, suffix);
            List <InsSub>  listSubs     = InsSubT.GetInsSubs(pat);
            List <InsPlan> listPlans    = InsPlans.RefreshForSubList(listSubs);
            List <PatPlan> listPatPlans = PatPlans.Refresh(pat.PatNum);
            InsPlan        plan         = InsPlanT.GetPlanForPriSecMed(PriSecMed.Primary, listPatPlans, listPlans, listSubs);

            BenefitT.CreateDeductibleGeneral(plan.PlanNum, BenefitCoverageLevel.Individual, 50);
            BenefitT.CreateCategoryPercent(plan.PlanNum, EbenefitCategory.Diagnostic, 100);
            BenefitT.CreateCategoryPercent(plan.PlanNum, EbenefitCategory.Crowns, 50);
            BenefitT.CreateDeductible(plan.PlanNum, EbenefitCategory.Diagnostic, 0);
            BenefitT.CreateDeductible(plan.PlanNum, "D0220", 50);
            List <Benefit> listBens = Benefits.Refresh(listPatPlans, listSubs);
            Procedure      proc1    = ProcedureT.CreateProcedure(pat, "D0220", ProcStat.C, "", 30);//proc1 - Intraoral - periapical first film

            ClaimT.CreateClaim("P", listPatPlans, listPlans, new List <ClaimProc>(), new List <Procedure> {
                proc1
            }, pat, new List <Procedure> {
                proc1
            }, listBens,
                               listSubs);
            Procedure        proc2      = ProcedureT.CreateProcedure(pat, "D2750", ProcStat.TP, "", 100, priority: 0); //proc2 - Crown
            Procedure        proc3      = ProcedureT.CreateProcedure(pat, "D0220", ProcStat.TP, "", 30, priority: 1);  //proc3 - Intraoral - periapical first film
            List <ClaimProc> claimProcs = ProcedureT.ComputeEstimates(pat, listPatPlans, listPlans, listSubs, listBens);
            ClaimProc        claimProc2 = claimProcs.FirstOrDefault(x => x.ProcNum == proc2.ProcNum);
            ClaimProc        claimProc3 = claimProcs.FirstOrDefault(x => x.ProcNum == proc3.ProcNum);

            actAssert(claimProc2, claimProc3);
        }
Beispiel #9
0
 ///<summary>Inserts one ClaimProc into the database.  Provides option to use the existing priKey.</summary>
 internal static long Insert(ClaimProc claimProc,bool useExistingPK)
 {
     if(!useExistingPK && PrefC.RandomKeys) {
         claimProc.ClaimProcNum=ReplicationServers.GetKey("claimproc","ClaimProcNum");
     }
     string command="INSERT INTO claimproc (";
     if(useExistingPK || PrefC.RandomKeys) {
         command+="ClaimProcNum,";
     }
     command+="ProcNum,ClaimNum,PatNum,ProvNum,FeeBilled,InsPayEst,DedApplied,Status,InsPayAmt,Remarks,ClaimPaymentNum,PlanNum,DateCP,WriteOff,CodeSent,AllowedOverride,Percentage,PercentOverride,CopayAmt,NoBillIns,PaidOtherIns,BaseEst,CopayOverride,ProcDate,DateEntry,LineNumber,DedEst,DedEstOverride,InsEstTotal,InsEstTotalOverride,PaidOtherInsOverride,EstimateNote,WriteOffEst,WriteOffEstOverride,ClinicNum,InsSubNum,PaymentRow) VALUES(";
     if(useExistingPK || PrefC.RandomKeys) {
         command+=POut.Long(claimProc.ClaimProcNum)+",";
     }
     command+=
              POut.Long  (claimProc.ProcNum)+","
         +    POut.Long  (claimProc.ClaimNum)+","
         +    POut.Long  (claimProc.PatNum)+","
         +    POut.Long  (claimProc.ProvNum)+","
         +"'"+POut.Double(claimProc.FeeBilled)+"',"
         +"'"+POut.Double(claimProc.InsPayEst)+"',"
         +"'"+POut.Double(claimProc.DedApplied)+"',"
         +    POut.Int   ((int)claimProc.Status)+","
         +"'"+POut.Double(claimProc.InsPayAmt)+"',"
         +"'"+POut.String(claimProc.Remarks)+"',"
         +    POut.Long  (claimProc.ClaimPaymentNum)+","
         +    POut.Long  (claimProc.PlanNum)+","
         +    POut.Date  (claimProc.DateCP)+","
         +"'"+POut.Double(claimProc.WriteOff)+"',"
         +"'"+POut.String(claimProc.CodeSent)+"',"
         +"'"+POut.Double(claimProc.AllowedOverride)+"',"
         +    POut.Int   (claimProc.Percentage)+","
         +    POut.Int   (claimProc.PercentOverride)+","
         +"'"+POut.Double(claimProc.CopayAmt)+"',"
         +    POut.Bool  (claimProc.NoBillIns)+","
         +"'"+POut.Double(claimProc.PaidOtherIns)+"',"
         +"'"+POut.Double(claimProc.BaseEst)+"',"
         +"'"+POut.Double(claimProc.CopayOverride)+"',"
         +    POut.Date  (claimProc.ProcDate)+","
         +    POut.Date  (claimProc.DateEntry)+","
         +    POut.Byte  (claimProc.LineNumber)+","
         +"'"+POut.Double(claimProc.DedEst)+"',"
         +"'"+POut.Double(claimProc.DedEstOverride)+"',"
         +"'"+POut.Double(claimProc.InsEstTotal)+"',"
         +"'"+POut.Double(claimProc.InsEstTotalOverride)+"',"
         +"'"+POut.Double(claimProc.PaidOtherInsOverride)+"',"
         +"'"+POut.String(claimProc.EstimateNote)+"',"
         +"'"+POut.Double(claimProc.WriteOffEst)+"',"
         +"'"+POut.Double(claimProc.WriteOffEstOverride)+"',"
         +    POut.Long  (claimProc.ClinicNum)+","
         +    POut.Long  (claimProc.InsSubNum)+","
         +    POut.Int   (claimProc.PaymentRow)+")";
     if(useExistingPK || PrefC.RandomKeys) {
         Db.NonQ(command);
     }
     else {
         claimProc.ClaimProcNum=Db.NonQ(command,true);
     }
     return claimProc.ClaimProcNum;
 }
Beispiel #10
0
        ///<summary>Converts a DataTable to a list of objects.</summary>
        public static List <ClaimProc> TableToList(DataTable table)
        {
            List <ClaimProc> retVal = new List <ClaimProc>();
            ClaimProc        claimProc;

            foreach (DataRow row in table.Rows)
            {
                claimProc = new ClaimProc();
                claimProc.ClaimProcNum         = PIn.Long(row["ClaimProcNum"].ToString());
                claimProc.ProcNum              = PIn.Long(row["ProcNum"].ToString());
                claimProc.ClaimNum             = PIn.Long(row["ClaimNum"].ToString());
                claimProc.PatNum               = PIn.Long(row["PatNum"].ToString());
                claimProc.ProvNum              = PIn.Long(row["ProvNum"].ToString());
                claimProc.FeeBilled            = PIn.Double(row["FeeBilled"].ToString());
                claimProc.InsPayEst            = PIn.Double(row["InsPayEst"].ToString());
                claimProc.DedApplied           = PIn.Double(row["DedApplied"].ToString());
                claimProc.Status               = (OpenDentBusiness.ClaimProcStatus)PIn.Int(row["Status"].ToString());
                claimProc.InsPayAmt            = PIn.Double(row["InsPayAmt"].ToString());
                claimProc.Remarks              = PIn.String(row["Remarks"].ToString());
                claimProc.ClaimPaymentNum      = PIn.Long(row["ClaimPaymentNum"].ToString());
                claimProc.PlanNum              = PIn.Long(row["PlanNum"].ToString());
                claimProc.DateCP               = PIn.Date(row["DateCP"].ToString());
                claimProc.WriteOff             = PIn.Double(row["WriteOff"].ToString());
                claimProc.CodeSent             = PIn.String(row["CodeSent"].ToString());
                claimProc.AllowedOverride      = PIn.Double(row["AllowedOverride"].ToString());
                claimProc.Percentage           = PIn.Int(row["Percentage"].ToString());
                claimProc.PercentOverride      = PIn.Int(row["PercentOverride"].ToString());
                claimProc.CopayAmt             = PIn.Double(row["CopayAmt"].ToString());
                claimProc.NoBillIns            = PIn.Bool(row["NoBillIns"].ToString());
                claimProc.PaidOtherIns         = PIn.Double(row["PaidOtherIns"].ToString());
                claimProc.BaseEst              = PIn.Double(row["BaseEst"].ToString());
                claimProc.CopayOverride        = PIn.Double(row["CopayOverride"].ToString());
                claimProc.ProcDate             = PIn.Date(row["ProcDate"].ToString());
                claimProc.DateEntry            = PIn.Date(row["DateEntry"].ToString());
                claimProc.LineNumber           = PIn.Byte(row["LineNumber"].ToString());
                claimProc.DedEst               = PIn.Double(row["DedEst"].ToString());
                claimProc.DedEstOverride       = PIn.Double(row["DedEstOverride"].ToString());
                claimProc.InsEstTotal          = PIn.Double(row["InsEstTotal"].ToString());
                claimProc.InsEstTotalOverride  = PIn.Double(row["InsEstTotalOverride"].ToString());
                claimProc.PaidOtherInsOverride = PIn.Double(row["PaidOtherInsOverride"].ToString());
                claimProc.EstimateNote         = PIn.String(row["EstimateNote"].ToString());
                claimProc.WriteOffEst          = PIn.Double(row["WriteOffEst"].ToString());
                claimProc.WriteOffEstOverride  = PIn.Double(row["WriteOffEstOverride"].ToString());
                claimProc.ClinicNum            = PIn.Long(row["ClinicNum"].ToString());
                claimProc.InsSubNum            = PIn.Long(row["InsSubNum"].ToString());
                claimProc.PaymentRow           = PIn.Int(row["PaymentRow"].ToString());
                claimProc.PayPlanNum           = PIn.Long(row["PayPlanNum"].ToString());
                claimProc.ClaimPaymentTracking = PIn.Long(row["ClaimPaymentTracking"].ToString());
                claimProc.SecUserNumEntry      = PIn.Long(row["SecUserNumEntry"].ToString());
                claimProc.SecDateEntry         = PIn.Date(row["SecDateEntry"].ToString());
                claimProc.SecDateTEdit         = PIn.DateT(row["SecDateTEdit"].ToString());
                claimProc.DateSuppReceived     = PIn.Date(row["DateSuppReceived"].ToString());
                claimProc.DateInsFinalized     = PIn.Date(row["DateInsFinalized"].ToString());
                claimProc.IsTransfer           = PIn.Bool(row["IsTransfer"].ToString());
                retVal.Add(claimProc);
            }
            return(retVal);
        }
Beispiel #11
0
        public static ClaimProc AddInsUsedAdjustment(long patNum, long planNum, double insPayAmt, long subNum, double dedApplied)
        {
            ClaimProc cp = ClaimProcs.CreateInsPlanAdjustment(patNum, planNum, subNum);

            cp.InsPayAmt  = insPayAmt;
            cp.DedApplied = dedApplied;
            ClaimProcs.Insert(cp);
            return(cp);
        }
Beispiel #12
0
        private static Claim CreatePredetermination(Patient pat, List <Procedure> procList, long provTreat)
        {
            Family           fam           = Patients.GetFamily(pat.PatNum);
            List <InsSub>    subList       = InsSubs.RefreshForFam(fam);
            List <InsPlan>   planList      = InsPlans.RefreshForSubList(subList);
            List <PatPlan>   patPlanList   = PatPlans.Refresh(pat.PatNum);
            List <Benefit>   benefitList   = Benefits.Refresh(patPlanList, subList);
            List <ClaimProc> claimProcList = ClaimProcs.Refresh(pat.PatNum);
            List <Procedure> procsForPat   = Procedures.Refresh(pat.PatNum);
            InsSub           sub           = InsSubs.GetSub(PatPlans.GetInsSubNum(patPlanList, 1), subList);
            InsPlan          insPlan       = InsPlans.GetPlan(sub.PlanNum, planList);
            Claim            claim         = new Claim();

            Claims.Insert(claim);      //to retreive a key for new Claim.ClaimNum
            claim.PatNum      = pat.PatNum;
            claim.DateService = procList[0].ProcDate;
            claim.DateSent    = DateTime.Today;
            claim.ClaimStatus = "W";
            claim.InsSubNum   = PatPlans.GetInsSubNum(patPlanList, 1);
            claim.InsSubNum2  = PatPlans.GetInsSubNum(patPlanList, 2);
            InsSub sub1 = InsSubs.GetSub(claim.InsSubNum, subList);
            InsSub sub2 = InsSubs.GetSub(claim.InsSubNum, subList);

            claim.PlanNum       = sub1.PlanNum;
            claim.PlanNum2      = sub2.PlanNum;
            claim.PatRelat      = PatPlans.GetRelat(patPlanList, 1);
            claim.PatRelat2     = PatPlans.GetRelat(patPlanList, 2);
            claim.ClaimType     = "PreAuth";
            claim.ProvTreat     = provTreat;
            claim.IsProsthesis  = "N";
            claim.ProvBill      = Providers.GetBillingProvNum(claim.ProvTreat, 0);
            claim.EmployRelated = YN.No;
            ClaimProc        cp;
            List <Procedure> procListClaim = new List <Procedure>();  //this list will exclude lab fees

            for (int i = 0; i < procList.Count; i++)
            {
                if (procList[i].ProcNumLab == 0)
                {
                    procListClaim.Add(procList[i]);
                }
            }
            for (int i = 0; i < procListClaim.Count; i++)
            {
                cp = new ClaimProc();
                ClaimProcs.CreateEst(cp, procListClaim[i], insPlan, sub);
                cp.ClaimNum   = claim.ClaimNum;
                cp.Status     = ClaimProcStatus.NotReceived;
                cp.CodeSent   = ProcedureCodes.GetProcCode(procListClaim[i].CodeNum).ProcCode;
                cp.LineNumber = (byte)(i + 1);
                ClaimProcs.Update(cp);
            }
            claimProcList = ClaimProcs.Refresh(pat.PatNum);
            ClaimL.CalculateAndUpdate(procsForPat, planList, claim, patPlanList, benefitList, pat.Age, subList);
            return(claim);
        }
Beispiel #13
0
        ///<summary>Updates one ClaimProc in the database.</summary>
        public static void Update(ClaimProc claimProc)
        {
            string command = "UPDATE claimproc SET "
                             + "ProcNum             =  " + POut.Long(claimProc.ProcNum) + ", "
                             + "ClaimNum            =  " + POut.Long(claimProc.ClaimNum) + ", "
                             + "PatNum              =  " + POut.Long(claimProc.PatNum) + ", "
                             + "ProvNum             =  " + POut.Long(claimProc.ProvNum) + ", "
                             + "FeeBilled           = '" + POut.Double(claimProc.FeeBilled) + "', "
                             + "InsPayEst           = '" + POut.Double(claimProc.InsPayEst) + "', "
                             + "DedApplied          = '" + POut.Double(claimProc.DedApplied) + "', "
                             + "Status              =  " + POut.Int((int)claimProc.Status) + ", "
                             + "InsPayAmt           = '" + POut.Double(claimProc.InsPayAmt) + "', "
                             + "Remarks             = '" + POut.String(claimProc.Remarks) + "', "
                             + "ClaimPaymentNum     =  " + POut.Long(claimProc.ClaimPaymentNum) + ", "
                             + "PlanNum             =  " + POut.Long(claimProc.PlanNum) + ", "
                             + "DateCP              =  " + POut.Date(claimProc.DateCP) + ", "
                             + "WriteOff            = '" + POut.Double(claimProc.WriteOff) + "', "
                             + "CodeSent            = '" + POut.String(claimProc.CodeSent) + "', "
                             + "AllowedOverride     = '" + POut.Double(claimProc.AllowedOverride) + "', "
                             + "Percentage          =  " + POut.Int(claimProc.Percentage) + ", "
                             + "PercentOverride     =  " + POut.Int(claimProc.PercentOverride) + ", "
                             + "CopayAmt            = '" + POut.Double(claimProc.CopayAmt) + "', "
                             + "NoBillIns           =  " + POut.Bool(claimProc.NoBillIns) + ", "
                             + "PaidOtherIns        = '" + POut.Double(claimProc.PaidOtherIns) + "', "
                             + "BaseEst             = '" + POut.Double(claimProc.BaseEst) + "', "
                             + "CopayOverride       = '" + POut.Double(claimProc.CopayOverride) + "', "
                             + "ProcDate            =  " + POut.Date(claimProc.ProcDate) + ", "
                             + "DateEntry           =  " + POut.Date(claimProc.DateEntry) + ", "
                             + "LineNumber          =  " + POut.Byte(claimProc.LineNumber) + ", "
                             + "DedEst              = '" + POut.Double(claimProc.DedEst) + "', "
                             + "DedEstOverride      = '" + POut.Double(claimProc.DedEstOverride) + "', "
                             + "InsEstTotal         = '" + POut.Double(claimProc.InsEstTotal) + "', "
                             + "InsEstTotalOverride = '" + POut.Double(claimProc.InsEstTotalOverride) + "', "
                             + "PaidOtherInsOverride= '" + POut.Double(claimProc.PaidOtherInsOverride) + "', "
                             + "EstimateNote        = '" + POut.String(claimProc.EstimateNote) + "', "
                             + "WriteOffEst         = '" + POut.Double(claimProc.WriteOffEst) + "', "
                             + "WriteOffEstOverride = '" + POut.Double(claimProc.WriteOffEstOverride) + "', "
                             + "ClinicNum           =  " + POut.Long(claimProc.ClinicNum) + ", "
                             + "InsSubNum           =  " + POut.Long(claimProc.InsSubNum) + ", "
                             + "PaymentRow          =  " + POut.Int(claimProc.PaymentRow) + ", "
                             + "PayPlanNum          =  " + POut.Long(claimProc.PayPlanNum) + ", "
                             + "ClaimPaymentTracking=  " + POut.Long(claimProc.ClaimPaymentTracking) + ", "
                             //SecUserNumEntry excluded from update
                             //SecDateEntry not allowed to change
                             //SecDateTEdit can only be set by MySQL
                             + "DateSuppReceived    =  " + POut.Date(claimProc.DateSuppReceived) + ", "
                             + "DateInsFinalized    =  " + POut.Date(claimProc.DateInsFinalized) + ", "
                             + "IsTransfer          =  " + POut.Bool(claimProc.IsTransfer) + " "
                             + "WHERE ClaimProcNum = " + POut.Long(claimProc.ClaimProcNum);

            Db.NonQ(command);
        }
Beispiel #14
0
        public static void AddInsUsedAdjustment(long patNum, long planNum, double amtPaid, long subNum, double dedApplied)
        {
            ClaimProc cp = new ClaimProc();

            cp.PatNum     = patNum;
            cp.PlanNum    = planNum;
            cp.InsSubNum  = subNum;
            cp.ProcDate   = DateTime.Today;
            cp.Status     = ClaimProcStatus.Adjustment;
            cp.InsPayAmt  = amtPaid;
            cp.DedApplied = dedApplied;
            ClaimProcs.Insert(cp);
        }
Beispiel #15
0
        ///<summary>Converts a DataTable to a list of objects.</summary>
        internal static List <ClaimProc> TableToList(DataTable table)
        {
            List <ClaimProc> retVal = new List <ClaimProc>();
            ClaimProc        claimProc;

            for (int i = 0; i < table.Rows.Count; i++)
            {
                claimProc = new ClaimProc();
                claimProc.ClaimProcNum         = PIn.Long(table.Rows[i]["ClaimProcNum"].ToString());
                claimProc.ProcNum              = PIn.Long(table.Rows[i]["ProcNum"].ToString());
                claimProc.ClaimNum             = PIn.Long(table.Rows[i]["ClaimNum"].ToString());
                claimProc.PatNum               = PIn.Long(table.Rows[i]["PatNum"].ToString());
                claimProc.ProvNum              = PIn.Long(table.Rows[i]["ProvNum"].ToString());
                claimProc.FeeBilled            = PIn.Double(table.Rows[i]["FeeBilled"].ToString());
                claimProc.InsPayEst            = PIn.Double(table.Rows[i]["InsPayEst"].ToString());
                claimProc.DedApplied           = PIn.Double(table.Rows[i]["DedApplied"].ToString());
                claimProc.Status               = (ClaimProcStatus)PIn.Int(table.Rows[i]["Status"].ToString());
                claimProc.InsPayAmt            = PIn.Double(table.Rows[i]["InsPayAmt"].ToString());
                claimProc.Remarks              = PIn.String(table.Rows[i]["Remarks"].ToString());
                claimProc.ClaimPaymentNum      = PIn.Long(table.Rows[i]["ClaimPaymentNum"].ToString());
                claimProc.PlanNum              = PIn.Long(table.Rows[i]["PlanNum"].ToString());
                claimProc.DateCP               = PIn.Date(table.Rows[i]["DateCP"].ToString());
                claimProc.WriteOff             = PIn.Double(table.Rows[i]["WriteOff"].ToString());
                claimProc.CodeSent             = PIn.String(table.Rows[i]["CodeSent"].ToString());
                claimProc.AllowedOverride      = PIn.Double(table.Rows[i]["AllowedOverride"].ToString());
                claimProc.Percentage           = PIn.Int(table.Rows[i]["Percentage"].ToString());
                claimProc.PercentOverride      = PIn.Int(table.Rows[i]["PercentOverride"].ToString());
                claimProc.CopayAmt             = PIn.Double(table.Rows[i]["CopayAmt"].ToString());
                claimProc.NoBillIns            = PIn.Bool(table.Rows[i]["NoBillIns"].ToString());
                claimProc.PaidOtherIns         = PIn.Double(table.Rows[i]["PaidOtherIns"].ToString());
                claimProc.BaseEst              = PIn.Double(table.Rows[i]["BaseEst"].ToString());
                claimProc.CopayOverride        = PIn.Double(table.Rows[i]["CopayOverride"].ToString());
                claimProc.ProcDate             = PIn.Date(table.Rows[i]["ProcDate"].ToString());
                claimProc.DateEntry            = PIn.Date(table.Rows[i]["DateEntry"].ToString());
                claimProc.LineNumber           = PIn.Byte(table.Rows[i]["LineNumber"].ToString());
                claimProc.DedEst               = PIn.Double(table.Rows[i]["DedEst"].ToString());
                claimProc.DedEstOverride       = PIn.Double(table.Rows[i]["DedEstOverride"].ToString());
                claimProc.InsEstTotal          = PIn.Double(table.Rows[i]["InsEstTotal"].ToString());
                claimProc.InsEstTotalOverride  = PIn.Double(table.Rows[i]["InsEstTotalOverride"].ToString());
                claimProc.PaidOtherInsOverride = PIn.Double(table.Rows[i]["PaidOtherInsOverride"].ToString());
                claimProc.EstimateNote         = PIn.String(table.Rows[i]["EstimateNote"].ToString());
                claimProc.WriteOffEst          = PIn.Double(table.Rows[i]["WriteOffEst"].ToString());
                claimProc.WriteOffEstOverride  = PIn.Double(table.Rows[i]["WriteOffEstOverride"].ToString());
                claimProc.ClinicNum            = PIn.Long(table.Rows[i]["ClinicNum"].ToString());
                claimProc.InsSubNum            = PIn.Long(table.Rows[i]["InsSubNum"].ToString());
                claimProc.PaymentRow           = PIn.Int(table.Rows[i]["PaymentRow"].ToString());
                retVal.Add(claimProc);
            }
            return(retVal);
        }
Beispiel #16
0
        public void LedgersTests_ComputeAging_PayPlanDynamicCreditsWithClaimProcs()
        {
            List <Procedure>  listProcs = new List <Procedure>();
            List <Adjustment> listAdjs  = new List <Adjustment>();
            long          provNum       = ProviderT.CreateProvider("Aging_PayPlanDynamic");
            string        suffix        = MethodBase.GetCurrentMethod().Name;
            Patient       pat           = PatientT.CreatePatient(fName: "Aging_PayPlanDynamic", suffix: suffix);
            Family        fam           = Patients.GetFamily(pat.PatNum);
            Procedure     proc45        = ProcedureT.CreateProcedure(pat, "D0210", ProcStat.C, "", 45, DateTime.Today.AddDays(-61), provNum: provNum);
            ClaimProc     cp45          = new ClaimProc();
            InsuranceInfo insInfo       = InsuranceT.AddInsurance(pat, "DynPayPlan");

            ClaimProcs.CreateEst(cp45, proc45, insInfo.PriInsPlan, insInfo.PriInsSub);
            cp45.Status      = ClaimProcStatus.NotReceived;
            cp45.InsEstTotal = -1;
            cp45.InsPayEst   = 15;
            cp45.WriteOffEst = 0;
            cp45.WriteOff    = 0;
            ClaimProcs.Update(cp45);
            listProcs.AddRange(new List <Procedure> {
                proc45
            });
            PayPlan payPlan = PayPlanT.CreateDynamicPaymentPlan(pat.PatNum, pat.PatNum, DateTime.Today.AddDays(-1), 0, 0, 30, listProcs, listAdjs);
            //make two non payplan productions to put on the account
            Procedure procUnattached = ProcedureT.CreateProcedure(pat, "D0210", ProcStat.C, "", 35, DateTime.Today.AddDays(-91), provNum: provNum);
            //Run pay plan logic to generate first set of charges
            List <PayPlanCharge> listChargesDb = PayPlanCharges.GetForPayPlan(payPlan.PayPlanNum);
            List <PayPlanLink>   listEntries   = PayPlanLinks.GetForPayPlans(new List <long> {
                payPlan.PayPlanNum
            });
            PayPlanTerms         terms = PayPlanT.GetTerms(payPlan, listEntries);
            List <PayPlanCharge> listChargesThisPeriod = PayPlanEdit.GetListExpectedCharges(listChargesDb, terms, fam, listEntries, payPlan, true);

            Assert.AreEqual(30, listChargesThisPeriod.Sum(x => x.Principal));
            foreach (PayPlanCharge charge in listChargesThisPeriod)
            {
                PayPlanCharges.Insert(charge);
            }
            int payPlansVersionPrev = PrefC.GetInt(PrefName.PayPlansVersion);

            try {
                PrefT.UpdateInt(PrefName.PayPlansVersion, (int)PayPlanVersions.AgeCreditsAndDebits);
                CheckAgingProcLifo(pat.PatNum, 30, 0, 15, 35, 30, YN.Yes);        //new - pay plan credit of $30 gets applied to cooresponding procedure
                CheckAgingProcLifo(pat.PatNum, 30, 0, 45, 5, 30, YN.No);          //old - pay plan credit gets applied to oldest production on the account
                CheckAgingProcLifo(pat.PatNum, 30, 0, 45, 5, 30, YN.Unknown);
            }
            finally {
                PrefT.UpdateInt(PrefName.PayPlansVersion, payPlansVersionPrev);
            }
        }
Beispiel #17
0
 ///<summary>Inserts one ClaimProc into the database.  Returns the new priKey.  Doesn't use the cache.</summary>
 public static long InsertNoCache(ClaimProc claimProc)
 {
     if (DataConnection.DBtype == DatabaseType.MySql)
     {
         return(InsertNoCache(claimProc, false));
     }
     else
     {
         if (DataConnection.DBtype == DatabaseType.Oracle)
         {
             claimProc.ClaimProcNum = DbHelper.GetNextOracleKey("claimproc", "ClaimProcNum");                  //Cacheless method
         }
         return(InsertNoCache(claimProc, true));
     }
 }
Beispiel #18
0
		///<summary>Converts a DataTable to a list of objects.</summary>
		public static List<ClaimProc> TableToList(DataTable table){
			List<ClaimProc> retVal=new List<ClaimProc>();
			ClaimProc claimProc;
			for(int i=0;i<table.Rows.Count;i++) {
				claimProc=new ClaimProc();
				claimProc.ClaimProcNum        = PIn.Long  (table.Rows[i]["ClaimProcNum"].ToString());
				claimProc.ProcNum             = PIn.Long  (table.Rows[i]["ProcNum"].ToString());
				claimProc.ClaimNum            = PIn.Long  (table.Rows[i]["ClaimNum"].ToString());
				claimProc.PatNum              = PIn.Long  (table.Rows[i]["PatNum"].ToString());
				claimProc.ProvNum             = PIn.Long  (table.Rows[i]["ProvNum"].ToString());
				claimProc.FeeBilled           = PIn.Double(table.Rows[i]["FeeBilled"].ToString());
				claimProc.InsPayEst           = PIn.Double(table.Rows[i]["InsPayEst"].ToString());
				claimProc.DedApplied          = PIn.Double(table.Rows[i]["DedApplied"].ToString());
				claimProc.Status              = (OpenDentBusiness.ClaimProcStatus)PIn.Int(table.Rows[i]["Status"].ToString());
				claimProc.InsPayAmt           = PIn.Double(table.Rows[i]["InsPayAmt"].ToString());
				claimProc.Remarks             = PIn.String(table.Rows[i]["Remarks"].ToString());
				claimProc.ClaimPaymentNum     = PIn.Long  (table.Rows[i]["ClaimPaymentNum"].ToString());
				claimProc.PlanNum             = PIn.Long  (table.Rows[i]["PlanNum"].ToString());
				claimProc.DateCP              = PIn.Date  (table.Rows[i]["DateCP"].ToString());
				claimProc.WriteOff            = PIn.Double(table.Rows[i]["WriteOff"].ToString());
				claimProc.CodeSent            = PIn.String(table.Rows[i]["CodeSent"].ToString());
				claimProc.AllowedOverride     = PIn.Double(table.Rows[i]["AllowedOverride"].ToString());
				claimProc.Percentage          = PIn.Int   (table.Rows[i]["Percentage"].ToString());
				claimProc.PercentOverride     = PIn.Int   (table.Rows[i]["PercentOverride"].ToString());
				claimProc.CopayAmt            = PIn.Double(table.Rows[i]["CopayAmt"].ToString());
				claimProc.NoBillIns           = PIn.Bool  (table.Rows[i]["NoBillIns"].ToString());
				claimProc.PaidOtherIns        = PIn.Double(table.Rows[i]["PaidOtherIns"].ToString());
				claimProc.BaseEst             = PIn.Double(table.Rows[i]["BaseEst"].ToString());
				claimProc.CopayOverride       = PIn.Double(table.Rows[i]["CopayOverride"].ToString());
				claimProc.ProcDate            = PIn.Date  (table.Rows[i]["ProcDate"].ToString());
				claimProc.DateEntry           = PIn.Date  (table.Rows[i]["DateEntry"].ToString());
				claimProc.LineNumber          = PIn.Byte  (table.Rows[i]["LineNumber"].ToString());
				claimProc.DedEst              = PIn.Double(table.Rows[i]["DedEst"].ToString());
				claimProc.DedEstOverride      = PIn.Double(table.Rows[i]["DedEstOverride"].ToString());
				claimProc.InsEstTotal         = PIn.Double(table.Rows[i]["InsEstTotal"].ToString());
				claimProc.InsEstTotalOverride = PIn.Double(table.Rows[i]["InsEstTotalOverride"].ToString());
				claimProc.PaidOtherInsOverride= PIn.Double(table.Rows[i]["PaidOtherInsOverride"].ToString());
				claimProc.EstimateNote        = PIn.String(table.Rows[i]["EstimateNote"].ToString());
				claimProc.WriteOffEst         = PIn.Double(table.Rows[i]["WriteOffEst"].ToString());
				claimProc.WriteOffEstOverride = PIn.Double(table.Rows[i]["WriteOffEstOverride"].ToString());
				claimProc.ClinicNum           = PIn.Long  (table.Rows[i]["ClinicNum"].ToString());
				claimProc.InsSubNum           = PIn.Long  (table.Rows[i]["InsSubNum"].ToString());
				claimProc.PaymentRow          = PIn.Int   (table.Rows[i]["PaymentRow"].ToString());
				claimProc.PayPlanNum          = PIn.Long  (table.Rows[i]["PayPlanNum"].ToString());
				retVal.Add(claimProc);
			}
			return retVal;
		}
Beispiel #19
0
        ///<summary>This tells the calculating logic that insurance paid on a procedure.  It avoids the creation of an actual claim.</summary>
        public static void AddInsPaid(long patNum, long planNum, long procNum, double amtPaid, long subNum, double dedApplied, double writeOff)
        {
            ClaimProc cp = new ClaimProc();

            cp.ProcNum    = procNum;
            cp.PatNum     = patNum;
            cp.PlanNum    = planNum;
            cp.InsSubNum  = subNum;
            cp.InsPayAmt  = amtPaid;
            cp.DedApplied = dedApplied;
            cp.WriteOff   = writeOff;
            cp.Status     = ClaimProcStatus.Received;
            cp.DateCP     = DateTime.Today;
            cp.ProcDate   = DateTime.Today;
            ClaimProcs.Insert(cp);
        }
        ///<summary>Returns true if InsPayNoWriteoffMoreThanProc preference is turned on and the sum of write off amount is greater than the proc fee.
        ///Otherwise returns false </summary>
        private bool IsWriteOffGreaterThanProcFee()
        {
            if (!PrefC.GetBool(PrefName.InsPayNoWriteoffMoreThanProc))
            {
                return(false);               //InsPayNoWriteoffMoreThanProc preference is off. No need to check.
            }
            List <ClaimProc>  listClaimProcsForPat  = ClaimProcs.Refresh(PatCur.PatNum);
            List <Adjustment> listAdjustmentsForPat = Adjustments.GetForProcs(ClaimProcsToEdit.Select(x => x.ProcNum).Where(x => x != 0).ToList());
            bool          isWriteoffGreater         = false;
            List <string> listProcDescripts         = new List <string>();

            for (int i = 0; i < ClaimProcsToEdit.Length; i++)
            {
                ClaimProc claimProcCur = ClaimProcsToEdit[i];
                //Fetch all adjustments for the given procedure.
                List <Adjustment> listClaimProcAdjustments = listAdjustmentsForPat.Where(x => x.ProcNum == claimProcCur.ProcNum).ToList();
                int     writeoffIdx = gridMain.ListGridColumns.GetIndex(Lan.g("TableClaimProc", "Writeoff"));
                int     feeAcctIdx  = gridMain.ListGridColumns.GetIndex(Lan.g("TableClaimProc", "Fee"));
                decimal writeOff    = (decimal)ClaimProcs.ProcWriteoff(listClaimProcsForPat.FindAll(x => x.ClaimProcNum != claimProcCur.ClaimProcNum), claimProcCur.ProcNum)
                                      + PIn.Decimal(gridMain.ListGridRows[i].Cells[writeoffIdx].Text);
                decimal feeAcct = PIn.Decimal(gridMain.ListGridRows[i].Cells[feeAcctIdx].Text);
                decimal adjAcct = listClaimProcAdjustments.Sum(x => (decimal)x.AdjAmt);
                //Any changes to this calculation should also consider FormClaimProc.IsWriteOffGreaterThanProc().
                decimal writeoffRem = feeAcct - writeOff + adjAcct;
                isWriteoffGreater |= (writeoffRem.IsLessThanZero() && writeOff.IsGreaterThanZero());
                if (writeoffRem.IsLessThanZero() && writeOff.IsGreaterThanZero())
                {
                    Procedure proc = Procedures.GetProcFromList(ProcList, claimProcCur.ProcNum);                 //will return a new procedure if none found.
                    listProcDescripts.Add((proc == null ? "" : ProcedureCodes.GetProcCode(proc.CodeNum).ProcCode)
                                          + "\t" + Lan.g(this, "Fee") + ": " + feeAcct.ToString("F")
                                          + "\t" + Lan.g(this, "Adjustments") + ": " + adjAcct.ToString("F")
                                          + "\t" + Lan.g(this, "Write-off") + ": " + (Math.Abs(-writeOff)).ToString("F")
                                          + "\t" + Lan.g(this, "Remaining") + ": (" + Math.Abs(writeoffRem).ToString("F") + ")");
                }
            }
            if (isWriteoffGreater)
            {
                MsgBoxCopyPaste msgBox = new MsgBoxCopyPaste(Lan.g(this, "Write-off amount is greater than the adjusted procedure fee for the following "
                                                                   + "procedure(s)") + ":\r\n" + string.Join("\r\n", listProcDescripts) + "\r\n" + Lan.g(this, "Not allowed to continue."));
                msgBox.Text = Lan.g(this, "Excessive Write-off");
                msgBox.ShowDialog();
                return(true);
            }
            return(false);
        }
Beispiel #21
0
        public void LedgersTests_ComputeAgingProcLifo_InsWoEst_And_InsPayEst()
        {
            string        suffix  = MethodBase.GetCurrentMethod().Name;
            Patient       pat     = PatientT.CreatePatient(fName: "Aging_InsEst", suffix: suffix);
            InsuranceInfo insInfo = InsuranceT.AddInsurance(pat, "AgingInsEst");
            Procedure     proc95  = ProcedureT.CreateProcedure(pat, "D0270", ProcStat.C, "", 1000, DateTime.Today.AddDays(-95));
            ClaimProc     cp95    = new ClaimProc();

            ClaimProcs.CreateEst(cp95, proc95, insInfo.PriInsPlan, insInfo.PriInsSub);
            cp95.Status      = ClaimProcStatus.NotReceived;
            cp95.InsEstTotal = 800;
            cp95.InsPayEst   = 800;
            cp95.WriteOffEst = 200;
            cp95.WriteOff    = 200;
            ClaimProcs.Update(cp95);
            Procedure proc85 = ProcedureT.CreateProcedure(pat, "D1110", ProcStat.C, "", 100, DateTime.Today.AddDays(-85));
            ClaimProc cp85   = new ClaimProc();

            ClaimProcs.CreateEst(cp85, proc85, insInfo.PriInsPlan, insInfo.PriInsSub);
            cp85.Status      = ClaimProcStatus.NotReceived;
            cp85.InsEstTotal = 60;
            cp85.InsPayEst   = 60;
            cp85.WriteOffEst = 40;
            cp85.WriteOff    = 40;
            ClaimProcs.Update(cp85);
            int agingProcLifoPrev = PrefC.GetInt(PrefName.AgingProcLifo);

            try {
                PrefT.UpdateInt(PrefName.AgingProcLifo, (int)YN.No);
                Dictionary <long, DataRow> dictAging = Ledgers.GetAgingGuarTransTable(DateTime.Today, new List <long> {
                    pat.Guarantor
                });
                Assert.AreEqual(PIn.Double(dictAging[pat.Guarantor]["InsPayEst"].ToString()), 860);
                Assert.AreEqual(PIn.Double(dictAging[pat.Guarantor]["InsWoEst"].ToString()), 240);
                PrefT.UpdateInt(PrefName.AgingProcLifo, (int)YN.Yes);
                dictAging = Ledgers.GetAgingGuarTransTable(DateTime.Today, new List <long> {
                    pat.Guarantor
                });
                Assert.AreEqual(PIn.Double(dictAging[pat.Guarantor]["InsPayEst"].ToString()), 860);
                Assert.AreEqual(PIn.Double(dictAging[pat.Guarantor]["InsWoEst"].ToString()), 240);
            }
            finally {
                PrefT.UpdateInt(PrefName.AgingProcLifo, agingProcLifoPrev);
            }
        }
Beispiel #22
0
        public void Claims_CalculateAndUpdate_ProcedureCodeDowngradeHigherFee()
        {
            string  suffix         = "61";
            Patient pat            = PatientT.CreatePatient(suffix);
            long    ucrFeeSchedNum = FeeSchedT.CreateFeeSched(FeeScheduleType.Normal, "UCR Fees" + suffix);
            long    ppoFeeSchedNum = FeeSchedT.CreateFeeSched(FeeScheduleType.Normal, "PPO Downgrades" + suffix);
            Carrier carrier        = CarrierT.CreateCarrier(suffix);
            InsPlan plan           = InsPlanT.CreateInsPlan(carrier.CarrierNum);
            InsSub  sub            = InsSubT.CreateInsSub(pat.PatNum, plan.PlanNum);
            long    subNum         = sub.InsSubNum;

            BenefitT.CreateCategoryPercent(plan.PlanNum, EbenefitCategory.Restorative, 100);
            PatPlanT.CreatePatPlan(1, pat.PatNum, subNum);
            ProcedureCode originalProcCode  = ProcedureCodes.GetProcCode("D2391");
            ProcedureCode downgradeProcCode = ProcedureCodes.GetProcCode("D2140");

            originalProcCode.SubstitutionCode = "D2140";
            originalProcCode.SubstOnlyIf      = SubstitutionCondition.Always;
            ProcedureCodes.Update(originalProcCode);
            FeeT.CreateFee(ucrFeeSchedNum, originalProcCode.CodeNum, 140);
            FeeT.CreateFee(ucrFeeSchedNum, downgradeProcCode.CodeNum, 120);
            FeeT.CreateFee(ppoFeeSchedNum, originalProcCode.CodeNum, 80);
            FeeT.CreateFee(ppoFeeSchedNum, downgradeProcCode.CodeNum, 100);
            Procedure        proc             = ProcedureT.CreateProcedure(pat, "D2391", ProcStat.C, "1", 140);//Tooth 1
            List <ClaimProc> claimProcs       = ClaimProcs.Refresh(pat.PatNum);
            List <ClaimProc> claimProcListOld = new List <ClaimProc>();
            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 <Procedure> ProcList    = Procedures.Refresh(pat.PatNum);
            InsPlan          insPlan     = planList[0];//Should only be one
            InsPlan          planOld     = insPlan.Copy();

            insPlan.PlanType = "p";
            insPlan.FeeSched = ppoFeeSchedNum;
            InsPlans.Update(insPlan, planOld);
            //Creates the claim in the same manner as the account module, including estimates.
            Claim     claim  = ClaimT.CreateClaim("P", patPlans, planList, claimProcs, ProcList, pat, ProcList, benefitList, subList);
            ClaimProc clProc = ClaimProcs.Refresh(pat.PatNum)[0];          //Should only be one

            Assert.AreEqual(80, clProc.InsEstTotal);
            Assert.AreEqual(60, clProc.WriteOff);
        }
Beispiel #23
0
        ///<summary>Updates one ClaimProc in the database.</summary>
        internal static void Update(ClaimProc claimProc)
        {
            string command = "UPDATE claimproc SET "
                             + "ProcNum             =  " + POut.Long(claimProc.ProcNum) + ", "
                             + "ClaimNum            =  " + POut.Long(claimProc.ClaimNum) + ", "
                             + "PatNum              =  " + POut.Long(claimProc.PatNum) + ", "
                             + "ProvNum             =  " + POut.Long(claimProc.ProvNum) + ", "
                             + "FeeBilled           = '" + POut.Double(claimProc.FeeBilled) + "', "
                             + "InsPayEst           = '" + POut.Double(claimProc.InsPayEst) + "', "
                             + "DedApplied          = '" + POut.Double(claimProc.DedApplied) + "', "
                             + "Status              =  " + POut.Int((int)claimProc.Status) + ", "
                             + "InsPayAmt           = '" + POut.Double(claimProc.InsPayAmt) + "', "
                             + "Remarks             = '" + POut.String(claimProc.Remarks) + "', "
                             + "ClaimPaymentNum     =  " + POut.Long(claimProc.ClaimPaymentNum) + ", "
                             + "PlanNum             =  " + POut.Long(claimProc.PlanNum) + ", "
                             + "DateCP              =  " + POut.Date(claimProc.DateCP) + ", "
                             + "WriteOff            = '" + POut.Double(claimProc.WriteOff) + "', "
                             + "CodeSent            = '" + POut.String(claimProc.CodeSent) + "', "
                             + "AllowedOverride     = '" + POut.Double(claimProc.AllowedOverride) + "', "
                             + "Percentage          =  " + POut.Int(claimProc.Percentage) + ", "
                             + "PercentOverride     =  " + POut.Int(claimProc.PercentOverride) + ", "
                             + "CopayAmt            = '" + POut.Double(claimProc.CopayAmt) + "', "
                             + "NoBillIns           =  " + POut.Bool(claimProc.NoBillIns) + ", "
                             + "PaidOtherIns        = '" + POut.Double(claimProc.PaidOtherIns) + "', "
                             + "BaseEst             = '" + POut.Double(claimProc.BaseEst) + "', "
                             + "CopayOverride       = '" + POut.Double(claimProc.CopayOverride) + "', "
                             + "ProcDate            =  " + POut.Date(claimProc.ProcDate) + ", "
                             + "DateEntry           =  " + POut.Date(claimProc.DateEntry) + ", "
                             + "LineNumber          =  " + POut.Byte(claimProc.LineNumber) + ", "
                             + "DedEst              = '" + POut.Double(claimProc.DedEst) + "', "
                             + "DedEstOverride      = '" + POut.Double(claimProc.DedEstOverride) + "', "
                             + "InsEstTotal         = '" + POut.Double(claimProc.InsEstTotal) + "', "
                             + "InsEstTotalOverride = '" + POut.Double(claimProc.InsEstTotalOverride) + "', "
                             + "PaidOtherInsOverride= '" + POut.Double(claimProc.PaidOtherInsOverride) + "', "
                             + "EstimateNote        = '" + POut.String(claimProc.EstimateNote) + "', "
                             + "WriteOffEst         = '" + POut.Double(claimProc.WriteOffEst) + "', "
                             + "WriteOffEstOverride = '" + POut.Double(claimProc.WriteOffEstOverride) + "', "
                             + "ClinicNum           =  " + POut.Long(claimProc.ClinicNum) + ", "
                             + "InsSubNum           =  " + POut.Long(claimProc.InsSubNum) + ", "
                             + "PaymentRow          =  " + POut.Int(claimProc.PaymentRow) + " "
                             + "WHERE ClaimProcNum = " + POut.Long(claimProc.ClaimProcNum);

            Db.NonQ(command);
        }
Beispiel #24
0
        ///<summary></summary>
        public static ClaimProc[] Refresh(int patNum)
        {
            string command =
                "SELECT * from claimproc "
                + "WHERE PatNum = '" + patNum.ToString() + "' ORDER BY LineNumber";
            DataTable table = General.GetTable(command);

            ClaimProc[] List = new ClaimProc[table.Rows.Count];
            for (int i = 0; i < List.Length; i++)
            {
                List[i] = new ClaimProc();
                List[i].ClaimProcNum    = PIn.PInt(table.Rows[i][0].ToString());
                List[i].ProcNum         = PIn.PInt(table.Rows[i][1].ToString());
                List[i].ClaimNum        = PIn.PInt(table.Rows[i][2].ToString());
                List[i].PatNum          = PIn.PInt(table.Rows[i][3].ToString());
                List[i].ProvNum         = PIn.PInt(table.Rows[i][4].ToString());
                List[i].FeeBilled       = PIn.PDouble(table.Rows[i][5].ToString());
                List[i].InsPayEst       = PIn.PDouble(table.Rows[i][6].ToString());
                List[i].DedApplied      = PIn.PDouble(table.Rows[i][7].ToString());
                List[i].Status          = (ClaimProcStatus)PIn.PInt(table.Rows[i][8].ToString());
                List[i].InsPayAmt       = PIn.PDouble(table.Rows[i][9].ToString());
                List[i].Remarks         = PIn.PString(table.Rows[i][10].ToString());
                List[i].ClaimPaymentNum = PIn.PInt(table.Rows[i][11].ToString());
                List[i].PlanNum         = PIn.PInt(table.Rows[i][12].ToString());
                List[i].DateCP          = PIn.PDate(table.Rows[i][13].ToString());
                List[i].WriteOff        = PIn.PDouble(table.Rows[i][14].ToString());
                List[i].CodeSent        = PIn.PString(table.Rows[i][15].ToString());
                List[i].AllowedAmt      = PIn.PDouble(table.Rows[i][16].ToString());
                List[i].Percentage      = PIn.PInt(table.Rows[i][17].ToString());
                List[i].PercentOverride = PIn.PInt(table.Rows[i][18].ToString());
                List[i].CopayAmt        = PIn.PDouble(table.Rows[i][19].ToString());
                List[i].OverrideInsEst  = PIn.PDouble(table.Rows[i][20].ToString());
                List[i].NoBillIns       = PIn.PBool(table.Rows[i][21].ToString());
                List[i].DedBeforePerc   = PIn.PBool(table.Rows[i][22].ToString());
                List[i].OverAnnualMax   = PIn.PDouble(table.Rows[i][23].ToString());
                List[i].PaidOtherIns    = PIn.PDouble(table.Rows[i][24].ToString());
                List[i].BaseEst         = PIn.PDouble(table.Rows[i][25].ToString());
                List[i].CopayOverride   = PIn.PDouble(table.Rows[i][26].ToString());
                List[i].ProcDate        = PIn.PDate(table.Rows[i][27].ToString());
                List[i].DateEntry       = PIn.PDate(table.Rows[i][28].ToString());
                List[i].LineNumber      = PIn.PInt(table.Rows[i][29].ToString());
            }
            return(List);
        }
Beispiel #25
0
        ///<summary>Converts the supplied list into a list of ClaimProcs for one claim.</summary>
        public static ClaimProc[] GetForClaim(ClaimProc[] List, int claimNum)
        {
            //MessageBox.Show(List.Length.ToString());
            ArrayList ALForClaim = new ArrayList();

            for (int i = 0; i < List.Length; i++)
            {
                if (List[i].ClaimNum == claimNum)
                {
                    ALForClaim.Add(List[i]);
                }
            }
            ClaimProc[] ForClaim = new ClaimProc[ALForClaim.Count];
            for (int i = 0; i < ALForClaim.Count; i++)
            {
                ForClaim[i] = (ClaimProc)ALForClaim[i];
            }
            return(ForClaim);
        }
        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);
        }
Beispiel #27
0
        public static ClaimProc CreateClaimProc(long patNum, long procNum, long planNum, long insSubNum, DateTime procDate, double copayOverride,
                                                double allowedOverride, int percentOverride, ClaimProcStatus cps = ClaimProcStatus.NotReceived, int insPayAmt = 0)
        {
            ClaimProc cp = new ClaimProc();

            cp.PatNum               = patNum;
            cp.ProcNum              = procNum;
            cp.PlanNum              = planNum;
            cp.ProcDate             = procDate;
            cp.InsSubNum            = insSubNum;
            cp.CopayOverride        = copayOverride;
            cp.AllowedOverride      = allowedOverride;
            cp.PercentOverride      = percentOverride;
            cp.InsEstTotalOverride  = -1;
            cp.WriteOffEstOverride  = -1;
            cp.PaidOtherInsOverride = -1;
            cp.Status               = cps;
            cp.InsPayAmt            = insPayAmt;
            ClaimProcs.Insert(cp);
            return(cp);
        }
Beispiel #28
0
        public void X835_TryGetMatchedClaimProc_AllProcsMatched()
        {
            //Will return if payment already entered.
            //Must enter payment to match claim procs since they consider financial information.
            TryEnterPayment(_x835, _eraJustinSmithClaim, _claimPrimaryJustinSmith, true);
            List <ClaimProc> listClaimProcs = ClaimProcs.Refresh(_claimPrimaryJustinSmith.PatNum);         //TODO: limit list to claimProcs for primary claim only.
            //Mimics X835.Hx835_Claim.IsProcessed(...)
            List <Hx835_Proc> listProcsNotMatched = new List <Hx835_Proc>();

            foreach (Hx835_Proc proc in _eraJustinSmithClaim.ListProcs)
            {
                ClaimProc matchedClaimProc = null;
                if (!proc.TryGetMatchedClaimProc(out matchedClaimProc, listClaimProcs, false))
                {
                    listProcsNotMatched.Add(proc);
                    continue;
                }
                listClaimProcs.Remove(matchedClaimProc);                //So it cannot be matched twice.
            }
            Assert.AreEqual(0, listProcsNotMatched.Count);
        }
        ///<summary>Called when validating split claim seleciton information.
        ///Returns true if the selected claims claimProcs sum up to the sub set proc information present on this split claim.</summary>
        private bool HasValidSplitClaimTotals()
        {
            double splitClaimFee = 0;

            foreach (Hx835_Proc proc in _x835Claim.ListProcs)
            {
                ClaimProc matchedClaimProc = _listClaimProcsForClaim.FirstOrDefault(x =>
                                                                                    //Mimics proc matching in claimPaid.GetPaymentsForClaimProcs(...)
                                                                                    x.ProcNum != 0 && ((x.ProcNum == proc.ProcNum) ||
                                                                                                       (x.CodeSent == proc.ProcCodeBilled &&
                                                                                                        (decimal)x.FeeBilled == proc.ProcFee &&
                                                                                                        x.TagOD != null))//Tag set in FillClaimDetails(...)
                                                                                    );
                if (matchedClaimProc == null)
                {
                    return(false);                   //The ERA proc could not be matched to any of the selected claims claim procs.
                }
                splitClaimFee += matchedClaimProc.FeeBilled;
            }
            return((decimal)splitClaimFee == _x835Claim.ClaimFee);
        }
 private void MakeAuditTrailEntries()
 {
     foreach (ClaimProc claimProc in ClaimProcsToEdit)
     {
         string    strProcCode  = ProcedureCodes.GetStringProcCode(Procedures.GetOneProc(claimProc.ProcNum, false).CodeNum);
         ClaimProc oldClaimProc = _listClaimProcsOld.FirstOrDefault(x => x.ProcNum == claimProc.ProcNum);
         if (oldClaimProc != null)               //Shouldn't be null, but if somehow it is, do not log changes since we do not know what it changed from.
         {
             double procOldWriteoffAmt = oldClaimProc.WriteOff;
             double procOldInsAmt      = oldClaimProc.InsPayAmt;
             if (claimProc.WriteOff != procOldWriteoffAmt)
             {
                 SecurityLogs.MakeLogEntry(Permissions.InsWriteOffEdit, claimProc.PatNum, $"Writeoff amount for procedure {strProcCode}, " +
                                           $"changed from ${procOldWriteoffAmt.ToString("C")} to ${claimProc.WriteOff.ToString("C")}");
             }
             if (claimProc.InsPayAmt != procOldInsAmt)
             {
                 SecurityLogs.MakeLogEntry(Permissions.InsPayEdit, claimProc.PatNum, $"Insurance payment amount for procedure {strProcCode}, " +
                                           $"changed from ${procOldInsAmt.ToString("C")} to ${claimProc.InsPayAmt.ToString("C")}");
             }
         }
     }
 }
Beispiel #31
0
 ///<summary>Used when creating a claim to create any missing claimProcs. Also used in FormProcEdit if click button to add Estimate.  Inserts it into db. It will still be altered after this to fill in the fields that actually attach it to the claim.</summary>
 public static void CreateEst(ClaimProc cp, Procedure proc, InsPlan plan)
 {
     cp.ProcNum = proc.ProcNum;
     //claimnum
     cp.PatNum  = proc.PatNum;
     cp.ProvNum = proc.ProvNum;
     if (plan.PlanType == "c")                        //capitation
     {
         if (proc.ProcStatus == ProcStat.C)           //complete
         {
             cp.Status = ClaimProcStatus.CapComplete; //in this case, a copy will be made later.
         }
         else                                         //usually TP status
         {
             cp.Status = ClaimProcStatus.CapEstimate;
         }
     }
     else
     {
         cp.Status = ClaimProcStatus.Estimate;
     }
     cp.PlanNum = plan.PlanNum;
     cp.DateCP  = proc.ProcDate;
     //Writeoff=0
     cp.AllowedAmt      = -1;
     cp.Percentage      = -1;
     cp.PercentOverride = -1;
     cp.CopayAmt        = -1;
     cp.OverrideInsEst  = -1;
     cp.NoBillIns       = false;
     cp.OverAnnualMax   = -1;
     cp.PaidOtherIns    = -1;
     cp.BaseEst         = 0;
     cp.CopayOverride   = -1;
     cp.ProcDate        = proc.ProcDate;
     Insert(cp);
 }
Beispiel #32
0
        ///<summary></summary>
        public static void Update(ClaimProc cp)
        {
            string command = "UPDATE claimproc SET "
                             + "ProcNum = '" + POut.PInt(cp.ProcNum) + "'"
                             + ",ClaimNum = '" + POut.PInt(cp.ClaimNum) + "' "
                             + ",PatNum = '" + POut.PInt(cp.PatNum) + "'"
                             + ",ProvNum = '" + POut.PInt(cp.ProvNum) + "'"
                             + ",FeeBilled = '" + POut.PDouble(cp.FeeBilled) + "'"
                             + ",InsPayEst = '" + POut.PDouble(cp.InsPayEst) + "'"
                             + ",DedApplied = '" + POut.PDouble(cp.DedApplied) + "'"
                             + ",Status = '" + POut.PInt((int)cp.Status) + "'"
                             + ",InsPayAmt = '" + POut.PDouble(cp.InsPayAmt) + "'"
                             + ",Remarks = '" + POut.PString(cp.Remarks) + "'"
                             + ",ClaimPaymentNum= '" + POut.PInt(cp.ClaimPaymentNum) + "'"
                             + ",PlanNum= '" + POut.PInt(cp.PlanNum) + "'"
                             + ",DateCP= " + POut.PDate(cp.DateCP)
                             + ",WriteOff= '" + POut.PDouble(cp.WriteOff) + "'"
                             + ",CodeSent= '" + POut.PString(cp.CodeSent) + "'"
                             + ",AllowedAmt= '" + POut.PDouble(cp.AllowedAmt) + "'"
                             + ",Percentage= '" + POut.PInt(cp.Percentage) + "'"
                             + ",PercentOverride= '" + POut.PInt(cp.PercentOverride) + "'"
                             + ",CopayAmt= '" + POut.PDouble(cp.CopayAmt) + "'"
                             + ",OverrideInsEst= '" + POut.PDouble(cp.OverrideInsEst) + "'"
                             + ",NoBillIns= '" + POut.PBool(cp.NoBillIns) + "'"
                             + ",DedBeforePerc= '" + POut.PBool(cp.DedBeforePerc) + "'"
                             + ",OverAnnualMax= '" + POut.PDouble(cp.OverAnnualMax) + "'"
                             + ",PaidOtherIns= '" + POut.PDouble(cp.PaidOtherIns) + "'"
                             + ",BaseEst= '" + POut.PDouble(cp.BaseEst) + "'"
                             + ",CopayOverride= '" + POut.PDouble(cp.CopayOverride) + "'"
                             + ",ProcDate= " + POut.PDate(cp.ProcDate)
                             + ",DateEntry= " + POut.PDate(cp.DateEntry)
                             + ",LineNumber= '" + POut.PInt(cp.LineNumber) + "'"
                             + " WHERE claimprocnum = '" + POut.PInt(cp.ClaimProcNum) + "'";

            //MessageBox.Show(string command);
            General.NonQ(command);
        }
Beispiel #33
0
        ///<summary>Gets all ClaimProcs for the current Procedure. The List must be all ClaimProcs for this patient.</summary>
        public static ClaimProc[] GetForProc(ClaimProc[] List, int procNum)
        {
            //MessageBox.Show(List.Length.ToString());
            ArrayList ALForProc = new ArrayList();

            for (int i = 0; i < List.Length; i++)
            {
                if (List[i].ProcNum == procNum)
                {
                    ALForProc.Add(List[i]);
                }
            }
            //need to sort by pri, sec, etc.  BUT,
            //the only way to do it would be to add an ordinal field to claimprocs or something similar.
            //Then a sorter could be built.  Otherwise, we don't know which order to put them in.
            //Maybe supply PatPlanList to this function, because it's ordered.
            //But, then if patient changes ins, it will 'forget' which is pri and which is sec.
            ClaimProc[] ForProc = new ClaimProc[ALForProc.Count];
            for (int i = 0; i < ALForProc.Count; i++)
            {
                ForProc[i] = (ClaimProc)ALForProc[i];
            }
            return(ForProc);
        }
Beispiel #34
0
 ///<summary>Updates one ClaimProc in the database.</summary>
 internal static void Update(ClaimProc claimProc)
 {
     string command="UPDATE claimproc SET "
         +"ProcNum             =  "+POut.Long  (claimProc.ProcNum)+", "
         +"ClaimNum            =  "+POut.Long  (claimProc.ClaimNum)+", "
         +"PatNum              =  "+POut.Long  (claimProc.PatNum)+", "
         +"ProvNum             =  "+POut.Long  (claimProc.ProvNum)+", "
         +"FeeBilled           = '"+POut.Double(claimProc.FeeBilled)+"', "
         +"InsPayEst           = '"+POut.Double(claimProc.InsPayEst)+"', "
         +"DedApplied          = '"+POut.Double(claimProc.DedApplied)+"', "
         +"Status              =  "+POut.Int   ((int)claimProc.Status)+", "
         +"InsPayAmt           = '"+POut.Double(claimProc.InsPayAmt)+"', "
         +"Remarks             = '"+POut.String(claimProc.Remarks)+"', "
         +"ClaimPaymentNum     =  "+POut.Long  (claimProc.ClaimPaymentNum)+", "
         +"PlanNum             =  "+POut.Long  (claimProc.PlanNum)+", "
         +"DateCP              =  "+POut.Date  (claimProc.DateCP)+", "
         +"WriteOff            = '"+POut.Double(claimProc.WriteOff)+"', "
         +"CodeSent            = '"+POut.String(claimProc.CodeSent)+"', "
         +"AllowedOverride     = '"+POut.Double(claimProc.AllowedOverride)+"', "
         +"Percentage          =  "+POut.Int   (claimProc.Percentage)+", "
         +"PercentOverride     =  "+POut.Int   (claimProc.PercentOverride)+", "
         +"CopayAmt            = '"+POut.Double(claimProc.CopayAmt)+"', "
         +"NoBillIns           =  "+POut.Bool  (claimProc.NoBillIns)+", "
         +"PaidOtherIns        = '"+POut.Double(claimProc.PaidOtherIns)+"', "
         +"BaseEst             = '"+POut.Double(claimProc.BaseEst)+"', "
         +"CopayOverride       = '"+POut.Double(claimProc.CopayOverride)+"', "
         +"ProcDate            =  "+POut.Date  (claimProc.ProcDate)+", "
         +"DateEntry           =  "+POut.Date  (claimProc.DateEntry)+", "
         +"LineNumber          =  "+POut.Byte  (claimProc.LineNumber)+", "
         +"DedEst              = '"+POut.Double(claimProc.DedEst)+"', "
         +"DedEstOverride      = '"+POut.Double(claimProc.DedEstOverride)+"', "
         +"InsEstTotal         = '"+POut.Double(claimProc.InsEstTotal)+"', "
         +"InsEstTotalOverride = '"+POut.Double(claimProc.InsEstTotalOverride)+"', "
         +"PaidOtherInsOverride= '"+POut.Double(claimProc.PaidOtherInsOverride)+"', "
         +"EstimateNote        = '"+POut.String(claimProc.EstimateNote)+"', "
         +"WriteOffEst         = '"+POut.Double(claimProc.WriteOffEst)+"', "
         +"WriteOffEstOverride = '"+POut.Double(claimProc.WriteOffEstOverride)+"', "
         +"ClinicNum           =  "+POut.Long  (claimProc.ClinicNum)+", "
         +"InsSubNum           =  "+POut.Long  (claimProc.InsSubNum)+", "
         +"PaymentRow          =  "+POut.Int   (claimProc.PaymentRow)+" "
         +"WHERE ClaimProcNum = "+POut.Long(claimProc.ClaimProcNum);
     Db.NonQ(command);
 }
Beispiel #35
0
 ///<summary>Updates one ClaimProc in the database.  Uses an old object to compare to, and only alters changed fields.  This prevents collisions and concurrency problems in heavily used tables.</summary>
 internal static void Update(ClaimProc claimProc,ClaimProc oldClaimProc)
 {
     string command="";
     if(claimProc.ProcNum != oldClaimProc.ProcNum) {
         if(command!=""){ command+=",";}
         command+="ProcNum = "+POut.Long(claimProc.ProcNum)+"";
     }
     if(claimProc.ClaimNum != oldClaimProc.ClaimNum) {
         if(command!=""){ command+=",";}
         command+="ClaimNum = "+POut.Long(claimProc.ClaimNum)+"";
     }
     if(claimProc.PatNum != oldClaimProc.PatNum) {
         if(command!=""){ command+=",";}
         command+="PatNum = "+POut.Long(claimProc.PatNum)+"";
     }
     if(claimProc.ProvNum != oldClaimProc.ProvNum) {
         if(command!=""){ command+=",";}
         command+="ProvNum = "+POut.Long(claimProc.ProvNum)+"";
     }
     if(claimProc.FeeBilled != oldClaimProc.FeeBilled) {
         if(command!=""){ command+=",";}
         command+="FeeBilled = '"+POut.Double(claimProc.FeeBilled)+"'";
     }
     if(claimProc.InsPayEst != oldClaimProc.InsPayEst) {
         if(command!=""){ command+=",";}
         command+="InsPayEst = '"+POut.Double(claimProc.InsPayEst)+"'";
     }
     if(claimProc.DedApplied != oldClaimProc.DedApplied) {
         if(command!=""){ command+=",";}
         command+="DedApplied = '"+POut.Double(claimProc.DedApplied)+"'";
     }
     if(claimProc.Status != oldClaimProc.Status) {
         if(command!=""){ command+=",";}
         command+="Status = "+POut.Int   ((int)claimProc.Status)+"";
     }
     if(claimProc.InsPayAmt != oldClaimProc.InsPayAmt) {
         if(command!=""){ command+=",";}
         command+="InsPayAmt = '"+POut.Double(claimProc.InsPayAmt)+"'";
     }
     if(claimProc.Remarks != oldClaimProc.Remarks) {
         if(command!=""){ command+=",";}
         command+="Remarks = '"+POut.String(claimProc.Remarks)+"'";
     }
     if(claimProc.ClaimPaymentNum != oldClaimProc.ClaimPaymentNum) {
         if(command!=""){ command+=",";}
         command+="ClaimPaymentNum = "+POut.Long(claimProc.ClaimPaymentNum)+"";
     }
     if(claimProc.PlanNum != oldClaimProc.PlanNum) {
         if(command!=""){ command+=",";}
         command+="PlanNum = "+POut.Long(claimProc.PlanNum)+"";
     }
     if(claimProc.DateCP != oldClaimProc.DateCP) {
         if(command!=""){ command+=",";}
         command+="DateCP = "+POut.Date(claimProc.DateCP)+"";
     }
     if(claimProc.WriteOff != oldClaimProc.WriteOff) {
         if(command!=""){ command+=",";}
         command+="WriteOff = '"+POut.Double(claimProc.WriteOff)+"'";
     }
     if(claimProc.CodeSent != oldClaimProc.CodeSent) {
         if(command!=""){ command+=",";}
         command+="CodeSent = '"+POut.String(claimProc.CodeSent)+"'";
     }
     if(claimProc.AllowedOverride != oldClaimProc.AllowedOverride) {
         if(command!=""){ command+=",";}
         command+="AllowedOverride = '"+POut.Double(claimProc.AllowedOverride)+"'";
     }
     if(claimProc.Percentage != oldClaimProc.Percentage) {
         if(command!=""){ command+=",";}
         command+="Percentage = "+POut.Int(claimProc.Percentage)+"";
     }
     if(claimProc.PercentOverride != oldClaimProc.PercentOverride) {
         if(command!=""){ command+=",";}
         command+="PercentOverride = "+POut.Int(claimProc.PercentOverride)+"";
     }
     if(claimProc.CopayAmt != oldClaimProc.CopayAmt) {
         if(command!=""){ command+=",";}
         command+="CopayAmt = '"+POut.Double(claimProc.CopayAmt)+"'";
     }
     if(claimProc.NoBillIns != oldClaimProc.NoBillIns) {
         if(command!=""){ command+=",";}
         command+="NoBillIns = "+POut.Bool(claimProc.NoBillIns)+"";
     }
     if(claimProc.PaidOtherIns != oldClaimProc.PaidOtherIns) {
         if(command!=""){ command+=",";}
         command+="PaidOtherIns = '"+POut.Double(claimProc.PaidOtherIns)+"'";
     }
     if(claimProc.BaseEst != oldClaimProc.BaseEst) {
         if(command!=""){ command+=",";}
         command+="BaseEst = '"+POut.Double(claimProc.BaseEst)+"'";
     }
     if(claimProc.CopayOverride != oldClaimProc.CopayOverride) {
         if(command!=""){ command+=",";}
         command+="CopayOverride = '"+POut.Double(claimProc.CopayOverride)+"'";
     }
     if(claimProc.ProcDate != oldClaimProc.ProcDate) {
         if(command!=""){ command+=",";}
         command+="ProcDate = "+POut.Date(claimProc.ProcDate)+"";
     }
     if(claimProc.DateEntry != oldClaimProc.DateEntry) {
         if(command!=""){ command+=",";}
         command+="DateEntry = "+POut.Date(claimProc.DateEntry)+"";
     }
     if(claimProc.LineNumber != oldClaimProc.LineNumber) {
         if(command!=""){ command+=",";}
         command+="LineNumber = "+POut.Byte(claimProc.LineNumber)+"";
     }
     if(claimProc.DedEst != oldClaimProc.DedEst) {
         if(command!=""){ command+=",";}
         command+="DedEst = '"+POut.Double(claimProc.DedEst)+"'";
     }
     if(claimProc.DedEstOverride != oldClaimProc.DedEstOverride) {
         if(command!=""){ command+=",";}
         command+="DedEstOverride = '"+POut.Double(claimProc.DedEstOverride)+"'";
     }
     if(claimProc.InsEstTotal != oldClaimProc.InsEstTotal) {
         if(command!=""){ command+=",";}
         command+="InsEstTotal = '"+POut.Double(claimProc.InsEstTotal)+"'";
     }
     if(claimProc.InsEstTotalOverride != oldClaimProc.InsEstTotalOverride) {
         if(command!=""){ command+=",";}
         command+="InsEstTotalOverride = '"+POut.Double(claimProc.InsEstTotalOverride)+"'";
     }
     if(claimProc.PaidOtherInsOverride != oldClaimProc.PaidOtherInsOverride) {
         if(command!=""){ command+=",";}
         command+="PaidOtherInsOverride = '"+POut.Double(claimProc.PaidOtherInsOverride)+"'";
     }
     if(claimProc.EstimateNote != oldClaimProc.EstimateNote) {
         if(command!=""){ command+=",";}
         command+="EstimateNote = '"+POut.String(claimProc.EstimateNote)+"'";
     }
     if(claimProc.WriteOffEst != oldClaimProc.WriteOffEst) {
         if(command!=""){ command+=",";}
         command+="WriteOffEst = '"+POut.Double(claimProc.WriteOffEst)+"'";
     }
     if(claimProc.WriteOffEstOverride != oldClaimProc.WriteOffEstOverride) {
         if(command!=""){ command+=",";}
         command+="WriteOffEstOverride = '"+POut.Double(claimProc.WriteOffEstOverride)+"'";
     }
     if(claimProc.ClinicNum != oldClaimProc.ClinicNum) {
         if(command!=""){ command+=",";}
         command+="ClinicNum = "+POut.Long(claimProc.ClinicNum)+"";
     }
     if(claimProc.InsSubNum != oldClaimProc.InsSubNum) {
         if(command!=""){ command+=",";}
         command+="InsSubNum = "+POut.Long(claimProc.InsSubNum)+"";
     }
     if(claimProc.PaymentRow != oldClaimProc.PaymentRow) {
         if(command!=""){ command+=",";}
         command+="PaymentRow = "+POut.Int(claimProc.PaymentRow)+"";
     }
     if(command==""){
         return;
     }
     command="UPDATE claimproc SET "+command
         +" WHERE ClaimProcNum = "+POut.Long(claimProc.ClaimProcNum);
     Db.NonQ(command);
 }