| 1 | ORWDBA1 ;; SLC OIFO/DKK/GSS - Order Dialogs Billing Awareness;[10/21/03 3:16pm]
 | 
|---|
| 2 |  ;;3.0;ORDER ENTRY/RESULTS REPORTING;**190,195,229,215**;Dec 17, 1997
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ; External References
 | 
|---|
| 5 |  ;   DBIA    406  CL^SDCO21 - call to determine Treatment Factors
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 |  ;Ref to ^DIC(9.4 - DBIA ___
 | 
|---|
| 8 |  ;BA refers to Billing Awareness Project
 | 
|---|
| 9 |  ;CIDC refers to Clinical Indicator Data Capture (same project 3/10/2004)
 | 
|---|
| 10 |  ;Treatment Factors (TxF) refer to SC,AO,IR,EC,MST,HNC,CV
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 | GETORDX(Y,ORIEN) ; Retrieve Diagnoses for an order - RPC
 | 
|---|
| 13 |  ; Input:
 | 
|---|
| 14 |  ;   ORIEN    Order Internal ID#
 | 
|---|
| 15 |  ; Output:
 | 
|---|
| 16 |  ;   Y        Array of Diagnoses (Dx) - Y(#)=#^DxInt#^ICD9^DxDesc^TxF
 | 
|---|
| 17 |  ; Variables used:
 | 
|---|
| 18 |  ;   CT       Counter for # of Dx related to order
 | 
|---|
| 19 |  ;   DXIEN    Dx internal ID
 | 
|---|
| 20 |  ;   DXN      Internal (to ^OR(100)) sequence # for Dx storage
 | 
|---|
| 21 |  ;   DXREC    Dx record from Order file
 | 
|---|
| 22 |  ;   DXV      Dx description
 | 
|---|
| 23 |  ;   ICD9     External ICD9 #
 | 
|---|
| 24 |  ;   TXFACTRS Treatment Factors (TxF)
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 |  N CT,DXIEN,DXN,DXREC,DXV,ICD9,ICDR,ORFMDAT,TXFACTRS
 | 
|---|
| 27 |  S (CT,DXN)=0
 | 
|---|
| 28 |  I '$G(^OR(100,ORIEN,0)) S Y=-1
 | 
|---|
| 29 |  I '$D(^OR(100,ORIEN,5.1,1,0)) S Y=0
 | 
|---|
| 30 |  E  D  S Y=CT
 | 
|---|
| 31 |  . ; Get order date for CSV/CTD/HIPAA usage
 | 
|---|
| 32 |  . S ORFMDAT=$$ORFMDAT^ORWDBA3(ORIEN)
 | 
|---|
| 33 |  . ; Go through all Dx's for an order
 | 
|---|
| 34 |  . F  S DXN=$O(^OR(100,ORIEN,5.1,DXN)) Q:DXN'?1N.N  D
 | 
|---|
| 35 |  .. ; Get diagnosis record and IEN
 | 
|---|
| 36 |  .. S DXREC=$G(^OR(100,ORIEN,5.1,DXN,0)),DXIEN=$P(DXREC,U)
 | 
|---|
| 37 |  .. S ICDR=$$ICDDX^ICDCODE($G(DXIEN),ORFMDAT)
 | 
|---|
| 38 |  .. S DXV=$P(ICDR,U,4),ICD9=$P(ICDR,U,2)
 | 
|---|
| 39 |  .. ; Convert internal to external Treatment Factors
 | 
|---|
| 40 |  .. S TXFACTRS=$$TFGBLGUI(^OR(100,ORIEN,5.2))
 | 
|---|
| 41 |  .. S CT=CT+1,Y(CT)=DXN_U_$G(DXIEN)_U_ICD9_U_DXV_U_TXFACTRS
 | 
|---|
| 42 |  Q
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 | SCLST(Y,DFN,ORLST) ; RPC for compiling appropriate TxF's
 | 
|---|
| 45 |  ; RPC titled ORWDBA1 SCLST
 | 
|---|
| 46 |  ;
 | 
|---|
| 47 |  ;  Y       =    Returned value
 | 
|---|
| 48 |  ;  DFN     =    Patient IEN
 | 
|---|
| 49 |  ;  ORLST   =    List of orders
 | 
|---|
| 50 |  ;
 | 
|---|
| 51 |  ; call for BA/TF
 | 
|---|
| 52 |  N GMRCPROS,ORD,ORI,ORPKG
 | 
|---|
| 53 |  D CPLSTBA(.Y,DFN,.ORLST)
 | 
|---|
| 54 |  Q
 | 
|---|
| 55 |  ;
 | 
|---|
| 56 | CPLSTBA(TEST,PTIFN,ORIFNS) ; set-up SC/TFs for BA
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 |  ;  TEST    =  Returned value
 | 
|---|
| 59 |  ;  PTIFN   =  Patient IEN
 | 
|---|
| 60 |  ;  ORIFNS  =  List of orders
 | 
|---|
| 61 |  ;
 | 
|---|
| 62 |  S ORI=""
 | 
|---|
| 63 |  ;
 | 
|---|
| 64 |  ; define array of packages for which BA data collected (SC/CIs)
 | 
|---|
| 65 |  ;  GMRC    =  Consult/Request Tracking (#128) - Prosthetics
 | 
|---|
| 66 |  ;  LR      =  Lab Services (#26) - Lab
 | 
|---|
| 67 |  ;  PSO     =  Outpt Pharmacy (#112) - Outpt Pharmacy (orig. Co-Pay)
 | 
|---|
| 68 |  ;  RA      =  Radiology/Nuclear Medicine (#31) - Radiology
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 |  F I=1:1 S ORPKG=$P("GMRC;LR;PSO;RA",";",I) Q:ORPKG=""  D
 | 
|---|
| 71 |  . S ORPKG(+$O(^DIC(9.4,"C",ORPKG,0)))=1  ; ^DIC(9.4) is package file
 | 
|---|
| 72 |  ;
 | 
|---|
| 73 |  ; get Treatment Factors (TxF) for patient
 | 
|---|
| 74 |  D SCPRE(.DR,DFN)
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 |  ; set TxF's if order is for a package for which BA data is collected
 | 
|---|
| 77 |  F  S ORI=$O(ORLST(ORI)) Q:'ORI  S ORD=+ORLST(ORI) D
 | 
|---|
| 78 |  . I $G(^OR(100,ORD,0))="" Q
 | 
|---|
| 79 |  . I $D(TEST(ORD))!'$D(ORPKG($P($G(^OR(100,ORD,0)),U,14))) Q
 | 
|---|
| 80 |  . S TEST(ORD)=ORLST(ORI)_DR
 | 
|---|
| 81 |  Q
 | 
|---|
| 82 |  ;
 | 
|---|
| 83 | SCPRE(DR,DFN) ; Dialog validation, to ask BA questions
 | 
|---|
| 84 |  ;
 | 
|---|
| 85 |  ;  DR    =  return value
 | 
|---|
| 86 |  ;  DFN   =  input patient IEN
 | 
|---|
| 87 |  ;
 | 
|---|
| 88 |  Q:$G(DFN)=""
 | 
|---|
| 89 |  N CPNODE,CT,I,ORX,ORSDCARY,TF,X
 | 
|---|
| 90 |  K ORSDCARY
 | 
|---|
| 91 |  S (CPNODE,DR,ORX,TF)="",CT=0,X="T"
 | 
|---|
| 92 |  ; Call API to acquire Treatment Factors in force
 | 
|---|
| 93 |  D NOW^%DTC,CL^SDCO21(DFN,%,"",.ORSDCARY)  ;DBIA 406
 | 
|---|
| 94 |  ; Retrved array order: AO,IR,SC,EC,MST,HNC,CV, e.g., ORSDCARY(3) for SC
 | 
|---|
| 95 |  ; Convert to ^OR/CPRS GUI order: SC,MST,AO,IR,EC,HNC,CV
 | 
|---|
| 96 |  F I=3,5,1,2,4,6,7 S TF=0,CT=CT+1 S:$D(ORSDCARY(I)) TF=1 S $P(CPNODE,U,CT)=TF
 | 
|---|
| 97 |  ;
 | 
|---|
| 98 |  S X=$S($P(CPNODE,U)=1:"SC",1:""),DR=$S($L(X):DR_U_X,1:DR)
 | 
|---|
| 99 |  S X=$S($P(CPNODE,U,2)=1:"MST",1:""),DR=$S($L(X):DR_U_X,1:DR)
 | 
|---|
| 100 |  S X=$S($P(CPNODE,U,3)=1:"AO",1:""),DR=$S($L(X):DR_U_X,1:DR)
 | 
|---|
| 101 |  S X=$S($P(CPNODE,U,4)=1:"IR",1:""),DR=$S($L(X):DR_U_X,1:DR)
 | 
|---|
| 102 |  S X=$S($P(CPNODE,U,5)=1:"EC",1:""),DR=$S($L(X):DR_U_X,1:DR)
 | 
|---|
| 103 |  S X=$S($P(CPNODE,U,6)=1:"HNC",1:""),DR=$S($L(X):DR_U_X,1:DR)
 | 
|---|
| 104 |  S X=$S($P(CPNODE,U,7)=1:"CV",1:""),DR=$S($L(X):DR_U_X,1:DR)
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 |  ; TxF's for patient (TxF's include SC,AO,IR,EC,MST,HNC,CV) where
 | 
|---|
| 107 |  ;  SC      =  Service Connected
 | 
|---|
| 108 |  ;  AO      =  Agent Orange
 | 
|---|
| 109 |  ;  IR      =  Ionizing Radiation
 | 
|---|
| 110 |  ;  EC      =  Environmental Contaminants
 | 
|---|
| 111 |  ;  MST     =  Military Sexual Trauma
 | 
|---|
| 112 |  ;  HNC     =  Head and Neck Cancer
 | 
|---|
| 113 |  ;  CV      =  Combat Veteran
 | 
|---|
| 114 |  F I="SC","AO","IR","EC","MST","HNC","CV" D
 | 
|---|
| 115 |  . I $D(ORX(I)) S DR=DR_U_I_$S($L(ORX(I)):";"_ORX(I),1:"")
 | 
|---|
| 116 |  Q
 | 
|---|
| 117 |  ;
 | 
|---|
| 118 | ORPKGTYP(Y,ORLST) ; Build BA supported packages array
 | 
|---|
| 119 |  ; GMRC=Prosthetics, LR=Lab, PSO=Pharmacy, RA=Radiology
 | 
|---|
| 120 |  N OIREC,OIV,OIVN
 | 
|---|
| 121 |  F I=1:1 S ORPKG=$P("GMRC;LR;PSO;RA",";",I) Q:ORPKG=""  D
 | 
|---|
| 122 |  . S ORPKG(+$O(^DIC(9.4,"C",ORPKG,0)))=ORPKG  ; ^DIC(9.4) is package file
 | 
|---|
| 123 |  S GMRCPROS=+$O(^DIC(9.4,"C","GMRC",0))
 | 
|---|
| 124 |  ; see if order is for a package which BA supports
 | 
|---|
| 125 |  D ORPKG1(.Y,.ORLST)
 | 
|---|
| 126 |  Q
 | 
|---|
| 127 |  ;
 | 
|---|
| 128 | ORPKG1(TEST,ORIFNS) ; Order for package BA supports?  TEST(ORI)=1 is YES
 | 
|---|
| 129 |  S U="^",ORI=""
 | 
|---|
| 130 |  F I=1:1:5 S OIV(I)=$P("PROSTHETICS REQUEST^EYEGLASS REQUEST^CONTACT LENS REQUEST^HOME OXYGEN REQUEST^AMPUTEE/PROSTHETICS CLINIC",U,I)
 | 
|---|
| 131 |  F  S ORI=$O(ORIFNS(ORI)) Q:'ORI  S ORD=+ORIFNS(ORI),TEST(ORI)=0 D
 | 
|---|
| 132 |  . I ORD=0 Q  ;document/note not an order
 | 
|---|
| 133 |  . ;I ORD="CONSULT_DX" S TEST(ORI)=1 Q  ;consult dx prev entered
 | 
|---|
| 134 |  . I '$D(^OR(100,ORD,0)) Q  ;invalid order #
 | 
|---|
| 135 |  . I $P(^OR(100,ORD,0),U,14)'?1N.N Q  ;invalid order # or entry
 | 
|---|
| 136 |  . I $E($P(ORIFNS(ORI),";",2))>1 Q  ;canceled order (2) & ? (3)
 | 
|---|
| 137 |  . I $D(^OR(100,ORD,5.1,1,0)) S TEST(ORI)=1 Q  ;
 | 
|---|
| 138 |  . I '$D(ORPKG($P(^OR(100,ORD,0),U,14))) Q  ;pkg not supported
 | 
|---|
| 139 |  . ;      IPt OPt (ask BA questions?)
 | 
|---|
| 140 |  . ; Pros  Y   Y   GMRC
 | 
|---|
| 141 |  . ; Rad   Y   Y   RA
 | 
|---|
| 142 |  . ; Lab   N   Y   LR
 | 
|---|
| 143 |  . ; Phrm  Y   Y   PSO
 | 
|---|
| 144 |  . ; Pt Class = 'I' or 'O' in ^OR
 | 
|---|
| 145 |  . I $P(^OR(100,ORD,0),U,12)="I"&(ORPKG($P(^OR(100,ORD,0),U,14))="LR") Q
 | 
|---|
| 146 |  . I $P(^OR(100,ORD,0),U,14)=GMRCPROS D  Q  ;check for Pros consult order
 | 
|---|
| 147 |  .. S OIREC=$G(^ORD(101.43,$G(^OR(100,ORD,4.5,1,1)),0)),OIVN=""
 | 
|---|
| 148 |  .. F  S OIVN=$O(OIV(OIVN)) Q:OIVN=""  I OIV(OIVN)=$E($P(OIREC,U),1,$L(OIV(OIVN))) S TEST(ORI)=1 Q
 | 
|---|
| 149 |  . S TEST(ORI)=1  ;order is for a supported pkg (also note Pros ck above)
 | 
|---|
| 150 |  Q
 | 
|---|
| 151 |  ;
 | 
|---|
| 152 | BASTATUS(Y) ;RPC to retrieve the status of the Billing Awareness software
 | 
|---|
| 153 |  ;   Y  =  Returned Value (1=BA usable, 0=BA not-usable)
 | 
|---|
| 154 |  ; Check for installation of CIDC ancillary build
 | 
|---|
| 155 |  S Y=$D(^XPD(9.7,"B","PX CLINICAL INDICATOR DATA CAPTURE 1.0"))
 | 
|---|
| 156 |  Q:'Y
 | 
|---|
| 157 |  ; Check if system parameter switch set
 | 
|---|
| 158 |  S Y=$$CHKPS1^ORWDBA5
 | 
|---|
| 159 |  Q
 | 
|---|
| 160 |  ;
 | 
|---|
| 161 | BASTAT() ; Internal version of BASTATUS
 | 
|---|
| 162 |  ; Returns 0 if disabled or 1 if enabled
 | 
|---|
| 163 |  Q $$CHKPS1^ORWDBA5
 | 
|---|
| 164 |  ;
 | 
|---|
| 165 | RCVORCI(Y,DIAG) ;Receive order related Clinical Indicators & Diagnoses from GUI
 | 
|---|
| 166 |  ; Store data in ^OR(100,ODN,5.1) & ^OR(100,0DN,5.2)
 | 
|---|
| 167 |  ;
 | 
|---|
| 168 |  N DXIEN,ODN,ORIEN,SCI,OCDXCT,OCT
 | 
|---|
| 169 |  S ODN="",OCDXCT=0,Y=""
 | 
|---|
| 170 |  F  S ODN=$O(DIAG(ODN)) Q:ODN=""  D
 | 
|---|
| 171 |  . S ORIEN=$P(DIAG(ODN),";",1)  ;Order IEN
 | 
|---|
| 172 |  . I ORIEN'?1N.N S Y=0 Q
 | 
|---|
| 173 |  . K ^OR(100,ORIEN,5.1) ;Clear currently stored diagnosis for rewrite
 | 
|---|
| 174 |  . ; Data from Delphi format: ORIEN;11CNNNCNN^exDx1^exDx2^exDx3^exDx4
 | 
|---|
| 175 |  . ; Convert 7 Tx Factors
 | 
|---|
| 176 |  . S SCI=$$TFGUIGBL($RE($E($RE($P(DIAG(ODN),U)),1,7)))
 | 
|---|
| 177 |  . S ^OR(100,ORIEN,5.2)=SCI  ;Store TFs (SC,MST,AO,IR,EC..)
 | 
|---|
| 178 |  . ; Get order date for CSV/CTD/HIPAA
 | 
|---|
| 179 |  . S ORFMDAT=$$ORFMDAT^ORWDBA3(ORIEN)
 | 
|---|
| 180 |  . ; Go through the diagnoses entered
 | 
|---|
| 181 |  . F OCT=2:1 Q:$P(DIAG(ODN),U,OCT)=""  D
 | 
|---|
| 182 |  .. S DXIEN=$P($$ICDDX^ICDCODE($P(DIAG(ODN),U,OCT),ORFMDAT),U,1)  ;Dx IEN
 | 
|---|
| 183 |  .. I DXIEN=-1!(DXIEN="") Q  ;No or invalid code passed in
 | 
|---|
| 184 |  .. S OCDXCT=OCDXCT+1
 | 
|---|
| 185 |  .. S ^OR(100,ORIEN,5.1,0)="^100.051PA^"_OCDXCT_U_OCDXCT ;Set 5.1 zero node
 | 
|---|
| 186 |  .. S ^OR(100,ORIEN,5.1,OCDXCT,0)=DXIEN  ;Store a diagnosis for order
 | 
|---|
| 187 |  .. S ^OR(100,ORIEN,5.1,"B",DXIEN,OCDXCT)="" ;Index diagnosis for order
 | 
|---|
| 188 |  S:Y="" Y=1
 | 
|---|
| 189 |  Q
 | 
|---|
| 190 |  ;
 | 
|---|
| 191 | TFSTGS ; Set Treatment Factor strings sequence order
 | 
|---|
| 192 |  ; TFGBL is order of TxFs in ^OR(100,ORIEN,5) & ^OR(100,ORIEN,5.2)
 | 
|---|
| 193 |  ; TFGUI is order of TxFs to/from GUI
 | 
|---|
| 194 |  ; TFTBL is order of TxFs for table SD008 (used in ZCL segment)
 | 
|---|
| 195 |  ; NOTE: change examples in TFGUIGBL and TFGBLGUI if order changed
 | 
|---|
| 196 |  S TFGBL="SC^MST^AO^IR^EC^HNC^CV"
 | 
|---|
| 197 |  S TFGUI="SC^AO^IR^EC^MST^HNC^CV"
 | 
|---|
| 198 |  S TFTBL="AO^IR^SC^EC^MST^HNC^CV"
 | 
|---|
| 199 |  Q
 | 
|---|
| 200 |  ;
 | 
|---|
| 201 | TFGUIGBL(GUI) ;Convert Treatment Factors from GUI to Global order & format
 | 
|---|
| 202 |  ;
 | 
|---|
| 203 |  ; Input:  GUI in CNU?NCU: C=checked, N=not checked, U=unchecked
 | 
|---|
| 204 |  ; Output: GBL in 1^^^0^?^1^0 (global) format (reordered for storage)
 | 
|---|
| 205 |  ;
 | 
|---|
| 206 |  N GBL,J,NTF,TF,TFGBL,TFGUI,TFTBL
 | 
|---|
| 207 |  S GBL="",NTF=7  ;NTF=# of Treatment Factors (TxF)
 | 
|---|
| 208 |  ;I $L(GUI)'=NTF Q -1  ;invalid # of TxF
 | 
|---|
| 209 |  ; Get Treatment Factor sequence order strings
 | 
|---|
| 210 |  D TFSTGS
 | 
|---|
| 211 |  ; Convert from GBL to GUI format and sequence
 | 
|---|
| 212 |  F J=1:1:NTF S TF=$E(GUI,J) D
 | 
|---|
| 213 |  . S TF($P(TFGUI,U,J))=$S(TF="C":1,TF="U":0,TF="?":"?",1:"")
 | 
|---|
| 214 |  F J=1:1:NTF S GBL=GBL_U_TF($P(TFGBL,U,J))
 | 
|---|
| 215 |  Q $P(GBL,U,2,NTF+1)
 | 
|---|
| 216 |  ;
 | 
|---|
| 217 | TFGBLGUI(GBL) ;Convert Treatment Factors from Global to GUI order & format
 | 
|---|
| 218 |  ;
 | 
|---|
| 219 |  ; Input:  GBL in 1^0^1^1^^0^? (global) format
 | 
|---|
| 220 |  ; Output: GUI in CCCNUU? (GUI) format (also reordered)
 | 
|---|
| 221 |  ;
 | 
|---|
| 222 |  N GUI,J,NTF,TF,TFGBL,TFGUI,TFTBL
 | 
|---|
| 223 |  S GUI="",NTF=7  ;NCI=# of TxF
 | 
|---|
| 224 |  ; Get Treatment Factor sequence order strings
 | 
|---|
| 225 |  D TFSTGS
 | 
|---|
| 226 |  ; Convert from GUI to GBL format and sequence
 | 
|---|
| 227 |  F J=1:1:NTF S TF=$P(GBL,U,J) D
 | 
|---|
| 228 |  . S TF($P(TFGBL,U,J))=$S(TF=1:"C",TF=0:"U",TF="?":"?",1:"N")
 | 
|---|
| 229 |  F J=1:1:NTF S GUI=GUI_TF($P(TFGUI,U,J))
 | 
|---|
| 230 |  Q GUI
 | 
|---|
| 231 |  ;
 | 
|---|
| 232 | PRVKEY(X) ;Check for active & provider key - to be deleted in CPRS v26
 | 
|---|
| 233 |  N PTD
 | 
|---|
| 234 |  Q:'+$G(X) 0
 | 
|---|
| 235 |  Q:$G(^VA(200,X,0))="" 0
 | 
|---|
| 236 |  S PTD=+$P(^VA(200,X,0),"^",11)
 | 
|---|
| 237 |  I $$DT^XLFDT'<PTD,PTD>0 Q 0
 | 
|---|
| 238 |  Q:$D(^XUSEC("PROVIDER",X)) 1
 | 
|---|
| 239 |  Q 0
 | 
|---|
| 240 |  ;
 | 
|---|
| 241 | ORESKEY(X) ;Does 'X' hold ORES key, returns: 1=true, 0=false
 | 
|---|
| 242 |  Q:'+$G(X) 0
 | 
|---|
| 243 |  Q:$D(^XUSEC("ORES",X)) 1
 | 
|---|
| 244 |  Q 0
 | 
|---|