| 1 | ALPBUTL3 ;OIFO-DALLAS MW,SED,KC-BCBU BACKUP REPORT FUNCTIONS AND UTILITIES  ;01/01/03 | 
|---|
| 2 | ;;3.0;BAR CODE MED ADMIN;**8**;Mar 2004 | 
|---|
| 3 | START(DAY) ;Get current date | 
|---|
| 4 | D NOW^%DTC | 
|---|
| 5 | S Y=X | 
|---|
| 6 | S STARD=%I(2) | 
|---|
| 7 | D DD^%DT | 
|---|
| 8 | S MON=$E(Y,1,3) | 
|---|
| 9 | S LD=$S(MON="JAN":31,MON="FEB":29,MON="MAR":31,MON="APR":30,MON="MAY":31,MON="JUN":30,MON="JUL":31,MON="AUG":31,MON="SEP":30,MON="OCT":31,MON="NOV":30,MON="DEC":31) | 
|---|
| 10 | S LDD=LD+1 | 
|---|
| 11 | S SP=69,CNT=0 | 
|---|
| 12 | S SS=STARD+DAY | 
|---|
| 13 | I SS>LDD S SS=LDD | 
|---|
| 14 | I SS<LDD S LDD=SS | 
|---|
| 15 | F J=STARD:0 DO  Q:J=LDD | 
|---|
| 16 | .S SP=SP+6,CNT=CNT+1 | 
|---|
| 17 | .W ?SP,J | 
|---|
| 18 | .S J=J+1 | 
|---|
| 19 | .I J=SS Q | 
|---|
| 20 | I CNT'=DAY F J=1:1 DO  Q:CNT=DAY | 
|---|
| 21 | .S SP=SP+6,CNT=CNT+1 | 
|---|
| 22 | .W ?SP,J | 
|---|
| 23 | Q | 
|---|
| 24 | MON(DAY) ;Get the month | 
|---|
| 25 | D NOW^%DTC | 
|---|
| 26 | S Y=X | 
|---|
| 27 | S STARD=%I(2) | 
|---|
| 28 | D DD^%DT | 
|---|
| 29 | S MON=$E(Y,1,3) | 
|---|
| 30 | S LD=$S(MON="JAN":31,MON="FEB":29,MON="MAR":31,MON="APR":30,MON="MAY":31,MON="JUN":30,MON="JUL":31,MON="AUG":31,MON="SEP":30,MON="OCT":31,MON="NOV":30,MON="DEC":31) | 
|---|
| 31 | Q | 
|---|
| 32 | ARRAY(DAY)   ;BUILD ARRAY FOR TO FIND NEXT MONTH | 
|---|
| 33 | S MONT("JAN")="FEB" | 
|---|
| 34 | S MONT("FEB")="MAR" | 
|---|
| 35 | S MONT("MAR")="APR" | 
|---|
| 36 | S MONT("APR")="MAY" | 
|---|
| 37 | S MONT("MAY")="JUN" | 
|---|
| 38 | S MONT("JUN")="JUL" | 
|---|
| 39 | S MONT("JUL")="AUG" | 
|---|
| 40 | S MONT("AUG")="SEP" | 
|---|
| 41 | S MONT("SEP")="OCT" | 
|---|
| 42 | S MONT("OCT")="NO" | 
|---|
| 43 | S MONT("NOV")="DEC" | 
|---|
| 44 | S MONT("DEC")="JAN" | 
|---|
| 45 | D NOW^%DTC | 
|---|
| 46 | S Y=X | 
|---|
| 47 | S STARD=%I(2) | 
|---|
| 48 | D DD^%DT | 
|---|
| 49 | S MON=$E(Y,1,3) | 
|---|
| 50 | S LD=$S(MON="JAN":31,MON="FEB":29,MON="MAR":31,MON="APR":30,MON="MAY":31,MON="JUN":30,MON="JUL":31,MON="AUG":31,MON="SEP":30,MON="OCT":31,MON="NOV":30,MON="DEC":31) | 
|---|
| 51 | S LDD=LD+1 | 
|---|
| 52 | S SP=69,CNT=0 | 
|---|
| 53 | S SS=STARD+DAY | 
|---|
| 54 | I SS>LDD S SS=LDD | 
|---|
| 55 | I SS<LDD S LDD=SS | 
|---|
| 56 | F J=STARD:0 DO  Q:J=LDD | 
|---|
| 57 | .S SP=SP+6,CNT=CNT+1 | 
|---|
| 58 | .S J=J+1 | 
|---|
| 59 | .I J=SS Q | 
|---|
| 60 | I CNT'=DAY W ?SP+6,$P(MONT(MON),"^",1) | 
|---|
| 61 | Q | 
|---|
| 62 | DEFML() ; fetch and return default med log print... | 
|---|
| 63 | ; returns default number of med log entries to print based on entry in | 
|---|
| 64 | ; MED-LOG NUMBER field in BCMA BACKUP PARAMETERS file (53.71) | 
|---|
| 65 | N X | 
|---|
| 66 | S X=$S(+$P($G(^ALPB(53.71,1,2)),U,4)>0:+$P(^ALPB(53.71,1,2),U,4),1:1) | 
|---|
| 67 | Q X | 
|---|
| 68 | DEFOR() ; fetch and return purge order flag... | 
|---|
| 69 | ; returns the number of day to hold a patient order after | 
|---|
| 70 | ; the Stop Date. Default is 7 | 
|---|
| 71 | ; Based on entry in PURGE ORDER DAYS field in BCMA BACKUP | 
|---|
| 72 | ; PARAMETERS file (53.71) | 
|---|
| 73 | N X | 
|---|
| 74 | S X=$S(+$P($G(^ALPB(53.71,1,2)),U,2)>0:+$P(^ALPB(53.71,1,2),U,2),1:7) | 
|---|
| 75 | Q X | 
|---|
| 76 | DEFPR() ; fetch and return purge patient flag... | 
|---|
| 77 | ; returns the number of days to hold the patient record | 
|---|
| 78 | ; with no orders. Default is 30 | 
|---|
| 79 | ; Based on entry in PURGE PATIENT field in BCMA BACKUP | 
|---|
| 80 | ; PARAMETERS file (53.71) | 
|---|
| 81 | N X | 
|---|
| 82 | S X=$S(+$P($G(^ALPB(53.71,1,2)),U,3)>0:+$P(^ALPB(53.71,1,2),U,3),1:30) | 
|---|
| 83 | Q X | 
|---|
| 84 | LSTACT ; Build a cross reference by patient by drug to keep up | 
|---|
| 85 | ; with the last action of the drug. The x-ref is built but stays | 
|---|
| 86 | ; even if order is purged. The x-ref gets removed when the patient | 
|---|
| 87 | ; is purged. | 
|---|
| 88 | ; ^ALPB(53.1,DFN,"LSTACT",DRUG,ACTION DATE)=PERSON^ACTION | 
|---|
| 89 | N ALP,DRUG,DATE | 
|---|
| 90 | ;Q:+$G(DA(2))'>0!(+$G(DA(1))'>0)!(+$G(DA)'>0) | 
|---|
| 91 | ; get drug info - can be multiple | 
|---|
| 92 | S ALP=0 F ALP=$O(^ALPB(53.7,DA(2),2,DA(1),7,ALP)) Q:+ALP'>0  D | 
|---|
| 93 | . S DRUG=$P($G(^ALPB(53.7,DA(2),2,DA(1),7,ALP,0)),U,1) | 
|---|
| 94 | . Q:+DRUG'>0 | 
|---|
| 95 | . S DATE=$P($G(^ALPB(53.7,DA(2),2,DA(1),10,DA,0)),U,1) | 
|---|
| 96 | . S ^ALPB(53.7,DA(2),"LSTACT",DRUG,(9999999-DATE))=$G(^ALPB(53.7,DA(2),2,DA(1),10,DA,0)) | 
|---|
| 97 | Q | 
|---|
| 98 | LACT(ALPDFN,ALPDRUG) ;  Retrieve the last action infor for a patient | 
|---|
| 99 | ; for a certian drug | 
|---|
| 100 | ; ALPDFN = Patient DFN | 
|---|
| 101 | ; ALPDRUG = Drug Ordable Item IEN | 
|---|
| 102 | N DATA,ALP | 
|---|
| 103 | Q:+$G(ALPDFN)'>0 "" | 
|---|
| 104 | Q:+$G(ALPDRUG)'>0 "" | 
|---|
| 105 | I '$D(^ALPB(53.7,ALPDFN,"LSTACT",ALPDRUG)) Q "" | 
|---|
| 106 | S ALP=$O(^ALPB(53.7,ALPDFN,"LSTACT",ALPDRUG,0)) | 
|---|
| 107 | S DATA=$G(^ALPB(53.7,ALPDFN,"LSTACT",ALPDRUG,ALP)) | 
|---|
| 108 | Q DATA | 
|---|