[623] | 1 | ORWDBA3 ; SLC/GSS Billing Awareness (CIDC) [8/20/03 9:19am]
|
---|
| 2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**190,195**;Dec 17, 1997
|
---|
| 3 | ;
|
---|
| 4 | ORFMDAT(ORDFN) ; Return date in FM format regarding order for CSV/CTD/HIPAA
|
---|
| 5 | ; Pass in Order IEN
|
---|
| 6 | Q ($P($G(^OR(100,ORDFN,8,1,0)),"^",16)\1)
|
---|
| 7 | ;
|
---|
| 8 | DISPLAY ; Display of BA data from original copied order (ORIT = ORIEN)
|
---|
| 9 | ; Displayed in window with all order info and user can accept/edit
|
---|
| 10 | ; Note: TxF = Treatment Factor
|
---|
| 11 | ; BA data (Dx,TxF's) not editable but in signature window, not in above
|
---|
| 12 | ; ORIT defined in ORWDXM1, DISPLAY called from ORWDXM2
|
---|
| 13 | ;
|
---|
| 14 | ; Input:
|
---|
| 15 | ; ORIT, ILST, and LST() from ORWDXM* routines
|
---|
| 16 | ; Output:
|
---|
| 17 | ; ILST and LST() appropriately incremented/populated for order display
|
---|
| 18 | ; Variables:
|
---|
| 19 | ; CUN = TxF's in C, U, or N format
|
---|
| 20 | ; I = counter
|
---|
| 21 | ; ILST = line counter, initially from ORWDXM* routines
|
---|
| 22 | ; LST() = array of lines to output, initially from ORWDXM* routines
|
---|
| 23 | ; NTF = # of Treatment Factors
|
---|
| 24 | ; ORITARY = ORIT array of 1 needed to access GETTFCI^ORWDBA4
|
---|
| 25 | ; SPCS = # of characters to space to left of ':'
|
---|
| 26 | ; TF1 = first TxF output? (0/1)
|
---|
| 27 | ; TFGBL = TxF's in Global stored order
|
---|
| 28 | ; TFGUI = TxF's in GUI returned order
|
---|
| 29 | ; TFV = TxF verbiage
|
---|
| 30 | ;
|
---|
| 31 | N CUN,I,NTF,ORITARY,SPCS,TF1,TFGBL,TFGUI,TFV,Y
|
---|
| 32 | S NTF=7,SPCS=28,ORITARY(1)=+ORIT
|
---|
| 33 | ; Get Y(+ORIT) string in ORIEN^CUUUCCN^Dx1^Desc1^Dx2^Desc2^... format
|
---|
| 34 | D GETTFCI^ORWDBA4(.Y,.ORITARY)
|
---|
| 35 | S CUN=$P($G(Y(1)),U,2) ;CUN = Treatment Factors in CUN syntax
|
---|
| 36 | ; First output Diagnosis information - if any
|
---|
| 37 | F I=3:2:9 I $P($G(Y(1)),U,I)'="" D
|
---|
| 38 | . S ILST=ILST+1,LST(ILST)=$S(I=3:"Diagnoses",1:"")
|
---|
| 39 | . S LST(ILST)=LST(ILST)_":"_$P(Y(1),U,I)_" - "_$P(Y(1),U,I+1)
|
---|
| 40 | . D FRMTLST
|
---|
| 41 | ; Get GUI and GBL Treatment Factor sequence strings
|
---|
| 42 | D TFSTGS^ORWDBA1
|
---|
| 43 | ; Assumes SC will always be first in sequence! - not likely to change
|
---|
| 44 | S ILST=ILST+1
|
---|
| 45 | S LST(ILST)="Service Connected:"_$S($E(CUN)="C":"YES",1:"NO")
|
---|
| 46 | D FRMTLST
|
---|
| 47 | S ILST=ILST+1,LST(ILST)="Treatment Factors:"
|
---|
| 48 | ; If no TxF's (no 'C'hecked) {SC output above} then output '<none>'
|
---|
| 49 | I '$F($E(CUN,2,NTF),"C") S LST(ILST)=LST(ILST)_"<none>" D FRMTLST Q
|
---|
| 50 | S TF1=0 ;No TxF yet output
|
---|
| 51 | ; Verbiage for TxF's
|
---|
| 52 | S TFV("MST")="MILITARY SEXUAL TRAUMA",TFV("AO")="AGENT ORANGE"
|
---|
| 53 | S TFV("IR")="IONIZING RADIATION",TFV("EC")="ENVIRONMENTAL CONTAMINANTS"
|
---|
| 54 | S TFV("HNC")="HEAD AND NECK CANCER",TFV("CV")="COMBAT VETERAN"
|
---|
| 55 | ; Output Checked TxF's
|
---|
| 56 | F I=2:1:NTF I $E(CUN,I)="C" D
|
---|
| 57 | . I 'TF1 S LST(ILST)=LST(ILST)_TFV($P(TFGUI,U,I)),TF1=1 D FRMTLST Q
|
---|
| 58 | . S ILST=ILST+1,LST(ILST)=":"_TFV($P(TFGUI,U,I)) D FRMTLST
|
---|
| 59 | Q
|
---|
| 60 | ;
|
---|
| 61 | FRMTLST ; Format the variable LST(ILST) for DISPLAY tag
|
---|
| 62 | S LST(ILST)=$J($P(LST(ILST),":"),SPCS)_": "_$P(LST(ILST),":",2)
|
---|
| 63 | Q
|
---|
| 64 | ;
|
---|
| 65 | HINTS(Y) ; Return HINTS for ORBA Treatment Factors - used by Delphi
|
---|
| 66 | ; The hints returned in the Y array will be used in the CPRS GUI and
|
---|
| 67 | ; displayed on fly-over of the cursor over the TxF text in the window
|
---|
| 68 | ;
|
---|
| 69 | ; Input
|
---|
| 70 | ; <none>
|
---|
| 71 | ; Output
|
---|
| 72 | ; Y array of the hints for TxF's> Y(#)=TxFA ^ TxF line # ^ hint text
|
---|
| 73 | ; where TxFA is Treatment Factor acronym, e.g., CV=Combat Veteran
|
---|
| 74 | ; Variables
|
---|
| 75 | ; CT = line number count, used in Y(#) where #=CT
|
---|
| 76 | ; I = incrementor index #
|
---|
| 77 | ; ORTFIEN = the IEN for the TxF in the Help Frame (^DIC(9.2)) file
|
---|
| 78 | ; TF = TxF acronym
|
---|
| 79 | ; TFLN = TxF text line number, e.g., ^DIC(9.2,ORTFIEN,1,TFLN,0)
|
---|
| 80 | ; TFS = string of TxF acronyms
|
---|
| 81 | ; TFV = TxF description/text
|
---|
| 82 | ;
|
---|
| 83 | N CT,I,ORTFIEN,TF,TFLN,TFS,TFV
|
---|
| 84 | ;
|
---|
| 85 | S TFS="SC^MST^AO^IR^EC^HNC^CV",CT=0
|
---|
| 86 | ; Get next TxF from TFS
|
---|
| 87 | F I=1:1 S TF=$P(TFS,U,I) Q:TF="" D
|
---|
| 88 | . S ORTFIEN=$O(^DIC(9.2,"B","ORBA-"_TF,"")),TFV="",TFLN=0
|
---|
| 89 | . ; Get next line of hint text
|
---|
| 90 | . F S TFLN=$O(^DIC(9.2,ORTFIEN,1,TFLN)) Q:'TFLN D
|
---|
| 91 | .. S CT=CT+1,Y(CT)=TF_U_TFLN_U_^DIC(9.2,ORTFIEN,1,TFLN,0)
|
---|
| 92 | Q
|
---|
| 93 | ;
|
---|
| 94 | DG1(ORDFN,COUNTER,CTVALUE) ; Create DG1 segment(s) & make call for ZCL seg.
|
---|
| 95 | ;
|
---|
| 96 | ; Input
|
---|
| 97 | ; ORDFN Internal Order ID#
|
---|
| 98 | ; COUNTER Variable used as counter from calling routine
|
---|
| 99 | ; CTVALUE Value of COUNTER when DG1 called
|
---|
| 100 | ; Output
|
---|
| 101 | ; DG1 & ZCL HL7 segments
|
---|
| 102 | ;
|
---|
| 103 | I $$BASTAT^ORWDBA1=0 Q ;BA not used
|
---|
| 104 | N DG13,DXIEN,DXR,DXV,FROMFILE,ICD9,OCT,OREC,ORFMDAT
|
---|
| 105 | ; zero order count variable
|
---|
| 106 | S OCT=0
|
---|
| 107 | ; Get the date of order (for CSV/CTD usage)
|
---|
| 108 | S ORFMDAT=$$ORFMDAT(ORDFN)
|
---|
| 109 | ; Get the diagnoses for an order
|
---|
| 110 | F S OCT=$O(^OR(100,ORDFN,5.1,OCT)) Q:OCT'?1N.N D
|
---|
| 111 | . S OREC=^OR(100,ORDFN,5.1,OCT,0)
|
---|
| 112 | . S DXIEN=$P(OREC,U) ; DXIEN=pointer to diagnosis (ICD9) file #80
|
---|
| 113 | . ; the DXIEN pointer should point to a valid diagnosis (after all is
|
---|
| 114 | . ; was previously entered .. but just in case ...)
|
---|
| 115 | . S (DXV,ICD9)=""
|
---|
| 116 | . I DXIEN'="" D
|
---|
| 117 | .. S DXR=$$ICDDX^ICDCODE(DXIEN,ORFMDAT) Q:+DXR=-1
|
---|
| 118 | .. ; Get diagnosis verbiage and ICD code
|
---|
| 119 | .. S DXV=$P(DXR,U,4),ICD9=$P(DXR,U,2)
|
---|
| 120 | . S FROMFILE=80
|
---|
| 121 | . S DG13=DXIEN_U_DXV_U_FROMFILE_U_ICD9_U_DXV_U_"ICD9"
|
---|
| 122 | . S CTVALUE=CTVALUE+1
|
---|
| 123 | . S ORMSG(CTVALUE)="DG1"_"|"_OCT_"||"_DG13_"|||||||||||||"
|
---|
| 124 | . D ZCL
|
---|
| 125 | S @COUNTER=CTVALUE
|
---|
| 126 | Q
|
---|
| 127 | ;
|
---|
| 128 | ZCL ;create all the ZCL segments (currently 7 TxF's) for order number OCT
|
---|
| 129 | ;
|
---|
| 130 | N I,J,TABLE,TF,TFGBL,TFGUI,TFTBL,TFIN,TFS,VALUE
|
---|
| 131 | D TFSTGS^ORWDBA1 ;set string sequence of treatment factors
|
---|
| 132 | ; TFS is TxF data in ^OR(100,ORIEN,5.2) order
|
---|
| 133 | S TFS=$G(^OR(100,ORDFN,5.2)),TABLE=""
|
---|
| 134 | ; conversion order from ^OR stored data and Table SD008 for HL7 msg
|
---|
| 135 | ; convert so that the ZCL segments will be in Table SD008 order (1-7)
|
---|
| 136 | F I=1:1:7 S TF=$P(TFTBL,U,I) F J=1:1:7 I $P(TFGBL,U,J)=TF S TABLE=TABLE_J Q
|
---|
| 137 | F TFIN=1:1:7 D
|
---|
| 138 | . ; ORMSG counter incremented
|
---|
| 139 | . S CTVALUE=CTVALUE+1
|
---|
| 140 | . ; TF VALUE=0 for no or 1 for yes (only if not req. is it null)
|
---|
| 141 | . S VALUE=$P(TFS,U,$E(TABLE,TFIN))
|
---|
| 142 | . I VALUE="?" S VALUE=0 ;temp fix if sending '?' to ancillary???
|
---|
| 143 | . ; for Table SD008: OCT=Set ID, SCIN=O/P Classif. Type, VALUE=Value
|
---|
| 144 | . S ORMSG(CTVALUE)="ZCL|"_OCT_"|"_TFIN_"|"_VALUE
|
---|
| 145 | Q
|
---|
| 146 | ;
|
---|
| 147 | BDOSTR ;Store backdoor order DG1 and ZCL messages from HL7
|
---|
| 148 | ;Processes one order per entry into BDOSTR, e.g., ROUT(1)
|
---|
| 149 | ;Depends upon ORM* routines to set-up a number of variables including
|
---|
| 150 | ; ORMSG array and ORIFN.
|
---|
| 151 | ;ORM* routines calling BDOSTR: ORMGMRC, ORMLR, ORMPS, & ORMRA
|
---|
| 152 | ;
|
---|
| 153 | ; Input: HL7 messages and related data
|
---|
| 154 | ; Output: ROUT array in Delphi GUI format, i.e.
|
---|
| 155 | ; OrderIEN;11CNNNCNN^exDx1^exDx2^exDx3^exDx4
|
---|
| 156 | ;
|
---|
| 157 | ; Variables Used
|
---|
| 158 | ; DG1 = sequential numbered array with a value of DXIEN
|
---|
| 159 | ; I,J = counters
|
---|
| 160 | ; GUITF = GUI order treatment factors (TxF)
|
---|
| 161 | ; NDX = number of diagnoses being passed
|
---|
| 162 | ; NTF = number of TxF
|
---|
| 163 | ; OBX = @ORMSG Dx array element # (max of 4 diagnoses stored)
|
---|
| 164 | ; REC = set to sequential HL7 messages, contains HL7 message data
|
---|
| 165 | ; ROUT = record sent for storage processing to RCVORCI
|
---|
| 166 | ; TF = individual TxF values
|
---|
| 167 | ; TFGBL = TxF acronyms in ^ delimited string in ^OR sequence
|
---|
| 168 | ; TFGUI = TxF acronyms in ^ delimited string in from GUI sequence
|
---|
| 169 | ; TFTBL = TxF acronyms in ^ delimited string in Table SD008 sequence
|
---|
| 170 | ; VAL = individual TxF values
|
---|
| 171 | ; ZCL = TxF in Table SD008 format and sequence
|
---|
| 172 | ;
|
---|
| 173 | ; See if CIDC master switch set, if not then no DG1/ZCL seg, to store
|
---|
| 174 | I $$BASTAT^ORWDBA1=0 Q ;CIDC (nee BA) not used
|
---|
| 175 | ;
|
---|
| 176 | N CPNODE,CT,DG1,I,J,GUITF,NDX,NTF,OBX,REC,ROUT,ORSDCARY,SDCARYA
|
---|
| 177 | N TF,TFGBL,TFGUI,TFTBL,VAL,X,ZCL
|
---|
| 178 | ;
|
---|
| 179 | K ORSDCARY,SDCARYA
|
---|
| 180 | D TFSTGS^ORWDBA1 ;set string sequence of treatment factors
|
---|
| 181 | S (CT,NDX,OBX)=0,NTF=7,(CPNODE,GUITF,TF,Y,ZCL)="",X="T"
|
---|
| 182 | ; Call API to acquire Treatment Factors in force
|
---|
| 183 | D NOW^%DTC,CL^SDCO21(DFN,%,"",.ORSDCARY) ;DBIA 406
|
---|
| 184 | ; Retrved array order: AO,IR,SC,EC,MST,HNC,CV, e.g., ORSDCARY(3) for SC
|
---|
| 185 | ; Convert to character array, e.g., SDCARYA("SC")=""
|
---|
| 186 | F I=1:1:NTF S:$D(ORSDCARY(I)) SDCARYA($P("AO^IR^SC^EC^MST^HNC^CV",U,I))=""
|
---|
| 187 | ; Process only four DG1 segments and first set of ZCL segments
|
---|
| 188 | F S OBX=$O(@ORMSG@(OBX)) Q:OBX'>0 S J=$E(@ORMSG@(OBX),1,3) I J="DG1"!(J="ZCL"&($P(@ORMSG@(OBX),"|",2)=1)) D
|
---|
| 189 | . S REC=@ORMSG@(OBX)
|
---|
| 190 | . ; Setting DG1(#)=DXIEN where # is Dx sequence # (1=primary)
|
---|
| 191 | . I J="DG1"&(NDX<4) S DG1($P(REC,"|",2))=$P(REC,U,4),NDX=NDX+1 Q
|
---|
| 192 | . ; Create ZCL string of TxFs, e.g., 1101011
|
---|
| 193 | . I J="ZCL" D
|
---|
| 194 | .. S:$P(REC,"|",4)="" $P(REC,"|",4)=" "
|
---|
| 195 | .. S $E(ZCL,$P(REC,"|",3))=$P(REC,"|",4)
|
---|
| 196 | ; convert order and format from Table SD008 to GUI
|
---|
| 197 | F I=1:1:NTF S TF=$P(TFGUI,U,I) F J=1:1:NTF I $P(TFTBL,U,J)=TF D
|
---|
| 198 | . ; If patient does not have that Tx Factor (TF) then ghost in GUI ("N")
|
---|
| 199 | . I '$D(SDCARYA(TF)) S GUITF=GUITF_"N" Q
|
---|
| 200 | . ; If patient has TF then format for GUI (C=ck'd, U=unck'd, ?=not ans)
|
---|
| 201 | . S VAL=$E(ZCL,J),GUITF=GUITF_$S(VAL=1:"C",VAL=0:"U",1:"?")
|
---|
| 202 | ; Create output string in a format that can be stored by RCVORCI^ORWDBA1
|
---|
| 203 | S ROUT(1)=ORIFN_";11"_GUITF_U_$G(DG1(1))_U_$G(DG1(2))_U_$G(DG1(3))_U_$G(DG1(4))
|
---|
| 204 | ; Store diagnoses and treatment factors
|
---|
| 205 | D RCVORCI^ORWDBA1(Y,.ROUT)
|
---|
| 206 | Q
|
---|
| 207 | ;
|
---|
| 208 | ERRMSG(VISIT) ; Error handling and message
|
---|
| 209 | ; to be determined
|
---|
| 210 | Q
|
---|