| [613] | 1 | PSOFSIG ;BIR/RTR-Parse out and create Pharmacy Sig ;7/21/96
 | 
|---|
 | 2 |  ;;7.0;OUTPATIENT PHARMACY;**46**;DEC 1997
 | 
|---|
 | 3 |  ;External reference to File #50.7 supported by DBIA 2223
 | 
|---|
 | 4 |  ;External reference to File #51 supported by DBIA 2224
 | 
|---|
 | 5 |  ;External reference to File #51.1 supported by DBIA 2225
 | 
|---|
 | 6 |  ;External reference to File #51.2 supported by DBIA 2226
 | 
|---|
 | 7 |  ;External reference to File #50.606 supported by DBIA 2174
 | 
|---|
 | 8 | EN(PSOFX,PSOPTSIG) ;
 | 
|---|
 | 9 |  N LIM,VAR,VAR1
 | 
|---|
 | 10 |  N SDF,SZZ,ZZS,ZZSB,SSZZ,SCHHOLD,GGGZ,SGLFLAG,SGLOOP,ZSCHED,SPFG,PSNOUN,MEDEXP,PSDUR,NOUN,SCHED,INTERVAL,SIG0,SIG2,SIG3,SDL,WW,TODOSE,PDAYS,WWFL,PSOCJ
 | 
|---|
 | 11 |  N VERBX,SSS,TT,DCOUNT,PREP,VERB,FFF,GGG,SIGDS,SIGRT,PSOROUTE,PSOSG1,PSOSG2,RTC,RTCA,RTCF,RTCNT,PSODCT,PSOBDCT
 | 
|---|
 | 12 |  K SIG
 | 
|---|
 | 13 |  S TODOSE=0 F WW=0:0 S WW=$O(PSOFX("DOSE",WW)) Q:'WW  S TODOSE=WW
 | 
|---|
 | 14 |  Q:'TODOSE
 | 
|---|
 | 15 |  S SIGDS=+$P($G(^PS(50.7,+$G(PSODRUG("OI")),0)),"^",2),PREP=$P($G(^PS(50.606,SIGDS,"MISC")),"^",3)
 | 
|---|
 | 16 |  S RTCNT=0 K RTC,RTCA,RTCF F SSS=1:1:TODOSE D
 | 
