Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: RORX007

RORX007.m

Go to the documentation of this file.
  1. RORX007 ;HCIOFO/BH,SG - RADIOLOGY UTILIZATION ;10/14/05 1:37pm
  1. ;;1.5;CLINICAL CASE REGISTRIES;**21,31,39**;Feb 17, 2006;Build 4
  1. ;
  1. ; This routine uses the following IAs:
  1. ;
  1. ; #10061 DEM^VADPT (supported)
  1. ;
  1. ;******************************************************************************
  1. ; --- ROUTINE MODIFICATION LOG ---
  1. ;
  1. ;PKG/PATCH DATE DEVELOPER MODIFICATION
  1. ;----------- ---------- ----------- ----------------------------------------
  1. ;ROR*1.5*21 SEP 2013 T KOPP Added ICN as last report column if
  1. ; additional identifier option selected
  1. ;ROR*1.5*31 MAY 2017 M FERRARESE Adding PACT, PCP, and AGE/DOB as additional
  1. ; identifiers.
  1. ;ROR*1.5*39 JUL 2021 M FERRARESE Setting SSN and LAST4 to zeros
  1. ;******************************************************************************
  1. Q
  1. ;
  1. ;***** COMPILES THE "RADIOLOGY UTILIZATION" REPORT
  1. ; REPORT CODE: 007
  1. ;
  1. ; .RORTSK Task number and task parameters
  1. ;
  1. ; The ^TMP("RORX007",$J) and ^TMP($J,"RAE1") global nodes are
  1. ; used by this function.
  1. ;
  1. ; ^TMP("RORX007",$J,
  1. ;
  1. ; "PAT",
  1. ; DFN,
  1. ; ProcName) Number of procedures
  1. ;
  1. ; "PATSORT",
  1. ; ProcQnty,
  1. ; Name,
  1. ; Last4) Patient data
  1. ; ^01: Number of different procedures
  1. ; ^02: Date of death
  1. ; ^03: National ICN
  1. ; ^04: Patient Care Team
  1. ; ^05: Primary Care Provider
  1. ; ^06: AGE/DOB
  1. ;
  1. ; "PROC",
  1. ; ProcName,
  1. ; DFN) Number of procedures
  1. ;
  1. ; "PROCSORT",
  1. ; ProcQnty,
  1. ; ProcName,
  1. ; CPT) Number of individual patients
  1. ;
  1. ; "TOTAL") Category Totals
  1. ; ^01: Total number of procedures
  1. ; ^02: Number of different procedures
  1. ; ^03: Total number of patients
  1. ; ^04: Number of individual patients
  1. ;
  1. ; Return Values:
  1. ; <0 Error code
  1. ; 0 Ok
  1. ;
  1. RADUTL(RORTSK) ;
  1. N ROREDT ; End date
  1. N RORREG ; Registry IEN
  1. N RORSDT ; Start date
  1. ;
  1. N CNT,ECNT,RC,REPORT,RORPTN,SFLAGS,TMP
  1. ;--- Root node of the report
  1. S REPORT=$$ADDVAL^RORTSK11(RORTSK,"REPORT")
  1. Q:REPORT<0 REPORT
  1. ;
  1. ;--- Get and prepare the report parameters
  1. S RORREG=$$PARAM^RORTSK01("REGIEN")
  1. S RC=$$PARAMS^RORX007A(REPORT,.RORSDT,.ROREDT,.SFLAGS)
  1. Q:RC<0 RC
  1. ;
  1. ;--- Initialize constants and variables
  1. S RORPTN=$$REGSIZE^RORUTL02(+RORREG) S:RORPTN<0 RORPTN=0
  1. S ECNT=0 K ^TMP("RORX007",$J)
  1. ;
  1. ;--- Report header
  1. S RC=$$HEADER^RORX007A(REPORT) Q:RC<0 RC
  1. ;
  1. D
  1. . ;--- Query the registry
  1. . D TPPSETUP^RORTSK01(75)
  1. . S RC=$$QUERY^RORX007A(SFLAGS)
  1. . I RC Q:RC<0 S ECNT=ECNT+RC
  1. . ;--- Sort the data
  1. . D TPPSETUP^RORTSK01(10)
  1. . S RC=$$SORT()
  1. . I RC Q:RC<0 S ECNT=ECNT+RC
  1. . ;--- Store the results
  1. . D TPPSETUP^RORTSK01(15)
  1. . S RC=$$STORE(REPORT)
  1. . I RC Q:RC<0 S ECNT=ECNT+RC
  1. ;
  1. ;--- Cleanup
  1. K ^TMP("RORX007",$J),^TMP($J,"RAE1")
  1. Q $S(RC<0:RC,ECNT>0:-43,1:0)
  1. ;
  1. ;***** SORTS THE RESULTS AND COMPILES THE TOTALS
  1. ;
  1. ; SPCNT Number of patients selected for the report
  1. ;
  1. ; Return Values:
  1. ; <0 Error code
  1. ; 0 Ok
  1. ; >0 Number of non-fatal errors
  1. ;
  1. SORT(SPCNT) ;
  1. N DFN,DOD,DPCNT,ECNT,ICN,NAME,NODE,PACT,PCP,PRCNT,PQ,PRN,RC,TMP,TOTAL,VA,VADM,VAHOW,VAROOT,AGETYPE,AGE
  1. S (ECNT,RC)=0
  1. S NODE=$NA(^TMP("RORX007",$J))
  1. Q:$D(@NODE)<10 0
  1. ;--- Procedures
  1. S RC=$$LOOP^RORTSK01(0) Q:RC<0 RC
  1. S PRN=""
  1. F S PRN=$O(@NODE@("PROC",PRN)) Q:PRN="" D
  1. . S (DPCNT,PRCNT)=0
  1. . S DFN=""
  1. . F S DFN=$O(@NODE@("PROC",PRN,DFN)) Q:DFN="" D
  1. . . S PQ=$G(@NODE@("PROC",PRN,DFN))
  1. . . S DPCNT=DPCNT+1,PRCNT=PRCNT+PQ
  1. . ;---
  1. . S @NODE@("PROCSORT",PRCNT,$P(PRN,U),$P(PRN,U,2))=DPCNT
  1. . S TOTAL("DPR")=$G(TOTAL("DPR"))+1 ; Different procedures
  1. . S TOTAL("TPT")=$G(TOTAL("TPT"))+DPCNT ; Number of patients
  1. K @NODE@("PROC")
  1. ;--- Patients
  1. S RC=$$LOOP^RORTSK01(0.5) Q:RC<0 RC
  1. S DFN=""
  1. F S DFN=$O(@NODE@("PAT",DFN)) Q:DFN="" D
  1. . S (DPCNT,PRCNT)=0
  1. . D DEM^VADPT
  1. . S NAME=$G(VADM(1)) Q:NAME=""
  1. . S LAST4="0000" ;S LAST4=$G(VA("BID")) S:LAST4="" LAST4=" "
  1. . S DOD=$$DATE^RORXU002($P(VADM(6),U)\1)
  1. . S ICN=$$ICN^RORUTL02(DFN)
  1. . S PACT=$$PACT^RORUTL02(DFN)
  1. . S PCP=$$PCP^RORUTL02(DFN)
  1. . S AGETYPE=$$PARAM^RORTSK01("AGE_RANGE","TYPE") D
  1. . . S AGE=$S(AGETYPE="AGE":$P(VADM(4),U),AGETYPE="DOB":$$DATE^RORXU002($P(VADM(3),U)\1),1:"")
  1. . S PRN=""
  1. . F S PRN=$O(@NODE@("PAT",DFN,PRN)) Q:PRN="" D
  1. . . S PQ=$G(@NODE@("PAT",DFN,PRN))
  1. . . S DPCNT=DPCNT+1,PRCNT=PRCNT+PQ
  1. . ;---
  1. . S PACT=$S($$PARAM^RORTSK01("PATIENTS","PACT"):PACT,1:"")
  1. . S PCP=$S($$PARAM^RORTSK01("PATIENTS","PCP"):PCP,1:"")
  1. . S @NODE@("PATSORT",PRCNT,NAME,LAST4)=DPCNT_U_DOD_U_$S($$PARAM^RORTSK01("PATIENTS","ICN"):ICN,1:"")_U_PACT_U_PCP_U_AGE
  1. . S TOTAL("TPR")=$G(TOTAL("TPR"))+PRCNT ; Number of procedures
  1. . S TOTAL("DPT")=$G(TOTAL("DPT"))+1 ; Different patients
  1. K @NODE@("PAT")
  1. ;--- Totals
  1. S TMP=$G(TOTAL("TPR"))_U_$G(TOTAL("DPR"))
  1. S @NODE@("TOTAL")=TMP_U_$G(TOTAL("TPT"))_U_$G(TOTAL("DPT"))
  1. ;---
  1. Q $S(RC<0:RC,1:ECNT)
  1. ;
  1. ;***** STORES THE RESULTS
  1. ;
  1. ; Return Values:
  1. ; <0 Error code
  1. ; 0 Ok
  1. ; >0 Number of non-fatal errors
  1. ;
  1. STORE(PARTAG) ;
  1. N RORSONLY ; Output summary only
  1. ;
  1. N RC,TMP
  1. S RORSONLY=$$SMRYONLY^RORXU006()
  1. S RC=0
  1. ;--- Tables
  1. Q:$D(^TMP("RORX007",$J))<10 0
  1. ;--- Procedures
  1. S RC=$$LOOP^RORTSK01(0) Q:RC<0 RC
  1. S RC=$$TBLPROC(PARTAG) Q:RC<0 RC
  1. ;--- Patients
  1. S RC=$$LOOP^RORTSK01(0.5) Q:RC<0 RC
  1. S RC=$$TBLPAT(PARTAG) Q:RC<0 RC
  1. ;--- Totals
  1. S TMP=$G(^TMP("RORX007",$J,"TOTAL"))
  1. D ADDVAL^RORTSK11(RORTSK,"NPR",$P(TMP,U,1),PARTAG)
  1. D ADDVAL^RORTSK11(RORTSK,"NDP",$P(TMP,U,2),PARTAG)
  1. D ADDVAL^RORTSK11(RORTSK,"NP",$P(TMP,U,4),PARTAG)
  1. ;---
  1. Q $S(RC<0:RC,1:0)
  1. ;
  1. ;***** STORES THE TABLE OF PATIENTS
  1. ;
  1. ; PRNTELMT IEN of the parent tag
  1. ;
  1. ; Return Values:
  1. ; <0 Error code
  1. ; 0 Ok
  1. ;
  1. TBLPAT(PRNTELMT) ;
  1. N BUF,ITEM,LAST4,MAXUTNUM,NAME,NODE,PRCNT,RC,TABLE,TMP,UTNUM
  1. S MAXUTNUM=$$PARAM^RORTSK01("MAXUTNUM")
  1. Q:MAXUTNUM'>0 0
  1. S TABLE=$$ADDVAL^RORTSK11(RORTSK,"PATIENTS",,PRNTELMT)
  1. Q:TABLE<0 TABLE
  1. D ADDATTR^RORTSK11(RORTSK,TABLE,"TABLE","PATIENTS")
  1. S NODE=$NA(^TMP("RORX007",$J,"PATSORT"))
  1. ;--- Table
  1. S PRCNT="",(RC,UTNUM)=0
  1. F S PRCNT=$O(@NODE@(PRCNT),-1) Q:PRCNT="" D Q:RC
  1. . S NAME=""
  1. . F S NAME=$O(@NODE@(PRCNT,NAME)) Q:NAME="" D Q:RC
  1. . . S LAST4=""
  1. . . F S LAST4=$O(@NODE@(PRCNT,NAME,LAST4)) Q:LAST4="" D Q:RC
  1. . . . S ITEM=$$ADDVAL^RORTSK11(RORTSK,"PATIENT",,TABLE)
  1. . . . D ADDVAL^RORTSK11(RORTSK,"NAME",NAME,ITEM,1)
  1. . . . D ADDVAL^RORTSK11(RORTSK,"LAST4",LAST4,ITEM,1)
  1. . . . S BUF=@NODE@(PRCNT,NAME,LAST4)
  1. . . . S AGETYPE=$$PARAM^RORTSK01("AGE_RANGE","TYPE") I AGETYPE'="ALL" D
  1. . . . . D ADDVAL^RORTSK11(RORTSK,AGETYPE,$P(BUF,U,6),ITEM,1)
  1. . . . D ADDVAL^RORTSK11(RORTSK,"DOD",$P(BUF,U,2),ITEM,1)
  1. . . . D ADDVAL^RORTSK11(RORTSK,"TOTAL",PRCNT,ITEM,1)
  1. . . . D ADDVAL^RORTSK11(RORTSK,"UNIQUE",+BUF,ITEM,1)
  1. . . . I $$PARAM^RORTSK01("PATIENTS","ICN") D
  1. . . . . D ADDVAL^RORTSK11(RORTSK,"ICN",$P(BUF,U,3),ITEM,1)
  1. . . . I $$PARAM^RORTSK01("PATIENTS","PACT") D
  1. . . . . D ADDVAL^RORTSK11(RORTSK,"PACT",$P(BUF,U,4),ITEM,1)
  1. . . . I $$PARAM^RORTSK01("PATIENTS","PCP") D
  1. . . . . D ADDVAL^RORTSK11(RORTSK,"PCP",$P(BUF,U,5),ITEM,1)
  1. . . . S UTNUM=UTNUM+1 S:UTNUM'<MAXUTNUM RC=1
  1. Q:RC<0 RC
  1. ;---
  1. Q $S(RC<0:RC,1:0)
  1. ;
  1. ;***** STORES THE TABLE OF PROCEDURES
  1. ;
  1. ; PRNTELMT IEN of the parent tag
  1. ;
  1. ; Return Values:
  1. ; <0 Error code
  1. ; 0 Ok
  1. ;
  1. TBLPROC(PRNTELMT) ;
  1. N CPT,ITEM,MINRPNUM,NODE,PRCNT,PRN,TABLE,TMP
  1. S MINRPNUM=$$PARAM^RORTSK01("MINRPNUM")
  1. Q:MINRPNUM'>0 0
  1. S TABLE=$$ADDVAL^RORTSK11(RORTSK,"PROCEDURES",,PRNTELMT)
  1. Q:TABLE<0 TABLE
  1. D ADDATTR^RORTSK11(RORTSK,TABLE,"TABLE","PROCEDURES")
  1. S NODE=$NA(^TMP("RORX007",$J,"PROCSORT"))
  1. ;--- Table
  1. S PRCNT="",RC=0
  1. F S PRCNT=$O(@NODE@(PRCNT),-1) Q:PRCNT<MINRPNUM D Q:RC
  1. . S PRN=""
  1. . F S PRN=$O(@NODE@(PRCNT,PRN)) Q:PRN="" D Q:RC
  1. . . S CPT=""
  1. . . F S CPT=$O(@NODE@(PRCNT,PRN,CPT)) Q:CPT="" D Q:RC
  1. . . . S ITEM=$$ADDVAL^RORTSK11(RORTSK,"PROCEDURE",,TABLE)
  1. . . . D ADDVAL^RORTSK11(RORTSK,"NAME",PRN,ITEM,1)
  1. . . . D ADDVAL^RORTSK11(RORTSK,"CPT",CPT,ITEM,2)
  1. . . . S TMP=+@NODE@(PRCNT,PRN,CPT)
  1. . . . D ADDVAL^RORTSK11(RORTSK,"PATIENTS",TMP,ITEM,1)
  1. . . . D ADDVAL^RORTSK11(RORTSK,"TOTAL",PRCNT,ITEM,1)
  1. Q:RC<0 RC
  1. ;---
  1. Q $S(RC<0:RC,1:0)