Beispiel #1
0
        protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_CAS_GATID_1514 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_Guid();
            //Put your code here
            var oct_planned_action_type = ORM_HEC_ACT_ActionType.Query.Search(Connection, Transaction, new ORM_HEC_ACT_ActionType.Query()
            {
                GlobalPropertyMatchingID = Parameter.action_type_gpmid,
                Tenant_RefID             = securityTicket.TenantID,
                IsDeleted = false
            }).SingleOrDefault();

            if (oct_planned_action_type == null)
            {
                oct_planned_action_type = new ORM_HEC_ACT_ActionType();
                oct_planned_action_type.GlobalPropertyMatchingID = Parameter.action_type_gpmid;
                oct_planned_action_type.Modification_Timestamp   = DateTime.Now;
                oct_planned_action_type.Tenant_RefID             = securityTicket.TenantID;

                oct_planned_action_type.Save(Connection, Transaction);
            }

            returnValue.Result = oct_planned_action_type.HEC_ACT_ActionTypeID;
            return(returnValue);

            #endregion UserCode
        }
Beispiel #2
0
        protected static FR_Base Execute(DbConnection Connection, DbTransaction Transaction, P_CAS_UCGPOS_1516 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            //Leave UserCode region to enable user code saving
            #region UserCode
            var returnValue = new FR_Base();
            //Put your code here

            String[] treatment_gpos = cls_Get_All_GPOS_Billing_Codes_for_GlobalPropertyMatchingID.Invoke(Connection, Transaction, new P_CAS_GAGPOSBCfGPMID_1516()
            {
                GlobalPropertyMatchingID = "mm.docconnect.gpos.catalog.operation"
            }, securityTicket).Result.Select(gpos => gpos.BillingCode).ToArray();
            String[] aftercare_gpos = cls_Get_All_GPOS_Billing_Codes_for_GlobalPropertyMatchingID.Invoke(Connection, Transaction, new P_CAS_GAGPOSBCfGPMID_1516()
            {
                GlobalPropertyMatchingID = "mm.docconnect.gpos.catalog.nachsorge"
            }, securityTicket).Result.Select(gpos => gpos.BillingCode).ToArray();

            #region CONSTANTS
            const decimal OZURDEX_TREATMENT_FEE = 230;
            const decimal OZURDEX_AFTERCARE_FEE = 150;
            const decimal TREATMENT_FEE         = 230;
            const decimal AFTERCARE_FEE         = 60;
            #endregion

            Guid treatment_performed_action_type_id = Guid.Empty;

            var treatment_performed_action_type = ORM_HEC_ACT_ActionType.Query.Search(Connection, Transaction, new ORM_HEC_ACT_ActionType.Query()
            {
                Tenant_RefID             = securityTicket.TenantID,
                IsDeleted                = false,
                GlobalPropertyMatchingID = "mm.docconect.doc.app.performed.action.treatment"
            }).SingleOrDefault();

            if (treatment_performed_action_type == null)
            {
                treatment_performed_action_type = new ORM_HEC_ACT_ActionType();
                treatment_performed_action_type.GlobalPropertyMatchingID = "mm.docconect.doc.app.performed.action.treatment";
                treatment_performed_action_type.Creation_Timestamp       = DateTime.Now;
                treatment_performed_action_type.Modification_Timestamp   = DateTime.Now;
                treatment_performed_action_type.Tenant_RefID             = securityTicket.TenantID;

                treatment_performed_action_type.Save(Connection, Transaction);

                treatment_performed_action_type_id = treatment_performed_action_type.HEC_ACT_ActionTypeID;
            }
            else
            {
                treatment_performed_action_type_id = treatment_performed_action_type.HEC_ACT_ActionTypeID;
            }

            ORM_HEC_BIL_PotentialCode.Query gpos_codeQ = new ORM_HEC_BIL_PotentialCode.Query();
            gpos_codeQ.Tenant_RefID = securityTicket.TenantID;
            gpos_codeQ.IsDeleted    = false;

            ORM_HEC_Product.Query hec_drug_detailsQ = new ORM_HEC_Product.Query();
            hec_drug_detailsQ.HEC_ProductID = Parameter.drug_id;
            hec_drug_detailsQ.Tenant_RefID  = securityTicket.TenantID;
            hec_drug_detailsQ.IsDeleted     = false;

            var hec_drug_details = ORM_HEC_Product.Query.Search(Connection, Transaction, hec_drug_detailsQ).SingleOrDefault();
            if (hec_drug_details != null)
            {
                ORM_CMN_PRO_Product.Query cmn_drug_detailsQ = new ORM_CMN_PRO_Product.Query();
                cmn_drug_detailsQ.Tenant_RefID      = securityTicket.TenantID;
                cmn_drug_detailsQ.CMN_PRO_ProductID = hec_drug_details.Ext_PRO_Product_RefID;
                cmn_drug_detailsQ.IsDeleted         = false;

                var cmn_drug_details = ORM_CMN_PRO_Product.Query.Search(Connection, Transaction, cmn_drug_detailsQ).SingleOrDefault();
                if (cmn_drug_details != null)
                {
                    var drug_name = cmn_drug_details.Product_Name.GetContent(Parameter.all_languagesL.FirstOrDefault().CMN_LanguageID);

                    var gpos_diagnose_details = cls_Get_Diagnose_Details_for_DiagnoseID.Invoke(Connection, Transaction, new P_CAS_GDDfDID_1357()
                    {
                        DiagnoseID = Parameter.diagnose_id
                    }, securityTicket).Result;
                    if (gpos_diagnose_details != null)
                    {
                        var treatment_count = cls_Get_Treatment_Count_for_PatientID_And_DiagnoseID_and_LocalizationCode.Invoke(Connection, Transaction, new P_CAS_GTCfPIDaDIDaLC_1008()
                        {
                            ActionTypeID = treatment_performed_action_type_id, DiagnoseID = Parameter.diagnose_id, PatientID = Parameter.patient_id, LocalizationCode = Parameter.localization, PerformedDate = DateTime.Now
                        }, securityTicket).Result;
                        if (treatment_count != null)
                        {
                            var bill_position_ids = cls_Get_BillPositionIDs_for_CaseID.Invoke(Connection, Transaction, new P_CAS_GBPIDsfCID_0928()
                            {
                                CaseID = Parameter.case_id
                            }, securityTicket).Result;

                            foreach (var id in bill_position_ids)
                            {
                                var billing_code = cls_Get_BillingCode_for_CaseBillCodeID.Invoke(Connection, Transaction, new P_CAS_GBCfCBCID_1334()
                                {
                                    CaseBillCodeID = id.hec_case_bill_code_id
                                }, securityTicket).Result;
                                if (billing_code != null)
                                {
                                    #region ICD H34.8
                                    if (gpos_diagnose_details.diagnose_icd_10.Equals("H34.8"))
                                    {
                                        #region Ozurdex position
                                        if (drug_name.Equals("Ozurdex"))
                                        {
                                            if (treatment_gpos.Contains(billing_code.BillingCode))
                                            {
                                                gpos_codeQ.BillingCode = treatment_count.treatment_count - 1 < 1 ? "36620055" : "36620056";

                                                var gpos_code = ORM_HEC_BIL_PotentialCode.Query.Search(Connection, Transaction, gpos_codeQ).SingleOrDefault();
                                                if (gpos_code != null)
                                                {
                                                    ORM_BIL_BillPosition.Query old_gpos_positionQ = new ORM_BIL_BillPosition.Query();
                                                    old_gpos_positionQ.BIL_BillPositionID = id.bill_position_id;
                                                    old_gpos_positionQ.Tenant_RefID       = securityTicket.TenantID;
                                                    old_gpos_positionQ.IsDeleted          = false;

                                                    var old_gpos_position = ORM_BIL_BillPosition.Query.Search(Connection, Transaction, old_gpos_positionQ).SingleOrDefault();
                                                    if (old_gpos_position != null)
                                                    {
                                                        old_gpos_position.Modification_Timestamp     = DateTime.Now;
                                                        old_gpos_position.PositionValue_IncludingTax = OZURDEX_TREATMENT_FEE;

                                                        old_gpos_position.Save(Connection, Transaction);

                                                        ORM_HEC_BIL_BillPosition.Query old_hec_gpos_positionQ = new ORM_HEC_BIL_BillPosition.Query();
                                                        old_hec_gpos_positionQ.Ext_BIL_BillPosition_RefID = old_gpos_position.BIL_BillPositionID;
                                                        old_hec_gpos_positionQ.Tenant_RefID = securityTicket.TenantID;
                                                        old_hec_gpos_positionQ.PositionFor_Patient_RefID = Parameter.patient_id;
                                                        old_hec_gpos_positionQ.IsDeleted = false;

                                                        var old_hec_gpos_position = ORM_HEC_BIL_BillPosition.Query.Search(Connection, Transaction, old_hec_gpos_positionQ).SingleOrDefault();
                                                        if (old_hec_gpos_position != null)
                                                        {
                                                            ORM_HEC_BIL_BillPosition_BillCode.Query old_hec_gpos_position_codeQ = new ORM_HEC_BIL_BillPosition_BillCode.Query();
                                                            old_hec_gpos_position_codeQ.Tenant_RefID       = securityTicket.TenantID;
                                                            old_hec_gpos_position_codeQ.BillPosition_RefID = old_hec_gpos_position.HEC_BIL_BillPositionID;
                                                            old_hec_gpos_position_codeQ.IsDeleted          = false;

                                                            var old_hec_gpos_position_code = ORM_HEC_BIL_BillPosition_BillCode.Query.Search(Connection, Transaction, old_hec_gpos_position_codeQ).SingleOrDefault();
                                                            if (old_hec_gpos_position_code != null)
                                                            {
                                                                old_hec_gpos_position_code.IM_BillingCode         = gpos_code.BillingCode;
                                                                old_hec_gpos_position_code.Modification_Timestamp = DateTime.Now;
                                                                old_hec_gpos_position_code.PotentialCode_RefID    = gpos_code.HEC_BIL_PotentialCodeID;

                                                                old_hec_gpos_position_code.Save(Connection, Transaction);
                                                            }
                                                        }
                                                    }
                                                }
                                            }

                                            if (aftercare_gpos.Contains(billing_code.BillingCode))
                                            {
                                                gpos_codeQ.BillingCode = treatment_count.treatment_count - 1 < 1 ? "36620063" : "36620064";

                                                var gpos_code = ORM_HEC_BIL_PotentialCode.Query.Search(Connection, Transaction, gpos_codeQ).SingleOrDefault();
                                                if (gpos_code != null)
                                                {
                                                    ORM_BIL_BillPosition.Query old_gpos_positionQ = new ORM_BIL_BillPosition.Query();
                                                    old_gpos_positionQ.BIL_BillPositionID = id.bill_position_id;
                                                    old_gpos_positionQ.Tenant_RefID       = securityTicket.TenantID;
                                                    old_gpos_positionQ.IsDeleted          = false;

                                                    var old_gpos_position = ORM_BIL_BillPosition.Query.Search(Connection, Transaction, old_gpos_positionQ).SingleOrDefault();
                                                    if (old_gpos_position != null)
                                                    {
                                                        old_gpos_position.Modification_Timestamp     = DateTime.Now;
                                                        old_gpos_position.PositionValue_IncludingTax = OZURDEX_AFTERCARE_FEE;

                                                        old_gpos_position.Save(Connection, Transaction);

                                                        ORM_HEC_BIL_BillPosition.Query old_hec_gpos_positionQ = new ORM_HEC_BIL_BillPosition.Query();
                                                        old_hec_gpos_positionQ.Ext_BIL_BillPosition_RefID = old_gpos_position.BIL_BillPositionID;
                                                        old_hec_gpos_positionQ.Tenant_RefID = securityTicket.TenantID;
                                                        old_hec_gpos_positionQ.PositionFor_Patient_RefID = Parameter.patient_id;
                                                        old_hec_gpos_positionQ.IsDeleted = false;

                                                        var old_hec_gpos_position = ORM_HEC_BIL_BillPosition.Query.Search(Connection, Transaction, old_hec_gpos_positionQ).SingleOrDefault();
                                                        if (old_hec_gpos_position != null)
                                                        {
                                                            ORM_HEC_BIL_BillPosition_BillCode.Query old_hec_gpos_position_codeQ = new ORM_HEC_BIL_BillPosition_BillCode.Query();
                                                            old_hec_gpos_position_codeQ.Tenant_RefID       = securityTicket.TenantID;
                                                            old_hec_gpos_position_codeQ.BillPosition_RefID = old_hec_gpos_position.HEC_BIL_BillPositionID;
                                                            old_hec_gpos_position_codeQ.IsDeleted          = false;

                                                            var old_hec_gpos_position_code = ORM_HEC_BIL_BillPosition_BillCode.Query.Search(Connection, Transaction, old_hec_gpos_position_codeQ).SingleOrDefault();
                                                            if (old_hec_gpos_position_code != null)
                                                            {
                                                                old_hec_gpos_position_code.IM_BillingCode         = gpos_code.BillingCode;
                                                                old_hec_gpos_position_code.Modification_Timestamp = DateTime.Now;
                                                                old_hec_gpos_position_code.PotentialCode_RefID    = gpos_code.HEC_BIL_PotentialCodeID;

                                                                old_hec_gpos_position_code.Save(Connection, Transaction);
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        #endregion

                                        #region Other drugs
                                        else
                                        {
                                            if (treatment_gpos.Contains(billing_code.BillingCode))
                                            {
                                                gpos_codeQ.BillingCode = treatment_count.treatment_count - 1 < 3 ? "36620053" : "36620054";

                                                var gpos_code = ORM_HEC_BIL_PotentialCode.Query.Search(Connection, Transaction, gpos_codeQ).SingleOrDefault();
                                                if (gpos_code != null)
                                                {
                                                    ORM_BIL_BillPosition.Query old_gpos_positionQ = new ORM_BIL_BillPosition.Query();
                                                    old_gpos_positionQ.BIL_BillPositionID = id.bill_position_id;
                                                    old_gpos_positionQ.Tenant_RefID       = securityTicket.TenantID;
                                                    old_gpos_positionQ.IsDeleted          = false;

                                                    var old_gpos_position = ORM_BIL_BillPosition.Query.Search(Connection, Transaction, old_gpos_positionQ).SingleOrDefault();
                                                    if (old_gpos_position != null)
                                                    {
                                                        old_gpos_position.Modification_Timestamp     = DateTime.Now;
                                                        old_gpos_position.PositionValue_IncludingTax = TREATMENT_FEE;

                                                        old_gpos_position.Save(Connection, Transaction);

                                                        ORM_HEC_BIL_BillPosition.Query old_hec_gpos_positionQ = new ORM_HEC_BIL_BillPosition.Query();
                                                        old_hec_gpos_positionQ.Ext_BIL_BillPosition_RefID = old_gpos_position.BIL_BillPositionID;
                                                        old_hec_gpos_positionQ.Tenant_RefID = securityTicket.TenantID;
                                                        old_hec_gpos_positionQ.PositionFor_Patient_RefID = Parameter.patient_id;
                                                        old_hec_gpos_positionQ.IsDeleted = false;

                                                        var old_hec_gpos_position = ORM_HEC_BIL_BillPosition.Query.Search(Connection, Transaction, old_hec_gpos_positionQ).SingleOrDefault();
                                                        if (old_hec_gpos_position != null)
                                                        {
                                                            ORM_HEC_BIL_BillPosition_BillCode.Query old_hec_gpos_position_codeQ = new ORM_HEC_BIL_BillPosition_BillCode.Query();
                                                            old_hec_gpos_position_codeQ.Tenant_RefID       = securityTicket.TenantID;
                                                            old_hec_gpos_position_codeQ.BillPosition_RefID = old_hec_gpos_position.HEC_BIL_BillPositionID;
                                                            old_hec_gpos_position_codeQ.IsDeleted          = false;

                                                            var old_hec_gpos_position_code = ORM_HEC_BIL_BillPosition_BillCode.Query.Search(Connection, Transaction, old_hec_gpos_position_codeQ).SingleOrDefault();
                                                            if (old_hec_gpos_position_code != null)
                                                            {
                                                                old_hec_gpos_position_code.IM_BillingCode         = gpos_code.BillingCode;
                                                                old_hec_gpos_position_code.Modification_Timestamp = DateTime.Now;
                                                                old_hec_gpos_position_code.PotentialCode_RefID    = gpos_code.HEC_BIL_PotentialCodeID;

                                                                old_hec_gpos_position_code.Save(Connection, Transaction);
                                                            }
                                                        }
                                                    }
                                                }
                                            }


                                            if (aftercare_gpos.Contains(billing_code.BillingCode))
                                            {
                                                gpos_codeQ.BillingCode = treatment_count.treatment_count - 1 < 3 ? "36620061" : "36620062";

                                                var gpos_code = ORM_HEC_BIL_PotentialCode.Query.Search(Connection, Transaction, gpos_codeQ).SingleOrDefault();
                                                if (gpos_code != null)
                                                {
                                                    ORM_BIL_BillPosition.Query old_gpos_positionQ = new ORM_BIL_BillPosition.Query();
                                                    old_gpos_positionQ.BIL_BillPositionID = id.bill_position_id;
                                                    old_gpos_positionQ.Tenant_RefID       = securityTicket.TenantID;
                                                    old_gpos_positionQ.IsDeleted          = false;

                                                    var old_gpos_position = ORM_BIL_BillPosition.Query.Search(Connection, Transaction, old_gpos_positionQ).SingleOrDefault();
                                                    if (old_gpos_position != null)
                                                    {
                                                        old_gpos_position.Modification_Timestamp     = DateTime.Now;
                                                        old_gpos_position.PositionValue_IncludingTax = AFTERCARE_FEE;

                                                        old_gpos_position.Save(Connection, Transaction);

                                                        ORM_HEC_BIL_BillPosition.Query old_hec_gpos_positionQ = new ORM_HEC_BIL_BillPosition.Query();
                                                        old_hec_gpos_positionQ.Ext_BIL_BillPosition_RefID = old_gpos_position.BIL_BillPositionID;
                                                        old_hec_gpos_positionQ.Tenant_RefID = securityTicket.TenantID;
                                                        old_hec_gpos_positionQ.PositionFor_Patient_RefID = Parameter.patient_id;
                                                        old_hec_gpos_positionQ.IsDeleted = false;

                                                        var old_hec_gpos_position = ORM_HEC_BIL_BillPosition.Query.Search(Connection, Transaction, old_hec_gpos_positionQ).SingleOrDefault();
                                                        if (old_hec_gpos_position != null)
                                                        {
                                                            ORM_HEC_BIL_BillPosition_BillCode.Query old_hec_gpos_position_codeQ = new ORM_HEC_BIL_BillPosition_BillCode.Query();
                                                            old_hec_gpos_position_codeQ.Tenant_RefID       = securityTicket.TenantID;
                                                            old_hec_gpos_position_codeQ.BillPosition_RefID = old_hec_gpos_position.HEC_BIL_BillPositionID;
                                                            old_hec_gpos_position_codeQ.IsDeleted          = false;

                                                            var old_hec_gpos_position_code = ORM_HEC_BIL_BillPosition_BillCode.Query.Search(Connection, Transaction, old_hec_gpos_position_codeQ).SingleOrDefault();
                                                            if (old_hec_gpos_position_code != null)
                                                            {
                                                                old_hec_gpos_position_code.IM_BillingCode         = gpos_code.BillingCode;
                                                                old_hec_gpos_position_code.Modification_Timestamp = DateTime.Now;
                                                                old_hec_gpos_position_code.PotentialCode_RefID    = gpos_code.HEC_BIL_PotentialCodeID;

                                                                old_hec_gpos_position_code.Save(Connection, Transaction);
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        #endregion
                                    }
                                    #endregion ICD H34.8

                                    #region ICD H35.3 or H36.0
                                    else if (gpos_diagnose_details.diagnose_icd_10.Equals("H35.3") || gpos_diagnose_details.diagnose_icd_10.Equals("H36.0")) // H35.3 or H36.0
                                    {
                                        if (treatment_gpos.Contains(billing_code.BillingCode))
                                        {
                                            gpos_codeQ.BillingCode = treatment_count.treatment_count - 1 < 3 ? "36620050" : treatment_count.treatment_count - 1 < 6 ? "36620051" : "36620052";

                                            var gpos_code = ORM_HEC_BIL_PotentialCode.Query.Search(Connection, Transaction, gpos_codeQ).SingleOrDefault();
                                            if (gpos_code != null)
                                            {
                                                ORM_BIL_BillPosition.Query old_gpos_positionQ = new ORM_BIL_BillPosition.Query();
                                                old_gpos_positionQ.BIL_BillPositionID = id.bill_position_id;
                                                old_gpos_positionQ.Tenant_RefID       = securityTicket.TenantID;
                                                old_gpos_positionQ.IsDeleted          = false;

                                                var old_gpos_position = ORM_BIL_BillPosition.Query.Search(Connection, Transaction, old_gpos_positionQ).SingleOrDefault();
                                                if (old_gpos_position != null)
                                                {
                                                    old_gpos_position.Modification_Timestamp     = DateTime.Now;
                                                    old_gpos_position.PositionValue_IncludingTax = TREATMENT_FEE;

                                                    old_gpos_position.Save(Connection, Transaction);

                                                    ORM_HEC_BIL_BillPosition.Query old_hec_gpos_positionQ = new ORM_HEC_BIL_BillPosition.Query();
                                                    old_hec_gpos_positionQ.Ext_BIL_BillPosition_RefID = old_gpos_position.BIL_BillPositionID;
                                                    old_hec_gpos_positionQ.Tenant_RefID = securityTicket.TenantID;
                                                    old_hec_gpos_positionQ.PositionFor_Patient_RefID = Parameter.patient_id;
                                                    old_hec_gpos_positionQ.IsDeleted = false;

                                                    var old_hec_gpos_position = ORM_HEC_BIL_BillPosition.Query.Search(Connection, Transaction, old_hec_gpos_positionQ).SingleOrDefault();
                                                    if (old_hec_gpos_position != null)
                                                    {
                                                        ORM_HEC_BIL_BillPosition_BillCode.Query old_hec_gpos_position_codeQ = new ORM_HEC_BIL_BillPosition_BillCode.Query();
                                                        old_hec_gpos_position_codeQ.Tenant_RefID       = securityTicket.TenantID;
                                                        old_hec_gpos_position_codeQ.BillPosition_RefID = old_hec_gpos_position.HEC_BIL_BillPositionID;
                                                        old_hec_gpos_position_codeQ.IsDeleted          = false;

                                                        var old_hec_gpos_position_code = ORM_HEC_BIL_BillPosition_BillCode.Query.Search(Connection, Transaction, old_hec_gpos_position_codeQ).SingleOrDefault();
                                                        if (old_hec_gpos_position_code != null)
                                                        {
                                                            old_hec_gpos_position_code.IM_BillingCode         = gpos_code.BillingCode;
                                                            old_hec_gpos_position_code.Modification_Timestamp = DateTime.Now;
                                                            old_hec_gpos_position_code.PotentialCode_RefID    = gpos_code.HEC_BIL_PotentialCodeID;

                                                            old_hec_gpos_position_code.Save(Connection, Transaction);
                                                        }
                                                    }
                                                }
                                            }
                                        }

                                        if (aftercare_gpos.Contains(billing_code.BillingCode))
                                        {
                                            gpos_codeQ.BillingCode = treatment_count.treatment_count - 1 < 3 ? "36620058" : treatment_count.treatment_count - 1 < 6 ? "36620059" : "36620060";

                                            var gpos_code = ORM_HEC_BIL_PotentialCode.Query.Search(Connection, Transaction, gpos_codeQ).SingleOrDefault();
                                            if (gpos_code != null)
                                            {
                                                ORM_BIL_BillPosition.Query old_gpos_positionQ = new ORM_BIL_BillPosition.Query();
                                                old_gpos_positionQ.BIL_BillPositionID = id.bill_position_id;
                                                old_gpos_positionQ.Tenant_RefID       = securityTicket.TenantID;
                                                old_gpos_positionQ.IsDeleted          = false;

                                                var old_gpos_position = ORM_BIL_BillPosition.Query.Search(Connection, Transaction, old_gpos_positionQ).SingleOrDefault();
                                                if (old_gpos_position != null)
                                                {
                                                    old_gpos_position.Modification_Timestamp     = DateTime.Now;
                                                    old_gpos_position.PositionValue_IncludingTax = AFTERCARE_FEE;

                                                    old_gpos_position.Save(Connection, Transaction);

                                                    ORM_HEC_BIL_BillPosition.Query old_hec_gpos_positionQ = new ORM_HEC_BIL_BillPosition.Query();
                                                    old_hec_gpos_positionQ.Ext_BIL_BillPosition_RefID = old_gpos_position.BIL_BillPositionID;
                                                    old_hec_gpos_positionQ.Tenant_RefID = securityTicket.TenantID;
                                                    old_hec_gpos_positionQ.PositionFor_Patient_RefID = Parameter.patient_id;
                                                    old_hec_gpos_positionQ.IsDeleted = false;

                                                    var old_hec_gpos_position = ORM_HEC_BIL_BillPosition.Query.Search(Connection, Transaction, old_hec_gpos_positionQ).SingleOrDefault();
                                                    if (old_hec_gpos_position != null)
                                                    {
                                                        ORM_HEC_BIL_BillPosition_BillCode.Query old_hec_gpos_position_codeQ = new ORM_HEC_BIL_BillPosition_BillCode.Query();
                                                        old_hec_gpos_position_codeQ.Tenant_RefID       = securityTicket.TenantID;
                                                        old_hec_gpos_position_codeQ.BillPosition_RefID = old_hec_gpos_position.HEC_BIL_BillPositionID;
                                                        old_hec_gpos_position_codeQ.IsDeleted          = false;

                                                        var old_hec_gpos_position_code = ORM_HEC_BIL_BillPosition_BillCode.Query.Search(Connection, Transaction, old_hec_gpos_position_codeQ).SingleOrDefault();
                                                        if (old_hec_gpos_position_code != null)
                                                        {
                                                            old_hec_gpos_position_code.IM_BillingCode         = gpos_code.BillingCode;
                                                            old_hec_gpos_position_code.Modification_Timestamp = DateTime.Now;
                                                            old_hec_gpos_position_code.PotentialCode_RefID    = gpos_code.HEC_BIL_PotentialCodeID;

                                                            old_hec_gpos_position_code.Save(Connection, Transaction);
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    #endregion
                                }
                            }
                        }
                    }
                }
            }

            return(returnValue);

            #endregion UserCode
        }
Beispiel #3
0
        protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_CAS_CIPA_1140 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            //Leave UserCode region to enable user code saving
            #region UserCode
            var returnValue = new FR_Guid();

            ORM_HEC_ACT_ActionType.Query initial_action_typeQ = new ORM_HEC_ACT_ActionType.Query();
            initial_action_typeQ.GlobalPropertyMatchingID = "mm.docconect.doc.app.performed.action.initial";
            initial_action_typeQ.Tenant_RefID             = securityTicket.TenantID;
            initial_action_typeQ.IsDeleted = false;

            var initial_action_type    = ORM_HEC_ACT_ActionType.Query.Search(Connection, Transaction, initial_action_typeQ).SingleOrDefault();
            var initial_action_type_id = Guid.Empty;
            if (initial_action_type == null)
            {
                Dict action_type_name_dict = new Dict(ORM_HEC_ACT_ActionType.TableName);

                initial_action_type = new ORM_HEC_ACT_ActionType();

                foreach (var lang in Parameter.all_languagesL)
                {
                    var content = lang.ISO_639_1.Equals("DE") ? "anfänglich" : "initial";
                    action_type_name_dict.AddEntry(lang.CMN_LanguageID, content);
                }

                initial_action_type.ActionType_Name          = action_type_name_dict;
                initial_action_type.Creation_Timestamp       = DateTime.Now;
                initial_action_type.GlobalPropertyMatchingID = "mm.docconect.doc.app.performed.action.initial";
                initial_action_type.Modification_Timestamp   = DateTime.Now;
                initial_action_type.HEC_ACT_ActionTypeID     = Guid.NewGuid();
                initial_action_type.Tenant_RefID             = securityTicket.TenantID;
                initial_action_type.Save(Connection, Transaction);

                initial_action_type_id = initial_action_type.HEC_ACT_ActionTypeID;
            }
            else
            {
                initial_action_type_id = initial_action_type.HEC_ACT_ActionTypeID;
            }

            ORM_HEC_ACT_PerformedAction initial_performed_action = new ORM_HEC_ACT_PerformedAction();
            initial_performed_action.HEC_ACT_PerformedActionID      = Guid.NewGuid();
            initial_performed_action.Creation_Timestamp             = DateTime.Now;
            initial_performed_action.IfPerfomed_DateOfAction        = DateTime.Now;
            initial_performed_action.IfPerformed_DateOfAction_Day   = DateTime.Now.Day;
            initial_performed_action.IfPerformed_DateOfAction_Month = DateTime.Now.Month;
            initial_performed_action.IfPerformed_DateOfAction_Year  = DateTime.Now.Year;
            initial_performed_action.Tenant_RefID                      = securityTicket.TenantID;
            initial_performed_action.IsPerformed_Internally            = true;
            initial_performed_action.IsPerformed_MedicalPractice_RefID = Parameter.practice_id;
            initial_performed_action.Patient_RefID                     = Parameter.patient_id;
            initial_performed_action.IfPerformedInternaly_ResponsibleBusinessParticipant_RefID = Parameter.created_by_bpt;

            initial_performed_action.Save(Connection, Transaction);

            ORM_HEC_CAS_Case_RelevantPerformedAction initial_performed_action_to_case = new ORM_HEC_CAS_Case_RelevantPerformedAction();
            initial_performed_action_to_case.Case_RefID             = Parameter.case_id;
            initial_performed_action_to_case.Creation_Timestamp     = DateTime.Now;
            initial_performed_action_to_case.Modification_Timestamp = DateTime.Now;
            initial_performed_action_to_case.PerformedAction_RefID  = initial_performed_action.HEC_ACT_PerformedActionID;
            initial_performed_action_to_case.Tenant_RefID           = securityTicket.TenantID;

            initial_performed_action_to_case.Save(Connection, Transaction);

            ORM_HEC_ACT_PerformedAction_2_ActionType initial_performed_action_2_type = new ORM_HEC_ACT_PerformedAction_2_ActionType();
            initial_performed_action_2_type.Tenant_RefID                  = securityTicket.TenantID;
            initial_performed_action_2_type.Creation_Timestamp            = DateTime.Now;
            initial_performed_action_2_type.IsDeleted                     = false;
            initial_performed_action_2_type.HEC_ACT_ActionType_RefID      = initial_action_type_id;
            initial_performed_action_2_type.HEC_ACT_PerformedAction_RefID = initial_performed_action.HEC_ACT_PerformedActionID;
            initial_performed_action_2_type.IM_ActionType_Name            = "initial";
            initial_performed_action_2_type.Modification_Timestamp        = DateTime.Now;
            initial_performed_action_2_type.AssignmentID                  = Guid.NewGuid();

            initial_performed_action_2_type.Save(Connection, Transaction);

            returnValue.Result = initial_performed_action.HEC_ACT_PerformedActionID;
            return(returnValue);

            #endregion UserCode
        }
        protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_CAS_CTPA_1225 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_Guid();
            //Put your code here
            var diagnose_details = cls_Get_Diagnose_Details_for_DiagnoseID.Invoke(Connection, Transaction, new P_CAS_GDDfDID_1608()
            {
                DiagnoseID = Parameter.diagnose_id
            }, securityTicket).Result;

            ORM_HEC_ACT_PlannedAction treatment_planned_action = null;
            if (Parameter.treatment_planned_action_id != Guid.Empty)
            {
                treatment_planned_action = ORM_HEC_ACT_PlannedAction.Query.Search(Connection, Transaction, new ORM_HEC_ACT_PlannedAction.Query()
                {
                    Tenant_RefID            = securityTicket.TenantID,
                    IsDeleted               = false,
                    HEC_ACT_PlannedActionID = Parameter.treatment_planned_action_id
                }).SingleOrDefault();
            }

            if (treatment_planned_action == null)
            {
                treatment_planned_action = new ORM_HEC_ACT_PlannedAction();
                treatment_planned_action.Creation_Timestamp      = DateTime.Now;
                treatment_planned_action.HEC_ACT_PlannedActionID = Guid.NewGuid();
                treatment_planned_action.IsPlannedFollowup       = true;
                treatment_planned_action.IfPlannedFollowup_PreviousAction_RefID = Parameter.initial_performed_action_id;
                treatment_planned_action.IsPerformed            = false;
                treatment_planned_action.MedicalPractice_RefID  = Parameter.practice_id;
                treatment_planned_action.Modification_Timestamp = DateTime.Now;
                treatment_planned_action.Patient_RefID          = Parameter.patient_id;
                treatment_planned_action.PlannedFor_Date        = Parameter.treatment_date;
                treatment_planned_action.Tenant_RefID           = securityTicket.TenantID;
            }

            if (Parameter.treatment_doctor_id != Guid.Empty)
            {
                var doctor_account_id = cls_Get_Doctor_AccountID_for_DoctorID.Invoke(Connection, Transaction, new P_DO_GDAIDfDID_1549()
                {
                    DoctorID = Parameter.treatment_doctor_id
                }, securityTicket).Result.accountID;

                var doctor_accountQ = new ORM_USR_Account.Query();
                doctor_accountQ.USR_AccountID = doctor_account_id;
                doctor_accountQ.Tenant_RefID  = securityTicket.TenantID;
                doctor_accountQ.IsDeleted     = false;

                var doctor_account = ORM_USR_Account.Query.Search(Connection, Transaction, doctor_accountQ).SingleOrDefault();
                if (doctor_account != null)
                {
                    treatment_planned_action.ToBePerformedBy_BusinessParticipant_RefID = doctor_account.BusinessParticipant_RefID;
                }
            }

            treatment_planned_action.Save(Connection, Transaction);

            returnValue.Result = treatment_planned_action.HEC_ACT_PlannedActionID;
            var treatment_planned_action_potential_procedure = ORM_HEC_ACT_PlannedAction_PotentialProcedure.Query.Search(Connection, Transaction, new ORM_HEC_ACT_PlannedAction_PotentialProcedure.Query()
            {
                PlannedAction_RefID      = treatment_planned_action.HEC_ACT_PlannedActionID,
                PotentialProcedure_RefID = Parameter.intraocular_procedure_id,
                Tenant_RefID             = securityTicket.TenantID,
                IsDeleted = false
            }).SingleOrDefault();

            if (treatment_planned_action_potential_procedure == null)
            {
                treatment_planned_action_potential_procedure = new ORM_HEC_ACT_PlannedAction_PotentialProcedure();
                treatment_planned_action_potential_procedure.Tenant_RefID             = securityTicket.TenantID;
                treatment_planned_action_potential_procedure.PlannedAction_RefID      = treatment_planned_action.HEC_ACT_PlannedActionID;
                treatment_planned_action_potential_procedure.PotentialProcedure_RefID = Parameter.intraocular_procedure_id;
            }

            treatment_planned_action_potential_procedure.Modification_Timestamp = DateTime.Now;

            treatment_planned_action_potential_procedure.Save(Connection, Transaction);

            var treatment_planned_action_typeQ = new ORM_HEC_ACT_ActionType.Query();
            treatment_planned_action_typeQ.GlobalPropertyMatchingID = "mm.docconect.doc.app.planned.action.treatment";
            treatment_planned_action_typeQ.Tenant_RefID             = securityTicket.TenantID;
            treatment_planned_action_typeQ.IsDeleted = false;

            var treatment_planned_action_type    = ORM_HEC_ACT_ActionType.Query.Search(Connection, Transaction, treatment_planned_action_typeQ).SingleOrDefault();
            var treatment_planned_action_type_id = Guid.Empty;
            if (treatment_planned_action_type == null)
            {
                treatment_planned_action_type = new ORM_HEC_ACT_ActionType();

                Dict action_type_name_dict = new Dict(ORM_HEC_ACT_ActionType.TableName);

                foreach (var lang in Parameter.all_languagesL)
                {
                    var content = lang.ISO_639_1.Equals("DE") ? "behandlung" : "treatment";
                    action_type_name_dict.AddEntry(lang.CMN_LanguageID, content);
                }

                treatment_planned_action_type.ActionType_Name          = action_type_name_dict;
                treatment_planned_action_type.Creation_Timestamp       = DateTime.Now;
                treatment_planned_action_type.GlobalPropertyMatchingID = "mm.docconect.doc.app.planned.action.treatment";
                treatment_planned_action_type.Modification_Timestamp   = DateTime.Now;
                treatment_planned_action_type.HEC_ACT_ActionTypeID     = Guid.NewGuid();
                treatment_planned_action_type.Tenant_RefID             = securityTicket.TenantID;
                treatment_planned_action_type.Save(Connection, Transaction);

                treatment_planned_action_type_id = treatment_planned_action_type.HEC_ACT_ActionTypeID;
            }
            else
            {
                treatment_planned_action_type_id = treatment_planned_action_type.HEC_ACT_ActionTypeID;
            }

            ORM_HEC_ACT_PlannedAction_2_ActionType treatment_planned_action_2_type = new ORM_HEC_ACT_PlannedAction_2_ActionType();
            treatment_planned_action_2_type.Tenant_RefID                         = securityTicket.TenantID;
            treatment_planned_action_2_type.Creation_Timestamp                   = DateTime.Now;
            treatment_planned_action_2_type.IsDeleted                            = false;
            treatment_planned_action_2_type.HEC_ACT_ActionType_RefID             = treatment_planned_action_type_id;
            treatment_planned_action_2_type.HEC_ACT_PlannedAction_RefID          = treatment_planned_action.HEC_ACT_PlannedActionID;
            treatment_planned_action_2_type.Modification_Timestamp               = DateTime.Now;
            treatment_planned_action_2_type.HEC_ACT_PlannedAction_2_ActionTypeID = Guid.NewGuid();

            treatment_planned_action_2_type.Save(Connection, Transaction);

            var treatment_planned_action_required_product = ORM_HEC_ACT_PlannedAction_PotentialProcedure_RequiredProduct.Query.Search(Connection, Transaction, new ORM_HEC_ACT_PlannedAction_PotentialProcedure_RequiredProduct.Query()
            {
                BoundTo_HealthcareProcurementOrderPosition_RefID = Parameter.procurement_order_id,
                PlannedAction_PotentialProcedure_RefID           = treatment_planned_action_potential_procedure.HEC_ACT_PlannedAction_PotentialProcedureID,
                Tenant_RefID = securityTicket.TenantID,
                IsDeleted    = false
            }).SingleOrDefault();

            if (treatment_planned_action_required_product == null)
            {
                treatment_planned_action_required_product = new ORM_HEC_ACT_PlannedAction_PotentialProcedure_RequiredProduct();
                treatment_planned_action_required_product.BoundTo_HealthcareProcurementOrderPosition_RefID = Parameter.procurement_order_id;
                treatment_planned_action_required_product.PlannedAction_PotentialProcedure_RefID           = treatment_planned_action_potential_procedure.HEC_ACT_PlannedAction_PotentialProcedureID;
                treatment_planned_action_required_product.Tenant_RefID = securityTicket.TenantID;
            }

            treatment_planned_action_required_product.Modification_Timestamp  = DateTime.Now;
            treatment_planned_action_required_product.HealthcareProduct_RefID = Parameter.drug_id;

            treatment_planned_action_required_product.Save(Connection, Transaction);

            #region DIAGNOSE
            if (Parameter.diagnose_id != Guid.Empty)
            {
                var patient_diagnosis = new ORM_HEC_Patient_Diagnosis();
                patient_diagnosis.Creation_Timestamp         = DateTime.Now;
                patient_diagnosis.HEC_Patient_DiagnosisID    = Guid.NewGuid();
                patient_diagnosis.Modification_Timestamp     = DateTime.Now;
                patient_diagnosis.Patient_RefID              = Parameter.patient_id;
                patient_diagnosis.R_IsConfirmed              = Parameter.is_confirmed;
                patient_diagnosis.R_PotentialDiagnosis_RefID = Parameter.diagnose_id;
                patient_diagnosis.Tenant_RefID = securityTicket.TenantID;

                patient_diagnosis.Save(Connection, Transaction);

                ORM_HEC_DIA_Diagnosis_Localization diagnosis_localization = new ORM_HEC_DIA_Diagnosis_Localization();
                diagnosis_localization.Creation_Timestamp = DateTime.Now;
                diagnosis_localization.Diagnosis_RefID    = Parameter.diagnose_id;
                diagnosis_localization.HEC_DIA_Diagnosis_LocalizationID = Guid.NewGuid();
                diagnosis_localization.Modification_Timestamp           = DateTime.Now;
                diagnosis_localization.Tenant_RefID     = securityTicket.TenantID;
                diagnosis_localization.LocalizationCode = Parameter.diagnose_id == Guid.Empty ? "-" : Parameter.is_left_eye ? "L" : "R";

                diagnosis_localization.Save(Connection, Transaction);

                ORM_HEC_ACT_PerformedAction_DiagnosisUpdate initial_performed_action_diagnose = new ORM_HEC_ACT_PerformedAction_DiagnosisUpdate();
                initial_performed_action_diagnose.Creation_Timestamp = DateTime.Now;
                initial_performed_action_diagnose.HEC_ACT_PerformedAction_DiagnosisUpdateID = Guid.NewGuid();
                initial_performed_action_diagnose.HEC_ACT_PerformedAction_RefID             = Parameter.initial_performed_action_id;
                initial_performed_action_diagnose.IsDiagnosisConfirmed              = Parameter.is_confirmed;
                initial_performed_action_diagnose.Modification_Timestamp            = DateTime.Now;
                initial_performed_action_diagnose.PotentialDiagnosis_RefID          = Parameter.diagnose_id;
                initial_performed_action_diagnose.Tenant_RefID                      = securityTicket.TenantID;
                initial_performed_action_diagnose.HEC_Patient_Diagnosis_RefID       = patient_diagnosis.HEC_Patient_DiagnosisID;
                initial_performed_action_diagnose.IM_PotentialDiagnosis_Code        = diagnose_details.diagnose_icd_10;
                initial_performed_action_diagnose.IM_PotentialDiagnosis_Name        = diagnose_details.diagnose_name;
                initial_performed_action_diagnose.IM_PotentialDiagnosisCatalog_Name = diagnose_details.catalog_display_name;

                initial_performed_action_diagnose.Save(Connection, Transaction);

                ORM_HEC_ACT_PerformedAction_DiagnosisUpdate_Localization initial_performed_action_diagnose_localization = new ORM_HEC_ACT_PerformedAction_DiagnosisUpdate_Localization();
                initial_performed_action_diagnose_localization.Creation_Timestamp = DateTime.Now;
                initial_performed_action_diagnose_localization.HEC_ACT_PerformedAction_DiagnosisUpdate_LocalizationID = Guid.NewGuid();
                initial_performed_action_diagnose_localization.HEX_EXC_Action_DiagnosisUpdate_RefID = initial_performed_action_diagnose.HEC_ACT_PerformedAction_DiagnosisUpdateID;
                initial_performed_action_diagnose_localization.HEC_DIA_Diagnosis_Localization_RefID = diagnosis_localization.HEC_DIA_Diagnosis_LocalizationID;
                initial_performed_action_diagnose_localization.Modification_Timestamp = DateTime.Now;
                initial_performed_action_diagnose_localization.Tenant_RefID           = securityTicket.TenantID;
                initial_performed_action_diagnose_localization.IM_PotentialDiagnosisLocalization_Code = Parameter.diagnose_id == Guid.Empty ? "-" : Parameter.is_left_eye ? "L" : "R";

                initial_performed_action_diagnose_localization.Save(Connection, Transaction);

                ORM_HEC_Patient_Diagnosis_Localization patient_diagnosis_localization = new ORM_HEC_Patient_Diagnosis_Localization();
                patient_diagnosis_localization.Creation_Timestamp = DateTime.Now;
                patient_diagnosis_localization.DIA_Diagnosis_Localization_RefID     = diagnosis_localization.HEC_DIA_Diagnosis_LocalizationID;
                patient_diagnosis_localization.HEC_Patient_Diagnosis_LocalizationID = Guid.NewGuid();
                patient_diagnosis_localization.Patient_Diagnosis_RefID = patient_diagnosis.HEC_Patient_DiagnosisID;
                patient_diagnosis_localization.Tenant_RefID            = securityTicket.TenantID;

                patient_diagnosis_localization.Save(Connection, Transaction);
            }
            #endregion

            return(returnValue);

            #endregion UserCode
        }
        protected static FR_Guids Execute(DbConnection Connection, DbTransaction Transaction, P_CAS_CCGPOS_1000 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var  returnValue = new FR_Guids();
            Guid treatment_performed_action_type_id = Guid.Empty;
            var  resultList = new List <Guid>();

            var treatment_performed_action_type = ORM_HEC_ACT_ActionType.Query.Search(Connection, Transaction, new ORM_HEC_ACT_ActionType.Query()
            {
                Tenant_RefID             = securityTicket.TenantID,
                IsDeleted                = false,
                GlobalPropertyMatchingID = "mm.docconect.doc.app.performed.action.treatment"
            }).SingleOrDefault();

            if (treatment_performed_action_type == null)
            {
                treatment_performed_action_type = new ORM_HEC_ACT_ActionType();
                treatment_performed_action_type.GlobalPropertyMatchingID = "mm.docconect.doc.app.performed.action.treatment";
                treatment_performed_action_type.Creation_Timestamp       = DateTime.Now;
                treatment_performed_action_type.Modification_Timestamp   = DateTime.Now;
                treatment_performed_action_type.Tenant_RefID             = securityTicket.TenantID;

                treatment_performed_action_type.Save(Connection, Transaction);

                treatment_performed_action_type_id = treatment_performed_action_type.HEC_ACT_ActionTypeID;
            }
            else
            {
                treatment_performed_action_type_id = treatment_performed_action_type.HEC_ACT_ActionTypeID;
            }

            var treatment_count = cls_Get_Treatment_Count_for_PatientID_And_DiagnoseID_and_LocalizationCode.Invoke(Connection, Transaction, new P_CAS_GTCfPIDaDIDaLC_1008()
            {
                ActionTypeID     = treatment_performed_action_type_id,
                DiagnoseID       = Parameter.diagnose_id,
                PatientID        = Parameter.patient_id,
                LocalizationCode = Parameter.localization,
                PerformedDate    = Parameter.treatment_date == DateTime.MinValue ? DateTime.Now : Parameter.treatment_date
            }, securityTicket).Result;

            if (treatment_count != null)
            {
                treatment_count.treatment_count++;

                var contracts = cls_Get_InsuranceToBrokerContractID_for_DrugID_and_DiagnoseID.Invoke(Connection, Transaction, new P_CAS_GItBCIDfDIDaDID_1541()
                {
                    DiagnoseID    = Parameter.diagnose_id,
                    DrugID        = Parameter.drug_id,
                    PatientID     = Parameter.patient_id,
                    TreatmentDate = DateTime.Now
                }, securityTicket).Result.OrderBy(ctr => ctr.patient_consent_valid_from);

                var contract    = contracts.LastOrDefault(ctr => ctr.patient_consent_valid_from.Date <= Parameter.treatment_date);
                var contract_id = Guid.Empty;
                if (contract == null)
                {
                    if (contracts.Any())
                    {
                        contract = contracts.Last();
                    }
                    else
                    {
                        var hip = cls_Get_Patient_Insurance_Data_for_PatientIDs.Invoke(Connection, Transaction, new P_PA_GPIDfPIDs_1002()
                        {
                            PatientIDs = new Guid[] { Parameter.patient_id }
                        }, securityTicket).Result.First();
                        contract_id = cls_Get_Contracts_Where_Hip_Participating_for_HipID.Invoke(Connection, Transaction, new P_PA_GCwHipPfHipID_0954()
                        {
                            HipIkNumber = hip.HipIkNumber
                        }, securityTicket).Result.Last().ContractID;
                    }
                }
                else
                {
                    contract_id = contract.contract_id;
                }

                if (!Parameter.should_update)
                {
                    var gpos_details = cls_Get_All_GPOS_Details_for_ContractID.Invoke(Connection, Transaction, new P_CAS_GAGPOSDfCID_1754()
                    {
                        ContractID = contract_id
                    }, securityTicket).Result;

                    if (gpos_details.Length != 0)
                    {
                        var gpos_types = new List <string>();

                        if (Parameter.oct_doctor_id != Guid.Empty)
                        {
                            gpos_types.Add(EGposType.Oct.Value());
                            if (Parameter.treatment_doctor_id == Guid.Empty && Parameter.ac_doctor_id != Guid.Empty)
                            {
                                gpos_types.Add(EGposType.Aftercare.Value());
                            }
                        }
                        else
                        {
                            if (Parameter.treatment_doctor_id == Guid.Empty && Parameter.ac_doctor_id != Guid.Empty)
                            {
                                gpos_types.Add(EGposType.Aftercare.Value());
                            }
                            else if (Parameter.diagnose_id != Guid.Empty)
                            {
                                gpos_types.Add(EGposType.Operation.Value());
                                gpos_types.Add(EGposType.Aftercare.Value());
                            }
                        }

                        foreach (var gpos_type in gpos_types)
                        {
                            foreach (var gpos_detail in gpos_details.Where(t => t.GposType == gpos_type))
                            {
                                var covered_drugs = ORM_HEC_BIL_PotentialCode_2_HealthcareProduct.Query.Search(Connection, Transaction, new ORM_HEC_BIL_PotentialCode_2_HealthcareProduct.Query()
                                {
                                    HEC_BIL_PotentialCode_RefID = gpos_detail.GposID,
                                    Tenant_RefID = securityTicket.TenantID,
                                    IsDeleted    = false
                                }).Select(covered_drug => covered_drug.HEC_Product_RefID);

                                var covered_diagnoses = ORM_HEC_BIL_PotentialCode_2_PotentialDiagnosis.Query.Search(Connection, Transaction, new ORM_HEC_BIL_PotentialCode_2_PotentialDiagnosis.Query()
                                {
                                    HEC_BIL_PotentialCode_RefID = gpos_detail.GposID,
                                    Tenant_RefID = securityTicket.TenantID,
                                    IsDeleted    = false
                                }).Select(covered_diagnose => covered_diagnose.HEC_DIA_PotentialDiagnosis_RefID);

                                var drug_condition     = covered_drugs.Any() ? covered_drugs.Any(t => t == Parameter.drug_id) : true;
                                var diagnose_condition = covered_diagnoses.Any() ? covered_diagnoses.Any(t => t == Parameter.diagnose_id) : true;

                                bool treatment_count_condition = gpos_detail.FromInjection > 1000000;

                                if (covered_drugs.Any() && covered_diagnoses.Any())
                                {
                                    var gpos_details_for_drug_diagnose_combo = cls_Get_GPOS_Details_for_DiagnoseID_and_DrugID.Invoke(Connection, Transaction, new P_CAS_GGPOSDfDIDaDID_1033()
                                    {
                                        ContractID = contract_id,
                                        DiagnoseID = Parameter.diagnose_id,
                                        DrugID     = Parameter.drug_id
                                    }, securityTicket).Result;

                                    treatment_count_condition = treatment_count.treatment_count >= gpos_detail.FromInjection &&
                                                                !gpos_details_for_drug_diagnose_combo.Any(gpos => treatment_count.treatment_count >= gpos.injection_from && gpos.injection_from > gpos_detail.FromInjection && gpos.gpos_type == gpos_type);
                                }

                                var gpos_condition = drug_condition && diagnose_condition && treatment_count_condition;

                                if (gpos_condition)
                                {
                                    ORM_BIL_BillPosition gpos_position = new ORM_BIL_BillPosition();
                                    gpos_position.BIL_BilHeader_RefID        = Guid.Empty;
                                    gpos_position.BIL_BillPositionID         = Guid.NewGuid();
                                    gpos_position.Creation_Timestamp         = DateTime.Now;
                                    gpos_position.Modification_Timestamp     = DateTime.Now;
                                    gpos_position.Tenant_RefID               = securityTicket.TenantID;
                                    gpos_position.PositionValue_IncludingTax = Convert.ToDecimal(gpos_detail.GposPrice);

                                    gpos_position.Save(Connection, Transaction);

                                    resultList.Add(gpos_position.BIL_BillPositionID);

                                    ORM_HEC_BIL_BillPosition hec_gpos_position = new ORM_HEC_BIL_BillPosition();
                                    hec_gpos_position.Creation_Timestamp         = DateTime.Now;
                                    hec_gpos_position.Ext_BIL_BillPosition_RefID = gpos_position.BIL_BillPositionID;
                                    hec_gpos_position.HEC_BIL_BillPositionID     = Guid.NewGuid();
                                    hec_gpos_position.Modification_Timestamp     = DateTime.Now;
                                    hec_gpos_position.Tenant_RefID = securityTicket.TenantID;
                                    hec_gpos_position.PositionFor_Patient_RefID = Parameter.patient_id;

                                    hec_gpos_position.Save(Connection, Transaction);

                                    ORM_HEC_BIL_BillPosition_BillCode hec_gpos_position_code = new ORM_HEC_BIL_BillPosition_BillCode();
                                    hec_gpos_position_code.BillPosition_RefID = hec_gpos_position.HEC_BIL_BillPositionID;
                                    hec_gpos_position_code.Creation_Timestamp = DateTime.Now;
                                    hec_gpos_position_code.HEC_BIL_BillPosition_BillCodeID = Guid.NewGuid();
                                    hec_gpos_position_code.IM_BillingCode         = gpos_detail.GposNumber;
                                    hec_gpos_position_code.Modification_Timestamp = DateTime.Now;
                                    hec_gpos_position_code.PotentialCode_RefID    = gpos_detail.GposID;
                                    hec_gpos_position_code.Tenant_RefID           = securityTicket.TenantID;

                                    hec_gpos_position_code.Save(Connection, Transaction);

                                    ORM_HEC_CAS_Case_BillCode hec_gpos_case_code = new ORM_HEC_CAS_Case_BillCode();
                                    hec_gpos_case_code.Creation_Timestamp = DateTime.Now;
                                    hec_gpos_case_code.HEC_BIL_BillPosition_BillCode_RefID = hec_gpos_position_code.HEC_BIL_BillPosition_BillCodeID;
                                    hec_gpos_case_code.HEC_CAS_Case_BillCodeID             = Guid.NewGuid();
                                    hec_gpos_case_code.HEC_CAS_Case_RefID     = Parameter.case_id;
                                    hec_gpos_case_code.Modification_Timestamp = DateTime.Now;
                                    hec_gpos_case_code.Tenant_RefID           = securityTicket.TenantID;

                                    hec_gpos_case_code.Save(Connection, Transaction);
                                }
                            }
                        }
                    }
                }
                else
                {
                    // TODO: fix update - beva -> no beva and such
                    var bill_position_ids = cls_Get_BillPositionIDs_for_CaseID.Invoke(Connection, Transaction, new P_CAS_GBPIDsfCID_0928()
                    {
                        CaseID = Parameter.case_id
                    }, securityTicket).Result;
                    var gpos_details = cls_Get_GPOS_Details_for_DiagnoseID_and_DrugID.Invoke(Connection, Transaction, new P_CAS_GGPOSDfDIDaDID_1033()
                    {
                        ContractID = contract_id,
                        DiagnoseID = Parameter.diagnose_id,
                        DrugID     = Parameter.drug_id
                    }, securityTicket).Result;

                    if (gpos_details.Length != 0 && bill_position_ids.Length != 0)
                    {
                        bill_position_ids = bill_position_ids.Where(bp => ORM_HEC_BIL_PotentialCode_2_HealthcareProduct.Query.Search(Connection, Transaction, new ORM_HEC_BIL_PotentialCode_2_HealthcareProduct.Query()
                        {
                            HEC_BIL_PotentialCode_RefID = bp.gpos_id,
                            Tenant_RefID = securityTicket.TenantID,
                            IsDeleted    = false
                        }).Count != 0 &&
                                                                    ORM_HEC_BIL_PotentialCode_2_PotentialDiagnosis.Query.Search(Connection, Transaction, new ORM_HEC_BIL_PotentialCode_2_PotentialDiagnosis.Query()
                        {
                            HEC_BIL_PotentialCode_RefID = bp.gpos_id,
                            Tenant_RefID = securityTicket.TenantID,
                            IsDeleted    = false
                        }).Count != 0).ToArray();

                        foreach (var id in bill_position_ids)
                        {
                            foreach (var gpos_detail in gpos_details)
                            {
                                if (id.gpos_type == gpos_detail.gpos_type)
                                {
                                    if (treatment_count.treatment_count >= gpos_detail.injection_from &&
                                        !gpos_details.Any(gpos => treatment_count.treatment_count >= gpos.injection_from && gpos.injection_from > gpos_detail.injection_from && gpos.gpos_type == id.gpos_type))
                                    {
                                        ORM_BIL_BillPosition.Query old_gpos_positionQ = new ORM_BIL_BillPosition.Query();
                                        old_gpos_positionQ.BIL_BillPositionID = id.bill_position_id;
                                        old_gpos_positionQ.Tenant_RefID       = securityTicket.TenantID;
                                        old_gpos_positionQ.IsDeleted          = false;

                                        var old_gpos_position = ORM_BIL_BillPosition.Query.Search(Connection, Transaction, old_gpos_positionQ).SingleOrDefault();
                                        if (old_gpos_position != null)
                                        {
                                            old_gpos_position.Modification_Timestamp     = DateTime.Now;
                                            old_gpos_position.PositionValue_IncludingTax = Convert.ToDecimal(gpos_detail.gpos_price);

                                            old_gpos_position.Save(Connection, Transaction);

                                            ORM_HEC_BIL_BillPosition.Query old_hec_gpos_positionQ = new ORM_HEC_BIL_BillPosition.Query();
                                            old_hec_gpos_positionQ.Ext_BIL_BillPosition_RefID = old_gpos_position.BIL_BillPositionID;
                                            old_hec_gpos_positionQ.Tenant_RefID = securityTicket.TenantID;
                                            old_hec_gpos_positionQ.PositionFor_Patient_RefID = Parameter.patient_id;
                                            old_hec_gpos_positionQ.IsDeleted = false;

                                            var old_hec_gpos_position = ORM_HEC_BIL_BillPosition.Query.Search(Connection, Transaction, old_hec_gpos_positionQ).SingleOrDefault();
                                            if (old_hec_gpos_position != null)
                                            {
                                                ORM_HEC_BIL_BillPosition_BillCode.Query old_hec_gpos_position_codeQ = new ORM_HEC_BIL_BillPosition_BillCode.Query();
                                                old_hec_gpos_position_codeQ.Tenant_RefID       = securityTicket.TenantID;
                                                old_hec_gpos_position_codeQ.BillPosition_RefID = old_hec_gpos_position.HEC_BIL_BillPositionID;
                                                old_hec_gpos_position_codeQ.IsDeleted          = false;

                                                var old_hec_gpos_position_code = ORM_HEC_BIL_BillPosition_BillCode.Query.Search(Connection, Transaction, old_hec_gpos_position_codeQ).SingleOrDefault();
                                                if (old_hec_gpos_position_code != null)
                                                {
                                                    old_hec_gpos_position_code.IM_BillingCode         = gpos_detail.gpos_code;
                                                    old_hec_gpos_position_code.Modification_Timestamp = DateTime.Now;
                                                    old_hec_gpos_position_code.PotentialCode_RefID    = gpos_detail.gpos_id;

                                                    old_hec_gpos_position_code.Save(Connection, Transaction);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

            returnValue.Result = resultList.ToArray();
            return(returnValue);

            #endregion UserCode
        }
        protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_CAS_CCtSE_1100 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_Guid();
            Thread.CurrentThread.CurrentCulture   = CultureInfo.GetCultureInfo("de-DE");
            Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("de-DE");
            //Get statuses from Resources
            var  FS1  = Properties.Resources.FS1;
            var  FS2  = Properties.Resources.FS2;
            var  FS3  = Properties.Resources.FS3;
            var  FS4  = Properties.Resources.FS4;
            var  FS5  = Properties.Resources.FS5;
            var  FS6  = Properties.Resources.FS6;
            var  FS7  = Properties.Resources.FS7;
            var  FS8  = Properties.Resources.FS8;
            var  FS9  = Properties.Resources.FS9;
            var  FS10 = Properties.Resources.FS10;
            var  FS11 = Properties.Resources.FS11;
            Guid treatment_performed_action_type_id = Guid.Empty;

            var treatment_performed_action_type = ORM_HEC_ACT_ActionType.Query.Search(Connection, Transaction, new ORM_HEC_ACT_ActionType.Query()
            {
                Tenant_RefID             = securityTicket.TenantID,
                IsDeleted                = false,
                GlobalPropertyMatchingID = "mm.docconect.doc.app.performed.action.treatment"
            }).SingleOrDefault();

            if (treatment_performed_action_type == null)
            {
                treatment_performed_action_type = new ORM_HEC_ACT_ActionType();
                treatment_performed_action_type.GlobalPropertyMatchingID = "mm.docconect.doc.app.performed.action.treatment";
                treatment_performed_action_type.Creation_Timestamp       = DateTime.Now;
                treatment_performed_action_type.Modification_Timestamp   = DateTime.Now;
                treatment_performed_action_type.Tenant_RefID             = securityTicket.TenantID;

                treatment_performed_action_type.Save(Connection, Transaction);

                treatment_performed_action_type_id = treatment_performed_action_type.HEC_ACT_ActionTypeID;
            }
            else
            {
                treatment_performed_action_type_id = treatment_performed_action_type.HEC_ACT_ActionTypeID;
            }

            List <Submitted_Case_Model>   allCases          = Get_All_Cases_With_Custom_Status.Get_All_Submited_Cases_With_Custom_Status("FS2", securityTicket);
            List <Submitted_Case_Model>   allCases_FS11     = Get_All_Cases_With_Custom_Status.Get_All_Submited_Cases_With_Custom_Status("FS11", securityTicket);
            List <Submitted_Case_Model>   newCaseList       = new List <Submitted_Case_Model>();
            List <Settlement_Model>       settlements       = new List <Settlement_Model>();
            List <PatientDetailViewModel> patientDetailList = new List <PatientDetailViewModel>();
            List <DateTime>        OldTransmitionDateList   = new List <DateTime>();
            Dictionary <Guid, int> consentValidToCache      = new Dictionary <Guid, int>();
            //List<Guid> casesToChange = new List<Guid>();
            //List<string> typeList = new List<string>();
            List <NegativeResponseModel> NegativeResponseList = new List <NegativeResponseModel>();
            var preexaminationsCache = cls_Get_Patient_Preexaminations_on_Tenant.Invoke(Connection, Transaction, securityTicket).Result.GroupBy(t => t.PatientID).ToDictionary(t => t.Key, t => t.GroupBy(c => c.Localization).ToDictionary(d => d.Key, d => d));

            DateTime DateForElastic = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
            var      casesForReport = cls_Get_Cases_For_Report.Invoke(Connection, Transaction, new P_CAS_GCFR_0910()
            {
                Status = 2
            }, securityTicket).Result;
            var casesForReport_FS11 = cls_Get_Cases_For_Report.Invoke(Connection, Transaction, new P_CAS_GCFR_0910()
            {
                Status = 11
            }, securityTicket).Result;
            Dictionary <string, string> serviceFeeValueCache = new Dictionary <string, string>();
            List <CaseForReportModel>   caseModelList        = new List <CaseForReportModel>();

            foreach (var item in Parameter.CasesToBeChanged)
            {
                try
                {
                    var  errorCase         = casesForReport.SingleOrDefault(i => int.Parse(i.PositionNumber) == int.Parse(item.bill_number));
                    bool shouldChangeToFS8 = false;

                    if (errorCase == null)
                    {
                        errorCase         = casesForReport_FS11.SingleOrDefault(i => int.Parse(i.PositionNumber) == int.Parse(item.bill_number));
                        shouldChangeToFS8 = true;
                    }

                    var management_fee_value = "-";
                    if (!string.IsNullOrEmpty(errorCase.BillingCode))
                    {
                        if (!serviceFeeValueCache.ContainsKey(errorCase.BillingCode))
                        {
                            var service_fee_value = cls_Get_ServiceFeeValue_for_BillingCode.Invoke(Connection, Transaction, new P_CAS_GSFVfBC_1721()
                            {
                                BillingCode = errorCase.BillingCode
                            }, securityTicket).Result;
                            if (service_fee_value != null)
                            {
                                serviceFeeValueCache.Add(errorCase.BillingCode, service_fee_value.service_fee);
                            }
                        }

                        management_fee_value = serviceFeeValueCache[errorCase.BillingCode];
                    }

                    var negativeTransmitionQuery = new ORM_BIL_BillPosition_TransmitionStatus.Query();
                    negativeTransmitionQuery.Tenant_RefID       = securityTicket.TenantID;
                    negativeTransmitionQuery.IsDeleted          = false;
                    negativeTransmitionQuery.BillPosition_RefID = errorCase.StatusID;

                    var negativeTransmition = ORM_BIL_BillPosition_TransmitionStatus.Query.Search(Connection, Transaction, negativeTransmitionQuery).ToList();

                    var caseStatusQuery = new ORM_BIL_BillPosition_TransmitionStatus.Query();
                    caseStatusQuery.Tenant_RefID = securityTicket.TenantID;
                    caseStatusQuery.IsDeleted    = false;
                    caseStatusQuery.IsActive     = true;
                    caseStatusQuery.BIL_BillPosition_TransmitionStatusID = errorCase.StatusID;

                    var caseStatusOld = ORM_BIL_BillPosition_TransmitionStatus.Query.Search(Connection, Transaction, caseStatusQuery).SingleOrDefault();

                    if (caseStatusOld == null)
                    {
                        throw new Exception("Transmition status not found for id: " + errorCase.StatusID);
                    }

                    OldTransmitionDateList.Add(caseStatusOld.TransmittedOnDate);
                    caseStatusOld.IsActive = false;
                    caseStatusOld.Save(Connection, Transaction);

                    var caseStatus = new ORM_BIL_BillPosition_TransmitionStatus();
                    caseStatus.IsDeleted              = false;
                    caseStatus.Creation_Timestamp     = DateTime.Now;
                    caseStatus.Modification_Timestamp = DateTime.Now;
                    caseStatus.Tenant_RefID           = securityTicket.TenantID;
                    caseStatus.IsActive       = true;
                    caseStatus.PrimaryComment = item.error_message;
                    caseStatus.BIL_BillPosition_TransmitionStatusID = Guid.NewGuid();
                    caseStatus.BillPosition_RefID   = caseStatusOld.BillPosition_RefID;
                    caseStatus.TransmitionCode      = 5;
                    caseStatus.TransmittedOnDate    = DateTime.Now;// should we use from edifact?
                    caseStatus.TransmitionStatusKey = caseStatusOld.TransmitionStatusKey;
                    caseStatus.Save(Connection, Transaction);

                    if (shouldChangeToFS8)
                    {
                        caseStatus.IsActive = false;
                        caseStatus.Save(Connection, Transaction);


                        var caseStatus2 = new ORM_BIL_BillPosition_TransmitionStatus();
                        caseStatus2.IsDeleted              = false;
                        caseStatus2.Creation_Timestamp     = DateTime.Now;
                        caseStatus2.Modification_Timestamp = DateTime.Now;
                        caseStatus2.Tenant_RefID           = securityTicket.TenantID;
                        caseStatus2.IsActive       = true;
                        caseStatus2.PrimaryComment = item.error_message;
                        caseStatus2.BIL_BillPosition_TransmitionStatusID = Guid.NewGuid();
                        caseStatus2.BillPosition_RefID   = caseStatusOld.BillPosition_RefID;
                        caseStatus2.TransmitionCode      = 8;
                        caseStatus2.TransmittedOnDate    = DateTime.Now;// should we use from edifact?
                        caseStatus2.TransmitionStatusKey = caseStatusOld.TransmitionStatusKey;
                        caseStatus2.Save(Connection, Transaction);
                    }

                    Guid caseID = errorCase.CaseID;
                    NegativeResponseModel negativeResponse = new NegativeResponseModel();

                    negativeResponse.caseID = caseID;
                    //casesToChange.Add(caseID);
                    if (caseStatusOld.TransmitionStatusKey == "aftercare")
                    {
                        negativeResponse.plannedActionID = errorCase.IsAftercareID;
                        negativeResponse.type            = "ac";
                    }

                    //typeList.Add("ac");
                    else if (caseStatusOld.TransmitionStatusKey == "treatment")
                    {
                        negativeResponse.plannedActionID = errorCase.IsTreatmentID;
                        negativeResponse.type            = "op";
                    }
                    else
                    {
                        negativeResponse.plannedActionID = errorCase.IsTreatmentID;
                        negativeResponse.type            = caseStatusOld.TransmitionStatusKey;
                    }
                    //typeList.Add("op");

                    NegativeResponseList.Add(negativeResponse);

                    P_PA_GPDfPID_1124 patientData = cls_Get_Patient_Details_for_PatientID.Invoke(Connection, Transaction, new P_P_PA_GPDfPID_1124()
                    {
                        PatientID = errorCase.Patient_RefID
                    }, securityTicket).Result;


                    #region Report data

                    CaseForReportModel caseModel = new CaseForReportModel();
                    caseModel.HIP                    = patientData.health_insurance_provider;
                    caseModel.ContractID             = patientData.contractID;
                    caseModel.HIP_IK                 = patientData.HealthInsurance_IKNumber;
                    caseModel.PatientInsuranceNumber = patientData.insurance_id;
                    caseModel.PatientGender          = patientData.gender;
                    caseModel.PatientStatusNumber    = patientData.insurance_status;
                    caseModel.PatientFirstName       = patientData.patient_first_name;
                    caseModel.PatientLastName        = patientData.patient_last_name;
                    caseModel.PatientBirthday        = patientData.birthday;
                    try
                    {
                        if (!consentValidToCache.ContainsKey(patientData.contractID))
                        {
                            double DurationOfParticipationConsentinMonths = ORM_CMN_CTR_Contract_Parameter.Query.Search(Connection, Transaction, new ORM_CMN_CTR_Contract_Parameter.Query()
                            {
                                IsDeleted      = false,
                                Tenant_RefID   = securityTicket.TenantID,
                                ParameterName  = "Duration of participation consent – Month",
                                Contract_RefID = patientData.contractID
                            }).SingleOrDefault().IfNumericValue_Value;
                            consentValidToCache.Add(patientData.contractID, Convert.ToInt32(DurationOfParticipationConsentinMonths));
                        }

                        DateTime participationConsentValidTo = patientData.ParticipationConsent.OrderBy(dt => dt.participation_consent_issue_date).FirstOrDefault().participation_consent_issue_date.AddMonths(consentValidToCache[patientData.contractID]);
                        caseModel.PatientParticipationConsentValidUntil = participationConsentValidTo;
                    }
                    catch (Exception ex)
                    {
                        caseModel.PatientParticipationConsentValidUntil = DateTime.MinValue;
                    }

                    caseModel.CaseNumber = Convert.ToInt32(errorCase.CaseNumber);
                    caseModel.CaseType   = errorCase.CodeName;

                    try
                    {
                        caseModel.Drug = cls_Get_Drug_Details_for_DrugID.Invoke(Connection, Transaction, new P_CAS_GDDfDID_1614()
                        {
                            DrugID = errorCase.DrugID
                        }, securityTicket).Result.drug_name;
                    }
                    catch (Exception ex)
                    {
                        caseModel.Drug = "-";
                    }

                    caseModel.Diagnose     = errorCase.IM_PotentialDiagnosis_Name;
                    caseModel.DiagnoseCode = errorCase.IM_PotentialDiagnosis_Code;
                    caseModel.Localization = errorCase.IM_PotentialDiagnosisLocalization_Code;

                    P_CAS_GTCfPIDaDIDaLC_1008 parameterDia = new P_CAS_GTCfPIDaDIDaLC_1008();
                    parameterDia.PatientID        = errorCase.Patient_RefID;
                    parameterDia.DiagnoseID       = errorCase.CodeForType == "treatment" || errorCase.CodeForType == "preexamination" ? errorCase.TreatmentPerformedDiganoseID : errorCase.AftercasePerformedDiagnoseID;
                    parameterDia.LocalizationCode = errorCase.IM_PotentialDiagnosisLocalization_Code;
                    parameterDia.PerformedDate    = errorCase.CodeForType == "treatment" || errorCase.CodeForType == "preexamination" ? errorCase.TreatmentDate : errorCase.AfterCareDate;
                    parameterDia.ActionTypeID     = treatment_performed_action_type_id;
                    if (errorCase.CodeForType == "preexamination")
                    {
                        if (preexaminationsCache.ContainsKey(errorCase.Patient_RefID) && preexaminationsCache[errorCase.Patient_RefID].ContainsKey(errorCase.IM_PotentialDiagnosisLocalization_Code))
                        {
                            caseModel.TreatmentCount = preexaminationsCache[errorCase.Patient_RefID][errorCase.IM_PotentialDiagnosisLocalization_Code].Count(c => c.PreexaminationDate.Date <= errorCase.TreatmentDate.Date);
                        }
                    }
                    else
                    {
                        caseModel.TreatmentCount = cls_Get_Treatment_Count_for_PatientID_And_DiagnoseID_and_LocalizationCode.Invoke(Connection, Transaction, parameterDia, securityTicket).Result.treatment_count;
                    }

                    caseModel.GPOS         = errorCase.BillingCode;
                    caseModel.TreatmentDay = errorCase.CodeForType == "treatment" || errorCase.CodeForType == "preexamination" ? errorCase.TreatmentDate : errorCase.AfterCareDate;
                    if (errorCase.CodeForType == "treatment")
                    {
                        caseModel.SurgeryDateForThisCase = errorCase.TreatmentDate;
                    }
                    else if (errorCase.CodeForType == "preexamination")
                    {
                        caseModel.SurgeryDateForThisCase = DateTime.MinValue;
                    }
                    else
                    {
                        CAS_GTdfA_0936 Trdate = cls_Get_Treatment_Date_for_Aftercare.Invoke(Connection, Transaction, new P_CAS_GTdfA_0936()
                        {
                            CaseID = errorCase.CaseID
                        }, securityTicket).Result;
                        if (Trdate != null)
                        {
                            caseModel.SurgeryDateForThisCase = Trdate.TreatmentDate;
                        }
                    }

                    switch (patientData.gender)
                    {
                    case 0:
                        caseModel.PatientSalutation = "Herr";
                        break;

                    case 1:
                        caseModel.PatientSalutation = "Frau";
                        break;

                    default:
                        caseModel.PatientSalutation = "-";
                        break;
                    }

                    if (!shouldChangeToFS8)
                    {
                        caseModel.CurrentStatus = FS5;
                    }
                    else
                    {
                        caseModel.CurrentStatus = FS8;
                    }
                    caseModel.DateOfCurrentStatus = DateTime.Now;
                    if (!shouldChangeToFS8)
                    {
                        caseModel.PreCurrentStatus = FS2;
                    }
                    else
                    {
                        caseModel.PreCurrentStatus = FS11;
                    }
                    caseModel.DateOfPreCurrentStatus = caseStatusOld.TransmittedOnDate;

                    caseModel.InvoiceNumberForTheHIP = Convert.ToInt32(errorCase.PositionNumber);

                    caseModel.AmountForThisGPOS           = errorCase.NumberForPayment;
                    caseModel.NumberOfNegativeTry         = negativeTransmition.Count.ToString();
                    caseModel.DateOfTheSubmissionToTheHIP = Parameter.transferToHIPDate;
                    caseModel.FeedBackOfTheHIP            = item.transmition_date;
                    caseModel.PaymentDate = DateTime.MinValue;

                    caseModel.DrugOrdered       = (errorCase.orderId != Guid.Empty && int.Parse(errorCase.orderStatusCode) != 6) ? "Ja" : "Nein";
                    caseModel.NoFee             = errorCase.IsPatientFeeWaived ? "Ja" : "Nein";
                    caseModel.InvoiceToPractice = errorCase.SendInvoiceToPractice ? "Ja" : "Nein";
                    caseModel.OnlyLabelRequired = errorCase.isLabelOnly ? "Ja" : "Nein";

                    var gposAssignmentCount = cls_Get_Gpos_AssignmentCount_for_GposID.Invoke(Connection, Transaction, new P_CAS_GGPOSACfGPOSID_1252()
                    {
                        GposID = errorCase.GposID
                    }, securityTicket).Result;
                    if (gposAssignmentCount.AssignmentCount != 0)
                    {
                        var is_management_fee_waived = cls_Get_Management_Fee_Property_Value_for_CaseID_and_GposID.Invoke(Connection, Transaction, new P_CAS_GMFPVfCIDaGPOSTID_1749()
                        {
                            CaseID = errorCase.CaseID, GposID = errorCase.GposID
                        }, securityTicket).Result;
                        caseModel.ManagementFee = is_management_fee_waived == null ? "-" : is_management_fee_waived.PropertyValue == "waived" ? "-" : management_fee_value;
                    }
                    else
                    {
                        caseModel.ManagementFee = "-";
                    }

                    Guid DocID = errorCase.CodeForType == "treatment" || errorCase.CodeForType == "preexamination" ? errorCase.SurgeryDoctor : errorCase.AfterCareDoctor;

                    DO_GDDfDID_0823 doctorData = cls_Get_Doctor_Details_for_DoctorID.Invoke(Connection, Transaction, new P_DO_GDDfDID_0823()
                    {
                        DoctorID = DocID
                    }, securityTicket).Result.First();

                    caseModel.BSNR              = doctorData.BSNR;
                    caseModel.PracticeName      = doctorData.practice;
                    caseModel.DocName           = doctorData.first_name + " " + doctorData.last_name;
                    caseModel.LANR              = doctorData.lanr;
                    caseModel.BankAccountHolder = string.IsNullOrEmpty(doctorData.OwnerText) ? "-" : doctorData.OwnerText;
                    caseModel.BankName          = doctorData.BankName == null ? "-" : doctorData.BankName;
                    caseModel.IBAN              = doctorData.IBAN == null ? "-" : doctorData.IBAN;
                    caseModel.BIC = doctorData.BICCode == null ? "-" : doctorData.BICCode;

                    caseModelList.Add(caseModel);


                    #endregion
                }
                catch (Exception ex)
                {
                    LogUtils.Logger.LogInfo(new LogUtils.LogEntry(ex.StackTrace));
                    throw new Exception("Bill position: " + item.bill_number, ex);
                }
            }

            //Change in Elastic---------------------------------------------------------------------------------

            for (int k = 0; k < NegativeResponseList.Count; k++)
            {
                var errorCase = allCases.SingleOrDefault(i => i.case_id == NegativeResponseList[k].caseID.ToString() && i.type == NegativeResponseList[k].type);
                if (errorCase == null)
                {
                    errorCase = allCases_FS11.SingleOrDefault(i => i.case_id == NegativeResponseList[k].caseID.ToString() && i.type == NegativeResponseList[k].type);
                    if (errorCase == null)
                    {
                        continue;
                    }

                    errorCase.status = "FS8";
                    //Change settlement from Stornierung anhängig to storniert
                    Settlement_Model settlement = Get_Settlement.GetSettlementForID(NegativeResponseList[k].plannedActionID.ToString(), securityTicket);
                    settlement.status = "FS8";
                    settlements.Add(settlement);
                    PatientDetailViewModel patient_detail = Retrieve_Patients.Get_PatientDetaiForID(settlement.id, securityTicket);
                    if (patient_detail != null)
                    {
                        patient_detail.status = "FS8";
                        patientDetailList.Add(patient_detail);
                    }
                }
                else
                {
                    errorCase.status = "FS5";
                }

                errorCase.status_date        = DateTime.Now;
                errorCase.status_date_string = DateTime.Now.ToString("dd.MM.yyyy");
                newCaseList.Add(errorCase);
            }

            if (settlements.Count > 0)
            {
                Add_new_Settlement.Import_Settlement_to_ElasticDB(settlements, securityTicket.TenantID.ToString());
            }

            if (patientDetailList.Count > 0)
            {
                Add_New_Patient.ImportPatientDetailsToElastic(patientDetailList, securityTicket.TenantID.ToString());
            }

            if (newCaseList.Count > 0)
            {
                Add_New_Submitted_Case.Import_Submitted_Case_Data_to_ElasticDB(newCaseList, securityTicket.TenantID.ToString());

                List <Documents> documentList = new List <Documents>();


                string hipID = Parameter.hipId;

                var healthInsuranceCompanyQuery = new ORM_HEC_HIS_HealthInsurance_Company.Query();
                healthInsuranceCompanyQuery.IsDeleted                = false;
                healthInsuranceCompanyQuery.Tenant_RefID             = securityTicket.TenantID;
                healthInsuranceCompanyQuery.HealthInsurance_IKNumber = hipID;

                var helathInsurance = ORM_HEC_HIS_HealthInsurance_Company.Query.Search(Connection, Transaction, healthInsuranceCompanyQuery).Single();

                var businessParticipantQuery = new ORM_CMN_BPT_BusinessParticipant.Query();
                businessParticipantQuery.CMN_BPT_BusinessParticipantID = helathInsurance.CMN_BPT_BusinessParticipant_RefID;
                businessParticipantQuery.IsDeleted    = false;
                businessParticipantQuery.Tenant_RefID = securityTicket.TenantID;

                var businessParticipant = ORM_CMN_BPT_BusinessParticipant.Query.Search(Connection, Transaction, businessParticipantQuery).Single();
                //Save Edifact
                string edi_path = System.IO.Path.GetTempPath() + Parameter.edi_name;
                System.IO.File.WriteAllText(edi_path, Parameter.edi_message);
                List <string> files = new List <string>();
                files.Add(edi_path);

                string zipPath = System.IO.Path.GetTempPath() + Parameter.edi_name + ".zip";
                ZipFIlesUtils.AddToArchive(zipPath, files);

                string    earliestDate    = OldTransmitionDateList.OrderBy(d => d).First().ToString("dd.MM.yyyy");
                string    lastDate        = OldTransmitionDateList.OrderBy(d => d).Last().ToString("dd.MM.yyyy");
                Documents documentEdifact = new Documents();
                documentEdifact.documentName           = "Import von " + earliestDate + " - " + lastDate;
                documentEdifact.documentOutputLocation = zipPath;
                documentEdifact.receiver = businessParticipant.DisplayName;
                documentEdifact.mimeType = "Application/Edifact_Error";
                documentList.Add(documentEdifact);

                Documents documentExcel = new Documents();

                documentExcel.documentName           = "ExcelReport" + DateTime.Now.ToString("dd.MM.yyyy_HH.mm");
                documentExcel.documentOutputLocation = GenerateReportCases.CreateCaseXlsReport(caseModelList, documentExcel.documentName);
                documentExcel.mimeType = UtilMethods.GetMimeType(documentExcel.documentOutputLocation);
                documentExcel.receiver = "MM";
                documentList.Add(documentExcel);

                foreach (var item in documentList)
                {
                    MemoryStream ms = new MemoryStream(File.ReadAllBytes(item.documentOutputLocation));

                    byte[] byteArrayFile    = ms.ToArray();
                    var    _providerFactory = ProviderFactory.Instance;
                    var    documentProvider = _providerFactory.CreateDocumentServiceProvider();
                    var    uploadedFrom     = HttpContext.Current.Request.UserHostAddress;
                    Guid   documentID       = documentProvider.UploadDocument(byteArrayFile, item.documentOutputLocation, securityTicket.SessionTicket, uploadedFrom);
                    string downloadURL      = documentProvider.GenerateImageThumbnailLink(documentID, securityTicket.SessionTicket, false, 200);

                    P_ARCH_UD_1326 parameterDoc = new P_ARCH_UD_1326();
                    parameterDoc.DocumentID   = documentID;
                    parameterDoc.Mime         = item.mimeType;
                    parameterDoc.DocumentName = item.documentName;
                    parameterDoc.DocumentDate = DateForElastic;
                    parameterDoc.Receiver     = item.receiver;
                    parameterDoc.ContractID   = item.ContractID;

                    if (parameterDoc.Mime == "Application/Edifact_Error")
                    {
                        parameterDoc.Description = parameterDoc.DocumentName;
                    }
                    else
                    {
                        parameterDoc.Description = "KV Fehler";
                    }

                    cls_Upload_Report.Invoke(Connection, Transaction, parameterDoc, securityTicket);
                }
            }


            return(returnValue);

            #endregion UserCode
        }
        protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_CAS_CAPA_1237 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_Guid();
            //Put your code here

            ORM_HEC_ACT_PlannedAction aftercare_planned_action = new ORM_HEC_ACT_PlannedAction();
            aftercare_planned_action.Creation_Timestamp      = DateTime.Now;
            aftercare_planned_action.HEC_ACT_PlannedActionID = Guid.NewGuid();
            aftercare_planned_action.IsPerformed             = false;
            aftercare_planned_action.Modification_Timestamp  = DateTime.Now;
            aftercare_planned_action.Patient_RefID           = Parameter.patient_id;
            aftercare_planned_action.PlannedFor_Date         = Parameter.treatment_date;
            aftercare_planned_action.Tenant_RefID            = securityTicket.TenantID;

            Guid id = Guid.Empty;

            var aftercare_doctor = ORM_HEC_Doctor.Query.Search(Connection, Transaction, new ORM_HEC_Doctor.Query()
            {
                HEC_DoctorID = Parameter.aftercare_doctor_practice_id,
                Tenant_RefID = securityTicket.TenantID,
                IsDeleted    = false
            }).SingleOrDefault();

            if (aftercare_doctor != null)
            {
                id = aftercare_doctor.BusinessParticipant_RefID;
            }
            else
            {
                var aftercare_practice = ORM_CMN_BPT_CTM_OrganizationalUnit.Query.Search(Connection, Transaction, new ORM_CMN_BPT_CTM_OrganizationalUnit.Query()
                {
                    IfMedicalPractise_HEC_MedicalPractice_RefID = Parameter.aftercare_doctor_practice_id,
                    Tenant_RefID = securityTicket.TenantID,
                    IsDeleted    = false
                }).SingleOrDefault();

                if (aftercare_practice != null)
                {
                    var aftercare_customer = ORM_CMN_BPT_CTM_Customer.Query.Search(Connection, Transaction, new ORM_CMN_BPT_CTM_Customer.Query()
                    {
                        CMN_BPT_CTM_CustomerID = aftercare_practice.Customer_RefID,
                        Tenant_RefID           = securityTicket.TenantID,
                        IsDeleted = false
                    }).SingleOrDefault();

                    if (aftercare_customer != null)
                    {
                        id = aftercare_customer.Ext_BusinessParticipant_RefID;
                    }
                }
            }

            aftercare_planned_action.ToBePerformedBy_BusinessParticipant_RefID = id;
            aftercare_planned_action.Save(Connection, Transaction);

            ORM_HEC_CAS_Case_RelevantPlannedAction aftercare_planned_action_to_case = new ORM_HEC_CAS_Case_RelevantPlannedAction();
            aftercare_planned_action_to_case.Case_RefID         = Parameter.case_id;
            aftercare_planned_action_to_case.Creation_Timestamp = DateTime.Now;
            aftercare_planned_action_to_case.HEC_CAS_Case_RelevantPlannedActionID = Guid.NewGuid();
            aftercare_planned_action_to_case.Modification_Timestamp = DateTime.Now;
            aftercare_planned_action_to_case.PlannedAction_RefID    = aftercare_planned_action.HEC_ACT_PlannedActionID;
            aftercare_planned_action_to_case.Tenant_RefID           = securityTicket.TenantID;

            aftercare_planned_action_to_case.Save(Connection, Transaction);

            ORM_HEC_ACT_ActionType.Query aftercare_planned_action_typeQ = new ORM_HEC_ACT_ActionType.Query();
            aftercare_planned_action_typeQ.GlobalPropertyMatchingID = "mm.docconect.doc.app.planned.action.aftercare";
            aftercare_planned_action_typeQ.Tenant_RefID             = securityTicket.TenantID;
            aftercare_planned_action_typeQ.IsDeleted = false;

            var aftercare_planned_action_type_id = Guid.Empty;

            var aftercare_planned_action_type = ORM_HEC_ACT_ActionType.Query.Search(Connection, Transaction, aftercare_planned_action_typeQ).SingleOrDefault();

            if (aftercare_planned_action_type == null)
            {
                aftercare_planned_action_type = new ORM_HEC_ACT_ActionType();

                Dict action_type_name_dict = new Dict(ORM_HEC_ACT_ActionType.TableName);

                foreach (var lang in Parameter.all_languagesL)
                {
                    var content = lang.ISO_639_1.Equals("DE") ? "nachsorge" : "aftercare";
                    action_type_name_dict.AddEntry(lang.CMN_LanguageID, content);
                }

                aftercare_planned_action_type.ActionType_Name          = action_type_name_dict;
                aftercare_planned_action_type.Creation_Timestamp       = DateTime.Now;
                aftercare_planned_action_type.GlobalPropertyMatchingID = "mm.docconect.doc.app.planned.action.aftercare";
                aftercare_planned_action_type.Modification_Timestamp   = DateTime.Now;
                aftercare_planned_action_type.HEC_ACT_ActionTypeID     = Guid.NewGuid();
                aftercare_planned_action_type.Tenant_RefID             = securityTicket.TenantID;
                aftercare_planned_action_type.Save(Connection, Transaction);

                aftercare_planned_action_type_id = aftercare_planned_action_type.HEC_ACT_ActionTypeID;
            }
            else
            {
                aftercare_planned_action_type_id = aftercare_planned_action_type.HEC_ACT_ActionTypeID;
            }

            ORM_HEC_ACT_PlannedAction_2_ActionType aftercare_planned_action_2_type = new ORM_HEC_ACT_PlannedAction_2_ActionType();
            aftercare_planned_action_2_type.Tenant_RefID                         = securityTicket.TenantID;
            aftercare_planned_action_2_type.Creation_Timestamp                   = DateTime.Now;
            aftercare_planned_action_2_type.IsDeleted                            = false;
            aftercare_planned_action_2_type.HEC_ACT_ActionType_RefID             = aftercare_planned_action_type_id;
            aftercare_planned_action_2_type.HEC_ACT_PlannedAction_RefID          = aftercare_planned_action.HEC_ACT_PlannedActionID;
            aftercare_planned_action_2_type.Modification_Timestamp               = DateTime.Now;
            aftercare_planned_action_2_type.HEC_ACT_PlannedAction_2_ActionTypeID = Guid.NewGuid();

            aftercare_planned_action_2_type.Save(Connection, Transaction);

            returnValue.Result = aftercare_planned_action.HEC_ACT_PlannedActionID;
            return(returnValue);

            #endregion UserCode
        }
Beispiel #8
0
        protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_CAS_CAPA_1237 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            //Leave UserCode region to enable user code saving
            #region UserCode
            var returnValue = new FR_Guid();
            //Put your code here

            ORM_HEC_ACT_PlannedAction aftercare_planned_action = new ORM_HEC_ACT_PlannedAction();
            aftercare_planned_action.Creation_Timestamp      = DateTime.Now;
            aftercare_planned_action.HEC_ACT_PlannedActionID = Guid.NewGuid();
            aftercare_planned_action.IsPerformed             = false;
            aftercare_planned_action.MedicalPractice_RefID   = Parameter.practice_id;
            aftercare_planned_action.Modification_Timestamp  = DateTime.Now;
            aftercare_planned_action.Patient_RefID           = Parameter.patient_id;
            aftercare_planned_action.PlannedFor_Date         = Parameter.treatment_date;
            aftercare_planned_action.Tenant_RefID            = securityTicket.TenantID;

            Guid id = Guid.Empty;

            var aftercare_doctor_account = cls_Get_Doctor_AccountID_for_DoctorID.Invoke(Connection, Transaction, new P_DO_GDAIDfDID_1549()
            {
                DoctorID = Parameter.aftercare_doctor_practice_id
            }, securityTicket).Result;
            if (aftercare_doctor_account != null)
            {
                id = aftercare_doctor_account.accountID;
            }
            else
            {
                var aftercare_practice_account = cls_Get_Practice_AccountID_for_PracticeID.Invoke(Connection, Transaction, new P_DO_GPAIDfPID_1522()
                {
                    PracticeID = Parameter.aftercare_doctor_practice_id
                }, securityTicket).Result;
                if (aftercare_practice_account != null)
                {
                    id = aftercare_practice_account.accountID;
                }
            }

            ORM_USR_Account.Query aftercare_accountQ = new ORM_USR_Account.Query();
            aftercare_accountQ.USR_AccountID = id;
            aftercare_accountQ.Tenant_RefID  = securityTicket.TenantID;
            aftercare_accountQ.IsDeleted     = false;

            var aftercare_account = ORM_USR_Account.Query.Search(Connection, Transaction, aftercare_accountQ).SingleOrDefault();
            if (aftercare_account != null)
            {
                aftercare_planned_action.ToBePerformedBy_BusinessParticipant_RefID = aftercare_account.BusinessParticipant_RefID;
            }

            aftercare_planned_action.Save(Connection, Transaction);

            ORM_HEC_CAS_Case_RelevantPlannedAction aftercare_planned_action_to_case = new ORM_HEC_CAS_Case_RelevantPlannedAction();
            aftercare_planned_action_to_case.Case_RefID         = Parameter.case_id;
            aftercare_planned_action_to_case.Creation_Timestamp = DateTime.Now;
            aftercare_planned_action_to_case.HEC_CAS_Case_RelevantPlannedActionID = Guid.NewGuid();
            aftercare_planned_action_to_case.Modification_Timestamp = DateTime.Now;
            aftercare_planned_action_to_case.PlannedAction_RefID    = aftercare_planned_action.HEC_ACT_PlannedActionID;
            aftercare_planned_action_to_case.Tenant_RefID           = securityTicket.TenantID;

            aftercare_planned_action_to_case.Save(Connection, Transaction);

            ORM_HEC_ACT_ActionType.Query aftercare_planned_action_typeQ = new ORM_HEC_ACT_ActionType.Query();
            aftercare_planned_action_typeQ.GlobalPropertyMatchingID = "mm.docconect.doc.app.planned.action.aftercare";
            aftercare_planned_action_typeQ.Tenant_RefID             = securityTicket.TenantID;
            aftercare_planned_action_typeQ.IsDeleted = false;

            var aftercare_planned_action_type_id = Guid.Empty;

            var aftercare_planned_action_type = ORM_HEC_ACT_ActionType.Query.Search(Connection, Transaction, aftercare_planned_action_typeQ).SingleOrDefault();

            if (aftercare_planned_action_type == null)
            {
                aftercare_planned_action_type = new ORM_HEC_ACT_ActionType();

                Dict action_type_name_dict = new Dict(ORM_HEC_ACT_ActionType.TableName);

                foreach (var lang in Parameter.all_languagesL)
                {
                    var content = lang.ISO_639_1.Equals("DE") ? "nachsorge" : "aftercare";
                    action_type_name_dict.AddEntry(lang.CMN_LanguageID, content);
                }

                aftercare_planned_action_type.ActionType_Name          = action_type_name_dict;
                aftercare_planned_action_type.Creation_Timestamp       = DateTime.Now;
                aftercare_planned_action_type.GlobalPropertyMatchingID = "mm.docconect.doc.app.planned.action.aftercare";
                aftercare_planned_action_type.Modification_Timestamp   = DateTime.Now;
                aftercare_planned_action_type.HEC_ACT_ActionTypeID     = Guid.NewGuid();
                aftercare_planned_action_type.Tenant_RefID             = securityTicket.TenantID;
                aftercare_planned_action_type.Save(Connection, Transaction);

                aftercare_planned_action_type_id = aftercare_planned_action_type.HEC_ACT_ActionTypeID;
            }
            else
            {
                aftercare_planned_action_type_id = aftercare_planned_action_type.HEC_ACT_ActionTypeID;
            }

            ORM_HEC_ACT_PlannedAction_2_ActionType aftercare_planned_action_2_type = new ORM_HEC_ACT_PlannedAction_2_ActionType();
            aftercare_planned_action_2_type.Tenant_RefID                         = securityTicket.TenantID;
            aftercare_planned_action_2_type.Creation_Timestamp                   = DateTime.Now;
            aftercare_planned_action_2_type.IsDeleted                            = false;
            aftercare_planned_action_2_type.HEC_ACT_ActionType_RefID             = aftercare_planned_action_type_id;
            aftercare_planned_action_2_type.HEC_ACT_PlannedAction_RefID          = aftercare_planned_action.HEC_ACT_PlannedActionID;
            aftercare_planned_action_2_type.Modification_Timestamp               = DateTime.Now;
            aftercare_planned_action_2_type.HEC_ACT_PlannedAction_2_ActionTypeID = Guid.NewGuid();

            aftercare_planned_action_2_type.Save(Connection, Transaction);

            returnValue.Result = aftercare_planned_action.HEC_ACT_PlannedActionID;
            return(returnValue);

            #endregion UserCode
        }
Beispiel #9
0
        protected static FR_CAS_SPE_1805 Execute(DbConnection Connection, DbTransaction Transaction, P_CAS_SPE_1805 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_CAS_SPE_1805();
            returnValue.Result = new CAS_SPE_1805();
            //Put your code here
            var case_id = Parameter.case_id;

            #region DATA
            var patient_details = cls_Get_Patient_Details_for_PatientID.Invoke(Connection, Transaction, new P_P_PA_GPDfPID_1124()
            {
                PatientID = Parameter.patient_id
            }, securityTicket).Result;
            if (patient_details == null)
            {
                throw new Exception("Patient details not found for ID: " + Parameter.patient_id);
            }

            var doctor = ORM_HEC_Doctor.Query.Search(Connection, Transaction, new ORM_HEC_Doctor.Query()
            {
                Tenant_RefID = securityTicket.TenantID, HEC_DoctorID = Parameter.doctor_id, IsDeleted = false
            }).SingleOrDefault();
            if (doctor == null)
            {
                throw new Exception("Doctor not found for ID: " + Parameter.doctor_id);
            }


            var doctor_details = cls_Get_Doctor_Details_for_DoctorID.Invoke(Connection, Transaction, new P_DO_GDDfDID_0823()
            {
                DoctorID = Parameter.doctor_id
            }, securityTicket).Result.FirstOrDefault();

            if (doctor_details == null)
            {
                throw new Exception("Doctor details not found for ID: " + Parameter.doctor_id);
            }

            var practice_details = cls_Get_Practice_Details_for_PracticeID.Invoke(Connection, Transaction, new P_DO_GPDfPID_1432()
            {
                PracticeID = doctor_details.practice_id
            }, securityTicket).Result.FirstOrDefault();
            if (practice_details == null)
            {
                throw new Exception("Practice details not found for ID: " + doctor_details.practice_id);
            }

            var shouldDownloadReportProperty = cls_Get_Practice_PropertyValue_for_PropertyName_and_PracticeID.Invoke(Connection, Transaction, new P_DO_GPPVfPNaPID_0916()
            {
                PracticeID = doctor_details.practice_id, PropertyName = "Download Report Upon Submission"
            }, securityTicket).Result;
            var shouldDownloadReport = shouldDownloadReportProperty == null ? false : shouldDownloadReportProperty.BooleanValue;

            ORM_USR_Account.Query trigger_accQ = new ORM_USR_Account.Query();
            trigger_accQ.Tenant_RefID  = securityTicket.TenantID;
            trigger_accQ.USR_AccountID = securityTicket.AccountID;
            trigger_accQ.IsDeleted     = false;

            ORM_USR_Account trigger_acc = ORM_USR_Account.Query.Search(Connection, Transaction, trigger_accQ).Single();

            ORM_CMN_Language.Query all_languagesQ = new ORM_CMN_Language.Query();
            all_languagesQ.Tenant_RefID = securityTicket.TenantID;
            all_languagesQ.IsDeleted    = false;

            var all_languagesL           = ORM_CMN_Language.Query.Search(Connection, Transaction, all_languagesQ).ToArray();
            var intraocular_procedure_id = Guid.Empty;
            #endregion

            if (!Parameter.isResubmit)
            {
                #region NEW CASE
                ORM_HEC_CAS_Case new_case = new ORM_HEC_CAS_Case();
                new_case.HEC_CAS_CaseID     = Guid.NewGuid();
                new_case.Creation_Timestamp = DateTime.Now;
                new_case.CreatedBy_BusinessParticipant_RefID = trigger_acc.BusinessParticipant_RefID;
                new_case.Patient_RefID          = Parameter.patient_id;
                new_case.Patient_FirstName      = patient_details.patient_first_name;
                new_case.Patient_LastName       = patient_details.patient_last_name;
                new_case.Patient_Gender         = patient_details.gender;
                new_case.Patient_BirthDate      = patient_details.birthday;
                new_case.CaseNumber             = cls_Get_Next_Case_Number.Invoke(Connection, Transaction, securityTicket).Result.case_number;
                new_case.Modification_Timestamp = DateTime.Now;

                DateTime today = DateTime.Today;
                int      age   = today.Year - patient_details.birthday.Year;
                if (patient_details.birthday > today.AddYears(-age))
                {
                    age--;
                }

                new_case.Patient_Age  = age;
                new_case.Tenant_RefID = securityTicket.TenantID;

                new_case.Save(Connection, Transaction);
                case_id = new_case.HEC_CAS_CaseID;
                #endregion NEW CASE

                #region INITIAL PERFORMED ACTION
                var initial_performed_action_id = cls_Create_Initial_Performed_Action.Invoke(Connection, Transaction, new P_CAS_CIPA_1140()
                {
                    all_languagesL    = all_languagesL,
                    case_id           = new_case.HEC_CAS_CaseID,
                    created_by_bpt    = trigger_acc.BusinessParticipant_RefID,
                    patient_id        = Parameter.patient_id,
                    practice_id       = doctor_details.practice_id,
                    action_type_gpmid = "mm.docconect.doc.app.performed.action.preexamination"
                }, securityTicket).Result;
                #endregion INITIAL PERFORMED ACTION

                #region LOCALIZATION
                ORM_HEC_DIA_Diagnosis_Localization diagnosis_localization = new ORM_HEC_DIA_Diagnosis_Localization();
                diagnosis_localization.Modification_Timestamp = DateTime.Now;
                diagnosis_localization.Tenant_RefID           = securityTicket.TenantID;
                diagnosis_localization.LocalizationCode       = Parameter.localization;

                diagnosis_localization.Save(Connection, Transaction);

                ORM_HEC_ACT_PerformedAction_DiagnosisUpdate initial_performed_action_diagnose = new ORM_HEC_ACT_PerformedAction_DiagnosisUpdate();
                initial_performed_action_diagnose.HEC_ACT_PerformedAction_RefID = initial_performed_action_id;
                initial_performed_action_diagnose.Modification_Timestamp        = DateTime.Now;
                initial_performed_action_diagnose.Tenant_RefID = securityTicket.TenantID;

                initial_performed_action_diagnose.Save(Connection, Transaction);

                ORM_HEC_ACT_PerformedAction_DiagnosisUpdate_Localization initial_performed_action_diagnose_localization = new ORM_HEC_ACT_PerformedAction_DiagnosisUpdate_Localization();
                initial_performed_action_diagnose_localization.HEX_EXC_Action_DiagnosisUpdate_RefID = initial_performed_action_diagnose.HEC_ACT_PerformedAction_DiagnosisUpdateID;
                initial_performed_action_diagnose_localization.HEC_DIA_Diagnosis_Localization_RefID = diagnosis_localization.HEC_DIA_Diagnosis_LocalizationID;
                initial_performed_action_diagnose_localization.Modification_Timestamp = DateTime.Now;
                initial_performed_action_diagnose_localization.Tenant_RefID           = securityTicket.TenantID;
                initial_performed_action_diagnose_localization.IM_PotentialDiagnosisLocalization_Code = Parameter.localization;

                initial_performed_action_diagnose_localization.Save(Connection, Transaction);
                #endregion

                #region PLANNED ACTION
                var action_gpmid = "mm.docconect.doc.app.planned.action.preexamination";

                var planned_action_type = ORM_HEC_ACT_ActionType.Query.Search(Connection, Transaction, new ORM_HEC_ACT_ActionType.Query()
                {
                    GlobalPropertyMatchingID = action_gpmid,
                    Tenant_RefID             = securityTicket.TenantID,
                    IsDeleted = false
                }).SingleOrDefault();

                if (planned_action_type == null)
                {
                    planned_action_type = new ORM_HEC_ACT_ActionType();
                    planned_action_type.GlobalPropertyMatchingID = action_gpmid;
                    planned_action_type.Modification_Timestamp   = DateTime.Now;
                    planned_action_type.Tenant_RefID             = securityTicket.TenantID;

                    planned_action_type.Save(Connection, Transaction);
                }

                // circular reference to same performed action in order to be compatible with treatment planned actions,
                // so that it can be accessed in the same way
                var preexamination_planned_action = new ORM_HEC_ACT_PlannedAction();
                preexamination_planned_action.IfPlannedFollowup_PreviousAction_RefID = initial_performed_action_id;
                preexamination_planned_action.IsPerformed = true;
                preexamination_planned_action.IfPerformed_PerformedAction_RefID = initial_performed_action_id;
                preexamination_planned_action.MedicalPractice_RefID             = doctor_details.practice_id;
                preexamination_planned_action.Modification_Timestamp            = DateTime.Now;
                preexamination_planned_action.Patient_RefID   = Parameter.patient_id;
                preexamination_planned_action.PlannedFor_Date = Parameter.date;
                preexamination_planned_action.ToBePerformedBy_BusinessParticipant_RefID = doctor.BusinessParticipant_RefID;
                preexamination_planned_action.Tenant_RefID = securityTicket.TenantID;

                preexamination_planned_action.Save(Connection, Transaction);

                var action_to_type = new ORM_HEC_ACT_PlannedAction_2_ActionType();
                action_to_type.HEC_ACT_ActionType_RefID    = planned_action_type.HEC_ACT_ActionTypeID;
                action_to_type.HEC_ACT_PlannedAction_RefID = preexamination_planned_action.HEC_ACT_PlannedActionID;
                action_to_type.Modification_Timestamp      = DateTime.Now;
                action_to_type.Tenant_RefID = securityTicket.TenantID;

                action_to_type.Save(Connection, Transaction);
                #endregion

                #region GPOS
                var patient_consent = ORM_HEC_CRT_InsuranceToBrokerContract_ParticipatingPatient.Query.Search(Connection, Transaction, new ORM_HEC_CRT_InsuranceToBrokerContract_ParticipatingPatient.Query()
                {
                    Patient_RefID = Parameter.patient_id,
                    IsDeleted     = false,
                    Tenant_RefID  = securityTicket.TenantID
                }).Where(t =>
                {
                    var ctrParameter = cls_Get_Contract_Parameter_Value_for_InsuranceToBrokerContractID.Invoke(Connection, Transaction, new P_MD_GCPVfITBCID_1647()
                    {
                        ParameterName = "Duration of participation consent – Month",
                        InsuranceToBrokerContractID = t.InsuranceToBrokerContract_RefID
                    }, securityTicket).Result;

                    var validThrough = ctrParameter == null || ctrParameter.ConsentValidForMonths == double.MaxValue ? DateTime.MaxValue : t.ValidFrom.AddMonths(Convert.ToInt32(ctrParameter.ConsentValidForMonths));
                    return(t.ValidFrom <= Parameter.date && validThrough >= Parameter.date);
                }).OrderBy(t => t.ValidFrom).FirstOrDefault();

                if (patient_consent == null)
                {
                    throw new Exception("No patients consents found for selected date: " + Parameter.date.ToString("dd.MM.yyyy") + " and  patient id: " + Parameter.patient_id);
                }


                var gpos_gpmid = "mm.docconnect.gpos.catalog.voruntersuchung";
                var preexamination_gpos_catalog = ORM_HEC_BIL_PotentialCode_Catalog.Query.Search(Connection, Transaction, new ORM_HEC_BIL_PotentialCode_Catalog.Query()
                {
                    Tenant_RefID             = securityTicket.TenantID,
                    IsDeleted                = false,
                    GlobalPropertyMatchingID = gpos_gpmid
                }).SingleOrDefault();

                if (preexamination_gpos_catalog == null)
                {
                    throw new Exception("Preexamination catalog not found.");
                }

                var gpos_connections_to_drugs = ORM_HEC_BIL_PotentialCode_2_HealthcareProduct.Query.Search(Connection, Transaction, new ORM_HEC_BIL_PotentialCode_2_HealthcareProduct.Query()
                {
                    Tenant_RefID = securityTicket.TenantID,
                    IsDeleted    = false
                }).GroupBy(t => t.HEC_BIL_PotentialCode_RefID);

                var gpos_connections_to_diagnoses = ORM_HEC_BIL_PotentialCode_2_PotentialDiagnosis.Query.Search(Connection, Transaction, new ORM_HEC_BIL_PotentialCode_2_PotentialDiagnosis.Query()
                {
                    Tenant_RefID = securityTicket.TenantID,
                    IsDeleted    = false
                }).GroupBy(t => t.HEC_BIL_PotentialCode_RefID);

                var preexamination_gposes = ORM_HEC_BIL_PotentialCode.Query.Search(Connection, Transaction, new ORM_HEC_BIL_PotentialCode.Query()
                {
                    Tenant_RefID = securityTicket.TenantID,
                    IsDeleted    = false,
                    PotentialCode_Catalog_RefID = preexamination_gpos_catalog.HEC_BIL_PotentialCode_CatalogID
                });

                var covered_gposes = ORM_HEC_CTR_InsuranceToBrokerContracts_CoveredPotentialBillCode.Query.Search(Connection, Transaction, new ORM_HEC_CTR_InsuranceToBrokerContracts_CoveredPotentialBillCode.Query()
                {
                    Tenant_RefID = securityTicket.TenantID,
                    IsDeleted    = false,
                    InsuranceToBrokerContract_RefID = patient_consent.InsuranceToBrokerContract_RefID
                });

                preexamination_gposes = preexamination_gposes.Where(t => covered_gposes.Any(c => c.PotentialBillCode_RefID == t.HEC_BIL_PotentialCodeID)).ToList();

                var bill_header = new ORM_BIL_BillHeader();
                bill_header.Modification_Timestamp = DateTime.Now;
                bill_header.Tenant_RefID           = securityTicket.TenantID;

                foreach (var gpos in preexamination_gposes)
                {
                    if (!gpos_connections_to_diagnoses.Any(t => t.Key == gpos.HEC_BIL_PotentialCodeID) && !gpos_connections_to_drugs.Any(t => t.Key == gpos.HEC_BIL_PotentialCodeID))
                    {
                        var price_value = ORM_CMN_Price_Value.Query.Search(Connection, Transaction, new ORM_CMN_Price_Value.Query()
                        {
                            Price_RefID = gpos.Price_RefID, IsDeleted = false, Tenant_RefID = securityTicket.TenantID
                        }).SingleOrDefault();
                        if (price_value == null)
                        {
                            throw new Exception("Price value not found for GPOS: " + gpos.BillingCode);
                        }

                        ORM_BIL_BillPosition gpos_position = new ORM_BIL_BillPosition();
                        gpos_position.BIL_BilHeader_RefID        = bill_header.BIL_BillHeaderID;
                        gpos_position.Modification_Timestamp     = DateTime.Now;
                        gpos_position.Tenant_RefID               = securityTicket.TenantID;
                        gpos_position.PositionValue_IncludingTax = Convert.ToDecimal(price_value.PriceValue_Amount);
                        gpos_position.PositionNumber             = cls_Get_Next_Bill_Position_Number.Invoke(Connection, Transaction, securityTicket).Result.bill_position_number;

                        gpos_position.Save(Connection, Transaction);

                        ORM_BIL_BillPosition_TransmitionStatus fs_status = new ORM_BIL_BillPosition_TransmitionStatus();
                        fs_status.BillPosition_RefID     = gpos_position.BIL_BillPositionID;
                        fs_status.IsActive               = true;
                        fs_status.Modification_Timestamp = DateTime.Now;
                        fs_status.Tenant_RefID           = securityTicket.TenantID;
                        fs_status.TransmitionCode        = 1;
                        fs_status.TransmitionStatusKey   = "preexamination";
                        fs_status.TransmittedOnDate      = DateTime.Now;

                        fs_status.Save(Connection, Transaction);

                        ORM_HEC_BIL_BillPosition hec_gpos_position = new ORM_HEC_BIL_BillPosition();
                        hec_gpos_position.Ext_BIL_BillPosition_RefID = gpos_position.BIL_BillPositionID;
                        hec_gpos_position.Modification_Timestamp     = DateTime.Now;
                        hec_gpos_position.Tenant_RefID = securityTicket.TenantID;
                        hec_gpos_position.PositionFor_Patient_RefID = Parameter.patient_id;

                        hec_gpos_position.Save(Connection, Transaction);

                        ORM_HEC_BIL_BillPosition_BillCode hec_gpos_position_code = new ORM_HEC_BIL_BillPosition_BillCode();
                        hec_gpos_position_code.BillPosition_RefID     = hec_gpos_position.HEC_BIL_BillPositionID;
                        hec_gpos_position_code.IM_BillingCode         = gpos.BillingCode;
                        hec_gpos_position_code.Modification_Timestamp = DateTime.Now;
                        hec_gpos_position_code.PotentialCode_RefID    = gpos.HEC_BIL_PotentialCodeID;
                        hec_gpos_position_code.Tenant_RefID           = securityTicket.TenantID;

                        hec_gpos_position_code.Save(Connection, Transaction);

                        ORM_HEC_CAS_Case_BillCode hec_gpos_case_code = new ORM_HEC_CAS_Case_BillCode();
                        hec_gpos_case_code.HEC_BIL_BillPosition_BillCode_RefID = hec_gpos_position_code.HEC_BIL_BillPosition_BillCodeID;
                        hec_gpos_case_code.HEC_CAS_Case_RefID     = new_case.HEC_CAS_CaseID;
                        hec_gpos_case_code.Modification_Timestamp = DateTime.Now;
                        hec_gpos_case_code.Tenant_RefID           = securityTicket.TenantID;

                        hec_gpos_case_code.Save(Connection, Transaction);

                        ORM_BIL_BillPosition_PropertyValue gpos_management_fee_property_value = new ORM_BIL_BillPosition_PropertyValue();
                        gpos_management_fee_property_value.BIL_BillPosition_RefID           = gpos_position.BIL_BillPositionID;
                        gpos_management_fee_property_value.BIL_BillPosition_PropertyValueID = Guid.NewGuid();
                        gpos_management_fee_property_value.Creation_Timestamp     = DateTime.Now;
                        gpos_management_fee_property_value.Modification_Timestamp = DateTime.Now;
                        gpos_management_fee_property_value.PropertyKey            = "mm.doc.connect.management.fee";
                        gpos_management_fee_property_value.PropertyValue          = "waived";
                        gpos_management_fee_property_value.Tenant_RefID           = securityTicket.TenantID;

                        gpos_management_fee_property_value.Save(Connection, Transaction);

                        bill_header.TotalValue_IncludingTax += Convert.ToDecimal(price_value.PriceValue_Amount);
                    }
                }

                bill_header.Save(Connection, Transaction);
                #endregion
            }

            return(returnValue);

            #endregion UserCode
        }
Beispiel #10
0
        protected static FR_Guids Execute(DbConnection Connection, DbTransaction Transaction, P_CAS_CCGPOS_1000 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var  returnValue = new FR_Guids();
            Guid treatment_performed_action_type_id = Guid.Empty;
            var  resultList = new List <Guid>();

            var treatment_performed_action_type = ORM_HEC_ACT_ActionType.Query.Search(Connection, Transaction, new ORM_HEC_ACT_ActionType.Query()
            {
                Tenant_RefID             = securityTicket.TenantID,
                IsDeleted                = false,
                GlobalPropertyMatchingID = "mm.docconect.doc.app.performed.action.treatment"
            }).SingleOrDefault();

            if (treatment_performed_action_type == null)
            {
                treatment_performed_action_type = new ORM_HEC_ACT_ActionType();
                treatment_performed_action_type.GlobalPropertyMatchingID = "mm.docconect.doc.app.performed.action.treatment";
                treatment_performed_action_type.Creation_Timestamp       = DateTime.Now;
                treatment_performed_action_type.Modification_Timestamp   = DateTime.Now;
                treatment_performed_action_type.Tenant_RefID             = securityTicket.TenantID;

                treatment_performed_action_type.Save(Connection, Transaction);

                treatment_performed_action_type_id = treatment_performed_action_type.HEC_ACT_ActionTypeID;
            }
            else
            {
                treatment_performed_action_type_id = treatment_performed_action_type.HEC_ACT_ActionTypeID;
            }

            var treatment_count = cls_Get_Treatment_Count_for_PatientID_And_DiagnoseID_and_LocalizationCode.Invoke(Connection, Transaction, new P_CAS_GTCfPIDaDIDaLC_1008()
            {
                ActionTypeID     = treatment_performed_action_type_id,
                DiagnoseID       = Parameter.diagnose_id,
                PatientID        = Parameter.patient_id,
                LocalizationCode = Parameter.localization,
                PerformedDate    = Parameter.treatment_date == DateTime.MinValue ? DateTime.Now : Parameter.treatment_date
            }, securityTicket).Result;

            if (treatment_count != null)
            {
                treatment_count.treatment_count++;

                var contracts = cls_Get_InsuranceToBrokerContractID_for_DrugID_and_DiagnoseID.Invoke(Connection, Transaction, new P_CAS_GItBCIDfDIDaDID_1541()
                {
                    DiagnoseID    = Parameter.diagnose_id,
                    DrugID        = Parameter.drug_id,
                    PatientID     = Parameter.patient_id,
                    TreatmentDate = DateTime.Now
                }, securityTicket).Result.OrderBy(ctr => ctr.patient_consent_valid_from);

                var contract_id = contracts.LastOrDefault(ctr => ctr.patient_consent_valid_from.Date <= Parameter.treatment_date);

                if (contract_id == null)
                {
                    contract_id = contracts.LastOrDefault();
                }

                if (contract_id == null)
                {
                    throw new Exception("Contract not found during GPOS calculation");
                }

                var gpos_details = cls_Get_All_GPOS_Details_for_ContractID.Invoke(Connection, Transaction, new P_CAS_GAGPOSDfCID_1754()
                {
                    ContractID = contract_id.contract_id
                }, securityTicket).Result;

                if (gpos_details.Length != 0)
                {
                    List <string> gpos_types = new List <string>();

                    if (Parameter.oct_doctor_id != Guid.Empty)
                    {
                        gpos_types.Add("mm.docconnect.gpos.catalog.voruntersuchung");
                    }
                    else
                    {
                        if (Parameter.treatment_doctor_id == Guid.Empty && Parameter.ac_doctor_id != Guid.Empty)
                        {
                            gpos_types.Add("mm.docconnect.gpos.catalog.nachsorge");
                        }
                        else if (Parameter.diagnose_id != Guid.Empty)
                        {
                            gpos_types.Add("mm.docconnect.gpos.catalog.operation");
                            gpos_types.Add("mm.docconnect.gpos.catalog.nachsorge");
                        }
                    }

                    foreach (var gpos_type in gpos_types)
                    {
                        foreach (var gpos_detail in gpos_details.Where(t => t.GposType == gpos_type))
                        {
                            var covered_drugs = ORM_HEC_BIL_PotentialCode_2_HealthcareProduct.Query.Search(Connection, Transaction, new ORM_HEC_BIL_PotentialCode_2_HealthcareProduct.Query()
                            {
                                HEC_BIL_PotentialCode_RefID = gpos_detail.GposID,
                                Tenant_RefID = securityTicket.TenantID,
                                IsDeleted    = false
                            }).Select(covered_drug => covered_drug.HEC_Product_RefID);

                            var covered_diagnoses = ORM_HEC_BIL_PotentialCode_2_PotentialDiagnosis.Query.Search(Connection, Transaction, new ORM_HEC_BIL_PotentialCode_2_PotentialDiagnosis.Query()
                            {
                                HEC_BIL_PotentialCode_RefID = gpos_detail.GposID,
                                Tenant_RefID = securityTicket.TenantID,
                                IsDeleted    = false
                            }).Select(covered_diagnose => covered_diagnose.HEC_DIA_PotentialDiagnosis_RefID);

                            var drug_condition     = covered_drugs.Any() ? covered_drugs.Any(t => t == Parameter.drug_id) : true;
                            var diagnose_condition = covered_diagnoses.Any() ? covered_diagnoses.Any(t => t == Parameter.diagnose_id) : true;

                            bool treatment_count_condition = gpos_detail.FromInjection > 1000000;

                            if (covered_drugs.Any() && covered_diagnoses.Any())
                            {
                                var gpos_details_for_drug_diagnose_combo = cls_Get_GPOS_Details_for_DiagnoseID_and_DrugID.Invoke(Connection, Transaction, new P_CAS_GGPOSDfDIDaDID_1033()
                                {
                                    ContractID = contract_id.contract_id,
                                    DiagnoseID = Parameter.diagnose_id,
                                    DrugID     = Parameter.drug_id
                                }, securityTicket).Result;

                                treatment_count_condition = treatment_count.treatment_count >= gpos_detail.FromInjection &&
                                                            !gpos_details_for_drug_diagnose_combo.Any(gpos => treatment_count.treatment_count >= gpos.injection_from && gpos.injection_from > gpos_detail.FromInjection && gpos.gpos_type == gpos_type);
                            }

                            var gpos_condition = drug_condition && diagnose_condition && treatment_count_condition;

                            if (gpos_condition)
                            {
                                ORM_BIL_BillPosition gpos_position = new ORM_BIL_BillPosition();
                                gpos_position.BIL_BilHeader_RefID        = Guid.Empty;
                                gpos_position.Creation_Timestamp         = Parameter.creation_timestamp != DateTime.MinValue ? Parameter.creation_timestamp : DateTime.Now;
                                gpos_position.Modification_Timestamp     = DateTime.Now;
                                gpos_position.Tenant_RefID               = securityTicket.TenantID;
                                gpos_position.PositionValue_IncludingTax = Convert.ToDecimal(gpos_detail.GposPrice);

                                gpos_position.Save(Connection, Transaction);

                                resultList.Add(gpos_position.BIL_BillPositionID);

                                ORM_HEC_BIL_BillPosition hec_gpos_position = new ORM_HEC_BIL_BillPosition();
                                hec_gpos_position.Creation_Timestamp         = Parameter.creation_timestamp != DateTime.MinValue ? Parameter.creation_timestamp : DateTime.Now;
                                hec_gpos_position.Ext_BIL_BillPosition_RefID = gpos_position.BIL_BillPositionID;
                                hec_gpos_position.HEC_BIL_BillPositionID     = Guid.NewGuid();
                                hec_gpos_position.Modification_Timestamp     = DateTime.Now;
                                hec_gpos_position.Tenant_RefID = securityTicket.TenantID;
                                hec_gpos_position.PositionFor_Patient_RefID = Parameter.patient_id;

                                hec_gpos_position.Save(Connection, Transaction);

                                ORM_HEC_BIL_BillPosition_BillCode hec_gpos_position_code = new ORM_HEC_BIL_BillPosition_BillCode();
                                hec_gpos_position_code.BillPosition_RefID = hec_gpos_position.HEC_BIL_BillPositionID;
                                hec_gpos_position_code.Creation_Timestamp = Parameter.creation_timestamp != DateTime.MinValue ? Parameter.creation_timestamp : DateTime.Now;
                                hec_gpos_position_code.HEC_BIL_BillPosition_BillCodeID = Guid.NewGuid();
                                hec_gpos_position_code.IM_BillingCode         = gpos_detail.GposNumber;
                                hec_gpos_position_code.Modification_Timestamp = DateTime.Now;
                                hec_gpos_position_code.PotentialCode_RefID    = gpos_detail.GposID;
                                hec_gpos_position_code.Tenant_RefID           = securityTicket.TenantID;

                                hec_gpos_position_code.Save(Connection, Transaction);

                                ORM_HEC_CAS_Case_BillCode hec_gpos_case_code = new ORM_HEC_CAS_Case_BillCode();
                                hec_gpos_case_code.Creation_Timestamp = Parameter.creation_timestamp != DateTime.MinValue ? Parameter.creation_timestamp : DateTime.Now;
                                hec_gpos_case_code.HEC_BIL_BillPosition_BillCode_RefID = hec_gpos_position_code.HEC_BIL_BillPosition_BillCodeID;
                                hec_gpos_case_code.HEC_CAS_Case_BillCodeID             = Guid.NewGuid();
                                hec_gpos_case_code.HEC_CAS_Case_RefID     = Parameter.case_id;
                                hec_gpos_case_code.Modification_Timestamp = DateTime.Now;
                                hec_gpos_case_code.Tenant_RefID           = securityTicket.TenantID;

                                hec_gpos_case_code.Save(Connection, Transaction);
                            }
                        }
                    }
                }
            }

            returnValue.Result = resultList.ToArray();
            return(returnValue);

            #endregion UserCode
        }
        protected static FR_Base Execute(DbConnection Connection, DbTransaction Transaction, P_CAS_CCGPOS_1000 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var  returnValue = new FR_Base();
            Guid treatment_performed_action_type_id = Guid.Empty;

            var treatment_performed_action_type = ORM_HEC_ACT_ActionType.Query.Search(Connection, Transaction, new ORM_HEC_ACT_ActionType.Query()
            {
                Tenant_RefID             = securityTicket.TenantID,
                IsDeleted                = false,
                GlobalPropertyMatchingID = "mm.docconect.doc.app.performed.action.treatment"
            }).SingleOrDefault();

            if (treatment_performed_action_type == null)
            {
                treatment_performed_action_type = new ORM_HEC_ACT_ActionType();
                treatment_performed_action_type.GlobalPropertyMatchingID = "mm.docconect.doc.app.performed.action.treatment";
                treatment_performed_action_type.Creation_Timestamp       = DateTime.Now;
                treatment_performed_action_type.Modification_Timestamp   = DateTime.Now;
                treatment_performed_action_type.Tenant_RefID             = securityTicket.TenantID;

                treatment_performed_action_type.Save(Connection, Transaction);

                treatment_performed_action_type_id = treatment_performed_action_type.HEC_ACT_ActionTypeID;
            }
            else
            {
                treatment_performed_action_type_id = treatment_performed_action_type.HEC_ACT_ActionTypeID;
            }

            ORM_HEC_Product.Query hec_drug_detailsQ = new ORM_HEC_Product.Query();
            hec_drug_detailsQ.HEC_ProductID = Parameter.drug_id;
            hec_drug_detailsQ.Tenant_RefID  = securityTicket.TenantID;
            hec_drug_detailsQ.IsDeleted     = false;

            var hec_drug_details = ORM_HEC_Product.Query.Search(Connection, Transaction, hec_drug_detailsQ).SingleOrDefault();
            if (hec_drug_details != null)
            {
                ORM_CMN_PRO_Product.Query cmn_drug_detailsQ = new ORM_CMN_PRO_Product.Query();
                cmn_drug_detailsQ.Tenant_RefID      = securityTicket.TenantID;
                cmn_drug_detailsQ.CMN_PRO_ProductID = hec_drug_details.Ext_PRO_Product_RefID;
                cmn_drug_detailsQ.IsDeleted         = false;

                var cmn_drug_details = ORM_CMN_PRO_Product.Query.Search(Connection, Transaction, cmn_drug_detailsQ).SingleOrDefault();
                if (cmn_drug_details != null)
                {
                    var drug_name = cmn_drug_details.Product_Name.GetContent(Parameter.all_languagesL.FirstOrDefault().CMN_LanguageID);

                    var treatment_count = cls_Get_Treatment_Count_for_PatientID_And_DiagnoseID_and_LocalizationCode.Invoke(Connection, Transaction, new P_CAS_GTCfPIDaDIDaLC_1008()
                    {
                        ActionTypeID     = treatment_performed_action_type_id,
                        DiagnoseID       = Parameter.diagnose_id,
                        PatientID        = Parameter.patient_id,
                        LocalizationCode = Parameter.localization,
                        PerformedDate    = Parameter.treatment_date == DateTime.MinValue ? DateTime.Now : Parameter.treatment_date
                    }, securityTicket).Result;

                    if (treatment_count != null)
                    {
                        treatment_count.treatment_count++;

                        var contracts = cls_Get_InsuranceToBrokerContractID_for_DrugID_and_DiagnoseID.Invoke(Connection, Transaction, new P_CAS_GItBCIDfDIDaDID_1541()
                        {
                            DiagnoseID    = Parameter.diagnose_id,
                            DrugID        = Parameter.drug_id,
                            PatientID     = Parameter.patient_id,
                            TreatmentDate = Parameter.treatment_date
                        }, securityTicket).Result;

                        var contract_id = contracts.Where(ctr => ctr.patient_consent_valid_from.AddMonths(ctr.contract_consent_valid_for_months) >= Parameter.treatment_date).OrderBy(ctr => ctr.patient_consent_valid_from).FirstOrDefault();

                        if (contract_id != null)
                        {
                            var gpos_details = cls_Get_GPOS_Details_for_DiagnoseID_and_DrugID.Invoke(Connection, Transaction, new P_CAS_GGPOSDfDIDaDID_1033()
                            {
                                DiagnoseID = Parameter.diagnose_id,
                                DrugID     = Parameter.drug_id,
                                ContractID = contract_id.contract_id
                            }, securityTicket).Result;

                            if (gpos_details.Length != 0)
                            {
                                if (!Parameter.should_update)
                                {
                                    List <string> gpos_types = new List <string>();

                                    if (Parameter.treatment_doctor_id != Guid.Empty)
                                    {
                                        gpos_types.Add("mm.docconnect.gpos.catalog.operation");
                                    }

                                    if (Parameter.ac_doctor_id != Guid.Empty)
                                    {
                                        gpos_types.Add("mm.docconnect.gpos.catalog.nachsorge");
                                    }

                                    if (drug_name.Contains("Bevacizumab") && Parameter.treatment_doctor_id != Guid.Empty)
                                    {
                                        gpos_types.Add("mm.docconnect.gpos.catalog.zusatzposition.bevacizumab");
                                    }

                                    if (Parameter.treatment_doctor_id != Guid.Empty)
                                    {
                                        gpos_types.Add("mm.docconnect.gpos.catalog.wartezeitenmanagement");
                                    }

                                    foreach (var gpos_type in gpos_types)
                                    {
                                        foreach (var gpos_detail in gpos_details)
                                        {
                                            if (gpos_detail.gpos_type == gpos_type)
                                            {
                                                bool gpos_condition = gpos_type == "mm.docconnect.gpos.catalog.operation" || gpos_type == "mm.docconnect.gpos.catalog.nachsorge" ?
                                                                      treatment_count.treatment_count >= gpos_detail.injection_from &&
                                                                      !gpos_details.Any(gpos => treatment_count.treatment_count >= gpos.injection_from && gpos.injection_from > gpos_detail.injection_from && gpos.gpos_type == gpos_type) : true;

                                                if (gpos_condition)
                                                {
                                                    ORM_BIL_BillPosition gpos_position = new ORM_BIL_BillPosition();
                                                    gpos_position.BIL_BilHeader_RefID        = Guid.Empty;
                                                    gpos_position.BIL_BillPositionID         = Guid.NewGuid();
                                                    gpos_position.Creation_Timestamp         = DateTime.Now;
                                                    gpos_position.Modification_Timestamp     = DateTime.Now;
                                                    gpos_position.Tenant_RefID               = securityTicket.TenantID;
                                                    gpos_position.PositionValue_IncludingTax = Convert.ToDecimal(gpos_detail.gpos_price);

                                                    gpos_position.Save(Connection, Transaction);

                                                    ORM_HEC_BIL_BillPosition hec_gpos_position = new ORM_HEC_BIL_BillPosition();
                                                    hec_gpos_position.Creation_Timestamp         = DateTime.Now;
                                                    hec_gpos_position.Ext_BIL_BillPosition_RefID = gpos_position.BIL_BillPositionID;
                                                    hec_gpos_position.HEC_BIL_BillPositionID     = Guid.NewGuid();
                                                    hec_gpos_position.Modification_Timestamp     = DateTime.Now;
                                                    hec_gpos_position.Tenant_RefID = securityTicket.TenantID;
                                                    hec_gpos_position.PositionFor_Patient_RefID = Parameter.patient_id;

                                                    hec_gpos_position.Save(Connection, Transaction);

                                                    ORM_HEC_BIL_BillPosition_BillCode hec_gpos_position_code = new ORM_HEC_BIL_BillPosition_BillCode();
                                                    hec_gpos_position_code.BillPosition_RefID = hec_gpos_position.HEC_BIL_BillPositionID;
                                                    hec_gpos_position_code.Creation_Timestamp = DateTime.Now;
                                                    hec_gpos_position_code.HEC_BIL_BillPosition_BillCodeID = Guid.NewGuid();
                                                    hec_gpos_position_code.IM_BillingCode         = gpos_detail.gpos_code;
                                                    hec_gpos_position_code.Modification_Timestamp = DateTime.Now;
                                                    hec_gpos_position_code.PotentialCode_RefID    = gpos_detail.gpos_id;
                                                    hec_gpos_position_code.Tenant_RefID           = securityTicket.TenantID;

                                                    hec_gpos_position_code.Save(Connection, Transaction);

                                                    ORM_HEC_CAS_Case_BillCode hec_gpos_case_code = new ORM_HEC_CAS_Case_BillCode();
                                                    hec_gpos_case_code.Creation_Timestamp = DateTime.Now;
                                                    hec_gpos_case_code.HEC_BIL_BillPosition_BillCode_RefID = hec_gpos_position_code.HEC_BIL_BillPosition_BillCodeID;
                                                    hec_gpos_case_code.HEC_CAS_Case_BillCodeID             = Guid.NewGuid();
                                                    hec_gpos_case_code.HEC_CAS_Case_RefID     = Parameter.case_id;
                                                    hec_gpos_case_code.Modification_Timestamp = DateTime.Now;
                                                    hec_gpos_case_code.Tenant_RefID           = securityTicket.TenantID;

                                                    hec_gpos_case_code.Save(Connection, Transaction);
                                                }
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    var bill_position_ids = cls_Get_BillPositionIDs_for_CaseID.Invoke(Connection, Transaction, new P_CAS_GBPIDsfCID_0928()
                                    {
                                        CaseID = Parameter.case_id
                                    }, securityTicket).Result;

                                    foreach (var id in bill_position_ids)
                                    {
                                        foreach (var gpos_detail in gpos_details)
                                        {
                                            if (id.gpos_type == "mm.docconnect.gpos.catalog.operation" || id.gpos_type == "mm.docconnect.gpos.catalog.nachsorge")
                                            {
                                                if (id.gpos_type == gpos_detail.gpos_type)
                                                {
                                                    if (treatment_count.treatment_count >= gpos_detail.injection_from &&
                                                        !gpos_details.Any(gpos => treatment_count.treatment_count >= gpos.injection_from && gpos.injection_from > gpos_detail.injection_from))
                                                    {
                                                        ORM_BIL_BillPosition.Query old_gpos_positionQ = new ORM_BIL_BillPosition.Query();
                                                        old_gpos_positionQ.BIL_BillPositionID = id.bill_position_id;
                                                        old_gpos_positionQ.Tenant_RefID       = securityTicket.TenantID;
                                                        old_gpos_positionQ.IsDeleted          = false;

                                                        var old_gpos_position = ORM_BIL_BillPosition.Query.Search(Connection, Transaction, old_gpos_positionQ).SingleOrDefault();
                                                        if (old_gpos_position != null)
                                                        {
                                                            old_gpos_position.Modification_Timestamp     = DateTime.Now;
                                                            old_gpos_position.PositionValue_IncludingTax = Convert.ToDecimal(gpos_detail.gpos_price);

                                                            old_gpos_position.Save(Connection, Transaction);

                                                            ORM_HEC_BIL_BillPosition.Query old_hec_gpos_positionQ = new ORM_HEC_BIL_BillPosition.Query();
                                                            old_hec_gpos_positionQ.Ext_BIL_BillPosition_RefID = old_gpos_position.BIL_BillPositionID;
                                                            old_hec_gpos_positionQ.Tenant_RefID = securityTicket.TenantID;
                                                            old_hec_gpos_positionQ.PositionFor_Patient_RefID = Parameter.patient_id;
                                                            old_hec_gpos_positionQ.IsDeleted = false;

                                                            var old_hec_gpos_position = ORM_HEC_BIL_BillPosition.Query.Search(Connection, Transaction, old_hec_gpos_positionQ).SingleOrDefault();
                                                            if (old_hec_gpos_position != null)
                                                            {
                                                                ORM_HEC_BIL_BillPosition_BillCode.Query old_hec_gpos_position_codeQ = new ORM_HEC_BIL_BillPosition_BillCode.Query();
                                                                old_hec_gpos_position_codeQ.Tenant_RefID       = securityTicket.TenantID;
                                                                old_hec_gpos_position_codeQ.BillPosition_RefID = old_hec_gpos_position.HEC_BIL_BillPositionID;
                                                                old_hec_gpos_position_codeQ.IsDeleted          = false;

                                                                var old_hec_gpos_position_code = ORM_HEC_BIL_BillPosition_BillCode.Query.Search(Connection, Transaction, old_hec_gpos_position_codeQ).SingleOrDefault();
                                                                if (old_hec_gpos_position_code != null)
                                                                {
                                                                    old_hec_gpos_position_code.IM_BillingCode         = gpos_detail.gpos_code;
                                                                    old_hec_gpos_position_code.Modification_Timestamp = DateTime.Now;
                                                                    old_hec_gpos_position_code.PotentialCode_RefID    = gpos_detail.gpos_id;

                                                                    old_hec_gpos_position_code.Save(Connection, Transaction);
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

            return(returnValue);

            #endregion UserCode
        }