|---|
 | 17 |  .S SIG0(SSS)=$S($G(PSOFX("DOSE ORDERED",SSS))'="":$G(PSOFX("DOSE ORDERED",SSS)),1:$G(PSOFX("DOSE",SSS)))
 | 
|---|
 | 18 |  .S VERBX(SSS)=$S($G(PSOFX("VERB",SSS))'="":$G(PSOFX("VERB",SSS)),1:"")
 | 
|---|
 | 19 |  .S PSNOUN(SSS)=$G(PSOFX("NOUN",SSS))
 | 
|---|
 | 20 |  .S RTC=+$G(PSOFX("ROUTE",SSS)) I RTC S:'RTCNT RTCA=RTC S RTCNT=RTCNT+1
 | 
|---|
 | 21 |  .I RTCNT>1,$G(RTC),$G(RTC)'=$G(RTCA) S RTCF=1
 | 
|---|
 | 22 |  .S PSOROUTE(SSS)=$S($P($G(^PS(51.2,+$G(PSOFX("ROUTE",SSS)),0)),"^",2)'="":$P(^(0),"^",2),$P($G(^(0)),"^",3)'="":$P(^(0),"^",3),1:$P($G(^(0)),"^")) S MEDEXP(SSS)=$S($P($G(^PS(51.2,+$G(PSOFX("ROUTE",SSS)),0)),"^",2)="":0,1:1)
 | 
|---|
 | 23 |  .S PDAYS(SSS)=$G(PSOFX("DURATION",SSS))
 | 
|---|
 | 24 |  .I $G(PSOFX("DURATION",SSS))'="",($E(PSOFX("DURATION",SSS),$L(PSOFX("DURATION",SSS)))'?1A) S PDAYS(SSS)=PDAYS(SSS)_"D"
 | 
|---|
 | 25 |  .S PSDUR(SSS)=$S($G(PDAYS(SSS))="":"NULL",1:"FOR "_$E($G(PDAYS(SSS)),1,($L($G(PDAYS(SSS)))-1))) D  I PSDUR(SSS)'="NULL" S PSDUR(SSS)=PSDUR(SSS)_" "_INTERVAL
 | 
|---|
 | 26 |  ..I PSDUR(SSS)'="NULL" S INTERVAL=$E(PDAYS(SSS),$L(PDAYS(SSS))),INTERVAL=$S(INTERVAL="D":"DAYS",INTERVAL="W":"WEEKS",INTERVAL="H":"HOURS",INTERVAL="L":"MONTHS",INTERVAL="M":"MINUTES",INTERVAL="S":"SECONDS",1:"") D
 | 
|---|
 | 27 |  ...I $G(INTERVAL)'="",$G(PSOFX("DURATION",SSS)),$G(PSOFX("DURATION",SSS))'>1 S INTERVAL=$E(INTERVAL,1,($L(INTERVAL)-1))
 | 
|---|
 | 28 |  F GGG=1:1:TODOSE S ZSCHED(GGG)=$G(PSOFX("SCHEDULE",GGG)) D
 | 
|---|
 | 29 |  .I $G(ZSCHED(GGG))="" S SCHED(GGG)="" Q
 | 
|---|
 | 30 |  .S SGLFLAG=0 F WW=0:0 S WW=$O(^PS(51.1,"B",ZSCHED(GGG),WW)) Q:'WW!($G(SGLFLAG))  I $P($G(^PS(51.1,WW,0)),"^",8)'="" S SCHED(GGG)=$P($G(^(0)),"^",8),SGLFLAG=1
 | 
|---|
 | 31 |  .Q:$G(SGLFLAG)
 | 
|---|
 | 32 |  .I $G(^PS(51,"A",ZSCHED(GGG)))'="" S SCHED(GGG)=$P(^(ZSCHED(GGG)),"^") Q
 | 
|---|
 | 33 |  .S ZZSB=0 F ZZS=1:1:$L(ZSCHED(GGG)) S SZZ=$E(ZSCHED(GGG),ZZS) I SZZ=" " S ZZSB=ZZSB+1
 | 
|---|
 | 34 |  .S ZZSB=ZZSB+1
 | 
|---|
 | 35 |  .K SCHHOLD F GGGZ=1:1:ZZSB S (SDL,SCHHOLD(GGGZ))=$P(ZSCHED(GGG)," ",GGGZ) D
 | 
|---|
 | 36 |  ..Q:$G(SDL)=""
 | 
|---|
 | 37 |  ..S SGLFLAG=0 F WW=0:0 S WW=$O(^PS(51.1,"B",SDL,WW)) Q:'WW!($G(SGLFLAG))  I $P($G(^PS(51.1,WW,0)),"^",8)'="" S SCHHOLD(GGGZ)=$P($G(^(0)),"^",8),SGLFLAG=1
 | 
|---|
 | 38 |  ..Q:$G(SGLFLAG)
 | 
|---|
 | 39 |  ..I $G(^PS(51,"A",SDL))'="" S SCHHOLD(GGGZ)=$P(^(SDL),"^")
 | 
|---|
 | 40 |  .S SCHED(GGG)="",SGLFLAG=0 F WW=1:1:ZZSB S SCHED(GGG)=SCHED(GGG)_$S($G(SGLFLAG):" ",1:"")_$G(SCHHOLD(WW)),SGLFLAG=1
 | 
|---|
 | 41 |  S (RTC,RTCA,PSOBDCT)=0 F FFF=0:0 S FFF=$O(SIG0(FFF)) Q:'FFF  D
 | 
|---|
 | 42 |  .K PSOSG1,PSOSG2 S VERB=$G(VERBX(FFF)) D VERB D:$G(PSNOUN(FFF))'=""&('$G(PSOSG1)) SSS
 | 
