예제 #1
0
        ///<summary>Transfers unallocated to unearned (if present) and inserts those results into the database. Then performs transfer.
        ///This is the best representation of what the income transfer window currently does.</summary>
        public static PaymentEdit.IncomeTransferData BalanceAndIncomeTransfer(long patNum, Family fam, Payment regularTransferPayment
                                                                              , List <PayPlanCharge> payPlanCharges = null)
        {
            //get all paysplits associated to the family passed in
            List <PaySplit> listSplitsForPat = PaySplits.GetForPats(fam.ListPats.Select(x => x.PatNum).ToList());
            //perform unallocated transfer
            Payment unallocatedTransfer = MakePaymentNoSplits(patNum, 0, payDate: DateTime.Today);

            PaymentEdit.IncomeTransferData unallocatedResults = PaymentEdit.TransferUnallocatedSplitToUnearned(listSplitsForPat, unallocatedTransfer.PayNum);
            foreach (PaySplit split in unallocatedResults.ListSplitsCur)
            {
                if (split.SplitAmt.IsZero())
                {
                    continue;
                }
                PaySplits.Insert(split);
            }
            foreach (PaySplits.PaySplitAssociated splitAssociated in unallocatedResults.ListSplitsAssociated)
            {
                if (splitAssociated.PaySplitOrig != null && splitAssociated.PaySplitLinked != null)
                {
                    PaySplits.UpdateFSplitNum(splitAssociated.PaySplitOrig.SplitNum, splitAssociated.PaySplitLinked.SplitNum);
                }
            }
            if (payPlanCharges == null)
            {
                payPlanCharges = new List <PayPlanCharge>();
            }
            #region claim fix and transfer
            //both of these methods have objects that get immediately inserted into the database. While testing, a spcific call wil need to be made to delete.
            ClaimProcs.FixClaimsNoProcedures(fam.ListPats.Select(x => x.PatNum).ToList());             //make dummy procedures and claimprocs for claims missing procs.
            ClaimProcs.TransferClaimsAsTotalToProcedures(fam.ListPats.Select(x => x.PatNum).ToList()); //transfer AsTotals into claim procedures
            #endregion
            return(IncomeTransfer(patNum, fam, regularTransferPayment, payPlanCharges));
        }
예제 #2
0
        public static Payment MakePayment(long patNum, double payAmt, DateTime payDate, long payPlanNum = 0, long provNum = 0, long procNum = 0, long payType = 0,
                                          long clinicNum = 0, long unearnedType = 0, bool isRecurringCharge = false, DateTime recurringChargeDate             = default(DateTime), string externalId = ""
                                          , long adjNum  = 0)
        {
            Payment payment = new Payment();

            payment.PatNum              = patNum;
            payment.PayDate             = payDate;
            payment.PayAmt              = payAmt;
            payment.PayType             = payType;
            payment.ClinicNum           = clinicNum;
            payment.DateEntry           = payDate;
            payment.IsRecurringCC       = isRecurringCharge;
            payment.RecurringChargeDate = recurringChargeDate;
            payment.ExternalId          = externalId;
            Payments.Insert(payment);
            PaySplit split = new PaySplit();

            split.PayNum       = payment.PayNum;
            split.PatNum       = payment.PatNum;
            split.DatePay      = payDate;
            split.ClinicNum    = payment.ClinicNum;
            split.PayPlanNum   = payPlanNum;
            split.AdjNum       = adjNum;
            split.ProvNum      = provNum;
            split.ProcNum      = procNum;
            split.SplitAmt     = payAmt;
            split.DateEntry    = payDate;
            split.UnearnedType = unearnedType;
            PaySplits.Insert(split);
            return(payment);
        }
예제 #3
0
        public static Payment MakePayment(long patNum, double payAmt, DateTime payDate, long payPlanNum = 0, long provNum = 0, long procNum = 0, long payType = 0,
                                          long clinicNum = 0, long unearnedType = 0)
        {
            Payment payment = new Payment();

            payment.PatNum    = patNum;
            payment.PayDate   = payDate;
            payment.PayAmt    = payAmt;
            payment.PayType   = payType;
            payment.ClinicNum = clinicNum;
            payment.DateEntry = payDate;
            Payments.Insert(payment);
            PaySplit split = new PaySplit();

            split.PayNum       = payment.PayNum;
            split.PatNum       = payment.PatNum;
            split.DatePay      = payDate;
            split.ClinicNum    = payment.ClinicNum;
            split.PayPlanNum   = payPlanNum;
            split.ProvNum      = provNum;
            split.ProcNum      = procNum;
            split.SplitAmt     = payAmt;
            split.DateEntry    = payDate;
            split.UnearnedType = unearnedType;
            PaySplits.Insert(split);
            return(payment);
        }
예제 #4
0
 public static void InsertPrepaymentSplits(List <PaySplit> listPaysplits, List <PaySplits.PaySplitAssociated> listPaySplitsAssociated)
 {
     //Insert paysplits
     foreach (PaySplit ps in listPaysplits)
     {
         PaySplits.Insert(ps);
     }
     //Associate prepayments
     foreach (PaySplits.PaySplitAssociated split in listPaySplitsAssociated)
     {
         //Update the FSplitNum after inserts are made.
         if (split.PaySplitLinked != null && split.PaySplitOrig != null)
         {
             PaySplits.UpdateFSplitNum(split.PaySplitOrig.SplitNum, split.PaySplitLinked.SplitNum);
         }
     }
 }
