| 1 | ORWPCE ; SLC/JM/REV - wrap calls to PCE and AICS;04/01/2003 ;07/05/04 | 
|---|
| 2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**10,85,116,173,190,195,215**;Dec 17, 1997 | 
|---|
| 3 | ; | 
|---|
| 4 | ; DBIA 2950   LOOK^LEXA          ^TMP("LEXFND",$J) | 
|---|
| 5 | ; DBIA 1609   CONFIG^LEXSET      ^TMP("LEXSCH",$J) | 
|---|
| 6 | ; DBIA 1365   DSELECT^GMPLENFM   ^TMP("IB",$J) | 
|---|
| 7 | ; DBIA 3991   $$STATCHK^ICDAPIU | 
|---|
| 8 | ; | 
|---|
| 9 | Q | 
|---|
| 10 | VISIT(LST,CLINIC,ORDATE) ; get list of visit types for clinic | 
|---|
| 11 | S:'+$G(ORDATE) ORDATE=DT | 
|---|
| 12 | D GETLST^IBDF18A(CLINIC,"DG SELECT VISIT TYPE CPT PROCEDURES","LST",,,,ORDATE) | 
|---|
| 13 | Q | 
|---|
| 14 | PROC(LST,CLINIC,ORDATE) ; get list of procedures for clinic P12 for CPTMods | 
|---|
| 15 | S:'+$G(ORDATE) ORDATE=DT | 
|---|
| 16 | D GETLST^IBDF18A(CLINIC,"DG SELECT CPT PROCEDURE CODES","LST",,,1,ORDATE) | 
|---|
| 17 | N IDX,MOD,CODES,FIRST S IDX=0 | 
|---|
| 18 | F  S IDX=$O(LST(IDX)) Q:'+IDX  D | 
|---|
| 19 | . I LST(IDX)="" K LST(IDX) Q | 
|---|
| 20 | . S MOD=0,CODES="",FIRST=1 | 
|---|
| 21 | . F  S MOD=$O(LST(IDX,"MODIFIER",MOD)) Q:(MOD="")  D | 
|---|
| 22 | . . I FIRST S FIRST=0 | 
|---|
| 23 | . . E  S CODES=CODES_";" | 
|---|
| 24 | . . S CODES=CODES_LST(IDX,"MODIFIER",MOD) | 
|---|
| 25 | . K LST(IDX,"MODIFIER") | 
|---|
| 26 | . I 'FIRST S $P(LST(IDX),U,12)=CODES | 
|---|
| 27 | Q | 
|---|
| 28 | CPTMODS(LST,ORCPTCOD,ORDATE) ;Return CPT Modifiers for a CPT Code | 
|---|
| 29 | N ORM,ORIDX,ORI,MODNAME | 
|---|
| 30 | S:'+$G(ORDATE) ORDATE=DT | 
|---|
| 31 | I +($$CODM^ICPTCOD(ORCPTCOD,$NA(ORM),0,ORDATE)),+$D(ORM) D | 
|---|
| 32 | . S ORIDX="",ORI=0 | 
|---|
| 33 | . F  S ORIDX=$O(ORM(ORIDX)) Q:(ORIDX="")  D | 
|---|
| 34 | . . S ORI=ORI+1,MODNAME=$P(ORM(ORIDX),U,1) | 
|---|
| 35 | . . S LST(MODNAME_ORI)=$P(ORM(ORIDX),U,2)_U_MODNAME_U_ORIDX | 
|---|
| 36 | Q | 
|---|
| 37 | GETMOD(MODINFO,ORMODIEN,ORDATE) ;Returns info for a specific CPT Modifier | 
|---|
| 38 | N ORDATA | 
|---|
| 39 | S:'+$G(ORDATE) ORDATE=DT | 
|---|
| 40 | S ORDATA=$$MOD^ICPTMOD(ORMODIEN,"I",ORDATE,1) | 
|---|
| 41 | I +ORDATA>0 S MODINFO=ORMODIEN_U_$P(ORDATA,U,3)_U_$P(ORDATA,U,2) | 
|---|
| 42 | Q | 
|---|
| 43 | DIAG(LST,CLINIC,ORDATE) ; get list of diagnoses for clinic | 
|---|
| 44 | S:'+$G(ORDATE) ORDATE=DT | 
|---|
| 45 | D GETLST^IBDF18A(CLINIC,"DG SELECT ICD-9 DIAGNOSIS CODES","LST",,,,ORDATE) | 
|---|
| 46 | Q | 
|---|
| 47 | IMM(LST,CLINIC) ;get list of immunizations for clinic | 
|---|
| 48 | D GETLST^IBDF18A(CLINIC,"PX SELECT IMMUNIZATIONS","LST") | 
|---|
| 49 | Q | 
|---|
| 50 | SK(LST,CLINIC) ;get list of skin test for clinic | 
|---|
| 51 | D GETLST^IBDF18A(CLINIC,"PX SELECT SKIN TESTS","LST") | 
|---|
| 52 | Q | 
|---|
| 53 | HF(LST,CLINIC) ;get list of health factors for clinic | 
|---|
| 54 | D GETLST^IBDF18A(CLINIC,"PX SELECT HEALTH FACTORS","LST") | 
|---|
| 55 | Q | 
|---|
| 56 | PED(LST,CLINIC) ;get list of education topices for clinic | 
|---|
| 57 | D GETLST^IBDF18A(CLINIC,"PX SELECT EDUCATION TOPICS","LST") | 
|---|
| 58 | Q | 
|---|
| 59 | TRT(LST,CLINIC) ;get list of treatments for clinic | 
|---|
| 60 | D GETLST^IBDF18A(CLINIC,"PX SELECT TREATMENTS","LST") | 
|---|
| 61 | Q | 
|---|
| 62 | XAM(LST,CLINIC) ;get list of exams for clinic | 
|---|
| 63 | D GETLST^IBDF18A(CLINIC,"PX SELECT EXAMS","LST") | 
|---|
| 64 | Q | 
|---|
| 65 | ACTPROB(GLST,DFN,ORDATE) ;get list of patient's active problems | 
|---|
| 66 | K ^TMP("IB",$J,"INTERFACES","GMP SELECT PATIENT ACTIVE PROBLEMS") | 
|---|
| 67 | S:'+$G(ORDATE) ORDATE=DT | 
|---|
| 68 | D DSELECT^GMPLENFM  ;DBIA 1365 | 
|---|
| 69 | N ORPROB,ORPROBIX,ORPRCNT | 
|---|
| 70 | S ORPRCNT=0 | 
|---|
| 71 | S ORPROBIX=0 | 
|---|
| 72 | F  S ORPROBIX=$O(^TMP("IB",$J,"INTERFACES","GMP SELECT PATIENT ACTIVE PROBLEMS",ORPROBIX)) Q:'ORPROBIX  D  ;DBIA 1365 | 
|---|
| 73 | . S ORPROB=$P(^TMP("IB",$J,"INTERFACES","GMP SELECT PATIENT ACTIVE PROBLEMS",ORPROBIX),"^",2,3) | 
|---|
| 74 | . I $E(ORPROB,1)="$" S ORPROB=$E(ORPROB,2,255) | 
|---|
| 75 | . I '$D(ORPROB(ORPROB)) D | 
|---|
| 76 | .. S ORPROB(ORPROB)="" | 
|---|
| 77 | .. S ORPRCNT=ORPRCNT+1 | 
|---|
| 78 | .. S $P(^TMP("IB",$J,"INTERFACES","GMP SELECT PATIENT ACTIVE PROBLEMS",ORPROBIX),"^",2,3)=ORPROB | 
|---|
| 79 | . E  K ^TMP("IB",$J,"INTERFACES","GMP SELECT PATIENT ACTIVE PROBLEMS",ORPROBIX) | 
|---|
| 80 | ; DBIA   10082     NAME: ICD DIAGNOSIS FILE | 
|---|
| 81 | N ORWINDEX,ORITEM | 
|---|
| 82 | S ORWINDEX=0 | 
|---|
| 83 | F  S ORWINDEX=$O(^TMP("IB",$J,"INTERFACES","GMP SELECT PATIENT ACTIVE PROBLEMS",ORWINDEX)) Q:'ORWINDEX  D:$P(^TMP("IB",$J,"INTERFACES","GMP SELECT PATIENT ACTIVE PROBLEMS",ORWINDEX),"^",1)]"" | 
|---|
| 84 | . S ORITEM=^TMP("IB",$J,"INTERFACES","GMP SELECT PATIENT ACTIVE PROBLEMS",ORWINDEX) | 
|---|
| 85 | . I '+$$STATCHK^ICDAPIU($P(ORITEM,"^",3),ORDATE) S $P(ORITEM,"^",11)="#"  ;DBIA 3991 | 
|---|
| 86 | . S ^TMP("IB",$J,"INTERFACES","GMP SELECT PATIENT ACTIVE PROBLEMS",ORWINDEX)=ORITEM | 
|---|
| 87 | S ^TMP("IB",$J,"INTERFACES","GMP SELECT PATIENT ACTIVE PROBLEMS",0)=ORPRCNT | 
|---|
| 88 | S GLST="^TMP(""IB"","_$J_",""INTERFACES"",""GMP SELECT PATIENT ACTIVE PROBLEMS"")" | 
|---|
| 89 | Q | 
|---|
| 90 | SCSEL(VAL,DFN,ATM,LOC,VST) ; return SC conditions that may be selected | 
|---|
| 91 | ; VAL=SCallow^SCdflt;AOallow^AOdflt;IRallow^IRdflt;ECallow^ECdflt; | 
|---|
| 92 | ;     MSTallow^MSTdflt;HNCallow^HNCdflt;CVAllow^CVDflt | 
|---|
| 93 | N ORX,S S S=";" | 
|---|
| 94 | D SCCOND^PXUTLSCC(DFN,ATM,LOC,$G(VST),.ORX) | 
|---|
| 95 | S VAL=$G(ORX("SC"))_S_$G(ORX("AO"))_S_$G(ORX("IR"))_S_$G(ORX("EC"))_S_$G(ORX("MST"))_S_$G(ORX("HNC"))_S_$G(ORX("CV")) | 
|---|
| 96 | Q | 
|---|
| 97 | SCDIS(LST,DFN) ; Return service connected % and rated disabilities | 
|---|
| 98 | N VAEL,VAERR,I,ILST,DIS,SC,X | 
|---|
| 99 | D ELIG^VADPT | 
|---|
| 100 | S LST(1)="Service Connected: "_$S(+VAEL(3):$P(VAEL(3),U,2)_"%",1:"NO") | 
|---|
| 101 | I 'VAEL(4),'$P($G(^DG(391,+VAEL(6),0)),U,2) S LST(2)="NOT A VETERAN." Q | 
|---|
| 102 | S I=0,ILST=1 F  S I=$O(^DPT(DFN,.372,I)) Q:'I  S X=^(I,0) D | 
|---|
| 103 | . S DIS=$P($G(^DIC(31,+X,0)),U) Q:DIS="" | 
|---|
| 104 | . S SC=$S($P(X,U,3):"SC",$P(X,U,3)']"":"not specified",1:"NSC") | 
|---|
| 105 | . S ILST=ILST+1,LST(ILST)=DIS_" ("_$P(X,U,2)_"% "_SC_")" | 
|---|
| 106 | I ILST=1 S LST(2)="Rated Disabilities: NONE STATED" | 
|---|
| 107 | Q | 
|---|
| 108 | CPTREQD(VAL,IEN) ; return 1 in VAL if note still needs a CPT code | 
|---|
| 109 | S VAL=+$P(^TIU(8925,IEN,0),U,11) | 
|---|
| 110 | Q | 
|---|
| 111 | NOTEVSTR(VAL,IEN) ; return the VSTR^AUTHOR for a note | 
|---|
| 112 | N X0,X12,VISIT | 
|---|
| 113 | S X0=$G(^TIU(8925,+IEN,0)),X12=$G(^(12)),VISIT=$P(X12,U,7) | 
|---|
| 114 | I +VISIT S VAL=$$VSTRBLD^TIUSRVP(VISIT) I 1 | 
|---|
| 115 | E  S VAL=$P(X12,U,11)_";"_$P(X0,U,7)_";"_$P(X0,U,13) | 
|---|
| 116 | Q | 
|---|
| 117 | HASVISIT(ORY,IEN,DFN,ORLOC,ORDTE) ;Has visit or is stand alone | 
|---|
| 118 | N ORVISIT | 
|---|
| 119 | S ORY=-1 | 
|---|
| 120 | I +$G(IEN)>0 S ORVISIT=+$P($G(^TIU(8925,+IEN,0)),U,3) | 
|---|
| 121 | I +$G(ORVISIT)'>0 S ORVISIT=$$GETENC^PXAPI(DFN,ORDTE,ORLOC) | 
|---|
| 122 | I +$G(ORVISIT)>0 S ORY=$$VST2APPT^PXAPI(ORVISIT) | 
|---|
| 123 | Q | 
|---|
| 124 | DELETE(VAL,VSTR,DFN) ; delete PCE info when deleting a note | 
|---|
| 125 | N VISIT,ORCOUNT | 
|---|
| 126 | N ZTIO,ZTRTN,ZTDTH,ZTSAVE,ZTDESC,ZTSYNC,ZTSK | 
|---|
| 127 | I '$D(^TMP("ORWPCE",$J,VSTR)) S VAL=0 Q  ; no PCE data saved yet | 
|---|
| 128 | I $P(VSTR,";",3)="H" S VAL=0 Q           ; leave inpatient alone | 
|---|
| 129 | I $L($T(DOCCNT^TIUSRVLV))=0 S VAL=0 Q    ; leave if no tiu entry point | 
|---|
| 130 | D DOCCNT^TIUSRVLV(.ORCOUNT,DFN,VSTR)     ; Do not delete if another | 
|---|
| 131 | I ORCOUNT>0 S VAL=0 Q                    ; title points to visit | 
|---|
| 132 | S ZTIO="ORW/PXAPI RESOURCE",ZTRTN="DQDEL^ORWPCE1",ZTDTH=$H | 
|---|
| 133 | S (ZTSAVE("VSTR"),ZTSAVE("DFN"))="",ZTDESC="CPRS Delete Note/PCE" | 
|---|
| 134 | S ZTSYNC="ORW"_VSTR | 
|---|
| 135 | D ^%ZTLOAD I '$D(ZTSK) D DQDEL^ORWPCE1 | 
|---|
| 136 | Q | 
|---|
| 137 | SAVE(OK,PCELIST,NOTEIEN,ORLOC) ; save PCE information | 
|---|
| 138 | N VSTR,GMPLUSER | 
|---|
| 139 | N ZTIO,ZTRTN,ZTDTH,ZTSAVE,ZTDESC,ZTSYNC,ZTSK | 
|---|
| 140 | S VSTR=$P(PCELIST(1),U,4) K ^TMP("ORWPCE",$J,VSTR) | 
|---|
| 141 | M ^TMP("ORWPCE",$J,VSTR)=PCELIST | 
|---|
| 142 | S GMPLUSER=$$CLINUSER^ORQQPL1(DUZ),NOTEIEN=+$G(NOTEIEN) | 
|---|
| 143 | S ZTIO="ORW/PXAPI RESOURCE",ZTRTN="DQSAVE^ORWPCE1",ZTDTH=$H | 
|---|
| 144 | S ZTSAVE("PCELIST(")="",ZTDESC="Data from CPRS to PCE" | 
|---|
| 145 | S ZTSAVE("GMPLUSER")="",ZTSAVE("NOTEIEN")="",ZTSAVE("DUZ")="" | 
|---|
| 146 | I VSTR'["E" S ZTSYNC="ORW"_VSTR | 
|---|
| 147 | S ZTSAVE("ORLOC")="" | 
|---|
| 148 | D ^%ZTLOAD I '$D(ZTSK) D DQSAVE^ORWPCE1 | 
|---|
| 149 | Q | 
|---|
| 150 | LEX(LST,X,APP,ORDATE)   ; return list after lexicon lookup | 
|---|
| 151 | N LEX,ILST,I,IEN | 
|---|
| 152 | S:APP="CPT" APP="CHP" ; LEX PATCH 10 | 
|---|
| 153 | S:'+$G(ORDATE) ORDATE=DT | 
|---|
| 154 | D CONFIG^LEXSET(APP,APP,ORDATE)  ;DBIA 1609 | 
|---|
| 155 | I APP="CHP" D | 
|---|
| 156 | . ; Set the filter for CPT only using CS APIs - format is the same as for DIC("S") | 
|---|
| 157 | . S ^TMP("LEXSCH",$J,"FIL",0)="I $L($$CPTONE^LEXU(+Y,$G(ORDATE)))!($L($$CPCONE^LEXU(+Y,$G(ORDATE))))"  ;DBIA 1609 | 
|---|
| 158 | . ; Set Applications Default Flag (Lexicon can not overwrite filter) | 
|---|
| 159 | . S ^TMP("LEXSCH",$J,"ADF",0)=1 | 
|---|
| 160 | D LOOK^LEXA(X,APP,1,"",ORDATE) | 
|---|
| 161 | I '$D(LEX("LIST",1)) S LST(1)="-1^No matches found." Q | 
|---|
| 162 | S LST(1)=LEX("LIST",1),ILST=1 | 
|---|
| 163 | S (I,IEN)="" | 
|---|
| 164 | F  S I=$O(^TMP("LEXFND",$J,I)) Q:I=""  D  ;DBIA 2950 | 
|---|
| 165 | .F  S IEN=$O(^TMP("LEXFND",$J,I,IEN)) Q:IEN=""  D | 
|---|
| 166 | ..S ILST=ILST+1,LST(ILST)=IEN_U_^TMP("LEXFND",$J,I,IEN) | 
|---|
| 167 | K ^TMP("LEXFND",$J),^TMP("LEXHIT",$J) | 
|---|
| 168 | Q | 
|---|
| 169 | LEXCODE(VAL,IEN,APP,ORDATE)     ; return code for a lexicon entry | 
|---|
| 170 | S VAL="" | 
|---|
| 171 | S:'+$G(ORDATE) ORDATE=DT | 
|---|
| 172 | I APP="ICD" S VAL=$$ICDONE^LEXU(IEN,ORDATE) | 
|---|
| 173 | I APP="CPT"!(APP="CHP") S VAL=$$CPTONE^LEXU(IEN,ORDATE) ; LEX PATCH 10 | 
|---|
| 174 | I VAL="",(APP="CHP") S VAL=$$CPCONE^LEXU(IEN,ORDATE) ; LEX PATCH 10 | 
|---|
| 175 | Q | 
|---|
| 176 | ADDRES ; Add the ORW/PXAPI RESOURCE device | 
|---|
| 177 | N X | 
|---|
| 178 | S X=$$RES^XUDHSET("ORW/PXAPI RESOURCE",,5,"CPRS to PCE transactions") | 
|---|
| 179 | Q | 
|---|
| 180 | GETSVC(NEWSVC,SVC,LOC,INP) ; Returns the correct Service Connected Category | 
|---|
| 181 | N DSS,ORWSVC | 
|---|
| 182 | S DSS=$P($G(^SC(+LOC,0)),U,7) | 
|---|
| 183 | Q:'+DSS | 
|---|
| 184 | M ORWSVC=SVC | 
|---|
| 185 | S NEWSVC=$$SVC^PXKCO(.ORWSVC,DSS,INP,LOC) ; DBIA #3225 | 
|---|
| 186 | Q | 
|---|