浏览代码

Visit UI - medrisk vigilance v1 - dam

Vijayakrishnan 3 年之前
父节点
当前提交
d58a595d54
共有 2 个文件被更改,包括 184 次插入4 次删除
  1. 169 4
      app/Helpers/fdb.php
  2. 15 0
      resources/views/app/patient/segment-templates/medrisk_vigilence/summary.blade.php

+ 169 - 4
app/Helpers/fdb.php

@@ -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) {
 

+ 15 - 0
resources/views/app/patient/segment-templates/medrisk_vigilence/summary.blade.php

@@ -2,6 +2,7 @@
 
 // info from patient chart
 $drugs = \App\Models\Point::getPointsOfCategory($patient, "MEDICATION");
+$allergies = \App\Models\Point::getPointsOfCategory($patient, "ALLERGY");
 
 // side effects
 $sideeffects = side_effects_info($drugs);
@@ -18,6 +19,9 @@ $coadministration = coadministration_info($drugs);
 // ddi
 $ddi = drug_drug_interaction_info($drugs);
 
+// dam
+$dam = drug_allergy_info($drugs, $allergies);
+
 ?>
 
 @if(!!$dptInfo)
@@ -42,6 +46,17 @@ $ddi = drug_drug_interaction_info($drugs);
 
 @endif
 
+@if(!!$dam)
+
+    <div class="m-neg-3 p-3 mb-3 mt-2 border bg-white mr-0">
+        <p class="font-weight-bold m-0 font-size-14 text-info">Drug Allergy Notes</p>
+        <div class="mt-3 ml-3">
+            {!! $dam !!}
+        </div>
+    </div>
+
+@endif
+
 @if(!!$ddi)
 
     <div class="m-neg-3 p-3 mb-3 mt-2 border bg-white mr-0">