| 1 | PSUPR3 ;BIR/PDW - EXTRACTION FROM FILE 58.81 ;12 AUG 1999
 | 
|---|
| 2 |  ;;4.0;PHARMACY BENEFITS MANAGEMENT;;MARCH, 2005
 | 
|---|
| 3 |  ;DBIAs
 | 
|---|
| 4 |  ; Reference to file #58.81 supported by DBIA 2520
 | 
|---|
| 5 |  ; Reference to file #50    supported by DBIA 221
 | 
|---|
| 6 |  ; Reference to file #51.5  supported by DBIA 1931
 | 
|---|
| 7 |  ; Reference to file #58.8  supported by DBIA 2519
 | 
|---|
| 8 |  ; Reference to file #59    supported by DBIA 2510
 | 
|---|
| 9 |  ; Reference to file #42    supported by DBIA 2440
 | 
|---|
| 10 |  ; Reference to file #40.8  supported by DBIA 2438
 | 
|---|
| 11 |  ; Reference to file #59.5  supported by DBIA 2499
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 | EN ;EP from PSUPR0
 | 
|---|
| 14 |  S PSUEDT=PSUEDT\1+.24
 | 
|---|
| 15 |  ;   setup ^XTMP node
 | 
|---|
| 16 |  S:'$D(PSUPRJOB) PSUPRJOB=$J
 | 
|---|
| 17 |  S:'$D(PSUPRSUB) PSUPRSUB="PSUPR_"_PSUPRJOB
 | 
|---|
| 18 |  I '$D(^XTMP(PSUPRSUB)) D
 | 
|---|
| 19 |  . S ^XTMP(PSUPRSUB,0)=""
 | 
|---|
| 20 |  . S X1=DT,X2=6 D C^%DTC
 | 
|---|
| 21 |  . S ^XTMP(PSUPRSUB,0)=X_"^"_DT_"^"_" PBMS Procurement Extraction3"
 | 
|---|
| 22 | SCANDT ;   3.2.6.31  scan Transaction date time
 | 
|---|
| 23 |  S PSUDT=PSUSDT
 | 
|---|
| 24 |  ;  going after ^PSD(58.81,"AF",PSUDT,PSULOC,PSUTYP,PSUTRDA)
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 |  F  S PSUDT=$O(^PSD(58.81,"AF",PSUDT)) Q:PSUDT'>0  Q:PSUDT>PSUEDT  D LOC
 | 
|---|
| 27 |  Q
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 | LOC ;EP scan thru locations
 | 
|---|
| 30 |  ;
 | 
|---|
| 31 |  S PSULOC="" F  S PSULOC=$O(^PSD(58.81,"AF",PSUDT,PSULOC)) Q:PSULOC=""  D TYPE
 | 
|---|
| 32 |  Q
 | 
|---|
| 33 |  ;
 | 
|---|
| 34 | TYPE ;EP Scan Thru Types
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 |  S PSUTYP="" F  S PSUTYP=$O(^PSD(58.81,"AF",PSUDT,PSULOC,PSUTYP)) Q:PSUTYP=""  D TRAN
 | 
|---|
| 37 |  Q
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 | TRAN ;EP Scan Thru Transactions
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 |  S PSUTRDA=0 F  S PSUTRDA=$O(^PSD(58.81,"AF",PSUDT,PSULOC,PSUTYP,PSUTRDA)) Q:PSUTRDA'>0  D TRANDA
 | 
|---|
| 42 |  Q
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 | TRANDA ;EP work a transaction
 | 
|---|
| 45 |  ;
 | 
|---|
| 46 |  N PSUTR
 | 
|---|
| 47 |  D GETS^PSUTL(58.81,PSUTRDA,".01;1;2;3;4;5;8;12;71;106;107","PSUTR","I")
 | 
|---|
| 48 |  D MOVEI^PSUTL("PSUTR")
 | 
|---|
| 49 |  S PSUDTDA=PSUTR(3)
 | 
|---|
| 50 |  ; 3.2.6.3.2-3.4
 | 
