| 1 | RORRP041 ;HCIOFO/SG - RPC: REGISTRY-SPECIFIC LAB RESULTS ; 8/25/05 12:24pm
 | 
|---|
| 2 |  ;;1.5;CLINICAL CASE REGISTRIES;;Feb 17, 2006
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  Q
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ;***** LOADS AND PROCESSES CD4 AND VIRAL LOAD RESULTS
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 |  ; .ROR8DST(     Reference to the Lab search descriptor.
 | 
|---|
| 9 |  ;               See the $$LTSEARCH^RORUTL10 for details
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  ;   "RORPTR")   Index of the last node in the destination buffer
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 |  ;   "RORSTATS",
 | 
|---|
| 14 |  ;     Group,
 | 
|---|
| 15 |  ;       "LAST") Latest
 | 
|---|
| 16 |  ;                 ^01: Result Value
 | 
|---|
| 17 |  ;                 ^02: Date
 | 
|---|
| 18 |  ;       "MAX")  Highest
 | 
|---|
| 19 |  ;                 ^01: Result Value
 | 
|---|
| 20 |  ;                 ^02: Date
 | 
|---|
| 21 |  ;       "MIN")  Lowest
 | 
|---|
| 22 |  ;                 ^01: Result Value
 | 
|---|
| 23 |  ;                 ^02: Date
 | 
|---|
| 24 |  ;
 | 
|---|
| 25 |  ; INVDT         IEN of the Lab test (inverted date)
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 |  ; .RESULT       Reference to a local variable, which contains the
 | 
|---|
| 28 |  ;               result in the same format as it is stored into
 | 
|---|
| 29 |  ;               the destination array by default.
 | 
|---|
| 30 |  ;
 | 
|---|
| 31 |  ; Return Values:
 | 
|---|
| 32 |  ;       <0  Error code (the search will be aborted)
 | 
|---|
| 33 |  ;        0  Ok
 | 
|---|
| 34 |  ;        1  Skip this result
 | 
|---|
| 35 |  ;        2  Skip this and all remaining results
 | 
|---|
| 36 |  ;
 | 
|---|
| 37 | LOADLT(ROR8DST,INVDT,RESULT) ;
 | 
|---|
| 38 |  N BUF,GROUP,LTDT,LTVAL,TMP
 | 
|---|
| 39 |  S LTDT=$P($G(RESULT(1)),U,2)    Q:LTDT'>0 1   ; Date of the test
 | 
|---|
| 40 |  S LTVAL=$$TRIM^XLFSTR($P(RESULT(1),U,3))      ; Result value
 | 
|---|
| 41 |  S GROUP=+$P($G(RESULT(2)),U,3)  Q:GROUP'>0 1  ; Code of the group
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 |  ;=== Create and store the segment
 | 
|---|
| 44 |  S BUF="LTR"_U_$P(RESULT(1),U)
 | 
|---|
| 45 |  S $P(BUF,U,3,4)=LTDT_U_LTVAL
 | 
|---|
| 46 |  S $P(BUF,U,5,8)=$P(RESULT(2),U,1,4)
 | 
|---|
| 47 |  S ROR8DST("RORPTR")=$G(ROR8DST("RORPTR"))+1
 | 
|---|
| 48 |  S @ROR8DST@(ROR8DST("RORPTR"))=BUF
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 |  ;=== Most recent result of the group
 | 
|---|
| 51 |  D:LTDT>$P($G(ROR8DST("RORSTATS",GROUP,"LAST")),U,2)
 | 
|---|
| 52 |  . S ROR8DST("RORSTATS",GROUP,"LAST")=LTVAL_U_LTDT
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 |  ;=== Numeric results
 | 
|---|
| 55 |  D:$$NUMERIC^RORUTL05(LTVAL)
 | 
|---|
| 56 |  . ;--- Lowest result value of the group
 | 
|---|
| 57 |  . S TMP=+$G(ROR8DST("RORSTATS",GROUP,"MIN"))
 | 
|---|
| 58 |  . S:'TMP!(LTVAL<TMP) ROR8DST("RORSTATS",GROUP,"MIN")=LTVAL_U_LTDT
 | 
|---|
| 59 |  . ;--- Highest result value of the group
 | 
|---|
| 60 |  . S TMP=+$G(ROR8DST("RORSTATS",GROUP,"MAX"))
 | 
|---|
| 61 |  . S:LTVAL>TMP ROR8DST("RORSTATS",GROUP,"MAX")=LTVAL_U_LTDT
 | 
|---|
| 62 |  ;
 | 
|---|
| 63 |  ;=== Success
 | 
|---|
| 64 |  Q 0
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 |  ;***** LOADS THE PATIENT'S REGISTRY-SPECIFIC LAB RESULTS
 | 
|---|
| 67 |  ; RPC: [ROR PATIENT REGISTRY LABS]
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 |  ; .RESULTS      Reference to a local variable where the results
 | 
|---|
| 70 |  ;               are returned to.
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 |  ; REGIEN        Registry IEN
 | 
|---|
| 73 |  ;
 | 
