| 1 | PXRMDLG ; SLC/PJH - Reminder Dialog Edit/Inquiry ;07/29/2004
 | 
|---|
| 2 |  ;;2.0;CLINICAL REMINDERS;;Feb 04, 2005
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ;Labels called from list 'PXRM DIALOG LIST'
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 | EXIT ;Exit code
 | 
|---|
| 7 |  D CLEAN^VALM10
 | 
|---|
| 8 |  D FULL^VALM1
 | 
|---|
| 9 |  S VALMBCK="Q"
 | 
|---|
| 10 |  K ^TMP("PXRMDLG",$J)
 | 
|---|
| 11 |  K ^TMP("PXRMDLG4",$J)
 | 
|---|
| 12 |  Q
 | 
|---|
| 13 |  ;
 | 
|---|
| 14 | HDR ; Header code
 | 
|---|
| 15 |  S VALMHDR(1)=PXRMHD
 | 
|---|
| 16 |  S VALMHDR(2)=""
 | 
|---|
| 17 |  S VALMSG="+ Next Screen   - Prev Screen   ?? More Actions"
 | 
|---|
| 18 |  Q
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 | HELP ;Help code
 | 
|---|
| 21 |  N ORU,ORUPRMT,XQORM,PXRMTAG S PXRMTAG="GDLG"
 | 
|---|
| 22 |  D EN^VALM("PXRM DIALOG MAIN HELP")
 | 
|---|
| 23 |  Q
 | 
|---|
| 24 |  ;
 | 
|---|
| 25 | INIT ;Init
 | 
|---|
| 26 |  S VALMCNT=0
 | 
|---|
| 27 |  ;Delete any sequence numbers without dialogs
 | 
|---|
| 28 |  D CHECK
 | 
|---|
| 29 |  ;Load details of dialog
 | 
|---|
| 30 |  D BUILD(0)
 | 
|---|
| 31 |  Q
 | 
|---|
| 32 |  ;
 | 
|---|
| 33 | PEXIT ;PXRM DIALOG MENU protocol exit code
 | 
|---|
| 34 |  S VALMSG="+ Next Screen   - Prev Screen   ?? More Actions"
 | 
|---|
| 35 |  ;Reset after page up or down
 | 
|---|
| 36 |  D XQORM
 | 
|---|
| 37 |  Q
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 |  ;Other Subroutines
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 | BUILD(INP) ;Build workfile (protocols PXRM DIALOG VIEW/LIST)
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 |  ;Variable VIEW is set in the calling protocol
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 |  ;0= DIALOG SUMMARY
 | 
|---|
| 46 |  ;1= DIALOG DETAILS
 | 
|---|
| 47 |  ;2= DIALOG TEXT
 | 
|---|
| 48 |  ;3= PROGRESS NOTE TEXT
 | 
|---|
| 49 |  ;4= INQUIRY (ALL FIELDS) - NO LISTMAN
 | 
|---|
| 50 |  ;5= DIALOG OVERVIEW
 | 
|---|
| 51 |  ;
 | 
|---|
| 52 |  S VIEW=INP,PXRMMODE=VIEW,VALMCNT=0,VALMBCK="R"
 | 
|---|
| 53 |  I VIEW=5 S VALMBG=1
 | 
|---|
| 54 |  K ^TMP("PXRMDLG",$J)
 | 
|---|
| 55 |  ;Headers
 | 
|---|
| 56 |  S DNAM=$P($G(^PXRMD(801.41,PXRMDIEN,0)),U)
 | 
|---|
| 57 |  I $P($G(^PXRMD(801.41,PXRMDIEN,0)),U,3)]"" D
 | 
|---|
| 58 |  .S DNAM=DNAM_" (DISABLED - "_$P($G(^PXRMD(801.41,PXRMDIEN,0)),U,3)_")"
 | 
|---|
| 59 |  S PXRMHD="DIALOG NAME: "_DNAM
 | 
|---|
| 60 |  I $P($G(^PXRMD(801.41,PXRMDIEN,0)),U,4)="R" D
 | 
|---|
| 61 |  .S PXRMHD="REMINDER "_PXRMHD
 | 
|---|
| 62 |  I $P($G(^PXRMD(801.41,PXRMDIEN,0)),U,4)="G" D
 | 
|---|
| 63 |  .S PXRMHD="DIALOG GROUP NAME: "_DNAM
 | 
|---|
| 64 |  I $P($G(^PXRMD(801.41,PXRMDIEN,100)),U)="N" D
 | 
|---|
| 65 |  .S PXRMHD=PXRMHD_" [NATIONAL] *LIMITED EDIT*"
 | 
|---|
| 66 |  D HDR
 | 
|---|
| 67 |  ;
 | 
