| 1 | ORCDFHO ;SLC/MKB-Utility functions for Outpt FH dialogs ;8/27/03  15:28
 | 
|---|
| 2 |  ;;3.0;ORDER ENTRY/RESULTS REPORTING;**215**;Dec 17, 1997
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | EN ; -- entry action
 | 
|---|
| 5 |  I $$INPT^ORCD W $C(7),!!,"This patient is not an outpatient!" S ORQUIT=1 H 2 Q
 | 
|---|
| 6 |  I '$L($T(EN2^FHWOR8))!'$L($T(DIETLST^FHOMAPI)) W $C(7),!!,"Dietetics v5.5 must be installed to place outpatient diet orders!" S ORQUIT=1 H 2 Q
 | 
|---|
| 7 |  N X S X=$S($G(OREVENT):$$LOC^OREVNTX(OREVENT),1:$G(ORL)) Q:X<1
 | 
|---|
| 8 |  D EN1^FHWOR8(X,.ORPARAM) S ORCAT="O"
 | 
|---|
| 9 |  I $G(ORPARAM(3))'["B" S ORPARAM(3)=$G(ORPARAM(3))_"B" ;bagged meal
 | 
|---|
| 10 |  I $G(OREWRITE) D  ;remove addl diets
 | 
|---|
| 11 |  . N I,P1,P2 S P1=$$PTR("ADDL DIETS"),P2=$$PTR("MEAL DATE")
 | 
|---|
| 12 |  . S I=0 F  S I=$O(ORDIALOG(P1,I)) Q:I<1  K ORDIALOG(P1,I),ORDIALOG(P2,I)
 | 
|---|
| 13 |  Q
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 | EX ; -- exit action
 | 
|---|
| 16 |  K ORPARAM,ORNPO,ORTRAIL,ORDAY,ORDT,ORCAT
 | 
|---|
| 17 |  Q
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 | PTR(X) ; -- Returns ptr value of prompt OR GTX X in Dialog file
 | 
|---|
| 20 |  Q +$O(^ORD(101.41,"AB",$E("OR GTX "_X,1,63),0))
 | 
|---|
| 21 |  ;
 | 
|---|
| 22 | OPDIETS ; -- Get list of diets ok for outpatients
 | 
|---|
| 23 |  Q:$G(ORDIALOG(PROMPT,"LIST"))  N FHDIET,I,X,Y,CNT
 | 
|---|
| 24 |  D DIETLST^FHOMAPI S CNT=0
 | 
|---|
| 25 |  S I=0 F  S I=$O(FHDIET(I)) Q:I<1  D
 | 
|---|
| 26 |  . S Y=FHDIET(I),X=+Y,Y=$P(Y,U,2)
 | 
|---|
| 27 |  . S X=+$O(^ORD(101.43,"ID",X_";99FHD",0))
 | 
|---|
| 28 |  . I X S CNT=CNT+1,ORDIALOG(PROMPT,"LIST",CNT)=X_U_Y,ORDIALOG(PROMPT,"LIST","B",Y)=X
 | 
|---|
| 29 |  S:CNT ORDIALOG(PROMPT,"LIST")=CNT_"^1"
 | 
|---|
| 30 |  Q
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 | ONETIME() ; -- Condition for SCHEDULE
 | 
|---|
| 33 |  N X,Y
 | 
|---|
| 34 |  S Y=$$FTDCOMP^ORCD("END DATE","START DATE",">")
 | 
|---|
| 35 |  S X=$G(ORDIALOG(PROMPT,INST))
 | 
|---|
| 36 |  S:'Y ORDIALOG(PROMPT,INST)="ONCE" I Y,X="ONCE" K ORDIALOG(PROMPT,INST)
 | 
|---|
| 37 |  Q 'Y
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 | TIMES ; -- get existing outpatient meal times
 | 
|---|
| 40 |  Q:$G(ORDIALOG(PROMPT,"LIST"))  D EN2^FHWOR8(+$G(ORVP),"",.ORDT)
 | 
|---|
| 41 |  N I,CNT,X,Y,M S (I,CNT)=0 F  S I=$O(ORDT(I)) Q:I<1  D
 | 
|---|
| 42 |  . S X=ORDT(I),Y=$$FMTE^XLFDT(+X),M=$P(X,U,2)
 | 
|---|
| 43 |  . S Y=Y_"  "_$S(M="B":"Breakfast",M="N":"Noon",M="E":"Evening",1:"")
 | 
|---|
| 44 |  . S X=$TR(X,"^",";"),CNT=CNT+1
 | 
|---|
| 45 |  . S ORDIALOG(PROMPT,"LIST",I)=X_U_Y,ORDIALOG(PROMPT,"LIST","B",Y)=X
 | 
