Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: PSSPGXU2

PSSPGXU2.m

Go to the documentation of this file.
PSSPGXU2 ;BIR/MV - PPHARMACOGENOMICS UTILITY ROUTINE CONT. ;09/20/07
 ;;1.0;PHARMACY DATA MANAGEMENT;**262**;9/30/97;Build 66
 ;
PGXEMAIL(PSSDFN,PSSICN,PSSRESUL,PSSINV) ;
 ;PSSDFN - Patient IEN
 ;PSSRESUL(N,"GENE")=GENE^UNRSOLVED GENE^1 (UNRESOLVED FLAG)
 ;PSSRESUL(N,"PHENOTYPE")=PHENOTYPE^UNRSOLVED PHENOTYPE^1 (UNRESOLVED FLAG)
 ;PSSINV - Unresolve gene/phenotype array
 ;PSSINV("G",N) - where N is xref in PSSRESUL array for Gene
 ;PSSINV("P",N) - where N is xref in PSSRESUL array for Phenotype
 ;Output: 1 if an email should be sent for unresolved gene/phenotype
 ;
 NEW PSSCNT,PSSEMAIL,PSSGENE,PSSGFG,PSSINVX,PSSPFG,PSSPTYPE,PSSFMAIL,PSSEDT,X,X1,X2
 ;Group the phenotype under Gene
 S PSSFMAIL=0
 S X1=DT,X2=-7 D C^%DTC S PSSEDT=X
 F PSSCNT=0:0 S PSSCNT=$O(PSSINV("G",PSSCNT)) Q:'PSSCNT  S PSSINVX(PSSCNT,"G")=""
 F PSSCNT=0:0 S PSSCNT=$O(PSSINV("P",PSSCNT)) Q:'PSSCNT  S PSSINVX(PSSCNT,"P")=""
 ;Get pt's GENE & PHENOTYPE from lab
 S PSSEMAIL=0
 F PSSCNT=0:0 S PSSCNT=$O(PSSINVX(PSSCNT)) Q:'PSSCNT  D
 . S PSSGFG=$D(PSSINVX(PSSCNT,"G"))
 . S PSSPFG=$D(PSSINVX(PSSCNT,"P"))
 . S PSSGENE=$P($G(PSSRESUL(PSSCNT,"GENE")),U)
 . S PSSPTYPE=""
 . S:PSSPFG PSSPTYPE=$P($G(PSSRESUL(PSSCNT,"PHENOTYPE")),U)
 . S PSSEMAIL=$$NEWMAIL() I PSSEMAIL S PSSFMAIL=1
 Q PSSFMAIL
 ;
NEWMAIL() ;
 ;PSSMAIL - 1 to send email; 0 means email was sent within 7 days
 ;Check if email was send within 7 days ago
 N PSSASEND
 S PSSASEND=0
 I PSSGFG D
 .I '+$O(^PS(51.29,PSSDFN,1,"AG",PSSGENE,PSSEDT)) S PSSASEND=1 Q
 .K PSSINV("G",PSSCNT)
 I PSSPFG D
 .I '+$O(^PS(51.29,PSSDFN,1,"AP",PSSGENE,PSSPTYPE,PSSEDT)),'$D(PSSRESUL(PSSCNT,"NOFDB")) S PSSASEND=1 Q
 .K PSSINV("P",PSSCNT)
 I PSSASEND Q 1
 Q 0
 ;
EMAILDT(PSSDFN,PSSGENE,PSSPTYPE) ;
 NEW PSSEDT,PSSEDTX
 Q:$G(PSSDFN)="" ""
 Q:$G(PSSGENE)="" ""
 S PSSEDTX=""
 I $G(PSSPTYPE)="" F PSSEDT=0:0 S PSSEDT=$O(^PS(51.29,PSSDFN,1,"AG",PSSGENE,PSSEDT)) Q:'PSSEDT  D
 . S PSSEDTX=PSSEDTX_$S(PSSEDTX]"":", ",1:"")_$$FMTE^XLFDT(PSSEDT,5)
  I $G(PSSPTYPE)]"" F PSSEDT=0:0 S PSSEDT=$O(^PS(51.29,PSSDFN,1,"AP",PSSGENE,PSSPTYPE,PSSEDT)) Q:'PSSEDT  D
 . S PSSEDTX=PSSEDTX_$S(PSSEDTX]"":", ",1:"")_$$FMTE^XLFDT(PSSEDT,5)
 Q PSSEDTX
 ;
