[613] | 1 | PXRRFDSD ;ISL/PKR - Go through the encounters attaching a diagnosis and then sort based on the diagnosis. ;06/08/98
|
---|
| 2 | ;;1.0;PCE PATIENT CARE ENCOUNTER;**3,10,12,31,54,121**;Aug 12, 1996
|
---|
| 3 | SORT ;
|
---|
| 4 | N BUSY,COUNT,DIAGTOT,DCIEN,ENCTOT,ICD9IEN,INFOTYPE,FACILITY,HLOC
|
---|
| 5 | N POV,POVIEN,PNAME,PRIMARY,STOIND,VACODE,VIEN
|
---|
| 6 | ;
|
---|
| 7 | ;The ^XTMP array created in PXRRFDSE can have four possible structures.
|
---|
| 8 | ;If the encounters were sorted by location then the structure will be:
|
---|
| 9 | ; ^XTMP(PXRRXTMP,FACILITY,1,1,HLOC,VIEN).
|
---|
| 10 | ;If the encounters were sorted by person class then the structure will be:
|
---|
| 11 | ; ^XTMP(PXRRXTMP,FACILITY,1,VACODE,1,VIEN).
|
---|
| 12 | ;If the encounters were sorted by provider then the structure will be:
|
---|
| 13 | ; ^XTMP(PXRRXTMP,FACILITY,PNAME,1,1,VIEN).
|
---|
| 14 | ;If none of the above screens were used then the structure will be:
|
---|
| 15 | ; ^XTMP(PXRRXTMP,FACILITY,1,1,1,VIEN).
|
---|
| 16 | ;
|
---|
| 17 | I '(PXRRQUE!$D(IO("S"))) D INIT^PXRRBUSY(.BUSY)
|
---|
| 18 | ;
|
---|
| 19 | ;Allow the task to be cleaned up on successful completion.
|
---|
| 20 | S ZTREQ="@"
|
---|
| 21 | ;
|
---|
| 22 | I $P(PXRRFDDC,U,1)="P" S PRIMARY=1
|
---|
| 23 | E S PRIMARY=0
|
---|
| 24 | ;
|
---|
| 25 | S DIAGTOT=0
|
---|
| 26 | ;Initialize the storage index.
|
---|
| 27 | S STOIND=0
|
---|
| 28 | ;
|
---|
| 29 | S FACILITY=""
|
---|
| 30 | FAC S FACILITY=$O(^XTMP(PXRRXTMP,"ENCTR",FACILITY))
|
---|
| 31 | I FACILITY="" G SETPR
|
---|
| 32 | S STOIND=STOIND+1
|
---|
| 33 | S ^XTMP(PXRRXTMP,"INFO","FACILITY",FACILITY,FACILITY)=STOIND
|
---|
| 34 | ;
|
---|
| 35 | S PNAME=""
|
---|
| 36 | PRV S PNAME=$O(^XTMP(PXRRXTMP,"ENCTR",FACILITY,PNAME))
|
---|
| 37 | I PNAME="" G FAC
|
---|
| 38 | ;Start INFOTYPE with "G" so it always comes after FACILITY.
|
---|
| 39 | S INFOTYPE="G"
|
---|
| 40 | I ($L(PNAME)>1)&(+PNAME=0)&(INFOTYPE'["PRV") D
|
---|
| 41 | . S INFOTYPE=INFOTYPE_"PRV"
|
---|
| 42 | ;
|
---|
| 43 | ;Check for a user request to stop the task.
|
---|
| 44 | I $$S^%ZTLOAD S ZTSTOP=1 D EXIT^PXRRFDD
|
---|
| 45 | ;
|
---|
| 46 | S VACODE=""
|
---|
| 47 | PCLASS S VACODE=$O(^XTMP(PXRRXTMP,"ENCTR",FACILITY,PNAME,VACODE))
|
---|
| 48 | I VACODE="" G PRV
|
---|
| 49 | I ($L(VACODE)>1)&(+VACODE=0)&(INFOTYPE'["PC") D
|
---|
| 50 | . S INFOTYPE=INFOTYPE_"PC"
|
---|
| 51 | ;
|
---|
| 52 | S HLOC=""
|
---|
| 53 | LOC S HLOC=$O(^XTMP(PXRRXTMP,"ENCTR",FACILITY,PNAME,VACODE,HLOC))
|
---|
| 54 | I HLOC="" G PCLASS
|
---|
| 55 | ;The location is stored in the form NAME_U_STOP CODE
|
---|
| 56 | I ($L(HLOC)>1)&(+$P(HLOC,U,2)>0)&(INFOTYPE'["LOC") D
|
---|
| 57 | . S INFOTYPE=INFOTYPE_"LOC"
|
---|
| 58 | ;
|
---|
| 59 | S STOIND=STOIND+1
|
---|
| 60 | S ^XTMP(PXRRXTMP,"INFO",INFOTYPE,FACILITY,PNAME,VACODE,HLOC)=STOIND
|
---|
| 61 | ;
|
---|
| 62 | S VIEN=""
|
---|
| 63 | ENC S VIEN=$O(^XTMP(PXRRXTMP,"ENCTR",FACILITY,PNAME,VACODE,HLOC,VIEN))
|
---|
| 64 | I (VIEN="")!(VIEN=0) G LOC
|
---|
| 65 | ;Count the encounters
|
---|
| 66 | I '$D(ENCTOT(STOIND)) S ENCTOT(STOIND)=1
|
---|
| 67 | E S ENCTOT(STOIND)=ENCTOT(STOIND)+1
|
---|
| 68 | ;
|
---|
| 69 | ;If this is an interactive session let the user know that something
|
---|
| 70 | ;is happening.
|
---|
| 71 | I '(PXRRQUE!$D(IO("S"))) D SPIN^PXRRBUSY("Sorting diagnoses",.BUSY)
|
---|
| 72 | ;
|
---|
| 73 | ;Initialzide the diagnosis counter.
|
---|
| 74 | I '$D(DIAGTOT(STOIND)) S DIAGTOT(STOIND)=0
|
---|
| 75 | ;
|
---|
| 76 | ;Get the diagnoses associated with this VIEN.
|
---|
| 77 | S POVIEN=""
|
---|
| 78 | DIAG S POVIEN=$O(^AUPNVPOV("AD",VIEN,POVIEN))
|
---|
| 79 | I POVIEN="" G ENC
|
---|
| 80 | S POV=^AUPNVPOV(POVIEN,0)
|
---|
| 81 | ;
|
---|
| 82 | ;Apply the primary/secondary screen. If this field does not contain P
|
---|
| 83 | ;then we take it to be secondary.
|
---|
| 84 | I PRIMARY I $P(POV,U,12)'="P" G DIAG
|
---|
| 85 | ;
|
---|
| 86 | ;Count the ICD9 entries.
|
---|
| 87 | S ICD9IEN=$P(POV,U,1)
|
---|
| 88 | I '$D(^TMP(PXRRXTMP,$J,"DIAG",STOIND,"ICD9",ICD9IEN)) S ^TMP(PXRRXTMP,$J,"DIAG",STOIND,"ICD9",ICD9IEN)=1
|
---|
| 89 | E S ^TMP(PXRRXTMP,$J,"DIAG",STOIND,"ICD9",ICD9IEN)=^TMP(PXRRXTMP,$J,"DIAG",STOIND,"ICD9",ICD9IEN)+1
|
---|
| 90 | S DIAGTOT(STOIND)=DIAGTOT(STOIND)+1
|
---|
| 91 | ;
|
---|
| 92 | ;Count the diagnostic categories.
|
---|
| 93 | ;This will probably require a DBIA.
|
---|
| 94 | ;S DCIEN=$P(^ICD9(ICD9IEN,0),U,5)
|
---|
| 95 | S DCIEN=$P($$ICDDX^ICDCODE(ICD9IEN),U,6)
|
---|
| 96 | I DCIEN'>0 S DCIEN=0
|
---|
| 97 | I '$D(^TMP(PXRRXTMP,$J,"DIAG",STOIND,"DC",DCIEN)) S ^TMP(PXRRXTMP,$J,"DIAG",STOIND,"DC",DCIEN)=1
|
---|
| 98 | E S ^TMP(PXRRXTMP,$J,"DIAG",STOIND,"DC",DCIEN)=^TMP(PXRRXTMP,$J,"DIAG",STOIND,"DC",DCIEN)+1
|
---|
| 99 | ;
|
---|
| 100 | G DIAG
|
---|
| 101 | ;
|
---|
| 102 | SETPR ;Rearrange the information for printing.
|
---|
| 103 | S STOIND=""
|
---|
| 104 | NEXTSTO S STOIND=$O(^TMP(PXRRXTMP,$J,"DIAG",STOIND))
|
---|
| 105 | I STOIND="" G EXIT
|
---|
| 106 | I '(PXRRQUE!$D(IO("S"))) D SPIN^PXRRBUSY("Sorting diagnoses",.BUSY)
|
---|
| 107 | ;
|
---|
| 108 | S ICD9IEN=""
|
---|
| 109 | NEXTIC S ICD9IEN=$O(^TMP(PXRRXTMP,$J,"DIAG",STOIND,"ICD9",ICD9IEN))
|
---|
| 110 | I ICD9IEN="" G STDC
|
---|
| 111 | S COUNT=^TMP(PXRRXTMP,$J,"DIAG",STOIND,"ICD9",ICD9IEN)
|
---|
| 112 | S DIAGTOT=DIAGTOT+COUNT
|
---|
| 113 | S ^XTMP(PXRRXTMP,"PRINT",STOIND,"ICD9",COUNT,ICD9IEN)="DIAG"_ICD9IEN
|
---|
| 114 | G NEXTIC
|
---|
| 115 | ;
|
---|
| 116 | ;
|
---|
| 117 | STDC S DCIEN=""
|
---|
| 118 | NEXTDC S DCIEN=$O(^TMP(PXRRXTMP,$J,"DIAG",STOIND,"DC",DCIEN))
|
---|
| 119 | I DCIEN="" G NEXTSTO
|
---|
| 120 | S COUNT=^TMP(PXRRXTMP,$J,"DIAG",STOIND,"DC",DCIEN)
|
---|
| 121 | S ^XTMP(PXRRXTMP,"PRINT",STOIND,"DC",COUNT,DCIEN)=""
|
---|
| 122 | G NEXTDC
|
---|
| 123 | ;
|
---|
| 124 | EXIT ;
|
---|
| 125 | ;Kill the arrays we are done with.
|
---|
| 126 | K ^TMP(PXRRXTMP,$J,"DIAG")
|
---|
| 127 | K ^XTMP(PXRRXTMP,"ENCTR")
|
---|
| 128 | ;
|
---|
| 129 | S STOIND=""
|
---|
| 130 | F S STOIND=$O(ENCTOT(STOIND)) Q:STOIND="" D
|
---|
| 131 | . S ^XTMP(PXRRXTMP,"TOTALS","DIAGTOT",STOIND)=DIAGTOT(STOIND)
|
---|
| 132 | . S ^XTMP(PXRRXTMP,"TOTALS","ENCTOT",STOIND)=ENCTOT(STOIND)
|
---|
| 133 | ;
|
---|
| 134 | I '(PXRRQUE!$D(IO("S"))) D DONE^PXRRBUSY("done")
|
---|
| 135 | ;
|
---|
| 136 | ;Print the report.
|
---|
| 137 | I PXRRQUE D
|
---|
| 138 | . N DESC,ROUTINE,TASK
|
---|
| 139 | . S DESC="Frequency of diagnosis report - print"
|
---|
| 140 | . S ROUTINE="PXRRFDP"
|
---|
| 141 | . S TASK=^XTMP(PXRRXTMP,"PRZTSK")
|
---|
| 142 | . S ZTDTH=$$NOW^XLFDT
|
---|
| 143 | . D REQUE^PXRRQUE(DESC,ROUTINE,TASK)
|
---|
| 144 | E D ^PXRRFDP
|
---|
| 145 | ;
|
---|
| 146 | Q
|
---|