|---|
 | 43 |  .D FRAC
 | 
|---|
 | 44 |  .S SIG2(FFF)=$S($G(VERB)'=""&('$G(PSOSG1)):$G(VERB)_" ",1:"")_$S($G(PSOFX("DOSE ORDERED",FFF))'="":$S($G(PSOFRAC)'="":$G(PSOFRAC),1:$G(PSOFX("DOSE ORDERED",FFF)))_" ",1:$G(PSOFX("DOSE",FFF))_" ")
 | 
|---|
 | 45 |  .S PSOBDCT=PSOBDCT+1
 | 
|---|
 | 46 |  .K PSOFRAC,PSOFRACX
 | 
|---|
 | 47 |  .I RTC>0,$G(PSOROUTE(FFF))'="",'$G(RTCF) S RTCA=1
 | 
|---|
 | 48 |  .I $G(PSOROUTE(FFF))'="" S RTC=RTC+1
 | 
|---|
 | 49 |  .S SIG2(FFF)=SIG2(FFF)_$S($G(PSNOUN(FFF))'=""&('$G(PSOSG2)):$G(PSNOUN(FFF))_" ",1:"")_$S(PREP'=""&($G(MEDEXP(FFF)))&('RTCA):PREP_" ",1:"")
 | 
|---|
 | 50 |  .S SIG2(FFF)=SIG2(FFF)_$S(PSOROUTE(FFF)'=""&('RTCA):PSOROUTE(FFF)_" ",1:"")
 | 
|---|
 | 51 |  .;S SIG2(FFF)=SIG2(FFF)_$S(SCHED(FFF)'="":SCHED(FFF)_" ",1:"")_$S(PSDUR(FFF)'="NULL":PSDUR(FFF)_" ",1:"")_$S($G(PSOFX("CONJUNCTION",FFF))="A":"AND",$G(PSOFX("CONJUNCTION",FFF))="T":"THEN",$G(PSOFX("CONJUNCTION",FFF))="S":"THEN",1:"")
 | 
|---|
 | 52 |  .S SIG2(FFF)=SIG2(FFF)_$S(SCHED(FFF)'="":SCHED(FFF)_$S($G(PSDUR(FFF))="NULL"&($G(PSOFX("CONJUNCTION",FFF))="")&('$O(SIG0(FFF))):"",1:" "),1:"")
 | 
|---|
 | 53 |  .S PSOCJ=$E($G(PSOFX("CONJUNCTION",FFF)))
 | 
|---|
 | 54 |  .S SIG2(FFF)=SIG2(FFF)_$S(PSDUR(FFF)'="NULL":PSDUR(FFF)_$S($G(PSOFX("CONJUNCTION",FFF))=""&('$O(SIG0(FFF))):"",1:", "),1:"")_$S($G(PSOCJ)="A":"AND",$G(PSOCJ)="T":"THEN",$G(PSOCJ)="S":"THEN",$G(PSOCJ)="X":"EXCEPT",1:"")
 | 
|---|
 | 55 |  .K PSOSG1,PSOSG2
 | 
|---|
 | 56 |  .K PSOUCS S SIG2(FFF)=$$UPPER(SIG2(FFF)) K PSOUCS
 | 
|---|
 | 57 |  ;I $G(PSOFX("SIG"))'="" S TODOSE=TODOSE+1,SIG2(TODOSE)=$G(PSOFX("SIG")) K PSOUCS S SIG2(TODOSE)=$$UPPER(SIG2(TODOSE)) K PSOUCS
 | 
|---|
 | 58 |  S PSODCT="" F  S PSODCT=$O(PSOFX("SIG",PSODCT)) Q:PSODCT=""  S PSOBDCT=PSOBDCT+1 S SIG2(PSOBDCT)=$G(PSOFX("SIG",PSODCT)) K PSOUCS S SIG2(PSOBDCT)=$$UPPER(SIG2(PSOBDCT)) K PSOUCS
 | 
