| 1 | PSUUD2 ;BIR/TJH - PBM UNIT DOSE SUBROUTINES & FUNCTIONS ;24 DEC 2003
 | 
|---|
| 2 |  ;;4.0;PHARMACY BENEFITS MANAGEMENT;;MARCH, 2005
 | 
|---|
| 3 |  ;DBIA(s)
 | 
|---|
| 4 |  ; Reference to file #55  supported by DBIA 2497
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 | DISAMT ; precompute dispensed amounts by drug
 | 
|---|
| 7 |  N DADATE,DADRUG,DAMT,DAHOW
 | 
|---|
| 8 |  K PSUDAS ; initialize Dispensed Amount Summary array
 | 
|---|
| 9 |  ;*34 |=>
 | 
|---|
| 10 |  S PSUXX=PSUSDT\1-.0001
 | 
|---|
| 11 | DAL134 S PSUXX=$O(^PS(55,PSPAT,5,PSDOSE,11,"B",PSUXX))
 | 
|---|
| 12 |  G:'PSUXX DISAMTQ
 | 
|---|
| 13 |  I PSUXX>PSUTEDT G DISAMTQ
 | 
|---|
| 14 |  S DISPDA=0
 | 
|---|
| 15 |  F  S DISPDA=$O(^PS(55,PSPAT,5,PSDOSE,11,"B",PSUXX,DISPDA)) Q:DISPDA'>0  D
 | 
|---|
| 16 |  . K DISPI
 | 
|---|
| 17 |  . D GETS^PSUTL(55.0611,"PSPAT,PSDOSE,DISPDA",".01;.02;.03;.05","DISPI","I")
 | 
|---|
| 18 |  . D MOVEI^PSUTL("DISPI")
 | 
|---|
| 19 |  . S DADATE=DISPI(.01)
 | 
|---|
| 20 |  . S DADRUG=$G(DISPI(.02)) G:DADRUG="" DAL134
 | 
|---|
| 21 |  . S DAMT=$G(DISPI(.03))
 | 
|---|
| 22 |  . S DAHOW=$G(DISPI(.05))
 | 
|---|
| 23 |  . S PSUDAS(DADRUG)=$G(PSUDAS(DADRUG))+$S(DAHOW=4:DAMT*-1,1:DAMT)  ;net
 | 
|---|
| 24 |  . I DAHOW'=4 D
 | 
|---|
| 25 |  ..S PSUDAS("DISP",DADRUG)=$G(PSUDAS("DISP",DADRUG))+$G(DAMT)   ;Dispense
 | 
|---|
| 26 |  . I DAHOW=4 D
 | 
|---|
| 27 |  ..S PSUDAS("RET",DADRUG)=$G(PSUDAS("RET",DADRUG))+$G(DAMT)   ;Return
 | 
|---|
| 28 |  . S PSUDAS("NET",DADRUG)=$G(PSUDAS("DISP",DADRUG))-$G(PSUDAS("RET",DADRUG))   ;Net dispensed
 | 
|---|
| 29 |  .;
 | 
|---|
| 30 |  . K DISPI
 | 
|---|
| 31 |  G DAL134
 | 
|---|
| 32 |  ;*34 <=|
 | 
|---|
| 33 | DISAMTQ K ^TMP($J,"PSUTA") Q  ; exit point from DISAMT subroutine
 | 
|---|
| 34 |  ;
 | 
|---|
| 35 | SETUP ; set up some variables required later
 | 
|---|
| 36 |  D SECTN^PSUTL1
 | 
|---|
| 37 |  D DT^DILF("E",PSUSDT,.EXTD)
 | 
|---|
| 38 |  S PSURP("START")=EXTD(0)
 | 
|---|
| 39 |  D DT^DILF("E",PSUEDT,.EXTD)
 | 
|---|
| 40 |  S PSURP("END")=EXTD(0)
 | 
|---|
| 41 |  S X1=PSUSDT,X2=-101
 | 