|---|
| 68 |  N DATA,DGRP,DHED,FGLOB,FIEN,FITEM,FNAME,FNUM,FTYP,RESULT,RESNM
 | 
|---|
| 69 |  N NATIONAL,OIEN,ONAME,ONUM,PDIS,PIEN,PNAME,PTXT,PTYP,RIEN,RNAME,SEQ,SUB
 | 
|---|
| 70 |  ;Build list of finding items
 | 
|---|
| 71 |  N DEF,DEF1,DEF2 D DEF^PXRMRUTL("811.902",.DEF,.DEF1,.DEF2)
 | 
|---|
| 72 |  ;Check if nationalreminder dialog
 | 
|---|
| 73 |  S NATIONAL=0 S:$P($G(^PXRMD(801.41,PXRMDIEN,100)),U)="N" NATIONAL=1
 | 
|---|
| 74 |  ;Detail view of national dialogs allows only findings to be mapped 
 | 
|---|
| 75 |  I VIEW=1,NATIONAL D ^PXRMDLG3,XQORM Q
 | 
|---|
| 76 |  ;Build Listman array
 | 
|---|
| 77 |  D ARRAY(PXRMDIEN)
 | 
|---|
| 78 |  Q
 | 
|---|
| 79 |  ;
 | 
|---|
| 80 | ARRAY(DIEN) ;Build Dialog Display in list manager
 | 
|---|
| 81 |  ;
 | 
|---|
| 82 |  N DNLOCK,NLINE,NODE,NSEL
 | 
|---|
| 83 |  S NLINE=0,NODE="PXRMDLG",NSEL=0
 | 
|---|
| 84 |  K ^TMP("PXRMDLG4",$J)
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 |  S DNLOCK=$P($G(^PXRMD(801.41,DIEN,100)),U,4)
 | 
|---|
| 87 |  ;Group header
 | 
|---|
| 88 |  I $P($G(^PXRMD(801.41,DIEN,0)),U,4)="G" D
 | 
|---|
| 89 |  .D DLINE^PXRMDLG4(DIEN,"","",NODE)
 | 
|---|
| 90 |  ;Other components
 | 
|---|
| 91 |  D DETAIL^PXRMDLG4(DIEN,"",VIEW,NODE)
 | 
|---|
| 92 |  ;
 | 
|---|
| 93 |  ;Headers
 | 
|---|
| 94 |  N HDR2
 | 
|---|
| 95 |  I VIEW=0 S HDR2="Dialog Summary" I $G(VALMBG)="" S VALMBG=1
 | 
|---|
| 96 |  I VIEW=1 S HDR2="Detailed Display"
 | 
|---|
| 97 |  I VIEW=2 S HDR2="Dialog Text"
 | 
|---|
| 98 |  I VIEW=3 S HDR2="Progress Note Text"
 | 
|---|
| 99 |  I VIEW=5 S HDR2="Dialog Overview"
 | 
|---|
| 100 |  ;
 | 
|---|
| 101 |  ;Create headings
 | 
|---|
| 102 |  D CHGCAP^VALM("HEADER1","Item  Seq.")
 | 
|---|
| 103 |  D CHGCAP^VALM("HEADER2",HDR2)
 | 
|---|
| 104 |  D CHGCAP^VALM("HEADER3","")
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 |  S VALMCNT=NLINE
 | 
|---|
| 107 |  S ^TMP(NODE,$J,"VALMCNT")=VALMCNT
 | 
|---|
| 108 |  ;
 | 
|---|
| 109 |  D XQORM
 | 
|---|
| 110 |  Q
 | 
|---|
| 111 |  ;
 | 
|---|
| 112 | CHECK ;Search for sequence numbers with no dialog pointer
 | 
|---|
| 113 |  N CNT,DA,DCNT,DEL,DELTMP,IEN,NODE,SCNT,SEQ,SEQTMP,SNUM
 | 
|---|
| 114 |  S IEN=PXRMDIEN,DEL="",(CNT,DA,SCNT)=0
 | 
|---|
| 115 |  F  S DA=$O(^PXRMD(801.41,IEN,10,DA)) Q:+DA=0  S NODE=^PXRMD(801.41,IEN,10,DA,0) D
 | 
|---|
| 116 |  . I NODE'[U S CNT=CNT+1 S DELTMP(CNT)=DA
 | 
