Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: BLRAG01

BLRAG01.m

Go to the documentation of this file.
  1. BLRAG01 ; IHS/MSC/SAT - LABORATORY ACCESSION GUI RPCS ;
  1. ;;5.2;IHS LABORATORY;**1031**;NOV 01, 1997;Build 185
  1. ;
  1. ; BLR REF LAB USING LEDI - UL^BLRAG02 = return the value of the 'REF LAB USING LEDI?' field in the BLR MASTER CONTROL file
  1. ; BLR ICD LOOKUP - ICDLKUP^BLRAG07 = ICD code lookup
  1. ; BLR ORDER REASON LKUP - ORL^BLRAG07 = return order reasons from file 100.03
  1. ; BLR PATIENT LOOKUP - PTLK^BLRAG04 = Patient Lookup
  1. ; BLR PRINTERS AVAILABLE - DEVICE^BLRAG10 = return available printers from the DEVICE file
  1. ; BLR USER LOOKUP - NP^BLRAG06 = return entries from the NEW PERSON table 200 that are 'active'
  1. ;
  1. ; BLR ACCESSION - ACC^BLRAG05 = lab accession processor
  1. ; BLR ACCESSION PRINT - ABR^BLRAG02 = reprint accession label or manifest
  1. ; BLR ALL NON-ACCESSIONED - ANA^BLRAG01 = return all non-accessioned lab records
  1. ; BLR ALL-ACCESSIONED - ABD^BLRAG02 = return all accessioned records for given date range
  1. ; BLR COLLECTION INFO - BLC^BLRAG06 = check BLR PT CONFIRM parameter and return insurances for patient
  1. ; BLR DELETE TEST - DELTST^BLRAG08 = Cancel tests - Test are no longer deleted, instead the status is changed to Not Performed.
  1. ; BLR ORDER/TEST STATUS - LROS^BLRAG03 = return order/test status for given patient and date range
  1. ;
  1. ; BLR SHIP CONF - SC^BLRAG09A = select a shipping configuration
  1. ; BLR MANIFEST BUILD - BM^BLRAG09B = build a shipping manifest
  1. ; BLR MANIFEST CLOSE/SHIP - CLSHIP^BLRAG09C = Close/ship a shipping manifest
  1. ; BLR MANIFEST DISPLAY - DISP^BLRAG09G = screen formatted text for manifest display
  1. ; BLR MANIFEST START - SMONLY^BLRAG09C = Start a shipping manifest only, no building
  1. ; BLR MANIFEST TEST ADD - ADDTEST^BLRAG09C= Add tests to an existing manifest
  1. ; BLR MANIFEST TEST REMOVE - REMVTST^BLRAG09C= Remove a test from manifest - actually flags test as "removed".
  1. ; BLR MANIFEST TESTS TO ADD- TARPC^BLRAG09B = return tests that can be added to a manifest
  1. ;
  1. ;return all non-accessioned lab records - RPC
  1. ANA(BLRY,BLRDFN,BLRUSRDY) ;return appointment data for given patient - RPC
  1. ; RPC Name is BLR ALL NON-ACCESSIONED
  1. ;INPUT:
  1. ; .BLRY = returned pointer to appointment data
  1. ; BLRDFN = (optional) return all non-accessioned lab records for this
  1. ; given patient only
  1. ; return for all patients of this parameter
  1. ; is not defined
  1. ; BLRUSRDY = Temporary User Override of the BLR DAYS TO ACCESSION XPAR Parameter
  1. ;
  1. ;RETURNS:
  1. ; (0) DFN
  1. ; (1) PNAME
  1. ; (2) HRN
  1. ; (3) DOB
  1. ; (5) IFN
  1. ; (6) Grp
  1. ; (7) ActTm
  1. ; (8) StrtTm
  1. ; (9) StopTm
  1. ; (10) Sts
  1. ; (11) Sig
  1. ; (12) Nrs
  1. ; (13) Clk
  1. ; (14) PrvID
  1. ; (15) PrvNam
  1. ; (16) ActDA
  1. ; (17) Flag
  1. ; (18) DCType
  1. ; (19) ChrtRev
  1. ; (20) DEA#
  1. ; (21) <NOT USED>
  1. ; (22) SCHEDULE
  1. ; (23) ORDER_TEXT
  1. ; (24) DETAIL_TEXT
  1. ; (25) STREET_LINE1
  1. ; (26) STREET_LINE2
  1. ; (27) STREET_LINE3
  1. ; (28) CITY
  1. ; (29) STATE
  1. ; (30) ZIP
  1. ; (31) SEX
  1. ; (32) COLLECTION_TYPE
  1. ; (33) DATE_TIME_ORDERED
  1. ; (34) LAB_ORDER_#
  1. ; (35) TEST_NAME
  1. ; (36) COLLECTION_SAMPLE
  1. ; (37) SPECIMENS
  1. ; (38) SSN
  1. ; (39) ACCESSION_#
  1. ; (40) LRO69_POINTERS
  1. ; (41)LAB_INSTRUCTS
  1. ;
  1. N BLR60NAM,BLR62NAM,BLRSPNS,BLRTOP
  1. N BLRACCNO
  1. N BLRDT,BLRI,BLRIFNL,BLRJ,BLRK,BLRLCNT,BLRLI,BLRLRDFN,BLRLST,BLRLSTI,BLROI
  1. N BLRLTMP,BLRNODS,BLRNODT,BLROERR,BLROLOC,BLRPADD
  1. N BLRPHRN,BLRPNAM,BLRSEX,BLRSP,BLRT,BLRTI,BLRSSN,BLRTMP
  1. NEW BLRSDAYS,LRDFN,PASTDAYS,FUTUDAYS
  1. ;
  1. ; ^TMP("BLRAG01",$J,DFN,<BLRTI counter>)=data
  1. K ^TMP("BLRAG01",$J) ;used to keep records for same patient together
  1. S (BLRACCNO,BLRPAD1,BLRPAD2,BLRPAD3,BLRPADC,BLRPADS,BLRPADZ,BLRSSN,BLRTMP)=""
  1. D ^XBKVAR S X="ERROR^BLRAGUT",@^%ZOSF("TRAP")
  1. K BLRIFNL,BLRLTMP
  1. S (BLRI,BLRLCNT,BLROI,BLRTI)=0
  1. S BLRDFN=$G(BLRDFN)
  1. K ^TMP("BLRAG",$J)
  1. S BLRY="^TMP(""BLRAG"","_$J_")"
  1. ; LRO69_POINTERS = pointers to the LAB ORDER ENTRY file 69; BLRDT:BLRSP:BLRTEST; passed into BLR DELETE TEST
  1. S BLRTMP($J,0)="ERROR_ID"
  1. ;
  1. ; Use the 'Return Days To Accession' XPAR Parameter to determine how many days to go back and forward.
  1. ; If the parameter is zero, use 90 Days.
  1. D RETDTA^BLRAG10(.BLRSDAYS) ; Get 'Return Days To Accession' XPAR Parameter
  1. S:+$G(BLRUSRDY) BLRSDAYS=BLRUSRDY ; If user over-ride passed in, then use that
  1. ;
  1. ; Set 'How many days in the past' Variable
  1. S PASTDAYS=$S(BLRSDAYS:$$HTFM^XLFDT(+$H-(BLRSDAYS+1)),1:$$HTFM^XLFDT(+$H-91))
  1. ;
  1. ; Set 'How many days in the future' Variable
  1. S FUTUDAYS=+$O(^LRO(69,"AA"),-1) ; Get "last" Date in Lab Order Entry (#69) file
  1. S FUTUDAYS=$S(BLRSDAYS:$$HTFM^XLFDT(+$H+BLRSDAYS),FUTUDAYS>$$DT^XLFDT:FUTUDAYS,1:$$HTFM^XLFDT(+$H+89))
  1. ;
  1. S LRDFN=$S(+$G(BLRDFN):+$G(^DPT(BLRDFN,"LR")),1:0) ; Set LRDFN variable
  1. ;
  1. I LRDFN D
  1. . S BLRDT=PASTDAYS
  1. . F S BLRDT=$O(^LRO(69,"D",LRDFN,BLRDT)) Q:BLRDT'>0!(BLRDT>FUTUDAYS) D ; date level
  1. ..S BLRSP=0 F S BLRSP=$O(^LRO(69,"D",LRDFN,BLRDT,BLRSP)) Q:BLRSP'>0 D ; specimen mult level
  1. ...D ANA1(BLRDT,BLRSP,.BLRTI)
  1. ;
  1. I LRDFN<1 D
  1. . S BLRDT=PASTDAYS
  1. . F S BLRDT=$O(^LRO(69,BLRDT)) Q:BLRDT'>0!(BLRDT>FUTUDAYS) D ; date level
  1. ..S BLRSP=0 F S BLRSP=$O(^LRO(69,BLRDT,1,BLRSP)) Q:BLRSP'>0 D ; specimen mult level
  1. ...D ANA1(BLRDT,BLRSP,.BLRTI)
  1. ;
  1. D ANAHD
  1. S BLRJ="" F S BLRJ=$O(^TMP("BLRAG01",$J,BLRJ)) Q:BLRJ="" D
  1. .S BLRK="" F S BLRK=$O(^TMP("BLRAG01",$J,BLRJ,BLRK)) Q:BLRK="" D
  1. ..S BLRI=BLRI+1
  1. ..S ^TMP("BLRAG",$J,BLRI)=^TMP("BLRAG01",$J,BLRJ,BLRK)
  1. ;
  1. ;S BLRI=BLRI+1
  1. ;S ^TMP("BLRAG",$J,BLRI)=$C(31)
  1. K ^TMP("BLRAG01",$J)
  1. Q
  1. ;
  1. ANA1(BLRDT,BLRSP,BLRTI) ;
  1. ; BLRDT = date in FM format; pointer to LAB ORDER ENTRY file ^LRO(69,BLRDT
  1. ; BLRSP = Specimen pointer to LAB ORDER ENTRY file ^LRO(69,BLRDT,1,BLRSP
  1. ; BLRTI = counter for global array entries
  1. S BLRNODS=$G(^LRO(69,BLRDT,1,BLRSP,0)) ;get specimen mult node
  1. Q:$G(BLRNODS)=""
  1. Q:$P(BLRNODS,U,4)="LC" ;do not include LAB COLLECT
  1. S BLRSPNS="" ; list of specimen names delimited by pipe |
  1. S BLRK=0 F S BLRK=$O(^LRO(69,BLRDT,1,BLRSP,4,BLRK)) Q:BLRK'>0 D
  1. .S BLRTOP=$P($G(^LRO(69,BLRDT,1,BLRSP,4,BLRK,0)),U,1)
  1. .S BLRSPNS=$S(BLRSPNS'="":"|",1:"")_$$GET1^DIQ(61,BLRTOP_",",.01)
  1. S BLR62NAM=$P($G(^LAB(62,+$P(BLRNODS,U,3),0)),U,1)
  1. S BLRORD=$P($G(^LRO(69,BLRDT,1,BLRSP,.1)),U,1)
  1. Q:$G(BLRORD)=""
  1. S BLRT=0 F S BLRT=$O(^LRO(69,BLRDT,1,BLRSP,2,BLRT)) Q:BLRT'>0 D ;test mult level
  1. .S BLRNODT=$G(^LRO(69,BLRDT,1,BLRSP,2,BLRT,0)) ;get test mult node
  1. .I $P(BLRNODT,U,3)="",$P(BLRNODT,U,9)'="CA" D ;If no accession date ...
  1. ..S BLRLRDFN=$P(BLRNODS,U,1) ;get lab data IEN
  1. ..S BLRLRND=$G(^LR(BLRLRDFN,0))
  1. ..I $P(BLRLRND,U,2)=2 D
  1. ...; S BLR60NAM=$$GET1^DIQ(60,+$P(BLRNODT,U,1)_",",.01) ;get test name
  1. ...S BLR60NAM=$$TESTNAME^BLRAGUT(+$P(BLRNODT,U,1)) ;get test name
  1. ...K BLRINST S BLRINST=""
  1. ...D INST(+$P(BLRNODT,U,1),+$P(BLRNODS,U,3),.BLRINST) ;get lab instructions
  1. ...S BLRPDFN=$P(BLRLRND,U,3) ;get patient IEN
  1. ...I ('$G(BLRDFN))!(BLRDFN=BLRPDFN) D
  1. ....S BLRPNAM=$P(^DPT(BLRPDFN,0),U,1) ;get patient name
  1. ....S BLRPHRN=$$HRN^AUPNPAT(BLRPDFN,DUZ(2)) ;get patient HRN
  1. ....S BLRPDOB=$$DOB^AUPNPAT(BLRPDFN) ;get patient DOB
  1. ....S BLRPSEX=$$SEX^AUPNPAT(BLRPDFN) ;get patient gender
  1. ....S BLRPADD=$G(^DPT(BLRPDFN,.11)) ;get patient address node
  1. ....S BLRSSN=$$SSN^AUPNPAT(BLRPDFN) ;get patient SSN
  1. ....S BLROERR=$P(BLRNODT,U,7) ;get order IEN
  1. ....S BLRACCNO=$$GACE69^BLRAGUT(BLRDT,BLRSP,BLRT) ;get accession number
  1. ....S BLRIFNL(1)=BLROERR
  1. ....K BLRDLST,BLRFLST
  1. ....S (BLRDLST,BLRFLST)=""
  1. ....D GET4V11^ORWORR(.BLRFLST,"",0,.BLRIFNL)
  1. ....D DETAIL^ORWOR(.BLRDLST,BLROERR)
  1. ....S BLRTI=BLRTI+1
  1. ....S ^TMP("BLRAG01",$J,BLRPDFN,BLRTI)=BLRPDFN_U_BLRPNAM_U_BLRPHRN_U_BLRPDOB_U
  1. ....S BLRTMP=""
  1. ....S BLRLSTI=$O(BLRFLST(0))
  1. ....S BLRTMP=$E($P(BLRFLST(BLRLSTI),U,1),2,$L(BLRFLST(BLRLSTI)))
  1. ....F BLRJ=2:1:18 D
  1. .....S $P(BLRTMP,U,BLRJ)=$P(BLRFLST(BLRLSTI),U,BLRJ)
  1. ....S BLRTI=BLRTI+1
  1. ....S ^TMP("BLRAG01",$J,BLRPDFN,BLRTI)=BLRTMP_U
  1. ....F S BLRLSTI=$O(BLRFLST(BLRLSTI)) Q:BLRLSTI="" D
  1. .....S BLRTI=BLRTI+1
  1. .....S ^TMP("BLRAG01",$J,BLRPDFN,BLRTI)=$E(BLRFLST(BLRLSTI),2,$L(BLRFLST(BLRLSTI)))
  1. ....S BLRTI=BLRTI+1,^TMP("BLRAG01",$J,BLRPDFN,BLRTI)=U
  1. ....S BLRLSTI=0 F S BLRLSTI=$O(^TMP("ORTXT",$J,BLRLSTI)) Q:BLRLSTI="" D
  1. .....S BLRTI=BLRTI+1
  1. .....S ^TMP("BLRAG01",$J,BLRPDFN,BLRTI)=^TMP("ORTXT",$J,BLRLSTI)_"|"
  1. ....S BLRTMP1=U_$P(BLRPADD,U,1)_U_$P(BLRPADD,U,2)_U_$P(BLRPADD,U,3)_U_$P(BLRPADD,U,4)_U_$P(BLRPADD,U,5)_U
  1. ....S BLRTMP1=BLRTMP1_$P(BLRPADD,U,6)_U_BLRPSEX_U_$P(BLRNODS,U,4)_U_$P(BLRNODS,U,5)_U
  1. ....S BLRTMP1=BLRTMP1_BLRORD_U_BLR60NAM_U_BLR62NAM_U_BLRSPNS_U_BLRSSN_U_BLRACCNO_U_BLRDT_":"_BLRSP_":"_BLRT_U
  1. ....S BLRTI=BLRTI+1
  1. ....S ^TMP("BLRAG01",$J,BLRPDFN,BLRTI)=BLRTMP1
  1. ....S BLRTMP1=""
  1. ....S BLRD="" F S BLRD=$O(BLRINST(BLRD)) Q:BLRD="" S BLRTI=BLRTI+1 S ^TMP("BLRAG01",$J,BLRPDFN,BLRTI)=BLRINST(BLRD)_"|"
  1. ....S BLRTI=BLRTI+1,^TMP("BLRAG01",$J,BLRPDFN,BLRTI)="~~~"_$C(30)
  1. Q
  1. ;
  1. ANAHD ;
  1. ; 0 1 2 3
  1. S BLRTMP="T00020DFN^T00020PNAME^T00020HRN^T00020DOB^"
  1. ; 4 5 6 7 8 9
  1. S BLRTMP=BLRTMP_"T00020IFN^T00020Grp^T00020ActTm^T00020StrtTm^T00020StopTm^T00020Sts^"
  1. ; 10 11 12 13 14 15
  1. S BLRTMP=BLRTMP_"T00020Sig^T00020Nrs^T00020Clk^T00020PrvID^T00020PrvNam^T00020ActDA^"
  1. ; 16 17 18 19 20 21
  1. S BLRTMP=BLRTMP_"T00020Flag^T00020DCType^T00020ChrtRev^T00020DEA#^^T00020SCHEDULE^"
  1. ; 22 23
  1. S BLRTMP=BLRTMP_"T00900ORDER_TEXT^T00900DETAIL_TEXT^"
  1. ; 24 25 26 27 28 29 30
  1. S BLRTMP=BLRTMP_"T00020STREET_LINE1^T00020STREET_LINE2^T00020STREET_LINE3^T00020CITY^T00020STATE^T00020ZIP^T00020SEX^"
  1. ; 31 32 33 34 35
  1. S BLRTMP=BLRTMP_"T00020COLLECTION_TYPE^T00020DATE_TIME_ORDERED^T00020LAB_ORDER_#^T00020TEST_NAME^T00020COLLECTION_SAMPLE^"
  1. ; 36 37 38 39 40
  1. S BLRTMP=BLRTMP_"T00020SPECIMENS^T00020SSN^T00020ACCESSION_#^T00020LRO69_POINTERS^T00500LAB_INSTRUCTS"
  1. S ^TMP("BLRAG",$J,0)=BLRTMP_"~~~"_$C(30)
  1. Q
  1. ;
  1. INST(BLRLRDFN,BLRCS,BLRRET) ; get lab instructions for given lab test and collection sample
  1. ; BLRLRDFN = pointer to LABORATORY TEST file 60
  1. ; BLRCS = pointer to COLLECTION SAMPLE file 62
  1. ; BLRRET = returned lab instructions array
  1. ; BLRRET(COUNT)=TEXT
  1. N BLRD,BLRCSIEN
  1. S BLRRET=""
  1. S BLRCSIEN=$O(^LAB(60,BLRLRDFN,3,"B",BLRCS,0))
  1. Q:BLRCSIEN=""
  1. S BLRD=0 F S BLRD=$O(^LAB(60,BLRLRDFN,3,BLRCSIEN,2,BLRD)) Q:BLRD'>0 D
  1. .S BLRRET(BLRD)=^LAB(60,BLRLRDFN,3,BLRCSIEN,2,BLRD,0)
  1. Q
  1. ;
  1. PTC(BLRY) ; rpc to return the value of the BLR PT CONFIRM parameter
  1. ; RPC: BLR PT CONFIRM ENABLED
  1. ; Returns Patient Confirmation enabled; 0='no' (default); 1='yes'
  1. N BLRDOM,BLRENT,BLRI,BLRPAR
  1. K ^TMP("BLRAG",$J)
  1. D ^XBKVAR S X="ERROR^BLRAGUT",@^%ZOSF("TRAP")
  1. S BLRI=0
  1. S BLRY="^TMP(""BLRAG"","_$J_")"
  1. S ^TMP("BLRAG",$J,BLRI)="T00020PT_CONFIRM"_$C(30)
  1. S BLRDOM=$$GET1^DIQ(8989.3,"1,",.01,"I")
  1. S BLRENT=BLRDOM_";"_"DIC(4.2,"
  1. S BLRPAR=$O(^XTV(8989.51,"B","BLR PT CONFIRM",0))
  1. S BLRRET=$$GET^XPAR(BLRENT,BLRPAR,1,"Q")
  1. S BLRI=BLRI+1 S ^TMP("BLRAG",$J,BLRI)=$S(BLRRET'="":BLRRET,1:0)_$C(30)
  1. ;S BLRI=BLRI+1 S ^TMP("BLRAG",$J,BLRI)=$C(31)
  1. Q
  1. ;
  1. PTCS(BLRY,BLRDT,BLRSPN,BLRUSER,BLRDTCF,BLRMETH) ;rpc to store Patient Confirmation data to the Specimen Multiple of the LAB ORDER ENTRY file
  1. ; RPC: BLR PT CONFIRM STORE
  1. ; BLRDT = (required) order date in external format - pointer to LAB ORDER ENTRY file 69
  1. ; BLRSPN = (required) specimen number - pointer to specimen multiple in LAB ORDER ENTRY file 69
  1. ; BLRUSER = (required) user that did confirmation - pointer to NEW PERSON file 200
  1. ; BLRDTCF = (optional) Date/Time of user confirmation in external format - defaults to 'today'
  1. ; BLRMETH = (optional) method of confirmation - free text
  1. N BLRI,BLRM
  1. K ^TMP("BLRAG",$J)
  1. D ^XBKVAR S X="ERROR^BLRAGUT",@^%ZOSF("TRAP")
  1. S BLRI=0
  1. S BLRY="^TMP(""BLRAG"","_$J_")"
  1. S ^TMP("BLRAG",$J,BLRI)="T00020ERROR_ID" ;0=clean; Text=error
  1. ;convert external date to FM format
  1. S X=$G(BLRDT),%DT="XT" D ^%DT S BLRDT=$P(Y,".")
  1. ;error if invalid date passed in
  1. I $$FR^XLFDT($G(BLRDT)) D ERR^BLRAGUT("BLRAG01: Invalid order date.") Q
  1. I '$G(BLRSPN) D ERR^BLRAGUT("BLRAG01: Invalid Specimen Number.") Q
  1. I '$G(BLRUSER)!'$D(^VA(200,BLRUSER)) D ERR^BLRAGUT("BLRAG01: Invalid User.") Q
  1. S BLRORD=$P(^LRO(69,BLRDT,1,BLRSPN,.1),U,1)
  1. I '$D(^LRO(69,BLRDT,1,BLRSPN))!(BLRORD="") D ERR^BLRAGUT("BLRAG01: Invalid Order.") Q
  1. ;;
  1. TSTART
  1. L +^LRO(69,"C",+$G(BLRORD)):1
  1. ;L +^LRO(69,BLRDT,1,BLRSPN):5
  1. I '$T TROLLBACK D ERR^BLRAGUT("BLRAG01: File being modified elsewhere.") Q
  1. ;if confirmation date is null, default to NOW
  1. I $G(BLRDTCF)="" S BLRDTCF=$$HTFM^XLFDT($H)
  1. E D
  1. .;convert external date to FM format
  1. .S X=BLRDTCF,%DT="XT" D ^%DT S BLRDTCF=Y
  1. .;default to 'NOW' if invalid date passed in
  1. .S:$$FR^XLFDT($G(BLRDTCF)) BLRDTCF=$$HTFM^XLFDT($H)
  1. K BLRM
  1. S BLRM=""
  1. S FDA(69.01,BLRSPN_","_+BLRDT_",",21400)=BLRUSER
  1. S FDA(69.01,BLRSPN_","_+BLRDT_",",21401)=BLRDTCF
  1. S FDA(69.01,BLRSPN_","_+BLRDT_",",21402)=BLRMETH
  1. D FILE^DIE("","FDA","BLRM")
  1. I $D(BLRM("DIERR")) D ERR^BLRAGUT("BLRAG01: "_BLRM("DIERR",1,"TEXT",1)) L -^LRO(69,BLRDT,1,BLRSPN) TROLLBACK Q
  1. ; L -^LRO(69,BLRDT,1,BLRSPN)
  1. D UNL69
  1. TCOMMIT
  1. ;;
  1. S BLRI=BLRI+1 S ^TMP("BLRAG",$J,BLRI)=0_$C(30)
  1. ;S BLRI=BLRI+1 S ^TMP("BLRAG",$J,BLRI)=$C(31)
  1. Q
  1. ;
  1. UNL69 ;
  1. L -^LRO(69,"C",+$G(LRORD))
  1. Q