WRT(PSSELOG,PSSDFN,PSSICN) ;Logging unresolvable gene/phenotype to 51.29 file
 NEW DO,DIC,DINUM,X,DA,PSSGENE
 I '$G(PSSDFN)!'+$G(PSSICN) Q
 Q:'$D(PSSELOG)
 ;Add patient to file if needed
 I '$D(^PS(51.29,PSSDFN)) D
 . K DO S DIC="^PS(51.29,",DIC(0)="",(DINUM,X)=PSSDFN
 . S DIC("DR")="1////"_PSSICN
 . D FILE^DICN
 Q:'$D(^PS(51.29,PSSDFN))
 ;
 ;Add unresolved Gene/Phenotype entry(s)
 S PSSGENE="" F  S PSSGENE=$O(PSSELOG(PSSGENE)) Q:PSSGENE=""  D
 . K DO S DIC="^PS(51.29,"_PSSDFN_",1,",DIC(0)="",DA(1)=PSSDFN,X=1
 . ;P1=PHENOTYPE, P2=UNRESOLVED FLAG, P3=EMAIL DATE, P4=LOCATION, P5=PACKAGE
 . S DIC("DR")=".01////"_PSSGENE_";1////"_$P(PSSELOG(PSSGENE),U,1)_";2////"_$P(PSSELOG(PSSGENE),U,2)_";3////"_$P(PSSELOG(PSSGENE),U,3)_";4////"_$P(PSSELOG(PSSGENE),U,4)_";5////"_$P(PSSELOG(PSSGENE),U,5)
 . D FILE^DICN
 Q
GENE() ;Getting genes for informative result from ^TMP("PSSPGXBS")
 NEW PSSHGFG,PSSFG,PSS1,PSS2,PSS11,PSS22,PSSDRGCK,PSSGF,PSSGN,PSSDAIDX,PSSGNHG,PSSGNALL,PSSGENE,PSSDAID
 S PSSHGFG=0,PSSFG=0,PSSGENE=""
 S PSS1=0 F  S PSS1=$O(^TMP("PSSPGXBS",$J,PSS1)) Q:'PSS1  D
 . S PSS2=0 F  S PSS2=$O(^TMP("PSSPGXBS",$J,PSS1,PSS2)) Q:'PSS2  D
 .. I $G(^TMP("PSSPGXBS",$J,PSS1,PSS2))="pgxDrugChecks" D
 ... D MATCH(PSS1,PSS2,"pgxDrugCheck",.PSSDRGCK) ;10,78
 ... S PSS11=0 F  S PSS11=$O(PSSDRGCK(PSS11))  Q:'PSS11  D
 .... D MATCH(PSS1,PSS11,"genomicFinding",.PSSGF) ;10(12,19); 78(80)
 .... S PSS22=0 F  S PSS22=$O(PSSGF(PSS22)) Q:'PSS22  D
 ..... D MATCH(PSS1,PSS22,"gene",.PSSGN)
 .. I $G(^TMP("PSSPGXBS",$J,PSS1,PSS2))="displayActionId" D
 ... S PSSDAID(PSS2)=$$VAL(PSS1,PSS2)
 ... S:+PSSDAID(PSS2)=1 PSSHGFG=1
 ... S:+PSSDAID(PSS2)'=1 PSSFG=1
 . S PSS11=0 F  S PSS11=$O(PSSGN(PSS11)) Q:'PSS11  S PSSGN(PSS11)=$$VAL(PSS1,PSS11)
 ;
 I 'PSSFG,PSSHGFG Q ""  ;Use PSSPHAR array for Interruptive display
 ;
 S PSS11=0 F  S PSS11=$O(PSSGN(PSS11)) Q:'PSS11  D
 . S PSSDAIDX=$O(PSSDAID(PSS11))
 . I PSS11<PSSDAIDX D
 .. I PSSDAID(PSSDAIDX)=1 S PSSGNHG(PSS11)=PSSGN(PSS11) Q
 .. S PSSGNALL(PSS11)=PSSGN(PSS11)
 S PSS11=0 F  S PSS11=$O(PSSGNALL(PSS11)) Q:'PSS11  D
 . S PSSGENE=PSSGENE_$S(PSSGENE="":"",1:", ")_PSSGNALL(PSS11)
 Q PSSGENE
 ;
MATCH(PSS1,PSS2,PSSTXT,PSSLST) ;
 NEW PSSC1
 I '+$G(PSS1)!'+$G(PSS2)!($G(PSSTXT)="") Q
 F PSSC1=0:0 S PSSC1=$O(^TMP("PSSPGXBS",$J,PSS1,PSS2,"C",PSSC1)) Q:'PSSC1  D
 . I +PSSC1,($G(^TMP("PSSPGXBS",$J,PSS1,PSS2,"C",PSSC1))=PSSTXT) S PSSLST(PSSC1)=""
 Q
 ;
VAL(PSS1,PSS2) ;
 NEW PSSVAL
 I '+$G(PSS1)!'+$G(PSS2) Q
 S PSSVAL=$G(^TMP("PSSPGXBS",$J,PSS1,PSS2,"T",1))
 Q PSSVAL