| 1 | ORQQPL1 ; ALB/PDR/REV - PROBLEM LIST FOR CPRS GUI ;03/12/02
 | 
|---|
| 2 |  ;;3.0;ORDER ENTRY/RESULTS REPORTING;**10,85,148,173,203,206,249**;Dec 17, 1997
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ;------------------------- GET PROBLEM FROM LEXICON -------------------
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 | LEXSRCH(LIST,FROM,N,VIEW,ORDATE) ; Get candidate Problems from LEX file
 | 
|---|
| 7 |  N LEX,VAL,VAL1,COD,CIEN,SYS,MAX,NAME
 | 
|---|
| 8 |  S:'+$G(ORDATE) ORDATE=DT
 | 
|---|
| 9 |  S:'$G(N) N=100
 | 
|---|
| 10 |  S:'$L($G(VIEW)) VIEW="PL1"
 | 
|---|
| 11 |  D CONFIG^LEXSET("GMPL",VIEW,ORDATE)
 | 
|---|
| 12 |  D LOOK^LEXA(FROM,"GMPL",N,"",ORDATE)
 | 
|---|
| 13 |  S S=0
 | 
|---|
| 14 |  F  S S=$O(LEX("LIST",S)) Q:S<1  D
 | 
|---|
| 15 |  . S VAL1=LEX("LIST",S)
 | 
|---|
| 16 |  . S COD="",CIEN="",SYS="",NAME=""
 | 
|---|
| 17 |  . I $L(VAL1,"CPT-4 ")>1 D
 | 
|---|
| 18 |  .. ;S SYS="CPT-4 "
 | 
|---|
| 19 |  .. ;S COD=$P($P(VAL1,SYS,2),")")
 | 