|---|
 | 59 | STUFF ;
 | 
|---|
 | 60 |  S DCOUNT=0
 | 
|---|
 | 61 |  I '$D(SIG2(1)) G QUIT
 | 
|---|
 | 62 |  I '$O(SIG2(1)),$L(SIG2(1))<71 S SIG(1)=SIG2(1) G PTSIG
 | 
|---|
 | 63 |  S (VAR,VAR1)="",II=1
 | 
|---|
 | 64 |  F FF=0:0 S FF=$O(SIG2(FF)) Q:'FF  S CT=0 F NN=1:1:$L(SIG2(FF)) I $E(SIG2(FF),NN)=" "!($L(SIG2(FF))=NN) S CT=CT+1 D  I $L(VAR)>70 S SIG(II)=LIM_" ",II=II+1,VAR=VAR1
 | 
|---|
 | 65 |  .S VAR1=$P(SIG2(FF)," ",(CT))
 | 
|---|
 | 66 |  .S LIM=VAR
 | 
|---|
 | 67 |  .S VAR=$S(VAR="":VAR1,1:VAR_" "_VAR1)
 | 
|---|
 | 68 |  I $G(VAR)'="" S SIG(II)=VAR
 | 
|---|
 | 69 |  ;F II=0:0 S II=$O(SIG3(II)) Q:'II  S DCOUNT=DCOUNT+1 S ^PS(52.41,PENDING,"SIG",DCOUNT,0)=SIG3(II)
 | 
|---|
 | 70 |  ;I DCOUNT S ^PS(52.41,PENDING,"SIG",0)="^52.4124A^"_DCOUNT_"^"_DCOUNT
 | 
|---|
 | 71 | PTSIG ;
 | 
|---|
 | 72 |  I '$G(PSOPTSIG) G QUIT
 | 
|---|
 | 73 |  I $O(SIG(0)) W ! S WWFL=0 F WW=0:0 S WW=$O(SIG(WW)) Q:'WW  D
 | 
|---|
 | 74 |  .W ! I 'WWFL W "("
 | 
|---|
 | 75 |  .W $G(SIG(WW)) S WWFL=1
 | 
|---|
 | 76 |  I $O(SIG(0)) W ")",!
 | 
|---|
 | 77 | QUIT K SSS,TT,DCOUNT,PREP,VERB,FFF,GGG,SIGDS,SIGRT,PSOROUTE,PSOSG1,PSOSG2 Q
 | 
|---|
 | 78 | SIG1 ;
 | 
|---|
 | 79 |  F FFF=0:0 S FFF=$O(SIG0(FFF)) Q:'FFF  S SIG2(FFF)=SIG0(FFF)
 | 
|---|
 | 80 |  Q
 | 
|---|
 | 81 | DAYS I +$E($P(SIG1(TT),"^",2))!($E($P(SIG1(TT),"^",2))=0) S $P(SIG1(TT),"^",2)="D"_$P(SIG1(TT),"^",2)
 | 
|---|
 | 82 |  Q
 | 
|---|
 | 83 | NON ;
 | 
|---|
 | 84 |  I $P($G(SIG0(SSS)),"&",2)'="" S PSNOUN(SSS)=$P($G(SIG0(SSS)),"&",2) Q
 | 
|---|
 | 85 |  Q
 | 
|---|
 | 86 |  F NOUN=0:0 S NOUN=$O(^PS(50.606,SIGDS,"NOUN",NOUN)) Q:'NOUN!($G(PSNOUN(SSS))'="")  I $P($G(^PS(50.606,SIGDS,"NOUN",NOUN,0)),"^")'="" S PSNOUN(SSS)=$P(^(0),"^")
 | 
|---|
 | 87 |  Q
 | 
