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

PXRRFDSD.m

Go to the documentation of this file.
  1. PXRRFDSD ;ISL/PKR - Go through the encounters attaching a diagnosis and then sort based on the diagnosis. ;06/08/98
  1. ;;1.0;PCE PATIENT CARE ENCOUNTER;**3,10,12,31,54,121,199**;Aug 12, 1996;Build 51
  1. SORT ;
  1. N BUSY,COUNT,DCIEN,DGTOT10,DIAGTOT,ENCTOT,FACILITY,HLOC,ICD9IEN,ICDDATA
  1. N ICDTYP,INFOTYPE,PNAME,POV,POVIEN,PRIMARY,PXDXDATE,STOIND,VACODE,VIEN
  1. ;
  1. ;The ^XTMP array created in PXRRFDSE can have four possible structures.
  1. ;If the encounters were sorted by location then the structure will be:
  1. ; ^XTMP(PXRRXTMP,FACILITY,1,1,HLOC,VIEN).
  1. ;If the encounters were sorted by person class then the structure will be:
  1. ; ^XTMP(PXRRXTMP,FACILITY,1,VACODE,1,VIEN).
  1. ;If the encounters were sorted by provider then the structure will be:
  1. ; ^XTMP(PXRRXTMP,FACILITY,PNAME,1,1,VIEN).
  1. ;If none of the above screens were used then the structure will be:
  1. ; ^XTMP(PXRRXTMP,FACILITY,1,1,1,VIEN).
  1. ;
  1. I '(PXRRQUE!$D(IO("S"))) D INIT^PXRRBUSY(.BUSY)
  1. ;
  1. ;Allow the task to be cleaned up on successful completion.
  1. S ZTREQ="@"
  1. ;
  1. I $P(PXRRFDDC,U,1)="P" S PRIMARY=1
  1. E S PRIMARY=0
  1. ;
  1. S DIAGTOT=0,DGTOT10=0
  1. ;Initialize the storage index.
  1. S STOIND=0
  1. ;
  1. S FACILITY=""
  1. FAC S FACILITY=$O(^XTMP(PXRRXTMP,"ENCTR",FACILITY))
  1. I FACILITY="" G SETPR
  1. S STOIND=STOIND+1
  1. S ^XTMP(PXRRXTMP,"INFO","FACILITY",FACILITY,FACILITY)=STOIND
  1. ;
  1. S PNAME=""
  1. PRV S PNAME=$O(^XTMP(PXRRXTMP,"ENCTR",FACILITY,PNAME))
  1. I PNAME="" G FAC
  1. ;Start INFOTYPE with "G" so it always comes after FACILITY.
  1. S INFOTYPE="G"
  1. I ($L(PNAME)>1)&(+PNAME=0)&(INFOTYPE'["PRV") D
  1. . S INFOTYPE=INFOTYPE_"PRV"
  1. ;
  1. ;Check for a user request to stop the task.
  1. I $$S^%ZTLOAD S ZTSTOP=1 D EXIT^PXRRFDD
  1. ;
  1. S VACODE=""
  1. PCLASS S VACODE=$O(^XTMP(PXRRXTMP,"ENCTR",FACILITY,PNAME,VACODE))
  1. I VACODE="" G PRV
  1. I ($L(VACODE)>1)&(+VACODE=0)&(INFOTYPE'["PC") D
  1. . S INFOTYPE=INFOTYPE_"PC"
  1. ;
  1. S HLOC=""
  1. LOC S HLOC=$O(^XTMP(PXRRXTMP,"ENCTR",FACILITY,PNAME,VACODE,HLOC))
  1. I HLOC="" G PCLASS
  1. ;The location is stored in the form NAME_U_STOP CODE
  1. I ($L(HLOC)>1)&(+$P(HLOC,U,2)>0)&(INFOTYPE'["LOC") D
  1. . S INFOTYPE=INFOTYPE_"LOC"
  1. ;
  1. S STOIND=STOIND+1
  1. S ^XTMP(PXRRXTMP,"INFO",INFOTYPE,FACILITY,PNAME,VACODE,HLOC)=STOIND
  1. ;
  1. S VIEN=""
  1. ENC S VIEN=$O(^XTMP(PXRRXTMP,"ENCTR",FACILITY,PNAME,VACODE,HLOC,VIEN))
  1. I (VIEN="")!(VIEN=0) G LOC
  1. ;Count the encounters
  1. I '$D(ENCTOT(STOIND)) S ENCTOT(STOIND)=1
  1. E S ENCTOT(STOIND)=ENCTOT(STOIND)+1
  1. ;
  1. ;If this is an interactive session let the user know that something
  1. ;is happening.
  1. I '(PXRRQUE!$D(IO("S"))) D SPIN^PXRRBUSY("Sorting diagnoses",.BUSY)
  1. ;
  1. ;Initialize the diagnosis counters.
  1. I '$D(DIAGTOT(STOIND)) S DIAGTOT(STOIND)=0
  1. I '$D(DGTOT10(STOIND)) S DGTOT10(STOIND)=0 ; keep track of ICD10s also
  1. ;
  1. ;Get the diagnoses associated with this VIEN.
  1. S POVIEN=""
  1. DIAG S POVIEN=$O(^AUPNVPOV("AD",VIEN,POVIEN))
  1. I POVIEN="" G ENC
  1. S POV=^AUPNVPOV(POVIEN,0)
  1. ;
  1. ;Apply the primary/secondary screen. If this field does not contain P
  1. ;then we take it to be secondary.
  1. I PRIMARY I $P(POV,U,12)'="P" G DIAG
  1. ;
  1. ;Count the ICD9 entries.
  1. S ICD9IEN=$P(POV,U,1)
  1. S PXDXDATE=$$CSDATE^PXDXUTL(VIEN)
  1. S ICDDATA=$$ICDDATA^ICDXCODE("DIAG",ICD9IEN,PXDXDATE,"I"),ICDTYP=$P(ICDDATA,U,20)
  1. I ICDTYP="30" G DIAG2
  1. I '$D(^TMP(PXRRXTMP,$J,"DIAG",STOIND,"ICD9",ICD9IEN)) S ^TMP(PXRRXTMP,$J,"DIAG",STOIND,"ICD9",ICD9IEN)=1
  1. E S ^TMP(PXRRXTMP,$J,"DIAG",STOIND,"ICD9",ICD9IEN)=^TMP(PXRRXTMP,$J,"DIAG",STOIND,"ICD9",ICD9IEN)+1
  1. S DIAGTOT(STOIND)=DIAGTOT(STOIND)+1
  1. G DIAG3
  1. DIAG2 I '$D(^TMP(PXRRXTMP,$J,"DIAG",STOIND,"ICD10",ICD9IEN)) S ^TMP(PXRRXTMP,$J,"DIAG",STOIND,"ICD10",ICD9IEN)=1
  1. E S ^TMP(PXRRXTMP,$J,"DIAG",STOIND,"ICD10",ICD9IEN)=^TMP(PXRRXTMP,$J,"DIAG",STOIND,"ICD10",ICD9IEN)+1
  1. S DGTOT10(STOIND)=DGTOT10(STOIND)+1
  1. DIAG3 ;
  1. ;Count the diagnostic categories.
  1. ;This will probably require a DBIA.
  1. ;S DCIEN=$P(^ICD9(ICD9IEN,0),U,5)
  1. S DCIEN=$P(ICDDATA,U,6)
  1. I DCIEN'>0 S DCIEN=0
  1. G:ICDTYP="30" DIAG4
  1. I '$D(^TMP(PXRRXTMP,$J,"DIAG",STOIND,"DC",DCIEN)) S ^TMP(PXRRXTMP,$J,"DIAG",STOIND,"DC",DCIEN)=1
  1. E S ^TMP(PXRRXTMP,$J,"DIAG",STOIND,"DC",DCIEN)=^TMP(PXRRXTMP,$J,"DIAG",STOIND,"DC",DCIEN)+1
  1. G DIAG
  1. DIAG4 I '$D(^TMP(PXRRXTMP,$J,"DIAG",STOIND,"DC10",DCIEN)) S ^TMP(PXRRXTMP,$J,"DIAG",STOIND,"DC10",DCIEN)=1
  1. E S ^TMP(PXRRXTMP,$J,"DIAG",STOIND,"DC10",DCIEN)=^TMP(PXRRXTMP,$J,"DIAG",STOIND,"DC10",DCIEN)+1
  1. ;
  1. G DIAG
  1. ;
  1. SETPR ;Rearrange the information for printing.
  1. S STOIND=""
  1. NEXTSTO S STOIND=$O(^TMP(PXRRXTMP,$J,"DIAG",STOIND))
  1. I STOIND="" G EXIT
  1. I '(PXRRQUE!$D(IO("S"))) D SPIN^PXRRBUSY("Sorting diagnoses",.BUSY)
  1. ;
  1. S ICD9IEN=""
  1. NEXTIC S ICD9IEN=$O(^TMP(PXRRXTMP,$J,"DIAG",STOIND,"ICD9",ICD9IEN))
  1. I ICD9IEN="" G STDC
  1. S COUNT=^TMP(PXRRXTMP,$J,"DIAG",STOIND,"ICD9",ICD9IEN)
  1. S DIAGTOT=DIAGTOT+COUNT
  1. S ^XTMP(PXRRXTMP,"PRINT",STOIND,"ICD9",COUNT,ICD9IEN)="DIAG"_ICD9IEN
  1. G NEXTIC
  1. ;
  1. ;
  1. STDC S DCIEN=""
  1. NEXTDC S DCIEN=$O(^TMP(PXRRXTMP,$J,"DIAG",STOIND,"DC",DCIEN))
  1. I DCIEN="" G NXTIC10
  1. S COUNT=^TMP(PXRRXTMP,$J,"DIAG",STOIND,"DC",DCIEN)
  1. S ^XTMP(PXRRXTMP,"PRINT",STOIND,"DC",COUNT,DCIEN)=""
  1. G NEXTDC
  1. ;
  1. NXTIC10 S ICD9IEN=""
  1. NEXTIC10 ;
  1. S ICD9IEN=$O(^TMP(PXRRXTMP,$J,"DIAG",STOIND,"ICD10",ICD9IEN))
  1. I ICD9IEN="" G STDC10
  1. S COUNT=^TMP(PXRRXTMP,$J,"DIAG",STOIND,"ICD10",ICD9IEN)
  1. S DGTOT10=DGTOT10+COUNT
  1. S ^XTMP(PXRRXTMP,"PRINT",STOIND,"ICD10",COUNT,ICD9IEN)="DIAG"_ICD9IEN
  1. G NEXTIC10
  1. ;
  1. ;
  1. STDC10 S DCIEN=""
  1. NEXTDC10 ;
  1. S DCIEN=$O(^TMP(PXRRXTMP,$J,"DIAG",STOIND,"DC10",DCIEN))
  1. I DCIEN="" G NEXTSTO
  1. S COUNT=^TMP(PXRRXTMP,$J,"DIAG",STOIND,"DC10",DCIEN)
  1. S ^XTMP(PXRRXTMP,"PRINT",STOIND,"DC10",COUNT,DCIEN)=""
  1. G NEXTDC10
  1. ;
  1. EXIT ;
  1. ;Kill the arrays we are done with.
  1. K ^TMP(PXRRXTMP,$J,"DIAG")
  1. K ^XTMP(PXRRXTMP,"ENCTR")
  1. ;
  1. S STOIND=""
  1. F S STOIND=$O(ENCTOT(STOIND)) Q:STOIND="" D
  1. . S ^XTMP(PXRRXTMP,"TOTALS","DIAGTOT",STOIND)=DIAGTOT(STOIND)
  1. . S ^XTMP(PXRRXTMP,"TOTALS","DGTOT10",STOIND)=DGTOT10(STOIND)
  1. . S ^XTMP(PXRRXTMP,"TOTALS","ENCTOT",STOIND)=ENCTOT(STOIND)
  1. ;
  1. I '(PXRRQUE!$D(IO("S"))) D DONE^PXRRBUSY("done")
  1. ;
  1. ;Print the report.
  1. I PXRRQUE D
  1. . N DESC,ROUTINE,TASK
  1. . S DESC="Frequency of diagnosis report - print"
  1. . S ROUTINE="PXRRFDP"
  1. . S TASK=^XTMP(PXRRXTMP,"PRZTSK")
  1. . S ZTDTH=$$NOW^XLFDT
  1. . S ZTSAVE("DIAGTOT")="",ZTSAVE("DGTOT10")="" ; FIX UNDEF IN PXRRFDP
  1. . D REQUE^PXRRQUE(DESC,ROUTINE,TASK)
  1. E D ^PXRRFDP
  1. ;
  1. Q