| 1 | PSUDEM1 ;BIR/DAM - Patient Demographics Extract ; 20 DEC 2001 | 
|---|
| 2 | ;;4.0;PHARMACY BENEFITS MANAGEMENT;**12**;MARCH, 2005;Build 19 | 
|---|
| 3 | ; | 
|---|
| 4 | ;DBIA's | 
|---|
| 5 | ; Reference to file #27.11  supported by DBIA 2462 | 
|---|
| 6 | ; Reference to file 2       supported by DBIA 10035, 3504 | 
|---|
| 7 | ; Reference to file 200     supported by DBIA 10060 | 
|---|
| 8 | ; Reference to file 55      supported by DBIA 3502 | 
|---|
| 9 | ; Reference to file 4.3     supported by DBIA 2496, 10091 | 
|---|
| 10 | ; Reference to file 4       supported by DBIA 10090 | 
|---|
| 11 | ; | 
|---|
| 12 | EN ;EN   Routine control module | 
|---|
| 13 | ; | 
|---|
| 14 | D DAT | 
|---|
| 15 | I $D(^XTMP("PSUMANL")) D DEM     ;Manual entry point  DAM | 
|---|
| 16 | I $G(^XTMP("PSU_"_PSUJOB,"PSUPSUMFLAG")) D HL7    ;Auto entry point DAM | 
|---|
| 17 | I '$D(^XTMP("PSU_"_PSUJOB,"PSUFLAG")) D XMD | 
|---|
| 18 | K ^XTMP("PSU_"_PSUJOB,"PSUXMD") | 
|---|
| 19 | ; | 
|---|
| 20 | I $G(^XTMP("PSU_"_PSUJOB,"PSUPSUMFLAG"))=1 D | 
|---|
| 21 | .S PSUOPTS="1,2,3,4,5,6,7,8,9,10,11" | 
|---|
| 22 | .S PSUAUTO=1 | 
|---|
| 23 | ; | 
|---|
| 24 | ; | 
|---|
| 25 | D PULL^PSUCP | 
|---|
| 26 | F I=1:1:$L(PSUOPTS,",") S PSUMOD($P(PSUOPTS,",",I))="" | 
|---|
| 27 | ; | 
|---|
| 28 | I $D(PSUMOD(10)) D PDSSN^PSUDEM4  ;pt. demographics provider msg | 
|---|
| 29 | ; | 
|---|
| 30 | K ^XTMP("PSU_"_PSUJOB,"PSUPDFLAG") | 
|---|
| 31 | K ^XTMP("PSU_"_PSUJOB,"PSUDM") | 
|---|
| 32 | K ^XTMP("PSU_"_PSUJOB,"PSUDMX") | 
|---|
| 33 | K PSUDMDFN,PSURAC,PSURDT | 
|---|
| 34 | Q | 
|---|
| 35 | ; | 
|---|
| 36 | HL7 ;This is the Patient Demographics extract that runs only when | 
|---|
| 37 | ;the PSU PBM [AUTO] option is executed.  It captures demographic | 
|---|
| 38 | ;information ONLY on new or updated patient. | 
|---|
| 39 | ; | 
|---|
| 40 | ; *** PSU*4.0*12 - BAJ -- added QUIT if NULL | 
|---|
| 41 | F  S PSUSDT=$O(^PSUDEM("B",PSUSDT)) Q:PSUSDT=""  Q:PSUSDT>PSUEDT  D | 
|---|
| 42 | . S I="" | 
|---|
| 43 | . S I=$O(^PSUDEM("B",PSUSDT,I)) Q:I="" | 
|---|
| 44 | . S DFN=$P(^PSUDEM(I,0),U,2) | 
|---|
| 45 | . S ^XTMP("PSU"_PSUJOB,"REXMT",DFN)="" | 
|---|
| 46 | K DFN | 
|---|
| 47 | ; | 
|---|
| 48 | S DFN="" | 
|---|
| 49 | F  S (DFN,PSUDMDFN)=$O(^XTMP("PSU"_PSUJOB,"REXMT",DFN)) Q:DFN=""  D DEM1 | 
|---|
| 50 | ; | 
|---|
| 51 | Q | 
|---|
| 52 | ; | 
|---|
| 53 | DAT ;Date Module | 
|---|
| 54 | ; | 
|---|
| 55 | ;Date extract was run | 
|---|
| 56 | S %H=$H | 
|---|
| 57 | D YMD^%DTC                   ;Converts $H to FileMan format | 
|---|
| 58 | ; ** S $P(^TMP("PSUDM",$J),U,3)=X    ;Set extract date in temp global | 
|---|
| 59 | S PSURDT=X | 
|---|
| 60 | ; | 
|---|
| 61 | Q | 
|---|
| 62 | ; | 
|---|
| 63 | INST ;EN  Place institution code sending report into temp global. | 
|---|
| 64 | ;Institution Mailman info is in file 4.3 | 
|---|
| 65 | ; | 
|---|
| 66 | S X=$$VALI^PSUTL(4.3,1,217),PSUSNDR=+$$VAL^PSUTL(4,X,99) | 
|---|
| 67 | S $P(^XTMP("PSU_"_PSUJOB,"PSUSITE"),U,1)=PSUSNDR | 
|---|
| 68 | S PSUSIT=PSUSNDR | 
|---|
| 69 | ; | 
|---|
| 70 | S X=PSUSNDR,DIC=40.8,DIC(0)="X",D="C" D IX^DIC ;**1 | 
|---|
| 71 | S X=+Y S PSUDIVNM=$$VAL^PSUTL(40.8,X,.01) | 
|---|
| 72 | S $P(^XTMP("PSU_"_PSUJOB,"PSUSITE"),U,2)=PSUDIVNM | 
|---|
| 73 | Q | 
|---|
| 74 | ; | 
|---|
| 75 | DEM ;PULL PATIENT DEMOGRAPHICS. This is run only when user selects | 
|---|
| 76 | ;PSU PBM [MANUAL] option.  It gather patient demographic information | 
|---|
| 77 | ;for all patients in the PATIENT file #2. | 
|---|
| 78 | ; | 
|---|
| 79 | ;N PSUREC    ;DAM TEST NEW CODE | 
|---|
| 80 | N PSUREC | 
|---|
| 81 | K PSUREC1,PSUREC2,PSUREC3,PSUREC4,PSUREC5,PSUREC6,PSUREC7 | 
|---|
| 82 | K PSUREC8,PSUREC9,PSUREC10,PSUREC11,PSUREC12,PSUREC13,PSUREC14 | 
|---|
| 83 | K PSUREC15,PSUDOD,VAEL,VADM | 
|---|
| 84 | ; | 
|---|
| 85 | S PSUNAM=0 | 
|---|
| 86 | F  S PSUNAM=$O(^DPT("B",PSUNAM)) Q:PSUNAM=""  D | 
|---|
| 87 | .S PSUDMDFN=0 | 
|---|
| 88 | .F  S (DFN,PSUDMDFN)=$O(^DPT("B",PSUNAM,PSUDMDFN)) Q:PSUDMDFN=""  D DEM1 | 
|---|
| 89 | Q | 
|---|
| 90 | ; | 
|---|
| 91 | DEM1 ; | 
|---|
| 92 | K PSUREC,PSUREC1,PSUREC2,PSUREC3,PSUREC4,PSUREC5,PSUREC6,PSUREC7 | 
|---|
| 93 | K PSUREC8,PSUREC9,PSUREC10,PSUREC11,PSUREC12,PSUREC13,PSUREC14 | 
|---|
| 94 | K PSUREC15,PSUDOD,VAEL,VADM | 
|---|
| 95 | S PSUDOD=$P($G(^DPT(PSUDMDFN,.35)),U,1) I PSUDOD,PSUDOD<2980701 Q | 
|---|
| 96 | Q:'$D(^DPT(PSUDMDFN,0))  S PSUREC1=$G(^DPT(PSUDMDFN,0)) | 
|---|
| 97 | I $P(PSUREC1,U,21)=1 Q | 
|---|
| 98 | I $E($P(PSUREC1,U,9),1,5)="00000" Q | 
|---|
| 99 | D DEM^VADPT | 
|---|
| 100 | D ELIG^VADPT | 
|---|
| 101 | ;RUN DATE | 
|---|
| 102 | S $P(PSUREC,U,3)=PSURDT | 
|---|
| 103 | ;Gender | 
|---|
| 104 | S PSUREC3=$TR($P(PSUREC1,U,2),"^","'"),$P(PSUREC,U,8)=PSUREC3 | 
|---|
| 105 | ;SSN | 
|---|
| 106 | S PSUREC4=$TR($P(PSUREC1,U,9),"^","'"),$P(PSUREC,U,12)=PSUREC4 | 
|---|
| 107 | ;DOB | 
|---|
| 108 | S PSUREC5=$TR($P(PSUREC1,U,3),"^","'"),$P(PSUREC,U,5)=PSUREC5 | 
|---|
| 109 | ;DT PT ENTERED IN FILE | 
|---|
| 110 | S PSUREC6=$TR($P(PSUREC1,U,16),"^","'"),$P(PSUREC,U,16)=PSUREC6 | 
|---|
| 111 | S PSUREC7=$G(^PS(55,PSUDMDFN,0)),$P(PSUREC,U,17)=$TR($P(PSUREC7,U,7),"^","'") | 
|---|
| 112 | ;Service Actual/Historical | 
|---|
| 113 | S $P(PSUREC,U,18)=$TR($P(PSUREC7,U,8),"^","'") | 
|---|
| 114 | ;PLACE "^" AT END OF RECORD | 
|---|
| 115 | S $P(PSUREC,U,30)="" | 
|---|
| 116 | ;SITE SENDING DATA | 
|---|
| 117 | S $P(PSUREC,U,2)=PSUSNDR | 
|---|
| 118 | ;RACE | 
|---|
| 119 | S PSUREC8=$P($G(VADM(8)),U,2),$P(PSUREC,U,7)=PSUREC8 | 
|---|
| 120 | ;PRIMARY ELIG CODE | 
|---|
| 121 | S PSUREC9=$P($G(VAEL(1)),U,2),$P(PSUREC,U,9)=PSUREC9 | 
|---|
| 122 | D PRIO | 
|---|
| 123 | ;MEANS TEST STATUS | 
|---|
| 124 | S PSUREC11=$P($G(VAEL(9)),U,2),$P(PSUREC,U,10)=PSUREC11 | 
|---|
| 125 | D MISC | 
|---|
| 126 | ;FIND PATIENT ICN-VMP | 
|---|
| 127 | D ICN | 
|---|
| 128 | ;PATIENT CURRENT AGE | 
|---|
| 129 | S PSUREC12=$G(VADM(4)),$P(PSUREC,U,6)=PSUREC12 | 
|---|
| 130 | D ETH | 
|---|
| 131 | S ^XTMP("PSU_"_PSUJOB,"PSUDMX",PSUDMDFN)=$G(PSUREC) | 
|---|
| 132 | Q | 
|---|
| 133 | ; | 
|---|
| 134 | PRIO ;Pull Enrollment Priority | 
|---|
| 135 | ; | 
|---|
| 136 | S PSUEC=0 | 
|---|
| 137 | F  S PSUEC=$O(^DGEN(27.11,"C",PSUDMDFN,PSUEC)) Q:PSUEC=""  D | 
|---|
| 138 | .S PSUREC10=$TR($P($G(^DGEN(27.11,PSUEC,0)),U,7),"^","'") | 
|---|
| 139 | .I PSUREC10'="" S $P(PSUREC,U,11)=PSUREC10 | 
|---|
| 140 | Q | 
|---|
| 141 | ; | 
|---|
| 142 | MISC ;Pulls miscellaneous additional info via EN^DIQ1 call | 
|---|
| 143 | ;Pulls Date of Death, ICN, Primary Care Provider SSN, | 
|---|
| 144 | ;Date patient first provided pharmacy care | 
|---|
| 145 | ; | 
|---|
| 146 | N PSUDATMP,PSUDDTMP,PSUDTMPA | 
|---|
| 147 | ; | 
|---|
| 148 | S PSUDTMPA=$$OUTPTPR^SDUTL3(PSUDMDFN)   ;Prov IEN^EXTERNAL VALUE in temp variable | 
|---|
| 149 | S PSUDATMP=$P($G(PSUDTMPA),U)       ;Prov IEN | 
|---|
| 150 | S $P(PSUREC,U,15)=PSUDATMP | 
|---|
| 151 | I '$D(PSUDATMP)!PSUDATMP=0 S PSUDATMP=99999999999 | 
|---|
| 152 | S $P(PSUREC,U,14)=$$GET1^DIQ(200,PSUDATMP,9,"I")   ;Prov SSN | 
|---|
| 153 | S $P(PSUREC,U,4)=$S(PSUDOD:PSUDOD\1,1:"") | 
|---|
| 154 | Q | 
|---|
| 155 | ; | 
|---|
| 156 | ICN ;Find patient ICN | 
|---|
| 157 | ;VMP - OIFO BAY PINES;ELR;PSU*3.0*24 | 
|---|
| 158 | ; | 
|---|
| 159 | N PSUICN,PSUICN1 | 
|---|
| 160 | S PSUICN=$$GETICN^MPIF001(PSUDMDFN) D | 
|---|
| 161 | .I PSUICN'[-1 D | 
|---|
| 162 | ..S $P(PSUREC,U,13)=PSUICN    ;ICN | 
|---|
| 163 | Q | 
|---|
| 164 | ; | 
|---|
| 165 | ETH ;Ethnicity and multiple race entries | 
|---|
| 166 | ; | 
|---|
| 167 | S PSUREC14=$P($G(VADM(11,1)),U,2),$P(PSUREC,U,19)=PSUREC14 | 
|---|
| 168 | ; | 
|---|
| 169 | S PSURCE=0,C=20,$P(PSUREC,U,C)="" | 
|---|
| 170 | F  S PSURCE=$O(VADM(12,PSURCE)) Q:PSURCE=""  D       ;Race multiple | 
|---|
| 171 | .S PSURAC=$P($G(VADM(12,PSURCE)),U,2),$P(PSUREC,U,C)=PSURAC,C=C+1 | 
|---|
| 172 | Q | 
|---|
| 173 | ; | 
|---|
| 174 | XMD ;Format mailman message and send. | 
|---|
| 175 | ; | 
|---|
| 176 | S PSUAB=0,PSUPL=1 | 
|---|
| 177 | F  S PSUAB=$O(^XTMP("PSU_"_PSUJOB,"PSUDMX",PSUAB)) Q:PSUAB=""  D | 
|---|
| 178 | .M ^XTMP("PSU_"_PSUJOB,"PSUDM",PSUPL)=^XTMP("PSU_"_PSUJOB,"PSUDMX",PSUAB)  ;Global numerical order | 
|---|
| 179 | .S PSUPL=PSUPL+1 | 
|---|
| 180 | ; | 
|---|
| 181 | NEW PSUMAX,PSULC,PSUTMC,PSUTLC,PSUMC | 
|---|
| 182 | S PSUMAX=$$VAL^PSUTL(4.3,1,8.3) | 
|---|
| 183 | S PSUMAX=$S(PSUMAX="":10000,PSUMAX>10000:10000,1:PSUMAX) | 
|---|
| 184 | S PSUMC=1,PSUMLC=0 | 
|---|
| 185 | F PSULC=1:1 S X=$G(^XTMP("PSU_"_PSUJOB,"PSUDM",PSULC)) Q:X=""  D | 
|---|
| 186 | .S PSUMLC=PSUMLC+1 | 
|---|
| 187 | .I PSUMLC>PSUMAX S PSUMC=PSUMC+1,PSUMLC=0,PSULC=PSULC-1 Q  ; +  message | 
|---|
| 188 | .I $L(X)<235 S ^XTMP("PSU_"_PSUJOB,"PSUXMD",PSUMC,PSUMLC)=X Q | 
|---|
| 189 | .F I=235:-1:1 S Z=$E(X,I) Q:Z="^" | 
|---|
| 190 | .S ^XTMP("PSU_"_PSUJOB,"PSUXMD",PSUMC,PSUMLC)=$E(X,1,I) | 
|---|
| 191 | .S PSUMLC=PSUMLC+1 | 
|---|
| 192 | .S ^XTMP("PSU_"_PSUJOB,"PSUXMD",PSUMC,PSUMLC)="*"_$E(X,I+1,999) | 
|---|
| 193 | ; | 
|---|
| 194 | ;   Count Lines sent | 
|---|
| 195 | S PSUTLC=0 | 
|---|
| 196 | F PSUM=1:1:PSUMC S X=$O(^XTMP("PSU_"_PSUJOB,"PSUXMD",PSUM,""),-1),PSUTLC=PSUTLC+X | 
|---|
| 197 | ; | 
|---|
| 198 | F PSUM=1:1:PSUMC D PDMAIL^PSUDEM5 | 
|---|
| 199 | D CONF | 
|---|
| 200 | Q | 
|---|
| 201 | CONF ;Construct globals for confirmation message | 
|---|
| 202 | ; | 
|---|
| 203 | N PSUDIVIS | 
|---|
| 204 | D INST | 
|---|
| 205 | S PSUDIVIS=$P(^XTMP("PSU_"_PSUJOB,"PSUSITE"),U,1) | 
|---|
| 206 | S PSUSUB="PSU_"_PSUJOB | 
|---|
| 207 | S ^XTMP(PSUSUB,"CONFIRM",PSUDIVIS,7,"M")=PSUMC | 
|---|
| 208 | S ^XTMP(PSUSUB,"CONFIRM",PSUDIVIS,7,"L")=PSUTLC | 
|---|
| 209 | Q | 
|---|
| 210 | REC ;EN If "^" is contained in any record, replace it with "'" | 
|---|
| 211 | ; | 
|---|
| 212 | I PSUREC["^" S PSUREC=$TR(PSUREC,"^","'") | 
|---|
| 213 | Q | 
|---|