|---|
 | 88 | VERB ;Check if verb and noun need to be added to SIG
 | 
|---|
 | 89 |  K PSOLCS,PSOUCS,PSOISL,PSOVL
 | 
|---|
 | 90 |  I $G(VERB)'="" S PSOVL=$L(VERB),PSOISL=$E($G(SIG0(FFF)),1,$G(PSOVL)) I $G(PSOISL)'="" D
 | 
|---|
 | 91 |  .S PSOUCS=VERB
 | 
|---|
 | 92 |  .S PSOUCS=$$UPPER(PSOUCS) I PSOUCS=PSOISL S PSOSG1=1 Q
 | 
|---|
 | 93 |  .S PSOUCS=$$LOWER(PSOUCS) I PSOUCS=PSOISL S PSOSG1=1 Q
 | 
|---|
 | 94 |  .S PSOUCS=$$UPPER($E(PSOUCS,1))_$$LOWER($E(PSOUCS,2,99)) I PSOUCS=PSOISL S PSOSG1=1 Q
 | 
|---|
 | 95 |  I $G(PSNOUN(FFF))="" G VERBEX
 | 
|---|
 | 96 |  S PSOISL=$G(SIG0(FFF)) I $G(PSOISL)="" G VERBEX
 | 
|---|
 | 97 |  S PSOVL=$F(PSNOUN(FFF),"(")
 | 
|---|
 | 98 |  I $G(PSOVL)>2 S PSOUCS=$E(PSNOUN(FFF),1,(PSOVL-2))
 | 
|---|
 | 99 |  I $G(PSOVL)'>2 S PSOUCS=PSNOUN(FFF)
 | 
|---|
 | 100 |  I $G(PSOISL)'="" D
 | 
