| 1 | PSUPR1 ;BIR/PDW - Data Gathering for PBMS PR file 442 ;12 AUG 1999 | 
|---|
| 2 | ;;4.0;PHARMACY BENEFITS MANAGEMENT;;MARCH, 2005 | 
|---|
| 3 | ;DBIAs | 
|---|
| 4 | ; Reference to file #442    supported by DBIA 1020 | 
|---|
| 5 | ; Reference to file #445.01 supported by DBIA 1021 | 
|---|
| 6 | ; Reference to file #420.5  supported by DBIA 1022 | 
|---|
| 7 | ; Reference to file #410    supported by DBIA 2345,2409 | 
|---|
| 8 | ; Reference to file #440    supported by DBIA 2606 | 
|---|
| 9 | ; Reference to file #4.3    supported by DBIA 10091 | 
|---|
| 10 | ; Reference to file #50     supported by DBIA 221 | 
|---|
| 11 | ; | 
|---|
| 12 | EN ;EP Entry Point | 
|---|
| 13 | S PSUEDT=PSUEDT\1+.24 | 
|---|
| 14 | S PSUPRSDT=PSUSDT | 
|---|
| 15 | S PSUPREDT=PSUEDT | 
|---|
| 16 | ;   setup ^XTMP node | 
|---|
| 17 | S:'$D(PSUPRJOB) PSUPRJOB=$J | 
|---|
| 18 | S:'$D(PSUPRSUB) PSUPRSUB="PSUPR_"_PSUPRJOB | 
|---|
| 19 | I '$D(^XTMP(PSUPRSUB)) D | 
|---|
| 20 | . S ^XTMP(PSUPRSUB,"RECORDS",0)="" | 
|---|
| 21 | . S X1=DT,X2=6 D C^%DTC | 
|---|
| 22 | . S ^XTMP(PSUPRSUB,0)=X_"^"_DT_"^ PBMS Procurement Extraction" | 
|---|
| 23 | START ;EP | 
|---|
| 24 | N PSUDT,PSUDA | 
|---|
| 25 | S PSURC=0 ;   record counter | 
|---|
| 26 | S PSUDT=PSUPRSDT | 
|---|
| 27 | F  S PSUDT=$O(^PRC(442,"AB",PSUDT)) Q:PSUDT'>0  Q:PSUDT>PSUPREDT  D PODATE | 
|---|
| 28 | Q | 
|---|
| 29 | ; | 
|---|
| 30 | PODATE ;EP Process a PO DATE | 
|---|
| 31 | N PSUPODA | 
|---|
| 32 | ;    File 442 can not be linked to division so div=sender | 
|---|
| 33 | ;    and indicator = "H" | 
|---|
| 34 | S X=$P($G(^XMB(1,1,"XUS")),U,17) | 
|---|
| 35 | S PSUDIV=PSUSNDR,PSUDIVI="H" | 
|---|
| 36 | ;    Loop POs within date | 
|---|
| 37 | S PSUPODA=0 | 
|---|
| 38 | F  S PSUPODA=$O(^PRC(442,"AB",PSUDT,PSUPODA)) Q:'PSUPODA  D PO | 
|---|
| 39 | Q | 
|---|
| 40 | ; | 
|---|
| 41 | PO ;EP Process a PO | 
|---|
| 42 | N PSUPO,PSUCC | 
|---|
| 43 | S PSUCC=$$VALI^PSUTL(442,PSUPODA,2) ;   cost center | 
|---|
| 44 | I PSUCC'=822400,PSUCC'=828100 Q  ; not pharmacy related | 
|---|
| 45 | S PSUSS=$$VALI^PSUTL(442,PSUPODA,.5) ;  supply status | 
|---|
| 46 | I PSUSS>14,PSUSS<45 | 
|---|
| 47 | E  Q  ; not within status range | 
|---|
| 48 | ;      load po information | 
|---|
| 49 | D GETS^PSUTL(442,PSUPODA,".01;.1;1;2;5","PSUPO","I") | 
|---|
| 50 | D MOVEI^PSUTL("PSUPO") | 
|---|
| 51 | ; | 
|---|
| 52 | ;      further process po information | 
|---|
| 53 | S PSUPO(5)=$$VALI^PSUTL(440,PSUPO(5),.01) ; Vendor name | 
|---|
| 54 | ; | 
|---|
| 55 | ;      load item information | 
|---|
| 56 | K ^TMP($J,"PSUMIT") | 
|---|
| 57 | D GETM^PSUTL(442,PSUPODA,"40*^1;1.5;3;3.1;5;9.3;10;11","^TMP($J,""PSUMIT"")","IN") | 
|---|
| 58 | D MOVEMI^PSUTL("^TMP($J,""PSUMIT"")") | 
|---|
| 59 | ; | 
|---|
| 60 | ;      loop items | 
|---|
| 61 | S PSUITDA=0 | 
|---|
| 62 | F  S PSUITDA=$O(^TMP($J,"PSUMIT",PSUITDA)) Q:PSUITDA'>0  D ITEM | 
|---|
| 63 | Q | 
|---|
| 64 | ; | 
|---|
| 65 | ITEM ;EP    Process one item | 
|---|
| 66 | N PSUIT,PSUDRDA | 
|---|
| 67 | M PSUIT=^TMP($J,"PSUMIT",PSUITDA) | 
|---|
| 68 | ; | 
|---|
| 69 | ;       Get Drug | 
|---|
| 70 | S PSUIT(1.5)=+$G(PSUIT(1.5)) | 
|---|
| 71 | S PSUDRDA=$O(^PSDRUG("AB",PSUIT(1.5),0)) | 
|---|
| 72 | N PSUARSUB,PSUARJOB S PSUARSUB=PSUPRSUB,PSUARJOB=PSUPRJOB | 
|---|
| 73 | I PSUDRDA D DRUG^PSUAR2(PSUDRDA) ;  setup drug profile | 
|---|
| 74 | ; | 
|---|
| 75 | ;      process dispense unit 445 & conversion factor   3.2.6.1.5 | 
|---|
| 76 | S X=+$G(PSUIT(10)),X=+$$VALI^PSUTL(410,X,4) | 
|---|
| 77 | ;      disp unit | 
|---|
| 78 | S PSUIT("DU")=$$VALI^PSUTL(445.01,"X,PSUIT(1.5)",50) | 
|---|
| 79 | ;      disp unit conver factor | 
|---|
| 80 | S PSUIT("DUCV")=$$VALI^PSUTL(445.01,"X,PSUIT(1.5)",51) | 
|---|
| 81 | ;      unit of purchase | 
|---|
| 82 | S PSUIT("UOP")=$$VALI^PSUTL(420.5,+$G(PSUIT(3)),.01) | 
|---|
| 83 | ; | 
|---|
| 84 | ;      further process fields | 
|---|
| 85 | S:'$L($G(PSUIT(9.3))) PSUIT(9.3)="No NDC" | 
|---|
| 86 | ; | 
|---|
| 87 | ; | 
|---|
| 88 | REC ;EP Assemble record | 
|---|
| 89 | K PSUR | 
|---|
| 90 | S PSUG="^XTMP(PSUPRSUB,""PSUDRUG_DET"",PSUDRDA)" ; drug reference | 
|---|
| 91 | S PSUR(2)=$G(PSUDIV) | 
|---|
| 92 | S PSUR(3)=$G(PSUDIVI) | 
|---|
| 93 | S PSUR(4)=$G(PSUPO(.1)) | 
|---|
| 94 | I PSUDRDA D | 
|---|
| 95 | . S PSUR(5)=@PSUG@(21) | 
|---|
| 96 | . S PSUR(7)=@PSUG@(.01) | 
|---|
| 97 | . S PSUR(12)=@PSUG@(14.5) | 
|---|
| 98 | . S PSUR(6)=@PSUG@(2) | 
|---|
| 99 | I 'PSUDRDA D | 
|---|
| 100 | . S PSUR(5)="Unknown VA Product Name" | 
|---|
| 101 | . S PSUR(7)="Unknown Generic Name" | 
|---|
| 102 | S PSUR(8)=$G(PSUIT(1,1))_$G(PSUIT(1,2)) S:'$L(PSUR(8)) PSUR(8)="No description listed" | 
|---|
| 103 | F  S X=$E(PSUR(8)) Q:X'=" "  S PSUR(8)=$E(PSUR(8),2,999) | 
|---|
| 104 | S PSUR(8)=$E(PSUR(8),1,50) | 
|---|
| 105 | S PSUR(9)=$G(PSUIT(9.3)) | 
|---|
| 106 | S PSUR(12)=$G(PSUIT("DU")) | 
|---|
| 107 | S PSUR(13)=$G(PSUIT("UOP")) | 
|---|
| 108 | S PSUR(14)=$G(PSUIT(3.1)) | 
|---|
| 109 | S PSUR(15)=PSUIT("DU") | 
|---|
| 110 | S PSUR(16)=PSUIT("DUCV") | 
|---|
| 111 | S PSUR(17)=$G(PSUIT(11)) | 
|---|
| 112 | S PSUR(18)=$G(PSUIT(5)) | 
|---|
| 113 | S PSUR(19)=$G(PSUIT(11))*$G(PSUIT(5)) | 
|---|
| 114 | S PSUR(20)=PSUPO(5) | 
|---|
| 115 | S PSUR(22)=PSUPO(1) | 
|---|
| 116 | S PSUR="" | 
|---|
| 117 | S I=0 F  S I=$O(PSUR(I)) Q:I'>0  S PSUR(I)=$TR(PSUR(I),"^","'") | 
|---|
| 118 | S I=0 F  S I=$O(PSUR(I)) Q:I'>0  S $P(PSUR,"^",I)=PSUR(I) | 
|---|
| 119 | S PSUR=PSUR_"^" | 
|---|
| 120 | ;   Store Records under PSUSNDR default division | 
|---|
| 121 | S PSURC=PSURC+1,^XTMP(PSUPRSUB,"RECORDS",PSUSNDR,PSURC)=$E(PSUR,1,240) I $L(PSUR)>240 S ^(PSURC,1)=$E(PSUR,241,999) | 
|---|
| 122 | Q | 
|---|