ECXUTL4 ;ALB/ESD - Utilities for DSS Extracts ;4/24/19 09:44
;;3.0;DSS EXTRACTS;**39,41,46,49,78,92,105,112,120,127,154,170,174,178,181**;Dec 22,1997;Build 71
;
OBSPAT(ECXIO,ECXTS,DSSID) ;
; Get observation patient indicator from DSS TREATING SPECIALTY
; TRANSLATION file (#727.831) or DSS Identifier
;
; Input:
; ECXIO - Inpatient/Outpatient indicator
; ECXTS - Treating specialty (from file #42.4)
; DSSID - DSS Identifier
;
;Output:
; ECXOBS - Observation patient indicator (YES/NO)
;
;- Check input vars
S ECXIO=$G(ECXIO),ECXTS=+$G(ECXTS),DSSID=+$G(DSSID)
S ECXOBS=""
D
.;- Look up obs patient indicator if treating spec is in file #727.831
. I $G(^ECX(727.831,ECXTS,0)) S ECXOBS=$P($G(^ECX(727.831,ECXTS,0)),"^",4)
. I ECXOBS'="" S ECXOBS=$S(ECXOBS="Y":"YES",1:"NO") Q
.;
.;- If outpatient and TS not in file, AND Feeder Key (CLI) or DSS ID
.;- (MTL,IVP,ECQ,QSR,NOS,SUR) is 290-297, Observation Patient Ind=YES
. I ECXIO="O",ECXOBS="",DSSID D
.. I $E(DSSID,1,3)>289&($E(DSSID,1,3)<298) S ECXOBS="YES"
.. E S ECXOBS="NO"
Q $S(ECXOBS'="":ECXOBS,1:"NO")
;
INOUTP(ECXTS) ;
; Get inpatient/outpatient indicator from DSS TREATING SPECIALTY
; TRANSLATION file (#727.831)
;
; Input:
; ECXTS - Treating specialty
;
; Output:
; Inpatient/Outpatient indicator (I/O)
;
S ECXTS=+$G(ECXTS)
S ECXIO=""
;
;- Look up inpat/outpat indicator if treating spec is in file
I $G(^ECX(727.831,ECXTS,0)) S ECXIO=$P($G(^ECX(727.831,ECXTS,0)),"^",5)
Q $S(ECXIO'="":ECXIO,1:"I")
;
ENCNUM(ECXIO,ECXSSN,ECXADT,ECXVDT,ECXTRT,ECXOBS,ECXEXT,ECXSTP,ECXSTP2) ;
; Get encounter number
;
; Input:
; ECXIO - Inpat/Outpat indicator = I or O
; ECXSSN - Patient SSN
; ECXADT - Admit Date
; ECXVDT - Visit Date
; ECXTRT - Treating Spec
; ECXOBS - Observation Pat Indicator
; ECXEXT - Extract
; ECXSTP - Stop Code (or stop code related) variable
; ECXSTP2 - Stop Code (or stop code related) addtl variable
; (used for SUR and ECS)
;
;Output:
; Encounter Number
;
N ENCNUM,ECXDATE,ECXSTCD
S (ENCNUM,ECXSTCD)=""
;
;- Check input vars
S ECXEXT=$G(ECXEXT),ECXIO=$G(ECXIO),ECXOBS=$G(ECXOBS),ECXTRT=+$G(ECXTRT)
S:ECXEXT'="ECS"&(ECXEXT'="ECQ") ECXSTP=+$G(ECXSTP) S ECXSTP2=+$G(ECXSTP2) ;154 Allow stop code/DSS ID for ECS&ECQ to be non-numeric
S ECXADT=+$G(ECXADT),ECXVDT=+$G(ECXVDT)
;
;- Don't use pseudo-SSN in encounter number
S ECXSSN=$E($G(ECXSSN),1,9)
;
D
. ;- Inpatient
. I ECXIO="I",ECXADT,ECXSSN'="" D Q
.. S ECXDATE=$$ADMITDT(ECXADT)
.. I ECXDATE'="" S ENCNUM=ECXSSN_ECXDATE_"I"
. ;
. ;- Outpatient branch
. I ECXIO="O" D
.. ;- Observation patient (outpatient)
.. I ECXOBS="YES",ECXSSN'="" D Q
... ;
... S ECXDATE=$S(ECXADT:$$JULDT(ECXADT),1:$$JULDT(ECXVDT))
... S ECXSTCD=$S(+$P($G(^ECX(727.831,ECXTRT,0)),"^",6):+$P($G(^ECX(727.831,ECXTRT,0)),"^",6),1:+$E(ECXSTP,1,3))
... Q:ECXDATE=""!(ECXSTCD="")
... S ENCNUM=ECXSSN_ECXDATE_ECXSTCD
.. ;
.. ;- Outpatient (no observation pat)
.. I ECXOBS="NO",ECXVDT,ECXSSN'="" D Q
... ;
... ;- ADM, MOV, TRT have no outpat encounter number
... I ECXEXT="ADM"!(ECXEXT="MOV")!(ECXEXT="TRT") Q
... ;
... ;- Use 1st 3 chars of DSS ID for NOS (feeder key for CLI)
... I ECXEXT="CLI"!(ECXEXT="NOS") S ECXSTCD=+$E(ECXSTP,1,3) Q:'ECXSTCD
... ;
... ;- 154, For ECS remove cost center conversion. For ECS and ECQ set stop code to first 3 characters of ECXSTP
... I ECXEXT="ECS"!(ECXEXT="ECQ") S ECXSTCD=$E(ECXSTP,1,3) ;154
... ;
... ;- These extracts have predetermined stop code values
... I ECXEXT="DEN" S ECXSTCD=180
... I ECXEXT="UDP"!(ECXEXT="PRE") S ECXSTCD="PHA" ;170
... ;I ECXEXT="IVP" S ECXSTCD=$S(ECXSTP=0:"PHA","^AN100^AN200^AN300^AN400^AN500^AN600^AN700^AN900^OP900^"[("^"_$G(ECVACL)_"^"):$E(ECXSTP,1,3),1:"PHA") ;170 Set stop code for IVP
... I ECXEXT="IVP" D ;170 Set stop code for IVP
.... N DRUGCLAS,DRUGSTCD
.... S DRUGCLAS="^AN100^AN200^AN300^AN400^AN500^AN600^AN700^AN900^OP900^" ;List of Chemo Drugs
.... S DRUGSTCD="^308^316^329^330^407^" ; List of MCAO-defined Stop Code for patch 178, 181 - Remove 153 from the list
.... ;Only set the ECXSTP variable to the Ordering Stop Code for Chemo drugs ordered from this range
.... S ECXSTCD=$S(ECXSTP=0:"PHA",DRUGCLAS[("^"_ECVACL_"^"):$S(DRUGSTCD[("^"_ECXSTP_"^"):$E(ECXSTP,1,3),1:"PHA"),1:"PHA") ;170;178
... I ECXEXT="LAB"!(ECXEXT="LAR")!(ECXEXT="LBB") S ECXSTCD=108
... I ECXEXT="MTL" S ECXSTCD=538
... I ECXEXT="NUR" S ECXSTCD=950
... I ECXEXT="PRO" S ECXSTCD=423
... I ECXEXT="NUT" S ECXSTCD="NUT"
... I ECXEXT="BCM" S ECXSTCD="BCM"
... ;
... ;- If Imaging Type fld=2, use 109 otherwise use 105
... I ECXEXT="RAD" S ECXSTCD=$S(ECXSTP=2:109,1:105)
... ;
... ;- Use STOP CODE fld if populated or if non-OR procedure use 435
... ;- otherwise if null use 429
... I ECXEXT="SUR" S ECXSTCD=$S(ECXSTP:ECXSTP,$P($G(ECNO),U)="Y":435,1:429) ;174 If no stop code, default to 435 for non-OR procedure else 429
... ;
... ;- Get Julian Date
... S ECXDATE=$$JULDT(ECXVDT)
... I ECXDATE'="" S ENCNUM=ECXSSN_ECXDATE_ECXSTCD
Q ENCNUM
;
ADMITDT(ECXINDT) ; Returns date in YYMMDD format
;
; Input:
; ECXINDT - Date (can also include time) in internal FM format
;
;Output:
; Date in YYMMDD form
;
N ECXDT
S ECXDT=""
S ECXINDT=+$G(ECXINDT)
;
;- If no input or full FM date not passed in, quit
I 'ECXINDT!($L(ECXINDT)<7) G ADMTDTQ
;
;- Date in YYMMDD form
S ECXDT=$TR($$FMTE^XLFDT(ECXINDT,"4DF")," /","0")
ADMTDTQ Q ECXDT
;
;
JULDT(ECXINDT) ; Returns Julian Date in MMDDD format
;
; Input:
; ECINDT - Date (can also include time) in internal FM format
;
;Output:
; Julian date in MM_DDD form
;
N ECXDDD,ECXDT,ECXJUL,ECXMM
S (ECXDDD,ECXMM)=""
;
;- If no input or full FM date not passed in, quit
S ECXINDT=+$G(ECXINDT)
I 'ECXINDT!($L(ECXINDT)<7) G JULDTQ
;
;- Extract date portion
S ECXDT=$E(ECXINDT,1,7)
;
;- Get month (MM)
S ECXMM=$E(ECXINDT,2,3)
;
;- Number of day within year (DDD)
S ECXDDD=$$RJ^XLFSTR($$FMDIFF^XLFDT(ECXDT,$E(ECXDT,1,3)_"0101",1)+1,3,"0")
JULDTQ Q ECXMM_ECXDDD
;
CNHSTAT(ECXDFN) ; Get CNH (Contract Nursing Home) status
;
; Input:
; ECXDFN - Patient DFN
;
;Output:
; CNH status (YES/NO)
;
N ECXCNH
S ECXDFN=+$G(ECXDFN)
S ECXCNH=$P($G(^DPT(ECXDFN,"NHC")),U)
Q $S(ECXCNH="Y":"YES",ECXCNH="N":"NO",1:"")
;
CANC(ECXNOR,ECXTMOR) ; Get Surgery Cancelled/Aborted Status
;
; Function called after determining CANCEL DATE in SURGERY record exists
;
; Input:
; ECXNOR - Non-OR DSS ID
; ECXTMOR - Time Pat in OR
;
;Output:
; Cancelled/aborted status (C/A)
;
N ECXCANC
S ECXCANC=""
S ECXNOR=$G(ECXNOR)
;
;- If Non-OR DSS ID or Time Pat in OR, ECXCANC = "A" else = "C"
D
. I ECXNOR'=""&(ECXNOR'="UNKNOWN") S ECXCANC="A" Q
. I +$G(ECXTMOR) S ECXCANC="A" Q
. S ECXCANC="C"
Q ECXCANC
;
HNCI(ECXDFN) ; Get head & neck cancer indicator
;
; Input:
; ECXDFN - Patient DFN
;
;Output:
; Head/Neck CA DX (Y/N)
;
N ECXHNCI,DGNT
S ECXHNCI=""
S ECXDFN=+$G(ECXDFN) I ECXDFN D
.I $$GETCUR^DGNTAPI(ECXDFN,"DGNT") S ECXHNCI=$P(DGNT("HNC"),U)
Q ECXHNCI
;
TSMAP(ECXTS) ;Determines DSS Identifier for the following observation
; treating specialty
; Input:
; ECXTS - Observation Treating Specialty
;
; Output:
; DSS Identifier (Stop Code)
;
N TS,SC,I
S TS="^18^23^24^41^65^94^108^",SC="^293^295^290^296^291^292^297^"
F I=1:1:$L(TS) Q:$P(TS,"^",I)=ECXTS
Q $P(SC,"^",I)_"000"
OEFDATA ;
;get patient OEF/OIF status and date of return
S (ECXOEF,ECXOEFDT)=""
I $G(VASV(11))>0 S ECXOEF=ECXOEF_"OIF"
I $G(VASV(12))>0 S ECXOEF=ECXOEF_"OEF"
I $G(VASV(13))>0 S ECXOEF=ECXOEF_"UNK"
I ECXOEF'="" D
. S ECXOEFDT=""
. I $G(VASV(11))>0 S ECXOEFDT=$P($G(VASV(11,$G(VASV(11)),3)),"^")
. I $G(VASV(12))>0,$P($G(VASV(12,$G(VASV(12)),3)),"^")>ECXOEFDT S ECXOEFDT=$P($G(VASV(12,$G(VASV(12)),3)),"^")
. I $G(VASV(13))>0,$P($G(VASV(13,$G(VASV(13)),3)),"^")>ECXOEFDT S ECXOEFDT=$P($G(VASV(13,$G(VASV(13)),3)),"^")
. I ECXOEFDT>0 S ECXOEFDT=17000000+ECXOEFDT
;
S ECXPAT("ECXOEF")=ECXOEF
S ECXPAT("ECXOEFDT")=ECXOEFDT
Q
;
SHAD(ECXDFN) ; Get PROJ 112/SHAD indicator
;
; Input:
; ECXDFN - Patient DFN
;
;Output:
; PROJ 112/SHAD DX (Y/N/U)
; Error -1, missing parameter
;
N ECXSHAD
S ECXDFN=$G(ECXDFN)
S ECXSHAD=$$GETSHAD^DGUTL3(ECXDFN)
S ECXSHAD=$S(ECXSHAD=1:"Y",ECXSHAD=0:"N",ECXSHAD="":"U",1:-1)
Q ECXSHAD
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HECXUTL4 8730 printed Oct 16, 2024@17:55:10 Page 2
ECXUTL4 ;ALB/ESD - Utilities for DSS Extracts ;4/24/19 09:44
+1 ;;3.0;DSS EXTRACTS;**39,41,46,49,78,92,105,112,120,127,154,170,174,178,181**;Dec 22,1997;Build 71
+2 ;
OBSPAT(ECXIO,ECXTS,DSSID) ;
+1 ; Get observation patient indicator from DSS TREATING SPECIALTY
+2 ; TRANSLATION file (#727.831) or DSS Identifier
+3 ;
+4 ; Input:
+5 ; ECXIO - Inpatient/Outpatient indicator
+6 ; ECXTS - Treating specialty (from file #42.4)
+7 ; DSSID - DSS Identifier
+8 ;
+9 ;Output:
+10 ; ECXOBS - Observation patient indicator (YES/NO)
+11 ;
+12 ;- Check input vars
+13 SET ECXIO=$GET(ECXIO)
SET ECXTS=+$GET(ECXTS)
SET DSSID=+$GET(DSSID)
+14 SET ECXOBS=""
+15 Begin DoDot:1
+16 ;- Look up obs patient indicator if treating spec is in file #727.831
+17 IF $GET(^ECX(727.831,ECXTS,0))
SET ECXOBS=$PIECE($GET(^ECX(727.831,ECXTS,0)),"^",4)
+18 IF ECXOBS'=""
SET ECXOBS=$SELECT(ECXOBS="Y":"YES",1:"NO")
QUIT
+19 ;
+20 ;- If outpatient and TS not in file, AND Feeder Key (CLI) or DSS ID
+21 ;- (MTL,IVP,ECQ,QSR,NOS,SUR) is 290-297, Observation Patient Ind=YES
+22 IF ECXIO="O"
IF ECXOBS=""
IF DSSID
Begin DoDot:2
+23 IF $EXTRACT(DSSID,1,3)>289&($EXTRACT(DSSID,1,3)<298)
SET ECXOBS="YES"
+24 IF '$TEST
SET ECXOBS="NO"
End DoDot:2
End DoDot:1
+25 QUIT $SELECT(ECXOBS'="":ECXOBS,1:"NO")
+26 ;
INOUTP(ECXTS) ;
+1 ; Get inpatient/outpatient indicator from DSS TREATING SPECIALTY
+2 ; TRANSLATION file (#727.831)
+3 ;
+4 ; Input:
+5 ; ECXTS - Treating specialty
+6 ;
+7 ; Output:
+8 ; Inpatient/Outpatient indicator (I/O)
+9 ;
+10 SET ECXTS=+$GET(ECXTS)
+11 SET ECXIO=""
+12 ;
+13 ;- Look up inpat/outpat indicator if treating spec is in file
+14 IF $GET(^ECX(727.831,ECXTS,0))
SET ECXIO=$PIECE($GET(^ECX(727.831,ECXTS,0)),"^",5)
+15 QUIT $SELECT(ECXIO'="":ECXIO,1:"I")
+16 ;
ENCNUM(ECXIO,ECXSSN,ECXADT,ECXVDT,ECXTRT,ECXOBS,ECXEXT,ECXSTP,ECXSTP2) ;
+1 ; Get encounter number
+2 ;
+3 ; Input:
+4 ; ECXIO - Inpat/Outpat indicator = I or O
+5 ; ECXSSN - Patient SSN
+6 ; ECXADT - Admit Date
+7 ; ECXVDT - Visit Date
+8 ; ECXTRT - Treating Spec
+9 ; ECXOBS - Observation Pat Indicator
+10 ; ECXEXT - Extract
+11 ; ECXSTP - Stop Code (or stop code related) variable
+12 ; ECXSTP2 - Stop Code (or stop code related) addtl variable
+13 ; (used for SUR and ECS)
+14 ;
+15 ;Output:
+16 ; Encounter Number
+17 ;
+18 NEW ENCNUM,ECXDATE,ECXSTCD
+19 SET (ENCNUM,ECXSTCD)=""
+20 ;
+21 ;- Check input vars
+22 SET ECXEXT=$GET(ECXEXT)
SET ECXIO=$GET(ECXIO)
SET ECXOBS=$GET(ECXOBS)
SET ECXTRT=+$GET(ECXTRT)
+23 ;154 Allow stop code/DSS ID for ECS&ECQ to be non-numeric
if ECXEXT'="ECS"&(ECXEXT'="ECQ")
SET ECXSTP=+$GET(ECXSTP)
SET ECXSTP2=+$GET(ECXSTP2)
+24 SET ECXADT=+$GET(ECXADT)
SET ECXVDT=+$GET(ECXVDT)
+25 ;
+26 ;- Don't use pseudo-SSN in encounter number
+27 SET ECXSSN=$EXTRACT($GET(ECXSSN),1,9)
+28 ;
+29 Begin DoDot:1
+30 ;- Inpatient
+31 IF ECXIO="I"
IF ECXADT
IF ECXSSN'=""
Begin DoDot:2
+32 SET ECXDATE=$$ADMITDT(ECXADT)
+33 IF ECXDATE'=""
SET ENCNUM=ECXSSN_ECXDATE_"I"
End DoDot:2
QUIT
+34 ;
+35 ;- Outpatient branch
+36 IF ECXIO="O"
Begin DoDot:2
+37 ;- Observation patient (outpatient)
+38 IF ECXOBS="YES"
IF ECXSSN'=""
Begin DoDot:3
+39 ;
+40 SET ECXDATE=$SELECT(ECXADT:$$JULDT(ECXADT),1:$$JULDT(ECXVDT))
+41 SET ECXSTCD=$SELECT(+$PIECE($GET(^ECX(727.831,ECXTRT,0)),"^",6):+$PIECE($GET(^ECX(727.831,ECXTRT,0)),"^",6),1:+$EXTRACT(ECXSTP,1,3))
+42 if ECXDATE=""!(ECXSTCD="")
QUIT
+43 SET ENCNUM=ECXSSN_ECXDATE_ECXSTCD
End DoDot:3
QUIT
+44 ;
+45 ;- Outpatient (no observation pat)
+46 IF ECXOBS="NO"
IF ECXVDT
IF ECXSSN'=""
Begin DoDot:3
+47 ;
+48 ;- ADM, MOV, TRT have no outpat encounter number
+49 IF ECXEXT="ADM"!(ECXEXT="MOV")!(ECXEXT="TRT")
QUIT
+50 ;
+51 ;- Use 1st 3 chars of DSS ID for NOS (feeder key for CLI)
+52 IF ECXEXT="CLI"!(ECXEXT="NOS")
SET ECXSTCD=+$EXTRACT(ECXSTP,1,3)
if 'ECXSTCD
QUIT
+53 ;
+54 ;- 154, For ECS remove cost center conversion. For ECS and ECQ set stop code to first 3 characters of ECXSTP
+55 ;154
IF ECXEXT="ECS"!(ECXEXT="ECQ")
SET ECXSTCD=$EXTRACT(ECXSTP,1,3)
+56 ;
+57 ;- These extracts have predetermined stop code values
+58 IF ECXEXT="DEN"
SET ECXSTCD=180
+59 ;170
IF ECXEXT="UDP"!(ECXEXT="PRE")
SET ECXSTCD="PHA"
+60 ;I ECXEXT="IVP" S ECXSTCD=$S(ECXSTP=0:"PHA","^AN100^AN200^AN300^AN400^AN500^AN600^AN700^AN900^OP900^"[("^"_$G(ECVACL)_"^"):$E(ECXSTP,1,3),1:"PHA") ;170 Set stop code for IVP
+61 ;170 Set stop code for IVP
IF ECXEXT="IVP"
Begin DoDot:4
+62 NEW DRUGCLAS,DRUGSTCD
+63 ;List of Chemo Drugs
SET DRUGCLAS="^AN100^AN200^AN300^AN400^AN500^AN600^AN700^AN900^OP900^"
+64 ; List of MCAO-defined Stop Code for patch 178, 181 - Remove 153 from the list
SET DRUGSTCD="^308^316^329^330^407^"
+65 ;Only set the ECXSTP variable to the Ordering Stop Code for Chemo drugs ordered from this range
+66 ;170;178
SET ECXSTCD=$SELECT(ECXSTP=0:"PHA",DRUGCLAS[("^"_ECVACL_"^"):$SELECT(DRUGSTCD[("^"_ECXSTP_"^"):$EXTRACT(ECXSTP,1,3),1:"PHA"),1:"PHA")
End DoDot:4
+67 IF ECXEXT="LAB"!(ECXEXT="LAR")!(ECXEXT="LBB")
SET ECXSTCD=108
+68 IF ECXEXT="MTL"
SET ECXSTCD=538
+69 IF ECXEXT="NUR"
SET ECXSTCD=950
+70 IF ECXEXT="PRO"
SET ECXSTCD=423
+71 IF ECXEXT="NUT"
SET ECXSTCD="NUT"
+72 IF ECXEXT="BCM"
SET ECXSTCD="BCM"
+73 ;
+74 ;- If Imaging Type fld=2, use 109 otherwise use 105
+75 IF ECXEXT="RAD"
SET ECXSTCD=$SELECT(ECXSTP=2:109,1:105)
+76 ;
+77 ;- Use STOP CODE fld if populated or if non-OR procedure use 435
+78 ;- otherwise if null use 429
+79 ;174 If no stop code, default to 435 for non-OR procedure else 429
IF ECXEXT="SUR"
SET ECXSTCD=$SELECT(ECXSTP:ECXSTP,$PIECE($GET(ECNO),U)="Y":435,1:429)
+80 ;
+81 ;- Get Julian Date
+82 SET ECXDATE=$$JULDT(ECXVDT)
+83 IF ECXDATE'=""
SET ENCNUM=ECXSSN_ECXDATE_ECXSTCD
End DoDot:3
QUIT
End DoDot:2
End DoDot:1
+84 QUIT ENCNUM
+85 ;
ADMITDT(ECXINDT) ; Returns date in YYMMDD format
+1 ;
+2 ; Input:
+3 ; ECXINDT - Date (can also include time) in internal FM format
+4 ;
+5 ;Output:
+6 ; Date in YYMMDD form
+7 ;
+8 NEW ECXDT
+9 SET ECXDT=""
+10 SET ECXINDT=+$GET(ECXINDT)
+11 ;
+12 ;- If no input or full FM date not passed in, quit
+13 IF 'ECXINDT!($LENGTH(ECXINDT)<7)
GOTO ADMTDTQ
+14 ;
+15 ;- Date in YYMMDD form
+16 SET ECXDT=$TRANSLATE($$FMTE^XLFDT(ECXINDT,"4DF")," /","0")
ADMTDTQ QUIT ECXDT
+1 ;
+2 ;
JULDT(ECXINDT) ; Returns Julian Date in MMDDD format
+1 ;
+2 ; Input:
+3 ; ECINDT - Date (can also include time) in internal FM format
+4 ;
+5 ;Output:
+6 ; Julian date in MM_DDD form
+7 ;
+8 NEW ECXDDD,ECXDT,ECXJUL,ECXMM
+9 SET (ECXDDD,ECXMM)=""
+10 ;
+11 ;- If no input or full FM date not passed in, quit
+12 SET ECXINDT=+$GET(ECXINDT)
+13 IF 'ECXINDT!($LENGTH(ECXINDT)<7)
GOTO JULDTQ
+14 ;
+15 ;- Extract date portion
+16 SET ECXDT=$EXTRACT(ECXINDT,1,7)
+17 ;
+18 ;- Get month (MM)
+19 SET ECXMM=$EXTRACT(ECXINDT,2,3)
+20 ;
+21 ;- Number of day within year (DDD)
+22 SET ECXDDD=$$RJ^XLFSTR($$FMDIFF^XLFDT(ECXDT,$EXTRACT(ECXDT,1,3)_"0101",1)+1,3,"0")
JULDTQ QUIT ECXMM_ECXDDD
+1 ;
CNHSTAT(ECXDFN) ; Get CNH (Contract Nursing Home) status
+1 ;
+2 ; Input:
+3 ; ECXDFN - Patient DFN
+4 ;
+5 ;Output:
+6 ; CNH status (YES/NO)
+7 ;
+8 NEW ECXCNH
+9 SET ECXDFN=+$GET(ECXDFN)
+10 SET ECXCNH=$PIECE($GET(^DPT(ECXDFN,"NHC")),U)
+11 QUIT $SELECT(ECXCNH="Y":"YES",ECXCNH="N":"NO",1:"")
+12 ;
CANC(ECXNOR,ECXTMOR) ; Get Surgery Cancelled/Aborted Status
+1 ;
+2 ; Function called after determining CANCEL DATE in SURGERY record exists
+3 ;
+4 ; Input:
+5 ; ECXNOR - Non-OR DSS ID
+6 ; ECXTMOR - Time Pat in OR
+7 ;
+8 ;Output:
+9 ; Cancelled/aborted status (C/A)
+10 ;
+11 NEW ECXCANC
+12 SET ECXCANC=""
+13 SET ECXNOR=$GET(ECXNOR)
+14 ;
+15 ;- If Non-OR DSS ID or Time Pat in OR, ECXCANC = "A" else = "C"
+16 Begin DoDot:1
+17 IF ECXNOR'=""&(ECXNOR'="UNKNOWN")
SET ECXCANC="A"
QUIT
+18 IF +$GET(ECXTMOR)
SET ECXCANC="A"
QUIT
+19 SET ECXCANC="C"
End DoDot:1
+20 QUIT ECXCANC
+21 ;
HNCI(ECXDFN) ; Get head & neck cancer indicator
+1 ;
+2 ; Input:
+3 ; ECXDFN - Patient DFN
+4 ;
+5 ;Output:
+6 ; Head/Neck CA DX (Y/N)
+7 ;
+8 NEW ECXHNCI,DGNT
+9 SET ECXHNCI=""
+10 SET ECXDFN=+$GET(ECXDFN)
IF ECXDFN
Begin DoDot:1
+11 IF $$GETCUR^DGNTAPI(ECXDFN,"DGNT")
SET ECXHNCI=$PIECE(DGNT("HNC"),U)
End DoDot:1
+12 QUIT ECXHNCI
+13 ;
TSMAP(ECXTS) ;Determines DSS Identifier for the following observation
+1 ; treating specialty
+2 ; Input:
+3 ; ECXTS - Observation Treating Specialty
+4 ;
+5 ; Output:
+6 ; DSS Identifier (Stop Code)
+7 ;
+8 NEW TS,SC,I
+9 SET TS="^18^23^24^41^65^94^108^"
SET SC="^293^295^290^296^291^292^297^"
+10 FOR I=1:1:$LENGTH(TS)
if $PIECE(TS,"^",I)=ECXTS
QUIT
+11 QUIT $PIECE(SC,"^",I)_"000"
OEFDATA ;
+1 ;get patient OEF/OIF status and date of return
+2 SET (ECXOEF,ECXOEFDT)=""
+3 IF $GET(VASV(11))>0
SET ECXOEF=ECXOEF_"OIF"
+4 IF $GET(VASV(12))>0
SET ECXOEF=ECXOEF_"OEF"
+5 IF $GET(VASV(13))>0
SET ECXOEF=ECXOEF_"UNK"
+6 IF ECXOEF'=""
Begin DoDot:1
+7 SET ECXOEFDT=""
+8 IF $GET(VASV(11))>0
SET ECXOEFDT=$PIECE($GET(VASV(11,$GET(VASV(11)),3)),"^")
+9 IF $GET(VASV(12))>0
IF $PIECE($GET(VASV(12,$GET(VASV(12)),3)),"^")>ECXOEFDT
SET ECXOEFDT=$PIECE($GET(VASV(12,$GET(VASV(12)),3)),"^")
+10 IF $GET(VASV(13))>0
IF $PIECE($GET(VASV(13,$GET(VASV(13)),3)),"^")>ECXOEFDT
SET ECXOEFDT=$PIECE($GET(VASV(13,$GET(VASV(13)),3)),"^")
+11 IF ECXOEFDT>0
SET ECXOEFDT=17000000+ECXOEFDT
End DoDot:1
+12 ;
+13 SET ECXPAT("ECXOEF")=ECXOEF
+14 SET ECXPAT("ECXOEFDT")=ECXOEFDT
+15 QUIT
+16 ;
SHAD(ECXDFN) ; Get PROJ 112/SHAD indicator
+1 ;
+2 ; Input:
+3 ; ECXDFN - Patient DFN
+4 ;
+5 ;Output:
+6 ; PROJ 112/SHAD DX (Y/N/U)
+7 ; Error -1, missing parameter
+8 ;
+9 NEW ECXSHAD
+10 SET ECXDFN=$GET(ECXDFN)
+11 SET ECXSHAD=$$GETSHAD^DGUTL3(ECXDFN)
+12 SET ECXSHAD=$SELECT(ECXSHAD=1:"Y",ECXSHAD=0:"N",ECXSHAD="":"U",1:-1)
+13 QUIT ECXSHAD