| 1 | ORCDGMRC ;SLC/MKB-Utility functions for GMRC dialogs ;3/10/03  07:34
 | 
|---|
| 2 |  ;;3.0;ORDER ENTRY/RESULTS REPORTING;**4,26,68,100,181**;Dec 17, 1997
 | 
|---|
| 3 |  ; External References
 | 
|---|
| 4 |  ;    DBIA 10006 Call to ^DIC
 | 
|---|
| 5 |  ;    DBIA 10026 Call to ^DIR
 | 
|---|
| 6 |  ;    DBIA  2426 Call to SERV1^GMRCASV
 | 
|---|
| 7 |  ;    DBIA  3119 Call to GETDEF^GMRCDRFR
 | 
|---|
| 8 |  ;    DBIA  2982 Call to GETSVC^GMRCPR0
 | 
|---|
| 9 |  ;    DBIA  3121 Call to APIs $$PROVDX and PREREQ in routine ^GMRCUTL1
 | 
|---|
| 10 |  ;    DBIA  1609 Call to CONFIG^LEXSET
 | 
|---|
| 11 |  ;    DBIA 10104 Call to APIs $$RJ and $$UP in routine ^XLFSTR
 | 
|---|
| 12 |  ;    DBIA 10102 Call to DISP^XQORM1
 | 
|---|
| 13 |  ;    DBIA  3991 Call to $$STATCHK^ICDAPIU
 | 
|---|
| 14 | URGENCY(TYPE) ; -- Returns index of allowable urgencies from file #101.42
 | 