|---|
| 51 |  Q:(PSUTR(1)'=1)
 | 
|---|
| 52 |  I '$D(PSUFLSFG) D
 | 
|---|
| 53 |  .I $L(PSUTR(8)),'$L($G(PSUTR(71))) Q
 | 
|---|
| 54 |  I $D(PSUFLSFG) D
 | 
|---|
| 55 |  .I PSUTR(107)'="" Q
 | 
|---|
| 56 |  Q:$L(PSUTR(106))
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 |  ;     setup file 50 fields
 | 
|---|
| 59 |  S PSUDRDA=PSUTR(4)
 | 
|---|
| 60 |  N PSUDRUG
 | 
|---|
| 61 |  D GETS^PSUTL(50,PSUDRDA,".01;2;12;13;14.5;15;20;21;22;25;31","PSUDRUG","I")
 | 
|---|
| 62 |  D MOVEI^PSUTL("PSUDRUG")
 | 
|---|
| 63 |  ;
 | 
|---|
| 64 |  ;    further process file 50 fields
 | 
|---|
| 65 |  S:'$L(PSUDRUG(.01)) PSUDRUG(.01)="Unknown Generic Name" ;    Generic Name
 | 
|---|
| 66 |  S:'$L(PSUDRUG(21)) PSUDRUG(21)="Unknown VA Product Name" ;   VA Product Name
 | 
|---|
| 67 |  S:'$L(PSUDRUG(31)) PSUDRUG(31)="No NDC" ;                   NDC
 | 
|---|
| 68 |  S PSUDRUG(12)=$$VALI^PSUTL(51.5,PSUDRUG(12),.01) ;            Order Unit
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 |  ;    setup division  3.2.3.6.3.5
 | 
|---|
| 71 |  N PSULOC
 | 
|---|
| 72 |  S PSULOC=PSUTR(2)
 | 
|---|
| 73 |  ;   Get division from file 58.8, file  59.7 fileds 90.02,90.03
 | 
|---|
| 74 |  S PSUDIV="",PSUDIVI="H"
 | 
|---|
| 75 |  S PSUINV="",PSUINV(4)=PSULOC
 | 
|---|
| 76 |  D DIV^PSUPR2
 | 
|---|
| 77 | CONT ;
 | 
|---|
| 78 |  I $L(PSUDIV) S PSUDIVI=""
 | 
|---|
| 79 |  E  S PSUDIV=PSUSNDR
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 |  ;    Assemble Record
 | 
|---|
| 82 |  S PSUREC=$$RECORD()
 | 
|---|
| 83 |  ;    Store Record
 | 
|---|
| 84 |  S PSULC=+$O(^XTMP(PSUPRSUB,"RECORDS",PSUDIV,""),-1)
 | 
|---|
| 85 |  S PSULC=PSULC+1
 | 
|---|
| 86 |  S ^XTMP(PSUPRSUB,"RECORDS",PSUDIV,PSULC)=PSUREC
 | 
|---|
| 87 |  Q
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 |  ;    assemble record
 | 
|---|
| 90 | RECORD() ;EP Assemble record for storage
 | 
|---|
| 91 |  ; 3.2.11.38
 | 
|---|
| 92 |  N PSUR
 | 
|---|
| 93 |  S PSUR(2)=PSUDIV
 | 
|---|
| 94 |  S PSUR(3)=PSUDIVI
 | 
|---|
| 95 |  S PSUR(4)=PSUDTDA\1
 | 
|---|
| 96 |  S PSUR(5)=PSUDRUG(21)
 | 
|---|
| 97 |  S PSUR(6)=PSUDRUG(2)
 | 
|---|
| 98 |  S PSUR(7)=PSUDRUG(.01)
 | 
|---|
| 99 |  S PSUR(9)=PSUDRUG(31)
 | 
|---|
| 100 |  S PSUR(12)=PSUDRUG(14.5)
 | 
|---|
| 101 |  S PSUR(13)=$$VAL^PSUTL(50,PSUDRDA,12)
 | 
|---|
| 102 |  S PSUR(16)=PSUDRUG(15)
 | 
|---|
| 103 |  S PSUR(17)=PSUTR(5)
 | 
|---|
| 104 |  S PSUR(18)=PSUDRUG(13)
 | 
|---|
| 105 |  I PSUDRUG(15) S PSUR(360)=PSUDRUG(13)*(PSUTR(5)/PSUDRUG(15))
 | 
|---|
| 106 |  E  S PSUR(360)=""
 | 
|---|
| 107 |  S PSUR(19)=$J(PSUR(360),12,2)
 | 
|---|
| 108 |  K PSUR(360)
 | 
|---|
| 109 |  S PSUR(20)=PSUTR(12)
 | 
|---|
| 110 |  S PSUR(21)=PSUTR(71)
 | 
|---|
| 111 |  S PSUR(22)=""
 | 
|---|
| 112 |  S I=0 F  S I=$O(PSUR(I)) Q:I'>0  S PSUR(I)=$TR(PSUR(I),"^","'")
 | 
|---|
| 113 |  S I=0 F  S I=$O(PSUR(I)) Q:I'>0  S $P(PSUR,"^",I)=PSUR(I)
 | 
|---|
| 114 |  S PSUR=PSUR_"^"
 | 
|---|
| 115 |  Q PSUR
 | 
|---|