PXRMDLG3 ;SLC/PJH - Reminder Dialog Edit/Inquiry ;03/27/2015 08:40
;;2.0;CLINICAL REMINDERS;**45**;Feb 04, 2005;Build 566
;
;
;Display national dialog
START N NLINE,NSEL
S NLINE=0,NSEL=0
;
;Group header
I $P($G(^PXRMD(801.41,PXRMDIEN,0)),U,4)="G" D
.D DLINE(PXRMDIEN,"","")
;Other components
D DETAIL(PXRMDIEN,"")
;Create headings
D CHGCAP^VALM("HEADER1","Item Seq.")
D CHGCAP^VALM("HEADER2","Dialog Details/Findings")
D CHGCAP^VALM("HEADER3","Type")
S VALMCNT=NLINE
S ^TMP("PXRMDLG",$J,"VALMCNT")=VALMCNT
EXIT Q
;
;Additional Findings
;-------------------
ADD(DIEN) ;
N FIND,FSUB,FTYP,FNAME,FNUM
S FSUB=0
F S FSUB=$O(^PXRMD(801.41,DIEN,3,FSUB)) Q:'FSUB D
.S FIND=$P($G(^PXRMD(801.41,DIEN,3,FSUB,0)),U) Q:FIND=""
.S FNAME="" D FDESC(FIND) Q:FNAME=""
.;Save additional finding name
.S FOUND=1 D SAVE(2,FNAME,FTYP)
Q
;
;Build listman global for all components
;---------------------------------------
DETAIL(PXRMDIEN,LEV) ;
N DDATA,DDLG,DEND,DIEN,DNAM,DSEQ,DSTRT,IND,JND,DSUB
S DSEQ=0
;
;Get each sequence number
F S DSEQ=$O(^PXRMD(801.41,PXRMDIEN,10,"B",DSEQ)) Q:'DSEQ D
.;Determine subscript
.S DSUB=$O(^PXRMD(801.41,PXRMDIEN,10,"B",DSEQ,"")) Q:'DSUB
.;Get ien of prompt/component
.S DIEN=$P($G(^PXRMD(801.41,PXRMDIEN,10,DSUB,0)),U,2) Q:'DIEN
.;Ignore prompts and forced values
.I "PF"[$P($G(^PXRMD(801.41,DIEN,0)),U,4) Q
.;Save line in workfile
.D DLINE(DIEN,LEV,DSEQ)
.;
.;Process any sub-components
.D DETAIL(DIEN,LEV_DSEQ_".")
.;Extra line feed
.I LEV="" D
..S NLINE=NLINE+1
..S ^TMP("PXRMDLG",$J,NLINE,0)=$J("",79)
Q
;
;Save individual component details
;---------------------------------
DLINE(DIEN,LEV,DSEQ) ;
;Dialog name
S DNAM=$P($G(^PXRMD(801.41,DIEN,0)),U) Q:DNAM=""
;Check if standard PXRM prompt
I $$PXRM^PXRMEXID(DNAM) Q
;
N DPTX,DTXT,DTYP,EXIST,ITEM,TEMP,SEP
S ITEM=""
S NSEL=NSEL+1,ITEM=NSEL
S NLINE=NLINE+1,SEP=$E(LEV,$L(LEV))
S TEMP=$J(ITEM,3)_$J("",4)_LEV_DSEQ
;Determine type
S DTYP=$S($P($G(^PXRMD(801.41,DIEN,0)),U,4)="G":"group",1:"element")
;Dialog component display
I $L(TEMP)<13 S TEMP=TEMP_$J("",12+$L(SEP)-$L(TEMP))_$E(DNAM,1,50)
E S TEMP=TEMP_" "_$E(DNAM,1,50)
;Add Type
S ^TMP("PXRMDLG",$J,NLINE,0)=TEMP_$J("",70-$L(TEMP))_DTYP
;
;Set up selection index
S ^TMP("PXRMDLG",$J,"IDX",NSEL,DIEN)=""
;
;Insert finding items
I ("element;group"[DTYP) D
.N DSUB,FDATA,FILENUM,FLIT,FLONG,FNAME,FOUND,FREP,FTAB,FTYP,TEMP
.;Findings
.S FNAME="",FOUND=0
.D FDESC($P($G(^PXRMD(801.41,DIEN,1)),U,5))
.I FNAME'="" S FOUND=1 D SAVE(1,FNAME,FTYP)
.;Additional findings (see ADD^PXRMDLG2)
.D ADD(DIEN)
.;If no findings
.I 'FOUND D
..S NLINE=NLINE+1
..S ^TMP("PXRMDLG",$J,NLINE,0)=$J("",12+$L(SEP))_"Finding: *NONE*"
Q
;
;Finding description
;-------------------
FDESC(FIEN) ;
N FGLOB,FITEM
;Determine finding type
S FGLOB=$P(FIEN,";",2) Q:FGLOB=""
S FITEM=$P(FIEN,";") Q:FITEM=""
;Diagnosis POV
I FGLOB["ICD9" D Q
.S FTYP="DIAGNOSIS",FGLOB=U_FGLOB_FITEM_",0)"
.S FNAME=$P($G(@FGLOB),U,3)
I FGLOB["WV" D Q
.S FTYP="WH NOTIFICATION PURPOSE",FGLOB=U_FGLOB_FITEM_",0)"
.S FNAME=$P($G(@FGLOB),U)
;Procedure CPT
I FGLOB["ICPT" D Q
.S FTYP="PROCEDURE",FGLOB=U_FGLOB_FITEM_",0)"
.S FNAME=$P($G(@FGLOB),U,2)
;Quick order
I FGLOB["ORD(101.41" D Q
.S FTYP="QUICK ORDER",FGLOB=U_FGLOB_FITEM_",0)"
.S FNAME=$P($G(@FGLOB),U,2)
I FGLOB["PXRMD(801.46" D Q
.S FTYP="GENERAL FINDING",FGLOB=U_FGLOB_FITEM_",0)"
.S FNAME=$P($G(@FGLOB),U)
;Short name for finding type
S FTYP=$G(DEF1(FGLOB)) Q:FTYP=""
;Long name
S FTYP=$G(DEF2(FTYP))
S FGLOB=U_FGLOB_FITEM_",0)"
S FNAME=$P($G(@FGLOB),U,1)
I FNAME="" S FNAME=$P($G(@FGLOB),U)
I FNAME]"" S FNAME=FNAME Q
S FNAME=FITEM
Q
;
;Save finding details
;--------------------
SAVE(DSUB,FNAME,FTYP) ;
N TEMP
I DSUB=1 S FLIT="Finding: "
I DSUB>1 S FLIT="Add. Finding: "
S FLONG=0
I $L(FLIT_FNAME_" ("_FTYP_")")>60 S FLONG=1
I 'FLONG S FNAME=FLIT_FNAME_" ("_FTYP_")"
I FLONG S FNAME=FLIT_FNAME
S TEMP=$J("",12+$L(SEP))_$E(FNAME,1,60)_$J("",60-$L(FNAME))
S NLINE=NLINE+1
S ^TMP("PXRMDLG",$J,NLINE,0)=TEMP
I FLONG D
.S NLINE=NLINE+1
.S FTAB=$S(DSUB=1:21,1:26)
.S ^TMP("PXRMDLG",$J,NLINE,0)=$J("",FTAB)_"("_FTYP_")"
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPXRMDLG3 4347 printed Dec 13, 2024@01:43:55 Page 2
PXRMDLG3 ;SLC/PJH - Reminder Dialog Edit/Inquiry ;03/27/2015 08:40
+1 ;;2.0;CLINICAL REMINDERS;**45**;Feb 04, 2005;Build 566
+2 ;
+3 ;
+4 ;Display national dialog
START NEW NLINE,NSEL
+1 SET NLINE=0
SET NSEL=0
+2 ;
+3 ;Group header
+4 IF $PIECE($GET(^PXRMD(801.41,PXRMDIEN,0)),U,4)="G"
Begin DoDot:1
+5 DO DLINE(PXRMDIEN,"","")
End DoDot:1
+6 ;Other components
+7 DO DETAIL(PXRMDIEN,"")
+8 ;Create headings
+9 DO CHGCAP^VALM("HEADER1","Item Seq.")
+10 DO CHGCAP^VALM("HEADER2","Dialog Details/Findings")
+11 DO CHGCAP^VALM("HEADER3","Type")
+12 SET VALMCNT=NLINE
+13 SET ^TMP("PXRMDLG",$JOB,"VALMCNT")=VALMCNT
EXIT QUIT
+1 ;
+2 ;Additional Findings
+3 ;-------------------
ADD(DIEN) ;
+1 NEW FIND,FSUB,FTYP,FNAME,FNUM
+2 SET FSUB=0
+3 FOR
SET FSUB=$ORDER(^PXRMD(801.41,DIEN,3,FSUB))
if 'FSUB
QUIT
Begin DoDot:1
+4 SET FIND=$PIECE($GET(^PXRMD(801.41,DIEN,3,FSUB,0)),U)
if FIND=""
QUIT
+5 SET FNAME=""
DO FDESC(FIND)
if FNAME=""
QUIT
+6 ;Save additional finding name
+7 SET FOUND=1
DO SAVE(2,FNAME,FTYP)
End DoDot:1
+8 QUIT
+9 ;
+10 ;Build listman global for all components
+11 ;---------------------------------------
DETAIL(PXRMDIEN,LEV) ;
+1 NEW DDATA,DDLG,DEND,DIEN,DNAM,DSEQ,DSTRT,IND,JND,DSUB
+2 SET DSEQ=0
+3 ;
+4 ;Get each sequence number
+5 FOR
SET DSEQ=$ORDER(^PXRMD(801.41,PXRMDIEN,10,"B",DSEQ))
if 'DSEQ
QUIT
Begin DoDot:1
+6 ;Determine subscript
+7 SET DSUB=$ORDER(^PXRMD(801.41,PXRMDIEN,10,"B",DSEQ,""))
if 'DSUB
QUIT
+8 ;Get ien of prompt/component
+9 SET DIEN=$PIECE($GET(^PXRMD(801.41,PXRMDIEN,10,DSUB,0)),U,2)
if 'DIEN
QUIT
+10 ;Ignore prompts and forced values
+11 IF "PF"[$PIECE($GET(^PXRMD(801.41,DIEN,0)),U,4)
QUIT
+12 ;Save line in workfile
+13 DO DLINE(DIEN,LEV,DSEQ)
+14 ;
+15 ;Process any sub-components
+16 DO DETAIL(DIEN,LEV_DSEQ_".")
+17 ;Extra line feed
+18 IF LEV=""
Begin DoDot:2
+19 SET NLINE=NLINE+1
+20 SET ^TMP("PXRMDLG",$JOB,NLINE,0)=$JUSTIFY("",79)
End DoDot:2
End DoDot:1
+21 QUIT
+22 ;
+23 ;Save individual component details
+24 ;---------------------------------
DLINE(DIEN,LEV,DSEQ) ;
+1 ;Dialog name
+2 SET DNAM=$PIECE($GET(^PXRMD(801.41,DIEN,0)),U)
if DNAM=""
QUIT
+3 ;Check if standard PXRM prompt
+4 IF $$PXRM^PXRMEXID(DNAM)
QUIT
+5 ;
+6 NEW DPTX,DTXT,DTYP,EXIST,ITEM,TEMP,SEP
+7 SET ITEM=""
+8 SET NSEL=NSEL+1
SET ITEM=NSEL
+9 SET NLINE=NLINE+1
SET SEP=$EXTRACT(LEV,$LENGTH(LEV))
+10 SET TEMP=$JUSTIFY(ITEM,3)_$JUSTIFY("",4)_LEV_DSEQ
+11 ;Determine type
+12 SET DTYP=$SELECT($PIECE($GET(^PXRMD(801.41,DIEN,0)),U,4)="G":"group",1:"element")
+13 ;Dialog component display
+14 IF $LENGTH(TEMP)<13
SET TEMP=TEMP_$JUSTIFY("",12+$LENGTH(SEP)-$LENGTH(TEMP))_$EXTRACT(DNAM,1,50)
+15 IF '$TEST
SET TEMP=TEMP_" "_$EXTRACT(DNAM,1,50)
+16 ;Add Type
+17 SET ^TMP("PXRMDLG",$JOB,NLINE,0)=TEMP_$JUSTIFY("",70-$LENGTH(TEMP))_DTYP
+18 ;
+19 ;Set up selection index
+20 SET ^TMP("PXRMDLG",$JOB,"IDX",NSEL,DIEN)=""
+21 ;
+22 ;Insert finding items
+23 IF ("element;group"[DTYP)
Begin DoDot:1
+24 NEW DSUB,FDATA,FILENUM,FLIT,FLONG,FNAME,FOUND,FREP,FTAB,FTYP,TEMP
+25 ;Findings
+26 SET FNAME=""
SET FOUND=0
+27 DO FDESC($PIECE($GET(^PXRMD(801.41,DIEN,1)),U,5))
+28 IF FNAME'=""
SET FOUND=1
DO SAVE(1,FNAME,FTYP)
+29 ;Additional findings (see ADD^PXRMDLG2)
+30 DO ADD(DIEN)
+31 ;If no findings
+32 IF 'FOUND
Begin DoDot:2
+33 SET NLINE=NLINE+1
+34 SET ^TMP("PXRMDLG",$JOB,NLINE,0)=$JUSTIFY("",12+$LENGTH(SEP))_"Finding: *NONE*"
End DoDot:2
End DoDot:1
+35 QUIT
+36 ;
+37 ;Finding description
+38 ;-------------------
FDESC(FIEN) ;
+1 NEW FGLOB,FITEM
+2 ;Determine finding type
+3 SET FGLOB=$PIECE(FIEN,";",2)
if FGLOB=""
QUIT
+4 SET FITEM=$PIECE(FIEN,";")
if FITEM=""
QUIT
+5 ;Diagnosis POV
+6 IF FGLOB["ICD9"
Begin DoDot:1
+7 SET FTYP="DIAGNOSIS"
SET FGLOB=U_FGLOB_FITEM_",0)"
+8 SET FNAME=$PIECE($GET(@FGLOB),U,3)
End DoDot:1
QUIT
+9 IF FGLOB["WV"
Begin DoDot:1
+10 SET FTYP="WH NOTIFICATION PURPOSE"
SET FGLOB=U_FGLOB_FITEM_",0)"
+11 SET FNAME=$PIECE($GET(@FGLOB),U)
End DoDot:1
QUIT
+12 ;Procedure CPT
+13 IF FGLOB["ICPT"
Begin DoDot:1
+14 SET FTYP="PROCEDURE"
SET FGLOB=U_FGLOB_FITEM_",0)"
+15 SET FNAME=$PIECE($GET(@FGLOB),U,2)
End DoDot:1
QUIT
+16 ;Quick order
+17 IF FGLOB["ORD(101.41"
Begin DoDot:1
+18 SET FTYP="QUICK ORDER"
SET FGLOB=U_FGLOB_FITEM_",0)"
+19 SET FNAME=$PIECE($GET(@FGLOB),U,2)
End DoDot:1
QUIT
+20 IF FGLOB["PXRMD(801.46"
Begin DoDot:1
+21 SET FTYP="GENERAL FINDING"
SET FGLOB=U_FGLOB_FITEM_",0)"
+22 SET FNAME=$PIECE($GET(@FGLOB),U)
End DoDot:1
QUIT
+23 ;Short name for finding type
+24 SET FTYP=$GET(DEF1(FGLOB))
if FTYP=""
QUIT
+25 ;Long name
+26 SET FTYP=$GET(DEF2(FTYP))
+27 SET FGLOB=U_FGLOB_FITEM_",0)"
+28 SET FNAME=$PIECE($GET(@FGLOB),U,1)
+29 IF FNAME=""
SET FNAME=$PIECE($GET(@FGLOB),U)
+30 IF FNAME]""
SET FNAME=FNAME
QUIT
+31 SET FNAME=FITEM
+32 QUIT
+33 ;
+34 ;Save finding details
+35 ;--------------------
SAVE(DSUB,FNAME,FTYP) ;
+1 NEW TEMP
+2 IF DSUB=1
SET FLIT="Finding: "
+3 IF DSUB>1
SET FLIT="Add. Finding: "
+4 SET FLONG=0
+5 IF $LENGTH(FLIT_FNAME_" ("_FTYP_")")>60
SET FLONG=1
+6 IF 'FLONG
SET FNAME=FLIT_FNAME_" ("_FTYP_")"
+7 IF FLONG
SET FNAME=FLIT_FNAME
+8 SET TEMP=$JUSTIFY("",12+$LENGTH(SEP))_$EXTRACT(FNAME,1,60)_$JUSTIFY("",60-$LENGTH(FNAME))
+9 SET NLINE=NLINE+1
+10 SET ^TMP("PXRMDLG",$JOB,NLINE,0)=TEMP
+11 IF FLONG
Begin DoDot:1
+12 SET NLINE=NLINE+1
+13 SET FTAB=$SELECT(DSUB=1:21,1:26)
+14 SET ^TMP("PXRMDLG",$JOB,NLINE,0)=$JUSTIFY("",FTAB)_"("_FTYP_")"
End DoDot:1
+15 QUIT