- PXRMDLG4 ;SLC/PJH - Reminder Dialog Edit/Inquiry ;09/09/2020
- ;;2.0;CLINICAL REMINDERS;**4,6,12,16,26,45,71**;Feb 04, 2005;Build 43
- ;
- WP(SUB,SUB1,WIDTH,SEQ,VALMCNT) ;Format WP text
- N DIWF,DIWL,DIWR,IC,TEXT,X,TXTCNT,DTXT,CNT,SUB2
- S (CNT,SUB2,TXTCNT)=0
- F S SUB2=$O(^PXRMD(801.41,SUB,SUB1,SUB2)) Q:'SUB2 D
- .S TXTCNT=TXTCNT+1,DTXT(TXTCNT)=$G(^PXRMD(801.41,SUB,SUB1,SUB2,0))
- .S DTXT(TXTCNT)=$$STRREP^PXRMUTIL($G(DTXT(TXTCNT)),"<br>","\\")
- I TXTCNT>0 D
- .N OUTPUT,NLINES
- .S NLINES=0 D FORMAT^PXRMTEXT(1,WIDTH,TXTCNT,.DTXT,.NLINES,.OUTPUT)
- .I NLINES>0 K DTXT M DTXT=OUTPUT
- S CNT=0
- F S CNT=$O(DTXT(CNT)) Q:CNT="" D
- .S TEXT=$G(DTXT(CNT)),VALMCNT=VALMCNT+1
- .S ^TMP(NODE,$J,VALMCNT,0)=SEQ_TEXT,SEQ=$J("",$L(SEQ))
- Q
- ;
- ADD ;PXRM DIALOG ADD ELEMENT validation
- N ANS,DTOUT,DUOUT,LIT,LOCK,Y,PIEN,ERR,IEN,NATIONAL,SEQ
- W IORESET
- S VALMBCK="R",NATIONAL=0
- I $P($G(^PXRMD(801.41,PXRMDIEN,100)),U)="N" S NATIONAL=1
- S LOCK=$P($G(^PXRMD(801.41,PXRMDIEN,100)),U,4)
- I NATIONAL,'($G(PXRMINST)=1)&(DUZ(0)="@"),$G(LOCK)'=1 D Q
- .W !,"Elements may not be added to national reminder dialogs" H 2
- ;
- F D SEQ(.SEQ,.PIEN) Q:$D(DUOUT)!$D(DTOUT) Q:SEQ
- Q:$D(DUOUT)!$D(DTOUT)
- ;
- ;Check if sequence number is OK
- I $G(PIEN)="" Q
- S ANS="N" D ASK^PXRMDLG5(.ANS,PIEN) Q:$D(DUOUT)!$D(DTOUT)!($G(ANS)="N")
- ;
- ;Select a dialog element to add to parent dialog (PIEN)
- ;PIEN may be dialog or a group within the dialog
- D ESEL^PXRMDEDT(PIEN,SEQ)
- ;Rebuild workfile
- D BUILD^PXRMDLG(PXRMMODE)
- Q
- ;
- FADD(DIEN,FTAB,VIEW,NLINE) ;Additional Findings
- 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 FSAVE(2,FNAME,FTYP,FTAB,FIND)
- .I VIEW=2,FIND["PXD(811.2," D TAXDISP^PXRMDTAX(FIND,"",DIEN,.NLINE,NODE,1,0)
- Q
- ;
- DETAIL(DIEN,LEV,VIEW,NODE) ;;Build List Manager global for all components
- N DDATA,DDLG,DEND,DCIEN,DNAM,DSEQ,DSTRT,IND,JND,DSUB
- S DSEQ=0
- ;
- ;Get each sequence number
- F S DSEQ=$O(^PXRMD(801.41,DIEN,10,"B",DSEQ)) Q:'DSEQ D
- .;Determine subscript
- .S DSUB=$O(^PXRMD(801.41,DIEN,10,"B",DSEQ,"")) Q:'DSUB
- .;Get IEN of prompt/component
- .S DCIEN=$P($G(^PXRMD(801.41,DIEN,10,DSUB,0)),U,2) Q:'DCIEN
- .I "PF"[$P($G(^PXRMD(801.41,DCIEN,0)),U,4) D Q
- ..S ^TMP("PXRMDLG PROMPTS",$J,DCIEN)=""
- ..;S ^TMP("PXRMDLG4",$J,"IEN",NSEL)=DIEN_U_DSEQ
- ..;S ^TMP("PXRMDLG4",$J,"SEQ",LEV_DSEQ)=DCIEN
- ..S ^TMP("PXRMDLG4",$J,"PIEN",NSEL)=DIEN_U_DSEQ
- ..S ^TMP("PXRMDLG4",$J,"PSEQ",LEV_DSEQ)=DCIEN
- .;Save line in workfile
- .D DLINE(DCIEN,LEV,DSEQ,NODE)
- .;Build pointers back to parent
- .I VIEW'=4 D
- ..S ^TMP("PXRMDLG4",$J,"IEN",NSEL)=DIEN_U_DSEQ
- ..S ^TMP("PXRMDLG4",$J,"SEQ",LEV_DSEQ)=DCIEN
- .;Process any sub-components
- .I VIEW<5 D DETAIL(DCIEN,LEV_DSEQ_".",VIEW,NODE)
- Q
- ;
- DLINE(DIEN,LEV,DSEQ,NODE) ;Save individual component details
- N CNT,DBOX,DCAP,DDIS,DGRP,DMULT,DSUPP,DSHOW,DTYP,DTXT
- N IC,RESNM,RESULT,RIEN,RNAME,RCNT
- ;Dialog name: TESTDATA defined and NEW in PXRMDLG7
- S DDATA=$S($G(TESTDATA)'="":TESTDATA,1:$G(^PXRMD(801.41,DIEN,0)))
- ;S DDATA=$G(^PXRMD(801.41,DIEN,0))
- S DNAM=$P(DDATA,U) Q:DNAM=""
- ;Check if standard PXRM prompt
- I $$PXRM^PXRMEXID(DNAM) Q
- ;Dialog Type and Disabled
- S DDIS=$P(DDATA,U,3),DTYP=$P(DDATA,U,4)
- S DTYP=$S(DTYP="G":"Group",1:"Element"),DNAM=DTYP_": "_DNAM
- I VIEW=5 S DNAM=DNAM
- ;Resolution type and name
- S RNAME="",RIEN=$P($G(^PXRMD(801.41,DIEN,1)),U,3)
- I RIEN S RNAME=$P($G(^PXRMD(801.9,RIEN,0)),U)
- ;
- ;Group fields
- I DTYP="Group" D
- .S DGRP=1,DTXT=$P(DDATA,U,5),DCAP=" [group caption]"
- .I DTXT="" S DCAP=""
- .I DTXT]"" S DCAP=DTXT_" "_DCAP
- .S DBOX=$S($P(DDATA,U,6)="Y":"BOX",1:"NO BOX")
- .S DSUPP=$S($P(DDATA,U,11)=1:"SUPPRESS",$P(DDATA,U,11)="C":"CHECKED",1:"NO SUPPRESS")
- .S DSHOW=$S($P(DDATA,U,10):"HIDE",1:"SHOW")
- .S DMULT=$P(DDATA,U,9)
- .S DMULT=$S(DMULT=1:"ONE ONLY",DMULT=2:"ONE OR MORE",DMULT=3:"NONE OR ONE",DMULT=4:"ALL REQUIRED",1:"NO SELECTION")
- ;
- N DPTX,DTXT,EXIST,ITEM,TEMP,SEP,SEQ,TAB,ALTLEN
- S NSEL=NSEL+1,NLINE=NLINE+1,ITEM=NSEL,SEP=$E(LEV,$L(LEV)),SEQ=LEV_DSEQ
- ;Suppress Item numbers for INQ options
- I VIEW=4 S ITEM=""
- ;Otherwise display Item, Sequence and Dialog Name
- S TEMP=$J(ITEM,4)_$J("",3)_SEQ,TAB=$L(TEMP)+2
- S CNT=0 F IC=1:1 Q:'$P(SEQ,".",IC) S:$P(SEQ,".",IC)<10 CNT=CNT+1
- S TAB=TAB+CNT
- ;
- S ALTLEN=$L(TEMP)
- ;Display dialog name
- S TEMP=TEMP_$J("",2+CNT)_DNAM
- ;Add disabled if present
- I +DDIS>0 S TEMP=TEMP_" (Disabled)"
- ;
- S ^TMP(NODE,$J,NLINE,0)=TEMP
- ;check for alternate dialog element/group
- I VIEW<2!(VIEW>4) D
- .I $D(^PXRMD(801.41,DIEN,"BL"))>0 D ALT^PXRMDLG5(DIEN,LEV,DSEQ,NODE,VIEW,.NLINE,CNT,ALTLEN)
- ;
- ;Dialog Text or P/N Text
- I (VIEW=2)!(VIEW=3)!(VIEW=4) D
- .N DGBEG,DGSUB,TSUB
- .S DGSUB=0,TSUB=$$TSUB^PXRMDLG1(DIEN,VIEW)
- .I VIEW=4 S DGBEG=$J("",TAB)_"Text: "
- .I VIEW'=4 S DGBEG=$J("",5+$L(SEQ)+CNT+$L(DTYP))_"Text: "
- .D WP(DIEN,TSUB,65,.DGBEG,.NLINE)
- .I DTYP="Group" D
- ..S TEMP=DGBEG_"["_DBOX_", "_DSUPP_", "_DSHOW_", "_DMULT_"]"
- ..S NLINE=NLINE+1,^TMP(NODE,$J,NLINE,0)=TEMP
- ;
- ;Set up selection index
- S ^TMP(NODE,$J,"IDX",NSEL,DIEN)=""
- ;Insert finding items
- I (VIEW=1)!(VIEW=4),("Element;Group"[DTYP) D
- .N DSUB,FDATA,FILENUM,FLIT,FLONG,FNAME,FOUND,FREP,FTYP,TEMP
- .;Findings
- .S FNAME="",FOUND=0
- .D FDESC($P($G(^PXRMD(801.41,DIEN,1)),U,5))
- .I FNAME'="" S FOUND=1 D FSAVE(1,FNAME,FTYP,TAB)
- .;Resolution
- .I RNAME]"" D
- ..S TEMP=$J("",TAB)_"Resolution: "_RNAME
- ..S NLINE=NLINE+1,^TMP(NODE,$J,NLINE,0)=TEMP
- .;Result Group
- .I VIEW=4 D
- ..S RCNT=0 F S RCNT=$O(^PXRMD(801.41,DIEN,51,RCNT)) Q:RCNT'>0 D
- ...S RESULT=$P($G(^PXRMD(801.41,DIEN,51,RCNT,0)),U)
- ...S RESNM=$P($G(^PXRMD(801.41,RESULT,0)),U) Q:RESNM=""
- ...S TEMP=$J("",TAB)_"Result Group: "_RESNM
- ...S NLINE=NLINE+1,^TMP(NODE,$J,NLINE,0)=TEMP
- .;Additional findings
- .D FADD(DIEN,TAB,VIEW,.NLINE)
- ;Get additional prompts
- I VIEW=2 D
- .S FIEN=$P($G(^PXRMD(801.41,DIEN,1)),U,5)
- .I $G(FIEN)["PXD(811.2," D TAXDISP^PXRMDTAX(FIEN,DSEQ,DIEN,.NLINE,NODE,0,0)
- .D FADD(DIEN,TAB,VIEW,.NLINE)
- I VIEW,VIEW<5,"Element;Group"[DTYP D PROMPT(DIEN,TAB,"Prompts: ",VIEW)
- ;
- I VIEW=4,$D(^PXRMD(801.41,DIEN,"BL"))>0 D ALT^PXRMDLG5(DIEN,LEV,DSEQ,NODE,VIEW,.NLINE,CNT,ALTLEN)
- S NLINE=NLINE+1
- S ^TMP(NODE,$J,NLINE,0)=$J("",79)
- Q
- ;
- FDESC(FIEN) ;Finding description
- N FGLOB,FITEM,FNUM
- S FGLOB=$P(FIEN,";",2) Q:FGLOB=""
- S FITEM=$P(FIEN,";") Q:FITEM=""
- S FNUM=" ["_FITEM_"]"
- I FGLOB["ICD9" D Q
- .S FTYP="DIAGNOSIS",FGLOB=U_FGLOB_FITEM_",0)"
- .S FNAME=$P($G(@FGLOB),U,3)_FNUM
- I FGLOB["WV" D Q
- .S FTYP="WH NOTIFICATION PURPOSE",FGLOB=U_FGLOB_FITEM_",0)"
- .S FNAME=$P($G(@FGLOB),U)_FNUM
- I FGLOB["ICPT" D Q
- .S FTYP="PROCEDURE",FGLOB=U_FGLOB_FITEM_",0)"
- .S FNAME=$P($G(@FGLOB),U,2)_FNUM
- I FGLOB["ORD(101.41" D Q
- .S FTYP="QUICK ORDER",FGLOB=U_FGLOB_FITEM_",0)"
- .S FNAME=$P($G(@FGLOB),U,2)_FNUM
- I FGLOB["PXRMD(801.46" D Q
- .S FTYP="GENERAL FINDING",FGLOB=U_FGLOB_FITEM_",0)"
- .S FNAME=$P($G(@FGLOB),U)_FNUM
- ;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)_FNUM
- I FNAME="" S FNAME=$P($G(@FGLOB),U)_FNUM
- I FNAME="" S FNAME=FITEM
- Q
- ;
- FSAVE(DSUB,FNAME,FTYP,FTAB,FIEN) ;Save finding details
- N DCOL,IND,FMTSTR,NL,OUTPUT,TEMP,TEXT
- I DSUB>1 D
- . S DCOL=65-FTAB I DCOL<10 S DCOL=10
- . S FMTSTR=FTAB_"R^13L1^"_DCOL_"L"
- . S TEXT=U_"Add. Finding:"
- I DSUB=1 D
- . S DCOL=70-FTAB I DCOL<10 S DCOL=10
- . S FMTSTR=FTAB_"R^8L1^"_DCOL_"L"
- . S TEXT=U_"Finding:"
- S TEXT=TEXT_U_FNAME_" ("_FTYP_")"
- D COLFMT^PXRMTEXT(FMTSTR,TEXT," ",.NL,.OUTPUT)
- F IND=1:1:NL D
- . S NLINE=NLINE+1
- . S ^TMP(NODE,$J,NLINE,0)=OUTPUT(IND)
- Q
- ;
- PROMPT(IEN,TAB,TEXT,VIEW) ;additional prompts in the dialog file
- N DATA,DDIS,DGSEQ,DNAME,DSUB,DTITLE,DTXT,DTYP,SEQ,SUB
- S SEQ=0
- F S SEQ=$O(^PXRMD(801.41,IEN,10,"B",SEQ)) Q:'SEQ D
- .S SUB=$O(^PXRMD(801.41,IEN,10,"B",SEQ,"")) Q:'SUB
- .S DSUB=$P($G(^PXRMD(801.41,IEN,10,SUB,0)),U,2) Q:'DSUB
- .S DATA=$G(^PXRMD(801.41,DSUB,0)) Q:DATA=""
- .S DNAME=$P(DATA,U),DDIS=$P(DATA,U,3),DTYP=$P(DATA,U,4)
- .I "PF"'[DTYP Q
- .I DTYP="F" S DNAME=DNAME_" (forced value)"
- .I DTYP="P",(VIEW=2)!(VIEW=3) D
- ..;Override prompt caption
- ..S DTITLE=$P($G(^PXRMD(801.41,IEN,10,SUB,0)),U,6)
- ..I DTITLE="" S DTITLE=$P($G(^PXRMD(801.41,DSUB,2)),U,4)
- ..S DNAME=DTITLE
- .S DNAME=$J("",TAB)_TEXT_DNAME
- .S:+DDIS>0 DNAME=DNAME_" (Disabled)"
- .S NLINE=NLINE+1
- .S ^TMP(NODE,$J,NLINE,0)=DNAME
- .S TEXT=$J("",$L(TEXT))
- Q
- ;
- SEQ(SEQ,PIEN) ;Select sequence number to add
- N X,Y,TEXT,DIR
- K DIROUT,DIRUT,DTOUT,DUOUT
- S SEQ=0
- S DIR(0)="FA0;1;30"
- S DIR("A")="Enter a new SEQUENCE NUMBER: "
- S DIR("?")="Enter new sequence number. For detailed help type ??"
- S DIR("??")=U_"D HELP^PXRMDLG4(1)"
- D ^DIR K DIR
- I $D(DIROUT) S DTOUT=1
- I $D(DTOUT)!($D(DUOUT)) Q
- ;
- ;Check that sequence number is new
- I $D(^TMP("PXRMDLG4",$J,"SEQ",X)) D Q
- .W !,"Sequence number "_X_" already in use."
- ;Check that sequence number is new and not being used by prompts
- I $D(^TMP("PXRMDLG4",$J,"PSEQ",X)) D Q
- .W !,"Sequence number "_X_" already in use."
- ;
- ;Check that the parent is a group or reminder dialog
- I X["." D Q:X=""
- .N CLASS,SUB
- .;Sequence number of parent
- .S SUB=$P(X,".",1,$L(X,".")-1)
- .I $G(SUB)=""!($G(SUB)=0) W !,"Invalid sequence number. A sequence number cannot be less then 1" H 2 Q
- .;Get IEN of parent dialog or group
- .S PIEN=$G(^TMP("PXRMDLG4",$J,"SEQ",SUB))
- .;Validate sequence number
- .I 'PIEN W !,"Sequence number is not part of an existing group." S X="" Q
- .;Validate that the parent is a group or reminder dialog
- .I "RG"'[$P($G(^PXRMD(801.41,PIEN,0)),U,4) D S X="" Q
- ..W !,"New sequences can only be added to groups or reminder dialogs"
- .;Disallow adding elements to national dialogs or groups
- .I $P($G(^PXMRD(801.41,PIEN,100)),U)="N" D Q:X=""
- ..Q:(DUZ(0)="@")&($G(PXRMINST)=1)
- ..W !,"Elements cannot be added to a national group" S X=""
- ;
- ;If adding to top level parent ien is reminder dialog
- I X?.N S PIEN=PXRMDIEN
- ;
- S SEQ=$P(X,".",$L(X,"."))
- Q
- ;
- ;
- HELP(CALL) ;General help text routine.
- N HTEXT
- N DIWF,DIWL,DIWR,IC
- S DIWF="C75",DIWL=0,DIWR=75
- ;
- I CALL=1 D
- .S HTEXT(1)="Sequence numbers can be added at any level. Specify the full"
- .S HTEXT(2)="number for the level required (e.g. 15.10.20)."
- ;
- D HELP^PXRMEUT(.HTEXT)
- Q
- ;
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPXRMDLG4 10607 printed Feb 18, 2025@23:10:18 Page 2
- PXRMDLG4 ;SLC/PJH - Reminder Dialog Edit/Inquiry ;09/09/2020
- +1 ;;2.0;CLINICAL REMINDERS;**4,6,12,16,26,45,71**;Feb 04, 2005;Build 43
- +2 ;
- WP(SUB,SUB1,WIDTH,SEQ,VALMCNT) ;Format WP text
- +1 NEW DIWF,DIWL,DIWR,IC,TEXT,X,TXTCNT,DTXT,CNT,SUB2
- +2 SET (CNT,SUB2,TXTCNT)=0
- +3 FOR
- SET SUB2=$ORDER(^PXRMD(801.41,SUB,SUB1,SUB2))
- if 'SUB2
- QUIT
- Begin DoDot:1
- +4 SET TXTCNT=TXTCNT+1
- SET DTXT(TXTCNT)=$GET(^PXRMD(801.41,SUB,SUB1,SUB2,0))
- +5 SET DTXT(TXTCNT)=$$STRREP^PXRMUTIL($GET(DTXT(TXTCNT)),"<br>","\\")
- End DoDot:1
- +6 IF TXTCNT>0
- Begin DoDot:1
- +7 NEW OUTPUT,NLINES
- +8 SET NLINES=0
- DO FORMAT^PXRMTEXT(1,WIDTH,TXTCNT,.DTXT,.NLINES,.OUTPUT)
- +9 IF NLINES>0
- KILL DTXT
- MERGE DTXT=OUTPUT
- End DoDot:1
- +10 SET CNT=0
- +11 FOR
- SET CNT=$ORDER(DTXT(CNT))
- if CNT=""
- QUIT
- Begin DoDot:1
- +12 SET TEXT=$GET(DTXT(CNT))
- SET VALMCNT=VALMCNT+1
- +13 SET ^TMP(NODE,$JOB,VALMCNT,0)=SEQ_TEXT
- SET SEQ=$JUSTIFY("",$LENGTH(SEQ))
- End DoDot:1
- +14 QUIT
- +15 ;
- ADD ;PXRM DIALOG ADD ELEMENT validation
- +1 NEW ANS,DTOUT,DUOUT,LIT,LOCK,Y,PIEN,ERR,IEN,NATIONAL,SEQ
- +2 WRITE IORESET
- +3 SET VALMBCK="R"
- SET NATIONAL=0
- +4 IF $PIECE($GET(^PXRMD(801.41,PXRMDIEN,100)),U)="N"
- SET NATIONAL=1
- +5 SET LOCK=$PIECE($GET(^PXRMD(801.41,PXRMDIEN,100)),U,4)
- +6 IF NATIONAL
- IF '($GET(PXRMINST)=1)&(DUZ(0)="@")
- IF $GET(LOCK)'=1
- Begin DoDot:1
- +7 WRITE !,"Elements may not be added to national reminder dialogs"
- HANG 2
- End DoDot:1
- QUIT
- +8 ;
- +9 FOR
- DO SEQ(.SEQ,.PIEN)
- if $DATA(DUOUT)!$DATA(DTOUT)
- QUIT
- if SEQ
- QUIT
- +10 if $DATA(DUOUT)!$DATA(DTOUT)
- QUIT
- +11 ;
- +12 ;Check if sequence number is OK
- +13 IF $GET(PIEN)=""
- QUIT
- +14 SET ANS="N"
- DO ASK^PXRMDLG5(.ANS,PIEN)
- if $DATA(DUOUT)!$DATA(DTOUT)!($GET(ANS)="N")
- QUIT
- +15 ;
- +16 ;Select a dialog element to add to parent dialog (PIEN)
- +17 ;PIEN may be dialog or a group within the dialog
- +18 DO ESEL^PXRMDEDT(PIEN,SEQ)
- +19 ;Rebuild workfile
- +20 DO BUILD^PXRMDLG(PXRMMODE)
- +21 QUIT
- +22 ;
- FADD(DIEN,FTAB,VIEW,NLINE) ;Additional Findings
- +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 ;
- +7 ;Save additional finding name
- +8 SET FOUND=1
- DO FSAVE(2,FNAME,FTYP,FTAB,FIND)
- +9 IF VIEW=2
- IF FIND["PXD(811.2,"
- DO TAXDISP^PXRMDTAX(FIND,"",DIEN,.NLINE,NODE,1,0)
- End DoDot:1
- +10 QUIT
- +11 ;
- DETAIL(DIEN,LEV,VIEW,NODE) ;;Build List Manager global for all components
- +1 NEW DDATA,DDLG,DEND,DCIEN,DNAM,DSEQ,DSTRT,IND,JND,DSUB
- +2 SET DSEQ=0
- +3 ;
- +4 ;Get each sequence number
- +5 FOR
- SET DSEQ=$ORDER(^PXRMD(801.41,DIEN,10,"B",DSEQ))
- if 'DSEQ
- QUIT
- Begin DoDot:1
- +6 ;Determine subscript
- +7 SET DSUB=$ORDER(^PXRMD(801.41,DIEN,10,"B",DSEQ,""))
- if 'DSUB
- QUIT
- +8 ;Get IEN of prompt/component
- +9 SET DCIEN=$PIECE($GET(^PXRMD(801.41,DIEN,10,DSUB,0)),U,2)
- if 'DCIEN
- QUIT
- +10 IF "PF"[$PIECE($GET(^PXRMD(801.41,DCIEN,0)),U,4)
- Begin DoDot:2
- +11 SET ^TMP("PXRMDLG PROMPTS",$JOB,DCIEN)=""
- +12 ;S ^TMP("PXRMDLG4",$J,"IEN",NSEL)=DIEN_U_DSEQ
- +13 ;S ^TMP("PXRMDLG4",$J,"SEQ",LEV_DSEQ)=DCIEN
- +14 SET ^TMP("PXRMDLG4",$JOB,"PIEN",NSEL)=DIEN_U_DSEQ
- +15 SET ^TMP("PXRMDLG4",$JOB,"PSEQ",LEV_DSEQ)=DCIEN
- End DoDot:2
- QUIT
- +16 ;Save line in workfile
- +17 DO DLINE(DCIEN,LEV,DSEQ,NODE)
- +18 ;Build pointers back to parent
- +19 IF VIEW'=4
- Begin DoDot:2
- +20 SET ^TMP("PXRMDLG4",$JOB,"IEN",NSEL)=DIEN_U_DSEQ
- +21 SET ^TMP("PXRMDLG4",$JOB,"SEQ",LEV_DSEQ)=DCIEN
- End DoDot:2
- +22 ;Process any sub-components
- +23 IF VIEW<5
- DO DETAIL(DCIEN,LEV_DSEQ_".",VIEW,NODE)
- End DoDot:1
- +24 QUIT
- +25 ;
- DLINE(DIEN,LEV,DSEQ,NODE) ;Save individual component details
- +1 NEW CNT,DBOX,DCAP,DDIS,DGRP,DMULT,DSUPP,DSHOW,DTYP,DTXT
- +2 NEW IC,RESNM,RESULT,RIEN,RNAME,RCNT
- +3 ;Dialog name: TESTDATA defined and NEW in PXRMDLG7
- +4 SET DDATA=$SELECT($GET(TESTDATA)'="":TESTDATA,1:$GET(^PXRMD(801.41,DIEN,0)))
- +5 ;S DDATA=$G(^PXRMD(801.41,DIEN,0))
- +6 SET DNAM=$PIECE(DDATA,U)
- if DNAM=""
- QUIT
- +7 ;Check if standard PXRM prompt
- +8 IF $$PXRM^PXRMEXID(DNAM)
- QUIT
- +9 ;Dialog Type and Disabled
- +10 SET DDIS=$PIECE(DDATA,U,3)
- SET DTYP=$PIECE(DDATA,U,4)
- +11 SET DTYP=$SELECT(DTYP="G":"Group",1:"Element")
- SET DNAM=DTYP_": "_DNAM
- +12 IF VIEW=5
- SET DNAM=DNAM
- +13 ;Resolution type and name
- +14 SET RNAME=""
- SET RIEN=$PIECE($GET(^PXRMD(801.41,DIEN,1)),U,3)
- +15 IF RIEN
- SET RNAME=$PIECE($GET(^PXRMD(801.9,RIEN,0)),U)
- +16 ;
- +17 ;Group fields
- +18 IF DTYP="Group"
- Begin DoDot:1
- +19 SET DGRP=1
- SET DTXT=$PIECE(DDATA,U,5)
- SET DCAP=" [group caption]"
- +20 IF DTXT=""
- SET DCAP=""
- +21 IF DTXT]""
- SET DCAP=DTXT_" "_DCAP
- +22 SET DBOX=$SELECT($PIECE(DDATA,U,6)="Y":"BOX",1:"NO BOX")
- +23 SET DSUPP=$SELECT($PIECE(DDATA,U,11)=1:"SUPPRESS",$PIECE(DDATA,U,11)="C":"CHECKED",1:"NO SUPPRESS")
- +24 SET DSHOW=$SELECT($PIECE(DDATA,U,10):"HIDE",1:"SHOW")
- +25 SET DMULT=$PIECE(DDATA,U,9)
- +26 SET DMULT=$SELECT(DMULT=1:"ONE ONLY",DMULT=2:"ONE OR MORE",DMULT=3:"NONE OR ONE",DMULT=4:"ALL REQUIRED",1:"NO SELECTION")
- End DoDot:1
- +27 ;
- +28 NEW DPTX,DTXT,EXIST,ITEM,TEMP,SEP,SEQ,TAB,ALTLEN
- +29 SET NSEL=NSEL+1
- SET NLINE=NLINE+1
- SET ITEM=NSEL
- SET SEP=$EXTRACT(LEV,$LENGTH(LEV))
- SET SEQ=LEV_DSEQ
- +30 ;Suppress Item numbers for INQ options
- +31 IF VIEW=4
- SET ITEM=""
- +32 ;Otherwise display Item, Sequence and Dialog Name
- +33 SET TEMP=$JUSTIFY(ITEM,4)_$JUSTIFY("",3)_SEQ
- SET TAB=$LENGTH(TEMP)+2
- +34 SET CNT=0
- FOR IC=1:1
- if '$PIECE(SEQ,".",IC)
- QUIT
- if $PIECE(SEQ,".",IC)<10
- SET CNT=CNT+1
- +35 SET TAB=TAB+CNT
- +36 ;
- +37 SET ALTLEN=$LENGTH(TEMP)
- +38 ;Display dialog name
- +39 SET TEMP=TEMP_$JUSTIFY("",2+CNT)_DNAM
- +40 ;Add disabled if present
- +41 IF +DDIS>0
- SET TEMP=TEMP_" (Disabled)"
- +42 ;
- +43 SET ^TMP(NODE,$JOB,NLINE,0)=TEMP
- +44 ;check for alternate dialog element/group
- +45 IF VIEW<2!(VIEW>4)
- Begin DoDot:1
- +46 IF $DATA(^PXRMD(801.41,DIEN,"BL"))>0
- DO ALT^PXRMDLG5(DIEN,LEV,DSEQ,NODE,VIEW,.NLINE,CNT,ALTLEN)
- End DoDot:1
- +47 ;
- +48 ;Dialog Text or P/N Text
- +49 IF (VIEW=2)!(VIEW=3)!(VIEW=4)
- Begin DoDot:1
- +50 NEW DGBEG,DGSUB,TSUB
- +51 SET DGSUB=0
- SET TSUB=$$TSUB^PXRMDLG1(DIEN,VIEW)
- +52 IF VIEW=4
- SET DGBEG=$JUSTIFY("",TAB)_"Text: "
- +53 IF VIEW'=4
- SET DGBEG=$JUSTIFY("",5+$LENGTH(SEQ)+CNT+$LENGTH(DTYP))_"Text: "
- +54 DO WP(DIEN,TSUB,65,.DGBEG,.NLINE)
- +55 IF DTYP="Group"
- Begin DoDot:2
- +56 SET TEMP=DGBEG_"["_DBOX_", "_DSUPP_", "_DSHOW_", "_DMULT_"]"
- +57 SET NLINE=NLINE+1
- SET ^TMP(NODE,$JOB,NLINE,0)=TEMP
- End DoDot:2
- End DoDot:1
- +58 ;
- +59 ;Set up selection index
- +60 SET ^TMP(NODE,$JOB,"IDX",NSEL,DIEN)=""
- +61 ;Insert finding items
- +62 IF (VIEW=1)!(VIEW=4)
- IF ("Element;Group"[DTYP)
- Begin DoDot:1
- +63 NEW DSUB,FDATA,FILENUM,FLIT,FLONG,FNAME,FOUND,FREP,FTYP,TEMP
- +64 ;Findings
- +65 SET FNAME=""
- SET FOUND=0
- +66 DO FDESC($PIECE($GET(^PXRMD(801.41,DIEN,1)),U,5))
- +67 IF FNAME'=""
- SET FOUND=1
- DO FSAVE(1,FNAME,FTYP,TAB)
- +68 ;Resolution
- +69 IF RNAME]""
- Begin DoDot:2
- +70 SET TEMP=$JUSTIFY("",TAB)_"Resolution: "_RNAME
- +71 SET NLINE=NLINE+1
- SET ^TMP(NODE,$JOB,NLINE,0)=TEMP
- End DoDot:2
- +72 ;Result Group
- +73 IF VIEW=4
- Begin DoDot:2
- +74 SET RCNT=0
- FOR
- SET RCNT=$ORDER(^PXRMD(801.41,DIEN,51,RCNT))
- if RCNT'>0
- QUIT
- Begin DoDot:3
- +75 SET RESULT=$PIECE($GET(^PXRMD(801.41,DIEN,51,RCNT,0)),U)
- +76 SET RESNM=$PIECE($GET(^PXRMD(801.41,RESULT,0)),U)
- if RESNM=""
- QUIT
- +77 SET TEMP=$JUSTIFY("",TAB)_"Result Group: "_RESNM
- +78 SET NLINE=NLINE+1
- SET ^TMP(NODE,$JOB,NLINE,0)=TEMP
- End DoDot:3
- End DoDot:2
- +79 ;Additional findings
- +80 DO FADD(DIEN,TAB,VIEW,.NLINE)
- End DoDot:1
- +81 ;Get additional prompts
- +82 IF VIEW=2
- Begin DoDot:1
- +83 SET FIEN=$PIECE($GET(^PXRMD(801.41,DIEN,1)),U,5)
- +84 IF $GET(FIEN)["PXD(811.2,"
- DO TAXDISP^PXRMDTAX(FIEN,DSEQ,DIEN,.NLINE,NODE,0,0)
- +85 DO FADD(DIEN,TAB,VIEW,.NLINE)
- End DoDot:1
- +86 IF VIEW
- IF VIEW<5
- IF "Element;Group"[DTYP
- DO PROMPT(DIEN,TAB,"Prompts: ",VIEW)
- +87 ;
- +88 IF VIEW=4
- IF $DATA(^PXRMD(801.41,DIEN,"BL"))>0
- DO ALT^PXRMDLG5(DIEN,LEV,DSEQ,NODE,VIEW,.NLINE,CNT,ALTLEN)
- +89 SET NLINE=NLINE+1
- +90 SET ^TMP(NODE,$JOB,NLINE,0)=$JUSTIFY("",79)
- +91 QUIT
- +92 ;
- FDESC(FIEN) ;Finding description
- +1 NEW FGLOB,FITEM,FNUM
- +2 SET FGLOB=$PIECE(FIEN,";",2)
- if FGLOB=""
- QUIT
- +3 SET FITEM=$PIECE(FIEN,";")
- if FITEM=""
- QUIT
- +4 SET FNUM=" ["_FITEM_"]"
- +5 IF FGLOB["ICD9"
- Begin DoDot:1
- +6 SET FTYP="DIAGNOSIS"
- SET FGLOB=U_FGLOB_FITEM_",0)"
- +7 SET FNAME=$PIECE($GET(@FGLOB),U,3)_FNUM
- End DoDot:1
- QUIT
- +8 IF FGLOB["WV"
- Begin DoDot:1
- +9 SET FTYP="WH NOTIFICATION PURPOSE"
- SET FGLOB=U_FGLOB_FITEM_",0)"
- +10 SET FNAME=$PIECE($GET(@FGLOB),U)_FNUM
- End DoDot:1
- QUIT
- +11 IF FGLOB["ICPT"
- Begin DoDot:1
- +12 SET FTYP="PROCEDURE"
- SET FGLOB=U_FGLOB_FITEM_",0)"
- +13 SET FNAME=$PIECE($GET(@FGLOB),U,2)_FNUM
- End DoDot:1
- QUIT
- +14 IF FGLOB["ORD(101.41"
- Begin DoDot:1
- +15 SET FTYP="QUICK ORDER"
- SET FGLOB=U_FGLOB_FITEM_",0)"
- +16 SET FNAME=$PIECE($GET(@FGLOB),U,2)_FNUM
- End DoDot:1
- QUIT
- +17 IF FGLOB["PXRMD(801.46"
- Begin DoDot:1
- +18 SET FTYP="GENERAL FINDING"
- SET FGLOB=U_FGLOB_FITEM_",0)"
- +19 SET FNAME=$PIECE($GET(@FGLOB),U)_FNUM
- End DoDot:1
- QUIT
- +20 ;Short name for finding type
- +21 SET FTYP=$GET(DEF1(FGLOB))
- if FTYP=""
- QUIT
- +22 ;Long name
- +23 SET FTYP=$GET(DEF2(FTYP))
- +24 SET FGLOB=U_FGLOB_FITEM_",0)"
- +25 SET FNAME=$PIECE($GET(@FGLOB),U,1)_FNUM
- +26 IF FNAME=""
- SET FNAME=$PIECE($GET(@FGLOB),U)_FNUM
- +27 IF FNAME=""
- SET FNAME=FITEM
- +28 QUIT
- +29 ;
- FSAVE(DSUB,FNAME,FTYP,FTAB,FIEN) ;Save finding details
- +1 NEW DCOL,IND,FMTSTR,NL,OUTPUT,TEMP,TEXT
- +2 IF DSUB>1
- Begin DoDot:1
- +3 SET DCOL=65-FTAB
- IF DCOL<10
- SET DCOL=10
- +4 SET FMTSTR=FTAB_"R^13L1^"_DCOL_"L"
- +5 SET TEXT=U_"Add. Finding:"
- End DoDot:1
- +6 IF DSUB=1
- Begin DoDot:1
- +7 SET DCOL=70-FTAB
- IF DCOL<10
- SET DCOL=10
- +8 SET FMTSTR=FTAB_"R^8L1^"_DCOL_"L"
- +9 SET TEXT=U_"Finding:"
- End DoDot:1
- +10 SET TEXT=TEXT_U_FNAME_" ("_FTYP_")"
- +11 DO COLFMT^PXRMTEXT(FMTSTR,TEXT," ",.NL,.OUTPUT)
- +12 FOR IND=1:1:NL
- Begin DoDot:1
- +13 SET NLINE=NLINE+1
- +14 SET ^TMP(NODE,$JOB,NLINE,0)=OUTPUT(IND)
- End DoDot:1
- +15 QUIT
- +16 ;
- PROMPT(IEN,TAB,TEXT,VIEW) ;additional prompts in the dialog file
- +1 NEW DATA,DDIS,DGSEQ,DNAME,DSUB,DTITLE,DTXT,DTYP,SEQ,SUB
- +2 SET SEQ=0
- +3 FOR
- SET SEQ=$ORDER(^PXRMD(801.41,IEN,10,"B",SEQ))
- if 'SEQ
- QUIT
- Begin DoDot:1
- +4 SET SUB=$ORDER(^PXRMD(801.41,IEN,10,"B",SEQ,""))
- if 'SUB
- QUIT
- +5 SET DSUB=$PIECE($GET(^PXRMD(801.41,IEN,10,SUB,0)),U,2)
- if 'DSUB
- QUIT
- +6 SET DATA=$GET(^PXRMD(801.41,DSUB,0))
- if DATA=""
- QUIT
- +7 SET DNAME=$PIECE(DATA,U)
- SET DDIS=$PIECE(DATA,U,3)
- SET DTYP=$PIECE(DATA,U,4)
- +8 IF "PF"'[DTYP
- QUIT
- +9 IF DTYP="F"
- SET DNAME=DNAME_" (forced value)"
- +10 IF DTYP="P"
- IF (VIEW=2)!(VIEW=3)
- Begin DoDot:2
- +11 ;Override prompt caption
- +12 SET DTITLE=$PIECE($GET(^PXRMD(801.41,IEN,10,SUB,0)),U,6)
- +13 IF DTITLE=""
- SET DTITLE=$PIECE($GET(^PXRMD(801.41,DSUB,2)),U,4)
- +14 SET DNAME=DTITLE
- End DoDot:2
- +15 SET DNAME=$JUSTIFY("",TAB)_TEXT_DNAME
- +16 if +DDIS>0
- SET DNAME=DNAME_" (Disabled)"
- +17 SET NLINE=NLINE+1
- +18 SET ^TMP(NODE,$JOB,NLINE,0)=DNAME
- +19 SET TEXT=$JUSTIFY("",$LENGTH(TEXT))
- End DoDot:1
- +20 QUIT
- +21 ;
- SEQ(SEQ,PIEN) ;Select sequence number to add
- +1 NEW X,Y,TEXT,DIR
- +2 KILL DIROUT,DIRUT,DTOUT,DUOUT
- +3 SET SEQ=0
- +4 SET DIR(0)="FA0;1;30"
- +5 SET DIR("A")="Enter a new SEQUENCE NUMBER: "
- +6 SET DIR("?")="Enter new sequence number. For detailed help type ??"
- +7 SET DIR("??")=U_"D HELP^PXRMDLG4(1)"
- +8 DO ^DIR
- KILL DIR
- +9 IF $DATA(DIROUT)
- SET DTOUT=1
- +10 IF $DATA(DTOUT)!($DATA(DUOUT))
- QUIT
- +11 ;
- +12 ;Check that sequence number is new
- +13 IF $DATA(^TMP("PXRMDLG4",$JOB,"SEQ",X))
- Begin DoDot:1
- +14 WRITE !,"Sequence number "_X_" already in use."
- End DoDot:1
- QUIT
- +15 ;Check that sequence number is new and not being used by prompts
- +16 IF $DATA(^TMP("PXRMDLG4",$JOB,"PSEQ",X))
- Begin DoDot:1
- +17 WRITE !,"Sequence number "_X_" already in use."
- End DoDot:1
- QUIT
- +18 ;
- +19 ;Check that the parent is a group or reminder dialog
- +20 IF X["."
- Begin DoDot:1
- +21 NEW CLASS,SUB
- +22 ;Sequence number of parent
- +23 SET SUB=$PIECE(X,".",1,$LENGTH(X,".")-1)
- +24 IF $GET(SUB)=""!($GET(SUB)=0)
- WRITE !,"Invalid sequence number. A sequence number cannot be less then 1"
- HANG 2
- QUIT
- +25 ;Get IEN of parent dialog or group
- +26 SET PIEN=$GET(^TMP("PXRMDLG4",$JOB,"SEQ",SUB))
- +27 ;Validate sequence number
- +28 IF 'PIEN
- WRITE !,"Sequence number is not part of an existing group."
- SET X=""
- QUIT
- +29 ;Validate that the parent is a group or reminder dialog
- +30 IF "RG"'[$PIECE($GET(^PXRMD(801.41,PIEN,0)),U,4)
- Begin DoDot:2
- +31 WRITE !,"New sequences can only be added to groups or reminder dialogs"
- End DoDot:2
- SET X=""
- QUIT
- +32 ;Disallow adding elements to national dialogs or groups
- +33 IF $PIECE($GET(^PXMRD(801.41,PIEN,100)),U)="N"
- Begin DoDot:2
- +34 if (DUZ(0)="@")&($GET(PXRMINST)=1)
- QUIT
- +35 WRITE !,"Elements cannot be added to a national group"
- SET X=""
- End DoDot:2
- if X=""
- QUIT
- End DoDot:1
- if X=""
- QUIT
- +36 ;
- +37 ;If adding to top level parent ien is reminder dialog
- +38 IF X?.N
- SET PIEN=PXRMDIEN
- +39 ;
- +40 SET SEQ=$PIECE(X,".",$LENGTH(X,"."))
- +41 QUIT
- +42 ;
- +43 ;
- HELP(CALL) ;General help text routine.
- +1 NEW HTEXT
- +2 NEW DIWF,DIWL,DIWR,IC
- +3 SET DIWF="C75"
- SET DIWL=0
- SET DIWR=75
- +4 ;
- +5 IF CALL=1
- Begin DoDot:1
- +6 SET HTEXT(1)="Sequence numbers can be added at any level. Specify the full"
- +7 SET HTEXT(2)="number for the level required (e.g. 15.10.20)."
- End DoDot:1
- +8 ;
- +9 DO HELP^PXRMEUT(.HTEXT)
- +10 QUIT
- +11 ;