| 1 | PXRMCSTX ; SLC/PKR - Routines for taxonomy code set update. ; 02/22/2007
 | 
|---|
| 2 |  ;;2.0;CLINICAL REMINDERS;**9**;Feb 04, 2005;Build 4
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ;=====================================================
 | 
|---|
| 5 | ADDTMSG(LC,MSG) ;Add a set of messages to the global message.
 | 
|---|
| 6 |  N IND
 | 
|---|
| 7 |  S IND=0
 | 
|---|
| 8 |  F  S IND=$O(MSG(IND)) Q:IND=""  S LC=LC+1,^TMP("PXRMXMZ",$J,LC,0)=MSG(IND)
 | 
|---|
| 9 |  Q
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  ;=====================================================
 | 
|---|
| 12 | ADJMSG(FILENUM,LOW,HIGH,ALOW,ALOWC,ALOWO,AHIGH,AHIGHC,AHIGHO,ADJMSG) ;
 | 
|---|
| 13 |  ;Create the message for adjacent codes that have changed.
 | 
|---|
| 14 |  N LC,TYPE
 | 
|---|
| 15 |  K ADJMSG
 | 
|---|
| 16 |  S TYPE=$S(FILENUM=80:"ICD9",FILENUM=80.1:"ICD0",FILENUM=81:"CPT")
 | 
|---|
| 17 |  S ADJMSG(1)="Adjacent "_TYPE_" codes have changed for the range defined by:"
 | 
|---|
| 18 |  S ADJMSG(2)=" Low code  "_$$GETCTEXT(FILENUM,LOW)
 | 
|---|
| 19 |  S ADJMSG(3)=" High code "_$$GETCTEXT(FILENUM,HIGH)
 | 
|---|
| 20 |  S LC=3
 | 
|---|
| 21 |  I ALOWC D
 | 
|---|
| 22 |  . S LC=LC+1,ADJMSG(LC)="  Old adjacent lower code "_$$GETCTEXT(FILENUM,ALOWO)
 | 
|---|
| 23 |  . S LC=LC+1,ADJMSG(LC)="  New adjacent lower code "_$$GETCTEXT(FILENUM,ALOW)
 | 
|---|
| 24 |  E  S LC=LC+1,ADJMSG(LC)="  No change in adjacent lower code"
 | 
|---|
| 25 |  I AHIGHC D
 | 
|---|
| 26 |  . S LC=LC+1,ADJMSG(LC)="  Old adjacent higher code "_$$GETCTEXT(FILENUM,AHIGHO)
 | 
|---|
| 27 |  . S LC=LC+1,ADJMSG(LC)="  New adjacent higher code "_$$GETCTEXT(FILENUM,AHIGH)
 | 
|---|
| 28 |  E  S LC=LC+1,ADJMSG(LC)="  No change in adjacent higher code"
 | 
|---|
| 29 |  S LC=LC+1,ADJMSG(LC)=" "
 | 
|---|
| 30 |  Q
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 |  ;=====================================================
 | 
|---|
| 33 | CMSGHDR(TYPE) ;Create the message header.
 | 
|---|
| 34 |  N PTYPE
 | 
|---|
| 35 |  S PTYPE=$S(TYPE="CPT":"a CPT",TYPE="ICD":"an ICD")
 | 
|---|
| 36 |  S ^TMP("PXRMXMZ",$J,1,0)="There was "_PTYPE_" code set update on "_$$FMTE^XLFDT(DT,"5Z")_"."
 | 
|---|
| 37 |  S ^TMP("PXRMXMZ",$J,2,0)="This could affect adjacent codes and/or taxonomy expansions."
 | 
|---|
| 38 |  S ^TMP("PXRMXMZ",$J,3,0)="Please review the affected taxonomies and take appropriate action."
 | 
|---|
| 39 |  S ^TMP("PXRMXMZ",$J,4,0)="You can get the full details of a taxonomy using the taxonomy inquiry option."
 | 
|---|
| 40 |  S ^TMP("PXRMXMZ",$J,5,0)=" "
 | 
|---|
| 41 |  Q
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 |  ;=====================================================
 | 
|---|
| 44 | CSU(TYPE) ;Entry point for code set update.
 | 
|---|
| 45 |  I TYPE'="CPT",TYPE'="ICD" Q
 | 
|---|
| 46 |  N ADJMSG,ALOW,ALOWC,ALOWO,AHIGH,AHIGHC,AHIGHO,CODEIEN,CODEMSG
 | 
|---|
| 47 |  N FI,FILELIST,FILENUM,IEN,IND,HIGH,LC,LOW,NFILES,NNEW,NEWCODES,SENDMSG
 | 
|---|
| 48 |  N TAXHDRE,TAXHDRL,TAXHDRS,TAXMSG,TEMP,XMSUB
 | 
|---|
| 49 |  I TYPE="CPT" S NFILES=1,FILELIST(1)=81
 | 
