| 1 | TIUPXAPC ; SLC/JER - Get CPT stuff ;5/8/03@10:27
 | 
|---|
| 2 |  ;;1.0;TEXT INTEGRATION UTILITIES;**15,24,62,82,161**;Jun 20, 1997
 | 
|---|
| 3 | TEST ; Check it out
 | 
|---|
| 4 |  N TIULOC,CPTARR,CPT,TIUI
 | 
|---|
| 5 |  S TIULOC=+$$SELLOC^TIUVSIT,TIUI=0
 | 
|---|
| 6 |  D GETCPT(TIULOC,.CPTARR)
 | 
|---|
| 7 |  D CPT(.CPT,.CPTARR)
 | 
|---|
| 8 |  W ! F  S TIUI=$O(CPT(TIUI)) Q:+TIUI'>0  D
 | 
|---|
| 9 |  . W !,"CPT(",TIUI,")=",CPT(TIUI),!,"CPT(",TIUI,",""QTY"")="
 | 
|---|
| 10 |  . W CPT(TIUI,"QTY")
 | 
|---|
| 11 |  Q
 | 
|---|
| 12 |  ; Pass encounter date from TIUPXAPI to IBDF18A **161**
 | 
|---|
| 13 | GETCPT(TIULOC,CPTARR,TIUVDT) ; Get CPT codes for clinic
 | 
|---|
| 14 |  N TIUI,TIUROW,TIUCOL,ARRY2,TIUITM,TIUPAGE,EMARRY,TIUCAT S TIUCAT=""
 | 
|---|
| 15 |  ; Pass encounter date as 5th parameter to IBDF18A **161**
 | 
|---|
| 16 |  D GETLST^IBDF18A(+TIULOC,"DG SELECT VISIT TYPE CPT PROCEDURES","EMARRY",,,1,TIUVDT)
 | 
|---|
| 17 |  D GETLST^IBDF18A(+TIULOC,"DG SELECT CPT PROCEDURE CODES","ARRY2",,,1,TIUVDT)
 | 
|---|
| 18 |  I $D(EMARRY)>9 D CMBLST^TIUPXAP2(.EMARRY,.ARRY2) K EMARRY
 | 
|---|
| 19 |  S (TIUI,TIUROW,TIUITM)=0,(TIUCOL,TIUPAGE)=1
 | 
|---|
| 20 |  F  S TIUI=$O(ARRY2(TIUI)) Q:+TIUI'>0  D
 | 
|---|
| 21 |  . I $P(ARRY2(TIUI),U)]"" D  I 1
 | 
|---|
| 22 |  . . S TIUROW=+$G(TIUROW)+1,TIUITM=+$G(TIUITM)+1
 | 
|---|
| 23 |  . . ;Set CPT Display Array: Item #^CPT Code^Description^Group
 | 
|---|
| 24 |  . . S CPTARR(TIUROW,TIUCOL)=TIUITM_U_$P($G(ARRY2(TIUI)),U,1,2)_U_TIUCAT
 | 
|---|
| 25 |  . . S CPTARR("INDEX",TIUITM)=$P($G(ARRY2(TIUI)),U,1,2)_U_TIUCAT
 | 
|---|
| 26 |  . . ;If pre-selected CPT Modifiers are defined, add them to CPT Display Array
 | 
|---|
| 27 |  . . ;Pass encounter date to ADDMOD call to pass to ICPTMOD for CSV *161
 | 
|---|
| 28 |  . . I +$G(ARRY2(TIUI,"MODIFIER",0))>0 D ADDMOD(TIUITM,TIUI,.CPTARR,.ARRY2,.TIUROW,.TIUCOL,.TIUPAGE,TIUVDT)
 | 
|---|
| 29 |  . . K ARRY2(TIUI)
 | 
|---|
| 30 |  . E  D
 | 
|---|
| 31 |  . . S TIUROW=+$G(TIUROW)+1
 | 
|---|
| 32 |  . . S TIUCAT=$$UP^XLFSTR($P($G(ARRY2(TIUI)),U,2))
 | 
|---|
| 33 |  . . S CPTARR(TIUROW,TIUCOL)=U_U_TIUCAT
 | 
|---|
| 34 |  . . K ARRY2(TIUI)
 | 
|---|
| 35 |  . ;Update counters for CPT Display Array
 | 
|---|
| 36 |  . D UPDCNT(.TIUROW,.TIUCOL,.TIUPAGE)
 | 