|---|
| 46 |  S:CNT ORDIALOG(PROMPT,"LIST")=CNT_"^1"
 | 
|---|
| 47 |  Q
 | 
|---|
| 48 |  ;
 | 
|---|
| 49 | ENDT ; -- setup START
 | 
|---|
| 50 |  ;S $P(ORDIALOG(PROMPT,0),":",3)="ETX" ;allow time
 | 
|---|
| 51 |  D TIMES I FIRST,$G(ORDIALOG(PROMPT,"LIST")) D LIST^ORCD
 | 
|---|
| 52 |  Q
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 | EXDT(X) ; -- populate E/L T values from START
 | 
|---|
| 55 |  Q:X'[";"  N DATE,MEAL
 | 
|---|
| 56 |  S DATE=+X,MEAL=$P(X,";",2)
 | 
|---|
| 57 |  S ORDIALOG(PROMPT,INST)=DATE,ORDIALOG($$PTR("STOP DATE"),1)=DATE
 | 
|---|
| 58 |  S ORDIALOG($$PTR("MEAL"),1)=MEAL
 | 
|---|
| 59 |  Q
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 | MEALTIME(IFN) ; -- gets meal time for order IFN [from STARTDT^ORCSAVE2]
 | 
|---|
| 62 |  N ORPARAM,ORLOC,X,Y S IFN=+$G(IFN)
 | 
|---|
| 63 |  S ORLOC=$S($G(ORL):ORL,1:$P($G(^OR(100,IFN,0)),U,10))
 | 
|---|
| 64 |  D EN1^FHWOR8(ORLOC,.ORPARAM) S X=$$VALUE^ORCSAVE2(IFN,"MEAL")
 | 
|---|
| 65 |  S:'$D(ORPARAM(2)) ORPARAM(2)="^^^^^^6:00A^12:00P^6:00P"
 | 
|---|
| 66 |  S Y=$S(X="B":$P(ORPARAM(2),U,7),X="N":$P(ORPARAM(2),U,8),X="E":$P(ORPARAM(2),U,9),1:"")
 | 
|---|
| 67 |  Q Y
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 | CKMEAL(Y,DAY,MEAL,LOC) ; -- Returns Y if valid mealtime or not
 | 
|---|
| 70 |  ;   Y = 0^msg if invalid
 | 
|---|
| 71 |  ;       1     if valid
 | 
|---|
| 72 |  ;       2     if valid, but latetray will be needed
 | 
|---|
| 73 |  ; RPC = ORCDFHO CKMEAL
 | 
|---|
| 74 |  ;
 | 
|---|
| 75 |  N TIMES,NOW,BEGIN,LATE S Y=1 Q:$G(ORTYPE)="Z"
 | 
|---|
| 76 |  S DAY=$$FMDATE($G(DAY)) I DAY<0 S Y="0^Invalid date." Q
 | 
|---|
| 77 |  Q:DAY>DT  I DAY<DT S Y="0^Cannot order for past days." Q
 | 
|---|
| 78 |  I "^B^N^E^"'[(U_$G(MEAL)_U) S Y="0^Invalid meal." Q
 | 
|---|
| 79 |  S TIMES=$G(ORPARAM(2)),NOW="."_$P($$NOW^XLFDT,".",2)
 | 
|---|
| 80 |  I TIMES="" D  Q:Y<1  ;get meal times for location
 | 
|---|
| 81 |  . I '$G(LOC) S Y="0^Missing or invalid location." Q
 | 
|---|
| 82 |  . N ORPARAM D EN1^FHWOR8(LOC,.ORPARAM)
 | 
|---|
| 83 |  . S TIMES=$G(ORPARAM(2))
 | 
|---|
| 84 |  I TIMES="" S Y="0^No meal times defined for this location." Q
 | 
|---|
| 85 |  S BEGIN=$P(TIMES,U,$S(MEAL="B":7,MEAL="N":8,1:9)) Q:NOW<$$FMTIME(BEGIN)
 | 
|---|
| 86 |  S LATE="."_$P(TIMES,U,$S(MEAL="B":2,MEAL="N":4,1:6)) ;late alarm end
 | 
|---|
| 87 |  I NOW>LATE S Y="0^This meal can no longer be ordered today." Q
 | 
|---|
| 88 |  S LATE="."_$P(TIMES,U,$S(MEAL="B":1,MEAL="N":3,1:5)) ;late alarm start
 | 
|---|
| 89 |  S:NOW>LATE Y=2 ;within alarm window for late tray, else ok
 | 
|---|
| 90 |  Q
 | 
|---|
| 91 |  ;
 | 
|---|
| 92 | FMDATE(X) ; -- Ensure X is in FM date format, return day only
 | 
|---|
| 93 |  N Y,%DT S %DT="TX" D ^%DT
 | 
|---|
| 94 |  Q $P(Y,".")
 | 