|---|
| 50 |  I TYPE="ICD" S NFILES=2,FILELIST(1)=80,FILELIST(2)=80.1
 | 
|---|
| 51 |  K ^TMP("PXRMXMZ",$J)
 | 
|---|
| 52 |  ;Set the line count to the end of the taxonomy header.
 | 
|---|
| 53 |  S TAXHDRS=6,TAXHDRL=1,TAXHDRE=TAXHDRS+TAXHDRL,LC=TAXHDRE
 | 
|---|
| 54 |  S (IEN,SENDMSG)=0
 | 
|---|
| 55 |  F  S IEN=+$O(^PXD(811.2,IEN)) Q:IEN=0  D
 | 
|---|
| 56 |  . F FI=1:1:NFILES D
 | 
|---|
| 57 |  .. S FILENUM=FILELIST(FI)
 | 
|---|
| 58 |  .. I '$D(^PXD(811.2,IEN,FILENUM,"B")) Q
 | 
|---|
| 59 |  .. S (IND,TAXMSG)=0
 | 
|---|
| 60 |  .. F  S IND=+$O(^PXD(811.2,IEN,FILENUM,IND)) Q:IND=0  D
 | 
|---|
| 61 |  ... S TEMP=^PXD(811.2,IEN,FILENUM,IND,0)
 | 
|---|
| 62 |  ... S LOW=$P(TEMP,U,1),HIGH=$P(TEMP,U,2)
 | 
|---|
| 63 |  ... S ALOWO=$P(TEMP,U,3),AHIGHO=$P(TEMP,U,4)
 | 
|---|
| 64 |  ... S ALOW=$S(FILENUM=80:$$PREV^ICDAPIU(LOW),FILENUM=80.1:$$PREV^ICDAPIU(LOW),FILENUM=81:$$PREV^ICPTAPIU(LOW))
 | 
|---|
| 65 |  ... S AHIGH=$S(FILENUM=80:$$NEXT^ICDAPIU(HIGH),FILENUM=80.1:$$NEXT^ICDAPIU(HIGH),FILENUM=81:$$NEXT^ICPTAPIU(HIGH))
 | 
|---|
| 66 |  ... I ALOW'=ALOWO S ALOWC=1,$P(^PXD(811.2,IEN,FILENUM,IND,0),U,3)=ALOW
 | 
|---|
| 67 |  ... E  S ALOWC=0
 | 
|---|
| 68 |  ... I AHIGH'=AHIGHO S AHIGHC=1,$P(^PXD(811.2,IEN,FILENUM,IND,0),U,4)=AHIGH
 | 
|---|
| 69 |  ... E  S AHIGHC=0
 | 
|---|
| 70 |  ... I ALOWC!AHIGHC D
 | 
|---|
| 71 |  .... D ADJMSG(FILENUM,LOW,HIGH,ALOW,ALOWC,ALOWO,AHIGH,AHIGHC,AHIGHO,.ADJMSG)
 | 
|---|
| 72 |  .... D ADDTMSG(.LC,.ADJMSG)
 | 
|---|
| 73 |  .... S TAXMSG=1
 | 
|---|
| 74 |  ..;Save the old expansion and compare with the old one.
 | 
|---|
| 75 |  .. K ^TMP($J,"OLDEXP")
 | 
|---|
| 76 |  .. S IND=0
 | 
|---|
| 77 |  .. F  S IND=+$O(^PXD(811.3,IEN,FILENUM,IND)) Q:IND=0  D
 | 
|---|
| 78 |  ... S CODEIEN=^PXD(811.3,IEN,FILENUM,IND,0)
 | 
|---|
| 79 |  ... S ^TMP($J,"OLDEXP",CODEIEN)=""
 | 
|---|
| 80 |  ..;Rexpand and compare with the old.
 | 
|---|
| 81 |  .. D DELEXTL^PXRMBXTL(IEN)
 | 
|---|
| 82 |  .. D EXPAND^PXRMBXTL(IEN,"")
 | 
|---|
| 83 |  ..;Old codes are never deleted from the ICD or CPT globals so just
 | 
|---|
| 84 |  ..;check for new entries in the expansion.
 | 
|---|
| 85 |  .. S (IND,NNEW)=0
 | 
|---|
| 86 |  .. F  S IND=+$O(^PXD(811.3,IEN,FILENUM,IND)) Q:IND=0  D
 | 
|---|
| 87 |  ... S CODEIEN=^PXD(811.3,IEN,FILENUM,IND,0)
 | 
|---|
| 88 |  ... I '$D(^TMP($J,"OLDEXP",CODEIEN)) S NNEW=NNEW+1,NEWCODES(NNEW)=CODEIEN
 | 
|---|
| 89 |  ..;If there are any new codes add them to the message.
 | 
|---|
| 90 |  .. I NNEW>0 D
 | 