|---|
 | 101 |  .S PSOUCS=$$UPPER(PSOUCS) I PSOISL[PSOUCS S PSOSG2=1 Q
 | 
|---|
 | 102 |  .S PSOUCS=$$LOWER(PSOUCS) I PSOISL[PSOUCS S PSOSG2=1 Q
 | 
|---|
 | 103 |  .S PSOUCS=$$UPPER($E(PSOUCS,1))_$$LOWER($E(PSOUCS,2,99)) I PSOISL[PSOUCS S PSOSG2=1
 | 
|---|
 | 104 | VERBEX K PSOLCS,PSOUCS,PSOISL,PSOVL Q
 | 
|---|
 | 105 |  ;
 | 
|---|
 | 106 | UPPER(PSOUCS) ;
 | 
|---|
 | 107 |  Q $TR(PSOUCS,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
 | 
|---|
 | 108 |  ;
 | 
|---|
 | 109 | LOWER(PSOLCS) ;
 | 
|---|
 | 110 |  Q $TR(PSOLCS,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")
 | 
|---|
 | 111 |  Q
 | 
|---|
 | 112 |  ;
 | 
|---|
 | 113 | SSS ;
 | 
|---|
 | 114 |  K PSOFNL,PSOFNLF,PSOFNLX
 | 
|---|
 | 115 |  Q:$G(PSNOUN(FFF))=""
 | 
|---|
 | 116 |  Q:$L(PSNOUN(FFF))'>3
 | 
|---|
 | 117 |  Q:'$G(PSOFX("DOSE ORDERED",FFF))
 | 
|---|
 | 118 |  ;Q:$G(PSOFX("DOSE ORDERED",FFF))>1
 | 
|---|
 | 119 |  S PSOFNL=$E(PSNOUN(FFF),($L(PSNOUN(FFF))-2),$L(PSNOUN(FFF)))
 | 
|---|
 | 120 |  I $G(PSOFNL)="(S)"!($G(PSOFNL)="(s)") D
 | 
|---|
 | 121 |  .I $G(PSOFX("DOSE ORDERED",FFF))'>1 S PSNOUN(FFF)=$E(PSNOUN(FFF),1,($L(PSNOUN(FFF))-3))
 | 
|---|
 | 122 |  .I $G(PSOFX("DOSE ORDERED",FFF))>1 S PSNOUN(FFF)=$E(PSNOUN(FFF),1,($L(PSNOUN(FFF))-3))_$E(PSOFNL,2)
 | 
|---|
 | 123 |  Q
 | 
|---|
 | 124 | FRAC ;
 | 
|---|
 | 125 |  K PSOFRAC,PSOFRACX,PSOFRAC1,PSOFRAC2
 | 
|---|
 | 126 |  I $G(PSOFX("DOSE ORDERED",FFF))="" Q
 | 
|---|
 | 127 |  I $G(PSOFX("DOSE ORDERED",FFF))'["." S (PSOFRAC1,PSOFRAC)=$G(PSOFX("DOSE ORDERED",FFF)) D NUM D  G FRACQ
 | 
|---|
 | 128 |  .I $G(PSOFRAC1)=$G(PSOFRAC) K PSOFRAC,PSOFRAC1 Q
 | 
|---|
 | 129 |  .S PSOFRAC=$G(PSOFRAC1)
 | 
|---|
 | 130 |  S PSOFRAC1=$P(PSOFX("DOSE ORDERED",FFF),"."),PSOFRAC2=$P(PSOFX("DOSE ORDERED",FFF),".",2)
 | 
|---|
 | 131 |  S PSOFRACX="."_$G(PSOFRAC2)
 | 
|---|
 | 132 |  S PSOFRAC=$S(PSOFRACX=".5":"ONE-HALF",PSOFRACX=".25":"ONE-FOURTH",PSOFRACX=".33":"ONE-THIRD",PSOFRACX=".34":"ONE-THIRD",PSOFRACX=".50":"ONE-HALF",PSOFRACX=".66":"TWO-THIRDS",PSOFRACX=".67":"TWO-THIRDS",PSOFRACX=".75":"THREE-FOURTHS",1:"")
 | 
|---|
 | 133 |  I $G(PSOFRAC)="" K PSOFRAC G FRACQ
 | 
|---|
 | 134 |  I $G(PSOFRAC1)'="",+$G(PSOFRAC1) D NUM S PSOFRAC=$G(PSOFRAC1)_" AND "_$G(PSOFRAC)
 | 
|---|
 | 135 | FRACQ K PSOFRAC1,PSOFRAC2
 | 
|---|
 | 136 |  Q
 | 
|---|
 | 137 | NUM ;
 | 
|---|
 | 138 |  Q:$G(PSOFRAC1)=""
 | 
|---|
 | 139 |  S PSOFRAC1=$S(PSOFRAC1="1":"ONE",PSOFRAC1="2":"TWO",PSOFRAC1="3":"THREE",PSOFRAC1="4":"FOUR",PSOFRAC1="5":"FIVE",PSOFRAC1="6":"SIX",PSOFRAC1="7":"SEVEN",PSOFRAC1="8":"EIGHT",PSOFRAC1="9":"NINE",PSOFRAC1="10":"TEN",1:PSOFRAC1)
 | 
|---|
 | 140 |  Q
 | 
|---|
 | 141 | SET ;Set duration to proper format for storage
 | 
|---|
 | 142 |  Q
 | 
|---|
 | 143 | KILL ;kills duration data field
 | 
|---|
 | 144 |  Q
 | 
|---|
 | 145 | DUR ;Input Transform for duration
 | 
|---|
 | 146 |  K:X'?.N&(X'?.N1".".N)&(X'?.N1"D")&(X'?.N1".".N1"D")&(X'?.N1"M")&(X'?.N1".".N1"M")&(X'?.N1"H")&(X'?.N1".".N1"H")&(X'?.N1"W")&(X'?.N1".".N1"W")&(X'?.N1"L")&(X'?.N1".".N1"L") X
 | 
|---|
 | 147 |  K:'$G(X) X
 | 
|---|
 | 148 |  Q
 | 
|---|