| 1 | PSUDEM4 ;BIR/DAM - Provider Extract ; 4/26/07 4:38pm | 
|---|
| 2 | ;;4.0;PHARMACY BENEFITS MANAGEMENT;**8,12**;MARCH, 2005;Build 19 | 
|---|
| 3 | ; | 
|---|
| 4 | ;DBIA'S | 
|---|
| 5 | ; Reference to file 200    supported by DBIA 10060 | 
|---|
| 6 | ; Reference to file 7      supported by DBIA 2495 | 
|---|
| 7 | ; Reference to file 49     supported by DBIA 432 | 
|---|
| 8 | ; Reference to file 8932.1 supported by DBIA 2091 | 
|---|
| 9 | ; Reference to file 4.2    supported by DBIA 2496 | 
|---|
| 10 | ; | 
|---|
| 11 | EN ;Entry point for gathering all provider information from IV, UD, Rx, | 
|---|
| 12 | ;and PD modules. | 
|---|
| 13 | ; | 
|---|
| 14 | N PSUREC | 
|---|
| 15 | S ^XTMP("PSU_"_PSUJOB,"PSUFLAG")="" | 
|---|
| 16 | ; | 
|---|
| 17 | D PULL^PSUCP | 
|---|
| 18 | F I=1:1:$L(PSUOPTS,",") S PSUMOD($P(PSUOPTS,",",I))="" | 
|---|
| 19 | ; | 
|---|
| 20 | I '$D(PSUMOD(7)) D EN^PSUDEM1 | 
|---|
| 21 | I '$D(PSUMOD(1)) D EN^PSUV0 | 
|---|
| 22 | I '$D(PSUMOD(2)) D EN^PSUUD0 | 
|---|
| 23 | I '$D(PSUMOD(4)) D | 
|---|
| 24 | .S ^XTMP("PSU_"_PSUJOB,"PSUOPFLG")=""   ;Set flag | 
|---|
| 25 | .D EN^PSUOP0 | 
|---|
| 26 | M ^XTMP("PSU_"_PSUJOB,"PSUPROM")=^XTMP("PSU_"_PSUJOB,"PSUPROV") | 
|---|
| 27 | ; | 
|---|
| 28 | D XMD | 
|---|
| 29 | D EN^PSUSUM1      ;compose provider summary report and mail it. | 
|---|
| 30 | K ^XTMP("PSU_"_PSUJOB,"PSUFLAG") | 
|---|
| 31 | Q | 
|---|
| 32 | ; | 
|---|
| 33 | PDSSN ;EN  Called from PSUDEM1 | 
|---|
| 34 | ;Find provider SSN and IEN present in the patient demographics | 
|---|
| 35 | ;extract.  Note that this is the primary care provider. | 
|---|
| 36 | ; | 
|---|
| 37 | S PSUT=0 | 
|---|
| 38 | F  S PSUT=$O(^XTMP("PSU_"_PSUJOB,"PSUDM",PSUT)) Q:'PSUT  D | 
|---|
| 39 | .N PSUIEN,PSUSSN1 | 
|---|
| 40 | .S PSUIEN=$P($G(^XTMP("PSU_"_PSUJOB,"PSUDM",PSUT)),U,15) I 'PSUIEN S PSUIEN="UNK" | 
|---|
| 41 | .D FAC | 
|---|
| 42 | .D PNAM | 
|---|
| 43 | .S PSUSSN1=$P($G(^XTMP("PSU_"_PSUJOB,"PSUDM",PSUT)),U,14) I 'PSUSSN1 S PSUSSN1="" | 
|---|
| 44 | .S PSUREC=PSUSSN1 D REC^PSUDEM2 | 
|---|
| 45 | .S $P(^XTMP("PSU_"_PSUJOB,"PSUPROV",PSUIEN),U,3)=PSUREC              ;Dem Prov SSN | 
|---|
| 46 | .S PSUREC=PSUIEN D REC^PSUDEM2 | 
|---|
| 47 | .S $P(^XTMP("PSU_"_PSUJOB,"PSUPROV",PSUIEN),U,4)=PSUREC D              ;Dem Prov ICN | 
|---|
| 48 | ..I PSUREC="UNK" K ^XTMP("PSU_"_PSUJOB,"PSUPROV",PSUIEN) | 
|---|
| 49 | Q | 
|---|
| 50 | ; | 
|---|
| 51 | UDSSN ;EN  Called from PROV^PSUUD1. Find provider SSN and IEN in the unit | 
|---|
| 52 | ;dose extract | 
|---|
| 53 | ; | 
|---|
| 54 | S PSUIEN=0,PSUVSSN1=0 | 
|---|
| 55 | F  S PSUVSSN1=$O(^XTMP("PSU_"_PSUJOB,"PSUPDR",PSUVSSN1)) Q:PSUVSSN1=""  D | 
|---|
| 56 | .F  S PSUIEN=$O(^XTMP("PSU_"_PSUJOB,"PSUPDR",PSUVSSN1,PSUIEN)) Q:PSUIEN=""  D | 
|---|
| 57 | ..D FAC | 
|---|
| 58 | ..S PSUREC=PSUVSSN1 D REC^PSUDEM1 D | 
|---|
| 59 | ...I PSUREC=999999999 S PSUREC="" | 
|---|
| 60 | ...S $P(^XTMP("PSU_"_PSUJOB,"PSUPROV",PSUIEN),U,3)=PSUREC   ;UD Prov SSN | 
|---|
| 61 | ..S PSUREC=PSUIEN D REC^PSUDEM2 | 
|---|
| 62 | ..S $P(^XTMP("PSU_"_PSUJOB,"PSUPROV",PSUIEN),U,4)=PSUREC    ;UD Prov IEN | 
|---|
| 63 | ..D PNAM | 
|---|
| 64 | Q | 
|---|
| 65 | ; | 
|---|
| 66 | IVSSN ;EN Called from PSUIV1. Gives Provider within date range of extract | 
|---|
| 67 | ; | 
|---|
| 68 | D UDSSN | 
|---|
| 69 | Q | 
|---|
| 70 | ; | 
|---|
| 71 | OPSSN ;EN Called from PSUOP0.  Gives prescription Provider | 
|---|
| 72 | ; | 
|---|
| 73 | D UDSSN | 
|---|
| 74 | Q | 
|---|
| 75 | FAC ;Find provider station number.  Places that info in each record. | 
|---|
| 76 | ; | 
|---|
| 77 | ;D INST^PSUDEM1 | 
|---|
| 78 | S $P(^TMP("PSUPROV",$J),U,2)=PSUSNDR | 
|---|
| 79 | M ^XTMP("PSU_"_PSUJOB,"PSUPROV",PSUIEN)=^TMP("PSUPROV",$J) | 
|---|
| 80 | Q | 
|---|
| 81 | ; | 
|---|
| 82 | PNAM ;Find the provider's name. | 
|---|
| 83 | ; | 
|---|
| 84 | N PSUCLP,PSUSS,PSUSP | 
|---|
| 85 | ; | 
|---|
| 86 | ;Find provider name | 
|---|
| 87 | S $P(^XTMP("PSU_"_PSUJOB,"PSUPROV",PSUIEN),U,9)=$$GET1^DIQ(200,PSUIEN,.01,"I") | 
|---|
| 88 | ; | 
|---|
| 89 | S PSUCLP=$$GET1^DIQ(200,PSUIEN,53.5,"I") D CLASS  ;Provider pointer | 
|---|
| 90 | S PSUSS=$$GET1^DIQ(200,PSUIEN,29,"I") D SS        ;Service Sctn ptr | 
|---|
| 91 | ; | 
|---|
| 92 | S PSUD1=999 | 
|---|
| 93 | S PSUD1=$O(^VA(200,PSUIEN,"USC1",PSUD1),-1)  ;Find last subscript | 
|---|
| 94 | I PSUD1'="" D | 
|---|
| 95 | .S PSUSP=$$GET1^DIQ(200.05,PSUD1_","_PSUIEN_",",.01,"I")  ;Specialty | 
|---|
| 96 | .D SPEC | 
|---|
| 97 | I PSUD1="" D | 
|---|
| 98 | .S $P(^XTMP("PSU_"_PSUJOB,"PSUPROV",PSUIEN),U,7)="" | 
|---|
| 99 | .S $P(^XTMP("PSU_"_PSUJOB,"PSUPROV",PSUIEN),U,8)="" | 
|---|
| 100 | Q | 
|---|
| 101 | ; | 
|---|
| 102 | CLASS ;Find provider class | 
|---|
| 103 | ; | 
|---|
| 104 | I '$D(PSUCLP) S $P(^XTMP("PSU_"_PSUJOB,"PSUPROV",PSUIEN),U,5)="" Q | 
|---|
| 105 | I PSUCLP="" S $P(^XTMP("PSU_"_PSUJOB,"PSUPROV",PSUIEN),U,5)="" | 
|---|
| 106 | I PSUCLP'="" D | 
|---|
| 107 | .N PSUA | 
|---|
| 108 | .S PSUA=$P($G(^DIC(7,PSUCLP,0)),U,2) | 
|---|
| 109 | .I PSUA']"" S PSUA=$P($G(^DIC(7,PSUCLP,0)),U,1) | 
|---|
| 110 | .S $P(^XTMP("PSU_"_PSUJOB,"PSUPROV",PSUIEN),U,5)=PSUA  ;Prov class | 
|---|
| 111 | .K PSUA | 
|---|
| 112 | Q | 
|---|
| 113 | ; | 
|---|
| 114 | SS ;Find Provider Service/Section | 
|---|
| 115 | ; | 
|---|
| 116 | N PSUTMP | 
|---|
| 117 | ; | 
|---|
| 118 | I PSUSS="" S $P(^XTMP("PSU_"_PSUJOB,"PSUPROV",PSUIEN),U,6)="" | 
|---|
| 119 | I PSUSS'="" S PSUTMP=1 D | 
|---|
| 120 | .S:$P($G(^DIC(49,PSUSS,0)),U)["AMBU" PSUTMP="AMB" | 
|---|
| 121 | .S:$P($G(^DIC(49,PSUSS,0)),U)["ANESTH" PSUTMP="ANES" | 
|---|
| 122 | .S:$P($G(^DIC(49,PSUSS,0)),U)["CARDIO" PSUTMP="CV" | 
|---|
| 123 | .S:$P($G(^DIC(49,PSUSS,0)),U)["PHARM" PSUTMP="CPHAR" | 
|---|
| 124 | .S:$P($G(^DIC(49,PSUSS,0)),U)["DENT" PSUTMP="DDS" | 
|---|
| 125 | .S:$P($G(^DIC(49,PSUSS,0)),U)["MEDIC" PSUTMP="MED" | 
|---|
| 126 | .S:$P($G(^DIC(49,PSUSS,0)),U)["INTERMED" PSUTMP="IM" | 
|---|
| 127 | .S:$P($G(^DIC(49,PSUSS,0)),U)["NUCLEAR" PSUTMP="NUM" | 
|---|
| 128 | .S:$P($G(^DIC(49,PSUSS,0)),U)["NURSING" PSUTMP="RN" | 
|---|
| 129 | .S:$P($G(^DIC(49,PSUSS,0)),U)["ORTHOPED" PSUTMP="ORTHO" | 
|---|
| 130 | .S:$P($G(^DIC(49,PSUSS,0)),U)["PSYCHIA" PSUTMP="PSY" | 
|---|
| 131 | .S:$P($G(^DIC(49,PSUSS,0)),U)["MENTAL" PSUTMP="PSY" | 
|---|
| 132 | .S:$P($G(^DIC(49,PSUSS,0)),U)["PRIMARY" PSUTMP="AMB" | 
|---|
| 133 | .S:$P($G(^DIC(49,PSUSS,0)),U)["CBOC" PSUTMP="AMB" | 
|---|
| 134 | .S:$P($G(^DIC(49,PSUSS,0)),U)["OPHTH" PSUTMP="OPH" | 
|---|
| 135 | .S:$P($G(^DIC(49,PSUSS,0)),U)["PULM" PSUTMP="PUL" | 
|---|
| 136 | .S:$P($G(^DIC(49,PSUSS,0)),U)["RADIOL" PSUTMP="RAD" | 
|---|
| 137 | .S:$P($G(^DIC(49,PSUSS,0)),U)["SURG" PSUTMP="SUR" | 
|---|
| 138 | .S:$P($G(^DIC(49,PSUSS,0)),U)["UROLOG" PSUTMP="U" | 
|---|
| 139 | .S:$P($G(^DIC(49,PSUSS,0)),U)["NEUROL" PSUTMP="NEUR" | 
|---|
| 140 | .S PSUREC=$G(PSUTMP) D REC^PSUDEM2 | 
|---|
| 141 | .S $P(^XTMP("PSU_"_PSUJOB,"PSUPROV",PSUIEN),U,6)=$G(PSUREC)       ;Prov Serv/Sec | 
|---|
| 142 | Q | 
|---|
| 143 | ; | 
|---|
| 144 | SPEC ;Find provider specialty and sub-specialty | 
|---|
| 145 | ; | 
|---|
| 146 | I PSUSP="" S $P(^XTMP("PSU_"_PSUJOB,"PSUPROV",PSUIEN),U,7)="" | 
|---|
| 147 | I PSUSP="" S $P(^XTMP("PSU_"_PSUJOB,"PSUPROV",PSUIEN),U,8)="" | 
|---|
| 148 | I PSUSP'="" D | 
|---|
| 149 | .S PSUREC=$P($G(^USC(8932.1,PSUSP,0)),U,2) D REC^PSUDEM2 | 
|---|
| 150 | .S $P(^XTMP("PSU_"_PSUJOB,"PSUPROV",PSUIEN),U,7)=PSUREC D     ;Speclty | 
|---|
| 151 | ..I $P(^USC(8932.1,PSUSP,0),U,2)="" S $P(^XTMP("PSU_"_PSUJOB,"PSUPROV",PSUIEN),U,7)="" | 
|---|
| 152 | .S PSUREC=$P($G(^USC(8932.1,PSUSP,0)),U,3) D REC^PSUDEM2 | 
|---|
| 153 | .S $P(^XTMP("PSU_"_PSUJOB,"PSUPROV",PSUIEN),U,8)=PSUREC D      ;Subspecl | 
|---|
| 154 | ..I $P(^USC(8932.1,PSUSP,0),U,3)="" S $P(^XTMP("PSU_"_PSUJOB,"PSUPROV",PSUIEN),U,8)="" | 
|---|
| 155 | ; | 
|---|
| 156 | Q | 
|---|
| 157 | ; | 
|---|
| 158 | XMD ;Format mailman message and send. | 
|---|
| 159 | ; | 
|---|
| 160 | S PSUAA=0 | 
|---|
| 161 | F  S PSUAA=$O(^XTMP("PSU_"_PSUJOB,"PSUPROM",PSUAA)) Q:PSUAA=""  D | 
|---|
| 162 | .S $P(^XTMP("PSU_"_PSUJOB,"PSUPROM",PSUAA),U,9)=""      ;Remove provider name | 
|---|
| 163 | ; | 
|---|
| 164 | ;Remove space in piece 8 | 
|---|
| 165 | S PSUAB=0 | 
|---|
| 166 | F  S PSUAB=$O(^XTMP("PSU_"_PSUJOB,"PSUPROM",PSUAB)) Q:PSUAB=""  D | 
|---|
| 167 | .I $P(^XTMP("PSU_"_PSUJOB,"PSUPROM",PSUAB),U,8)=" " D | 
|---|
| 168 | ..S $P(^XTMP("PSU_"_PSUJOB,"PSUPROM",PSUAB),U,8)="" | 
|---|
| 169 | ; | 
|---|
| 170 | S PSUAC=0,PSUPL=1 | 
|---|
| 171 | F  S PSUAC=$O(^XTMP("PSU_"_PSUJOB,"PSUPROM",PSUAC)) Q:PSUAC=""  D | 
|---|
| 172 | .M ^TMP("PSUPROM",$J,PSUPL)=^XTMP("PSU_"_PSUJOB,"PSUPROM",PSUAC)  ;numerical order | 
|---|
| 173 | .S PSUPL=PSUPL+1 | 
|---|
| 174 | ; | 
|---|
| 175 | NEW PSUMAX,PSULC,PSUTMC,PSUTLC,PSUMC | 
|---|
| 176 | S PSUMAX=$$VAL^PSUTL(4.3,1,8.3) | 
|---|
| 177 | S PSUMAX=$S(PSUMAX="":10000,PSUMAX>10000:10000,1:PSUMAX) | 
|---|
| 178 | S PSUMC=1,PSUMLC=0 | 
|---|
| 179 | F PSULC=1:1 S X=$G(^TMP("PSUPROM",$J,PSULC)) Q:X=""  D | 
|---|
| 180 | .S PSUMLC=PSUMLC+1 | 
|---|
| 181 | .I PSUMLC>PSUMAX S PSUMC=PSUMC+1,PSUMLC=0,PSULC=PSULC-1 Q  ; +  message | 
|---|
| 182 | .I $L(X)<235 S ^XTMP("PSU_"_PSUJOB,"PSUXMD",PSUMC,PSUMLC)=X Q | 
|---|
| 183 | .F I=235:-1:1 S Z=$E(X,I) Q:Z="^" | 
|---|
| 184 | .S ^XTMP("PSU_"_PSUJOB,"PSUXMD",PSUMC,PSUMLC)=$E(X,1,I) | 
|---|
| 185 | .S PSUMLC=PSUMLC+1 | 
|---|
| 186 | .S ^XTMP("PSU_"_PSUJOB,"PSUXMD",PSUMC,PSUMLC)="*"_$E(X,I+1,999) | 
|---|
| 187 | ; | 
|---|
| 188 | F PSUM=1:1:PSUMC D PROV^PSUDEM5 | 
|---|
| 189 | D CONF | 
|---|
| 190 | Q | 
|---|
| 191 | CONF ;Construct globals for confirmation message | 
|---|
| 192 | ; | 
|---|
| 193 | ;   Count Lines sent | 
|---|
| 194 | S PSUTLC=0 | 
|---|
| 195 | F PSUM=1:1:PSUMC S X=$O(^XTMP("PSU_"_PSUJOB,"PSUXMD",PSUM,""),-1),PSUTLC=PSUTLC+X | 
|---|
| 196 | ; | 
|---|
| 197 | D INST^PSUDEM1 | 
|---|
| 198 | N PSUDIVIS | 
|---|
| 199 | S PSUDIVIS=$P(^XTMP("PSU_"_PSUJOB,"PSUSITE"),U,1) | 
|---|
| 200 | S PSUSUB="PSU_"_PSUJOB | 
|---|
| 201 | S ^XTMP(PSUSUB,"CONFIRM",PSUDIVIS,10,"M")=PSUMC | 
|---|
| 202 | S ^XTMP(PSUSUB,"CONFIRM",PSUDIVIS,10,"L")=PSUTLC | 
|---|
| 203 | Q | 
|---|