| 1 | PXRMGEDT ; SLC/PJH - PXRM General Edit/Add. ;11/08/2000
 | 
|---|
| 2 |  ;;2.0;CLINICAL REMINDERS;;Feb 04, 2005
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 |  ;Called from protocol PXRM SELECTION ADD
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 | ADD(TYP) ;
 | 
|---|
| 8 |  N DIC,DIDEL,DLAYGO,DTOUT,DUOUT,FILE,HED,PXRMHD,X,Y
 | 
|---|
| 9 |  W IORESET
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  ;Ignore finding type parameters
 | 
|---|
| 12 |  I "FPAR"=TYP D DUMMY^PXRMRUTL H 1 Q
 | 
|---|
| 13 |  ;
 | 
|---|
| 14 |  ;Edit dialog
 | 
|---|
| 15 |  I "DLGE"=TYP D ADD^PXRMDEDT Q
 | 
|---|
| 16 |  ;
 | 
|---|
| 17 |  ;Allow auto generate of reminder dialogs
 | 
|---|
| 18 |  I TYP["DLG" D ^PXRMDBLD Q
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 |  ;Finding Item Parameter
 | 
|---|
| 21 |  I TYP="FIP" S FILE="801.43",HED="FINDING ITEM PARAMETER"
 | 
|---|
| 22 |  ;
 | 
|---|
| 23 |  ;Reminder Category
 | 
|---|
| 24 |  I TYP="RCAT" S FILE="811.7",HED="REMINDER CATEGORY"
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 |  ;Resolution Status
 | 
|---|
| 27 |  I TYP="RESN" S FILE="801.9",HED="RESOLUTION STATUS"
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 |  ;Health Factor Resolution
 | 
|---|
| 30 |  I TYP="SHFR" S FILE="801.95",HED="HEALTH FACTOR"
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 |  F  D  Q:(X="")!$D(DUOUT)!$D(DTOUT)
 | 
|---|
| 33 |  .S DIC=FILE,DLAYGO=DIC,DIDEL=DIC,DIC(0)="QAELX"
 | 
|---|
| 34 |  .S DIC("A")="Select new "_HED_" name: "
 | 
|---|
| 35 |  .I TYP="SHFR" S DIC(0)="QAEL"
 | 
|---|
| 36 |  .D ^DIC Q:X=""
 | 
|---|
| 37 |  .I X=(U_U) S DTOUT=1
 | 
|---|
| 38 |  .I Y=-1 S DUOUT=1 W !,"Details not saved",! Q
 | 
|---|
| 39 |  .Q:$D(DTOUT)!$D(DUOUT)
 | 
|---|
| 40 |  .;Check if exists
 | 
|---|
| 41 |  .I ($P(Y,U,3)'=1) W !,"already exists" Q
 | 
|---|
| 42 |  .S DA=$P(Y,U)
 | 
|---|
| 43 |  .;Edit resolution status
 | 
|---|
| 44 |  .I TYP="RESN" D EDIT^PXRMSEDT("^PXRMD(801.9,",DA)
 | 
|---|
| 45 |  .;Edit others
 | 
|---|
| 46 |  .I TYP'="RESN" D EDIT(TYP,DA,1)
 | 
|---|
| 47 |  .S DUOUT=1
 | 
|---|
| 48 |  Q
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 | DIE(HDR,FILE) ;Lock and edit
 | 
|---|
| 51 |  I FILE=801.45 W "ED - EDIT "_HDR,!!,PXRMHD,!
 | 
|---|
| 52 |  ;Display resolution details if finding type parameter edit
 | 
|---|
| 53 |  I FILE=801.45,$G(PXRMINST)'=1 D
 | 
|---|
| 54 |  .N RSUB,RNAM
 | 
|---|
| 55 |  .S RSUB=$P($G(^PXRMD(801.45,PXRMFIEN,1,PXRMFSUB,0)),U) Q:'RSUB
 | 
|---|
| 56 |  .S RNAM=$P($G(^PXRMD(801.9,RSUB,0)),U)
 | 
|---|
| 57 |  .S:RNAM="" RNAM=RSUB W "RESOLUTION STATUS : ",RNAM
 | 
|---|
| 58 |  D:$$LOCK(FILE) ^DIE,UNLOCK(FILE)
 | 
|---|
| 59 |  Q
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 |  ;Called by protocol PXRM GENERAL EDIT
 | 
|---|
| 62 |  ;------------------------------------
 | 
|---|
| 63 | EDIT(TYP,DA,ADD) ;
 | 
|---|
| 64 |  N DIC,DIDEL,DIE,DR,DTOUT,DUOUT,Y
 | 
|---|
| 65 |  W IORESET
 | 
|---|
| 66 |  S VALMBCK="R"
 | 
|---|
| 67 |  ;
 | 
|---|
| 68 |  ;Taxonomy Dialog
 | 
|---|
| 69 |  I TYP="DTAX" D
 | 
|---|
| 70 |  .I $$TLOCK(811.2,DA) D  D TUNLOCK(811.2,DA)
 | 
|---|
| 71 |  ..;Initialize the selectable codes if none exist
 | 
|---|
| 72 |  ..I ('$D(^PXD(811.2,DA,"SDX")))&('$D(^PXD(811.2,DA,"SPR"))) D
 | 
|---|
| 73 |  ...D BUILD^PXRMTDUP(DA)
 | 
|---|
| 74 |  ..;
 | 
|---|
| 75 |  ..N DIE,DR
 | 
|---|
| 76 |  ..S DIE="^PXD(811.2,"
 | 
|---|
| 77 |  ..;
 | 
|---|
| 78 |  ..W !,"Dialog Text Fields"
 | 
|---|
| 79 |  ..S DR=".03;3107;3108;3111;3112"
 | 
|---|
| 80 |  ..D ^DIE
 | 
|---|
| 81 |  ..I $D(Y) Q
 | 
|---|
| 82 |  ..;
 | 
|---|
| 83 |  ..W !!,"Dialog Selectable codes"
 | 
|---|
| 84 |  ..S DR="3102;3104"
 | 
|---|
| 85 |  ..D ^DIE
 | 
|---|
| 86 |  ..I $D(Y) Q
 | 
|---|
| 87 |  ..;
 | 
|---|
| 88 |  ..W !!,"Dialog Generation Parameters"
 | 
|---|
| 89 |  ..S DR="3106;3110"
 | 
|---|
| 90 |  ..D ^DIE
 | 
|---|
| 91 |  ;
 | 
|---|
| 92 |  ;Finding Item Parameter
 | 
|---|
| 93 |  I TYP="FIP" D
 | 
|---|
| 94 |  .S DIE="^PXRMD(801.43,",DR=".01;.02;.03;.04",DIDEL=801.43
 | 
|---|
| 95 |  .D DIE("FINDING ITEM PARAMETER",801.43)
 | 
|---|
| 96 |  ;
 | 
|---|
| 97 |  ;Finding Type Parameter
 | 
|---|
| 98 |  I TYP="FPAR" D
 | 
|---|
| 99 |  .;Programmer mode
 | 
|---|
| 100 |  .S:$G(PXRMINST)=1 DR=1,DR(2,801.451)="1;3;4;5",DIE="^PXRMD(801.45,"
 | 
|---|
| 101 |  .;Site mode
 | 
|---|
| 102 |  .I $G(PXRMINST)'=1 D
 | 
|---|
| 103 |  ..S DR="1;3;4;5",DIE="^PXRMD(801.45,PXRMFIEN,1,",DA(1)=PXRMFIEN
 | 
|---|
| 104 |  ..S DR(2,801.4515)="2;4;5;6;1"
 | 
|---|
| 105 |  .D DIE("FINDING TYPE PARAMETER",801.45)
 | 
|---|
| 106 |  ;
 | 
|---|
| 107 |  ;Reminder Category
 | 
|---|
| 108 |  I TYP="RCAT" D
 | 
|---|
| 109 |  .S DIE="^PXRMD(811.7,",DR=".01;1;2;10",DIDEL=811.7
 | 
|---|
| 110 |  .D DIE("CATEGORY",811.7)
 | 
|---|
| 111 |  ;
 | 
|---|
| 112 |  ;Resolution Status
 | 
|---|
| 113 |  I TYP="RESN" D
 | 
|---|
| 114 |  .I $$LOCK(801.9) D EDIT^PXRMSEDT("^PXRMD(801.9,",.DA),UNLOCK(811.9)
 | 
|---|
| 115 |  ;
 | 
|---|
| 116 |  ;Health Factor Resolution
 | 
|---|
| 117 |  I TYP="SHFR" D
 | 
|---|
| 118 |  .S DIE="^PXRMD(801.95,",DR=".01;.02",DIDEL=801.95
 | 
|---|
| 119 |  .D DIE("HEALTH FACTOR RESOLUTIONS",811.7)
 | 
|---|
| 120 |  ;
 | 
|---|
| 121 |  ;Skip rebuild if editting taxonomy called from dialog edit
 | 
|---|
| 122 |  I PXRMGTYP["DLG" Q
 | 
|---|
| 123 |  ;
 | 
|---|
| 124 |  ;Deleted ???
 | 
|---|
| 125 |  I '$D(DA) S VALMBCK="Q" Q
 | 
|---|
| 126 |  ;Redisplay changes
 | 
|---|
| 127 |  I 'ADD D BUILD^PXRMGEN
 | 
|---|
| 128 |  Q
 | 
|---|
| 129 |  ;
 | 
|---|
| 130 |  ;
 | 
|---|
| 131 | LOCK(FILE) ;Lock the entire file
 | 
|---|
| 132 |  L +^PXRMD(FILE):0 I  Q 1
 | 
|---|
| 133 |  E  W !!,?5,"Another user is editing this file, try later" H 2
 | 
|---|
| 134 |  Q 0
 | 
|---|
| 135 |  ;
 | 
|---|
| 136 |  ;
 | 
|---|
| 137 | UNLOCK(FILE) ;Unlock the file
 | 
|---|
| 138 |  L -^PXRMD(FILE)
 | 
|---|
| 139 |  Q
 | 
|---|
| 140 |  ;Build the list of codes for one taxonomy
 | 
|---|
| 141 |  ;----------------------------------------
 | 
|---|
| 142 | SEL(TAXIND) ;
 | 
|---|
| 143 |  N CODELIST,IC,FINDING,FILE,HIGH,LOW,NCE,TEMP
 | 
|---|
| 144 |  ;
 | 
|---|
| 145 |  ;Setup file names for indirection, these will hold the taxonomy lists.
 | 
|---|
| 146 |  N ICD9IEN,ICPTIEN
 | 
|---|
| 147 |  S ICD9IEN="^TMP(""PXRM"",$J,""ICD9IEN"")"
 | 
|---|
| 148 |  S ICPTIEN="^TMP(""PXRM"",$J,""ICPTIEN"")"
 | 
|---|
| 149 |  ;
 | 
|---|
| 150 |  S NCE=0
 | 
|---|
| 151 |  F FILE=80,81 D
 | 
|---|
| 152 |  .S IC=0
 | 
|---|
| 153 |  .F  S IC=$O(^PXD(811.2,TAXIND,FILE,IC)) Q:+IC=0  D
 | 
|---|
| 154 |  ..S TEMP=$G(^PXD(811.2,TAXIND,FILE,IC,0))
 | 
|---|
| 155 |  ..;Append the taxonomy and finding information to CODELIST.
 | 
|---|
| 156 |  ..S NCE=NCE+1
 | 
|---|
| 157 |  ..S CODELIST(NCE)=TEMP_U_FILE
 | 
|---|
| 158 |  ;CODELIST is LOW_U_HIGH_U_FILE
 | 
|---|
| 159 |  ;Go through the standard coded list and get the file IEN for each entry.
 | 
|---|
| 160 |  F IC=1:1:NCE D
 | 
|---|
| 161 |  .S LOW=$P(CODELIST(IC),U,1)
 | 
|---|
| 162 |  .S HIGH=$P(CODELIST(IC),U,2)
 | 
|---|
| 163 |  .S FILE=$P(CODELIST(IC),U,3)
 | 
|---|
| 164 |  .I FILE=80 D ICD9(LOW,HIGH) Q
 | 
|---|
| 165 |  .I FILE=81 D ICPT(LOW,HIGH) Q
 | 
|---|
| 166 |  ;
 | 
|---|
| 167 |  ;Store the results.
 | 
|---|
| 168 |  D STORE(TAXIND)
 | 
|---|
| 169 |  K ^TMP("PXRM",$J,"ICD9IEN")
 | 
|---|
| 170 |  K ^TMP("PXRM",$J,"ICPTIEN")
 | 
|---|
| 171 |  Q
 | 
|---|
| 172 |  ;
 | 
|---|
| 173 |  ;=======================================================================
 | 
|---|
| 174 | DEL(TAXIND) ;Delete existing entry
 | 
|---|
| 175 |  K ^PXD(811.2,TAXIND,"SDX")
 | 
|---|
| 176 |  K ^PXD(811.2,TAXIND,"SPR")
 | 
|---|
| 177 |  Q
 | 
|---|
| 178 |  ;
 | 
|---|
| 179 |  ;Build the list of internal entries for ICD9 (File 80)
 | 
|---|
| 180 |  ;-----------------------------------------------------
 | 
|---|
| 181 | ICD9(LOW,HIGH) ;
 | 
|---|
| 182 |  N END,IEN,IND
 | 
|---|
| 183 |  S IND=LOW_" "
 | 
|---|
| 184 |  S END=HIGH_" "
 | 
|---|
| 185 |  F  Q:(IND]END)!(+IND>+END)!(IND="")  D
 | 
|---|
| 186 |  .S IEN=$O(^ICD9("BA",IND,""))
 | 
|---|
| 187 |  .I (+IEN>0),$$CODE^PXRMVAL($TR(IND," "),80) D
 | 
|---|
| 188 |  ..S ^TMP("PXRM",$J,"ICD9IEN",IND)=IEN
 | 
|---|
| 189 |  .S IND=$O(^ICD9("BA",IND))
 | 
|---|
| 190 |  Q
 | 
|---|
| 191 |  ;
 | 
|---|
| 192 |  ;Build the list of internal entries for ICPT (File 81)
 | 
|---|
| 193 |  ;-----------------------------------------------------
 | 
|---|
| 194 | ICPT(LOW,HIGH) ;
 | 
|---|
| 195 |  N IEN,IND
 | 
|---|
| 196 |  S IND=LOW
 | 
|---|
| 197 |  F  Q:(IND]HIGH)!(+IND>+HIGH)!(IND="")  D
 | 
|---|
| 198 |  .S IEN=$O(^ICPT("B",IND,""))
 | 
|---|
| 199 |  .I (+IEN>0),$$CODE^PXRMVAL($TR(IND," "),81) D
 | 
|---|
| 200 |  ..S ^TMP("PXRM",$J,"ICPTIEN",IND)=IEN
 | 
|---|
| 201 |  .S IND=$O(^ICPT("B",IND))
 | 
|---|
| 202 |  Q
 | 
|---|
| 203 |  ;
 | 
|---|
| 204 |  ;Store selectable codes in taxonomy
 | 
|---|
| 205 |  ;----------------------------------
 | 
|---|
| 206 | STORE(TAXIND) ;
 | 
|---|
| 207 |  K ^TMP("PXRMGEDT",$J)
 | 
|---|
| 208 |  N FDA,FDAIEN,FITEM,I2N,IEN,IND,MSG,NAME,SEQ,SUB,TEMP
 | 
|---|
| 209 |  ;
 | 
|---|
| 210 |  S NAME=$P(^PXD(811.2,TAXIND,0),U)
 | 
|---|
| 211 |  ;
 | 
|---|
| 212 |  S FDAIEN(1)=TAXIND
 | 
|---|
| 213 |  ;
 | 
|---|
| 214 |  S SUB="",IND=1,SEQ=0
 | 
|---|
| 215 |  F  S SUB=$O(^TMP("PXRM",$J,"ICD9IEN",SUB)) Q:SUB=""  D
 | 
|---|
| 216 |  .S IEN=^TMP("PXRM",$J,"ICD9IEN",SUB)
 | 
|---|
| 217 |  .S IND=IND+1,SEQ=SEQ+1
 | 
|---|
| 218 |  .S I2N="+"_IND_","_FDAIEN(1)_","
 | 
|---|
| 219 |  .S ^TMP("PXRMGEDT",$J,811.23102,I2N,.01)=IEN
 | 
|---|
| 220 |  ;
 | 
|---|
| 221 |  S SEQ=0
 | 
|---|
| 222 |  F  S SUB=$O(^TMP("PXRM",$J,"ICPTIEN",SUB)) Q:SUB=""  D
 | 
|---|
| 223 |  .S IEN=^TMP("PXRM",$J,"ICPTIEN",SUB)
 | 
|---|
| 224 |  .S IND=IND+1,SEQ=SEQ+1
 | 
|---|
| 225 |  .S I2N="+"_IND_","_FDAIEN(1)_","
 | 
|---|
| 226 |  .S ^TMP("PXRMGEDT",$J,811.23104,I2N,.01)=IEN
 | 
|---|
| 227 |  ;
 | 
|---|
| 228 |  ;None found
 | 
|---|
| 229 |  I IND=1 Q
 | 
|---|
| 230 |  ;
 | 
|---|
| 231 |  S TEMP="^TMP(""PXRMGEDT"","_$J_")"
 | 
|---|
| 232 |  D UPDATE^DIE("",TEMP,"FDAIEN","MSG")
 | 
|---|
| 233 |  I $D(MSG) D ERR
 | 
|---|
| 234 |  K ^TMP("PXRMGEDT",$J)
 | 
|---|
| 235 |  Q
 | 
|---|
| 236 |  ;
 | 
|---|
| 237 |  ;Error Handler
 | 
|---|
| 238 |  ;-------------
 | 
|---|
| 239 | ERR N ERROR,IC,REF
 | 
|---|
| 240 |  S ERROR(1)="Unable to build selectable codes for taxonomy : "
 | 
|---|
| 241 |  S ERROR(2)=NAME
 | 
|---|
| 242 |  S ERROR(3)="Error in UPDATE^DIE, needs further investigation"
 | 
|---|
| 243 |  ;Move MSG into ERROR
 | 
|---|
| 244 |  S REF="MSG"
 | 
|---|
| 245 |  F IC=4:1 S REF=$Q(@REF) Q:REF=""  S ERROR(IC)=REF_"="_@REF
 | 
|---|
| 246 |  ;Screen message
 | 
|---|
| 247 |  D BMES^XPDUTL(.ERROR)
 | 
|---|
| 248 |  Q
 | 
|---|
| 249 |  ;
 | 
|---|
| 250 | TLOCK(FILE,DA) ;Lock the record
 | 
|---|
| 251 |  L +^PXD(FILE,DA):0 I  Q 1
 | 
|---|
| 252 |  E  W !!,?5,"Another user is editing this file, try later" H 2 Q 0
 | 
|---|
| 253 |  ;
 | 
|---|
| 254 |  ;
 | 
|---|
| 255 | TUNLOCK(FILE,DA) ;Unlock the record
 | 
|---|
| 256 |  L -^PXD(FILE,DA)
 | 
|---|
| 257 |  Q
 | 
|---|