|---|
| 42 |  D C^%DTC K %,%H,%T
 | 
|---|
| 43 |  S PSDATE=X
 | 
|---|
| 44 |  S PSUEDTIM=PSUEDT+.2400
 | 
|---|
| 45 |  S PSUJOB=$G(PSUJOB,$J),PSUUDSUB="PSUUD_"_PSUJOB
 | 
|---|
| 46 |  K ^XTMP(PSUUDSUB)
 | 
|---|
| 47 |  K PSUDTLRN
 | 
|---|
| 48 |  S X1=DT,X2=3 D C^%DTC
 | 
|---|
| 49 |  S ^XTMP(PSUUDSUB,0)=X_U_DT_U_"PSU PBM UNIT DOSE STATISTICAL DATA"
 | 
|---|
| 50 | SETUPQ Q  ; exit from SETUP
 | 
|---|
| 51 |  ;
 | 
|---|
| 52 | TMPUD ; store Unit Dose data in first half of record, pieces 2-7
 | 
|---|
| 53 |  S DLM="^",REC1="^"
 | 
|---|
| 54 |  S REC1=REC1_$TR(PSUFACN,"^","'")_DLM_$TR(PSUDOSE(10),"^","'")_DLM_$TR(PSUDOSE(.01),"^","'")
 | 
|---|
| 55 |  S REC1=REC1_DLM_PSUSSN_DLM_$TR(PSUDOSE(26),"^","'")_DLM_PSUVSSN   ;_DLM_$TR(PSUVCL,"^","'")
 | 
|---|
| 56 |  ;S REC1=REC1_DLM_$TR(PSUVSV,"^","'")_DLM_$TR(PSUVS1,"^","'")_DLM_$TR(PSUVS2,"^","'")
 | 
|---|
| 57 | TMPUDQ Q  ; exit from TMPUD
 | 
|---|
| 58 |  ;
 | 
|---|
| 59 | TMPDD ; create Dispense Drug record and store in ^XTMP
 | 
|---|
| 60 |  N PSUDAMT S PSUDAMT=$G(PSUDAS(PSUDISD(.01)))
 | 
|---|
| 61 |  Q:'PSUDAMT  ; per Lina B., do not store if dispensed amount=0
 | 
|---|
| 62 |  S DLM="^",REC2="",PSUDTLRN(PSUFACN)=+$G(PSUDTLRN(PSUFACN))+1
 | 
|---|
| 63 |  S REC2=REC1_DLM_$TR(PSUDRUG(21),"^","'")_DLM_$TR(PSUDRUG(2),"^","'")_DLM
 | 
|---|
| 64 |  S REC2=REC2_$TR(PSUDRUG(.01),"^","'")_DLM_$TR(PSUDRUG(31),"^","'")_DLM
 | 
|---|
| 65 |  S REC2=REC2_PSUDRUG(51)_DLM_PSUDNFI_DLM_PSUDNFR_DLM
 | 
|---|
| 66 |  S REC2=REC2_$TR(PSUDISD(.02),"^","'")_DLM_$TR(PSUDRUG(14.5),"^","'")_DLM
 | 
|---|
| 67 |  S REC2=REC2_$TR(PSUDRUG(16),"^","'")_DLM_PSUDAMT_DLM_PSUDRUG(52)_DLM_PSUDRUG(3)_"^"
 | 
|---|
| 68 |  ;VMP OIFO BAY PINES;ELR;PSU*3.0*24
 | 
|---|
| 69 |  D ICN^PSUV1 S PSUPICN=$G(^XTMP("PSU_"_PSUJOB,"PSUPICN"))
 | 
|---|
| 70 |  S REC2=REC2_$G(PSUPICN)_DLM_$G(PSUDOSE(1))_DLM_PSUUDST_DLM
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 |  ;ADD AMIS DATA
 | 
|---|
| 73 |  N PSUDSP,PSURET
 | 
|---|
| 74 |  S PSUDSP=$G(PSUDAS("DISP",PSUDISD(.01)))
 | 
