|
@@ -191,9 +191,19 @@ ORDER BY r1.dam_concept_id_desc
|
|
|
*/
|
|
|
|
|
|
foreach ($allergies as $allergy) {
|
|
|
- if($allergy->dam_concept_id_typ == 6) {
|
|
|
- foreach ($rx as $rxItem) {
|
|
|
- if($this->drugAllergyIngredientAllergenVsSingleRx($allergy, $rxItem)) {
|
|
|
+ foreach ($rx as $rxItem) {
|
|
|
+ if($allergy->dam_concept_id_typ == 6) { // ingredient
|
|
|
+ if ($this->drugAllergyIngredientAllergenVsSingleRx($allergy, $rxItem)) {
|
|
|
+ $output[] = "<b>{$rxItem->rx}</b> can cause allergic reactions since the patient is allergic to <b>{$allergy->allergen}</b>.";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if($allergy->dam_concept_id_typ == 2) { // medication
|
|
|
+ if ($this->drugAllergyMedicationAllergenVsSingleRx($allergy, $rxItem)) {
|
|
|
+ $output[] = "<b>{$rxItem->rx}</b> can cause allergic reactions since the patient is allergic to <b>{$allergy->allergen}</b>.";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if($allergy->dam_concept_id_typ == 1) { // allergen group
|
|
|
+ if ($this->drugAllergyGroupAllergenVsSingleRx($allergy, $rxItem)) {
|
|
|
$output[] = "<b>{$rxItem->rx}</b> can cause allergic reactions since the patient is allergic to <b>{$allergy->allergen}</b>.";
|
|
|
}
|
|
|
}
|
|
@@ -204,14 +214,6 @@ ORDER BY r1.dam_concept_id_desc
|
|
|
|
|
|
}
|
|
|
|
|
|
- private function getAllergenIngredients($_allergen) {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- private function getRxIngredients($_rx) {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
private function drugAllergyIngredientAllergenVsSingleRx($_allergen, $_rx) {
|
|
|
|
|
|
$matches = DB::connection('pgsql_fdb')->select("
|
|
@@ -235,7 +237,7 @@ INTERSECT
|
|
|
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 = :allergenHicSeqNo
|
|
|
+ WHERE R1.hic_seqn = :allergenConceptID
|
|
|
)
|
|
|
UNION
|
|
|
-- all ingredients via related dam allergen groups
|
|
@@ -245,13 +247,93 @@ INTERSECT
|
|
|
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 = :allergenHicSeqNo
|
|
|
+ WHERE R1.hic_seqn = :allergenConceptID
|
|
|
AND R2.dam_alrgn_grp_status_cd = 0
|
|
|
ORDER BY r3.hic_seqn
|
|
|
)
|
|
|
)
|
|
|
",
|
|
|
- ['medid' => $_rx->medid, 'allergenHicSeqNo' => $_allergen->dam_concept_id]
|
|
|
+ ['medid' => $_rx->medid, 'allergenConceptID' => $_allergen->dam_concept_id]
|
|
|
+ );
|
|
|
+
|
|
|
+ return !!count($matches);
|
|
|
+ }
|
|
|
+
|
|
|
+ private 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->medid, 'allergenConceptID' => $_allergen->dam_concept_id]
|
|
|
+ );
|
|
|
+
|
|
|
+ return !!count($matches);
|
|
|
+ }
|
|
|
+
|
|
|
+ private 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->medid, 'allergenConceptID' => $_allergen->dam_concept_id]
|
|
|
);
|
|
|
|
|
|
return !!count($matches);
|