| 1 | PSUAA1 ;BIR/RDC - ALLERGY/ADVERSE EVENT EXTRACT ; 23 FEB 2004 | 
|---|
| 2 | ;;4.0;PHARMACY BENEFITS MANAGEMENT;**10**;MARCH, 2005;Build 4 | 
|---|
| 3 | ; | 
|---|
| 4 | ; Reference to file #4          supported by DBIA 10090 | 
|---|
| 5 | ; Reference to file #2          supported by DBIA 10035 AND 3504 | 
|---|
| 6 | ; Reference to file #120.8      supported by DBIA 10099, 2422, AND 4562 | 
|---|
| 7 | ; Reference to file #120.85     supported by DBIA 10099 | 
|---|
| 8 | ; Reference to file #49         supported by DBIA 432 | 
|---|
| 9 | ; | 
|---|
| 10 | EN ; | 
|---|
| 11 | N ARTMP,DFN,EDATE,GMRA,GMRACT,GMRAL,GMREC,ICN,K,LINECNT,LINEMAX,LINETOT,MSGCNT,NPTR,OPTR,OREC,PN,PREC,RPTR,RRDT,RREC,SDATE,SSN,STAT5ION,V,VPTR,X,Z | 
|---|
| 12 | K PSUMKFLG | 
|---|
| 13 | ; | 
|---|
| 14 | D INITZ | 
|---|
| 15 | D GETRECS | 
|---|
| 16 | D ^PSUAA2 | 
|---|
| 17 | Q | 
|---|
| 18 | ; | 
|---|
| 19 | INITZ ; | 
|---|
| 20 | ;  ** new all non-namespaced variables ** | 
|---|
| 21 | ; | 
|---|
| 22 | S SDATE=PSUSDT\1-.0001 | 
|---|
| 23 | S EDATE=PSUEDT\1+.2359 | 
|---|
| 24 | ; | 
|---|
| 25 | S LINEMAX=$$VAL^PSUTL(4.3,1,8.3) | 
|---|
| 26 | S:LINEMAX=""!(LINEMAX>10000) LINEMAX=10000 | 
|---|
| 27 | S LINECNT=999999 | 
|---|
| 28 | S LINETOT=0 | 
|---|
| 29 | ; | 
|---|
| 30 | S PSUFAC=PSUSNDR | 
|---|
| 31 | ; | 
|---|
| 32 | ; ** get station number ** | 
|---|
| 33 | S X=$$VALI^PSUTL(4.3,1,217) | 
|---|
| 34 | S STATION=+$$VAL^PSUTL(4,X,99) | 
|---|
| 35 | ; | 
|---|
| 36 | ; ** get run date ** | 
|---|
| 37 | S %H=$H | 
|---|
| 38 | D YMD^%DTC | 
|---|
| 39 | S $P(^TMP("PSUAA",$J),U,3)=X | 
|---|
| 40 | ; | 
|---|
| 41 | ; | 
|---|
| 42 | Q  ;  ** end of partition initialization ** | 
|---|
| 43 | ; | 
|---|
| 44 | GETRECS ;  ;  **  extract reactive data  ** | 
|---|
| 45 | F  S SDATE=$O(^GMR(120.8,"V",SDATE)) Q:SDATE>EDATE!('SDATE)  D | 
|---|
| 46 | . S VPTR=""                       ;*** loop through verified dates  *** | 
|---|
| 47 | . F  S VPTR=$O(^GMR(120.8,"V",SDATE,VPTR)) Q:VPTR=""  D | 
|---|
| 48 | .. K GMRACT,GMRAL,GMREC | 
|---|
| 49 | .. S PSUMKFLG=0 | 
|---|
| 50 | .. S VREC=^GMR(120.8,VPTR,0) | 
|---|
| 51 | .. S DFN=$P(VREC,U) | 
|---|
| 52 | .. Q:$G(DFN)="" | 
|---|
| 53 | .. Q:$$TESTPAT^VADPT(DFN)=1                  ;test patient | 
|---|
| 54 | .. S PREC=$G(^DPT(DFN,0)) | 
|---|
| 55 | .. S SSN=$P(PREC,U,9) | 
|---|
| 56 | .. S GMRA="0^1^111" | 
|---|
| 57 | .. D EN1^GMRADPT | 
|---|
| 58 | .. Q:'$D(GMRAL(VPTR)) | 
|---|
| 59 | .. S GMREC=GMRAL(VPTR) | 
|---|
| 60 | .. D EN1^GMRAOR2(VPTR,.ARTMP)    ;  ** load multiple variables  ** | 
|---|
| 61 | .. S Z="$",OREC="" | 
|---|
| 62 | .. D STATIC | 
|---|
| 63 | .. S V="" F  S V=$O(GMRACT("S",V)) Q:V=""!(V=7)  D | 
|---|
| 64 | ... S $P(OREC,Z,13+V)=$G(GMRACT("S",V))               ; * symptoms | 
|---|
| 65 | .. S $P(OREC,Z,20)="" | 
|---|
| 66 | .. S V="" F  S V=$O(GMRACT("O",V)) Q:V=""!(V=7)  D | 
|---|
| 67 | ... S $P(OREC,Z,12)=$P(GMRACT("O",V),U)               ; * event date | 
|---|
| 68 | ... S $P(OREC,Z,13)=$P(GMRACT("O",V),U,2)             ; * severity | 
|---|
| 69 | ... D MAKE1 S PSUMKFLG=1 | 
|---|
| 70 | .. D:'$G(PSUMKFLG) MAKE1                ; **  load ^XTMP with OREC  ** | 
|---|
| 71 | .. S:$G(MSGCNT) ^XTMP("PSU_"_PSUJOB,"PSUAA","MSGTCNT")=MSGCNT | 
|---|
| 72 | .. S:LINECNT=999999 LINECNT=1 | 
|---|
| 73 | .. S:$G(LINECNT) ^XTMP("PSU_"_PSUJOB,"PSUAA","LINECNT")=LINECNT | 
|---|
| 74 | Q | 
|---|
| 75 | ; | 
|---|
| 76 | STATIC ;  ** set static pieces of record into OREC ** | 
|---|
| 77 | ; | 
|---|
| 78 | S $P(OREC,Z,1)="" | 
|---|
| 79 | S $P(OREC,Z,2)=STATION_VPTR          ; ** event ID | 
|---|
| 80 | S $P(OREC,Z,3)=SSN                   ; ** social security # | 
|---|
| 81 | ; | 
|---|
| 82 | S ICN=$$GETICN^MPIF001(DFN)           ; **  ICN | 
|---|
| 83 | I $E(ICN,1,2)="-1" S ICN="" | 
|---|
| 84 | S $P(OREC,Z,4)=ICN | 
|---|
| 85 | ; | 
|---|
| 86 | S $P(OREC,Z,5)=$P(GMREC,U,2)          ;  ** reactant | 
|---|
| 87 | S $P(OREC,Z,6)=$P($P($P(GMREC,U,9),"(",2),",")  ; * reactant file # | 
|---|
| 88 | S $P(OREC,Z,7)=$P(GMREC,U,7)          ;  **  allergy type | 
|---|
| 89 | S $P(OREC,Z,8)=$P(VREC,U,4)           ;  ** origination date | 
|---|
| 90 | ; | 
|---|
| 91 | S NPTR=$P(VREC,U,5)                ; * originator's section/service | 
|---|
| 92 | I NPTR S OPTR=$P($G(^VA(200,NPTR,5)),U,1) | 
|---|
| 93 | I OPTR S $P(OREC,Z,9)=$P(^DIC(49,OPTR,0),U,1) | 
|---|
| 94 | ; | 
|---|
| 95 | S $P(OREC,Z,10)=$P(VREC,U,6)          ;  ** observed/historical | 
|---|
| 96 | S $P(OREC,Z,11)=$P(VREC,U,14)         ;  ** mechanism | 
|---|
| 97 | ; | 
|---|
| 98 | Q  ;  ** end of static variables for a message ** | 
|---|
| 99 | ; | 
|---|
| 100 | MAKE1 ;   ** load one record/message ** | 
|---|
| 101 | ; | 
|---|
| 102 | S OREC=$TR(OREC,"^","'") | 
|---|
| 103 | S OREC=$TR(OREC,Z,U) | 
|---|
| 104 | ; | 
|---|
| 105 | S LINECNT=LINECNT+1 | 
|---|
| 106 | S LINETOT=LINETOT+1 | 
|---|
| 107 | I LINECNT>LINEMAX S MSGCNT=$G(MSGCNT)+1,LINECNT=1 | 
|---|
| 108 | I $L(OREC)<254 S ^XTMP("PSU_"_PSUJOB,"PSUAA",MSGCNT,LINECNT)=OREC Q | 
|---|
| 109 | F K=254:-1 Q:$E(OREC,K)="^" | 
|---|
| 110 | S ^XTMP("PSU_"_PSUJOB,"PSUAA",MSGCNT,LINECNT)=$E(OREC,1,K) | 
|---|
| 111 | S LINECNT=LINECNT+1 | 
|---|
| 112 | S LINETOT=LINETOT+1 | 
|---|
| 113 | S ^XTMP("PSU_"_PSUJOB,"PSUAA",MSGCNT,LINECNT)="*"_$E(OREC,K,K+253) | 
|---|
| 114 | Q | 
|---|
| 115 | PRINT ; ALLOW NO PRINTING | 
|---|
| 116 | Q | 
|---|
| 117 | ; | 
|---|