|---|
| 20 |  .. ;S:COD["/" COD=$P(COD,"/",1)
 | 
|---|
| 21 |  .. ;. S CIEN=$$CODEN^ICPTCOD(COD)
 | 
|---|
| 22 |  .. S SYS="ICD-9-CM "
 | 
|---|
| 23 |  .. S COD="799.9"
 | 
|---|
| 24 |  .. S CIEN=""
 | 
|---|
| 25 |  .. S NAME=$P(VAL1," (CPT-4")
 | 
|---|
| 26 |  . I $L(VAL1,"DSM-IV ")>1 D
 | 
|---|
| 27 |  .. S SYS="DSM-IV "
 | 
|---|
| 28 |  .. S COD=$P($P(VAL1,SYS,2),")")
 | 
|---|
| 29 |  .. S:COD["/" COD=$P(COD,"/",1)
 | 
|---|
| 30 |  .. S CIEN=$$CODEN^ICDCODE($$ICDONE^LEXU($P(VAL1,U,1),ORDATE),80)
 | 
|---|
| 31 |  .. S NAME=$P(VAL1," (DSM-IV")
 | 
|---|
| 32 |  .. ;
 | 
|---|
| 33 |  . I $L(VAL1,"(TITLE 38 ")>1 D
 | 
|---|
| 34 |  .. S SYS="TITLE 38 "
 | 
|---|
| 35 |  .. S COD=$P($P(VAL1,SYS,2),")")
 | 
|---|
| 36 |  .. S:COD["/" COD=$P(COD,"/",1)
 | 
|---|
| 37 |  .. S CIEN=$$CODEN^ICDCODE($$ICDONE^LEXU($P(VAL1,U,1),ORDATE),80)
 | 
|---|
| 38 |  .. S NAME=$P(VAL1,"(TITLE 38 ")
 | 
|---|
| 39 |  .. ;
 | 
|---|
| 40 |  . I $L(VAL1,"ICD-9-CM ")>1 D
 | 
|---|
| 41 |  .. S SYS="ICD-9-CM "
 | 
|---|
| 42 |  .. S COD=$P($P(VAL1,SYS,2),")")
 | 
|---|
| 43 |  .. S:COD["/" COD=$P(COD,"/",1)
 | 
|---|
| 44 |  .. S CIEN=+$$CODEN^ICDCODE(COD,80)
 | 
|---|
| 45 |  .. S NAME=$P(VAL1," (ICD-9-CM")
 | 
|---|
| 46 |  . I $L(NAME)=0 S NAME=$P($P(VAL1," (")," *")
 | 
|---|
| 47 |  . ;
 | 
|---|
| 48 |  . ; jeh Clean left over codes
 | 
|---|
| 49 |  . S NAME=$P(NAME," (CPT-4")
 | 
|---|
| 50 |  . S NAME=$P(NAME," (DSM-IV")
 | 
|---|
| 51 |  . S NAME=$P(NAME,"(TITLE 38 ")
 | 
|---|
| 52 |  . S NAME=$P(NAME," (ICD-9-CM")
 | 
|---|
| 53 |  . ;
 | 
|---|
| 54 |  . S VAL=NAME_U_COD_U_CIEN_U_SYS ; ien^.01^icd^icdifn^system
 | 
|---|
| 55 |  . S LIST(S)=VAL
 | 
|---|
| 56 |  . S MAX=S
 | 
|---|
| 57 |  I $G(MAX)'="" S LIST(MAX+1)=$G(LEX("MAT"))
 | 
|---|
| 58 |  Q
 | 
|---|
| 59 |  ;
 | 
|---|
| 60 | ICDREC(COD) ; 
 | 
|---|
| 61 |  N CODIEN
 | 
|---|
| 62 |  I COD="" Q ""
 | 
|---|
| 63 |  S COD=$P($P(COD,U),"/")
 | 
|---|
| 64 |  S CODIEN=+$O(^ICD9("AB",COD_" ",0))
 | 
|---|
| 65 |  S:CODIEN'>0 CODIEN=+$O(^ICD9("AB",COD_"0 ",0))
 | 
|---|
| 66 |  Q CODIEN
 | 
|---|
| 67 |  ;Q $O(^ICD9("BA",COD,""))
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 | CPTREC(COD) ; 
 | 
|---|
| 70 |  I COD="" Q ""
 | 
|---|
| 71 |  Q $O(^ICPT("BA",COD,""))
 | 
|---|
| 72 |  ;
 | 
|---|
| 73 | EDLOAD(RETURN,DA,GMPROV,GMPVAMC) ; LOAD  EDIT ARRAYS
 | 
|---|
| 74 |  ; DA=problem IFN
 | 
|---|
| 75 |  N I,GMPFLD,GMPORIG,GMPL
 | 
|---|
| 76 |  D GETFLDS^GMPLEDT3(DA)
 | 
|---|
| 77 |  S I=0
 | 
|---|
| 78 |  D LOADFLDS(.RETURN,"GMPFLD","NEW",.I)
 | 
|---|
| 79 |  D LOADFLDS(.RETURN,"GMPORIG","ORG",.I)
 | 
|---|
| 80 |  K GMPFLD,GMPORIG,GMPL  ; should not have to do this
 | 
|---|
| 81 |  Q
 | 
|---|
| 82 |  ;
 | 
|---|
| 83 | LOADFLDS(RETURN,NAM,TYP,I) ; LOAD FIELDS FOR TYPE OF ARRAY
 | 
|---|
| 84 |  N S,V,CVP,PN,PID
 | 
|---|
| 85 |  S S="",V=$C(254)
 | 
|---|
| 86 |  F  S S=$O(@NAM@(S)) Q:S=10  D
 | 
|---|
| 87 |  . S RETURN(I)=TYP_V_S_V_@NAM@(S)
 | 
|---|
| 88 |  . S I=I+1
 | 
|---|
| 89 |  S S=""
 | 
|---|
| 90 |  F  S S=$O(@NAM@(10,S)) Q:S=""  D
 | 
|---|
| 91 |  . S CVP=@NAM@(10,S)
 | 
|---|
| 92 |  . S PN="" ; provider name
 | 
|---|
| 93 |  . S PID=$P(CVP,U,6) ; provider id
 | 
|---|
| 94 |  . I PID'=""  S PN=$$GET1^DIQ(200,PID,.01) ; get provider name
 | 
|---|
| 95 |  . S RETURN(I)=TYP_V_"10,"_S_V_CVP_U_PN
 | 
|---|
| 96 |  . S I=I+1
 | 
|---|
| 97 |  Q
 | 
|---|
| 98 |  ;
 | 
|---|
| 99 | EDSAVE(RETURN,GMPIFN,GMPROV,GMPVAMC,UT,EDARRAY) ; SAVE EDITED RES
 | 
|---|
| 100 |  ; RETURN - boolean, 1 success, 0 failure
 | 
|---|
| 101 |  ; EDARRAY - array used for indirect sets of GMPORIG() and GMPFLDS()
 | 
|---|
| 102 |  ;
 | 
|---|
| 103 |  N GMPFLD,GMPORIG,S,GMPLUSER
 | 
|---|
| 104 |  S RETURN=1 ; initialize for success
 | 
|---|
| 105 |  I UT S GMPLUSER=1
 | 
|---|
| 106 |  ;
 | 
|---|
| 107 |  ;S GMPLUSER=1
 | 
|---|
| 108 |  S S=""
 | 
|---|
| 109 |  F  S S=$O(EDARRAY(S)) Q:S=""  D
 | 
|---|
| 110 |  . S @EDARRAY(S)
 | 
|---|
| 111 |  I $D(GMPFLD(10,"NEW"))>9 D  I 'RETURN Q  ; Bail Out if no lock
 | 
|---|
| 112 |  . L +^AUPNPROB(GMPIFN,11):10  ; given bogus nature of this lock, should be able to get
 | 
|---|
| 113 |  . I '$T S RETURN=0
 | 
|---|
| 114 |  ;
 | 
|---|
| 115 |  D EN^GMPLSAVE  ; save the data
 | 
|---|
| 116 |  K GMPFLD,GMPORIG
 | 
|---|
| 117 |  ;
 | 
|---|
| 118 |  L -^AUPNPROB(GMPIFN,11)  ; free this instance of lock (in case it was set)
 | 
|---|
| 119 |  S RETURN=1
 | 
|---|
| 120 |  Q
 | 
|---|
| 121 |  ;
 | 
|---|
| 122 | UPDATE(ORRETURN,UPDARRAY) ; UPDATE A PROBLEM RECORD
 | 
|---|
| 123 |  ; Does essentially same job as EDSAVE above, however does not handle edits to comments
 | 
|---|
| 124 |  ; or addition of multiple comments. 
 | 
|---|
| 125 |  ; Use initially just for status updates.
 | 
|---|
| 126 |  ;
 | 
|---|
| 127 |  N S,GMPL,GMPORIG ; last 2 vars created in nested call
 | 
|---|
| 128 |  S S=""
 | 
|---|
| 129 |  F  S S=$O(UPDARRAY(S)) Q:S=""  D
 | 
|---|
| 130 |  . S @UPDARRAY(S)
 | 
|---|
| 131 |  D UPDATE^GMPLUTL(.ORARRAY,.ORRETURN)
 | 
|---|
| 132 |  K ORARRAY
 | 
|---|
| 133 |  ; broker wont pick up root node RETURN
 | 
|---|
| 134 |  S ORRETURN(1)=ORRETURN(0) ; error text
 | 
|---|
| 135 |  S ORRETURN(0)=ORRETURN ; gmpdfn
 | 
|---|
| 136 |  I ORRETURN(0)=""  S ORRETURN=1 ; insurance ? need
 | 
|---|
| 137 |  Q
 | 
|---|
| 138 |  ;
 | 
|---|
| 139 | ADDSAVE(RETURN,GMPDFN,GMPROV,GMPVAMC,ADDARRAY) ; SAVE NEW RECORD
 | 
|---|
| 140 |  ; RETURN - Problem IFN if success, 0 otherwise
 | 
|---|
| 141 |  ; ADDARRAY - array used for indirect sets of  GMPFLDS()
 | 
|---|
| 142 |  ;
 | 
|---|
| 143 |  N DA,GMPFLD,GMPORIG,S
 | 
|---|
| 144 |  S RETURN=0 ;
 | 
|---|
| 145 |  L +^AUPNPROB(0):10
 | 
|---|
| 146 |  Q:'$T  ; bail out if no lock
 | 
|---|
| 147 |  ;
 | 
|---|
| 148 |  S S=""
 | 
|---|
| 149 |  F  S S=$O(ADDARRAY(S)) Q:S=""  D
 | 
|---|
| 150 |  . S @ADDARRAY(S)
 | 
|---|
| 151 |  ;
 | 
|---|
| 152 |  D NEW^GMPLSAVE
 | 
|---|
| 153 |  ;
 | 
|---|
| 154 |  S RETURN=DA
 | 
|---|
| 155 |  ;
 | 
|---|
| 156 |  L -^AUPNPROB(0)
 | 
|---|
| 157 |  S RETURN=1
 | 
|---|
| 158 |  Q
 | 
|---|
| 159 |  ;
 | 
|---|
| 160 | INITUSER(RETURN,ORDUZ) ; INITIALIZE FOR NEW USER
 | 
|---|
| 161 |  ; taken from INIT^GMPLMGR
 | 
|---|
| 162 |  ; leave GMPLUSER on symbol table - is evaluated in EDITSAVE
 | 
|---|
| 163 |  ; 
 | 
|---|
| 164 |  N X,PV,CTXT,GMPLPROV
 | 
|---|
| 165 |  S GMPLUSER=$$CLINUSER(DUZ)
 | 
|---|
| 166 |  S CTXT=$$GET^XPAR("ALL","ORCH CONTEXT PROBLEMS",1)
 | 
|---|
| 167 |  S X=$G(^GMPL(125.99,1,0)) ; IN1+6^GMPLMGR
 | 
|---|
| 168 |  S RETURN(0)=GMPLUSER ;  problem list user, or other user
 | 
|---|
| 169 |  S RETURN(1)=$$VIEW^GMPLX1(DUZ) ; GMPLVIEW("VIEW") - users default view
 | 
|---|
| 170 |  S RETURN(2)=+$P(X,U,2) ; verify transcribed problems
 | 
|---|
| 171 |  S RETURN(3)=+$P(X,U,3) ; prompt for chart copy
 | 
|---|
| 172 |  S RETURN(4)=+$P(X,U,4) ; use lexicon
 | 
|---|
| 173 |  S RETURN(5)=$S($P(X,U,5)="R":1,1:0) ; chron or reverse chron listing
 | 
|---|
| 174 |  S RETURN(6)=$S($P($G(CTXT),";",3)'="":$P($G(CTXT),";",3),1:"A")
 | 
|---|
| 175 |  S GMPLPROV=$P($G(CTXT),";",5)
 | 
|---|
| 176 |  I +GMPLPROV>0,$D(^VA(200,GMPLPROV)) D
 | 
|---|
| 177 |  . S RETURN(7)=GMPLPROV_U_$P(^VA(200,GMPLPROV,0),U)
 | 
|---|
| 178 |  E  S RETURN(7)="0^All"
 | 
|---|
| 179 |  S RETURN(8)=$$SERVICE^GMPLX1(DUZ) ; user's service/section
 | 
|---|
| 180 |  ; Guessing from what I see in the data that $$VIEW^GMPLX1 actually returns a composite
 | 
|---|
| 181 |  ; of default view (in/out patient)/(c1/c2... if out patient i.e. GMPLVIEW("CLIN")) or
 | 
|---|
| 182 |  ;                                                      /(s1/s2... if in patient i.e. GMPLVIEW("SERV"))
 | 
|---|
| 183 |  ; Going with this assumption for now:
 | 
|---|
| 184 |  I $L(RETURN(1),"/")>1 D
 | 
|---|
| 185 |  . S PV=RETURN(1)
 | 
|---|
| 186 |  . S RETURN(1)=$P(PV,"/")
 | 
|---|
| 187 |  . I RETURN(1)="C" S GMPLVIEW("CLIN")=$P(PV,"/",2,99)
 | 
|---|
| 188 |  . I RETURN(1)="S" S GMPLVIEW("SERV")=$P(PV,"/",2,99)
 | 
|---|
| 189 |  S RETURN(9)=$G(GMPLVIEW("SERV")) ; ??? Where from - see tech doc
 | 
|---|
| 190 |  S RETURN(10)=$G(GMPLVIEW("CLIN")) ; ??? Where from - see tech doc
 | 
|---|
| 191 |  S RETURN(11)=""
 | 
|---|
| 192 |  S RETURN(12)=+$P($G(CTXT),";",4)    ; should comments display?
 | 
|---|
| 193 |  K GMPLVIEW
 | 
|---|
| 194 |  Q
 | 
|---|
| 195 |  ;
 | 
|---|
| 196 | CLINUSER(ORDUZ) ;is this a clinical user?
 | 
|---|
| 197 |  N ORUSER
 | 
|---|
| 198 |  S ORUSER=0
 | 
|---|
| 199 |  I $D(^XUSEC("ORES",ORDUZ)) S ORUSER=1
 | 
|---|
| 200 |  I $D(^XUSEC("ORELSE",ORDUZ)) S ORUSER=1
 | 
|---|
| 201 |  I $D(^XUSEC("PROVIDER",ORDUZ)) S ORUSER=1
 | 
|---|
| 202 |  Q ORUSER
 | 
|---|
| 203 |  ;
 | 
|---|
| 204 | INITPT(RETURN,DFN) ; GET PATIENT PARAMETERS
 | 
|---|
| 205 |  Q:+$G(DFN)=0
 | 
|---|
| 206 |  N GMPSC,GMPAGTOR,GMPION,GMPGULF,GMPHNC,GMPMST
 | 
|---|
| 207 |  ;
 | 
|---|
| 208 |  S RETURN(0)=DUZ(2) ; facility #
 | 
|---|
| 209 |  D DEM^VADPT ; get death indicator
 | 
|---|
| 210 |  S RETURN(1)=$G(VADM(6)) ; death indicator
 | 
|---|
| 211 |  D VADPT^GMPLX1(DFN) ; get eligibilities
 | 
|---|
| 212 |  S RETURN(2)=$P(GMPSC,U) ; service connected
 | 
|---|
| 213 |  S RETURN(3)=$G(GMPAGTOR) ; agent orange exposure
 | 
|---|
| 214 |  S RETURN(4)=$G(GMPION) ; ionizing radiation exposure
 | 
|---|
| 215 |  S RETURN(5)=$G(GMPGULF) ; gulf war exposure
 | 
|---|
| 216 |  S RETURN(6)=VA("BID") ; need this to reconstitute GMPDFN on return
 | 
|---|
| 217 |  S RETURN(7)=$G(GMPHNC) ; head/neck cancer
 | 
|---|
| 218 |  S RETURN(8)=$G(GMPMST) ; MST
 | 
|---|
| 219 |  Q
 | 
|---|
| 220 |  ;
 | 
|---|
| 221 | PROVSRCH(LST,FLAG,N,FROM,PART) ; Get candidate Rroviders from person file
 | 
|---|
| 222 |  N LV,NS,RV,IEN
 | 
|---|
| 223 |  S RV=$NAME(LV("DILIST","ID"))
 | 
|---|
| 224 |  IF +$G(N)=0 S N=50
 | 
|---|
| 225 |  S FLAG=$G(FLAG),N=$G(N),FROM=$G(FROM),PART=$G(PART)
 | 
|---|
| 226 |  D LIST^DIC(200,"",".01;1",FLAG,N,FROM,PART,"","","","LV")
 | 
|---|
| 227 |  S NS=""
 | 
|---|
| 228 |  F  S NS=$O(LV("DILIST",1,NS)) Q:NS=""  D
 | 
|---|
| 229 |  . S IEN=""
 | 
|---|
| 230 |  . S IEN=$O(^VA(200,"B",@RV@(NS,.01),IEN)) ; compliments of PROV^ORQPTQ
 | 
|---|
| 231 |  . S LST(NS)=IEN_U_@RV@(NS,.01)  ; initials_U_@RV@(NS,1)
 | 
|---|
| 232 |  Q
 | 
|---|
| 233 |  ;
 | 
|---|
| 234 | CLINSRCH(Y,X) ; Get LIST OF CLINICS
 | 
|---|
| 235 |  ; Note: This comes from CLIN^ORQPTQ2, where it was commented out in place of 
 | 
|---|
| 236 |  ; a call to ^XPAR. I would have just used CLIN^ORQPTQ2, but it didn't work - at
 | 
|---|
| 237 |  ; least on SLC OEX directory.
 | 
|---|
| 238 |  ; X has no purpose other than to satisfy apparent rpc and tcallv requirement for args
 | 
|---|
| 239 |  N I,NAME,IEN
 | 
|---|
| 240 |  S I=1,IEN=0,NAME=""
 | 
|---|
| 241 |  ;access to SC global granted under DBIA #518:
 | 
|---|
| 242 |  F  S NAME=$O(^SC("B",NAME)) Q:NAME=""  S IEN=$O(^(NAME,0)) D
 | 
|---|
| 243 |  . I $P(^SC(IEN,0),"^",3)="C" S Y(I)=IEN_"^"_NAME,I=I+1
 | 
|---|
| 244 |  Q
 | 
|---|
| 245 |  ;
 | 
|---|
| 246 | SRVCSRCH(Y,FROM,DIR,ALL) ; GET LIST OF SERVICES
 | 
|---|
| 247 |  N I,IEN,CNT S I=0,CNT=44
 | 
|---|
| 248 |  F  Q:I=CNT  S FROM=$O(^DIC(49,"B",FROM),DIR) Q:FROM=""  D
 | 
|---|
| 249 |  . S IEN=$O(^DIC(49,"B",FROM,0)) I '$G(ALL),$P(^DIC(49,IEN,0),U,9)'="C" Q
 | 
|---|
| 250 |  . S I=I+1,Y(I)=IEN_"^"_FROM
 | 
|---|
| 251 |  Q
 | 
|---|
| 252 |  ;
 | 
|---|
| 253 | DUP(Y,DFN,TERM,TEXT) ;Check for duplicate problem
 | 
|---|
| 254 |  S Y=$$DUPL^GMPLX(DFN,TERM,TEXT) Q:+Y=0
 | 
|---|
| 255 |  I $P(^AUPNPROB(Y,1),U,2)="H" S Y=0 Q
 | 
|---|
| 256 |  S Y=Y_U_$P(^AUPNPROB(Y,0),U,12)
 | 
|---|
| 257 |  Q
 | 
|---|