|---|
| 74 |  ; PATIEN        IEN of the registry patient (DFN)
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 |  ; Return Values:
 | 
|---|
| 77 |  ;
 | 
|---|
| 78 |  ; A negative value of the first "^"-piece of the RESULTS(0)
 | 
|---|
| 79 |  ; indicates an error (see the RPCSTK^RORERR procedure for more
 | 
|---|
| 80 |  ; details).
 | 
|---|
| 81 |  ;
 | 
|---|
| 82 |  ; Otherwise, zero is returned in the @RESULTS@(0) and the
 | 
|---|
| 83 |  ; subsequent nodes of the global array contain the data.
 | 
|---|
| 84 |  ; 
 | 
|---|
| 85 |  ; @RESULTS@(0)          0
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 |  ; @RESULTS@(i)          Registry-specific Lab Result
 | 
|---|
| 88 |  ;                         ^01: "LTR"
 | 
|---|
| 89 |  ;                         ^02: Result IEN (inverted date/time)
 | 
|---|
| 90 |  ;                         ^03: Date/time of the test (FileMan)
 | 
|---|
| 91 |  ;                         ^04: Result
 | 
|---|
| 92 |  ;                         ^05: Test IEN (in file #60)
 | 
|---|
| 93 |  ;                         ^06: Test name
 | 
|---|
| 94 |  ;                         ^07: Code of the group
 | 
|---|
| 95 |  ;                         ^08: Group name
 | 
|---|
| 96 |  ;
 | 
|---|
| 97 |  ; @RESULTS@(i)          Lab Group Statistics
 | 
|---|
| 98 |  ;                         ^01: "LTG"
 | 
|---|
| 99 |  ;                         ^02: Code of the group
 | 
|---|
| 100 |  ;                         ^03: Group name
 | 
|---|
| 101 |  ;                         ^04: Latest result value
 | 
|---|
| 102 |  ;                         ^05: Date of the latest result (FileMan)
 | 
|---|
| 103 |  ;                         ^06: Lowest result value
 | 
|---|
| 104 |  ;                         ^07: Date of the lowest value (FileMan)
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 | LOADPRL(RESULTS,REGIEN,PATIEN) ;
 | 
|---|
| 107 |  N BUF,GRP,NAME,PTR,RC,RORBUF,RORERRDL,TMP
 | 
|---|
| 108 |  D CLEAR^RORERR("LOAD^RORRP041",1)
 | 
|---|
| 109 |  K RESULTS  S RESULTS=$$ALLOC^RORTMP()  S @RESULTS@(0)=0
 | 
|---|
| 110 |  ;
 | 
|---|
| 111 |  ;=== Check the parameters
 | 
|---|
| 112 |  S RC=0  D  I RC<0  D RPCSTK^RORERR(.RESULTS,RC)  Q
 | 
|---|
| 113 |  . ;--- Registry IEN
 | 
|---|
| 114 |  . I $G(REGIEN)'>0  D  Q
 | 
|---|
| 115 |  . . S RC=$$ERROR^RORERR(-88,,,,"REGIEN",$G(REGIEN))
 | 
|---|
| 116 |  . S REGIEN=+REGIEN
 | 
|---|
| 117 |  . ;--- Patient IEN
 | 
|---|
| 118 |  . I $G(PATIEN)'>0  D  Q
 | 
|---|
| 119 |  . . S RC=$$ERROR^RORERR(-88,,,,"PATIEN",$G(PATIEN))
 | 
|---|
| 120 |  . S PATIEN=+PATIEN
 | 
|---|
| 121 |  ;
 | 
|---|
| 122 |  ;=== Search for registry-specific lab results
 | 
|---|
| 123 |  S RORBUF=RESULTS
 | 
|---|
| 124 |  S RORBUF("RORCB")="$$LOADLT^RORRP041"
 | 
|---|
| 125 |  S RC=$$LTSEARCH^RORUTL10(PATIEN,+REGIEN,.RORBUF)
 | 
|---|
| 126 |  I RC<0  D RPCSTK^RORERR(.RESULTS,RC)  Q
 | 
|---|
| 127 |  ;
 | 
|---|
| 128 |  ;=== Store the group statistics
 | 
|---|
| 129 |  S PTR=+$O(@RESULTS@(""),-1)
 | 
|---|
| 130 |  S GRP=0
 | 
|---|
| 131 |  F  S GRP=$O(RORBUF("RORSTATS",GRP))  Q:GRP'>0  D
 | 
|---|
| 132 |  . S TMP=$$ITEMIEN^RORUTL09(3,REGIEN,GRP,.NAME)
 | 
|---|
| 133 |  . S BUF="LTG"_U_GRP_U_NAME
 | 
|---|
| 134 |  . S $P(BUF,U,4,5)=$G(RORBUF("RORSTATS",GRP,"LAST"))
 | 
|---|
| 135 |  . S $P(BUF,U,6,7)=$G(RORBUF("RORSTATS",GRP,"MIN"))
 | 
|---|
| 136 |  . S PTR=PTR+1,@RESULTS@(PTR)=BUF
 | 
|---|
| 137 |  Q
 | 
|---|