|---|
| 37 |  I +$G(ARRY2(0))>0 D
 | 
|---|
| 38 |  . S TIUROW=+$G(TIUROW)+1,TIUITM=TIUITM+1
 | 
|---|
| 39 |  . S CPTARR(TIUROW,TIUCOL)=TIUITM_"^OTHER CPT^OTHER Procedure"
 | 
|---|
| 40 |  . S CPTARR("INDEX",TIUITM)="OTHER CPT^OTHER Procedure"
 | 
|---|
| 41 |  . S CPTARR(0)=+$G(ARRY2(0))_U_+$G(TIUROW)_U_+$G(TIUPAGE)
 | 
|---|
| 42 |  . ;Update counters for CPT Display Array
 | 
|---|
| 43 |  . D UPDCNT(.TIUROW,.TIUCOL,.TIUPAGE)
 | 
|---|
| 44 |  Q
 | 
|---|
| 45 |  ;
 | 
|---|
| 46 | UPDCNT(TIUROW,TIUCOL,TIUPAGE) ;Update Counters for CPT Display Array
 | 
|---|
| 47 |  ; Input  -- TIUROW   Row Counter
 | 
|---|
| 48 |  ;           TIUCOL   Column Counter
 | 
|---|
| 49 |  ;           TIUPAGE  Page Counter
 | 
|---|
| 50 |  ; Output -- Counters:
 | 
|---|
| 51 |  ;           TIUROW   Row Counter
 | 
|---|
| 52 |  ;           TIUCOL   Column Counter
 | 
|---|
| 53 |  ;           TIUPAGE  Page Counter
 | 
|---|
| 54 |  I TIUROW#20'>0 D
 | 
|---|
| 55 |  . S:TIUCOL=3 TIUPAGE=TIUPAGE+1
 | 
|---|
| 56 |  . S TIUCOL=$S(TIUCOL=3:1,1:TIUCOL+1)
 | 
|---|
| 57 |  . S TIUROW=20*(TIUPAGE-1)
 | 
|---|
| 58 |  Q
 | 
|---|
| 59 |  ;
 | 
|---|
| 60 |  ;Pass in encounter date to pass to ICPTMOD,TIUPXAPM for CSV **161**
 | 
|---|
| 61 | ADDMOD(TIUITM,TIUI,CPTARR,ARRY2,TIUROW,TIUCOL,TIUPAGE,TIUVDT) ;Add Pre-selected CPT Modifiers from AICS to CPT Display Array
 | 
|---|
| 62 |  ; Input  -- TIUITM   Item Number in CPT Display Array
 | 
|---|
| 63 |  ;           TIUI     Item Number in Combined AICS Selection List Array
 | 
|---|
| 64 |  ;           CPTARR   CPT Display Array
 | 
|---|
| 65 |  ;           ARRY2    Combined AICS Selection List Array
 | 
|---|
| 66 |  ;           TIUROW   Row Counter
 | 
|---|
| 67 |  ;           TIUCOL   Column Counter
 | 
|---|
| 68 |  ;           TIUPAGE  Page Counter
 | 
|---|
| 69 |  ; Output -- CPTARR   CPT Display Array
 | 
|---|
| 70 |  ;                 (TIUROW,TIUCOL)=
 | 
|---|
| 71 |  ;                    ^^^^CPT Modifier^CPT Modifier Name
 | 
|---|
| 72 |  ;                 ("INDEX",TIUITM,"MODIFIER",MODCNT)=
 | 
|---|
| 73 |  ;                    CPT Modifier IEN^CPT Modifier^CPT Modifier Name
 | 
|---|
| 74 |  ;           TIUROW   Row Counter
 | 
|---|
| 75 |  ;           TIUCOL   Column Counter
 | 
|---|
| 76 |  ;           TIUPAGE  Page Counter
 | 
|---|
| 77 |  ;    TIUVDT   Encounter Date
 | 
|---|
| 78 |  N MODCNT,MODIFIER,MODINFO
 | 
|---|
| 79 |  ;
 | 
|---|
| 80 |  ;Loop through pre-selected CPT Modifiers
 | 
|---|
| 81 |  S MODCNT=0
 | 
|---|
| 82 |  F  S MODCNT=$O(ARRY2(TIUI,"MODIFIER",MODCNT)) Q:'MODCNT  D
 | 
