1 | ORWD ; SLC/KCM - Utilities for Windows Dialogs ;7/26/96 17:53 [ 11/19/96 4:27 PM ]
|
---|
2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;;Dec 17, 1997
|
---|
3 | ;
|
---|
4 | DT(Y,X) ; Returns internal Fileman Date/Time
|
---|
5 | N %DT S %DT="TS" D ^%DT
|
---|
6 | Q
|
---|
7 | PROVKEY(VAL,USERID) ; Returns 1 if user possesses the provider key
|
---|
8 | N NAM S NAM=$P(^VA(200,USERID,0),U,1)
|
---|
9 | S VAL=$D(^VA(200,"AK.PROVIDER",NAM,USERID))
|
---|
10 | Q
|
---|
11 | KEY(VAL,KEYNAME,USERID) ; Returns 1 if user possesses the key
|
---|
12 | S VAL=0 I $D(^XUSEC(KEYNAME,USERID)) S VAL=1
|
---|
13 | Q
|
---|
14 | OI(Y,XREF,DIR,FROM) ; Return a bolus of orderable items
|
---|
15 | ; .Return Array, Cross Reference (S.xxx), Direction, Starting Text
|
---|
16 | N I,IEN,CNT S CNT=44
|
---|
17 | ;
|
---|
18 | I DIR=0 D ; Forward direction
|
---|
19 | . F I=1:1:CNT S FROM=$O(^ORD(101.43,XREF,FROM)) Q:FROM="" D
|
---|
20 | . . S Y(I)=$O(^ORD(101.43,XREF,FROM,0))_"^"_FROM
|
---|
21 | . I $G(Y(CNT))="" S Y(I)=""
|
---|
22 | ;
|
---|
23 | I DIR=1 D ; Reverse direction
|
---|
24 | . F I=1:1:CNT S FROM=$O(^ORD(101.43,XREF,FROM),-1) Q:FROM="" D
|
---|
25 | . . S Y(I)=$O(^ORD(101.43,XREF,FROM,0))_"^"_FROM
|
---|
26 | Q
|
---|
27 | ODEF(Y,DLG) ; Return the definition for a dialog
|
---|
28 | Q:'$L(DLG)
|
---|
29 | S DLG=+$O(^ORD(101.41,"B",DLG,0))
|
---|
30 | Q:$D(^ORD(101.41,DLG,50))<10
|
---|
31 | N I,IEN,IDX
|
---|
32 | S I=0,IDX=0
|
---|
33 | S Y(0)=$P($G(^ORD(101.41,DLG,5)),"^",4)
|
---|
34 | F S I=$O(^ORD(101.41,DLG,50,"AC",I)) Q:I="" S IEN=$O(^(I,0)) D
|
---|
35 | . S IDX=IDX+1,Y(IDX)=$G(^ORD(101.41,DLG,50,IEN,0))
|
---|
36 | Q
|
---|
37 | DEF(Y,DLG) ; Return format mapping for a dialog
|
---|
38 | ; Y(n): CtrlName^DlgPtr^FmtSeq^Fmt^Omit^Lead^Trail^Mult?^chd1~chd2~...
|
---|
39 | I DLG="NOT IMPLEMENTED" S Y(0)="0^0" Q ; for testing
|
---|
40 | S DLG=$O(^ORD(101.41,"B",DLG,0))
|
---|
41 | N I,J,K,N,X0,X2,XW,DPTR
|
---|
42 | S Y(0)=$P(^ORD(101.41,DLG,0),U,5)_U_DLG
|
---|
43 | S I=0,N=0
|
---|
44 | F S I=$O(^ORD(101.41,DLG,10,I)) Q:I'>0 D
|
---|
45 | . S X0=$G(^ORD(101.41,DLG,10,I,0)),DPTR=$P(X0,U,2)
|
---|
46 | . S X2=$G(^ORD(101.41,DLG,10,I,2))
|
---|
47 | . S XW=$G(^ORD(101.41,DLG,10,I,"W"))
|
---|
48 | . S N=N+1,Y(N)=$P(XW,U,1)_U_DPTR_U_X2,CHLD=""
|
---|
49 | . S J=0 F S J=$O(^ORD(101.41,DLG,10,"DAD",DPTR,J)) Q:'J D
|
---|
50 | . . S K=0 F S K=$O(^ORD(101.41,DLG,10,"DAD",DPTR,J,K)) Q:'K D
|
---|
51 | . . . S CHLD=CHLD_$P(^ORD(101.41,DLG,10,K,0),U,2)_"~"
|
---|
52 | . S $P(Y(N),U,8)=CHLD
|
---|
53 | Q
|
---|
54 | FORMID(VAL,ORIFN) ; procedure
|
---|
55 | ; Returns the Dialog Form ID
|
---|
56 | N X
|
---|
57 | S VAL=0,X=$P(^OR(100,+ORIFN,0),U,5)
|
---|
58 | Q:$P(X,";",2)'="ORD(101.41,"
|
---|
59 | S VAL=+$P($G(^ORD(101.41,+X,5)),U,5)
|
---|
60 | ; I X S VAL=$P($G(^XTV(8989.52,+X,0)),U,2)
|
---|
61 | Q
|
---|
62 | GET4EDIT(LST,ORIFN) ; procedure
|
---|
63 | ; return responses in format that can be used by dialog
|
---|
64 | N ILST,PRMT,INST,DLG,ORDIALOG S ILST=0
|
---|
65 | I '$D(ORIFN) S LST=0 Q
|
---|
66 | S ORIFN=+ORIFN,DLG=+$P(^OR(100,ORIFN,0),U,5)
|
---|
67 | D GETDLG1^ORCD(DLG),GETORDER^ORCD("^OR(100,"_ORIFN_",4.5)")
|
---|
68 | S PRMT=0 F S PRMT=$O(ORDIALOG(PRMT)) Q:'PRMT D
|
---|
69 | . S INST=0 F S INST=$O(ORDIALOG(PRMT,INST)) Q:'INST D
|
---|
70 | . . S ILST=ILST+1,LST(ILST)="~"_PRMT_U_INST_U_$P(ORDIALOG(PRMT),U,3)
|
---|
71 | . . S ILST=ILST+1,LST(ILST)="d"_ORDIALOG(PRMT,INST)
|
---|
72 | . . I $E(ORDIALOG(PRMT,INST))=U D ; load word processing
|
---|
73 | . . . N I,REF S I=0,REF=ORDIALOG(PRMT,INST)
|
---|
74 | . . . F S I=$O(@REF@(I)) Q:'I S ILST=ILST+1,LST(ILST)="t"_^(I,0)
|
---|
75 | . . E S $P(LST(ILST),U,2)=$$EXT^ORCD(PRMT,INST) ; load external value
|
---|
76 | . . I "R"[$E(ORDIALOG(PRMT,0)) D
|
---|
77 | . . . S $P(LST(ILST),U,2)=$$UP^XLFSTR($$FMTE^XLFDT(ORDIALOG(PRMT,INST)))
|
---|
78 | Q
|
---|
79 | EXTDT(X) ; Return an external date time that can be interpreted by %DT
|
---|
80 | I $E(X)="T" Q "TODAY"_$E(X,2,255)
|
---|
81 | I $E(X)="V" Q "NEXT VISIT"_$E(X,2,255)
|
---|
82 | Q ""
|
---|
83 | WRLST(Y,TYP) ; Return list of dialogs for writing orders
|
---|
84 | ; .Y(n): DlgName^ListBox Text
|
---|
85 | ; TYP: 'I' = inpatient, 'O' = outpatient
|
---|
86 | N PAR,ERR,SEQ,IEN,I,X
|
---|
87 | S PAR=$S(TYP="I":"ORW ADDORD INPT",1:"ORW ADDORD OUTPT")
|
---|
88 | D GETLST^XPAR(.X,"ALL",PAR,"Q",.ERR) Q:ERR
|
---|
89 | S I=0 F S I=$O(X(I)) Q:'I D
|
---|
90 | . S SEQ=$P(X(I),U,1),IEN=$P(X(I),U,2)
|
---|
91 | . S Y(SEQ)=$P(^ORD(101.41,IEN,0),U,1)_U_$P($G(^(5)),U,4)
|
---|
92 | Q
|
---|
93 | SAVE(Y,DFN,ORNP,LOC,DLG,ORWDACT,RSP) ; procedure
|
---|
94 | ; Save order
|
---|
95 | N ORDIALOG,ORL,ORVP,ORIFN,ORDUZ,ORSTS,ORDG,OREVENT,ORCAT,ORDA
|
---|
96 | I $P(^ORD(101.41,+DLG,0),U)="PSO OERR" S ORCAT="O"
|
---|
97 | I $P(^ORD(101.41,+DLG,0),U)="PSJ OR PAT OE" S ORCAT="I"
|
---|
98 | S ORVP=DFN_";DPT(",ORL(2)=LOC_";SC(",ORL=ORL(2)
|
---|
99 | D GETDLG^ORCD(DLG)
|
---|
100 | M ORDIALOG=RSP S ORDIALOG=DLG
|
---|
101 | I ORWDACT="N" D
|
---|
102 | . D EN^ORCSAVE
|
---|
103 | . S Y="" I ORIFN D GETBYIFN^ORWORR(.Y,ORIFN)
|
---|
104 | I $P(ORWDACT,U,1)="E" D
|
---|
105 | . S ORIFN=+$P(ORWDACT,U,2) D XX^ORCSAVE
|
---|
106 | . S Y="" S ORIFN=+$P(ORWDACT,U,2)_";"_ORDA D GETBYIFN^ORWORR(.Y,ORIFN)
|
---|
107 | Q
|
---|
108 | SIGN(ERRLST,DFN,ORNP,LOC,ORWSIGN) ; procedure
|
---|
109 | ; Sign orders (ORIFN;ACT^RELSTS^SIGSTS^NATR)
|
---|
110 | N ORVP,ORL,IDX,ANERROR,ERRCNT
|
---|
111 | S ORVP=DFN_";DPT(",ORL(2)=LOC_";SC(",ORL=ORL(2),ERRCNT=0
|
---|
112 | I '$D(^XUSEC("ORES",DUZ)) S ERRLST(1)=0_U_"Must have ORES key." Q
|
---|
113 | S IDX=0 F S IDX=$O(ORWSIGN(IDX)) Q:'IDX S X=ORWSIGN(IDX) D
|
---|
114 | . ; ** change NATR when GUI changed to pass Nature in 4th piece
|
---|
115 | . S ORIFN=$P(X,U),RELSTS=$P(X,U,2),SIGSTS=$P(X,U,3),NATR="E" ;$P(X,U,4)
|
---|
116 | . I SIGSTS=2 D NOTIF^ORCSIGN S ANERROR=""
|
---|
117 | . I SIGSTS'=2 D EN^ORCSEND(ORIFN,"",SIGSTS,RELSTS,NATR,"",.ANERROR)
|
---|
118 | . I $L(ANERROR) D Q ; don't print if an error occurred
|
---|
119 | . . S ERRCNT=ERRCNT+1,ERRLST(ERRCNT)=$P(ORWSIGN(IDX),U)_U_ANERROR
|
---|
120 | . . K ORWSIGN(IDX)
|
---|
121 | . I RELSTS=0 K ORWSIGN(IDX) Q ; don't print if unreleased
|
---|
122 | . S ORWSIGN(IDX)=$P(ORWSIGN(IDX),U)
|
---|
123 | D PRINTS^ORWD1(.ORWSIGN,LOC)
|
---|
124 | Q
|
---|
125 | VALIDACT(VAL,ORIFN,ACTION) ;procedure
|
---|
126 | ; Return 1 if action is valid for this order, otherwise 0^error
|
---|
127 | S VAL=$$VALID^ORCACT0(ORIFN,ACTION,.ERR)
|
---|
128 | I VAL=0 S VAL=VAL_U_ERR
|
---|
129 | Q
|
---|
130 | SAVEACT(LST,ORIFN,ACTION,REASON,DFN,ORNP,LOC) ;procedure
|
---|
131 | ; Save this action for the order (it is still unsigned/unreleased)
|
---|
132 | N ORDIALOG,ORL,ORVP,ORDUZ,ORSTS,ORDG,OREVENT,ACTDA,SIGSTS,RELSTS,ASTS
|
---|
133 | S ORVP=DFN_";DPT(",ORL(2)=LOC_";SC("
|
---|
134 | S SIGSTS=2,RELSTS=11
|
---|
135 | I '$P(ORIFN,";",2) S $P(ORIFN,";",2)=1
|
---|
136 | I (ACTION="FL")!(ACTION="UF")!(ACTION="WC") S SIGSTS=3,RELSTS=""
|
---|
137 | S ASTS=$P(^OR(100,+ORIFN,8,+$P(ORIFN,";",2),0),U,15)
|
---|
138 | I ACTION="DC",((ASTS=10)!(ASTS=11)) D Q ; exit here if DELETE
|
---|
139 | . D GETBYIFN^ORWORR(.LST,ORIFN)
|
---|
140 | . S $P(LST(1),U,1)="~0",LST(2)="tDELETED - "_$E(LST(2),2,245)
|
---|
141 | . D DELETE^ORCSAVE2(ORIFN)
|
---|
142 | ;
|
---|
143 | ; the only valid action for ActDA>1 is deletion, so only orders
|
---|
144 | ; identified by ORIFN;1 should reach this point
|
---|
145 | ;
|
---|
146 | I $P(ORIFN,";",2)>1 S $ECODE=",Uorder action invalid," Q
|
---|
147 | I ACTION="FL" S $P(^OR(100,+ORIFN,6),U,1)=1
|
---|
148 | I ACTION="UF" S $P(^OR(100,+ORIFN,6),U,1)=0
|
---|
149 | I ACTION'="RN" D
|
---|
150 | . S ACTDA=$$ACTION^ORCSAVE(ACTION,+ORIFN,ORNP,REASON)
|
---|
151 | I ACTION="RN" D
|
---|
152 | . N ORDA,ORDIALOG,PRMT,SAVIFN,X0
|
---|
153 | . S SAVIFN=+ORIFN,X0=^OR(100,+ORIFN,0)
|
---|
154 | . I $P(X0,U,5)["101.41," D ; version 3
|
---|
155 | . . S ORDIALOG=+$P(X0,U,5),ORCAT=$P(^OR(100,+ORIFN,0),U,12)
|
---|
156 | . . D GETDLG^ORCD(ORDIALOG),GETORDER^ORCD(+ORIFN)
|
---|
157 | . E D ; version 2.5 generic
|
---|
158 | . . S ORDIALOG=$O(^ORD(101.41,"B","OR GXTEXT WORD PROCESSING ORDE",0))
|
---|
159 | . . D GETDLG^ORCD(ORDIALOG)
|
---|
160 | . . S PRMT=$O(^ORD(101.41,"B","OR GTX WORD PROCESSING 1",0))
|
---|
161 | . . S ORDIALOG(PRMT,1)=$NA(^TMP("ORWORD",$J,PRMT,1))
|
---|
162 | . . M ^TMP("ORWORD",$J,PRMT,1)=^OR(100,+ORIFN,1)
|
---|
163 | . . S PRMT=$O(^ORD(101.41,"B","OR GTX START DATE/TIME",0))
|
---|
164 | . . I $P(X0,U,9) S ORDIALOG(PRMT,1)=$P(X0,U,9)
|
---|
165 | . D RN^ORCSAVE I 'ORIFN S $ECODE=",UCPRS renew order,"
|
---|
166 | . S ACTDA=ORDA,ORIFN=SAVIFN
|
---|
167 | I (ACTION="FL")!(ACTION="UF") S ACTDA=1
|
---|
168 | D GETBYIFN^ORWORR(.LST,+ORIFN_";"_ACTDA)
|
---|
169 | S $P(LST(1),U,12)=ACTDA
|
---|
170 | Q
|
---|