| 1 | SPNLGRCH ; ISC-SF/GMB - SCD GATHER LAB TEST (GENERAL) DATA;19 MAY 94 [ 08/23/94  10:03 AM ] ;6/23/95  11:33 | 
|---|
| 2 | ;;2.0;Spinal Cord Dysfunction;;01/02/1997 | 
|---|
| 3 | ROLLUP(DFN,FDATE,TDATE,HI) ; | 
|---|
| 4 | ; DFN       Patient's internal entry number in the Patient file | 
|---|
| 5 | ; FDATE     "From" date | 
|---|
| 6 | ; TDATE     "Thru" date, default=today | 
|---|
| 7 | ; HI        1=keep track of individual patient usage | 
|---|
| 8 | ;           0=don't keep track | 
|---|
| 9 | ; Data will be rolled up into the following global: | 
|---|
| 10 | ; ^TMP("SPN",$J,"CH", | 
|---|
| 11 | ; with the following nodes: | 
|---|
| 12 | ; "PAT")                  # patients with at least 1 order | 
|---|
| 13 | ; "ORDERS")               # orders | 
|---|
| 14 | ; "ORDERS",-orders)       # patients who had this many orders | 
|---|
| 15 | ; "RESULTS")              # test results | 
|---|
| 16 | ; "RESULTS",-results)     # patients who had this many test results | 
|---|
| 17 | ; "TEST",testnr)          # results for this test | 
|---|
| 18 | ; "TEST",testnr,"NAME")   the name of the test | 
|---|
| 19 | ; "TEST",testnr,"PAT")    # patients who had this test | 
|---|
| 20 | ; "TEST",testnr,"RESULTS",-results) # patients who had this many results for this test | 
|---|
| 21 | ; ... and usage by individual patient | 
|---|
| 22 | ; "HI","H1",-orders,-results,-diff tests,DFN) | 
|---|
| 23 | N LFN,LASTDATE,TESTDATE,TESTNR,VALUE,ORDERS | 
|---|
| 24 | N TRESULTS,RESULTS,TEST,NDTESTS | 
|---|
| 25 | S LFN=+$P($G(^DPT(DFN,"LR")),U,1) ; Internal entry number in LAB DATA file | 
|---|
| 26 | Q:'LFN | 
|---|
| 27 | I '$D(TDATE) S TDATE=DT | 
|---|
| 28 | ; We are interested in any lab test administered within the 'from' and | 
|---|
| 29 | ; 'thru' date range.  The record numbers are date/time (of test), | 
|---|
| 30 | ; subtracted from 9999999.  This causes the tests to be listed in order | 
|---|
| 31 | ; from most recent to oldest.  So we must modify our from & to dates. | 
|---|
| 32 | S (ORDERS,TRESULTS)=0 | 
|---|
| 33 | S LASTDATE=9999999-FDATE | 
|---|
| 34 | S TESTDATE=9999999-(TDATE+1) ; for each test date in the range | 
|---|
| 35 | F  S TESTDATE=$O(^LR(LFN,"CH",TESTDATE)) Q:TESTDATE'>0!(TESTDATE>LASTDATE)  D | 
|---|
| 36 | . S RESULTS=0 | 
|---|
| 37 | . S TESTNR=1 ; for each test on that date | 
|---|
| 38 | . ; we start after 1 because the first two (0,1) nodes we ignore. | 
|---|
| 39 | . ; Each node thereafter is for a specific test. | 
|---|
| 40 | . F  S TESTNR=$O(^LR(LFN,"CH",TESTDATE,TESTNR)) Q:TESTNR'>0  D | 
|---|
| 41 | . . S VALUE=$G(^LR(LFN,"CH",TESTDATE,TESTNR)) | 
|---|
| 42 | . . ; make sure the test wasn't cancelled | 
|---|
| 43 | . . I VALUE=""!(VALUE["canc")!(VALUE["CANC") Q | 
|---|
| 44 | . . S TEST(TESTNR)=$G(TEST(TESTNR))+1 ; number results for this test | 
|---|
| 45 | . . S RESULTS=RESULTS+1 | 
|---|
| 46 | . Q:RESULTS=0 | 
|---|
| 47 | . S TRESULTS=TRESULTS+RESULTS | 
|---|
| 48 | . S ORDERS=ORDERS+1 | 
|---|
| 49 | Q:ORDERS=0 | 
|---|
| 50 | S ^(-ORDERS)=$G(^TMP("SPN",$J,"CH","ORDERS",-ORDERS))+1 | 
|---|
| 51 | S ^("PAT")=$G(^TMP("SPN",$J,"CH","PAT"))+1 | 
|---|
| 52 | S ^("RESULTS")=$G(^TMP("SPN",$J,"CH","RESULTS"))+TRESULTS | 
|---|
| 53 | S ^(-TRESULTS)=$G(^TMP("SPN",$J,"CH","RESULTS",-TRESULTS))+1 | 
|---|
| 54 | S ^("ORDERS")=$G(^TMP("SPN",$J,"CH","ORDERS"))+ORDERS | 
|---|
| 55 | S TESTNR="",NDTESTS=0 | 
|---|
| 56 | F  S TESTNR=$O(TEST(TESTNR)) Q:TESTNR=""  D | 
|---|
| 57 | . S NDTESTS=NDTESTS+1 ; number of different tests | 
|---|
| 58 | . S RESULTS=TEST(TESTNR) | 
|---|
| 59 | . S ^(TESTNR)=$G(^TMP("SPN",$J,"CH","TEST",TESTNR))+RESULTS | 
|---|
| 60 | . S ^("PAT")=$G(^TMP("SPN",$J,"CH","TEST",TESTNR,"PAT"))+1 | 
|---|
| 61 | . S ^(-RESULTS)=$G(^TMP("SPN",$J,"CH","TEST",TESTNR,"RESULTS",-RESULTS))+1 | 
|---|
| 62 | Q:'HI | 
|---|
| 63 | S ^TMP("SPN",$J,"CH","HI","H1",-ORDERS,-TRESULTS,-NDTESTS,DFN)="" | 
|---|
| 64 | Q | 
|---|
| 65 | NAMEIT ; | 
|---|
| 66 | N TESTNR,TESTNAME | 
|---|
| 67 | S TESTNR="" | 
|---|
| 68 | F  S TESTNR=$O(^TMP("SPN",$J,"CH","TEST",TESTNR)) Q:TESTNR=""  D | 
|---|
| 69 | . ; Get the name from the DD.  Is there a better way? | 
|---|
| 70 | . S TESTNAME=$P($G(^DD(63.04,TESTNR,0)),U,1) | 
|---|
| 71 | . I TESTNAME="" S TESTNAME="Not Identified" | 
|---|
| 72 | . S ^TMP("SPN",$J,"CH","TEST",TESTNR,"NAME")=TESTNAME | 
|---|
| 73 | Q | 
|---|