|---|
| 83 |  . S MODIFIER=$P(ARRY2(TIUI,"MODIFIER",MODCNT),U) Q:MODIFIER=""
 | 
|---|
| 84 |  . ;Invoke API to get CPT Modifier information
 | 
|---|
| 85 |  . ;Pass encounter date to ICPTMOD for CSV **161**
 | 
|---|
| 86 |  . S MODINFO=$$MOD^ICPTMOD(MODIFIER,,TIUVDT)
 | 
|---|
| 87 |  . I +MODINFO>0 D
 | 
|---|
| 88 |  . . S TIUROW=TIUROW+1
 | 
|---|
| 89 |  . . ;Set CPT Modifier and CPT Modifier Name into CPT Display Array
 | 
|---|
| 90 |  . . S CPTARR(TIUROW,TIUCOL)=U_U_U_U_$P(MODINFO,U,2,3)
 | 
|---|
| 91 |  . . ;Set CPT Modifier IEN, CPT Modifier and CPT Modifier Name into Index for CPT Display Array
 | 
|---|
| 92 |  . . S CPTARR("INDEX",TIUITM,"MODIFIER",MODCNT)=$P(MODINFO,U,1,3)
 | 
|---|
| 93 |  Q
 | 
|---|
| 94 |  ;
 | 
|---|
| 95 |  ;Pass encounter date to CPT to pass to ICPTCOD
 | 
|---|
| 96 | CPT(CPT,CPTARR,TIUVDT) ; Select Procedures
 | 
|---|
| 97 |  N I,J,L,Y,TIUCPT,TIUICNT,TIUPGS,TIUPG,TIUITM,TIULITM,TIUPNM
 | 
|---|
| 98 |  S TIUPNM=$S($L($G(TIU("PNM"))):$G(TIU("PNM")),+$G(DFN):$$PTNAME^TIULC1(DFN),1:"the Patient")
 | 
|---|
| 99 |  W !!,"Please Indicate the Procedure(s) Performed on "_TIUPNM_":"
 | 
|---|
| 100 |  W:+$O(CPTARR(0)) !
 | 
|---|
| 101 |  S TIUICNT=+$G(CPTARR(0)),TIUPGS=$P($G(CPTARR(0)),U,3)
 | 
|---|
| 102 |  S (I,J,L,Y)=0 I +TIUICNT S TIUPG=1
 | 
|---|
| 103 |  F  S I=$O(CPTARR(I)) Q:+I'>0  D
 | 
|---|
| 104 |  . S J=0 W ! F  S J=$O(CPTARR(I,J)) Q:+J'>0  D
 | 
|---|
| 105 |  . . W ?((J-1)*25) W:+$P(CPTARR(I,J),U) $J($P(CPTARR(I,J),U),2)_" " W $E($P(CPTARR(I,J),U,3),1,20)
 | 
|---|
| 106 |  . . ;Display pre-selected CPT Modifier
 | 
|---|
| 107 |  . . W:$P(CPTARR(I,J),U,5)'="" " -"_$P(CPTARR(I,J),U,5)_" "_$E($P(CPTARR(I,J),U,6),1,14)
 | 
|---|
| 108 |  . . S TIUITM=$S(+$G(CPTARR(I,J)):+$G(CPTARR(I,J)),1:$G(TIUITM))
 | 
|---|
| 109 |  . . S:TIUITM>+$G(TIULITM) TIULITM=TIUITM
 | 
|---|
| 110 |  . I I#20=0 S Y=$S(+Y:Y,1:"")_$P($$PICK^TIUPXAP2(1,+$G(TIULITM),"Select Procedures"_$S(+$G(TIUPG)<TIUPGS:" (<RETURN> to see next page of choices)",1:"")),U),TIUPG=+$G(TIUPG)+1 W !
 | 
|---|
| 111 |  . S L=I S:TIUITM>+$G(TIULITM) TIULITM=TIUITM
 | 
|---|
| 112 |  I L#20 S Y=$S(+Y:Y,1:"")_$P($$PICK^TIUPXAP2(1,TIULITM,"Select Procedures"),U)
 | 
|---|
| 113 |  I +Y,$P(CPTARR("INDEX",+Y),U)'="OTHER CPT" D  I 1
 | 
|---|
| 114 |  . N I,ITEM F I=1:1:($L(Y,",")-1) D
 | 