|---|
| 95 |  ;
 | 
|---|
| 96 | FMTIME(X) ; -- Returns FM format of time
 | 
|---|
| 97 |  N Y,%DT S %DT="TX" D ^%DT
 | 
|---|
| 98 |  Q "."_$P(Y,".",2)
 | 
|---|
| 99 |  ;
 | 
|---|
| 100 | LATETRAY ; -- Check if latetray is needed, if so place order [from VALID^ORCSIGN]
 | 
|---|
| 101 |  ;     Expects ORIFN, ORL, ORVP
 | 
|---|
| 102 |  ;     Returns ORES(orifn;1)="" of new latetray order
 | 
|---|
| 103 |  Q:'$G(ORIFN)  Q:$E($$VALUE^ORX8(ORIFN,"ORDERABLE",1,"E"),1,3)="NPO"
 | 
|---|
| 104 |  N X,Y,%DT,ORDATE,ORNP
 | 
|---|
| 105 |  S X=$O(^OR(100,ORIFN,4.5,"ID","START",0)),X=$G(^OR(100,ORIFN,4.5,+X,1))
 | 
|---|
| 106 |  Q:X=""  S %DT="TX" D ^%DT Q:Y'>0  Q:$P(Y,".")>DT  ;invalid or future
 | 
|---|
| 107 |  S ORDATE=$P(Y,"."),ORNP=$P(^OR(100,ORIFN,0),U,4)
 | 
|---|
| 108 | LTRAY ; -- enter here w/ORDATE,ORNP,ORL [reinstated diet after dc'ing NPO]
 | 
|---|
| 109 |  N ORPARAM,ORMEAL,ORTRAY,ORTIME,ORSTRT,Y,I
 | 
|---|
| 110 |  D EN1^FHWOR8(ORL,.ORPARAM) Q:'$D(ORPARAM(2))
 | 
|---|
| 111 |  S I=$O(^OR(100,ORIFN,4.5,"ID","MEAL",0)),ORMEAL=$G(^OR(100,ORIFN,4.5,+I,1))
 | 
|---|
| 112 |  D CKMEAL(.Y,ORDATE,ORMEAL) Q:Y'=2  ;no late tray needed
 | 
|---|
| 113 |  S ORTRAY=+$O(^ORD(101.43,"S.E/L T","LATE TRAY",0))
 | 
|---|
| 114 |  S ORSTRT=+$E($P($$NOW^XLFDT,".",2)_"0000",1,4) D EN2^ORCDFH
 | 
|---|
| 115 |  F I=1:1:3 S Z=$G(ORTIME(ORTRAY,ORMEAL,I)) I Z S Z=$$FMTIME($P(Z,U)),Z=+$E($P(Z,".",2)_"0000",1,4) I Z>ORSTRT S OK=1 Q
 | 
|---|
| 116 |  Q:'$G(OK)  Q:'$$ORDTRAY^ORCDFH(ORMEAL)  ;Else, cont w/late tray order
 | 
|---|
| 117 | LT1 N ORIFN,ORDIALOG,ORDG,ORTYPE,ORCHECK,ORQUIT,ORDUZ,ORLOG,ORCAT,SEQ,DA,FIRST
 | 
|---|
| 118 |  S ORDIALOG=$O(^ORD(101.41,"AB","FHW2",0)) Q:'ORDIALOG
 | 
|---|
| 119 |  S ORTYPE="D",FIRST=1,ORDUZ=DUZ,ORLOG=+$E($$NOW^XLFDT,1,12),ORCAT="O"
 | 
|---|
| 120 |  D GETDLG^ORCD(ORDIALOG) S ORDIALOG($$PTR^ORCD("OR GTX MEAL"),1)=ORMEAL
 | 
|---|
| 121 |  S ORDIALOG($$PTR^ORCD("OR GTX ORDERABLE ITEM"),1)=ORTRAY
 | 
|---|
| 122 |  S ORDIALOG($$PTR^ORCD("OR GTX START DATE"),1)=ORDATE,ORDIALOG($$PTR^ORCD("OR GTX STOP DATE"),1)=ORDATE
 | 
|---|
| 123 |  F SEQ=6,7 S DA=$O(^ORD(101.41,+ORDIALOG,10,"B",SEQ,0)) Q:'DA  D EN^ORCDLG1(DA) Q:$G(ORQUIT)  ; prompt for meal time, bagged meal
 | 
|---|
| 124 |  I $G(ORQUIT) W $C(7),!!,"No late tray ordered!",! H 2 Q
 | 
|---|
| 125 |  D EN^ORCSAVE Q:'$G(ORIFN)  S ORES(ORIFN_";1")=""
 | 
|---|
| 126 |  W !?10,"... order placed.",!
 | 
|---|
| 127 |  Q
 | 
|---|