RORX024A ;ALB/TK,MAF - HEP A/B VACCINE/IMMUNITY REPORTS (QUERY & STORE) ; 27 Jul 2016 3:04 PM
;;1.5;CLINICAL CASE REGISTRIES;**29,30,31,33,34,37,38,39**;Feb 17, 2006;Build 4
;
; This routine uses the following IAs:
;
; #10103 FMADD^XLFDT (supported)
; #2051 FIND1^DIC
;
;******************************************************************************
;******************************************************************************
; --- ROUTINE MODIFICATION LOG ---
;
;PKG/PATCH DATE DEVELOPER MODIFICATION
;----------- ---------- ----------- ----------------------------------------
;ROR*1.5*29 APR 2016 T KOPP Added for Hep A/B vaccine/immunity reports
;ROR*1.5*30 MAR 2017 M FERRARESE LOINC CODES result values changed to uppercase
;ROR*1.5*31 MAY 2017 M FERRARESE Adding PACT, PCP, and AGE/DOB as additional
; identifiers.
;ROR*1.5*33 MAY 2017 M FERRARESE Adding Future Appointment
;ROR*1.5*34 SEP 2018 M FERRARESE Adding Future Appointment clinic name ; Fix LOINC code table for HEP A/B
;ROR*1.5*37 NOV 2020 F TRAXLER Adding UNDET check in POS subroutine
;ROR*1.5*38 APR 2021 F TRAXLER Fix bug introduced by ROR*1.5*37 change.
;ROR*1.5*39 JUN 2021 F TRAXLER Replace real SSN with zeroes.
;******************************************************************************
;******************************************************************************
Q
;
;***** QUERIES THE REGISTRY
;
; FLAGS Flags for the $$SKIP^RORXU005
; .NSPT Number of selected patients is returned here
; RORRTN Routine name for Hep A (RORX024) or Hep B (RORX025) report
;
; Return Values:
; <0 Error code
; 0 Ok
; >0 Number of non-fatal errors
;
QUERY(FLAGS,NSPT,RORRTN) ;
N RORPTN ; Number of patients in the registry
N RORVSDT ; Vaccination search start date
N RORVEDT ; Vaccination search end date
N RORCDLIST ; Flag to indicate whether a clinic or division list exists
N RORCDSTDT ; Start date for clinic/division utilization search
N RORCDENDT ; End date for clinic/division utilization search
N RORICN ; National ICN
N RORPACT ;Patient Care Team
N RORPCP ;Priamary Care Provider
N AGE,AGETYPE
N RORDAYS ;Number of Days PATCH 33
N RORFUT ;Future appointments PATCH 33
N RORCLIN ;Future appointments clinic PATCH 34
;
S:$G(RORRTN)="" RORRTN="RORX024"
N CNT,IEN,IENS,LTEDT,LTSDT,RORHEPB,PATIEN,RC,SKIP,SKIPEDT,SKIPSDT,TMP,UTEDT,UTIL,UTSDT,VA,VADM,XREFNODE
N RCC,FLAG
S XREFNODE=$NA(^RORDATA(798,"AC",+RORREG))
S (CNT,NSPT,RC,SKIPEDT,SKIPSDT)=0
;--- Utilization date range
D:$$PARAM^RORTSK01("PATIENTS","CAREONLY")
. S UTSDT=$$PARAM^RORTSK01("DATE_RANGE_3","START")\1
. S UTEDT=$$PARAM^RORTSK01("DATE_RANGE_3","END")\1
. ;--- Combined date range
. S SKIPSDT=$$DTMIN^RORUTL18(SKIPSDT,UTSDT)
. S SKIPEDT=$$DTMAX^RORUTL18(SKIPEDT,UTEDT)
;--- Number of patients in the registry
S RORPTN=$$REGSIZE^RORUTL02(+RORREG) S:RORPTN<0 RORPTN=0
;
;--- Setup the immunity and vaccination parameters
I RORIMM D
. ;--- Lab/LOINC codes date range
. S LTSDT=$$PARAM^RORTSK01("DATE_RANGE_7","START")\1
. S LTEDT=$$PARAM^RORTSK01("DATE_RANGE_7","END")\1
. ;--- Combined date range
. S SKIPSDT=$$DTMIN^RORUTL18(SKIPSDT,LTSDT)
. S SKIPEDT=$$DTMAX^RORUTL18(SKIPEDT,LTEDT)
. ;--- Shift the Labs end date
. S LTEDT=$$FMADD^XLFDT(LTEDT,1)
I RORVAC D
. S RORVSDT=$$PARAM^RORTSK01("DATE_RANGE_6","START")\1
. S RORVEDT=$$PARAM^RORTSK01("DATE_RANGE_6","END")\1
. ;--- Combined date range
. S SKIPSDT=$$DTMIN^RORUTL18(SKIPSDT,RORVSDT)
. S SKIPEDT=$$DTMAX^RORUTL18(SKIPEDT,RORVEDT)
. ;--- Shift the vaccine end date
. S RORVEDT=$$FMADD^XLFDT(RORVEDT\1,1)
Q:'(RORIMM!RORVAC) 0
;
;=== Set up Clinic/Division list parameters
S RORCDLIST=$$CDPARMS^RORXU001(.RORTSK,.RORCDSTDT,.RORCDENDT,1)
;
S RORHEPB=$S(RORRTN'="RORX024":"",1:$$FIND1^DIC(798.1,,"BQX","VA HEPB"))
;--- Browse through the registry records
S IEN=0
S FLAG=$G(RORTSK("PARAMS","ICDFILT","A","FILTER"))
F S IEN=$O(@XREFNODE@(IEN)) Q:IEN'>0 D Q:RC<0
. S TMP=$S(RORPTN>0:CNT/RORPTN,1:"")
. S RC=$$LOOP^RORTSK01(TMP) Q:RC<0
. S IENS=IEN_",",CNT=CNT+1
. ; Ignore patients in Hep B registry if Hep B report
. I RORHEPB'="" Q:$D(^RORDATA(798,"AC",+RORHEPB,+IEN))
. ;--- Get patient DFN
. S PATIEN=$$PTIEN^RORUTL01(IEN) Q:PATIEN'>0
. ;check for patient list and quit if not on list
. I $D(RORTSK("PARAMS","PATIENTS","C")),'$D(RORTSK("PARAMS","PATIENTS","C",PATIEN)) Q
. ;--- Check if the patient should be skipped
. Q:$$SKIP^RORXU005(IEN,FLAGS,SKIPSDT,SKIPEDT)
. S SKIP=1,UTIL=0
. ;--- Check if patient should be filtered because of ICD codes
. S RCC=0
. I FLAG'="ALL" D
. . S RCC=$$ICD^RORXU010(PATIEN)
. I (FLAG="INCLUDE")&(RCC=0) Q
. I (FLAG="EXCLUDE")&(RCC=1) Q
. ;
. ;--- Check for Clinic or Division list and quit if not in list
. I RORCDLIST,'$$CDUTIL^RORXU001(.RORTSK,PATIEN,RORCDSTDT,RORCDENDT) Q
. ;
. S RCC=0,SKIP=1
. D
. . ;--- Search for vaccination data in IMMUNIZATIONS file
. . I RORVAC D Q:RCC<0
. . . N VAC,ROR8PAT,ROR8LST,RORVRES
. . . S ROR8PAT=$NA(^TMP(RORRTN,$J,"VAC"))
. . . S RORVRES=$NA(^TMP(RORRTN,$J,"VAC_RES")) K @RORVRES
. . . S VAC=$$QUERY^RORUTL21(PATIEN,ROR8PAT,RORVRES,RORVSDT,RORVEDT)
. . . I VAC<0 S RCC=-1 Q
. . . I RORVAC<0,'VAC S ^TMP(RORRTN,$J,"PAT",PATIEN,"VAC")=0 Q ; No vaccination requested and none found
. . . I RORVAC>0,VAC D Q ; Vaccination requested, at least one found
. . . . S ROR8LST=$NA(^TMP(RORRTN,$J,"PAT",PATIEN,"VAC"))
. . . . S RCC=$$PROCESS^RORUTL21(RORVRES,PATIEN,ROR8LST)
. . . . K @RORVRES
. . . . Q:RCC<0
. . . S RCC=-1 ;does not pass vaccination selection criteria validation
. . ;
. . ;--- Search for lab data positive results for selected LOINC codes
. . I RORIMM D Q:RCC<0
. . . N IMM,ROR8LST,RORLOINC,RORLRES
. . . S RORLOINC=$NA(^TMP(RORRTN,$J,"IMM"))
. . . ; Extract positive lab test results for selected LOINC codes
. . . S IMM=$$LAB^RORX024(PATIEN,RORLOINC,.RORLRES,LTSDT,LTEDT)
. . . I IMM<0 S RCC=-1 Q
. . . I RORIMM<0,'IMM D Q ; No immunity requested and no positive test found
. . . . S ^TMP(RORRTN,$J,"PAT",PATIEN,"IMM")=""
. . . I RORIMM>0,IMM D Q ; Immunity requested, at least one positive lab test found
. . . . S ^TMP(RORRTN,$J,"PAT",PATIEN,"IMM")=RORLRES
. . . S RCC=-1 ;does not pass immunity selection criteria validation
. . S SKIP=0
. ;
. ;--- Check for any utilization in the corresponding date range
. I 'SKIP D:$$PARAM^RORTSK01("PATIENTS","CAREONLY")
. . K TMP S TMP("ALL")=1
. . S UTIL=+$$UTIL^RORXU003(UTSDT,UTEDT,PATIEN,.TMP)
. . S:'UTIL SKIP=1
. ;
. ;--- Skip the patient if not all search criteria have been met
. I SKIP K ^TMP(RORRTN,$J,"PAT",PATIEN) Q
. ;
. ;--- Get and store the patient's data
. D VADEM^RORUTL05(PATIEN,1) S VA("BID")="0000"
. S RORICN=$S($$PARAM^RORTSK01("PATIENTS","ICN"):$$ICN^RORUTL02(PATIEN),1:"")
. S RORPACT=$S($$PARAM^RORTSK01("PATIENTS","PACT"):$$PACT^RORUTL02(PATIEN),1:"")
. S RORPCP=$S($$PARAM^RORTSK01("PATIENTS","PCP"):$$PCP^RORUTL02(PATIEN),1:"")
. S TMP=$$DATE^RORXU002(VADM(6)\1)
. ;
. ;--- Patient age/DOB
. S AGETYPE=$$PARAM^RORTSK01("AGE_RANGE","TYPE") D
. . S AGE=$S(AGETYPE="AGE":$P(VADM(4),U),AGETYPE="DOB":$$DATE^RORXU002($P(VADM(3),U)\1),1:"")
. ;
. ; IF Future Appointment only Patch 33
. I $$PARAM^RORTSK01("OPTIONS","FUT_APPT") D
. . S RORDAYS=$$PARAM^RORTSK01("OPTIONS","FUT_APPT")
. . S RORFUT=$P($$FUTAPPT^RORUTL02(PATIEN,RORDAYS),U)
. . S RORCLIN=$P($$FUTAPPT^RORUTL02(PATIEN,RORDAYS),U,2)
. S ^TMP(RORRTN,$J,"PAT",PATIEN)=VA("BID")_U_VADM(1)_U_TMP_U_RORICN_U_RORPACT_U_RORPCP_U_AGE
. I $$PARAM^RORTSK01("OPTIONS","FUT_APPT") D
. . S $P(^TMP(RORRTN,$J,"PAT",PATIEN),U,8)=RORFUT
. . S $P(^TMP(RORRTN,$J,"PAT",PATIEN),U,9)=RORCLIN
. S NSPT=NSPT+1
;
;---
Q $S(RC<0:RC,1:0)
;
POS(VAL) ; Returns 1 if lab test returns positive result (VAL)
;Positive results are results that are equal to "P" or contain "POS", "DETEC" or "REA"
; -- AND -- do not contain "NEG", "NO" or "IND" or "UNDET" or "CANC" or "PEND"
N POS,X
S POS=0
S X=VAL
S VAL=$TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
I VAL["UNDET" Q POS
I VAL="P"!(VAL["POS")!(VAL["DETEC")!(VAL["REA") D
. I '(VAL["NEG"!(VAL["NO")!(VAL["IND")) S POS=1
Q POS
;
;***** STORES THE REPORT DATA
;
; REPORT IEN of the REPORT element
; [.]NSPT # of patients in registry
;
; Return Values:
; <0 Error code
; 0 Ok
; >0 Number of non-fatal errors
;
;
STORE(REPORT,NSPT,RORRTN) ;
N CNT,DFN,DOD,ICN,ITEM,LAST4,NAME,NODE,PACT,PCP,PTCNT,PTLST,PTNAME,RC,VDATE,TMP,VAL,LTIMM,IMMLST,VACLST,VLST,AGETYPE,AGE,RORFUT,RORCLIN,RORDAYS
S RC=0,PTLST=-1
;--- Force the "patient data" note in the output
D ADDVAL^RORTSK11(RORTSK,"PATIENT",,REPORT)
;--- Create patient list
S PTLST=$$ADDVAL^RORTSK11(RORTSK,"PATIENTS",,REPORT)
D ADDATTR^RORTSK11(RORTSK,PTLST,"TABLE","PATIENTS")
;---
S (CNT,DFN,PTCNT)=0
F S DFN=$O(^TMP(RORRTN,$J,"PAT",DFN)) Q:DFN'>0 D Q:RC<0
. S TMP=$S(NSPT>0:CNT/NSPT,1:"")
. S RC=$$LOOP^RORTSK01(TMP) Q:RC<0
. S CNT=CNT+1,NODE=$NA(^TMP(RORRTN,$J,"PAT",DFN))
. ;--- Patient's data
. S TMP=$G(@NODE)
. S LAST4=$P(TMP,U),PTNAME=$P(TMP,U,2),DOD=$P(TMP,U,3),ICN=$P(TMP,U,4),PACT=$P(TMP,U,5),PCP=$P(TMP,U,6),AGE=$P(TMP,U,7)
. I $$PARAM^RORTSK01("OPTIONS","FUT_APPT") S RORFUT=$P(TMP,U,8),RORCLIN=$P(TMP,U,9)
. ;--- Patient list
. S TMP=$S('RORIMM:1,RORIMM<0:$G(@NODE@("IMM"))="",1:$G(@NODE@("IMM"))'="")
. I TMP,$S('RORVAC:1,RORVAC<0:'$G(@NODE@("VAC")),1:$G(@NODE@("VAC"))) D
. . S ITEM=$$ADDVAL^RORTSK11(RORTSK,"PATIENT",,PTLST,,DFN)
. . D ADDVAL^RORTSK11(RORTSK,"NAME",PTNAME,ITEM,1)
. . D ADDVAL^RORTSK11(RORTSK,"LAST4",LAST4,ITEM,2)
. . ;--- Age/DOB
. . S AGETYPE=$$PARAM^RORTSK01("AGE_RANGE","TYPE") I AGETYPE'="ALL" D
. . . D ADDVAL^RORTSK11(RORTSK,AGETYPE,AGE,ITEM,1)
. . ;
. . D ADDVAL^RORTSK11(RORTSK,"DOD",DOD,ITEM,1)
. . S PTCNT=PTCNT+1
. ;--- List of vaccines
. S VACLST=-1
. I $O(@NODE@("VAC",""))'="" S VACLST=$$ADDVAL^RORTSK11(RORTSK,"VACCINES",,ITEM) Q:VACLST<0
. I RORVAC=1,VACLST'<0 S NAME="" F S NAME=$O(@NODE@("VAC",NAME)) Q:NAME="" D
. . S VLST=$$ADDVAL^RORTSK11(RORTSK,"VACCINE",,VACLST)
. . Q:VLST<0
. . S VDATE=0
. . F S VDATE=$O(@NODE@("VAC",NAME,VDATE)) Q:'VDATE D
. . . D ADDVAL^RORTSK11(RORTSK,"VAC_NAME",NAME,VLST,1)
. . . D ADDVAL^RORTSK11(RORTSK,"VAC_DATE",VDATE\1,VLST,1)
. ;--- Immunity
. I RORIMM=1,$G(@NODE@("IMM"))'="" D
. . S IMMLST=$$ADDVAL^RORTSK11(RORTSK,"LABTESTS",,ITEM) Q:IMMLST<0
. . S LTIMM=$G(@NODE@("IMM"))
. . Q:LTIMM=""
. . D ADDVAL^RORTSK11(RORTSK,"LTNAME",$P(LTIMM,U),IMMLST,1)
. . D ADDVAL^RORTSK11(RORTSK,"DATE",$P(LTIMM,U,2)\1,IMMLST,1)
. . S VAL=$P(LTIMM,U,3)
. . S TMP=$S($$NUMERIC^RORUTL05(VAL):3,1:1)
. . D ADDVAL^RORTSK11(RORTSK,"RESULT",VAL,IMMLST,TMP)
. I $$PARAM^RORTSK01("PATIENTS","ICN") D ADDVAL^RORTSK11(RORTSK,"ICN",ICN,ITEM,1)
. I $$PARAM^RORTSK01("PATIENTS","PACT") D ADDVAL^RORTSK11(RORTSK,"PACT",PACT,ITEM,1)
. I $$PARAM^RORTSK01("PATIENTS","PCP") D ADDVAL^RORTSK11(RORTSK,"PCP",PCP,ITEM,1)
. I $$PARAM^RORTSK01("OPTIONS","FUT_APPT") D
. . D ADDVAL^RORTSK11(RORTSK,"FUT_APPT",RORFUT,ITEM,1)
. . D ADDVAL^RORTSK11(RORTSK,"FUT_CLIN",RORCLIN,ITEM,1)
;--- Inactivate the patient list tag if the list is empty
D:PTCNT'>0 UPDVAL^RORTSK11(RORTSK,PTLST,,,1)
;---
Q 0
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HRORX024A 11805 printed Oct 16, 2024@17:45:53 Page 2
RORX024A ;ALB/TK,MAF - HEP A/B VACCINE/IMMUNITY REPORTS (QUERY & STORE) ; 27 Jul 2016 3:04 PM
+1 ;;1.5;CLINICAL CASE REGISTRIES;**29,30,31,33,34,37,38,39**;Feb 17, 2006;Build 4
+2 ;
+3 ; This routine uses the following IAs:
+4 ;
+5 ; #10103 FMADD^XLFDT (supported)
+6 ; #2051 FIND1^DIC
+7 ;
+8 ;******************************************************************************
+9 ;******************************************************************************
+10 ; --- ROUTINE MODIFICATION LOG ---
+11 ;
+12 ;PKG/PATCH DATE DEVELOPER MODIFICATION
+13 ;----------- ---------- ----------- ----------------------------------------
+14 ;ROR*1.5*29 APR 2016 T KOPP Added for Hep A/B vaccine/immunity reports
+15 ;ROR*1.5*30 MAR 2017 M FERRARESE LOINC CODES result values changed to uppercase
+16 ;ROR*1.5*31 MAY 2017 M FERRARESE Adding PACT, PCP, and AGE/DOB as additional
+17 ; identifiers.
+18 ;ROR*1.5*33 MAY 2017 M FERRARESE Adding Future Appointment
+19 ;ROR*1.5*34 SEP 2018 M FERRARESE Adding Future Appointment clinic name ; Fix LOINC code table for HEP A/B
+20 ;ROR*1.5*37 NOV 2020 F TRAXLER Adding UNDET check in POS subroutine
+21 ;ROR*1.5*38 APR 2021 F TRAXLER Fix bug introduced by ROR*1.5*37 change.
+22 ;ROR*1.5*39 JUN 2021 F TRAXLER Replace real SSN with zeroes.
+23 ;******************************************************************************
+24 ;******************************************************************************
+25 QUIT
+26 ;
+27 ;***** QUERIES THE REGISTRY
+28 ;
+29 ; FLAGS Flags for the $$SKIP^RORXU005
+30 ; .NSPT Number of selected patients is returned here
+31 ; RORRTN Routine name for Hep A (RORX024) or Hep B (RORX025) report
+32 ;
+33 ; Return Values:
+34 ; <0 Error code
+35 ; 0 Ok
+36 ; >0 Number of non-fatal errors
+37 ;
QUERY(FLAGS,NSPT,RORRTN) ;
+1 ; Number of patients in the registry
NEW RORPTN
+2 ; Vaccination search start date
NEW RORVSDT
+3 ; Vaccination search end date
NEW RORVEDT
+4 ; Flag to indicate whether a clinic or division list exists
NEW RORCDLIST
+5 ; Start date for clinic/division utilization search
NEW RORCDSTDT
+6 ; End date for clinic/division utilization search
NEW RORCDENDT
+7 ; National ICN
NEW RORICN
+8 ;Patient Care Team
NEW RORPACT
+9 ;Priamary Care Provider
NEW RORPCP
+10 NEW AGE,AGETYPE
+11 ;Number of Days PATCH 33
NEW RORDAYS
+12 ;Future appointments PATCH 33
NEW RORFUT
+13 ;Future appointments clinic PATCH 34
NEW RORCLIN
+14 ;
+15 if $GET(RORRTN)=""
SET RORRTN="RORX024"
+16 NEW CNT,IEN,IENS,LTEDT,LTSDT,RORHEPB,PATIEN,RC,SKIP,SKIPEDT,SKIPSDT,TMP,UTEDT,UTIL,UTSDT,VA,VADM,XREFNODE
+17 NEW RCC,FLAG
+18 SET XREFNODE=$NAME(^RORDATA(798,"AC",+RORREG))
+19 SET (CNT,NSPT,RC,SKIPEDT,SKIPSDT)=0
+20 ;--- Utilization date range
+21 if $$PARAM^RORTSK01("PATIENTS","CAREONLY")
Begin DoDot:1
+22 SET UTSDT=$$PARAM^RORTSK01("DATE_RANGE_3","START")\1
+23 SET UTEDT=$$PARAM^RORTSK01("DATE_RANGE_3","END")\1
+24 ;--- Combined date range
+25 SET SKIPSDT=$$DTMIN^RORUTL18(SKIPSDT,UTSDT)
+26 SET SKIPEDT=$$DTMAX^RORUTL18(SKIPEDT,UTEDT)
End DoDot:1
+27 ;--- Number of patients in the registry
+28 SET RORPTN=$$REGSIZE^RORUTL02(+RORREG)
if RORPTN<0
SET RORPTN=0
+29 ;
+30 ;--- Setup the immunity and vaccination parameters
+31 IF RORIMM
Begin DoDot:1
+32 ;--- Lab/LOINC codes date range
+33 SET LTSDT=$$PARAM^RORTSK01("DATE_RANGE_7","START")\1
+34 SET LTEDT=$$PARAM^RORTSK01("DATE_RANGE_7","END")\1
+35 ;--- Combined date range
+36 SET SKIPSDT=$$DTMIN^RORUTL18(SKIPSDT,LTSDT)
+37 SET SKIPEDT=$$DTMAX^RORUTL18(SKIPEDT,LTEDT)
+38 ;--- Shift the Labs end date
+39 SET LTEDT=$$FMADD^XLFDT(LTEDT,1)
End DoDot:1
+40 IF RORVAC
Begin DoDot:1
+41 SET RORVSDT=$$PARAM^RORTSK01("DATE_RANGE_6","START")\1
+42 SET RORVEDT=$$PARAM^RORTSK01("DATE_RANGE_6","END")\1
+43 ;--- Combined date range
+44 SET SKIPSDT=$$DTMIN^RORUTL18(SKIPSDT,RORVSDT)
+45 SET SKIPEDT=$$DTMAX^RORUTL18(SKIPEDT,RORVEDT)
+46 ;--- Shift the vaccine end date
+47 SET RORVEDT=$$FMADD^XLFDT(RORVEDT\1,1)
End DoDot:1
+48 if '(RORIMM!RORVAC)
QUIT 0
+49 ;
+50 ;=== Set up Clinic/Division list parameters
+51 SET RORCDLIST=$$CDPARMS^RORXU001(.RORTSK,.RORCDSTDT,.RORCDENDT,1)
+52 ;
+53 SET RORHEPB=$SELECT(RORRTN'="RORX024":"",1:$$FIND1^DIC(798.1,,"BQX","VA HEPB"))
+54 ;--- Browse through the registry records
+55 SET IEN=0
+56 SET FLAG=$GET(RORTSK("PARAMS","ICDFILT","A","FILTER"))
+57 FOR
SET IEN=$ORDER(@XREFNODE@(IEN))
if IEN'>0
QUIT
Begin DoDot:1
+58 SET TMP=$SELECT(RORPTN>0:CNT/RORPTN,1:"")
+59 SET RC=$$LOOP^RORTSK01(TMP)
if RC<0
QUIT
+60 SET IENS=IEN_","
SET CNT=CNT+1
+61 ; Ignore patients in Hep B registry if Hep B report
+62 IF RORHEPB'=""
if $DATA(^RORDATA(798,"AC",+RORHEPB,+IEN))
QUIT
+63 ;--- Get patient DFN
+64 SET PATIEN=$$PTIEN^RORUTL01(IEN)
if PATIEN'>0
QUIT
+65 ;check for patient list and quit if not on list
+66 IF $DATA(RORTSK("PARAMS","PATIENTS","C"))
IF '$DATA(RORTSK("PARAMS","PATIENTS","C",PATIEN))
QUIT
+67 ;--- Check if the patient should be skipped
+68 if $$SKIP^RORXU005(IEN,FLAGS,SKIPSDT,SKIPEDT)
QUIT
+69 SET SKIP=1
SET UTIL=0
+70 ;--- Check if patient should be filtered because of ICD codes
+71 SET RCC=0
+72 IF FLAG'="ALL"
Begin DoDot:2
+73 SET RCC=$$ICD^RORXU010(PATIEN)
End DoDot:2
+74 IF (FLAG="INCLUDE")&(RCC=0)
QUIT
+75 IF (FLAG="EXCLUDE")&(RCC=1)
QUIT
+76 ;
+77 ;--- Check for Clinic or Division list and quit if not in list
+78 IF RORCDLIST
IF '$$CDUTIL^RORXU001(.RORTSK,PATIEN,RORCDSTDT,RORCDENDT)
QUIT
+79 ;
+80 SET RCC=0
SET SKIP=1
+81 Begin DoDot:2
+82 ;--- Search for vaccination data in IMMUNIZATIONS file
+83 IF RORVAC
Begin DoDot:3
+84 NEW VAC,ROR8PAT,ROR8LST,RORVRES
+85 SET ROR8PAT=$NAME(^TMP(RORRTN,$JOB,"VAC"))
+86 SET RORVRES=$NAME(^TMP(RORRTN,$JOB,"VAC_RES"))
KILL @RORVRES
+87 SET VAC=$$QUERY^RORUTL21(PATIEN,ROR8PAT,RORVRES,RORVSDT,RORVEDT)
+88 IF VAC<0
SET RCC=-1
QUIT
+89 ; No vaccination requested and none found
IF RORVAC<0
IF 'VAC
SET ^TMP(RORRTN,$JOB,"PAT",PATIEN,"VAC")=0
QUIT
+90 ; Vaccination requested, at least one found
IF RORVAC>0
IF VAC
Begin DoDot:4
+91 SET ROR8LST=$NAME(^TMP(RORRTN,$JOB,"PAT",PATIEN,"VAC"))
+92 SET RCC=$$PROCESS^RORUTL21(RORVRES,PATIEN,ROR8LST)
+93 KILL @RORVRES
+94 if RCC<0
QUIT
End DoDot:4
QUIT
+95 ;does not pass vaccination selection criteria validation
SET RCC=-1
End DoDot:3
if RCC<0
QUIT
+96 ;
+97 ;--- Search for lab data positive results for selected LOINC codes
+98 IF RORIMM
Begin DoDot:3
+99 NEW IMM,ROR8LST,RORLOINC,RORLRES
+100 SET RORLOINC=$NAME(^TMP(RORRTN,$JOB,"IMM"))
+101 ; Extract positive lab test results for selected LOINC codes
+102 SET IMM=$$LAB^RORX024(PATIEN,RORLOINC,.RORLRES,LTSDT,LTEDT)
+103 IF IMM<0
SET RCC=-1
QUIT
+104 ; No immunity requested and no positive test found
IF RORIMM<0
IF 'IMM
Begin DoDot:4
+105 SET ^TMP(RORRTN,$JOB,"PAT",PATIEN,"IMM")=""
End DoDot:4
QUIT
+106 ; Immunity requested, at least one positive lab test found
IF RORIMM>0
IF IMM
Begin DoDot:4
+107 SET ^TMP(RORRTN,$JOB,"PAT",PATIEN,"IMM")=RORLRES
End DoDot:4
QUIT
+108 ;does not pass immunity selection criteria validation
SET RCC=-1
End DoDot:3
if RCC<0
QUIT
+109 SET SKIP=0
End DoDot:2
+110 ;
+111 ;--- Check for any utilization in the corresponding date range
+112 IF 'SKIP
if $$PARAM^RORTSK01("PATIENTS","CAREONLY")
Begin DoDot:2
+113 KILL TMP
SET TMP("ALL")=1
+114 SET UTIL=+$$UTIL^RORXU003(UTSDT,UTEDT,PATIEN,.TMP)
+115 if 'UTIL
SET SKIP=1
End DoDot:2
+116 ;
+117 ;--- Skip the patient if not all search criteria have been met
+118 IF SKIP
KILL ^TMP(RORRTN,$JOB,"PAT",PATIEN)
QUIT
+119 ;
+120 ;--- Get and store the patient's data
+121 DO VADEM^RORUTL05(PATIEN,1)
SET VA("BID")="0000"
+122 SET RORICN=$SELECT($$PARAM^RORTSK01("PATIENTS","ICN"):$$ICN^RORUTL02(PATIEN),1:"")
+123 SET RORPACT=$SELECT($$PARAM^RORTSK01("PATIENTS","PACT"):$$PACT^RORUTL02(PATIEN),1:"")
+124 SET RORPCP=$SELECT($$PARAM^RORTSK01("PATIENTS","PCP"):$$PCP^RORUTL02(PATIEN),1:"")
+125 SET TMP=$$DATE^RORXU002(VADM(6)\1)
+126 ;
+127 ;--- Patient age/DOB
+128 SET AGETYPE=$$PARAM^RORTSK01("AGE_RANGE","TYPE")
Begin DoDot:2
+129 SET AGE=$SELECT(AGETYPE="AGE":$PIECE(VADM(4),U),AGETYPE="DOB":$$DATE^RORXU002($PIECE(VADM(3),U)\1),1:"")
End DoDot:2
+130 ;
+131 ; IF Future Appointment only Patch 33
+132 IF $$PARAM^RORTSK01("OPTIONS","FUT_APPT")
Begin DoDot:2
+133 SET RORDAYS=$$PARAM^RORTSK01("OPTIONS","FUT_APPT")
+134 SET RORFUT=$PIECE($$FUTAPPT^RORUTL02(PATIEN,RORDAYS),U)
+135 SET RORCLIN=$PIECE($$FUTAPPT^RORUTL02(PATIEN,RORDAYS),U,2)
End DoDot:2
+136 SET ^TMP(RORRTN,$JOB,"PAT",PATIEN)=VA("BID")_U_VADM(1)_U_TMP_U_RORICN_U_RORPACT_U_RORPCP_U_AGE
+137 IF $$PARAM^RORTSK01("OPTIONS","FUT_APPT")
Begin DoDot:2
+138 SET $PIECE(^TMP(RORRTN,$JOB,"PAT",PATIEN),U,8)=RORFUT
+139 SET $PIECE(^TMP(RORRTN,$JOB,"PAT",PATIEN),U,9)=RORCLIN
End DoDot:2
+140 SET NSPT=NSPT+1
End DoDot:1
if RC<0
QUIT
+141 ;
+142 ;---
+143 QUIT $SELECT(RC<0:RC,1:0)
+144 ;
POS(VAL) ; Returns 1 if lab test returns positive result (VAL)
+1 ;Positive results are results that are equal to "P" or contain "POS", "DETEC" or "REA"
+2 ; -- AND -- do not contain "NEG", "NO" or "IND" or "UNDET" or "CANC" or "PEND"
+3 NEW POS,X
+4 SET POS=0
+5 SET X=VAL
+6 SET VAL=$TRANSLATE(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
+7 IF VAL["UNDET"
QUIT POS
+8 IF VAL="P"!(VAL["POS")!(VAL["DETEC")!(VAL["REA")
Begin DoDot:1
+9 IF '(VAL["NEG"!(VAL["NO")!(VAL["IND"))
SET POS=1
End DoDot:1
+10 QUIT POS
+11 ;
+12 ;***** STORES THE REPORT DATA
+13 ;
+14 ; REPORT IEN of the REPORT element
+15 ; [.]NSPT # of patients in registry
+16 ;
+17 ; Return Values:
+18 ; <0 Error code
+19 ; 0 Ok
+20 ; >0 Number of non-fatal errors
+21 ;
+22 ;
STORE(REPORT,NSPT,RORRTN) ;
+1 NEW CNT,DFN,DOD,ICN,ITEM,LAST4,NAME,NODE,PACT,PCP,PTCNT,PTLST,PTNAME,RC,VDATE,TMP,VAL,LTIMM,IMMLST,VACLST,VLST,AGETYPE,AGE,RORFUT,RORCLIN,RORDAYS
+2 SET RC=0
SET PTLST=-1
+3 ;--- Force the "patient data" note in the output
+4 DO ADDVAL^RORTSK11(RORTSK,"PATIENT",,REPORT)
+5 ;--- Create patient list
+6 SET PTLST=$$ADDVAL^RORTSK11(RORTSK,"PATIENTS",,REPORT)
+7 DO ADDATTR^RORTSK11(RORTSK,PTLST,"TABLE","PATIENTS")
+8 ;---
+9 SET (CNT,DFN,PTCNT)=0
+10 FOR
SET DFN=$ORDER(^TMP(RORRTN,$JOB,"PAT",DFN))
if DFN'>0
QUIT
Begin DoDot:1
+11 SET TMP=$SELECT(NSPT>0:CNT/NSPT,1:"")
+12 SET RC=$$LOOP^RORTSK01(TMP)
if RC<0
QUIT
+13 SET CNT=CNT+1
SET NODE=$NAME(^TMP(RORRTN,$JOB,"PAT",DFN))
+14 ;--- Patient's data
+15 SET TMP=$GET(@NODE)
+16 SET LAST4=$PIECE(TMP,U)
SET PTNAME=$PIECE(TMP,U,2)
SET DOD=$PIECE(TMP,U,3)
SET ICN=$PIECE(TMP,U,4)
SET PACT=$PIECE(TMP,U,5)
SET PCP=$PIECE(TMP,U,6)
SET AGE=$PIECE(TMP,U,7)
+17 IF $$PARAM^RORTSK01("OPTIONS","FUT_APPT")
SET RORFUT=$PIECE(TMP,U,8)
SET RORCLIN=$PIECE(TMP,U,9)
+18 ;--- Patient list
+19 SET TMP=$SELECT('RORIMM:1,RORIMM<0:$GET(@NODE@("IMM"))="",1:$GET(@NODE@("IMM"))'="")
+20 IF TMP
IF $SELECT('RORVAC:1,RORVAC<0:'$GET(@NODE@("VAC")),1:$GET(@NODE@("VAC")))
Begin DoDot:2
+21 SET ITEM=$$ADDVAL^RORTSK11(RORTSK,"PATIENT",,PTLST,,DFN)
+22 DO ADDVAL^RORTSK11(RORTSK,"NAME",PTNAME,ITEM,1)
+23 DO ADDVAL^RORTSK11(RORTSK,"LAST4",LAST4,ITEM,2)
+24 ;--- Age/DOB
+25 SET AGETYPE=$$PARAM^RORTSK01("AGE_RANGE","TYPE")
IF AGETYPE'="ALL"
Begin DoDot:3
+26 DO ADDVAL^RORTSK11(RORTSK,AGETYPE,AGE,ITEM,1)
End DoDot:3
+27 ;
+28 DO ADDVAL^RORTSK11(RORTSK,"DOD",DOD,ITEM,1)
+29 SET PTCNT=PTCNT+1
End DoDot:2
+30 ;--- List of vaccines
+31 SET VACLST=-1
+32 IF $ORDER(@NODE@("VAC",""))'=""
SET VACLST=$$ADDVAL^RORTSK11(RORTSK,"VACCINES",,ITEM)
if VACLST<0
QUIT
+33 IF RORVAC=1
IF VACLST'<0
SET NAME=""
FOR
SET NAME=$ORDER(@NODE@("VAC",NAME))
if NAME=""
QUIT
Begin DoDot:2
+34 SET VLST=$$ADDVAL^RORTSK11(RORTSK,"VACCINE",,VACLST)
+35 if VLST<0
QUIT
+36 SET VDATE=0
+37 FOR
SET VDATE=$ORDER(@NODE@("VAC",NAME,VDATE))
if 'VDATE
QUIT
Begin DoDot:3
+38 DO ADDVAL^RORTSK11(RORTSK,"VAC_NAME",NAME,VLST,1)
+39 DO ADDVAL^RORTSK11(RORTSK,"VAC_DATE",VDATE\1,VLST,1)
End DoDot:3
End DoDot:2
+40 ;--- Immunity
+41 IF RORIMM=1
IF $GET(@NODE@("IMM"))'=""
Begin DoDot:2
+42 SET IMMLST=$$ADDVAL^RORTSK11(RORTSK,"LABTESTS",,ITEM)
if IMMLST<0
QUIT
+43 SET LTIMM=$GET(@NODE@("IMM"))
+44 if LTIMM=""
QUIT
+45 DO ADDVAL^RORTSK11(RORTSK,"LTNAME",$PIECE(LTIMM,U),IMMLST,1)
+46 DO ADDVAL^RORTSK11(RORTSK,"DATE",$PIECE(LTIMM,U,2)\1,IMMLST,1)
+47 SET VAL=$PIECE(LTIMM,U,3)
+48 SET TMP=$SELECT($$NUMERIC^RORUTL05(VAL):3,1:1)
+49 DO ADDVAL^RORTSK11(RORTSK,"RESULT",VAL,IMMLST,TMP)
End DoDot:2
+50 IF $$PARAM^RORTSK01("PATIENTS","ICN")
DO ADDVAL^RORTSK11(RORTSK,"ICN",ICN,ITEM,1)
+51 IF $$PARAM^RORTSK01("PATIENTS","PACT")
DO ADDVAL^RORTSK11(RORTSK,"PACT",PACT,ITEM,1)
+52 IF $$PARAM^RORTSK01("PATIENTS","PCP")
DO ADDVAL^RORTSK11(RORTSK,"PCP",PCP,ITEM,1)
+53 IF $$PARAM^RORTSK01("OPTIONS","FUT_APPT")
Begin DoDot:2
+54 DO ADDVAL^RORTSK11(RORTSK,"FUT_APPT",RORFUT,ITEM,1)
+55 DO ADDVAL^RORTSK11(RORTSK,"FUT_CLIN",RORCLIN,ITEM,1)
End DoDot:2
End DoDot:1
if RC<0
QUIT
+56 ;--- Inactivate the patient list tag if the list is empty
+57 if PTCNT'>0
DO UPDVAL^RORTSK11(RORTSK,PTLST,,,1)
+58 ;---
+59 QUIT 0
+60 ;