| 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 | 
|---|