|---|
| 15 |  N X S X=$S($$VAL^ORCD("CATEGORY")'="I":"O",TYPE="C":"T",1:"R")
 | 
|---|
| 16 |  S ORDIALOG(PROMPT,"D")="S.GMRC"_X
 | 
|---|
| 17 |  Q
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 | PLACE ; -- Returns list of allowable places of consultation
 | 
|---|
| 20 |  Q:$D(ORDIALOG(PROMPT,"LIST"))  N CHOICES,I,J,INPT,X
 | 
|---|
| 21 |  S INPT=($$VAL^ORCD("CATEGORY")="I")
 | 
|---|
| 22 |  I INPT S CHOICES="B^Bedside;C^Consultant's Choice"
 | 
|---|
| 23 |  I 'INPT S CHOICES="E^Emergency Room;C^Consultant's Choice"
 | 
|---|
| 24 |  S I=0 F J=1:1:$L(CHOICES,";") S X=$P(CHOICES,";",J) D
 | 
|---|
| 25 |  . S I=I+1,ORDIALOG(PROMPT,"LIST",I)=X
 | 
|---|
| 26 |  . S ORDIALOG(PROMPT,"LIST","B",$$UP^XLFSTR($P(X,U,2)))=$P(X,U)
 | 
|---|
| 27 |  S ORDIALOG(PROMPT,"LIST")=I_"^1"
 | 
|---|
| 28 |  Q
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 | CHANGED(PRMT) ; -- Kill lists for Request Service or Place of Consultation
 | 
|---|
| 31 |  N I,P
 | 
|---|
| 32 |  S I=$S(PRMT="OI":"REQUEST SERVICE",1:"PLACE OF CONSULTATION")
 | 
|---|
| 33 |  S P=$$PTR^ORCD("OR GTX "_I) Q:'P
 | 
|---|
| 34 |  K ORDIALOG(P,"LIST"),ORDIALOG(P,1)
 | 
|---|
| 35 |  Q
 | 
|---|
| 36 |  ;
 | 
|---|
| 37 | GETSERV ; -- Get list of orderable services
 | 
|---|
| 38 |  N GMRCTO,GMRCDG,I,X K ^TMP("GMRCS",$J),^TMP("GMRCSLIST",$J)
 | 
|---|
| 39 |  S (GMRCTO,GMRCDG)=1 D SERV1^GMRCASV ; get list of orderable services
 | 
|---|
| 40 |  F I=1:1 S X=+$G(^TMP("GMRCSLIST",$J,I)) Q:X'>0  S $P(^TMP("GMRCS",$J,X),U,2)=I
 | 
|---|
| 41 |  Q
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 | LISTSERV(ORI) ; -- List Consult services from ORSERV
 | 
|---|
| 44 |  N ORSTK,ORCNT,ORX,ORQ
 | 
|---|
| 45 |  W !,"Choose from:" S:$G(ORI)'>0 ORI=1
 | 
|---|
| 46 |  S (ORSTK,ORQ)=0,ORCNT=1,ORSTK(0)=$P(^TMP("GMRCSLIST",$J,ORI),U,3)
 | 
|---|
| 47 |  F  S ORX=$G(^TMP("GMRCSLIST",$J,ORI)) Q:ORX=""  D  Q:ORQ  S ORI=ORI+1
 | 
|---|
| 48 |  . I $P(ORX,U,3)'=+$G(ORSTK(ORSTK)) D POP I ORSTK'>0 S ORQ=1 Q
 | 
|---|
| 49 |  . S ORCNT=ORCNT+1 I ORCNT>(IOSL-6) S:'$$CONT ORQ=1 Q:$G(ORQ)  S ORCNT=1
 | 
|---|
| 50 |  . W !,?((ORSTK*2)),$P(ORX,U,2)
 | 
|---|
| 51 |  . W:$P(ORX,U,5) "  ("_$S($P(ORX,U,5)=1:"Grouper",1:"Tracking")_" Only)"
 | 
|---|
| 52 |  . I $P(ORX,U,4)="+" S ORSTK=ORSTK+1,ORSTK(ORSTK)=+ORX
 | 
|---|
| 53 |  Q
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 | POP ; -- pop stack
 | 
|---|
| 56 |  S ORSTK=ORSTK-1 Q:ORSTK'>0
 | 
|---|
| 57 |  I ORSTK(ORSTK)'=$P(ORX,U,3) G POP
 | 
|---|
| 58 |  Q
 | 
|---|
| 59 |  ;
 | 
|---|
| 60 | CONT() ; -- continue?
 | 
|---|
| 61 |  N X,Y,DIR S DIR(0)="E" D ^DIR
 | 
|---|
| 62 |  Q +Y
 | 
|---|
| 63 |  ;
 | 
|---|
| 64 | CKSERV ; -- Ck service usage in Post-Selection Action
 | 
|---|
| 65 |  N GMRCI,ORI
 | 
|---|
| 66 |  S GMRCI=+$P(^ORD(101.43,+Y,0),U,2)
 | 
|---|
| 67 |  S ORI=+$P($G(^TMP("GMRCS",$J,GMRCI)),U,2) S:ORI'>0 ORI=1
 | 
|---|
| 68 |  I $P($G(^TMP("GMRCSLIST",$J,ORI)),U,5)=1 D LISTSERV^ORCDGMRC(ORI) K DONE
 | 
|---|
| 69 |  Q
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 | PROCSVC ; -- Get list of services for procedure
 | 
|---|
| 72 |  Q:$D(ORDIALOG(PROMPT,"LIST"))  Q:'$L($T(GETSVC^GMRCPR0))
 | 
|---|
| 73 |  N OI,PROTCL,ORY,ORI,X
 | 
|---|
| 74 |  S OI=+$$VAL^ORCD("PROCEDURE"),PROTCL=$P($G(^ORD(101.43,OI,0)),U,2) ;ID
 | 
|---|
| 75 |  D:PROTCL GETSVC^GMRCPR0(.ORY,PROTCL)
 | 
|---|
| 76 |  I $G(ORY)'>0 W $C(7),!,"There are no services defined for this procedure!" H 1 S ORQUIT=1 Q
 | 
|---|
| 77 |  M ORDIALOG(PROMPT,"LIST")=ORY S $P(ORDIALOG(PROMPT,"LIST"),U,2)=1
 | 
|---|
| 78 |  S ORI=0 F  S ORI=$O(ORY(ORI)) Q:ORI'>0  S X=$P(ORY(ORI),U,2),ORDIALOG(PROMPT,"LIST","B",X)=+ORY(ORI)
 | 
|---|
| 79 |  Q
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 | CKPROCSV ; -- Make sure procedure has at least one service
 | 
|---|
| 82 |  N PROT,ORY S PROT=$P($G(^ORD(101.43,+Y,0)),U,2)
 | 
|---|
| 83 |  D GETSVC^GMRCPR0(.ORY,PROT) I $G(ORY)'>0 W $C(7),!,"There are no services defined for this procedure!",! K DONE
 | 
|---|
| 84 |  Q
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 | NWHELP ; -- help code for NW action
 | 
|---|
| 87 |  N X
 | 
|---|
| 88 |  W !!,"Select the type of request you wish to enter, either a consult to a service",!,"or a procedure that may be ordered without a formal consult."
 | 
|---|
| 89 |  W !!,"Press <return> to continue ..." R X:DTIME
 | 
|---|
| 90 |  S X="?" D DISP^XQORM1 W !
 | 
|---|
| 91 |  Q
 | 
|---|
| 92 |  ;
 | 
|---|
| 93 | REASON ; -- Get default Reason for Request text for Service
 | 
|---|
| 94 |  N ORIT,ORSERV,OROOT
 | 
|---|
| 95 |  S ORIT=$G(ORDIALOG($$PTR^ORCD("OR GTX ORDERABLE ITEM"),1))
 | 
|---|
| 96 |  S ORSERV=$P($G(^ORD(101.43,+ORIT,0)),U,2) Q:'ORSERV!(ORSERV["99PRO")
 | 
|---|
| 97 |  S OROOT=$NA(^TMP("ORWORD",$J,PROMPT,INST)) D
 | 
|---|
| 98 |  . N PROMPT,INST,X,Y,DIR,ACTION,REQD,MULT,ITEM,COND ;protect var's
 | 
|---|
| 99 |  . D GETDEF^GMRCDRFR(OROOT,ORSERV,+$G(ORVP),$S($G(ORVP):1,1:0))
 | 
|---|
| 100 |  S:$D(^TMP("ORWORD",$J,PROMPT,INST)) Y=OROOT
 | 
|---|
| 101 |  Q
 | 
|---|
| 102 |  ;
 | 
|---|
| 103 | ENPDX ; -- setup Prov Dx field
 | 
|---|
| 104 |  N CODE
 | 
|---|
| 105 |  S ORPDX=$$PROVDX^GMRCUTL1($S($D(ORPROC):ORPROC,1:$G(ORSERV)))
 | 
|---|
| 106 |  S CODE=$$PTR^ORCD("OR GTX CODE")
 | 
|---|
| 107 |  I $P(ORPDX,U)="S" K ORDIALOG(PROMPT,INST),ORDIALOG(CODE,INST) S COND="I 0" Q
 | 
|---|
| 108 |  S:$G(ORTYPE)'="Z" REQD=$S($P(ORPDX,U)="R":1,1:0)
 | 
|---|
| 109 |  K:$P(ORPDX,U,2)'="L" ORDIALOG(CODE,INST)
 | 
|---|
| 110 |  I $P(ORPDX,U,2)="L" S ORDIALOG(PROMPT,"?")="Select a preliminary diagnosis from the Lexicon, as text or an ICD code." K:'$L($G(ORDIALOG(CODE,INST))) ORDIALOG(PROMPT,INST)
 | 
|---|
| 111 |  I $L($G(ORDIALOG(CODE,INST))),'$$STATCHK^ICDAPIU(ORDIALOG(CODE,INST),DT)  D  ;csv
 | 
|---|
| 112 |  . D EN^DDIOL("The existing diagnosis is associated with an inactive ICD-9 code.")
 | 
|---|
| 113 |  . I $G(REQD) D EN^DDIOL("Another code must be selected before proceeding.")
 | 
|---|
| 114 |  . I '$G(REQD) D EN^DDIOL("If another code is not selected, no code will be saved with the new order.")
 | 
|---|
| 115 |  . D EN^DDIOL(" ")
 | 
|---|
| 116 |  . K ORDIALOG(PROMPT,INST),ORDIALOG(CODE,INST)
 | 
|---|
| 117 |  . S ACTION=$G(ACTION)_"W"
 | 
|---|
| 118 |  Q
 | 
|---|
| 119 |  ;
 | 
|---|
| 120 | LEX ; -- search Lexicon for Prov Dx
 | 
|---|
| 121 |  I $L($G(ORESET)),ORESET=Y Q  ;no change
 | 
|---|
| 122 |  I Y?1." " K DONE W !!,$C(7),"Use of only spaces not allowed!",! Q
 | 
|---|
| 123 |  Q:$P(ORPDX,U,2)'="L"  ;free text only, no ICD code
 | 
|---|
| 124 |  N DIC,DUOUT,DTOUT
 | 
|---|
| 125 |  D CONFIG^LEXSET("ICD","ICD",DT)
 | 
|---|
| 126 |  S DIC="^LEX(757.01,",DIC(0)="EQM",DIC("A")="Provisional Diagnosis: "
 | 
|---|
| 127 |  S:$L($G(ORESET)) DIC("B")=ORESET
 | 
|---|
| 128 |  D ^DIC I Y'>0 D  Q
 | 
|---|
| 129 |  . I $L($G(ORESET)) S ORDIALOG(PROMPT,ORI)=ORESET
 | 
|---|
| 130 |  . E  K ORDIALOG(PROMPT,ORI)
 | 
|---|
| 131 |  . I $D(DTOUT)!$D(DUOUT) S ORQUIT=1 Q
 | 
|---|
| 132 |  . I REQD,'$D(ORDIALOG(PROMPT,ORI)) K DONE W !!,$C(7),$$REQUIRED^ORCDLG1,!
 | 
|---|
| 133 |  S ORDIALOG(PROMPT,ORI)=$P(Y,U,2)
 | 
|---|
| 134 |  S ORDIALOG($$PTR^ORCD("OR GTX CODE"),ORI)=$G(Y(1)) K Y(1)
 | 
|---|
| 135 |  Q
 | 
|---|
| 136 |  ;
 | 
|---|
| 137 | SERVMSG ; -- Get, display text message for service ORSERV
 | 
|---|
| 138 |  Q:'$G(ORSERV)&('$G(ORPROC))  Q:'FIRST  ;show first time only
 | 
|---|
| 139 |  N ORTXT,I,CNT,HDR S HDR=$S($G(ORMENU):5,1:7)
 | 
|---|
| 140 |  D PREREQ^GMRCUTL1("ORTXT",$S($D(ORPROC):ORPROC,1:ORSERV),+ORVP)
 | 
|---|
| 141 |  Q:'$D(ORTXT)
 | 
|---|
| 142 |  I $D(ORPROC) W !!,$$RJ^XLFSTR("** Procedure Pre-requisite **",57)
 | 
|---|
| 143 |  E  W !!,$$RJ^XLFSTR("** Consult Service Pre-requisite **",57)
 | 
|---|
| 144 |  S (I,CNT)=0 F  S I=$O(ORTXT(I)) Q:I'>0  D  Q:$G(ORQUIT)
 | 
|---|
| 145 |  . S CNT=CNT+1 I CNT>(IOSL-HDR) S CNT=0 I '$$CONT S ORQUIT=1 Q
 | 
|---|
| 146 |  . W !,ORTXT(I,0)
 | 
|---|
| 147 |  Q:$G(ORQUIT)  S:'$$CONT ORQUIT=1 W !
 | 
|---|
| 148 |  Q
 | 
|---|