- PXRMSTA2 ; SLC/AGP - Routines for building status list. ;12/19/2012
- ;;2.0;CLINICAL REMINDERS;**4,6,26**;Feb 04, 2005;Build 404
- ;
- ARRAYFOR(ARRAY,OUTPUT,DEF) ;
- ;Format the data array into a standard format
- N CNT,COMP,PIECE,STR,TYPE
- S PIECE=0
- ;Determine the number of pieces minus one in the string
- F CNT=1:1:$L(ARRAY("POINTER")) I $E(ARRAY("POINTER"),CNT)=";" S PIECE=PIECE+1 I PIECE>0 D
- . S STR=$P($P($G(ARRAY("POINTER")),";",PIECE),":",2)
- . S OUTPUT($P($P($G(ARRAY("POINTER")),";",PIECE),":",2))=STR_U_$G(DEF)
- ;
- ;Add last piece in the string to the array
- I PIECE>0 S PIECE=PIECE+1 D
- . I $P($G(ARRAY("POINTER")),";",PIECE)'="" D
- .. S OUTPUT($P($P($G(ARRAY("POINTER")),";",PIECE),":",2))=$P($P($G(ARRAY("POINTER")),";",PIECE),":",2)_U_$G(DEF)
- Q
- ;
- COMPARE(ARRAY,ARRAY1,TYPE,OUTPUT) ;
- ;This sub routine is used to combine both Pharmacy types into one array
- N ARY,CNT,COMP,NODE
- K OUTPUT
- S COMP=""
- ;
- ;Inpatient pharmacy list is built from two separated fields in file #55
- ;this is used to combine the two fields into one array
- I $G(TYPE)="I" D
- . F S COMP=$O(ARRAY(COMP)) Q:COMP="" S OUTPUT(COMP)=ARRAY(COMP)
- . S (COMP)="" F S COMP=$O(ARRAY1(COMP)) Q:COMP="" I '$D(OUTPUT(COMP)) S OUTPUT(COMP)=ARRAY1(COMP)
- ;
- ;This section combines the different RX Types into one array
- I $G(TYPE)'="I" D
- . F S COMP=$O(ARRAY(COMP)) Q:COMP="" D
- .. S NODE=$G(ARRAY(COMP))
- .. S OUTPUT(COMP)=NODE
- . S COMP="" F S COMP=$O(ARRAY1(COMP)) Q:COMP="" D
- .. S NODE=$G(ARRAY1(COMP))
- .. I '$D(OUTPUT(COMP)) S OUTPUT(COMP)=NODE Q
- .. I $D(OUTPUT(COMP)) S $P(OUTPUT(COMP),U,2)=$P(OUTPUT(COMP),U,2)_$P(NODE,U,2)
- Q
- ;
- DATA(FILE,DA,TYPE,RXTYPE,STATUS) ;
- ;Get the list of statuses from the appopriate global
- N ARRAY,ARRAY1,CNT,CODE,DEF,OUTPUT,SARRAY,STAT
- LOOP ;
- ;Get build status list into a local array from each pharmacy type of
- ;finding item
- I TYPE="DRUG" D
- . I $D(RXTYPE("I"))>0 D
- ..;DBIA #4928
- .. D STATUS^PSS55MIS(55.06,28,"SARRAY")
- .. D ARRAYFOR(.SARRAY,.ARRAY,"I") K CODE
- .. D STATUS^PSS55MIS(55.01,100,"SARRAY")
- .. D ARRAYFOR(.SARRAY,.ARRAY1,"I") K CODE
- .. D COMPARE(.ARRAY,.ARRAY1,"I",.OUTPUT)
- . I $D(RXTYPE("O"))>0 D
- .. K ARRAY,ARRAY1,CODE
- ..;DBIA #4848
- .. D STATUS^PSODI(52,100,"SARRAY")
- .. D ARRAYFOR(.SARRAY,.ARRAY,"O") K CODE
- .. I $D(OUTPUT)>0 K ARRAY1 M ARRAY1=OUTPUT K OUTPUT D COMPARE(.ARRAY,.ARRAY1,"",.OUTPUT)
- .. E M OUTPUT=ARRAY
- . I $D(RXTYPE("N"))>0 D
- .. K ARRAY,ARRAY1,CODE
- .. D STATUS^PSS55MIS(55.05,5,"SARRAY")
- .. S SARRAY("POINTER")=SARRAY("POINTER")_"0:ACTIVE;"
- .. D ARRAYFOR(.SARRAY,.ARRAY,"N") K CODE
- .. I $D(OUTPUT)>0 K ARRAY1 M ARRAY1=OUTPUT K OUTPUT D COMPARE(.ARRAY,.ARRAY1,"",.OUTPUT)
- .. E M OUTPUT=ARRAY
- ;
- I TYPE="PROB" S OUTPUT("ACTIVE")="ACTIVE",OUTPUT("INACTIVE")="INACTIVE"
- I TYPE="ORD(101.43," D
- .;DBIA #??
- . S CNT=0,STAT="" F S STAT=$O(^ORD(100.01,"B",STAT)) Q:STAT="" D
- .. S CNT=CNT+1 S OUTPUT(STAT)=STAT
- I TYPE="RAMIS(71,"!(TYPE="TAX") D
- . S TYPE="RAMIS(71,"
- .;DBIA #996
- . S CNT=0,STAT="" F S STAT=$O(^RA(72,"B",STAT)) Q:STAT="" D
- .. S CNT=CNT+1 S OUTPUT(STAT)=STAT
- D SELECT(.OUTPUT,FILE,TYPE,.STATUS,.DA)
- Q
- ;
- SELECT(ARRAY,FILE,TYPE,STATUS,DA) ;
- ;Sort through the formated array and set up the DIR call
- N CHECK,CNT,CNT1,DIR,DUOUT,DTOUT,EMPTY,EXTR
- N HELP,LENGTH,NODE,STAT,STR,TEXT,TMP,X,Y
- N TMPARR,NUM
- DISPLAY ;
- I TYPE="DRUG" S TEXT="Select a Medication Status or enter '^' to Quit",HELP="Select a status from the Medication Status list or '^' to Quit"
- I TYPE="ORD(101.43," S TEXT="Select a Order Status from or enter '^' to Quit",HELP="Select a Order Status from the status list or '^' to Quit"
- I TYPE="RAMIS(71," S TEXT="Select a Radiology Procedure Status or enter '^' to Quit",HELP="Select a Radiology Procedure Status from the status list or '^' to Quit"
- ;
- S CNT=0,CNT1=0,STAT=""
- ;If text is not entered into the prompt or no match is found display
- ;entire list of statuses for this finding item
- ;
- ;Add wildcard character
- S CNT=CNT+1,CNT1=CNT1+1,TMP(CNT)=CNT_" - * (WildCard)",TMPARR(CNT)="*"
- ;Add status from file to the selectable list
- F S STAT=$O(ARRAY(STAT)) Q:STAT="" D
- . S NODE=$G(ARRAY(STAT))
- . S STR=$P(NODE,U)
- . S CNT=CNT+1,CNT1=CNT1+1
- . I TYPE="DRUG" S TMP(CNT)=CNT_" - "_STR_"("_$P(NODE,U,2)_")",TMPARR(CNT)=STR
- . E S TMP(CNT)=CNT_" - "_STR,TMPARR(CNT)=STR
- ;
- S DIR(0)="LO^1:"_CNT_""
- M DIR("A")=TMP
- S DIR("A")=TEXT
- S DIR("?")=HELP
- D ^DIR
- I $D(DTOUT)!($D(DUOUT))!($G(Y)="") K STATUS Q
- S CNT=0 F X=1:1:$L(Y(0)) D
- .I $E(Y(0),X)="," S CNT=CNT+1,NUM=$P(Y(0),",",CNT),STATUS(TMPARR(NUM))=""
- Q
- ;
- PXRMSTA2 ; SLC/AGP - Routines for building status list. ;12/19/2012
- +1 ;;2.0;CLINICAL REMINDERS;**4,6,26**;Feb 04, 2005;Build 404
- +2 ;
- ARRAYFOR(ARRAY,OUTPUT,DEF) ;
- +1 ;Format the data array into a standard format
- +2 NEW CNT,COMP,PIECE,STR,TYPE
- +3 SET PIECE=0
- +4 ;Determine the number of pieces minus one in the string
- +5 FOR CNT=1:1:$LENGTH(ARRAY("POINTER"))
- IF $EXTRACT(ARRAY("POINTER"),CNT)=";"
- SET PIECE=PIECE+1
- IF PIECE>0
- Begin DoDot:1
- +6 SET STR=$PIECE($PIECE($GET(ARRAY("POINTER")),";",PIECE),":",2)
- +7 SET OUTPUT($PIECE($PIECE($GET(ARRAY("POINTER")),";",PIECE),":",2))=STR_U_$GET(DEF)
- End DoDot:1
- +8 ;
- +9 ;Add last piece in the string to the array
- +10 IF PIECE>0
- SET PIECE=PIECE+1
- Begin DoDot:1
- +11 IF $PIECE($GET(ARRAY("POINTER")),";",PIECE)'=""
- Begin DoDot:2
- +12 SET OUTPUT($PIECE($PIECE($GET(ARRAY("POINTER")),";",PIECE),":",2))=$PIECE($PIECE($GET(ARRAY("POINTER")),";",PIECE),":",2)_U_$GET(DEF)
- End DoDot:2
- End DoDot:1
- +13 QUIT
- +14 ;
- COMPARE(ARRAY,ARRAY1,TYPE,OUTPUT) ;
- +1 ;This sub routine is used to combine both Pharmacy types into one array
- +2 NEW ARY,CNT,COMP,NODE
- +3 KILL OUTPUT
- +4 SET COMP=""
- +5 ;
- +6 ;Inpatient pharmacy list is built from two separated fields in file #55
- +7 ;this is used to combine the two fields into one array
- +8 IF $GET(TYPE)="I"
- Begin DoDot:1
- +9 FOR
- SET COMP=$ORDER(ARRAY(COMP))
- IF COMP=""
- QUIT
- SET OUTPUT(COMP)=ARRAY(COMP)
- +10 SET (COMP)=""
- FOR
- SET COMP=$ORDER(ARRAY1(COMP))
- IF COMP=""
- QUIT
- IF '$DATA(OUTPUT(COMP))
- SET OUTPUT(COMP)=ARRAY1(COMP)
- End DoDot:1
- +11 ;
- +12 ;This section combines the different RX Types into one array
- +13 IF $GET(TYPE)'="I"
- Begin DoDot:1
- +14 FOR
- SET COMP=$ORDER(ARRAY(COMP))
- IF COMP=""
- QUIT
- Begin DoDot:2
- +15 SET NODE=$GET(ARRAY(COMP))
- +16 SET OUTPUT(COMP)=NODE
- End DoDot:2
- +17 SET COMP=""
- FOR
- SET COMP=$ORDER(ARRAY1(COMP))
- IF COMP=""
- QUIT
- Begin DoDot:2
- +18 SET NODE=$GET(ARRAY1(COMP))
- +19 IF '$DATA(OUTPUT(COMP))
- SET OUTPUT(COMP)=NODE
- QUIT
- +20 IF $DATA(OUTPUT(COMP))
- SET $PIECE(OUTPUT(COMP),U,2)=$PIECE(OUTPUT(COMP),U,2)_$PIECE(NODE,U,2)
- End DoDot:2
- End DoDot:1
- +21 QUIT
- +22 ;
- DATA(FILE,DA,TYPE,RXTYPE,STATUS) ;
- +1 ;Get the list of statuses from the appopriate global
- +2 NEW ARRAY,ARRAY1,CNT,CODE,DEF,OUTPUT,SARRAY,STAT
- LOOP ;
- +1 ;Get build status list into a local array from each pharmacy type of
- +2 ;finding item
- +3 IF TYPE="DRUG"
- Begin DoDot:1
- +4 IF $DATA(RXTYPE("I"))>0
- Begin DoDot:2
- +5 ;DBIA #4928
- +6 DO STATUS^PSS55MIS(55.06,28,"SARRAY")
- +7 DO ARRAYFOR(.SARRAY,.ARRAY,"I")
- KILL CODE
- +8 DO STATUS^PSS55MIS(55.01,100,"SARRAY")
- +9 DO ARRAYFOR(.SARRAY,.ARRAY1,"I")
- KILL CODE
- +10 DO COMPARE(.ARRAY,.ARRAY1,"I",.OUTPUT)
- End DoDot:2
- +11 IF $DATA(RXTYPE("O"))>0
- Begin DoDot:2
- +12 KILL ARRAY,ARRAY1,CODE
- +13 ;DBIA #4848
- +14 DO STATUS^PSODI(52,100,"SARRAY")
- +15 DO ARRAYFOR(.SARRAY,.ARRAY,"O")
- KILL CODE
- +16 IF $DATA(OUTPUT)>0
- KILL ARRAY1
- MERGE ARRAY1=OUTPUT
- KILL OUTPUT
- DO COMPARE(.ARRAY,.ARRAY1,"",.OUTPUT)
- +17 IF '$TEST
- MERGE OUTPUT=ARRAY
- End DoDot:2
- +18 IF $DATA(RXTYPE("N"))>0
- Begin DoDot:2
- +19 KILL ARRAY,ARRAY1,CODE
- +20 DO STATUS^PSS55MIS(55.05,5,"SARRAY")
- +21 SET SARRAY("POINTER")=SARRAY("POINTER")_"0:ACTIVE;"
- +22 DO ARRAYFOR(.SARRAY,.ARRAY,"N")
- KILL CODE
- +23 IF $DATA(OUTPUT)>0
- KILL ARRAY1
- MERGE ARRAY1=OUTPUT
- KILL OUTPUT
- DO COMPARE(.ARRAY,.ARRAY1,"",.OUTPUT)
- +24 IF '$TEST
- MERGE OUTPUT=ARRAY
- End DoDot:2
- End DoDot:1
- +25 ;
- +26 IF TYPE="PROB"
- SET OUTPUT("ACTIVE")="ACTIVE"
- SET OUTPUT("INACTIVE")="INACTIVE"
- +27 IF TYPE="ORD(101.43,"
- Begin DoDot:1
- +28 ;DBIA #??
- +29 SET CNT=0
- SET STAT=""
- FOR
- SET STAT=$ORDER(^ORD(100.01,"B",STAT))
- IF STAT=""
- QUIT
- Begin DoDot:2
- +30 SET CNT=CNT+1
- SET OUTPUT(STAT)=STAT
- End DoDot:2
- End DoDot:1
- +31 IF TYPE="RAMIS(71,"!(TYPE="TAX")
- Begin DoDot:1
- +32 SET TYPE="RAMIS(71,"
- +33 ;DBIA #996
- +34 SET CNT=0
- SET STAT=""
- FOR
- SET STAT=$ORDER(^RA(72,"B",STAT))
- IF STAT=""
- QUIT
- Begin DoDot:2
- +35 SET CNT=CNT+1
- SET OUTPUT(STAT)=STAT
- End DoDot:2
- End DoDot:1
- +36 DO SELECT(.OUTPUT,FILE,TYPE,.STATUS,.DA)
- +37 QUIT
- +38 ;
- SELECT(ARRAY,FILE,TYPE,STATUS,DA) ;
- +1 ;Sort through the formated array and set up the DIR call
- +2 NEW CHECK,CNT,CNT1,DIR,DUOUT,DTOUT,EMPTY,EXTR
- +3 NEW HELP,LENGTH,NODE,STAT,STR,TEXT,TMP,X,Y
- +4 NEW TMPARR,NUM
- DISPLAY ;
- +1 IF TYPE="DRUG"
- SET TEXT="Select a Medication Status or enter '^' to Quit"
- SET HELP="Select a status from the Medication Status list or '^' to Quit"
- +2 IF TYPE="ORD(101.43,"
- SET TEXT="Select a Order Status from or enter '^' to Quit"
- SET HELP="Select a Order Status from the status list or '^' to Quit"
- +3 IF TYPE="RAMIS(71,"
- SET TEXT="Select a Radiology Procedure Status or enter '^' to Quit"
- SET HELP="Select a Radiology Procedure Status from the status list or '^' to Quit"
- +4 ;
- +5 SET CNT=0
- SET CNT1=0
- SET STAT=""
- +6 ;If text is not entered into the prompt or no match is found display
- +7 ;entire list of statuses for this finding item
- +8 ;
- +9 ;Add wildcard character
- +10 SET CNT=CNT+1
- SET CNT1=CNT1+1
- SET TMP(CNT)=CNT_" - * (WildCard)"
- SET TMPARR(CNT)="*"
- +11 ;Add status from file to the selectable list
- +12 FOR
- SET STAT=$ORDER(ARRAY(STAT))
- IF STAT=""
- QUIT
- Begin DoDot:1
- +13 SET NODE=$GET(ARRAY(STAT))
- +14 SET STR=$PIECE(NODE,U)
- +15 SET CNT=CNT+1
- SET CNT1=CNT1+1
- +16 IF TYPE="DRUG"
- SET TMP(CNT)=CNT_" - "_STR_"("_$PIECE(NODE,U,2)_")"
- SET TMPARR(CNT)=STR
- +17 IF '$TEST
- SET TMP(CNT)=CNT_" - "_STR
- SET TMPARR(CNT)=STR
- End DoDot:1
- +18 ;
- +19 SET DIR(0)="LO^1:"_CNT_""
- +20 MERGE DIR("A")=TMP
- +21 SET DIR("A")=TEXT
- +22 SET DIR("?")=HELP
- +23 DO ^DIR
- +24 IF $DATA(DTOUT)!($DATA(DUOUT))!($GET(Y)="")
- KILL STATUS
- QUIT
- +25 SET CNT=0
- FOR X=1:1:$LENGTH(Y(0))
- Begin DoDot:1
- +26 IF $EXTRACT(Y(0),X)=","
- SET CNT=CNT+1
- SET NUM=$PIECE(Y(0),",",CNT)
- SET STATUS(TMPARR(NUM))=""
- End DoDot:1
- +27 QUIT
- +28 ;