|---|
| 75 |  S ^XTMP(PSUUDSUB,"DISP",PSUFACN)=PSUDSP+$G(^XTMP(PSUUDSUB,"DISP",PSUFACN))
 | 
|---|
| 76 |  S PSURET=$G(PSUDAS("RET",PSUDISD(.01)))
 | 
|---|
| 77 |  S ^XTMP(PSUUDSUB,"RET",PSUFACN)=PSURET+$G(^XTMP(PSUUDSUB,"RET",PSUFACN))
 | 
|---|
| 78 |  S:'$G(PSURET) PSURET=0
 | 
|---|
| 79 |  S REC2=REC2_PSUDSP_DLM_PSURET_DLM
 | 
|---|
| 80 |  ;END AMIS DATA
 | 
|---|
| 81 |  ;
 | 
|---|
| 82 |  S ^XTMP(PSUUDSUB,"DETAIL",PSUFACN,PSUDTLRN(PSUFACN))=REC2
 | 
|---|
| 83 |  ; increase Unit Dose and Patient counts if not already counted
 | 
|---|
| 84 |  I '$D(^XTMP(PSUUDSUB,"ORD",PSUFACN,PSUDOSE(.01))) D
 | 
|---|
| 85 |  .S ^XTMP(PSUUDSUB,"ORD",PSUFACN,PSUDOSE(.01))=""
 | 
|---|
| 86 |  .S ^XTMP(PSUUDSUB,"ORD",PSUFACN)=1+$G(^XTMP(PSUUDSUB,"ORD",PSUFACN))
 | 
|---|
| 87 |  I '$D(^XTMP(PSUUDSUB,"SSN",PSUFACN,PSUSSN)) D
 | 
|---|
| 88 |  .S ^XTMP(PSUUDSUB,"SSN",PSUFACN,PSUSSN)=""
 | 
|---|
| 89 |  .S ^XTMP(PSUUDSUB,"SSN",PSUFACN)=1+$G(^XTMP(PSUUDSUB,"SSN",PSUFACN))
 | 
|---|
| 90 |  S PSUDIV=PSUFACN D GETDIV^PSUV3 I PSUDIVNM'="" D
 | 
|---|
| 91 |  .S ^XTMP("PSU_"_PSUJOB,"PSUDIV",PSUDIVNM,PSUSSN)=""
 | 
|---|
| 92 |  I PSUDIVNM="" S ^XTMP("PSU_"_PSUJOB,"PSUDIV",PSUDIV,PSUSSN)=""
 | 
|---|
| 93 |  ; and store totals by drug in ^TMP("PSUUD DRUG",$J,PSUFACN
 | 
|---|
| 94 |  I '$D(^XTMP(PSUUDSUB,"DRUG",PSUFACN,PSUDRUG(.01))) D
 | 
|---|
| 95 |  .S ^XTMP(PSUUDSUB,"DRUG",PSUFACN,PSUDRUG(.01))=0_U_PSUDRUG(16)_U_PSUDRUG(51)_U_PSUDNFI
 | 
|---|
| 96 |  S $P(^XTMP(PSUUDSUB,"DRUG",PSUFACN,PSUDRUG(.01)),U,1)=$P(^XTMP(PSUUDSUB,"DRUG",PSUFACN,PSUDRUG(.01)),U,1)+PSUDAMT
 | 
|---|
| 97 |  ; and store Summary totals
 | 
|---|
| 98 |  S ^XTMP(PSUUDSUB,"DIS",PSUFACN)=PSUDAMT+$G(^XTMP(PSUUDSUB,"DIS",PSUFACN))
 | 
|---|
| 99 |  S ^XTMP(PSUUDSUB,"CST",PSUFACN)=(PSUDRUG(16)*PSUDAMT)+$G(^XTMP(PSUUDSUB,"CST",PSUFACN))
 | 
|---|
| 100 | TMPDDQ Q  ; exit from TMPDD
 | 
|---|