| 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
 | 
|---|