| 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 | 
|---|