GMRCIRSN ;ALB/WTC - MANIPULATE REASON FOR REQUEST ON IFC ; Jan 09, 2025@09:45
;;3.0;CONSULT/REQUEST TRACKING;**201**;DEC 27, 1997;Build 7
;
Q ;don't start here!
;
RESEQNCE(IEN) ;
;
; Re-sequence reason for request OBX segments before filing.
;
; IEN = pointer to IFC REASON FOR REQUEST MAPPING file (#123.7)
;
; OBX segments are stored in ^TMP("GMRCIN",$J,"OBX",1,i). They are returned there after they are re-sequenced.
;
Q:$G(IEN)="" Q:'$D(^GMR(123.7,IEN)) ;
;
N DATAFLD,SEQUENCE,IEN2,N,X,IDX,NOTSTOR,ORDRNAME,M,IDX1 ;
;
K ^TMP("GMRCIRSN",$J) S ORDRNAME=$P(^GMR(123.7,IEN,0),U,1) ;
;
; Save order name from 1st OBX segment at top of resequenced list.
;
S IDX=0,X=$G(^TMP("GMRCIN",$J,"OBX",1,1)) I $$UP^XLFSTR($P(X,"|",5))=$$UP^XLFSTR(ORDRNAME) S IDX=IDX+1,^TMP("GMRCIRSN",$J,"OBX",1,IDX)=X K ^TMP("GMRCIN",$J,"OBX",1,1)
;
; Scan data fields in the desired sequence order.
;
S SEQUENCE=0 F S SEQUENCE=$O(^GMR(123.7,IEN,1,"SEQUENCE",SEQUENCE)) Q:'SEQUENCE D ;
. S IEN2=0 F S IEN2=$O(^GMR(123.7,IEN,1,"SEQUENCE",SEQUENCE,IEN2)) Q:'IEN2 S DATAFLD=$P(^GMR(123.7,IEN,1,IEN2,0),U,1),NOTSTOR=$P(^(0),U,3) D ;
.. W !,DATAFLD ;
.. ;
.. ; Find data field in the OBX segments and save it in the desired sequence.
.. ;
.. S N=0 F S N=$O(^TMP("GMRCIN",$J,"OBX",1,N)) Q:'N S X=^(N) I $$UP^XLFSTR($P($P(X,"|",5),":",1))=$$UP^XLFSTR(DATAFLD) D Q ;
... W !,"N",N,".",X ;
... I 'NOTSTOR S IDX=IDX+1,^TMP("GMRCIRSN",$J,"OBX",1,IDX)=X K ^TMP("GMRCIN",$J,"OBX",1,N) ;
... I NOTSTOR K ^TMP("GMRCIN",$J,"OBX",1,N) ; Delete data fields that are marked DO NOT STORE.
... ;
... ; If the preceding OBX seqment(s) do(es) not contain a data field, it's a comment about the data field. Include it.
... ;
... S M=N,IDX1=IDX F S M=$O(^TMP("GMRCIN",$J,"OBX",1,M),-1) Q:'M S X=^(M) Q:$P(X,"|",5)[":" D ;
.... W !,"M",M,".",X ;
.... I 'NOTSTOR S IDX1=IDX1-.1,^TMP("GMRCIRSN",$J,"OBX",1,IDX1)=X K ^TMP("GMRCIN",$J,"OBX",1,M) ;
.... I NOTSTOR K ^TMP("GMRCIN",$J,"OBX",1,M) ; Delete data fields that are marked DO NOT STORE.
... ;
... ; If the next OBX segment(s) do(es) not contain a data field, it's a continuation of the line before. Save it as well.
... ;
... F S N=$O(^TMP("GMRCIN",$J,"OBX",1,N)) Q:'N S X=^(N) Q:$P(X,"|",5)[":" Q:$E($P(X,"|",5),1)'=" " D ;
.... W !,"N",N,X ;
.... I 'NOTSTOR S IDX=IDX+1,^TMP("GMRCIRSN",$J,"OBX",1,IDX)=X K ^TMP("GMRCIN",$J,"OBX",1,N) ;
.... I NOTSTOR K ^TMP("GMRCIN",$J,"OBX",1,N) ; Delete data fields that are marked DO NOT STORE.
;
; Add unmatched reasons for request to the end.
;
S N=0 F S N=$O(^TMP("GMRCIN",$J,"OBX",1,N)) Q:'N S X=^(N),IDX=IDX+1,^TMP("GMRCIRSN",$J,"OBX",1,IDX)=X ;
;
; Re-sequence OBX-4.
;
S SEQUENCE=0 F IDX=1:1 S SEQUENCE=$O(^TMP("GMRCIRSN",$J,"OBX",1,SEQUENCE)) Q:'SEQUENCE S $P(^(SEQUENCE),"|",4)=IDX ;
;
; Restore re-sequenced OBX segments in ^TMP("GMRCIN",$J)
;
K ^TMP("GMRCIN",$J,"OBX",1) M ^TMP("GMRCIN",$J,"OBX",1)=^TMP("GMRCIRSN",$J,"OBX",1) ;
K ^TMP("GMRCIRSN",$J) ;
Q ;
;
LIST ;
;
; Formatted list of IFC REASON FOR REQUEST MAPPING file (#123.7) entry
;
N DIC,X,Y,IEN,DUOUT,DTOUT,POP,SEQUENCE,IEN2 ;
;
S DIC=123.7,DIC(0)="AEQM" D ^DIC Q:$D(DUOUT) Q:$D(DTOUT) Q:Y<0 S IEN=+Y ;
;
D ^%ZIS Q:POP ;
;
W !,"Order Name: ",$P(^GMR(123.7,IEN,0),U,1),! ;
W !,"Sequence",?10,"Data Field",?62,"Do not Store",!,"--------",?10,"------------------------------",?62,"------------",! ;
;
S SEQUENCE=0 F S SEQUENCE=$O(^GMR(123.7,IEN,1,"SEQUENCE",SEQUENCE)) Q:'SEQUENCE S IEN2=0 F S IEN2=$O(^GMR(123.7,IEN,1,"SEQUENCE",SEQUENCE,IEN2)) Q:'IEN2 D ;
. ;
. W $P(^GMR(123.7,IEN,1,IEN2,0),U,2),?10,$P(^(0),U,1),?62,$S($P(^(0),U,3):"YES",1:""),! ;
;
D ^%ZISC Q ;
;
LISTALL ;
;
; Formatted list of all IFC REASON FOR REQUEST MAPPING file (#123.7) entries
;
N DIC,X,Y,IEN,DUOUT,DTOUT,POP,SEQUENCE,IEN2 ;
;
D ^%ZIS Q:POP ;
;
S ORDRNAME="" F S ORDRNAME=$O(^GMR(123.7,"B",ORDRNAME)) Q:ORDRNAME="" S IEN=0 F S IEN=$O(^GMR(123.7,"B",ORDRNAME,IEN)) Q:'IEN D ;
. W !,"Order Name: ",$P(^GMR(123.7,IEN,0),U,1),! ;
. W !,"Sequence",?10,"Data Field",?62,"Do not Store",!,"--------",?10,"------------------------------",?62,"------------",! ;
. ;
. S SEQUENCE=0 F S SEQUENCE=$O(^GMR(123.7,IEN,1,"SEQUENCE",SEQUENCE)) Q:'SEQUENCE S IEN2=0 F S IEN2=$O(^GMR(123.7,IEN,1,"SEQUENCE",SEQUENCE,IEN2)) Q:'IEN2 D ;
.. ;
.. W $P(^GMR(123.7,IEN,1,IEN2,0),U,2),?10,$P(^(0),U,1),?62,$S($P(^(0),U,3):"YES",1:""),! ;
. W ! ;
;
D ^%ZISC Q ;
;
LOAD ;
;
; Add entry to #123.7. Code expects lines of text as follows: order name, data set name #1, #2, #3,... It looks for *** to end the sequence of data set names.
;
N ORDRNAME,X,LIST,I,DA,DIC,Y,N,DIK,COUNT ;
;
F R !,"ORDER NAME: ",ORDRNAME:DTIME Q:ORDRNAME="" W ! D ;
. ;
. S DA=$O(^GMR(123.7,"B",$E(ORDRNAME,1,30),0)) I DA,$P(^GMR(123.7,DA,0),U,1)=ORDRNAME W "...ALDREADY ON FILE.",! Q ;
. ;
. W !!,"ENTER OR PASTE ORDERED SEQUENCE OF DATA FIELDS: " ;
. K LIST F I=1:1 R X:DTIME Q:X="" Q:X?1"*"."*" S LIST(I)=$$RSTRIP(X) W ! ;
. W ! S COUNT=I-1 ;
. ;
. ; Add common data set names.
. ;
. F I=1:1:6 S COUNT=COUNT+1,LIST(COUNT)=$P("Delivery Method,Special Instructions,Opt. in for Item's final status,Facility,Point of Care,Address",",",I) ;
. ;
. K DA,DIC S X=ORDRNAME,DIC=^DIC(123.7,0,"GL"),DIC(0)="L" D FILE^DICN S DA=+Y ;
. ;
. S ^GMR(123.7,DA,1,0)="^123.71^"_(I-1)_"^"_(I-1) ;
. F N=1:1:COUNT S ^GMR(123.7,DA,1,N,0)=LIST(N)_U_N ;
. ;
. S DIK=^DIC(123.7,0,"GL") D IX^DIK ;
;
Q ;
;
RSTRIP(X) ;
;
Q:$E(X,$L(X))'=" " X ;
S X=$E(X,1,$L(X)-1) Q $$RSTRIP(X) ;
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HGMRCIRSN 5734 printed Sep 23, 2025@19:22:09 Page 2
GMRCIRSN ;ALB/WTC - MANIPULATE REASON FOR REQUEST ON IFC ; Jan 09, 2025@09:45
+1 ;;3.0;CONSULT/REQUEST TRACKING;**201**;DEC 27, 1997;Build 7
+2 ;
+3 ;don't start here!
QUIT
+4 ;
RESEQNCE(IEN) ;
+1 ;
+2 ; Re-sequence reason for request OBX segments before filing.
+3 ;
+4 ; IEN = pointer to IFC REASON FOR REQUEST MAPPING file (#123.7)
+5 ;
+6 ; OBX segments are stored in ^TMP("GMRCIN",$J,"OBX",1,i). They are returned there after they are re-sequenced.
+7 ;
+8 ;
if $GET(IEN)=""
QUIT
if '$DATA(^GMR(123.7,IEN))
QUIT
+9 ;
+10 ;
NEW DATAFLD,SEQUENCE,IEN2,N,X,IDX,NOTSTOR,ORDRNAME,M,IDX1
+11 ;
+12 ;
KILL ^TMP("GMRCIRSN",$JOB)
SET ORDRNAME=$PIECE(^GMR(123.7,IEN,0),U,1)
+13 ;
+14 ; Save order name from 1st OBX segment at top of resequenced list.
+15 ;
+16 SET IDX=0
SET X=$GET(^TMP("GMRCIN",$JOB,"OBX",1,1))
IF $$UP^XLFSTR($PIECE(X,"|",5))=$$UP^XLFSTR(ORDRNAME)
SET IDX=IDX+1
SET ^TMP("GMRCIRSN",$JOB,"OBX",1,IDX)=X
KILL ^TMP("GMRCIN",$JOB,"OBX",1,1)
+17 ;
+18 ; Scan data fields in the desired sequence order.
+19 ;
+20 ;
SET SEQUENCE=0
FOR
SET SEQUENCE=$ORDER(^GMR(123.7,IEN,1,"SEQUENCE",SEQUENCE))
if 'SEQUENCE
QUIT
Begin DoDot:1
+21 ;
SET IEN2=0
FOR
SET IEN2=$ORDER(^GMR(123.7,IEN,1,"SEQUENCE",SEQUENCE,IEN2))
if 'IEN2
QUIT
SET DATAFLD=$PIECE(^GMR(123.7,IEN,1,IEN2,0),U,1)
SET NOTSTOR=$PIECE(^(0),U,3)
Begin DoDot:2
+22 ;
WRITE !,DATAFLD
+23 ;
+24 ; Find data field in the OBX segments and save it in the desired sequence.
+25 ;
+26 ;
SET N=0
FOR
SET N=$ORDER(^TMP("GMRCIN",$JOB,"OBX",1,N))
if 'N
QUIT
SET X=^(N)
IF $$UP^XLFSTR($PIECE($PIECE(X,"|",5),":",1))=$$UP^XLFSTR(DATAFLD)
Begin DoDot:3
+27 ;
WRITE !,"N",N,".",X
+28 ;
IF 'NOTSTOR
SET IDX=IDX+1
SET ^TMP("GMRCIRSN",$JOB,"OBX",1,IDX)=X
KILL ^TMP("GMRCIN",$JOB,"OBX",1,N)
+29 ; Delete data fields that are marked DO NOT STORE.
IF NOTSTOR
KILL ^TMP("GMRCIN",$JOB,"OBX",1,N)
+30 ;
+31 ; If the preceding OBX seqment(s) do(es) not contain a data field, it's a comment about the data field. Include it.
+32 ;
+33 ;
SET M=N
SET IDX1=IDX
FOR
SET M=$ORDER(^TMP("GMRCIN",$JOB,"OBX",1,M),-1)
if 'M
QUIT
SET X=^(M)
if $PIECE(X,"|",5)["
QUIT
Begin DoDot:4
+34 ;
WRITE !,"M",M,".",X
+35 ;
IF 'NOTSTOR
SET IDX1=IDX1-.1
SET ^TMP("GMRCIRSN",$JOB,"OBX",1,IDX1)=X
KILL ^TMP("GMRCIN",$JOB,"OBX",1,M)
+36 ; Delete data fields that are marked DO NOT STORE.
IF NOTSTOR
KILL ^TMP("GMRCIN",$JOB,"OBX",1,M)
End DoDot:4
+37 ;
+38 ; If the next OBX segment(s) do(es) not contain a data field, it's a continuation of the line before. Save it as well.
+39 ;
+40 ;
FOR
SET N=$ORDER(^TMP("GMRCIN",$JOB,"OBX",1,N))
if 'N
QUIT
SET X=^(N)
if $PIECE(X,"|",5)["
QUIT
if $EXTRACT($PIECE(X,"|",5),1)'=" "
QUIT
Begin DoDot:4
+41 ;
WRITE !,"N",N,X
+42 ;
IF 'NOTSTOR
SET IDX=IDX+1
SET ^TMP("GMRCIRSN",$JOB,"OBX",1,IDX)=X
KILL ^TMP("GMRCIN",$JOB,"OBX",1,N)
+43 ; Delete data fields that are marked DO NOT STORE.
IF NOTSTOR
KILL ^TMP("GMRCIN",$JOB,"OBX",1,N)
End DoDot:4
End DoDot:3
QUIT
End DoDot:2
End DoDot:1
+44 ;
+45 ; Add unmatched reasons for request to the end.
+46 ;
+47 ;
SET N=0
FOR
SET N=$ORDER(^TMP("GMRCIN",$JOB,"OBX",1,N))
if 'N
QUIT
SET X=^(N)
SET IDX=IDX+1
SET ^TMP("GMRCIRSN",$JOB,"OBX",1,IDX)=X
+48 ;
+49 ; Re-sequence OBX-4.
+50 ;
+51 ;
SET SEQUENCE=0
FOR IDX=1:1
SET SEQUENCE=$ORDER(^TMP("GMRCIRSN",$JOB,"OBX",1,SEQUENCE))
if 'SEQUENCE
QUIT
SET $PIECE(^(SEQUENCE),"|",4)=IDX
+52 ;
+53 ; Restore re-sequenced OBX segments in ^TMP("GMRCIN",$J)
+54 ;
+55 ;
KILL ^TMP("GMRCIN",$JOB,"OBX",1)
MERGE ^TMP("GMRCIN",$JOB,"OBX",1)=^TMP("GMRCIRSN",$JOB,"OBX",1)
+56 ;
KILL ^TMP("GMRCIRSN",$JOB)
+57 ;
QUIT
+58 ;
LIST ;
+1 ;
+2 ; Formatted list of IFC REASON FOR REQUEST MAPPING file (#123.7) entry
+3 ;
+4 ;
NEW DIC,X,Y,IEN,DUOUT,DTOUT,POP,SEQUENCE,IEN2
+5 ;
+6 ;
SET DIC=123.7
SET DIC(0)="AEQM"
DO ^DIC
if $DATA(DUOUT)
QUIT
if $DATA(DTOUT)
QUIT
if Y<0
QUIT
SET IEN=+Y
+7 ;
+8 ;
DO ^%ZIS
if POP
QUIT
+9 ;
+10 ;
WRITE !,"Order Name: ",$PIECE(^GMR(123.7,IEN,0),U,1),!
+11 ;
WRITE !,"Sequence",?10,"Data Field",?62,"Do not Store",!,"--------",?10,"------------------------------",?62,"------------",!
+12 ;
+13 ;
SET SEQUENCE=0
FOR
SET SEQUENCE=$ORDER(^GMR(123.7,IEN,1,"SEQUENCE",SEQUENCE))
if 'SEQUENCE
QUIT
SET IEN2=0
FOR
SET IEN2=$ORDER(^GMR(123.7,IEN,1,"SEQUENCE",SEQUENCE,IEN2))
if 'IEN2
QUIT
Begin DoDot:1
+14 ;
+15 ;
WRITE $PIECE(^GMR(123.7,IEN,1,IEN2,0),U,2),?10,$PIECE(^(0),U,1),?62,$SELECT($PIECE(^(0),U,3):"YES",1:""),!
End DoDot:1
+16 ;
+17 ;
DO ^%ZISC
QUIT
+18 ;
LISTALL ;
+1 ;
+2 ; Formatted list of all IFC REASON FOR REQUEST MAPPING file (#123.7) entries
+3 ;
+4 ;
NEW DIC,X,Y,IEN,DUOUT,DTOUT,POP,SEQUENCE,IEN2
+5 ;
+6 ;
DO ^%ZIS
if POP
QUIT
+7 ;
+8 ;
SET ORDRNAME=""
FOR
SET ORDRNAME=$ORDER(^GMR(123.7,"B",ORDRNAME))
if ORDRNAME=""
QUIT
SET IEN=0
FOR
SET IEN=$ORDER(^GMR(123.7,"B",ORDRNAME,IEN))
if 'IEN
QUIT
Begin DoDot:1
+9 ;
WRITE !,"Order Name: ",$PIECE(^GMR(123.7,IEN,0),U,1),!
+10 ;
WRITE !,"Sequence",?10,"Data Field",?62,"Do not Store",!,"--------",?10,"------------------------------",?62,"------------",!
+11 ;
+12 ;
SET SEQUENCE=0
FOR
SET SEQUENCE=$ORDER(^GMR(123.7,IEN,1,"SEQUENCE",SEQUENCE))
if 'SEQUENCE
QUIT
SET IEN2=0
FOR
SET IEN2=$ORDER(^GMR(123.7,IEN,1,"SEQUENCE",SEQUENCE,IEN2))
if 'IEN2
QUIT
Begin DoDot:2
+13 ;
+14 ;
WRITE $PIECE(^GMR(123.7,IEN,1,IEN2,0),U,2),?10,$PIECE(^(0),U,1),?62,$SELECT($PIECE(^(0),U,3):"YES",1:""),!
End DoDot:2
+15 ;
WRITE !
End DoDot:1
+16 ;
+17 ;
DO ^%ZISC
QUIT
+18 ;
LOAD ;
+1 ;
+2 ; Add entry to #123.7. Code expects lines of text as follows: order name, data set name #1, #2, #3,... It looks for *** to end the sequence of data set names.
+3 ;
+4 ;
NEW ORDRNAME,X,LIST,I,DA,DIC,Y,N,DIK,COUNT
+5 ;
+6 ;
FOR
READ !,"ORDER NAME: ",ORDRNAME:DTIME
if ORDRNAME=""
QUIT
WRITE !
Begin DoDot:1
+7 ;
+8 ;
SET DA=$ORDER(^GMR(123.7,"B",$EXTRACT(ORDRNAME,1,30),0))
IF DA
IF $PIECE(^GMR(123.7,DA,0),U,1)=ORDRNAME
WRITE "...ALDREADY ON FILE.",!
QUIT
+9 ;
+10 ;
WRITE !!,"ENTER OR PASTE ORDERED SEQUENCE OF DATA FIELDS: "
+11 ;
KILL LIST
FOR I=1:1
READ X:DTIME
if X=""
QUIT
if X?1"*"."*"
QUIT
SET LIST(I)=$$RSTRIP(X)
WRITE !
+12 ;
WRITE !
SET COUNT=I-1
+13 ;
+14 ; Add common data set names.
+15 ;
+16 ;
FOR I=1:1:6
SET COUNT=COUNT+1
SET LIST(COUNT)=$PIECE("Delivery Method,Special Instructions,Opt. in for Item's final status,Facility,Point of Care,Address",",",I)
+17 ;
+18 ;
KILL DA,DIC
SET X=ORDRNAME
SET DIC=^DIC(123.7,0,"GL")
SET DIC(0)="L"
DO FILE^DICN
SET DA=+Y
+19 ;
+20 ;
SET ^GMR(123.7,DA,1,0)="^123.71^"_(I-1)_"^"_(I-1)
+21 ;
FOR N=1:1:COUNT
SET ^GMR(123.7,DA,1,N,0)=LIST(N)_U_N
+22 ;
+23 ;
SET DIK=^DIC(123.7,0,"GL")
DO IX^DIK
End DoDot:1
+24 ;
+25 ;
QUIT
+26 ;
RSTRIP(X) ;
+1 ;
+2 ;
if $EXTRACT(X,$LENGTH(X))'=" "
QUIT X
+3 ;
SET X=$EXTRACT(X,1,$LENGTH(X)-1)
QUIT $$RSTRIP(X)
+4 ;