Ignore:
Timestamp:
Jan 4, 2012, 9:40:24 PM (13 years ago)
Author:
George Lilly
Message:

certification version without tabs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ccr/branches/ohum/p/C0CQRY2.m

    r1333 r1337  
    1 LA7QRY2 ;DALOI/JMC - Lab HL7 Query Utility ; 04/13/09
    2         ;;5.2;AUTOMATED LAB INSTRUMENTS;**46**;Sep 27, 1994;Build 1
    3         ; JMC - mods to check for IHS V LAB file
    4         ;
    5         Q
    6         ;
    7 PATID   ; Resolve patient id and establish patient environment
    8         ;
    9         N LA7X
    10         ;
    11         S (DFN,LRDFN)="",LA7PTYP=0
    12         ;
    13         ; SSN passed as patient identifier
    14         I LA7PTID?9N.1A D
    15         . S LA7PTYP=1
    16         . S LA7X=$O(^DPT("SSN",LA7PTID,0))
    17         . I LA7X>0 D SETDFN(LA7X)
    18         ;
    19         ; MPI/ICN (integration control number) passed as patient identifier
    20         I LA7PTID?10N1"V"6N D
    21         . S LA7PTYP=2
    22         . S LA7X=$$GETDFN^MPIF001($P(LA7PTID,"V"))
    23         . I LA7X>0 D SETDFN(LA7X)
    24         ;
    25         ; If no patient identified/no laboratory record - return exception message
    26         I 'LA7PTYP S LA7ERR(1)="Invalid patient identifier passed"
    27         I 'DFN S LA7ERR(2)="No patient found with requested identifier"
    28         I DFN,'LRDFN S LA7ERR(3)="No laboratory record for requested patient"
    29         I LRDFN,'$D(^LR(LRDFN)) S LA7ERR(4)="Database error - missing laboratory record for requested patient"
    30         Q
    31         ;
    32         ;
    33 BCD     ; Search by specimen collection date.
    34         ;
    35         N LA763,LA7QUIT
    36         ;
    37         S (LA7SDT(0),LA7EDT(0))=0
    38         I LA7SDT S LA7SDT(0)=9999999-LA7SDT
    39         I LA7EDT S LA7EDT(0)=9999999-LA7EDT
    40         ;
    41         F LRSS="CH","MI","SP" D
    42         . S (LA7QUIT,LRIDT)=0
    43         . I LA7EDT(0) S LRIDT=$O(^LR(LRDFN,LRSS,LA7EDT(0)),-1)
    44         . F  S LRIDT=$O(^LR(LRDFN,LRSS,LRIDT)) Q:LA7QUIT  D
    45         . . ; Quit if reached end of data or outside date criteria
    46         . . I 'LRIDT!(LRIDT>LA7SDT(0)) S LA7QUIT=1 Q
    47         . . D SEARCH
    48         ;
    49         Q
    50         ;
    51         ;
    52 BRAD    ; Search by results available date (completion date).
    53         ; Assumes cross-references still exist for dates in LRO(69) global.
    54         ; Collects specimen date/time values for a given LRDFN and completion date.
    55         ; Cross-reference is by date only, time stripped from start date.
    56         ; Uses cross-reference ^LRO(69,DT,1,"AN",'LOCATION',LRDFN,LRIDT)=""
    57         ;
    58         N LA763,LA7DT,LA7ROOT,LA7SRC,X
    59         ;
    60         ; Check if orders still exist Iin file #69 for search range
    61         S LA7SDT(1)=(LA7SDT\1)-.0000000001,LA7EDT(1)=(LA7EDT\1)+.24,LA7SRC=0
    62         S X=$O(^LRO(69,LA7SDT(1)))
    63         I X,X<LA7EDT(1) S LA7SRC=1
    64         ;
    65         ; Search "AN" cross-reference in file #69.
    66         I LA7SRC D
    67         . S LA7DT=LA7SDT(1)
    68         . F  S LA7DT=$O(^LRO(69,LA7DT)) Q:'LA7DT!(LA7DT>LA7EDT(1))  D
    69         . . S LA7ROOT="^LRO(69,LA7DT,1,""AN"")"
    70         . . F  S LA7ROOT=$Q(@LA7ROOT) Q:LA7ROOT=""!($QS(LA7ROOT,2)'=LA7DT)!($QS(LA7ROOT,4)'="AN")  D
    71         . . . I $QS(LA7ROOT,6)'=LRDFN Q
    72         . . . S LRIDT=$QS(LA7ROOT,7)
    73         . . . F LRSS="CH","MI","SP" D SEARCH
    74         ;
    75         ; If no orders in #69 then do long search through file #63.
    76         I 'LA7SRC D
    77         . F LRSS="CH","MI","SP" D
    78         . . S LRIDT=0
    79         . . F  S LRIDT=$O(^LR(LRDFN,LRSS,LRIDT)) Q:'LRIDT  D
    80         . . . S LA763(0)=$G(^LR(LRDFN,LRSS,LRIDT,0))
    81         . . . I $P(LA763(0),"^",3)>LA7SDT(1),$P(LA763(0),"^",3)<LA7EDT(1) D SEARCH
    82         ;
    83         Q
    84         ;
    85         ;
    86 SEARCH  ; Search subscript for a specific collection date/time
    87         ;
    88         K LA763
    89         S LA763(0)=$G(^LR(LRDFN,LRSS,LRIDT,0))
    90         ;
    91         ; Only CH, MI, and BB subscripts store pointer to file #61 in 5th piece of zeroth node.
    92         ; Quit if specific specimen codes and they do not match
    93         I "CHMIBB"[LRSS S LA761=+$P(LA763(0),"^",5)
    94         E  S LA761=0
    95         I LA761,$D(^TMP("LA7-61",$J)),'$D(^TMP("LA7-61",$J,LA761)) Q
    96         ;
    97         ; --- Chemistry
    98         I LRSS="CH" D CHSS Q
    99         ; --- Microbiology
    100         I LRSS="MI" D MISS Q
    101         ; --- Surgical pathology
    102         I LRSS="SP" D APSS Q
    103         ; --- Cytology
    104         I LRSS="CY" D APSS Q
    105         ; --- Electron Micrscopsy
    106         I LRSS="EM" D APSS Q
    107         ; --- Autopsy
    108         I LRSS="AU" D APSS Q
    109         ; --- Blood Bank
    110         I LRSS="BB" D BBSS Q
    111         Q
    112         ;
    113         ;
    114 CHSS    ; Search "CH" datanames for matching codes
    115         ;
    116         N LA7X,LRSB
    117         ;
    118         S LRSB=1
    119         F  S LRSB=$O(^LR(LRDFN,LRSS,LRIDT,LRSB)) Q:'LRSB  D
    120         . S LA7X=$G(^LR(LRDFN,LRSS,LRIDT,LRSB))
    121         . I $D(^AUPNVLAB) D LNCHK^C0CLA7Q ; WV check for IHS.
    122         . S LA7CODE=$$DEFCODE^LA7VHLU5(LRSS,LRSB,$P(LA7X,"^",3),LA761)
    123         . D CHECK
    124         ;
    125         Q
    126         ;
    127         ;
    128 MISS    ; Search "MI" subscripts for matching codes
    129         ;
    130         N LA7ND,LRSB
    131         ;
    132         S LA7ND=0
    133         F LA7ND=1,5,8,11,16 I $D(^LR(LRDFN,LRSS,LRIDT,LA7ND)) D
    134         . S LRSB=$S(LA7ND=1:11,LA7ND=5:14,LA7ND=8:18,LA7ND=11:22,LA7ND=16:33,1:11)
    135         . S LA7CODE=$$DEFCODE^LA7VHLU5(LRSS,LRSB,"",LA761)
    136         . D CHECK
    137         Q
    138         ;
    139         ;
    140 APSS    ; Search AP subscripts for matching codes
    141         ; AP results are currently not coded - use defaults
    142         ;
    143         N LA7CODE,LRSB
    144         ;
    145         S LRSB=.012
    146         S LA7CODE=$$DEFCODE^LA7VHLU5(LRSS,LRSB,"","")
    147         D CHECK
    148         ;
    149         Q
    150         ;
    151         ;
    152 BBSS    ; Search BB subscript for matching codes
    153         ; *** This subscript currently not supported ***
    154         Q
    155         ;
    156         ;
    157 CHECK   ; Check NLT order/result and LOINC codes.
    158         ;
    159         N LA7QUIT
    160         ;
    161         ; If wildcard then store
    162         ; Otherwise check for specific NLT order/result and LOINC codes
    163         I LA7SC="*" D STORE Q
    164         S LA7QUIT=0
    165         F I=1:1:3 D  Q:LA7QUIT
    166         . ; If no test code then skip
    167         . I '$L($P(LA7CODE,"!",I)) Q
    168         . ; If test code does not match a search code then quit
    169         . I '$D(^TMP($S(I=3:"LA7-LN",1:"LA7-NLT"),$J,$P(LA7CODE,"!",I))) Q
    170         . D STORE S LA7QUIT=1
    171         ;
    172         Q
    173         ;
    174         ;
    175 STORE   ; Store entry for building in HL7 message
    176         ;
    177         S ^TMP("LA7-QRY",$J,LRDFN,LRIDT,LRSS,LA7CODE,LRSB)=""
    178         Q
    179         ;
    180         ;
    181 SETDFN(LA7X)    ; Setup DFN and other lab variables.
    182         ;
    183         S DFN=LA7X,LRDFN=$P($G(^DPT(DFN,"LR")),"^")
    184         Q
     1LA7QRY2 ;DALOI/JMC - Lab HL7 Query Utility ; 04/13/09
     2 ;;5.2;AUTOMATED LAB INSTRUMENTS;**46**;Sep 27, 1994
     3 ; JMC - mods to check for IHS V LAB file
     4 ;
     5 Q
     6 ;
     7PATID ; Resolve patient id and establish patient environment
     8 ;
     9 N LA7X
     10 ;
     11 S (DFN,LRDFN)="",LA7PTYP=0
     12 ;
     13 ; SSN passed as patient identifier
     14 I LA7PTID?9N.1A D
     15 . S LA7PTYP=1
     16 . S LA7X=$O(^DPT("SSN",LA7PTID,0))
     17 . I LA7X>0 D SETDFN(LA7X)
     18 ;
     19 ; MPI/ICN (integration control number) passed as patient identifier
     20 I LA7PTID?10N1"V"6N D
     21 . S LA7PTYP=2
     22 . S LA7X=$$GETDFN^MPIF001($P(LA7PTID,"V"))
     23 . I LA7X>0 D SETDFN(LA7X)
     24 ;
     25 ; If no patient identified/no laboratory record - return exception message
     26 I 'LA7PTYP S LA7ERR(1)="Invalid patient identifier passed"
     27 I 'DFN S LA7ERR(2)="No patient found with requested identifier"
     28 I DFN,'LRDFN S LA7ERR(3)="No laboratory record for requested patient"
     29 I LRDFN,'$D(^LR(LRDFN)) S LA7ERR(4)="Database error - missing laboratory record for requested patient"
     30 Q
     31 ;
     32 ;
     33BCD ; Search by specimen collection date.
     34 ;
     35 N LA763,LA7QUIT
     36 ;
     37 S (LA7SDT(0),LA7EDT(0))=0
     38 I LA7SDT S LA7SDT(0)=9999999-LA7SDT
     39 I LA7EDT S LA7EDT(0)=9999999-LA7EDT
     40 ;
     41 F LRSS="CH","MI","SP" D
     42 . S (LA7QUIT,LRIDT)=0
     43 . I LA7EDT(0) S LRIDT=$O(^LR(LRDFN,LRSS,LA7EDT(0)),-1)
     44 . F  S LRIDT=$O(^LR(LRDFN,LRSS,LRIDT)) Q:LA7QUIT  D
     45 . . ; Quit if reached end of data or outside date criteria
     46 . . I 'LRIDT!(LRIDT>LA7SDT(0)) S LA7QUIT=1 Q
     47 . . D SEARCH
     48 ;
     49 Q
     50 ;
     51 ;
     52BRAD ; Search by results available date (completion date).
     53 ; Assumes cross-references still exist for dates in LRO(69) global.
     54 ; Collects specimen date/time values for a given LRDFN and completion date.
     55 ; Cross-reference is by date only, time stripped from start date.
     56 ; Uses cross-reference ^LRO(69,DT,1,"AN",'LOCATION',LRDFN,LRIDT)=""
     57 ;
     58 N LA763,LA7DT,LA7ROOT,LA7SRC,X
     59 ;
     60 ; Check if orders still exist Iin file #69 for search range
     61 S LA7SDT(1)=(LA7SDT\1)-.0000000001,LA7EDT(1)=(LA7EDT\1)+.24,LA7SRC=0
     62 S X=$O(^LRO(69,LA7SDT(1)))
     63 I X,X<LA7EDT(1) S LA7SRC=1
     64 ;
     65 ; Search "AN" cross-reference in file #69.
     66 I LA7SRC D
     67 . S LA7DT=LA7SDT(1)
     68 . F  S LA7DT=$O(^LRO(69,LA7DT)) Q:'LA7DT!(LA7DT>LA7EDT(1))  D
     69 . . S LA7ROOT="^LRO(69,LA7DT,1,""AN"")"
     70 . . F  S LA7ROOT=$Q(@LA7ROOT) Q:LA7ROOT=""!($QS(LA7ROOT,2)'=LA7DT)!($QS(LA7ROOT,4)'="AN")  D
     71 . . . I $QS(LA7ROOT,6)'=LRDFN Q
     72 . . . S LRIDT=$QS(LA7ROOT,7)
     73 . . . F LRSS="CH","MI","SP" D SEARCH
     74 ;
     75 ; If no orders in #69 then do long search through file #63.
     76 I 'LA7SRC D
     77 . F LRSS="CH","MI","SP" D
     78 . . S LRIDT=0
     79 . . F  S LRIDT=$O(^LR(LRDFN,LRSS,LRIDT)) Q:'LRIDT  D
     80 . . . S LA763(0)=$G(^LR(LRDFN,LRSS,LRIDT,0))
     81 . . . I $P(LA763(0),"^",3)>LA7SDT(1),$P(LA763(0),"^",3)<LA7EDT(1) D SEARCH
     82 ;
     83 Q
     84 ;
     85 ;
     86SEARCH ; Search subscript for a specific collection date/time
     87 ;
     88 K LA763
     89 S LA763(0)=$G(^LR(LRDFN,LRSS,LRIDT,0))
     90 ;
     91 ; Only CH, MI, and BB subscripts store pointer to file #61 in 5th piece of zeroth node.
     92 ; Quit if specific specimen codes and they do not match
     93 I "CHMIBB"[LRSS S LA761=+$P(LA763(0),"^",5)
     94 E  S LA761=0
     95 I LA761,$D(^TMP("LA7-61",$J)),'$D(^TMP("LA7-61",$J,LA761)) Q
     96 ;
     97 ; --- Chemistry
     98 I LRSS="CH" D CHSS Q
     99 ; --- Microbiology
     100 I LRSS="MI" D MISS Q
     101 ; --- Surgical pathology
     102 I LRSS="SP" D APSS Q
     103 ; --- Cytology
     104 I LRSS="CY" D APSS Q
     105 ; --- Electron Micrscopsy
     106 I LRSS="EM" D APSS Q
     107 ; --- Autopsy
     108 I LRSS="AU" D APSS Q
     109 ; --- Blood Bank
     110 I LRSS="BB" D BBSS Q
     111 Q
     112 ;
     113 ;
     114CHSS ; Search "CH" datanames for matching codes
     115 ;
     116 N LA7X,LRSB
     117 ;
     118 S LRSB=1
     119 F  S LRSB=$O(^LR(LRDFN,LRSS,LRIDT,LRSB)) Q:'LRSB  D
     120 . S LA7X=$G(^LR(LRDFN,LRSS,LRIDT,LRSB))
     121 . I $D(^AUPNVLAB) D LNCHK^C0CLA7Q ; WV check for IHS.
     122 . S LA7CODE=$$DEFCODE^LA7VHLU5(LRSS,LRSB,$P(LA7X,"^",3),LA761)
     123 . D CHECK
     124 ;
     125 Q
     126 ;
     127 ;
     128MISS ; Search "MI" subscripts for matching codes
     129 ;
     130 N LA7ND,LRSB
     131 ;
     132 S LA7ND=0
     133 F LA7ND=1,5,8,11,16 I $D(^LR(LRDFN,LRSS,LRIDT,LA7ND)) D
     134 . S LRSB=$S(LA7ND=1:11,LA7ND=5:14,LA7ND=8:18,LA7ND=11:22,LA7ND=16:33,1:11)
     135 . S LA7CODE=$$DEFCODE^LA7VHLU5(LRSS,LRSB,"",LA761)
     136 . D CHECK
     137 Q
     138 ;
     139 ;
     140APSS ; Search AP subscripts for matching codes
     141 ; AP results are currently not coded - use defaults
     142 ;
     143 N LA7CODE,LRSB
     144 ;
     145 S LRSB=.012
     146 S LA7CODE=$$DEFCODE^LA7VHLU5(LRSS,LRSB,"","")
     147 D CHECK
     148 ;
     149 Q
     150 ;
     151 ;
     152BBSS ; Search BB subscript for matching codes
     153 ; *** This subscript currently not supported ***
     154 Q
     155 ;
     156 ;
     157CHECK ; Check NLT order/result and LOINC codes.
     158 ;
     159 N LA7QUIT
     160 ;
     161 ; If wildcard then store
     162 ; Otherwise check for specific NLT order/result and LOINC codes
     163 I LA7SC="*" D STORE Q
     164 S LA7QUIT=0
     165 F I=1:1:3 D  Q:LA7QUIT
     166 . ; If no test code then skip
     167 . I '$L($P(LA7CODE,"!",I)) Q
     168 . ; If test code does not match a search code then quit
     169 . I '$D(^TMP($S(I=3:"LA7-LN",1:"LA7-NLT"),$J,$P(LA7CODE,"!",I))) Q
     170 . D STORE S LA7QUIT=1
     171 ;
     172 Q
     173 ;
     174 ;
     175STORE ; Store entry for building in HL7 message
     176 ;
     177 S ^TMP("LA7-QRY",$J,LRDFN,LRIDT,LRSS,LA7CODE,LRSB)=""
     178 Q
     179 ;
     180 ;
     181SETDFN(LA7X) ; Setup DFN and other lab variables.
     182 ;
     183 S DFN=LA7X,LRDFN=$P($G(^DPT(DFN,"LR")),"^")
     184 Q
Note: See TracChangeset for help on using the changeset viewer.