|---|
| 115 |  . . S ITEM=$P(Y,",",I)
 | 
|---|
| 116 |  . . I $P(CPTARR("INDEX",+ITEM),U)'="OTHER CPT" D  I 1
 | 
|---|
| 117 |  . . . S CPT(I)=$G(CPTARR("INDEX",+ITEM))
 | 
|---|
| 118 |  . . . S $P(CPT(I),U,4)=$P(CPT(I),U)
 | 
|---|
| 119 |  . . . ;Pass encounter date to CPT to pass to ICDTCOD for CSV **161**
 | 
|---|
| 120 |  . . . S $P(CPT(I),U)=+$$CPT^ICPTCOD($P(CPT(I),U),TIUVDT)
 | 
|---|
| 121 |  . . . I +CPT(I)'>0 D
 | 
|---|
| 122 |  . . . . K CPT(I)
 | 
|---|
| 123 |  . . . ELSE  D
 | 
|---|
| 124 |  . . . . ;Merge pre-selected CPT Modifiers from CPT Display Array into CPT Selection Array
 | 
|---|
| 125 |  . . . . M CPT(I,"MOD")=CPTARR("INDEX",ITEM,"MODIFIER")
 | 
|---|
| 126 |  . . ;Pass encounter date to CPTOUT for CSV **161**
 | 
|---|
| 127 |  . . E  D CPTOUT(.CPT,.I,TIUVDT)
 | 
|---|
| 128 |  E  D CPTOUT(.CPT,,TIUVDT)
 | 
|---|
| 129 |  I +$O(CPT(1)) D  I 1
 | 
|---|
| 130 |  . N TIUI S TIUI=0
 | 
|---|
| 131 |  . F  S TIUI=$O(CPT(TIUI)) Q:+TIUI'>0  D
 | 
|---|
| 132 |  . . S CPT(TIUI,"QTY")=+$$QTY(.CPT,TIUI)
 | 
|---|
| 133 |  . . K:CPT(TIUI,"QTY")'>0 CPT(TIUI)
 | 
|---|
| 134 |  . . ;Select CPT Modifiers
 | 
|---|
| 135 |  . . ;Pass encounter date to TIUPXAPM to pass to ICPTCOD for CVS **161**
 | 
|---|
| 136 |  . . I $D(CPT(TIUI)) D MOD^TIUPXAPM(.CPT,TIUI,TIUVDT)
 | 
|---|
| 137 |  E  I $D(CPT(1)) D
 | 
|---|
| 138 |  . S CPT(1,"QTY")=+$$QTY(.CPT,1)
 | 
|---|
| 139 |  . K:CPT(1,"QTY")'>0 CPT(1)
 | 
|---|
| 140 |  . ;Select CPT Modifiers
 | 
|---|
| 141 |  . ;Pass encounter date to TIUPXAPM to pass to ICPTCOD for CSV **161**
 | 
|---|
| 142 |  . I $D(CPT(1)) D MOD^TIUPXAPM(.CPT,1,TIUVDT)
 | 
|---|
| 143 |  Q
 | 
|---|
| 144 | QTY(CPT,TIUI) ; How many times was the procedure performed?
 | 
|---|
| 145 |  N PROMPT,HELP
 | 
|---|
| 146 |  S PROMPT="How many times was the procedure performed? "
 | 
|---|
| 147 |  S HELP="^D QTYHLP^TIUPXAPC"
 | 
|---|
| 148 |  W !!!,$$UP^XLFSTR($P(CPT(TIUI),U,2)),":",!
 | 
|---|
| 149 |  Q +$$READ^TIUU("NA^1:99",PROMPT,1,HELP)
 | 
|---|
| 150 | QTYHLP ; Help for QTY read
 | 
|---|
| 151 |  W !,"Please specify the number of repetitions for this procedure"
 | 
|---|
| 152 |  W !,"performed during this visit with the patient (1-99)."
 | 
|---|
| 153 |  Q
 | 
|---|
| 154 |  ; Pass in encounter date to pass to LEXSET for CSV **161**
 | 
|---|
| 155 | CPTOUT(CPT,TIUI,TIUVDT) ; Go off-list for Procedure(s)
 | 
|---|
| 156 |  N DIC,X,Y,TIUOUT
 | 
|---|
| 157 |  F  D  Q:+$G(TIUOUT)
 | 
|---|
| 158 |  . I $L($T(CONFIG^LEXSET)) D  I 1
 | 
