|
@@ -113,7 +113,175 @@ ORDER BY r1.routed_med_id, r3.dxid_desc56, r2.ddxcn_sl
|
|
|
|
|
|
if(!function_exists('drug_allergy_info')) {
|
|
|
function drug_allergy_info($_drugs, $_allergies) {
|
|
|
+ $output = [];
|
|
|
+
|
|
|
+ /*
|
|
|
+ for each allergy
|
|
|
+ if damConceptIdType = 1 // allergen-group-id
|
|
|
+ // https://docs.fdbhealth.com/display/MKDOCUS/Screening+an+NDC+for+a+DAM_ALRGN_GRP+Allergen+-+Illustration+of+Scenario+C
|
|
|
+ ...
|
|
|
+ elseif damConceptIdType = 2 // medication-name-id
|
|
|
+ // https://docs.fdbhealth.com/display/MKDOCUS/Screening+an+NDC+for+a+MED_NAME_ID+Allergen+-+Illustration+of+Scenario+B
|
|
|
+ ...
|
|
|
+ elseif damConceptIdType = 6 // base-ingredient-id
|
|
|
+ // https://docs.fdbhealth.com/display/MKDOCUS/Screening+an+NDC+for+an+Ingredient+Allergen+-+Illustration+of+Scenario+A
|
|
|
+ ...
|
|
|
+ endif
|
|
|
+ endfor
|
|
|
+ */
|
|
|
+
|
|
|
+ foreach ($_allergies as $allergy) {
|
|
|
+ foreach ($_drugs as $rxItem) {
|
|
|
+ if($allergy->data->damConceptIdType == 6) { // ingredient
|
|
|
+ if (drugAllergyIngredientAllergenVsSingleRx($allergy, $rxItem)) {
|
|
|
+ $output[] = "<b>{$rxItem->data->name}</b> can cause allergic reactions since the patient is allergic to <b>{$allergy->data->name}</b>.";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if($allergy->data->damConceptIdType == 2) { // medication
|
|
|
+ if (drugAllergyMedicationAllergenVsSingleRx($allergy, $rxItem)) {
|
|
|
+ $output[] = "<b>{$rxItem->data->name}</b> can cause allergic reactions since the patient is allergic to <b>{$allergy->data->name}</b>.";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if($allergy->data->damConceptIdType == 1) { // allergen group
|
|
|
+ if (drugAllergyGroupAllergenVsSingleRx($allergy, $rxItem)) {
|
|
|
+ $output[] = "<b>{$rxItem->data->name}</b> can cause allergic reactions since the patient is allergic to <b>{$allergy->data->name}</b>.";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return implode("<br>", $output);
|
|
|
+ }
|
|
|
+}
|
|
|
+if(!function_exists('drugAllergyIngredientAllergenVsSingleRx')) {
|
|
|
+ function drugAllergyIngredientAllergenVsSingleRx($_allergen, $_rx)
|
|
|
+ {
|
|
|
+
|
|
|
+ $matches = DB::connection('pgsql_fdb')->select("
|
|
|
+ (
|
|
|
+ -- ingredients from medication
|
|
|
+ SELECT R1.related_hic_seqn as hic_seqn, R2.hic_desc
|
|
|
+ FROM RHICHCR0_HIC_HIC_LINK R1
|
|
|
+ JOIN RHICD5_HIC_DESC R2 ON R1.related_hic_seqn = R2.hic_seqn
|
|
|
+ WHERE R1.hic_seqn IN (
|
|
|
+ SELECT S2.dam_alrgn_hic_seqn
|
|
|
+ FROM RMEDMHL0_MED_HICLSEQNO_LINK S1
|
|
|
+ JOIN RDAMHHA0_HIC_HICL_ALG_LINK S2 ON S1.hicl_seqno = S2.hicl_seqno
|
|
|
+ WHERE S1.med_concept_id = :medid
|
|
|
+ AND S1.med_concept_id_typ = 3
|
|
|
+ )
|
|
|
+ )
|
|
|
+ INTERSECT
|
|
|
+ (
|
|
|
+ -- all ingredients directly and related from allergens
|
|
|
+ (
|
|
|
+ SELECT R1.related_hic_seqn as hic_seqn, R2.hic_desc
|
|
|
+ FROM RHICHCR0_HIC_HIC_LINK R1
|
|
|
+ JOIN RHICD5_HIC_DESC R2 ON R1.related_hic_seqn = R2.hic_seqn
|
|
|
+ WHERE R1.hic_seqn = :allergenConceptID
|
|
|
+ )
|
|
|
+ UNION
|
|
|
+ -- all ingredients via related dam allergen groups
|
|
|
+ (
|
|
|
+ SELECT r3.hic_seqn, r4.hic_desc
|
|
|
+ FROM RDAMGHC0_HIC_ALRGN_GRP_LINK R1
|
|
|
+ JOIN rdamagd1_alrgn_grp_desc R2 on R1.dam_alrgn_grp = R2.dam_alrgn_grp
|
|
|
+ JOIN RDAMGHC0_HIC_ALRGN_GRP_LINK R3 on R1.dam_alrgn_grp = R3.dam_alrgn_grp
|
|
|
+ JOIN RHICD5_HIC_DESC R4 on r3.hic_seqn = r4.hic_seqn
|
|
|
+ WHERE R1.hic_seqn = :allergenConceptID
|
|
|
+ AND R2.dam_alrgn_grp_status_cd = 0
|
|
|
+ ORDER BY r3.hic_seqn
|
|
|
+ )
|
|
|
+ )
|
|
|
+ ",
|
|
|
+ ['medid' => $_rx->data->medId, 'allergenConceptID' => $_allergen->data->damConceptId]
|
|
|
+ );
|
|
|
+
|
|
|
+ return !!count($matches);
|
|
|
+ }
|
|
|
+}
|
|
|
+if(!function_exists('drugAllergyMedicationAllergenVsSingleRx')) {
|
|
|
+ function drugAllergyMedicationAllergenVsSingleRx($_allergen, $_rx)
|
|
|
+ {
|
|
|
+
|
|
|
+ $matches = DB::connection('pgsql_fdb')->select("
|
|
|
+ (
|
|
|
+ -- ingredients from medication
|
|
|
+ SELECT R1.related_hic_seqn as hic_seqn
|
|
|
+ FROM RHICHCR0_HIC_HIC_LINK R1
|
|
|
+ JOIN RHICD5_HIC_DESC R2 ON R1.related_hic_seqn = R2.hic_seqn
|
|
|
+ WHERE R1.hic_seqn IN (
|
|
|
+ SELECT S2.dam_alrgn_hic_seqn
|
|
|
+ FROM RMEDMHL0_MED_HICLSEQNO_LINK S1
|
|
|
+ JOIN RDAMHHA0_HIC_HICL_ALG_LINK S2 ON S1.hicl_seqno = S2.hicl_seqno
|
|
|
+ WHERE S1.med_concept_id = :medid
|
|
|
+ AND S1.med_concept_id_typ = 3
|
|
|
+ )
|
|
|
+ )
|
|
|
+ INTERSECT
|
|
|
+ (
|
|
|
+ -- all ingredients directly and related from allergens
|
|
|
+ SELECT R1.dam_alrgn_hic_seqn as hic_seqn
|
|
|
+ FROM RDAMHHA0_HIC_HICL_ALG_LINK R1
|
|
|
+ WHERE R1.hicl_seqno IN (
|
|
|
+ SELECT R1.hicl_seqno
|
|
|
+ FROM RMEDMHL0_MED_HICLSEQNO_LINK R1
|
|
|
+ WHERE R1.med_concept_id_typ = 1
|
|
|
+ AND R1.med_concept_id = :allergenConceptID
|
|
|
+ AND MED_CONCEPT_HICL_SRC_CD = 0
|
|
|
+ )
|
|
|
+ )
|
|
|
+ ",
|
|
|
+ ['medid' => $_rx->data->medId, 'allergenConceptID' => $_allergen->data->damConceptId]
|
|
|
+ );
|
|
|
|
|
|
+ return !!count($matches);
|
|
|
+ }
|
|
|
+}
|
|
|
+if(!function_exists('drugAllergyGroupAllergenVsSingleRx')) {
|
|
|
+ function drugAllergyGroupAllergenVsSingleRx($_allergen, $_rx)
|
|
|
+ {
|
|
|
+
|
|
|
+ $matches = DB::connection('pgsql_fdb')->select("
|
|
|
+(
|
|
|
+ -- ingredients from medication
|
|
|
+ SELECT R1.related_hic_seqn as hic_seqn
|
|
|
+ FROM RHICHCR0_HIC_HIC_LINK R1
|
|
|
+ JOIN RHICD5_HIC_DESC R2 ON R1.related_hic_seqn = R2.hic_seqn
|
|
|
+ WHERE R1.hic_seqn IN (
|
|
|
+ SELECT S2.dam_alrgn_hic_seqn
|
|
|
+ FROM RMEDMHL0_MED_HICLSEQNO_LINK S1
|
|
|
+ JOIN RDAMHHA0_HIC_HICL_ALG_LINK S2 ON S1.hicl_seqno = S2.hicl_seqno
|
|
|
+ WHERE S1.med_concept_id = :medid
|
|
|
+ AND S1.med_concept_id_typ = 3
|
|
|
+ )
|
|
|
+)
|
|
|
+INTERSECT
|
|
|
+(
|
|
|
+ -- ingredients from medication allergen
|
|
|
+ (
|
|
|
+ SELECT R1.hic_seqn as hic_seqn
|
|
|
+ FROM RDAMGHC0_HIC_ALRGN_GRP_LINK R1
|
|
|
+ WHERE R1.DAM_ALRGN_GRP = :allergenConceptID
|
|
|
+ )
|
|
|
+ UNION
|
|
|
+ (
|
|
|
+ SELECT distinct s1.hic_seqn
|
|
|
+ FROM RDAMXHC0_HIC_ALRGN_XSENSE_LINK S1
|
|
|
+ WHERE S1.dam_alrgn_xsense IN (
|
|
|
+ SELECT R1.dam_alrgn_xsense
|
|
|
+ FROM RDAMGX0_ALRGN_GRP_XSENSE_LINK R1
|
|
|
+ JOIN RDAMCSD1_XSENSIT_ALLERGY_DESC R2 on R1.dam_alrgn_xsense = R2.dam_alrgn_xsense
|
|
|
+ WHERE R1.dam_alrgn_grp = :allergenConceptID
|
|
|
+ AND R2.dam_alrgn_xsense_status_cd = 0
|
|
|
+ )
|
|
|
+ )
|
|
|
+)
|
|
|
+",
|
|
|
+ ['medid' => $_rx->data->medId, 'allergenConceptID' => $_allergen->data->damConceptId]
|
|
|
+ );
|
|
|
+
|
|
|
+ return !!count($matches);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -218,9 +386,7 @@ if(!function_exists('drugDrugInteractionSinglePair')) {
|
|
|
|
|
|
// TODO: find out and show the names of the actual ingredients causing interaction
|
|
|
|
|
|
- return "<ol class='pl-0 ml-3 mb-0'>" . implode("", array_map(function ($_x) {
|
|
|
- return "<li class='mb-1'>" . $_x . "</li>";
|
|
|
- }, $output)) . "</ol>";
|
|
|
+ return implode("<br>", $output);
|
|
|
}
|
|
|
}
|
|
|
if(!function_exists('getActiveDdiCodexFromGcnSeqNo')) {
|
|
@@ -299,7 +465,6 @@ WHERE r1.ddi_codex IN (" . implode(',', array_map(function ($_x) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
if(!function_exists('duplicate_therapy_info')) {
|
|
|
function duplicate_therapy_info($_drugs) {
|
|
|
|