Ignore:
Timestamp:
Dec 4, 2009, 12:11:15 AM (14 years ago)
Author:
George Lilly
Message:

revised back to 6/30/08 version

File:
1 edited

Legend:

Unmodified
Added
Removed
  • WorldVistAEHR/trunk/r/DSS_EXTRACTS-ECX/ECXLBB.m

    r613 r623  
    1 ECXLBB  ;DALOI/KML - DSS BLOOD BANK EXTRACT ; 8/12/08 1:00pm
    2         ;;3.0;DSS EXTRACTS;**78,84,90,92,104,105,102**;Dec 22, 1997;Build 17
    3         ;Per VHA Directive 97-033 this routine should not be modified.  Medical Device # BK970021
    4         ; access to the LAB DATA file (#63) is supported by
    5         ; controlled subscription to IA 525  (global root ^LR) 
    6         ; access to the BLOOD PRODUCT (#66) is supported by IA 4510
    7 BEG     ;entry point from option
    8         D SETUP I ECFILE="" Q
    9         D ^ECXTRAC,^ECXKILL
    10         Q
    11 START   ; Entry point from tasked job
    12         ; begin package specific extract
    13         N ECTRSP,ECADMT,ECTODT,ECENCTR,ECPAT,ECLRDFN,ECXPHY,ECXPHYPC,ECPHYNPI
    14         N ECD,ECXDFN,ECARRY,EC66,ECERR,ECTRFDT,ECTRFTM,ECX,ECINOUT,ECXINST
    15         ;variables ECFILE,EC23,ECXYM,ECINST,ECSD,ECSD1,ECED passed in
    16         ; by taskmanager
    17         ; ECED defined in ^ECXTRAC - it represents the end date of the extract
    18         ; sort process.  TRANSFUSION DATE should be within start and end dates
    19         ; ECED and ECSD were assigned with input provided by the user interface
    20         ; and ECSD1 = ECSD-.1
    21         ; Read through the TRANSFUSION RECORD sub-file (63.017) of
    22         ; the LAB DATA file (#63)
    23         ;the global nodes containing transfusion record entries are constructed
    24         ; by calculating the TRANSFUSION DATE/TIME (.01)
    25         ; into its reverse date/time representation and then DINUM'd when
    26         ;filing the record entry
    27         ; ECD equals the reverse date/time of ECED+.3 and will need to be
    28         ; reset for each DFN.
    29         I $D(ZTQUEUED),$$S^%ZTLOAD S QFLG=1 Q  ;quit if tasked and user sends stop request  (QFLG assigned in ECXTRAC)
    30 AUDRPT  ; entry point for pre-extract audit report
    31         S ECTODT=9999999-ECSD1,ECLRDFN=0
    32         F  S ECLRDFN=$O(^LR(ECLRDFN)) Q:'ECLRDFN  S ECXDFN=$$GETDFN(ECLRDFN),ECERR=$$PAT(ECXDFN) S ECD=9999999-(ECED+.3) F  S ECD=$O(^LR(ECLRDFN,1.6,ECD)) Q:ECERR  Q:'ECD!(ECD>ECTODT)  S EC0=^LR(ECLRDFN,1.6,ECD,0) D
    33         .; ECARRY(1)=TRANSFUSION DATE AND TIME,
    34         .; ECARRY(3)=COMPONENT, ECARRY(4)=COMPONENT ABBREVIATION
    35         .; ECARRY(5)=UNITS POOLED, ECARRY(6)=TRANSFUSION REACTION,
    36         .; ECARRY(7)=VOLUME TRANSFUSED, ECARRY(8)=TRANSFUSION REACTION TYPE
    37         .; ECARRY(9)=REQUESTING PROVIDER, ECARRY(10)=REQUEST. PROV. PERSON CLASS
    38         .; ECARRY(11)=UNIT MODIFIED,ECARRY(12)=UNIT MODIFICATION
    39         .; ECARRY(13)=PRODUCTION DIVISION CODE
    40         . S ECARRY(1)=$P(EC0,"^"),EC66=$G(^LAB(66,$P(EC0,"^",2),0))
    41         . S ECARRY(3)=$E($P(EC66,"^"),1,15),ECARRY(4)=$P(EC66,"^",2)
    42         . S ECARRY(5)=$S(+$P(EC0,"^",7)=0:1,1:+$P(EC0,"^",7))
    43         . S ECARRY(6)=$S($P(EC0,"^",8)=1:"Y",1:"N"),ECARRY(7)=$P(EC0,"^",10)
    44         . S ECARRY(8)=$E($P($G(^LAB(65.4,+$P(EC0,"^",11),0)),"^"),1,10)
    45         . S (ECARRY(9),ECARRY(10),ECARRY(13))="" D GETRPRV
    46         . S ECARRY(11)=$$MODIFIED(),(ECXPHY,ECXPHYPC,ECPHYNPI)=""
    47         . S ECARRY(12)=$S(ECARRY(11)="Y":$$UNITMODS(),1:"")
    48         . D GETDATA
    49         . K ECARRY
    50         D AUDRPT^ECXLBB1
    51         Q
    52 UNITMODS()      ; Get modification criteria from fields #.06 and #3 from file #66
    53         N MODARY,MO,EC66A,MODSTR,STR3
    54         S MODARY("DIVIDED")="D",MODARY("POOLED")="P",MODARY("WASHED")="W"
    55         S MODARY("FROZEN")="F",MODARY("LEUKOCYTE POOR")="L"
    56         S MODARY("REJUVENATED")="R",MODARY("DEGLYCEROLIZED")="G"
    57         S MODARY("IRRADIATED")="I",MODARY("SEPARATED")="S"
    58         ;if modification criteria is null determine value from description
    59         S MODSTR=$S($P(EC66,U,6)'="":$P(EC66,U,6),1:$$CHKMOD^ECXLBB1($P(EC66,"^")))
    60         ;get modification criteria for entries at field #3 in file #66
    61         S MOD=0 F  S MOD=$O(^LAB(66,$P(EC0,"^",2),3,MOD)) Q:'MOD  D
    62         .S EC66A=$G(^LAB(66,MOD,0)) I EC66A="" Q
    63         .S STR3=$S($P(EC66A,U,6)'="":$P(EC66A,U,6),1:$$CHKMOD^ECXLBB1($P(EC66A,"^")))
    64         .I STR3'="",MODSTR'[STR3 S MODSTR=MODSTR_STR3
    65         Q MODSTR
    66 MODIFIED()      ; Was unit modified
    67         ; Init variables
    68         N XMATCH,UNIT,MOD,COMPID,MODNODE,MODTO
    69         S (XMATCH,UNIT)=0,MOD=""
    70         ; Check input
    71         Q:'$G(ECLRDFN)!'$P(EC0,U,2) "N"
    72         ;Find xmatch for blood component request
    73         S XMATCH=$O(^LR(ECLRDFN,1.8,$P(EC0,U,2),1,XMATCH)) Q:'XMATCH "N"
    74         ;Get blood inventory file (#65) pointer
    75         S UNIT=$P($G(^LR(ECLRDFN,1.8,$P(EC0,"^",2),1,XMATCH,0)),U)
    76         ;Look at disposition field (#4.1) in blood inventory file (#65)
    77         S MOD=$P($G(^LRD(65,+XMATCH,4)),U),COMPID=$P(EC66,U,3)
    78         ; Get 'the modified to' entry pointer to blood inventory file (#66)
    79         I MOD="MO" S MODTO=0 F  S MODTO=$O(^LRD(65,+XMATCH,9,MODTO)) Q:'MODTO  D
    80         .S MODNODE=$G(^LRD(65,+XMATCH,9,MODTO,0)) Q:$P(^(0),U,3)'>1
    81         .Q:$P(MODNODE,U,2)'=COMPID
    82         .; Set the modify to unit ien for file (#66)
    83         Q $S(MOD="MO":"Y",1:"N")
    84 GETRPRV ; get requesting provider, requesting provider person class and
    85         ; production division code
    86         ; input: ECD      =INVERTED DATE SUBSCRIPT
    87         ;        ECARRY(1)=TRANSFUSION DATE AND TIME
    88         ; note: Accessioned data in file #68 is stored up to 90 days.
    89         N ECXBNOD,ACC,ACCDT,ACCNODE,PERCLS
    90         I ECARRY(1)="" Q  ;there is no transfusion date
    91         ;get BLOOD BANK record, field #1, in file #63 located on "BB" node
    92         ;since there is a slight time lapse, $O will find the BB record
    93         S ECXBNOD=$O(^LR(ECLRDFN,"BB",ECD)) I ECXBNOD="" Q
    94         S ECXBNOD=^LR(ECLRDFN,"BB",ECXBNOD,0) I ECXBNOD="" Q
    95         ;Compose accession number,originating from field #.06 subfile #63.01
    96         ; ex. ACC=BB 0528 27
    97         S ACC=$P(ECXBNOD,U,6),ACC=$TR($P(ACC," ",2,99)," ")
    98         S ACCDT=$E(ECARRY(1),1,3)_$E(ACC,1,4),NUM=$E(ACC,5,99)
    99         ;Get field #2 from file #68, field #1 from subfile #68.01 which is
    100         ;subfile #68.02. Look at 29=blood bank ien, from 0th node, get fields
    101         ;#6.5 PROVIDER and #26 DIV
    102         I (ACCDT)=""!(NUM="") Q
    103         ; identify bb accession area the patient was in to get the right DIV
    104         S AREA=$$AREA
    105         S ACCNODE=$G(^LRO(68,+AREA,1,ACCDT,1,NUM,0))
    106         S ECARRY(9)=$P(ACCNODE,U,8) I ECARRY(9)'="" D
    107         . S PERCLS=$$GET^XUA4A72(ECARRY(9),ACCDT)
    108         . I +PERCLS>0 S ECARRY(10)=$P(PERCLS,U,7)
    109         . S ECREQNPI=$$NPI^XUSNPI("Individual_ID",ECARRY(9),ACCDT)
    110         . S:+ECREQNPI'>0 ECREQNPI="" S ECREQNPI=$P(ECREQNPI,U)
    111         . S ECARRY(9)=2_ECARRY(9)
    112         S DIV=$P($G(^LRO(68,+AREA,1,ACCDT,1,NUM,.4)),U)
    113         I DIV'="" S ECARRY(13)=$$RADDIV^ECXDEPT(DIV)
    114         Q
    115 AREA()  ; resolve accession area's ien to use and validate
    116         ;          Accession number
    117         ;          Patient LRDFN
    118         ; note: if there is only one accession area use '29'
    119         N A,CNT,BBLIST,DFN,ACC,AREA,DATE,TDATE,ACCNODE
    120         S (CNT,FLAG,A)=0,DFN=""
    121         ; set the date from the "bb" node in file (#63)
    122         S DATE=$P(ECXBNOD,U)
    123         ; setup array for bb accession areas if more than one
    124         F  S A=$O(^LRO(68,A)) Q:'A  I $P($G(^LRO(68,A,0)),"^",2)="BB" D
    125         . S BBLIST(A)=""
    126         . S CNT=CNT+1
    127         I CNT'>1 Q 29
    128         S AREA=0 F  S AREA=$O(BBLIST(AREA)) Q:'AREA  D  Q:FLAG
    129         . ; get additional accession information for validation
    130         . S ACCNODE=$G(^LRO(68,AREA,1,$P(DATE,"."),1,NUM,0))
    131         . S ACC=$G(^LRO(68,AREA,1,$P(DATE,"."),1,NUM,.2))
    132         . S DFN=$P($G(ACCNODE),U)
    133         . S TDATE=$P($G(^LRO(68,AREA,1,$P(DATE,"."),1,NUM,3)),U)
    134         . I (DFN=ECLRDFN)&(ACC=$P(ECXBNOD,U,6))&(DATE=TDATE) S FLAG=1
    135         Q AREA
    136 GETDATA ; gather rest of extract data that will be recorded in an
    137         ; entry in file 727.829
    138         S ECTRFDT=$$ECXDOB^ECXUTL(ECARRY(1)),ECTRFTM=$$ECXTIME^ECXUTL(ECARRY(1))
    139         S ECX=$$INP^ECXUTL2(ECXDFN,ECARRY(1)),ECINOUT=$P(ECX,U),ECTRSP=$P(ECX,U,3),ECADMT=$P(ECX,U,4) ; [FLD #5]
    140         ;
    141         ;- Observation patient indicator (YES/NO)
    142         S ECXOBS=$$OBSPAT^ECXUTL4(ECINOUT,ECTRSP)
    143         ;- If no encounter number don't file record
    144         S ECENCTR=$$ENCNUM^ECXUTL4(ECINOUT,ECPAT("SSN"),ECADMT,ECARRY(1),ECTRSP,ECXOBS,ECHEAD,,) ; [FLD #6]
    145         Q:ECENCTR=""
    146         ;get emergency response indicator (FEMA)
    147         S ECXERI=ECPAT("ERI")
    148         ;
    149         S ECXSTR=$G(EC23)_"^"_ECINST_"^"_ECXDFN_"^"_ECPAT("SSN")_"^"_ECPAT("NAME")_"^"_ECINOUT_"^"_ECENCTR_"^"_ECTRFDT_"^"_ECTRFTM_"^"_ECARRY(3)_"^"_ECARRY(4)_"^"_ECARRY(5)_"^"_ECARRY(7)_"^"_ECARRY(6)_"^"_ECARRY(8)_"^BB"_ECARRY(13)_"^^"
    150         I $G(ECXLOGIC)>2005 S ECXSTR=ECXSTR_U_ECXPHY_U_ECXPHYPC
    151         I $G(ECXLOGIC)>2006 D
    152         .S ECXSTR=ECXSTR_U_ECXERI_U_ECARRY(11)_U_ECARRY(12)_U_ECARRY(9)_U_ECARRY(10)_U_ECARRY(13)_U
    153         I '$D(ECXRPT) D FILE(ECXSTR) Q
    154         S ^TMP("ECXLBB",$J,ECXDFN,ECD)=ECXSTR  ;temporary global array
    155         ;   used in ECXPLBB (pre-extract audit report)
    156         Q
    157 GETDFN(ECXLRDFN)        ;
    158         ; INPUT - LRDFN
    159         ; OUTPUT - DFN
    160         ; Obtains DFN (Patient ID) from LRDFN (Lab Patient ID).
    161         ; If no valid DFN exists, 0 is returned.
    162         S ECXLRDFN=+$G(ECXLRDFN)
    163         I $P($G(^LR(ECXLRDFN,0)),"^",2)'=2 Q 0
    164         Q +$P(^LR(ECXLRDFN,0),"^",3)
    165         ;
    166 PAT(ECXDFN)     ;get/set patient data
    167         ; INPUT - ECXDFN = patient ien (DFN)
    168         ; OUTPUT - ECPAT array:
    169         ;          ECPAT("SSN")
    170         ;          ECPAT("NAME")
    171         ; returns 0 or 1 in ECXERR - 0=successful
    172         ;                            1=error condition
    173         N X,OK,ECXERR
    174         ;get data
    175         S ECXERR=0
    176         K ECXPAT S OK=$$PAT^ECXUTL3(ECXDFN,"","1;3",.ECPAT)
    177         I 'OK S ECXERR=1
    178         Q ECXERR
    179         ;
    180 FILE(ECODE)     ;
    181         ; Input - ECODE = extract record
    182         ;
    183         ; record the extract record at a global node in file 727.829
    184         ; sequence #^year/month of extract^extract #^facility^patient dfn^SSN^
    185         ; name^i/o pt indicator^encounter #^date of transfusion^time of
    186         ; transfusion^component^component abbrev^# of units^volume in mm^
    187         ; reaction^reaction type^feeder location^DSS product dept^DSS IP #
    188         ; ordering physician^ordering physician pc^emergency response indicator
    189         ; (FEMA)^unit modified^unit modification^requesting provider^request.
    190         ; provider person class^ordering provider npi ECPHYNPI
    191         ;ECODE1- requesting provider npi ECREQNPI
    192         ;note:  DSS product dept and DSS IP # are dependent on the release of
    193         ; ECX*3*61
    194         N DA,DIK,EC7
    195         S EC7=$O(^ECX(ECFILE,999999999),-1),EC7=EC7+1
    196         S ECODE=EC7_"^"_ECODE
    197         I ECXLOGIC>2007 D
    198         .S ECODE=ECODE_ECPHYNPI_U
    199         .S ECODE1=$G(ECREQNPI)
    200         S ^ECX(ECFILE,EC7,0)=ECODE,^ECX(ECFILE,EC7,1)=$G(ECODE1),ECRN=ECRN+1
    201         S DA=EC7,DIK="^ECX("_ECFILE_"," D IX1^DIK K DIK,DA
    202         Q
    203         ;
    204         ;
    205 SETUP   ;Set required input for ECXTRAC.
    206         S ECHEAD="LBB"
    207         D ECXDEF^ECXUTL2(ECHEAD,.ECPACK,.ECGRP,.ECFILE,.ECRTN,.ECPIECE,.ECVER)
    208         Q
    209         ;
    210 LOCAL   ; to extract nightly for local use not to be transmitted to TSI
    211         ; should be queued with a 1D frequency
    212         D SETUP,^ECXTLOCL,^ECXKILL Q
    213         ;
    214 QUE     ; entry point for the background requeuing handled by ECXTAUTO
    215         D SETUP,QUE^ECXTAUTO,^ECXKILL
    216         Q
    217         ;
    218         ;ECXLBB
     1ECXLBB ;DALOI/KML - DSS BLOOD BANK EXTRACT ; 2/22/07 11:42am
     2 ;;3.0;DSS EXTRACTS;**78,84,90,92,104**;Dec 22, 1997;Build 8
     3 ;Per VHA Directive 97-033 this routine should not be modified.  Medical Device # BK970021
     4 ; access to the LAB DATA file (#63) is supported by
     5 ; controlled subscription to IA 525  (global root ^LR) 
     6 ; access to the BLOOD PRODUCT (#66) is supported by IA 4510
     7BEG ;entry point from option
     8 D SETUP I ECFILE="" Q
     9 D ^ECXTRAC,^ECXKILL
     10 Q
     11 ;
     12START ; Entry point from tasked job
     13 ; begin package specific extract
     14 N ECTRSP,ECADMT,ECTODT,ECENCTR,ECPAT,ECLRDFN,ECXPHY,ECXPHYPC
     15 N ECD,ECXDFN,ECARRY,EC66,ECERR,ECTRFDT,ECTRFTM,ECX,ECINOUT,ECXINST
     16 ;variables ECFILE,EC23,ECXYM,ECINST,ECSD,ECSD1,ECED passed in
     17 ; by taskmanager
     18 ; ECED defined in ^ECXTRAC - it represents the end date of the extract
     19 ; sort process.  TRANSFUSION DATE should be within start and end dates
     20 ; ECED and ECSD were assigned with input provided by the user interface
     21 ; and ECSD1 = ECSD-.1
     22 ; Read through the TRANSFUSION RECORD sub-file (63.017) of
     23 ; the LAB DATA file (#63)
     24 ;the global nodes containing transfusion record entries are constructed
     25 ; by calculating the TRANSFUSION DATE/TIME (.01)
     26 ; into its reverse date/time representation and then DINUM'd when
     27 ;filing the record entry
     28 ; ECD equals the reverse date/time of ECED+.3 and will need to be
     29 ; reset for each DFN.
     30 I $D(ZTQUEUED),$$S^%ZTLOAD S QFLG=1 Q  ;quit if tasked and user sends stop request  (QFLG assigned in ECXTRAC)
     31AUDRPT ; entry point for pre-extract audit report
     32 S ECTODT=9999999-ECSD1,ECLRDFN=0
     33 F  S ECLRDFN=$O(^LR(ECLRDFN)) Q:'ECLRDFN  S ECXDFN=$$GETDFN(ECLRDFN),ECERR=$$PAT(ECXDFN) S ECD=9999999-(ECED+.3) F  S ECD=$O(^LR(ECLRDFN,1.6,ECD)) Q:ECERR  Q:'ECD!(ECD>ECTODT)  S EC0=^LR(ECLRDFN,1.6,ECD,0) D
     34 .; ECARRY(1)=TRANSFUSION DATE AND TIME,
     35 .; ECARRY(3)=COMPONENT, ECARRY(4)=COMPONENT ABBREVIATION
     36 .; ECARRY(5)=UNITS POOLED, ECARRY(6)=TRANSFUSION REACTION,
     37 .; ECARRY(7)=VOLUME TRANSFUSED, ECARRY(8)=TRANSFUSION REACTION TYPE
     38 .; ECARRY(9)=REQUESTING PROVIDER, ECARRY(10)=REQUEST. PROV. PERSON CLASS
     39 .; ECARRY(11)=UNIT MODIFIED, ECARRY(12)=UNIT MODIFICATION
     40 .; ECARRY(13)=PRODUCTION DIVISION CODE
     41 . S ECARRY(1)=$P(EC0,"^"),EC66=$G(^LAB(66,$P(EC0,"^",2),0))
     42 . S ECARRY(3)=$E($P(EC66,"^"),1,15),ECARRY(4)=$P(EC66,"^",2)
     43 . S ECARRY(5)=$S(+$P(EC0,"^",7)=0:1,1:+$P(EC0,"^",7))
     44 . S ECARRY(6)=$S($P(EC0,"^",8)=1:"Y",1:"N"),ECARRY(7)=$P(EC0,"^",10)
     45 . S ECARRY(8)=$E($P($G(^LAB(65.4,+$P(EC0,"^",11),0)),"^"),1,10)
     46 . S (ECARRY(9),ECARRY(10),ECARRY(13))="" D GETRPRV
     47 . S ECARRY(12)=$$UNITMOD(),ECARRY(11)=$S(ECARRY(12)'="":"Y",1:"N")
     48 . S (ECXPHY,ECXPHYPC)=""
     49 . D GETDATA
     50 . K ECARRY
     51 Q
     52 ;
     53UNITMOD() ; Get modification criteria from fields #.06 and #3 from file #66
     54 N MODARY,MO,EC66A,MODSTR,STR3
     55 S MODARY("DIVIDED")="D",MODARY("POOLED")="P",MODARY("WASHED")="W"
     56 S MODARY("FROZEN")="F",MODARY("LEUKOCYTE POOR")="L"
     57 S MODARY("REJUVENATED")="R",MODARY("DEGLYCEROLIZED")="G"
     58 S MODARY("IRRADIATED")="I",MODARY("SEPARATED")="S"
     59 ;if modification criteria is null determine value from description
     60 S MODSTR=$S($P(EC66,U,6)'="":$P(EC66,U,6),1:$$CHKMOD($P(EC66,"^")))
     61 ;get modification criteria for entries at field #3 in file #66
     62 S MOD=0 F  S MOD=$O(^LAB(66,$P(EC0,"^",2),3,MOD)) Q:'MOD  D
     63 .S EC66A=$G(^LAB(66,MOD,0)) I EC66A="" Q
     64 .S STR3=$S($P(EC66A,U,6)'="":$P(EC66A,U,6),1:$$CHKMOD($P(EC66A,"^")))
     65 .I STR3'="",MODSTR'[STR3 S MODSTR=MODSTR_STR3
     66 Q MODSTR
     67 ;
     68CHKMOD(MD) ;check if modifier is contained in string
     69 N RES,MODX
     70 I MD="" Q ""
     71 S (RES,MODX)="" F  S MODX=$O(MODARY(MODX)) Q:MODX=""  D  I RES'="" Q
     72 .I MD[MODX S RES=MODARY(MODX)
     73 Q RES
     74GETRPRV ; get requesting provider, requesting provider person class and
     75 ; production division code
     76 ; input: ECD      =INVERTED DATE SUBSCRIPT
     77 ;        ECARRY(1)=TRANSFUSION DATE AND TIME
     78 ; note: Accessioned data in file #68 is stored up to 90 days.
     79 N ECXBNOD,ACC,ACCDT,ACCNODE,PERCLS
     80 I ECARRY(1)="" Q  ;there is no transfusion date
     81 ;get BLOOD BANK record, field #1, in file #63 located on "BB" node
     82 ;since there is a slight time lapse, $O will find the BB record
     83 S ECXBNOD=$O(^LR(ECLRDFN,"BB",ECD)) I ECXBNOD="" Q
     84 S ECXBNOD=^LR(ECLRDFN,"BB",ECXBNOD,0) I ECXBNOD="" Q
     85 ;Compose accession number,originating from field #.06 subfile #63.01
     86 ; ex. ACC=BB 0528 27
     87 S ACC=$P(ECXBNOD,U,6),ACC=$TR($P(ACC," ",2,99)," ")
     88 S ACCDT=$E(ECARRY(1),1,3)_$E(ACC,1,4),NUM=$E(ACC,5,99)
     89 ;Get field #2 from file #68, field #1 from subfile #68.01 which is
     90 ;subfile #68.02. Look at 29=blood bank ien, from 0th node, get fields
     91 ;#6.5 PROVIDER and #26 DIV
     92 I (ACCDT)=""!(NUM="") Q
     93 ; identify bb accession area the patient was in to get the right DIV
     94 S AREA=$$AREA
     95 S ACCNODE=$G(^LRO(68,+AREA,1,ACCDT,1,NUM,0))
     96 S ECARRY(9)=$P(ACCNODE,U,8) I ECARRY(9)'="" D
     97 . S PERCLS=$$GET^XUA4A72(ECARRY(9),ACCDT)
     98 . I +PERCLS>0 S ECARRY(10)=$P(PERCLS,U,7)
     99 . S ECARRY(9)=2_ECARRY(9)
     100 S DIV=$P($G(^LRO(68,+AREA,1,ACCDT,1,NUM,.4)),U)
     101 I DIV'="" S ECARRY(13)=$$RADDIV^ECXDEPT(DIV)
     102 Q
     103 ;
     104AREA() ; resolve accession area's ien to use and validate
     105 ;          Accession number
     106 ;          Patient LRDFN
     107 ; note: if there is only one accession area use '29'
     108 N A,CNT,BBLIST,DFN,ACC,AREA,DATE,TDATE,ACCNODE
     109 S (CNT,FLAG,A)=0,DFN=""
     110 ; set the date from the "bb" node in file (#63)
     111 S DATE=$P(ECXBNOD,U)
     112 ; setup array for bb accession areas if more than one
     113 F  S A=$O(^LRO(68,A)) Q:'A  I $P($G(^LRO(68,A,0)),"^",2)="BB" D
     114 . S BBLIST(A)=""
     115 . S CNT=CNT+1
     116 I CNT'>1 Q 29
     117 S AREA=0 F  S AREA=$O(BBLIST(AREA)) Q:'AREA  D  Q:FLAG
     118 . ; get additional accession information for validation
     119 . S ACCNODE=$G(^LRO(68,AREA,1,$P(DATE,"."),1,NUM,0))
     120 . S ACC=$G(^LRO(68,AREA,1,$P(DATE,"."),1,NUM,.2))
     121 . S DFN=$P($G(ACCNODE),U)
     122 . S TDATE=$P($G(^LRO(68,AREA,1,$P(DATE,"."),1,NUM,3)),U)
     123 . I (DFN=ECLRDFN)&(ACC=$P(ECXBNOD,U,6))&(DATE=TDATE) S FLAG=1
     124 Q AREA
     125 ;
     126GETDATA ; gather rest of extract data that will be recorded in an
     127 ; entry in file 727.829
     128 S ECTRFDT=$$ECXDOB^ECXUTL(ECARRY(1)),ECTRFTM=$$ECXTIME^ECXUTL(ECARRY(1))
     129 S ECX=$$INP^ECXUTL2(ECXDFN,ECARRY(1)),ECINOUT=$P(ECX,U),ECTRSP=$P(ECX,U,3),ECADMT=$P(ECX,U,4) ; [FLD #5]
     130 ;
     131 ;- Observation patient indicator (YES/NO)
     132 S ECXOBS=$$OBSPAT^ECXUTL4(ECINOUT,ECTRSP)
     133 ;- If no encounter number don't file record
     134 S ECENCTR=$$ENCNUM^ECXUTL4(ECINOUT,ECPAT("SSN"),ECADMT,ECARRY(1),ECTRSP,ECXOBS,ECHEAD,,) ; [FLD #6]
     135 Q:ECENCTR=""
     136 ;get emergency response indicator (FEMA)
     137 S ECXERI=ECPAT("ERI")
     138 ;
     139 S ECXSTR=$G(EC23)_"^"_ECINST_"^"_ECXDFN_"^"_ECPAT("SSN")_"^"_ECPAT("NAME")_"^"_ECINOUT_"^"_ECENCTR_"^"_ECTRFDT_"^"_ECTRFTM_"^"_ECARRY(3)_"^"_ECARRY(4)_"^"_ECARRY(5)_"^"_ECARRY(7)_"^"_ECARRY(6)_"^"_ECARRY(8)_"^BB"_ECARRY(13)_"^^"
     140 I $G(ECXLOGIC)>2005 S ECXSTR=ECXSTR_U_ECXPHY_U_ECXPHYPC
     141 I $G(ECXLOGIC)>2006 D
     142 .S ECXSTR=ECXSTR_U_ECXERI_U_ECARRY(11)_U_ECARRY(12)_U_ECARRY(9)_U_ECARRY(10)_U_ECARRY(13)
     143 I '$D(ECXRPT) D FILE(ECXSTR) Q
     144 S ^TMP("ECXLBB",$J,ECXDFN,ECD)=ECXSTR  ;temporary global array
     145 ;   used in ECXPLBB (pre-extract audit report)
     146 Q
     147 ;
     148GETDFN(ECXLRDFN) ;
     149 ; INPUT - LRDFN
     150 ; OUTPUT - DFN
     151 ; Obtains DFN (Patient ID) from LRDFN (Lab Patient ID).
     152 ; If no valid DFN exists, 0 is returned.
     153 S ECXLRDFN=+$G(ECXLRDFN)
     154 I $P($G(^LR(ECXLRDFN,0)),"^",2)'=2 Q 0
     155 Q +$P(^LR(ECXLRDFN,0),"^",3)
     156 ;
     157PAT(ECXDFN) ;get/set patient data
     158 ; INPUT - ECXDFN = patient ien (DFN)
     159 ; OUTPUT - ECPAT array:
     160 ;          ECPAT("SSN")
     161 ;          ECPAT("NAME")
     162 ; returns 0 or 1 in ECXERR - 0=successful
     163 ;                            1=error condition
     164 N X,OK,ECXERR
     165 ;get data
     166 S ECXERR=0
     167 K ECXPAT S OK=$$PAT^ECXUTL3(ECXDFN,"","1;3",.ECPAT)
     168 I 'OK S ECXERR=1
     169 Q ECXERR
     170 ;
     171FILE(ECODE) ;
     172 ; Input - ECODE = extract record
     173 ;
     174 ; record the extract record at a global node in file 727.829
     175 ; sequence #^year/month of extract^extract #^facility^patient dfn^SSN^
     176 ; name^i/o pt indicator^encounter #^date of transfusion^time of
     177 ; transfusion^component^component abbrev^# of units^volume in mm^
     178 ; reaction^reaction type^feeder location^DSS product dept^DSS IP #
     179 ; ordering physician^ordering physician pc^emergency response indicator
     180 ; (FEMA)^unit modified^unit modification^requesting provider^request.
     181 ; provider person class
     182 ;note:  DSS product dept and DSS IP # are dependent on the release of
     183 ; ECX*3*61
     184 N DA,DIK,EC7
     185 S EC7=$O(^ECX(ECFILE,999999999),-1),EC7=EC7+1
     186 S ECODE=EC7_"^"_ECODE
     187 S ^ECX(ECFILE,EC7,0)=ECODE,ECRN=ECRN+1
     188 S DA=EC7,DIK="^ECX("_ECFILE_"," D IX1^DIK K DIK,DA
     189 Q
     190 ;
     191 ;
     192SETUP ;Set required input for ECXTRAC.
     193 S ECHEAD="LBB"
     194 D ECXDEF^ECXUTL2(ECHEAD,.ECPACK,.ECGRP,.ECFILE,.ECRTN,.ECPIECE,.ECVER)
     195 Q
     196 ;
     197LOCAL ; to extract nightly for local use not to be transmitted to TSI
     198 ; should be queued with a 1D frequency
     199 D SETUP,^ECXTLOCL,^ECXKILL Q
     200 ;
     201QUE ; entry point for the background requeuing handled by ECXTAUTO
     202 D SETUP,QUE^ECXTAUTO,^ECXKILL
     203 Q
     204 ;
     205 ;ECXLBB
Note: See TracChangeset for help on using the changeset viewer.