예제 #5
0
        public static List <PaySplit> CreatePaySplitsForPrepayment(Procedure proc, double amtToUse, PaySplit prePaySplit = null, Clinic clinic = null, long prov = 0)
        {
            List <PaySplit> retVal    = new List <PaySplit>();
            long            clinicNum = prePaySplit?.ClinicNum ?? clinic?.ClinicNum ?? proc.ClinicNum;
            long            provNum   = prePaySplit?.ProvNum ?? prov;

            if (clinic != null)
            {
                clinicNum = clinic.ClinicNum;
            }
            if (prov != 0)
            {
                provNum = prov;
            }
            Def      unearnedType = Defs.GetDefByExactName(DefCat.PaySplitUnearnedType, "PrePayment") ?? DefinitionT.CreateDefinition(DefCat.PaySplitUnearnedType, "PrePayment");
            Def      payType      = Defs.GetDefByExactName(DefCat.PaymentTypes, "Check") ?? DefinitionT.CreateDefinition(DefCat.PaymentTypes, "Check");
            Payment  pay          = PaymentT.MakePaymentNoSplits(proc.PatNum, amtToUse, payDate: DateTime.Now, clinicNum: clinicNum, payType: unearnedType.DefNum);
            PaySplit splitNeg     = new PaySplit();

            splitNeg.PatNum       = prePaySplit?.PatNum ?? proc.PatNum;
            splitNeg.PayNum       = pay.PayNum;
            splitNeg.FSplitNum    = prePaySplit?.SplitNum ?? 0;
            splitNeg.ClinicNum    = clinicNum;
            splitNeg.ProvNum      = provNum;
            splitNeg.SplitAmt     = 0 - amtToUse;
            splitNeg.UnearnedType = prePaySplit?.UnearnedType ?? unearnedType.DefNum;
            splitNeg.DatePay      = DateTime.Now;
            PaySplits.Insert(splitNeg);
            retVal.Add(splitNeg);
            //Make a different paysplit attached to proc and prov they want to use it for.
            PaySplit splitPos = new PaySplit();

            splitPos.PatNum    = prePaySplit?.PatNum ?? proc.PatNum;
            splitPos.PayNum    = pay.PayNum;
            splitPos.FSplitNum = splitNeg.SplitNum;
            splitPos.ProvNum   = provNum;
            splitPos.ClinicNum = clinicNum;
            splitPos.SplitAmt  = amtToUse;
            splitPos.DatePay   = DateTime.Now;
            splitPos.ProcNum   = proc.ProcNum;
            PaySplits.Insert(splitPos);
            retVal.Add(splitPos);
            return(retVal);
        }
예제 #6
0
        public static PaySplit CreateSplit(long clinicNum, long patNum, long payNum, long payplanNum, DateTime procDate, long procNum, long provNum
                                           , double splitAmt, long unearnedType)
        {
            PaySplit paysplit = new PaySplit()
            {
                ClinicNum    = clinicNum,
                PatNum       = patNum,
                PayNum       = payNum,
                PayPlanNum   = payplanNum,
                ProcDate     = procDate,
                ProcNum      = procNum,
                ProvNum      = provNum,
                SplitAmt     = splitAmt,
                UnearnedType = unearnedType
            };

            PaySplits.Insert(paysplit);
            return(paysplit);
        }
예제 #7
0
        public static PaySplit CreatePrepayment(long patNum, int amt, DateTime datePay, long provNum = 0, long clinicNum = 0)
        {
            Def      unearnedType = Defs.GetDefByExactName(DefCat.PaySplitUnearnedType, "PrePayment") ?? DefinitionT.CreateDefinition(DefCat.PaySplitUnearnedType, "PrePayment");
            Def      payType      = Defs.GetDefByExactName(DefCat.PaymentTypes, "Check") ?? DefinitionT.CreateDefinition(DefCat.PaymentTypes, "Check");
            Payment  pay          = PaymentT.MakePaymentNoSplits(patNum, amt, datePay, clinicNum: clinicNum, payType: payType.DefNum);
            PaySplit split        = new PaySplit();

            split.PayNum       = pay.PayNum;
            split.PatNum       = pay.PatNum;
            split.DatePay      = datePay;
            split.ClinicNum    = pay.ClinicNum;
            split.PayPlanNum   = 0;
            split.ProvNum      = provNum;
            split.ProcNum      = 0;
            split.SplitAmt     = amt;
            split.DateEntry    = datePay;
            split.UnearnedType = unearnedType.DefNum;
            PaySplits.Insert(split);
            return(split);
        }
예제 #8
0
        ///<summary>Use when creating a TP prepayment or a hidden prepayment split (that does not necessariliy need to have a proc) </summary>
        public static PaySplit CreateTpPrepayment(long patNum, int amt, DateTime datePay, long provNum = 0, long clinicNum = 0, long procNum = 0, bool isHidden = false)
        {
            Def      unearnedType = Defs.GetDefsForCategory(DefCat.PaySplitUnearnedType).First(x => isHidden?x.ItemValue != "":x.ItemValue == "");
            Def      payType      = Defs.GetDefByExactName(DefCat.PaymentTypes, "Check") ?? DefT.CreateDefinition(DefCat.PaymentTypes, "Check");
            Payment  pay          = PaymentT.MakePaymentNoSplits(patNum, amt, datePay, clinicNum: clinicNum, payType: payType.DefNum);
            PaySplit split        = new PaySplit();

            split.PayNum       = pay.PayNum;
            split.PatNum       = pay.PatNum;
            split.DatePay      = datePay;
            split.ClinicNum    = pay.ClinicNum;
            split.PayPlanNum   = 0;
            split.ProvNum      = provNum;
            split.ProcNum      = procNum;
            split.SplitAmt     = amt;
            split.DateEntry    = datePay;
            split.UnearnedType = unearnedType.DefNum;
            PaySplits.Insert(split);
            return(split);
        }