|---|
| 117 |  . I NODE[U S SCNT=SCNT+1 S SEQTMP($P($G(NODE),U),SCNT)=DA
 | 
|---|
| 118 |  I CNT>0 D DELBLANK(IEN,.DELTMP)
 | 
|---|
| 119 |  S (SNUM,SEQ)=0
 | 
|---|
| 120 |  F  S SEQ=$O(SEQTMP(SEQ)) Q:SEQ=""  S DCNT=0 F  S SNUM=$O(SEQTMP(SEQ,SNUM)) Q:+SNUM=0  S DCNT=DCNT+1 I DCNT>1 S DELTMP(DCNT)=SEQTMP(SEQ,SNUM) S DEL="Y"
 | 
|---|
| 121 |  I DEL="Y" D DELBLANK(IEN,.DELTMP)
 | 
|---|
| 122 |  Q
 | 
|---|
| 123 |  ;
 | 
|---|
| 124 | DELBLANK(IEN,DELTMP) ;Delete dialog multiple entry if dialog missing
 | 
|---|
| 125 |  N NUM,DA
 | 
|---|
| 126 |  S DA(1)=IEN
 | 
|---|
| 127 |  S NUM=0
 | 
|---|
| 128 |  F  S NUM=$O(DELTMP(NUM)) Q:NUM=""  D 
 | 
|---|
| 129 |  . S DA=DELTMP(NUM) Q:'DA
 | 
|---|
| 130 |  . S DIK="^PXRMD(801.41,"_DA(1)_",10,"
 | 
|---|
| 131 |  . D ^DIK
 | 
|---|
| 132 |  K DIK
 | 
|---|
| 133 |  Q
 | 
|---|
| 134 |  ;
 | 
|---|
| 135 | DESC(FIEN) ;Finding description
 | 
|---|
| 136 |  ;Determine finding type
 | 
|---|
| 137 |  S FGLOB=$P(FIEN,";",2) Q:FGLOB=""
 | 
|---|
| 138 |  S FITEM=$P(FIEN,";") Q:FITEM=""
 | 
|---|
| 139 |  ;Diagnosis POV
 | 
|---|
| 140 |  I FGLOB["ICD9" D  Q
 | 
|---|
| 141 |  .S FTYP="DIAGNOSIS",FGLOB=U_FGLOB_FITEM_",0)"
 | 
|---|
| 142 |  .S FNAME=$P($G(@FGLOB),U,3)_" ["_FITEM_"]"
 | 
|---|
| 143 |  ;Procedure CPT
 | 
|---|
| 144 |  I FGLOB["ICPT" D  Q
 | 
|---|
| 145 |  .S FTYP="PROCEDURE",FGLOB=U_FGLOB_FITEM_",0)"
 | 
|---|
| 146 |  .S FNAME=$P($G(@FGLOB),U,2)_" ["_FITEM_"]"
 | 
|---|
| 147 |  ;Quick order
 | 
|---|
| 148 |  I FGLOB["ORD(101.41" D  Q
 | 
|---|
| 149 |  .S FTYP="QUICK ORDER",FGLOB=U_FGLOB_FITEM_",0)"
 | 
|---|
| 150 |  .S FNAME=$P($G(@FGLOB),U,2)_" ["_FITEM_"]"
 | 
|---|
| 151 |  ;Short name for finding type
 | 
|---|
| 152 |  S FTYP=$G(DEF1(FGLOB)) Q:FTYP=""
 | 
|---|
| 153 |  S FNUM=" ["_FTYP_"("_FITEM_")]"
 | 
|---|
| 154 |  ;Long name
 | 
|---|
| 155 |  S FTYP=$G(DEF2(FTYP))
 | 
|---|
| 156 |  S FGLOB=U_FGLOB_FITEM_",0)"
 | 
|---|
| 157 |  S FNAME=$P($G(@FGLOB),U,1)
 | 
|---|
| 158 |  I FNAME="" S FNAME=$P($G(@FGLOB),U)
 | 
|---|
| 159 |  I FNAME]"" S FNAME=FNAME_FNUM Q
 | 
|---|
| 160 |  S FNAME=FITEM
 | 
|---|
| 161 |  Q
 | 
|---|
| 162 |  ;
 | 
|---|
| 163 | LIT(INP) ;Find description for dialog type
 | 
|---|
| 164 |  Q:INP="G" "Dialog group: "
 | 
|---|
| 165 |  Q:INP="F" "Forced value: "
 | 
|---|
| 166 |  Q:INP="P" "Prompt: "
 | 
|---|
| 167 |  Q:INP="E" "Dialog element: "
 | 
|---|
| 168 |  Q "???"
 | 
|---|
| 169 |  ;
 | 
|---|
| 170 | REMD ;Reminder Details
 | 
|---|
| 171 |  N ARRAY,SUB
 | 
|---|
| 172 |  ;Change listman headings
 | 
|---|
| 173 |  D CHGCAP^VALM("HEADER1","Reminder Inquiry")
 | 
|---|
| 174 |  D CHGCAP^VALM("HEADER2","")
 | 
|---|
| 175 |  D CHGCAP^VALM("HEADER3","")
 | 
|---|
| 176 |  ;Check if dialog is linked to a reminder
 | 
|---|
| 177 |  I 'PXRMITEM D  Q
 | 
|---|
| 178 |  .S ^TMP("PXRMDLG",$J,2,0)=" *This dialog is not linked to a reminder*"
 | 
|---|
| 179 |  ;Build array using print template
 | 
|---|
| 180 |  D REMVAR^PXRMINQ(.ARRAY,PXRMITEM)
 | 
|---|
| 181 |  ;Copy into Listman global
 | 
|---|
| 182 |  S SUB=0
 | 
|---|
| 183 |  F  S SUB=$O(ARRAY(SUB)) Q:'SUB  D
 | 
|---|
| 184 |  .S VALMCNT=SUB
 | 
|---|
| 185 |  .S ^TMP("PXRMDLG",$J,VALMCNT,0)=ARRAY(VALMCNT)
 | 
|---|
| 186 |  Q
 | 
|---|
| 187 |  ;
 | 
|---|
| 188 | SEL ;PXRM DIALOG SELECTION ITEM validation
 | 
|---|
| 189 |  N ERR,IEN,SEL
 | 
|---|
| 190 |  S VALMBCK="",SEL=+$P(XQORNOD(0),"=",2)
 | 
|---|
| 191 |  ;Invalid selection
 | 
|---|
| 192 |  I ('SEL)!(SEL>VALMCNT)!('$D(@VALMAR@("IDX",SEL))) D  Q
 | 
|---|
| 193 |  .W !,SEL_" is not an existing item number" H 2
 | 
|---|
| 194 |  ;Valid selection
 | 
|---|
| 195 |  S IEN=$O(@VALMAR@("IDX",SEL,"")) Q:'IEN
 | 
|---|
| 196 |  ;Copy/Delete/Edit dialog element
 | 
|---|
| 197 |  D IND^PXRMDEDI(IEN,SEL)
 | 
|---|
| 198 |  Q
 | 
|---|
| 199 |  ;
 | 
|---|
| 200 | XQORM ;Protocol Menu reset
 | 
|---|
| 201 |  S XQORM("#")=$O(^ORD(101,"B","PXRM DIALOG SELECTION ITEM",0))
 | 
|---|
| 202 |  S XQORM("#")=XQORM("#")_U_"1:"_VALMCNT
 | 
|---|
| 203 |  S XQORM("A")="Select Item: "
 | 
|---|
| 204 |  I PXRMGTYP="DLGE" D
 | 
|---|
| 205 |  .N FMENU
 | 
|---|
| 206 |  .S FMENU=$O(^ORD(101,"B","PXRM DIALOG GROUP MENU",0))_";ORD(101,"
 | 
|---|
| 207 |  .I FMENU S XQORM("HIJACK")=FMENU
 | 
|---|
| 208 |  I $G(PXRMDIEN)'="",$P($G(^PXRMD(801.41,PXRMDIEN,100)),U,4)=1,'$G(PXRMINST) D
 | 
|---|
| 209 |  .N FMENU
 | 
|---|
| 210 |  .S FMENU=$O(^ORD(101,"B","PXRM DIALOG LOCK",0))_";ORD(101,"
 | 
|---|
| 211 |  .I FMENU S XQORM("HIJACK")=FMENU
 | 
|---|
| 212 |  Q
 | 
|---|
| 213 |  ;
 | 
|---|
| 214 | XHLP(CALL) ;General help text routine.
 | 
|---|
| 215 |  N HTEXT
 | 
|---|
| 216 |  N DIWF,DIWL,DIWR,IC
 | 
|---|
| 217 |  S DIWF="C75",DIWL=0,DIWR=75
 | 
|---|
| 218 |  ;
 | 
|---|
| 219 |  I CALL=1 D
 | 
|---|
| 220 |  .S HTEXT(1)="Enter Yes to if you are adding a new sequence number or"
 | 
|---|
| 221 |  .S HTEXT(2)="dialog element to this reminder dialog."
 | 
|---|
| 222 |  K ^UTILITY($J,"W")
 | 
|---|
| 223 |  S IC=""
 | 
|---|
| 224 |  F  S IC=$O(HTEXT(IC)) Q:IC=""  D
 | 
|---|
| 225 |  . S X=HTEXT(IC)
 | 
|---|
| 226 |  . D ^DIWP
 | 
|---|
| 227 |  W !
 | 
|---|
| 228 |  S IC=0
 | 
|---|
| 229 |  F  S IC=$O(^UTILITY($J,"W",0,IC)) Q:IC=""  D
 | 
|---|
| 230 |  . W !,^UTILITY($J,"W",0,IC,0)
 | 
|---|
| 231 |  K ^UTILITY($J,"W")
 | 
|---|
| 232 |  W !
 | 
|---|
| 233 |  Q
 | 
|---|