|---|
| 159 |  . .; Pass encounter date to LEXSET for CSV **161**
 | 
|---|
| 160 |  . . D CONFIG^LEXSET("CHP","CHP",TIUVDT)  ; PCH 24
 | 
|---|
| 161 |  . E  S DIC="^ICPT("
 | 
|---|
| 162 |  . S DIC(0)="AEMQ"
 | 
|---|
| 163 |  . S DIC("A")="Select "_$S(+$G(CPTARR(0))'>0:"Procedure: ",1:"Another Procedure"_$S($D(CPTARR):" (NOT from Above List)",1:"")_": ")
 | 
|---|
| 164 |  . N X
 | 
|---|
| 165 |  . D ^DIC
 | 
|---|
| 166 |  . I +$D(DTOUT)!+$D(DUOUT)!(X="") S TIUOUT=1 Q
 | 
|---|
| 167 |  . I +Y>0 D  Q
 | 
|---|
| 168 |  . . ; Pass encounter date to LEXC to LEXSET for CSV **161**
 | 
|---|
| 169 |  . . I DIC="^LEX(757.01," S Y=$$LEXC(Y,TIUVDT)  ; PCH 24
 | 
|---|
| 170 |  . . S:$S(+$G(TIUI)'>0:1,$D(CPT(+$G(TIUI))):1,1:0) TIUI=$G(TIUI)+1
 | 
|---|
| 171 |  . . S CPT(TIUI)=Y
 | 
|---|
| 172 |  . W $C(7),!!,"Nothing found for ",X,"..."
 | 
|---|
| 173 |  . F  D  Q:(+Y>0)!+$G(TIUOUT)
 | 
|---|
| 174 |  . . N X
 | 
|---|
| 175 |  . . I $L($T(CONFIG^LEXSET)) D  I 1
 | 
|---|
| 176 |  . . .; Pass encounter date for CSV **161**
 | 
|---|
| 177 |  . . . D CONFIG^LEXSET("CHP","CHP",TIUVDT)  ; PCH 24
 | 
|---|
| 178 |  . . E  S DIC="^ICPT("
 | 
|---|
| 179 |  . . S DIC("A")="Please try another expression, or RETURN to continue: "
 | 
|---|
| 180 |  . . D ^DIC
 | 
|---|
| 181 |  . . I +$D(DTOUT)!+$D(DUOUT)!(X="") S TIUOUT=1 Q
 | 
|---|
| 182 |  . . I +Y>0 D  Q
 | 
|---|
| 183 |  . . . ; Pass encounter date to LEXC for CSV **161**
 | 
|---|
| 184 |  . . . I DIC="^LEX(757.01," S Y=$$LEXC(Y,TIUVDT)  ; PCH 24
 | 
|---|
| 185 |  . . . S:$S(+$G(TIUI)'>0:1,$D(CPT(+$G(TIUI))):1,1:0) TIUI=$G(TIUI)+1
 | 
|---|
| 186 |  . . . S CPT(TIUI)=Y
 | 
|---|
| 187 |  . . W $C(7),!!,"Nothing found for ",X,"..."
 | 
|---|
| 188 |  Q
 | 
|---|
| 189 |  ; Pass in encounter date for CSV **161**
 | 
|---|
| 190 | LEXC(Y,TIUVDT) ; Get CPT IEN from Lexicon returned code PCH 24
 | 
|---|
| 191 |  N TIUC,TIUCODE S Y=$G(Y)
 | 
|---|
| 192 |  ; Pass encounter date for CSV **161**
 | 
|---|
| 193 |  S TIUC=$$CPTONE^LEXU(+Y,TIUVDT) S:'$L(TIUC) TIUC=$$CPCONE^LEXU(+Y,TIUVDT)
 | 
|---|
| 194 |  I '$L(TIUC) S Y="-1"_U_$P(Y,U,2) Q Y
 | 
|---|
| 195 |  S TIUCODE=TIUC
 | 
|---|
| 196 |  ; Pass encounter date instead of current date to ICPTCOD for CSV **161**
 | 
|---|
| 197 |  S TIUC=+$$CPT^ICPTCOD(TIUCODE,TIUVDT) S Y=TIUC_U_$P(Y,U,2)
 | 
|---|
| 198 |  S Y=Y_"^^"_TIUCODE
 | 
|---|
| 199 |  Q Y
 | 
|---|