- ORWDPS ; SLC/KCM - Pharmacy Calls for Windows Dialog [ 08/04/96 6:57 PM ]
- ;;3.0;ORDER ENTRY/RESULTS REPORTING;;Dec 17, 1997
- ;
- LOAD(LST,OI,PTYP) ;
- ; -- For a given orderable item, load appropriate lists & defaults
- N I,X,CNT,ORTMP,ILST S ILST=0
- S LST($$NXT)="~FORMULTN" D FRMLTN
- S LST($$NXT)="~INSTRUCT" D INSTRCT
- S LST($$NXT)="~ROUTE" D ROUTE
- S LST($$NXT)="~SCHEDULE" D SCHED
- S LST($$NXT)="~PRIORITY" D PRIOR
- S LST($$NXT)="~MESSAGE" D MESSAGE
- I PTYP="O" D
- . S LST($$NXT)="~PICKUP" D PICKUP
- . S LST($$NXT)="~SCSTATUS" D SCSTS
- . S LST($$NXT)="~REFILLS" D REFILLS
- Q
- DISPDRUG(LST,OI) ; list dispense drugs for an orderable item
- N ILST,PTYP S ILST=0,PTYP="U" D FRMLTN
- Q
- FRMLTN ; formulations
- D ENDD^PSJORUTL("^^^"_+$P($G(^ORD(101.43,OI,0)),"^",2),PTYP,.ORTMP)
- S I="" F S I=$O(ORTMP(I)) Q:I="" S LST($$NXT)="i"_ORTMP(I)
- Q
- INSTRCT ; instructions
- D ^PSSJORDF(+$P(^ORD(101.43,OI,0),U,2))
- S I="" F S I=$O(^TMP("PSJINS",$J,I)) Q:I="" S X=^(I) D
- . I PTYP="U",$P(X,U,1)="TAKE" S $P(X,U,1)="GIVE"
- . S LST($$NXT)="i"_$P(X,U,2)_U_$P(X,U,1)_" "_$P(X,U,2)
- ; S I=$O(^TMP("PSJINS",$J,0)) (default instruction text)
- ; I I S X=$P($G(^TMP("PSJINS",$J,I)),U) S:$L(X) LST($$NXT)="d"_X_" "
- Q
- ROUTE ; routes
- S I="",CNT=0
- F S I=$O(^TMP("PSJMR",$J,I)) Q:I="" D
- . S LST($$NXT)="i"_I_U_^(I),CNT=CNT+1
- I CNT=1 S X=LST(ILST),LST($$NXT)="d"_$P(X,"^",3)
- K ^TMP("PSJINS",$J),^TMP("PSJMR",$J)
- Q
- SCHED ; schedules
- S I="" F S I=$O(^PS(51.1,"APPSJ",I)) Q:I="" D
- . S LST($$NXT)="i"_$O(^(I,0))_U_I
- Q
- PRIOR ; priorities
- F X="ROUTINE","ASAP","STAT","DONE" D
- . S LST($$NXT)="i"_$O(^ORD(101.42,"B",X,0))_U_X
- S LST($$NXT)="dROUTINE"
- Q
- PICKUP ; routing
- F X="W^at Window","M^by Mail","C^in Clinic" S LST($$NXT)="i"_X
- S LST($$NXT)="dat Window"
- Q
- SCSTS ; SC for drug
- F X="0^No","1^Yes" S LST($$NXT)="i"_X
- ; later: see if last order for this OI was SC and set default
- Q
- REFILLS ; refills
- F X=0:1:11 S LST($$NXT)="i"_X_U_X
- S LST($$NXT)="d0"
- Q
- MESSAGE ; message
- S I=0 F S I=$O(^ORD(101.43,OI,8,I)) Q:I'>0 S LST($$NXT)="i"_^(I,0)
- Q
- NXT() ; -- Function returns next available index in return data array
- S ILST=ILST+1
- Q ILST
- DEF(LST,INOUT) ; Load defaults for pharmacy dialogs (common lists)
- N TMPLST,IEN,I,X,ILST S ILST=0
- S LST($$NXT)="~Common" D COMMON
- Q
- COMMON ; get list of common meds
- S X="ORWD COMMON MED "_$S($G(INOUT)="O":"OUTPT",1:"INPT")
- D GETLST^XPAR(.TMPLST,"ALL",X)
- S I=0 F S I=$O(TMPLST(I)) Q:'I D
- . S IEN=$P(TMPLST(I),U,2)
- . S LST($$NXT)="i"_IEN_U_$P(^ORD(101.43,IEN,0),U,1)
- Q
- INPT(OK,DFN,PRV) ; For inpatient meds, check restrictions
- N NAME,AUTH,INACT,X S OK=0
- I '$D(^DPT(DFN,.1)) S OK="1^Patient is not an inpatient." Q
- S NAME=$P($G(^VA(200,PRV,20)),U,2) S:'$L(NAME) NAME=$P(^(0),U)
- S X=$G(^VA(200,PRV,"PS")),AUTH=$P(X,U),INACT=$P(X,U,4)
- I 'AUTH!(INACT&(DT>INACT)) D
- . S OK="1^"_NAME_" is not authorized to write medication orders."
- Q
- OUTPT(OK,PRV) ; For outpatient meds, check restrictions
- N NAME,AUTH,INACT,X S OK=0
- S NAME=$P($G(^VA(200,PRV,20)),U,2) S:'$L(NAME) NAME=$P(^(0),U)
- S X=$G(^VA(200,PRV,"PS")),AUTH=$P(X,U),INACT=$P(X,U,4)
- I 'AUTH!(INACT&(DT>INACT)) D
- . S OK="1^"_NAME_" is not authorized to write medication orders."
- Q
- ORWDPS ; SLC/KCM - Pharmacy Calls for Windows Dialog [ 08/04/96 6:57 PM ]
- +1 ;;3.0;ORDER ENTRY/RESULTS REPORTING;;Dec 17, 1997
- +2 ;
- LOAD(LST,OI,PTYP) ;
- +1 ; -- For a given orderable item, load appropriate lists & defaults
- +2 NEW I,X,CNT,ORTMP,ILST
- SET ILST=0
- +3 SET LST($$NXT)="~FORMULTN"
- DO FRMLTN
- +4 SET LST($$NXT)="~INSTRUCT"
- DO INSTRCT
- +5 SET LST($$NXT)="~ROUTE"
- DO ROUTE
- +6 SET LST($$NXT)="~SCHEDULE"
- DO SCHED
- +7 SET LST($$NXT)="~PRIORITY"
- DO PRIOR
- +8 SET LST($$NXT)="~MESSAGE"
- DO MESSAGE
- +9 IF PTYP="O"
- Begin DoDot:1
- +10 SET LST($$NXT)="~PICKUP"
- DO PICKUP
- +11 SET LST($$NXT)="~SCSTATUS"
- DO SCSTS
- +12 SET LST($$NXT)="~REFILLS"
- DO REFILLS
- End DoDot:1
- +13 QUIT
- DISPDRUG(LST,OI) ; list dispense drugs for an orderable item
- +1 NEW ILST,PTYP
- SET ILST=0
- SET PTYP="U"
- DO FRMLTN
- +2 QUIT
- FRMLTN ; formulations
- +1 DO ENDD^PSJORUTL("^^^"_+$PIECE($GET(^ORD(101.43,OI,0)),"^",2),PTYP,.ORTMP)
- +2 SET I=""
- FOR
- SET I=$ORDER(ORTMP(I))
- IF I=""
- QUIT
- SET LST($$NXT)="i"_ORTMP(I)
- +3 QUIT
- INSTRCT ; instructions
- +1 DO ^PSSJORDF(+$PIECE(^ORD(101.43,OI,0),U,2))
- +2 SET I=""
- FOR
- SET I=$ORDER(^TMP("PSJINS",$JOB,I))
- IF I=""
- QUIT
- SET X=^(I)
- Begin DoDot:1
- +3 IF PTYP="U"
- IF $PIECE(X,U,1)="TAKE"
- SET $PIECE(X,U,1)="GIVE"
- +4 SET LST($$NXT)="i"_$P(X,U,2)_U_$PIECE(X,U,1)_" "_$PIECE(X,U,2)
- End DoDot:1
- +5 ; S I=$O(^TMP("PSJINS",$J,0)) (default instruction text)
- +6 ; I I S X=$P($G(^TMP("PSJINS",$J,I)),U) S:$L(X) LST($$NXT)="d"_X_" "
- +7 QUIT
- ROUTE ; routes
- +1 SET I=""
- SET CNT=0
- +2 FOR
- SET I=$ORDER(^TMP("PSJMR",$JOB,I))
- IF I=""
- QUIT
- Begin DoDot:1
- +3 SET LST($$NXT)="i"_I_U_^(I)
- SET CNT=CNT+1
- End DoDot:1
- +4 IF CNT=1
- SET X=LST(ILST)
- SET LST($$NXT)="d"_$P(X,"^",3)
- +5 KILL ^TMP("PSJINS",$JOB),^TMP("PSJMR",$JOB)
- +6 QUIT
- SCHED ; schedules
- +1 SET I=""
- FOR
- SET I=$ORDER(^PS(51.1,"APPSJ",I))
- IF I=""
- QUIT
- Begin DoDot:1
- +2 SET LST($$NXT)="i"_$O(^(I,0))_U_I
- End DoDot:1
- +3 QUIT
- PRIOR ; priorities
- +1 FOR X="ROUTINE","ASAP","STAT","DONE"
- Begin DoDot:1
- +2 SET LST($$NXT)="i"_$O(^ORD(101.42,"B",X,0))_U_X
- End DoDot:1
- +3 SET LST($$NXT)="dROUTINE"
- +4 QUIT
- PICKUP ; routing
- +1 FOR X="W^at Window","M^by Mail","C^in Clinic"
- SET LST($$NXT)="i"_X
- +2 SET LST($$NXT)="dat Window"
- +3 QUIT
- SCSTS ; SC for drug
- +1 FOR X="0^No","1^Yes"
- SET LST($$NXT)="i"_X
- +2 ; later: see if last order for this OI was SC and set default
- +3 QUIT
- REFILLS ; refills
- +1 FOR X=0:1:11
- SET LST($$NXT)="i"_X_U_X
- +2 SET LST($$NXT)="d0"
- +3 QUIT
- MESSAGE ; message
- +1 SET I=0
- FOR
- SET I=$ORDER(^ORD(101.43,OI,8,I))
- IF I'>0
- QUIT
- SET LST($$NXT)="i"_^(I,0)
- +2 QUIT
- NXT() ; -- Function returns next available index in return data array
- +1 SET ILST=ILST+1
- +2 QUIT ILST
- DEF(LST,INOUT) ; Load defaults for pharmacy dialogs (common lists)
- +1 NEW TMPLST,IEN,I,X,ILST
- SET ILST=0
- +2 SET LST($$NXT)="~Common"
- DO COMMON
- +3 QUIT
- COMMON ; get list of common meds
- +1 SET X="ORWD COMMON MED "_$SELECT($GET(INOUT)="O":"OUTPT",1:"INPT")
- +2 DO GETLST^XPAR(.TMPLST,"ALL",X)
- +3 SET I=0
- FOR
- SET I=$ORDER(TMPLST(I))
- IF 'I
- QUIT
- Begin DoDot:1
- +4 SET IEN=$PIECE(TMPLST(I),U,2)
- +5 SET LST($$NXT)="i"_IEN_U_$P(^ORD(101.43,IEN,0),U,1)
- End DoDot:1
- +6 QUIT
- INPT(OK,DFN,PRV) ; For inpatient meds, check restrictions
- +1 NEW NAME,AUTH,INACT,X
- SET OK=0
- +2 IF '$DATA(^DPT(DFN,.1))
- SET OK="1^Patient is not an inpatient."
- QUIT
- +3 SET NAME=$PIECE($GET(^VA(200,PRV,20)),U,2)
- IF '$LENGTH(NAME)
- SET NAME=$PIECE(^(0),U)
- +4 SET X=$GET(^VA(200,PRV,"PS"))
- SET AUTH=$PIECE(X,U)
- SET INACT=$PIECE(X,U,4)
- +5 IF 'AUTH!(INACT&(DT>INACT))
- Begin DoDot:1
- +6 SET OK="1^"_NAME_" is not authorized to write medication orders."
- End DoDot:1
- +7 QUIT
- OUTPT(OK,PRV) ; For outpatient meds, check restrictions
- +1 NEW NAME,AUTH,INACT,X
- SET OK=0
- +2 SET NAME=$PIECE($GET(^VA(200,PRV,20)),U,2)
- IF '$LENGTH(NAME)
- SET NAME=$PIECE(^(0),U)
- +3 SET X=$GET(^VA(200,PRV,"PS"))
- SET AUTH=$PIECE(X,U)
- SET INACT=$PIECE(X,U,4)
- +4 IF 'AUTH!(INACT&(DT>INACT))
- Begin DoDot:1
- +5 SET OK="1^"_NAME_" is not authorized to write medication orders."
- End DoDot:1
- +6 QUIT