|---|
| 91 |  ... D NEWCMSG(FILENUM,NNEW,.NEWCODES,.CODEMSG)
 | 
|---|
| 92 |  ... D ADDTMSG(.LC,.CODEMSG)
 | 
|---|
| 93 |  ... S TAXMSG=1
 | 
|---|
| 94 |  ..;Check the selectable codes.
 | 
|---|
| 95 |  .. D SELCODE^PXRMCSSC(FILENUM,IEN,.LC,.TAXMSG)
 | 
|---|
| 96 |  .. I TAXMSG D
 | 
|---|
| 97 |  ... D TAXHDR(IEN,TAXHDRS)
 | 
|---|
| 98 |  ... S TAXHDRS=LC+1,TAXHDRE=TAXHDRS+TAXHDRL,LC=TAXHDRE
 | 
|---|
| 99 |  ... S SENDMSG=1
 | 
|---|
| 100 |  S XMSUB="Clinical Reminder taxonomy updates, new "_TYPE_" global installation."
 | 
|---|
| 101 |  I SENDMSG D CMSGHDR(TYPE)
 | 
|---|
| 102 |  I 'SENDMSG D
 | 
|---|
| 103 |  . S ^TMP("PXRMXMZ",$J,1,0)="No changes in adjacent high and low codes were found."
 | 
|---|
| 104 |  . S ^TMP("PXRMXMZ",$J,2,0)="No inactive selectable codes were found."
 | 
|---|
| 105 |  . S ^TMP("PXRMXMZ",$J,3,0)="No action is necessary."
 | 
|---|
| 106 |  D SEND^PXRMMSG(XMSUB)
 | 
|---|
| 107 |  K ^TMP("PXRMXMZ",$J),^TMP($J,"OLDEXP")
 | 
|---|
| 108 |  Q
 | 
|---|
| 109 |  ;
 | 
|---|
| 110 |  ;=====================================================
 | 
|---|
| 111 | GETCTEXT(FILENUM,CODE) ;Return the code and text associated with the code.
 | 
|---|
| 112 |  N TEMP,TEXT
 | 
|---|
| 113 |  I FILENUM=80 D  Q TEXT
 | 
|---|
| 114 |  . S TEMP=$$ICDDX^ICDCODE(CODE,DT)
 | 
|---|
| 115 |  . S TEXT=$P(TEMP,U,2)_"-"_$P(TEMP,U,4)
 | 
|---|
| 116 |  I FILENUM=80.1 D  Q TEXT
 | 
|---|
| 117 |  . S TEMP=$$ICDOP^ICDCODE(CODE,DT)
 | 
|---|
| 118 |  . S TEXT=$P(TEMP,U,2)_"-"_$P(TEMP,U,5)
 | 
|---|
| 119 |  I FILENUM=81 D
 | 
|---|
| 120 |  . S TEMP=$$CPT^ICPTCOD(CODE,DT)
 | 
|---|
| 121 |  . S TEXT=$P(TEMP,U,2)_"-"_$P(TEMP,U,3)
 | 
|---|
| 122 |  Q TEXT
 | 
|---|
| 123 |  ;
 | 
|---|
| 124 |  ;=====================================================
 | 
|---|
| 125 | NEWCMSG(FILENUM,NNEW,NEWCODES,CODEMSG) ;Create the message for new codes
 | 
|---|
| 126 |  ;appearing in the expansion.
 | 
|---|
| 127 |  I NNEW=0 Q
 | 
|---|
| 128 |  N LC,IND,TYPE
 | 
|---|
| 129 |  K CODEMSG
 | 
|---|
| 130 |  S TYPE=$S(FILENUM=80:"ICD9",FILENUM=80.1:"ICD0",FILENUM=81:"CPT")
 | 
|---|
| 131 |  S CODEMSG(1)="The following are new "_TYPE_" codes in the expansion for this taxonomy:"
 | 
|---|
| 132 |  S LC=1
 | 
|---|
| 133 |  F IND=1:1:NNEW D
 | 
|---|
| 134 |  . S CODE=NEWCODES(IND)
 | 
|---|
| 135 |  . S LC=LC+1,CODEMSG(LC)=" "_$$GETCTEXT(FILENUM,CODE)
 | 
|---|
| 136 |  S LC=LC+1,CODEMSG(LC)=" "
 | 
|---|
| 137 |  Q
 | 
|---|
| 138 |  ;
 | 
|---|
| 139 |  ;=====================================================
 | 
|---|
| 140 | TAXHDR(IEN,LC) ;Create message header for a specific taxonomy.
 | 
|---|
| 141 |  S ^TMP("PXRMXMZ",$J,LC,0)="Taxonomy: "_$P(^PXD(811.2,IEN,0),U,1)_" = TX("_IEN_")"
 | 
|---|
| 142 |  Q
 | 
|---|
| 143 |  ;
 | 
|---|