Ignore:
Timestamp:
Dec 4, 2009, 12:11:15 AM (14 years ago)
Author:
George Lilly
Message:

revised back to 6/30/08 version

File:
1 edited

Legend:

Unmodified
Added
Removed
  • WorldVistAEHR/trunk/r/ORDER_ENTRY_RESULTS_REPORTING-OR-OCX--ORRC--ORRJ/ORMPS1.m

    r613 r623  
    1 ORMPS1  ;SLC/MKB - Process Pharmacy ORM msgs cont ; 3/27/08 7:38am
    2         ;;3.0;ORDER ENTRY/RESULTS REPORTING;**86,92,94,116,134,152,158,149,190,195,215,265,275,243**;Dec 17, 1997;Build 242
    3         ;;Per VHA Directive 2004-038, this routine should not be modified.
    4 UDOSE   ; -- new Unit Dose order
    5         N ADMIN,QT,DRUG,INSTR,DOSE,RTE,SCH,OI,URG,WP,DUR,STR,DRGNM,X,PSOI,PSDD,S0,ID,LDOSE,XC,NTE,S0,RXR
    6         S ORDIALOG=+$O(^ORD(101.41,"AB","PSJ OR PAT OE",0))
    7         I $G(ORAPPT)>0 S ORDG=+$O(^ORD(100.98,"B","CLINIC ORDERS",0))
    8         E  S ORDG=+$O(^ORD(100.98,"B","UNIT DOSE MEDICATIONS",0))
    9         S ORPKG=+$$PKG("PSJ")
    10         D GETDLG1^ORCD(ORDIALOG) S QT=$G(ORQT(1))
    11         S DRUG=$$PTR("DISPENSE DRUG"),INSTR=$$PTR("INSTRUCTIONS")
    12         S DOSE=$$PTR("DOSE"),RTE=$$PTR("ROUTE")
    13         S SCH=$$PTR("SCHEDULE"),ADMIN=$$PTR("ADMIN TIMES")
    14         S OI=$$PTR("ORDERABLE ITEM"),URG=$$PTR("URGENCY")
    15         S WP=$$PTR("WORD PROCESSING 1"),DUR=$$PTR("DURATION")
    16         S STR=$$PTR("STRENGTH"),DRGNM=$$PTR("DRUG NAME")
    17 UD1     S:RXO X=$P(RXO,"|",2),ORDIALOG(OI,1)=$$ORDITEM^ORM(X),PSOI=$P(X,U,4,5)
    18         I '$G(ORDIALOG(OI,1)) S ORERR="Missing or invalid orderable item" Q
    19         S PSDD=$P($$FIND^ORM(+RXE,3),U,4,5),ORDIALOG(DRUG,1)=+PSDD
    20         S S0=$$FIND^ORM(+RXE,26)_"&"_$P($$FIND^ORM(+RXE,27),U,5)
    21         S ID=$P(QT,U),LDOSE=$P(QT,U,8) I 'ID,S0 D
    22         . N UNT,PTRN S UNT=$P(S0,"&",2),PTRN="1.N1"""_UNT_""""
    23         . I LDOSE?@PTRN S $P(ID,"&",1,2)=+LDOSE_"&"_UNT Q  ;pre-POE orders
    24         . S:$P(PSOI,U,2)'[S0 ORDIALOG(STR,1)=$TR(S0,"&")
    25         I 'ID,'S0 S ORDIALOG(DRGNM,1)=$$UNESC^ORMPS2($P(PSDD,U,2))
    26         S:$L(ID) ORDIALOG(DOSE,1)=$$UNESC^ORMPS2($P(ID,"&",1,4)_"&"_LDOSE_"&"_+PSDD_"&"_S0)
    27         I LDOSE="" D  I LDOSE="" S ORERR="Unable to determine instructions" Q
    28         . I $G(RXC)'>0 D  Q  ;look for units/dose
    29         .. S LDOSE=$P(ID,"&",3),X=$P(ID,"&",4) I 'LDOSE S LDOSE="" Q
    30         .. S:'$L(X) X=$$UNESC^ORMPS2($P($$FIND^ORM(+RXE,7),U,5)) S:$L(X) LDOSE=LDOSE_" "_X
    31         .. S ORDIALOG(DRGNM,1)=$$UNESC^ORMPS2($P(PSDD,U,2)) ;force use of DD
    32         . F  D  Q:LDOSE'=""  S RXC=$O(@ORMSG@(RXC)) Q:'RXC  Q:$E(@ORMSG@(RXC),1,3)'="RXC"
    33         .. S XC=@ORMSG@(RXC) Q:+$P($P(XC,"|",3),U,4)'=+PSOI
    34         .. S LDOSE=$P(XC,"|",4)_$P($P(XC,"|",5),U,5) ;strength_units
    35         S ORDIALOG(INSTR,1)=$$UNESC^ORMPS2(LDOSE)
    36 UD2     S NTE=$$NTE^ORMPS3(21) I NTE D
    37         . N CNT,I S CNT=1,^TMP("ORWORD",$J,WP,1,CNT,0)=$$UNESC^ORMPS2($P(@ORMSG@(NTE),"|",4))
    38         . I $O(@ORMSG@(NTE,0)) S I=0 F  S I=$O(@ORMSG@(NTE,I)) Q:I'>0  S CNT=CNT+1,^TMP("ORWORD",$J,WP,1,CNT,0)=$$UNESC^ORMPS2(@ORMSG@(NTE,I))
    39         . S ^TMP("ORWORD",$J,WP,1,0)="^^"_CNT_U_CNT_U_DT_U
    40         . S ORDIALOG(WP,1)="^TMP(""ORWORD"",$J,"_WP_",1)"
    41         S RXR=$$RXR^ORMPS I 'RXR S ORERR="Missing or invalid RXR segment" Q
    42         S ORDIALOG(RTE,1)=$P($P(RXR,"|",2),U,4),ORDIALOG(URG,1)=ORURG
    43         S X=$P(QT,U,2)
    44         S ORDIALOG(SCH,1)=$$UNESC^ORMPS2($P(X,"&"))
    45         S:$L($P(X,"&",2)) ORDIALOG(ADMIN,1)=$P(X,"&",2)
    46         S X=$P(QT,U,3) I $L(X) D  ;set only if previous order had duration
    47         . N IFN S IFN=$S($G(ORIFN):+ORIFN,$P(ZRX,"|",2):+$P(ZRX,"|",2),1:0)
    48         . S:$O(^OR(100,+IFN,4.5,"ID","DAYS",0)) ORDIALOG(DUR,1)=$$DURATION^ORMPS3(X)
    49         D DOSETEXT^ORCDPS2 ;reset Instructions text, SIG
    50         D UNESCARR^ORMPS2("ORDIALOG")
    51         Q
    52 OUT     ; -- new Outpt order
    53         N OI,SIG,INSTR,DOSE,RTE,SCH,DUR,SC,STR,DRUG,PI,CONJ,PSOI,PSDD,S0,X,I,RXR,J,NTE,ZSC,CNT,PC
    54         S ORDIALOG=+$O(^ORD(101.41,"AB","PSO OERR",0))
    55         S ORDG=+$O(^ORD(100.98,"B","OUTPATIENT MEDICATIONS",0))
    56         S ORPKG=+$$PKG("PSO") D GETDLG1^ORCD(ORDIALOG)
    57         S OI=$$PTR("ORDERABLE ITEM"),SIG=$$PTR("SIG")
    58         S INSTR=$$PTR("INSTRUCTIONS"),DOSE=$$PTR("DOSE")
    59         S SCH=$$PTR("SCHEDULE"),DUR=$$PTR("DURATION")
    60         S RTE=$$PTR("ROUTE"),SC=$$PTR("SERVICE CONNECTED")
    61         S STR=$$PTR("STRENGTH"),DRUG=$$PTR("DISPENSE DRUG")
    62         S PI=$$PTR("PATIENT INSTRUCTIONS"),CONJ=$$PTR("AND/THEN")
    63         S PC=$$PTR("WORD PROCESSING 1")
    64         S:RXO X=$P(RXO,"|",2),ORDIALOG(OI,1)=$$ORDITEM^ORM(X),PSOI=$P(X,U,4,5)
    65         I '$G(ORDIALOG(OI,1)) S ORERR="Missing or invalid orderable item" Q
    66         S PSDD=$P($$FIND^ORM(+RXE,3),U,4,5),ORDIALOG(DRUG,1)=+PSDD
    67         S S0=$$FIND^ORM(+RXE,26)_"&"_$P($$FIND^ORM(+RXE,27),U,5)
    68         I S0,$P(PSOI,U,2)'[S0 S ORDIALOG(STR,1)=$TR(S0,"&")
    69         I 'S0,'$G(ORQT(1)) S ORDIALOG($$PTR("DRUG NAME"),1)=$$UNESC^ORMPS2($P(PSDD,U,2))
    70 OUT1    S ORDIALOG($$PTR("QUANTITY"),1)=$$FIND^ORM(+RXE,11)
    71         S ORDIALOG($$PTR("REFILLS"),1)=$$FIND^ORM(+RXE,13)
    72         S X=$$FIND^ORM(+RXE,23) S:$E(X)="D" X=+$E(X,2,99)
    73         S:X ORDIALOG($$PTR("DAYS SUPPLY"),1)=X
    74         I ZRX S X=$P(ZRX,"|",5) S:$L(X) ORDIALOG($$PTR("ROUTING"),1)=X
    75         S:ORURG ORDIALOG($$PTR("URGENCY"),1)=ORURG F I=1:1:ORQT D
    76         . S ORDIALOG(INSTR,I)=$$UNESC^ORMPS2($P(ORQT(I),U,8)),X=$P(ORQT(I),U)
    77         . S:$L(X) ORDIALOG(DOSE,I)=$$UNESC^ORMPS2($P(X,"&",1,4)_"&"_$P(ORQT(I),U,8)_"&"_+PSDD_"&"_S0)
    78         . S X=$P(ORQT(I),U,2) S:$L(X) ORDIALOG(SCH,I)=$$UNESC^ORMPS2(X)
    79         . S X=$P(ORQT(I),U,3) S:$L(X) ORDIALOG(DUR,I)=$$DURATION^ORMPS3(X)
    80         . S X=$P(ORQT(I),U,9) S:$L(X) ORDIALOG(CONJ,I)=$S(X="S":"T",1:X)
    81         S RXR=$$RXR^ORMPS I RXR S ORDIALOG(RTE,1)=$P($P(RXR,"|",2),U,4) D
    82         . S I=1,J=+RXR ;look for multiple RXR's
    83         . F  S J=$O(@ORMSG@(J)) Q:J'>0  S RXR=@ORMSG@(J) Q:$E(RXR,1,3)'="RXR"  S I=I+1,ORDIALOG(RTE,I)=$P($P(RXR,"|",2),U,4)
    84 OUT2    S NTE=$$NTE^ORMPS3(6) I NTE D  ;Prov Comm ;D:'NTE PCOMM^ORMPS2
    85         . S CNT=1,^TMP("ORWORD",$J,PC,1,CNT,0)=$$UNESC^ORMPS2($P(@ORMSG@(NTE),"|",4))
    86         . I $O(@ORMSG@(NTE,0)) S I=0 F  S I=$O(@ORMSG@(NTE,I)) Q:I'>0  S CNT=CNT+1,^TMP("ORWORD",$J,PC,1,CNT,0)=$$UNESC^ORMPS2(@ORMSG@(NTE,I))
    87         . S ^TMP("ORWORD",$J,PC,1,0)="^^"_CNT_U_CNT_U_DT_U
    88         . S ORDIALOG(PC,1)="^TMP(""ORWORD"",$J,"_PC_",1)",ORDIALOG(PC,"FORMAT")="@" ;keep, don't show
    89         . N XCNT,XCOMM,XCOMMENT,XORCOMM,XXCNT,XORIFN
    90         . S XORIFN=$G(ORIFN) S:XORIFN="" XORIFN=$P(RXR,"|",2) Q:XORIFN=""
    91         . S XCOMM=$O(^OR(100,+XORIFN,4.5,"ID","COMMENT",0)) Q:XCOMM=""
    92         . S XCNT=0 F  S XCNT=$O(^TMP("ORWORD",$J,PC,1,XCNT)) Q:XCNT=""  S XCOMMENT=^TMP("ORWORD",$J,PC,1,XCNT,0) D
    93         .. S XORCOMM=$G(^OR(100,+XORIFN,4.5,XCOMM,2,XCNT,0)),XXCNT=0
    94         .. I XORCOMM="" F  S XXCNT=$O(^OR(100,+XORIFN,4.5,XCOMM,2,XXCNT)) Q:XXCNT=""  S XORCOMM=$G(^(XXCNT,0)) Q:XORCOMM'=""
    95         .. I $G(XCOMMENT)=$G(XORCOMM) S ORDIALOG(PC,"FORMAT")="@"
    96         S NTE=$$NTE^ORMPS3(7) I NTE D  ;Pat Instr
    97         . S CNT=1,^TMP("ORWORD",$J,PI,1,CNT,0)=$$UNESC^ORMPS2($P(@ORMSG@(NTE),"|",4))
    98         . I $O(@ORMSG@(NTE,0)) S I=0 F  S I=$O(@ORMSG@(NTE,I)) Q:I'>0  S CNT=CNT+1,^TMP("ORWORD",$J,PI,1,CNT,0)=$$UNESC^ORMPS2(@ORMSG@(NTE,I))
    99         . S ^TMP("ORWORD",$J,PI,1,0)="^^"_CNT_U_CNT_U_DT_U
    100         . S ORDIALOG(PI,1)="^TMP(""ORWORD"",$J,"_PI_",1)"
    101         S NTE=$$NTE^ORMPS3(21) I NTE D  ;Sig
    102         . S CNT=1,^TMP("ORWORD",$J,SIG,1,CNT,0)=$$UNESC^ORMPS2($P(@ORMSG@(NTE),"|",4))
    103         . I $O(@ORMSG@(NTE,0)) S I=0 F  S I=$O(@ORMSG@(NTE,I)) Q:I'>0  S CNT=CNT+1,^TMP("ORWORD",$J,SIG,1,CNT,0)=$$UNESC^ORMPS2(@ORMSG@(NTE,I))
    104         . S ^TMP("ORWORD",$J,SIG,1,0)="^^"_CNT_U_CNT_U_DT_U
    105         . S ORDIALOG(SIG,1)="^TMP(""ORWORD"",$J,"_SIG_",1)"
    106         . S ORDIALOG(PI,"FORMAT")="@" ;PI already included in Sig
    107 OUT3    I '$G(ORQT(1))!('NTE) D DOSETEXT^ORCDPS2 ;reset Instructions text, Sig
    108         S ZSC=$$ZSC^ORMPS3,X=$P(ZSC,"|",2) I X?2.3U S ORDIALOG(SC,1)=$S(X="SC":1,1:0)
    109         Q
    110 IV      ; -- new IV order
    111         N IVTYP,IVTYPE S IVTYP=$P(ZRX,"|",7) I IVTYP="",$$NUMADDS^ORMPS3'>1 G UDOSE
    112         N SOLN,VOL,ADDS,STR,UNITS,RATE,URG,X,X1,X2,I,J,TYPE,OI,WP,NTE,SCH,DAYS,ROUTE,ADMIN
    113         N RXR
    114         S ORDIALOG=+$O(^ORD(101.41,"AB","PSJI OR PAT FLUID OE",0))
    115         I +$G(ORAPPT)>0 S ORDG=+$O(^ORD(100.98,"B","CLINIC ORDERS",0))
    116         E  S ORDG=+$O(^ORD(100.98,"B",$S($P(ZRX,"|",7)="TPN":"TPN",1:"IV RX"),0))
    117         S ORPKG=+$$PKG("PSJ") D GETDLG1^ORCD(ORDIALOG)
    118         S SOLN=$$PTR("ORDERABLE ITEM"),VOL=$$PTR("VOLUME"),SCH=$$PTR("SCHEDULE")
    119         S RATE=$$PTR("INFUSION RATE") S:ORURG ORDIALOG($$PTR("URGENCY"),1)=ORURG
    120         S WP=$$PTR("WORD PROCESSING 1"),ADDS=$$PTR("ADDITIVE")
    121         S STR=$$PTR("STRENGTH PSIV"),UNITS=$$PTR("UNITS")
    122         S DAYS=$$PTR("DURATION"),IVTYPE=$$PTR("IV TYPE"),ADMIN=$$PTR("ADMIN TIMES")
    123 IV1     S NTE=$$NTE^ORMPS3(21) I NTE D
    124         . N CNT,I S CNT=1,^TMP("ORWORD",$J,WP,1,CNT,0)=$$UNESC^ORMPS2($P(@ORMSG@(NTE),"|",4))
    125         . I $O(@ORMSG@(NTE,0)) S I=0 F  S I=$O(@ORMSG@(NTE,I)) Q:I'>0  S CNT=CNT+1,^TMP("ORWORD",$J,WP,1,CNT,0)=$$UNESC^ORMPS2(@ORMSG@(NTE,I))
    126         . S ^TMP("ORWORD",$J,WP,1,0)="^^"_CNT_U_CNT_U_DT_U
    127         . S ORDIALOG(WP,1)="^TMP(""ORWORD"",$J,"_WP_",1)"
    128         N ORDAYS S ORDAYS=""
    129         S:$D(RXO) ORDAYS=$P($P(RXO,"|",2),"^",3)
    130         S:$L(ORDAYS) ORDAYS=$$IVLIM^ORMPS2(ORDAYS)
    131         S:$L(ORDAYS) ORDIALOG(DAYS,1)=ORDAYS
    132         S ORDIALOG(IVTYPE,1)=IVTYP
    133         S X=$P($$FIND^ORM(+RXE,25),U,5)
    134         S ORDIALOG(RATE,1)=$$FIND^ORM(+RXE,24)_$S($L(X):" "_X,1:""),(I,J)=0
    135         F  D  S RXC=$O(@ORMSG@(RXC)) Q:'RXC  Q:$E(@ORMSG@(RXC),1,3)'="RXC"
    136         . S X=@ORMSG@(RXC),TYPE=$P(X,"|",2),OI=$$ORDITEM^ORM($P(X,"|",3)) Q:'OI
    137         . S X1=$P(X,"|",4),X2=$P($P(X,"|",5),U,5)
    138         . I $E(TYPE)="B" S J=J+1,ORDIALOG(SOLN,J)=OI,ORDIALOG(VOL,J)=X1 Q
    139         . S I=I+1,ORDIALOG(ADDS,I)=OI,ORDIALOG(STR,I)=X1,ORDIALOG(UNITS,I)=X2
    140 IV2     ;
    141         S RXR=$$RXR^ORMPS
    142         S ROUTE=$P(RXR,"|",2)
    143         S ORDIALOG($$PTR("ROUTE"),1)=$P(ROUTE,U,4)
    144         I IVTYP="I" S X=$P($G(ORQT(1)),U,2) D
    145         .S:$L($P(X,"&")) ORDIALOG(SCH,1)=$P(X,"&")
    146         .S:$L($P(X,"&",2)) ORDIALOG(ADMIN,1)=$P(X,"&",2)
    147         D UNESCARR^ORMPS2("ORDIALOG")
    148         Q
    149 PKG(NMSP)       ; -- Return Package file ptr for NMSP
    150         N I S I=0
    151         F  S I=+$O(^DIC(9.4,"C",NMSP,I)) Q:I<1  Q:'$O(^(I,0))  ;no Addl Prefs
    152         Q I
    153 PTR(NAME)       ; -- Returns ien of prompt NAME in Order Dialog file #101.41
    154         Q +$O(^ORD(101.41,"AB",$E("OR GTX "_NAME,1,63),0))
    155 QT      ; -- Unpiece the Q/T field from RXE
    156         I 'RXE S ORQT(1)=ORQT,ORQT=1 Q  ; nothing to reset
    157         N X,Y,I,J,P,SEG,DONE K ORQT
    158         S SEG=$G(@ORMSG@(+RXE)),X=$P(SEG,"|",2),(I,J,P,DONE)=0
    159         F  D  Q:DONE
    160         . S P=P+1,Y=$P(X,"~",P) I Y="" S DONE=1 Q
    161         . I P<$L(X,"~") S I=I+1,ORQT(I)=Y Q
    162         . I $L(SEG,"|")>2 S I=I+1,ORQT(I)=Y,DONE=1 Q
    163         . S J=+$O(@ORMSG@(+RXE,J)) I J'>0 S I=I+1,ORQT(I)=Y,DONE=1 Q
    164         . S SEG=$G(@ORMSG@(+RXE,J)),X=$P(SEG,"|"),P=1,I=I+1,ORQT(I)=Y_$P(X,"~")
    165         S ORQT=I Q:'ORQT  ; else reset ORSTRT, ORSTOP, ORURG
    166         S ORSTRT=$P(ORQT(1),U,4),ORSTOP=$P(ORQT(ORQT),U,5),ORURG=$P(ORQT(1),U,6)
    167         S:ORSTRT ORSTRT=$$FMDATE^ORM(ORSTRT) S:ORSTOP ORSTOP=$$FMDATE^ORM(ORSTOP) S:$L(ORURG) ORURG=$$URGENCY^ORM(ORURG)
    168         Q
     1ORMPS1 ;SLC/MKB - Process Pharmacy ORM msgs cont ;12/9/04  12:01
     2 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**86,92,94,116,134,152,158,149,190,195,215,265,275**;Dec 17, 1997;Build 7
     3 ;;Per VHA Directive 2004-038, this routine should not be modified.
     4UDOSE ; -- new Unit Dose order
     5 N QT,DRUG,INSTR,DOSE,RTE,SCH,OI,URG,WP,DUR,STR,DRGNM,X,PSOI,PSDD,S0,ID,LDOSE,XC,NTE,S0,RXR
     6 S ORDIALOG=+$O(^ORD(101.41,"AB","PSJ OR PAT OE",0))
     7 I $G(ORAPPT)>0 S ORDG=+$O(^ORD(100.98,"B","CLINIC ORDERS",0))
     8 E  S ORDG=+$O(^ORD(100.98,"B","UNIT DOSE MEDICATIONS",0))
     9 S ORPKG=+$$PKG("PSJ")
     10 D GETDLG1^ORCD(ORDIALOG) S QT=$G(ORQT(1))
     11 S DRUG=$$PTR("DISPENSE DRUG"),INSTR=$$PTR("INSTRUCTIONS")
     12 S DOSE=$$PTR("DOSE"),RTE=$$PTR("ROUTE"),SCH=$$PTR("SCHEDULE")
     13 S OI=$$PTR("ORDERABLE ITEM"),URG=$$PTR("URGENCY")
     14 S WP=$$PTR("WORD PROCESSING 1"),DUR=$$PTR("DURATION")
     15 S STR=$$PTR("STRENGTH"),DRGNM=$$PTR("DRUG NAME")
     16UD1 S:RXO X=$P(RXO,"|",2),ORDIALOG(OI,1)=$$ORDITEM^ORM(X),PSOI=$P(X,U,4,5)
     17 I '$G(ORDIALOG(OI,1)) S ORERR="Missing or invalid orderable item" Q
     18 S PSDD=$P($$FIND^ORM(+RXE,3),U,4,5),ORDIALOG(DRUG,1)=+PSDD
     19 S S0=$$FIND^ORM(+RXE,26)_"&"_$P($$FIND^ORM(+RXE,27),U,5)
     20 S ID=$P(QT,U),LDOSE=$P(QT,U,8) I 'ID,S0 D
     21 . N UNT,PTRN S UNT=$P(S0,"&",2),PTRN="1.N1"""_UNT_""""
     22 . I LDOSE?@PTRN S $P(ID,"&",1,2)=+LDOSE_"&"_UNT Q  ;pre-POE orders
     23 . S:$P(PSOI,U,2)'[S0 ORDIALOG(STR,1)=$TR(S0,"&")
     24 I 'ID,'S0 S ORDIALOG(DRGNM,1)=$P(PSDD,U,2)
     25 S:$L(ID) ORDIALOG(DOSE,1)=$P(ID,"&",1,4)_"&"_LDOSE_"&"_+PSDD_"&"_S0
     26 I LDOSE="" D  I LDOSE="" S ORERR="Unable to determine instructions" Q
     27 . I $G(RXC)'>0 D  Q  ;look for units/dose
     28 .. S LDOSE=$P(ID,"&",3),X=$P(ID,"&",4) I 'LDOSE S LDOSE="" Q
     29 .. S:'$L(X) X=$P($$FIND^ORM(+RXE,7),U,5) S:$L(X) LDOSE=LDOSE_" "_X
     30 .. S ORDIALOG(DRGNM,1)=$P(PSDD,U,2) ;force use of DD
     31 . F  D  Q:LDOSE'=""  S RXC=$O(@ORMSG@(RXC)) Q:'RXC  Q:$E(@ORMSG@(RXC),1,3)'="RXC"
     32 .. S XC=@ORMSG@(RXC) Q:+$P($P(XC,"|",3),U,4)'=+PSOI
     33 .. S LDOSE=$P(XC,"|",4)_$P($P(XC,"|",5),U,5) ;strength_units
     34 S ORDIALOG(INSTR,1)=LDOSE
     35UD2 S NTE=$$NTE(21) I NTE D
     36 . N CNT,I S CNT=1,^TMP("ORWORD",$J,WP,1,CNT,0)=$P(@ORMSG@(NTE),"|",4)
     37 . I $O(@ORMSG@(NTE,0)) S I=0 F  S I=$O(@ORMSG@(NTE,I)) Q:I'>0  S CNT=CNT+1,^TMP("ORWORD",$J,WP,1,CNT,0)=@ORMSG@(NTE,I)
     38 . S ^TMP("ORWORD",$J,WP,1,0)="^^"_CNT_U_CNT_U_DT_U
     39 . S ORDIALOG(WP,1)="^TMP(""ORWORD"",$J,"_WP_",1)"
     40 S RXR=$$RXR^ORMPS I 'RXR S ORERR="Missing or invalid RXR segment" Q
     41 S ORDIALOG(RTE,1)=$P($P(RXR,"|",2),U,4),ORDIALOG(URG,1)=ORURG
     42 S ORDIALOG(SCH,1)=$P(QT,U,2),X=$P(QT,U,3)
     43 I $L(X) D  ;set only if previous order had duration
     44 . N IFN S IFN=$S($G(ORIFN):+ORIFN,$P(ZRX,"|",2):+$P(ZRX,"|",2),1:0)
     45 . S:$O(^OR(100,+IFN,4.5,"ID","DAYS",0)) ORDIALOG(DUR,1)=$$DURATION(X)
     46 D DOSETEXT^ORCDPS2 ;reset Instructions text, SIG
     47 Q
     48OUT ; -- new Outpt order
     49 N OI,SIG,INSTR,DOSE,RTE,SCH,DUR,SC,STR,DRUG,PI,CONJ,PSOI,PSDD,S0,X,I,RXR,J,NTE,ZSC,CNT,PC
     50 S ORDIALOG=+$O(^ORD(101.41,"AB","PSO OERR",0))
     51 S ORDG=+$O(^ORD(100.98,"B","OUTPATIENT MEDICATIONS",0))
     52 S ORPKG=+$$PKG("PSO") D GETDLG1^ORCD(ORDIALOG)
     53 S OI=$$PTR("ORDERABLE ITEM"),SIG=$$PTR("SIG")
     54 S INSTR=$$PTR("INSTRUCTIONS"),DOSE=$$PTR("DOSE")
     55 S SCH=$$PTR("SCHEDULE"),DUR=$$PTR("DURATION")
     56 S RTE=$$PTR("ROUTE"),SC=$$PTR("SERVICE CONNECTED")
     57 S STR=$$PTR("STRENGTH"),DRUG=$$PTR("DISPENSE DRUG")
     58 S PI=$$PTR("PATIENT INSTRUCTIONS"),CONJ=$$PTR("AND/THEN")
     59 S PC=$$PTR("WORD PROCESSING 1")
     60 S:RXO X=$P(RXO,"|",2),ORDIALOG(OI,1)=$$ORDITEM^ORM(X),PSOI=$P(X,U,4,5)
     61 I '$G(ORDIALOG(OI,1)) S ORERR="Missing or invalid orderable item" Q
     62 S PSDD=$P($$FIND^ORM(+RXE,3),U,4,5),ORDIALOG(DRUG,1)=+PSDD
     63 S S0=$$FIND^ORM(+RXE,26)_"&"_$P($$FIND^ORM(+RXE,27),U,5)
     64 I S0,$P(PSOI,U,2)'[S0 S ORDIALOG(STR,1)=$TR(S0,"&")
     65 I 'S0,'$G(ORQT(1)) S ORDIALOG($$PTR("DRUG NAME"),1)=$P(PSDD,U,2)
     66OUT1 S ORDIALOG($$PTR("QUANTITY"),1)=$$FIND^ORM(+RXE,11)
     67 S ORDIALOG($$PTR("REFILLS"),1)=$$FIND^ORM(+RXE,13)
     68 S X=$$FIND^ORM(+RXE,23) S:$E(X)="D" X=+$E(X,2,99)
     69 S:X ORDIALOG($$PTR("DAYS SUPPLY"),1)=X
     70 I ZRX S X=$P(ZRX,"|",5) S:$L(X) ORDIALOG($$PTR("ROUTING"),1)=X
     71 S:ORURG ORDIALOG($$PTR("URGENCY"),1)=ORURG F I=1:1:ORQT D
     72 . S ORDIALOG(INSTR,I)=$P(ORQT(I),U,8),X=$P(ORQT(I),U)
     73 . S:$L(X) ORDIALOG(DOSE,I)=$P(X,"&",1,4)_"&"_$P(ORQT(I),U,8)_"&"_+PSDD_"&"_S0
     74 . S X=$P(ORQT(I),U,2) S:$L(X) ORDIALOG(SCH,I)=X
     75 . S X=$P(ORQT(I),U,3) S:$L(X) ORDIALOG(DUR,I)=$$DURATION(X)
     76 . S X=$P(ORQT(I),U,9) S:$L(X) ORDIALOG(CONJ,I)=$S(X="S":"T",1:X)
     77 S RXR=$$RXR^ORMPS I RXR S ORDIALOG(RTE,1)=$P($P(RXR,"|",2),U,4) D
     78 . S I=1,J=+RXR ;look for multiple RXR's
     79 . F  S J=$O(@ORMSG@(J)) Q:J'>0  S RXR=@ORMSG@(J) Q:$E(RXR,1,3)'="RXR"  S I=I+1,ORDIALOG(RTE,I)=$P($P(RXR,"|",2),U,4)
     80OUT2 S NTE=$$NTE(6) D:'NTE PCOMM^ORMPS2 I NTE D  ;Prov Comm
     81 . S CNT=1,^TMP("ORWORD",$J,PC,1,CNT,0)=$P(@ORMSG@(NTE),"|",4)
     82 . I $O(@ORMSG@(NTE,0)) S I=0 F  S I=$O(@ORMSG@(NTE,I)) Q:I'>0  S CNT=CNT+1,^TMP("ORWORD",$J,PC,1,CNT,0)=@ORMSG@(NTE,I)
     83 . S ^TMP("ORWORD",$J,PC,1,0)="^^"_CNT_U_CNT_U_DT_U
     84 . S ORDIALOG(PC,1)="^TMP(""ORWORD"",$J,"_PC_",1)"
     85 . N XCNT,XCOMM,XCOMMENT,XORCOMM,XXCNT,XORIFN
     86 . S (XCOMM,XORCOMM)=""
     87 . S XORIFN=$G(ORIFN) I XORIFN="" S XORIFN=$P(RXR,"|",2)
     88 . Q:XORIFN=""
     89 . S XCOMM=$O(^OR(100,+XORIFN,4.5,"ID","COMMENT",XCOMM)) Q:XCOMM=""
     90 . S XCNT=0 F  S XCNT=$O(^TMP("ORWORD",$J,PC,1,XCNT)) Q:XCNT=""  S XCOMMENT=$G(^TMP("ORWORD",$J,PC,1,XCNT,0)) D
     91 . . S XORCOMM=$G(^OR(100,+XORIFN,4.5,XCOMM,2,XCNT,0))
     92 . . S XXCNT=0
     93 . . I XORCOMM="" F  S XXCNT=$O(^OR(100,+XORIFN,4.5,XCOMM,2,XXCNT)) Q:XXCNT=""  S XORCOMM=$G(^OR(100,+XORIFN,4.5,XCOMM,2,XXCNT,0)) Q:XORCOMM'=""
     94 . . I $G(XCOMMENT)=$G(XORCOMM) S ORDIALOG(PC,"FORMAT")="@"
     95 S NTE=$$NTE(7) I NTE D  ;Pat Instr
     96 . S CNT=1,^TMP("ORWORD",$J,PI,1,CNT,0)=$P(@ORMSG@(NTE),"|",4)
     97 . I $O(@ORMSG@(NTE,0)) S I=0 F  S I=$O(@ORMSG@(NTE,I)) Q:I'>0  S CNT=CNT+1,^TMP("ORWORD",$J,PI,1,CNT,0)=@ORMSG@(NTE,I)
     98 . S ^TMP("ORWORD",$J,PI,1,0)="^^"_CNT_U_CNT_U_DT_U
     99 . S ORDIALOG(PI,1)="^TMP(""ORWORD"",$J,"_PI_",1)"
     100 S NTE=$$NTE(21) I NTE D  ;Sig
     101 . S CNT=1,^TMP("ORWORD",$J,SIG,1,CNT,0)=$P(@ORMSG@(NTE),"|",4)
     102 . I $O(@ORMSG@(NTE,0)) S I=0 F  S I=$O(@ORMSG@(NTE,I)) Q:I'>0  S CNT=CNT+1,^TMP("ORWORD",$J,SIG,1,CNT,0)=@ORMSG@(NTE,I)
     103 . S ^TMP("ORWORD",$J,SIG,1,0)="^^"_CNT_U_CNT_U_DT_U
     104 . S ORDIALOG(SIG,1)="^TMP(""ORWORD"",$J,"_SIG_",1)"
     105 . S ORDIALOG(PI,"FORMAT")="@" ;PI already included in Sig
     106OUT3 I '$G(ORQT(1))!('NTE) D DOSETEXT^ORCDPS2 ;reset Instructions text, Sig
     107 S ZSC=$$ZSC,X=$P(ZSC,"|",2) I X?2.3U S ORDIALOG(SC,1)=$S(X="SC":1,1:0)
     108 Q
     109IV ; -- new IV order
     110 N IVTYP S IVTYP=$P(ZRX,"|",7) I IVTYP="",$$NUMADDS'>1 G UDOSE
     111 N SOLN,VOL,ADDS,STR,UNITS,RATE,URG,X,X1,X2,I,J,TYPE,OI,WP,NTE,SCH,DAYS
     112 S ORDIALOG=+$O(^ORD(101.41,"AB","PSJI OR PAT FLUID OE",0))
     113 I +$G(ORAPPT)>0 S ORDG=+$O(^ORD(100.98,"B","CLINIC ORDERS",0))
     114 E  S ORDG=+$O(^ORD(100.98,"B",$S($P(ZRX,"|",7)="TPN":"TPN",1:"IV RX"),0))
     115 S ORPKG=+$$PKG("PSJ") D GETDLG1^ORCD(ORDIALOG)
     116 S SOLN=$$PTR("ORDERABLE ITEM"),VOL=$$PTR("VOLUME"),SCH=$$PTR("SCHEDULE")
     117 S RATE=$$PTR("INFUSION RATE") S:ORURG ORDIALOG($$PTR("URGENCY"),1)=ORURG
     118 S WP=$$PTR("WORD PROCESSING 1"),ADDS=$$PTR("ADDITIVE")
     119 S STR=$$PTR("STRENGTH PSIV"),UNITS=$$PTR("UNITS")
     120 S DAYS=$$PTR("DURATION")
     121IV1 S NTE=$$NTE(21) I NTE D
     122 . N CNT,I S CNT=1,^TMP("ORWORD",$J,WP,1,CNT,0)=$P(@ORMSG@(NTE),"|",4)
     123 . I $O(@ORMSG@(NTE,0)) S I=0 F  S I=$O(@ORMSG@(NTE,I)) Q:I'>0  S CNT=CNT+1,^TMP("ORWORD",$J,WP,1,CNT,0)=@ORMSG@(NTE,I)
     124 . S ^TMP("ORWORD",$J,WP,1,0)="^^"_CNT_U_CNT_U_DT_U
     125 . S ORDIALOG(WP,1)="^TMP(""ORWORD"",$J,"_WP_",1)"
     126 N ORDAYS S ORDAYS=""
     127 S:$D(RXO) ORDAYS=$P($P(RXO,"|",2),"^",3)
     128 S:$L(ORDAYS) ORDAYS=$$IVLIM^ORMPS2(ORDAYS)
     129 S:$L(ORDAYS) ORDIALOG(DAYS,1)=ORDAYS
     130 S X=$P($$FIND^ORM(+RXE,25),U,5)
     131 S ORDIALOG(RATE,1)=$$FIND^ORM(+RXE,24)_$S($L(X):" "_X,1:""),(I,J)=0
     132 F  D  S RXC=$O(@ORMSG@(RXC)) Q:'RXC  Q:$E(@ORMSG@(RXC),1,3)'="RXC"
     133 . S X=@ORMSG@(RXC),TYPE=$P(X,"|",2),OI=$$ORDITEM^ORM($P(X,"|",3)) Q:'OI
     134 . S X1=$P(X,"|",4),X2=$P($P(X,"|",5),U,5)
     135 . I $E(TYPE)="B" S J=J+1,ORDIALOG(SOLN,J)=OI,ORDIALOG(VOL,J)=X1 Q
     136 . S I=I+1,ORDIALOG(ADDS,I)=OI,ORDIALOG(STR,I)=X1,ORDIALOG(UNITS,I)=X2
     137 I IVTYP="" S X=$P($G(ORQT(1)),U,2) S:$L(X) ORDIALOG(SCH,1)=X
     138 Q
     139NTE(ID) ; -- Return subscript of NTE segment for RXE-<ID>
     140 N I,SEG,Y S Y="",I=+RXE S:'$G(ID) ID=21
     141 F  S I=$O(@ORMSG@(I)) Q:I'>0  S SEG=@ORMSG@(I) Q:$E(SEG,1,3)="ORC"  I $P(SEG,"|",1,2)=("NTE|"_ID) S Y=I Q
     142 Q Y
     143ZSC() ; -- Return subscript of ZSC segment
     144 N I,SEG,Y S Y="",I=+RXE
     145 F  S I=$O(@ORMSG@(I)) Q:I'>0  S SEG=$E(@ORMSG@(I),1,3) Q:SEG="ORC"  I SEG="ZSC" S Y=I_U_@ORMSG@(I) Q
     146 Q Y
     147NUMADDS() ; -- count number of additives to determine type
     148 N CNT,I,X S CNT=0,I=+RXE
     149 F  S I=$O(@ORMSG@(I)) Q:I'>0  S X=@ORMSG@(I) Q:$P(X,"|")="ORC"  I $E(X,1,6)="RXC|A|" S CNT=CNT+1
     150 Q CNT
     151PKG(NMSP) ; -- Return Package file ptr for NMSP
     152 N I S I=0
     153 F  S I=+$O(^DIC(9.4,"C",NMSP,I)) Q:I<1  Q:'$O(^(I,0))  ;no Addl Prefs  DBIA #2058
     154 Q I
     155PTR(NAME) ; -- Returns ien of prompt NAME in Order Dialog file #101.41
     156 Q +$O(^ORD(101.41,"AB",$E("OR GTX "_NAME,1,63),0))
     157DURATION(X) ; -- Returns "# units" from U# format
     158 N Y,Y1,Y2 I X'?.1U1.N Q ""
     159 S Y1=$E(X),Y2=+$E(X,2,$L(X)) I X=+X S Y1="D",Y2=+X
     160 S Y=Y2_" "_$S(Y1="L":"MONTH",Y1="W":"WEEK",Y1="H":"HOUR",Y1="M":"MINUTE",Y1="S":"SECOND",1:"DAY")_$S(Y2>1:"S",1:"")
     161 Q Y
     162QT ; -- Unpiece the Q/T field from RXE
     163 I 'RXE S ORQT(1)=ORQT,ORQT=1 Q  ; nothing to reset
     164 N X,Y,I,J,P,SEG,DONE K ORQT
     165 S SEG=$G(@ORMSG@(+RXE)),X=$P(SEG,"|",2),(I,J,P,DONE)=0
     166 F  D  Q:DONE
     167 . S P=P+1,Y=$P(X,"~",P) I Y="" S DONE=1 Q
     168 . I P<$L(X,"~") S I=I+1,ORQT(I)=Y Q
     169 . I $L(SEG,"|")>2 S I=I+1,ORQT(I)=Y,DONE=1 Q
     170 . S J=+$O(@ORMSG@(+RXE,J)) I J'>0 S I=I+1,ORQT(I)=Y,DONE=1 Q
     171 . S SEG=$G(@ORMSG@(+RXE,J)),X=$P(SEG,"|"),P=1,I=I+1,ORQT(I)=Y_$P(X,"~")
     172 S ORQT=I Q:'ORQT  ; else reset ORSTRT, ORSTOP, ORURG
     173 S ORSTRT=$P(ORQT(1),U,4),ORSTOP=$P(ORQT(ORQT),U,5),ORURG=$P(ORQT(1),U,6)
     174 S:ORSTRT ORSTRT=$$FMDATE^ORM(ORSTRT) S:ORSTOP ORSTOP=$$FMDATE^ORM(ORSTOP) S:$L(ORURG) ORURG=$$URGENCY^ORM(ORURG)
     175 Q
Note: See TracChangeset for help on using the changeset viewer.