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

BLRAG07.m

Go to the documentation of this file.
  1. BLRAG07 ; IHS/MSC/SAT - LABORATORY ACCESSION GUI RPCS ; 17-Oct-2014 09:22 ; MKK
  1. ;;5.2;IHS LABORATORY;**1031,1034**;NOV 01, 1997;Build 88
  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. ;---------------------------------------------------------------
  1. ; Lookup ICD's matching input
  1. ; BLRINP = (required) Partial name lookup - free text
  1. ; BLRLEX = (optional) Use Lexicon
  1. ; 0=ICD9 lookup (default)
  1. ; 1=Lexicon lookup
  1. ; BLRVDT = (optional) Visit date in external format
  1. ; BLRGEN = (optional) patient gender
  1. ; BLRECOD = (optional) allow ECodes flag:
  1. ; 0=exclude (default)
  1. ; 1=include
  1. ; 2=ecodes only
  1. ; BLRVCOD = (optional) allow VCodes flag:
  1. ; 0=include
  1. ; 1=exclude
  1. ; 2=vcodes only
  1. ; Returned as a list of records in the format:
  1. ; 0 1 2 3
  1. ; Descriptive Text ^ ICD IEN ^ Narrative Text ^ ICD Code
  1. ;
  1. ;
  1. ICDLKUP(BLRY,BLRINP,BLRLEX,BLRVDT,BLRGEN,BLRECOD,BLRVCOD) ;EP - ICD lookup
  1. ; rpc: BLR ICD LOOKUP
  1. ;INPUT:
  1. ; BLRINP = (required) Partial name lookup - free text; must be at least 3 characters
  1. ; BLRLEX = (optional) Use Lexicon
  1. ; 0=ICD9 lookup (default)
  1. ; 1=Lexicon lookup
  1. ; BLRVDT = (optional) Visit date in external format
  1. ; BLRGEN = (optional) patient gender
  1. ; BLRECOD = (optional) allow ECodes flag:
  1. ; 0=exclude (default)
  1. ; 1=include
  1. ; 2=ecodes only
  1. ; BLRVCOD = (optional) allow VCodes flag:
  1. ; 0=include
  1. ; 1=exclude
  1. ; 2=vcodes only
  1. ;RETURN:
  1. ; Returned as a list of records in the format:
  1. ; 0 1 2 3
  1. ; Descriptive Text ^ ICD IEN ^ Narrative Text ^ ICD Code
  1. ;
  1. N DIC,X,Y,I,ICD,LEX,RES
  1. N AICDRET,XTLKSAY,REC,DESC,CODE,NARR
  1. N BLRI
  1. N CODESYS
  1. NEW ICDCODSY ; IHS/MSC/MKK - LR*5.2*1034
  1. ;
  1. S BLRLEX=$G(BLRLEX)
  1. ; S BLRVDT=$G(BLRVDT)
  1. S BLRVDT=$G(BLRVDT,$$DT^XLFDT) ; IHS/MSC/MKK - LR*5.2*1034
  1. ;
  1. D ICDCODSY(BLRVDT,.ICDCODSY) ; IHS/MSC/MKK - LR*5.2*1034
  1. ;
  1. S BLRGEN=$G(BLRGEN)
  1. S BLRECOD=$G(BLRECOD)
  1. S BLRVCOD=$G(BLRVCOD)
  1. D ^XBKVAR S X="ERROR^BLRAGUT",@^%ZOSF("TRAP")
  1. S BLRI=0
  1. K ^TMP("BLRAG",$J)
  1. S BLRY=$$TMPGLB^BLRAGUT()
  1. S @BLRY@(0)="ERROR_ID"
  1. ;
  1. I $L($G(BLRINP))<3 D ERR^BLRAGUT("BLRAG07: User name lookup requires at least 3 characters.") Q
  1. S:BLRVDT'="" BLRVDT=$$CVTDATE^BLRAGUT(BLRVDT) ;convert date to FM format
  1. ;
  1. I BLRLEX D
  1. .N HITS
  1. .D LEXLKUP^BLRAGUT(.HITS,BLRINP_"^ICD")
  1. .S HITS=0
  1. .F S HITS=$O(HITS(HITS)) Q:'HITS D
  1. ..S BLRLEX=+HITS(HITS)
  1. ..S X=$$ICDONE^LEXU(BLRLEX)
  1. ..Q:X=""
  1. ..S ICD=$O(^ICD9("BA",X,0))
  1. ..S:'ICD ICD=$O(^ICD9("BA",X_" ",0))
  1. ..D:ICD CHKHITS
  1. E I $G(DUZ("AG"))="I" D
  1. .S DIC="^ICD9(",DIC(0)="TM",X=BLRINP,XTLKSAY=0
  1. .; K ^UTILITY("AICDHITS",$J),^TMP("XTLKHITS",$J)
  1. . K ^TMP("ICD9",$J),^TMP("XTLKHITS",$J) ; IHS/MSC/MKK - LR*5.2*1034
  1. .D ^DIC
  1. .; I Y'=-1 D
  1. .I +Y'=-1 D ; IHS/MSC/MKK - LR*5.2*1034
  1. ..S ICD=+Y
  1. ..D CHKHITS
  1. .E I $G(^DD(80,0,"DIC"))="XTLKDICL" D
  1. ..D XTLKUP
  1. .E D AICDLKUP
  1. .I 'BLRI,$L(BLRINP)>2 D
  1. ..N LK,LN
  1. ..S LK=BLRINP,LN=$L(BLRINP)
  1. ..F D S LK=$O(^ICD9("BA",LK)) Q:$E(LK,1,LN)'=BLRINP
  1. ...S ICD=0
  1. ...F S ICD=$O(^ICD9("BA",LK,ICD)) Q:'ICD D CHKHITS
  1. .K ^UTILITY("AICDHITS",$J),^TMP("XTLKHITS",$J)
  1. E D
  1. .; D FIND^DIC(80,,".01;10","M",BLRINP,,,,,"RES")
  1. .D FINDER(BLRINP,.RES) ; IHS/MSC/MKK - LR*5.2*1034
  1. .I '$O(RES("DILIST",0)) Q
  1. .M ^TMP("XTLKHITS",$J)=RES("DILIST",2)
  1. .D XTLKUP
  1. .K ^TMP("XTLKHITS",$J)
  1. K @BLRY@(0)
  1. ; 0 1 2 3
  1. ; S @BLRY@(0)="DESCRIPTION^ICD_IEN^NARRATIVE^ICD_CODE"
  1. ;
  1. ; ----- BEGIN IHS/MSC/MKK - LR*5.2*1034
  1. ; 0 1 2 3 4
  1. S @BLRY@(0)="DESCRIPTION^ICD_IEN^NARRATIVE^ICD_CODE^CODING_SYSTEM"
  1. ; ----- BEGIN IHS/MSC/MKK - LR*5.2*1034
  1. Q
  1. ;
  1. AICDLKUP S I=0
  1. ; F S I=$O(^UTILITY("AICDHITS",$J,I)) Q:'I D
  1. ; .S ICD=$G(^UTILITY("AICDHITS",$J,I))
  1. ; .D CHKHITS
  1. ;
  1. ; ----- BEGIN IHS/MSC/MKK - LR*5.2*1034
  1. ; AICD*4.0 Stores "Hits" in ^TMP("ICD9",$J not in ^UTILITY("AICDHITS",$J
  1. F S I=$O(^TMP("ICD9",$J,"SEL",I)) Q:I<1 D
  1. . S ICD=+$G(^TMP("ICD9",$J,"SEL",I))
  1. . D CHKHITS
  1. ; ----- END IHS/MSC/MKK - LR*5.2*1034
  1. ;
  1. Q
  1. ;
  1. XTLKUP S I=0
  1. F S I=$O(^TMP("XTLKHITS",$J,I)) Q:'I D
  1. .S ICD=$G(^TMP("XTLKHITS",$J,I))
  1. .D CHKHITS
  1. Q
  1. ;
  1. CHKHITS Q:$D(@BLRY@(0,ICD)) S @BLRY@(0,ICD)=""
  1. S REC=$G(^ICD9(ICD,0))
  1. D ENTRYAUD^BLRUTIL("CHKHITS^BLRAG07 0.0")
  1. ; Q:$P(REC,U,9)
  1. ;
  1. ; ----- BEGIN IHS/MSC/MKK - LR*5.2*1034
  1. ; AICD 4.0 modified File 80. There is no longer an INACTIVE FLAG.
  1. ; STATUS is now a multiple. Note that STATUS=1 is ACTIVE; STATUS=0 is INACTIVE.
  1. Q:'$P($G(^ICD9(ICD,66,+$O(^ICD9(ICD,66,"A"),-1),0)),"^",2) ; Most Current Status
  1. ; ----- END IHS/MSC/MKK - LR*5.2*1034
  1. ;
  1. I 'BLRECOD,$E(REC)="E" Q
  1. I BLRECOD=2,$E(REC)'="E" Q
  1. I BLRVCOD=1,$E(REC)="V" Q
  1. I BLRVCOD=2,$E(REC)'="V" Q
  1. ;
  1. D ENTRYAUD^BLRUTIL("CHKHITS^BLRAG07 3.0")
  1. ;
  1. ; I BLRVDT,$P(REC,U,11),$$FMDIFF^XLFDT(BLRVDT,$P(REC,U,11))>-1 Q
  1. Q:$$INACTDT(ICD,BLRVDT) ; IHS/MSC/MKK - LR*5.2*1034
  1. ;
  1. I $L(BLRGEN),$P(REC,U,10)'="",BLRGEN'=$P(REC,U,10) Q
  1. ;
  1. ; S NARR=$G(^ICD9(ICD,1)),CODE=$P(REC,U),DESC=$P(REC,U,3)
  1. ;
  1. ; ----- BEGIN IHS/MSC/MKK - LR*5.2*1034
  1. NEW CODE,NARR,DESC,CODESYS,ICD10ID,IMPLDATE
  1. S CODE=$P(REC,U)
  1. S NARR=$$DESCICD(ICD,$G(BLRVDT))
  1. S DESC=$$DIAGICD(ICD,$G(BLRVDT))
  1. S CODESYS=+$$GET1^DIQ(80,ICD,"CODING SYSTEM","I")
  1. Q:$D(ICDCODSY(CODESYS))<1
  1. ; ----- END IHS/MSC/MKK - LR*5.2*1034
  1. ;
  1. S BLRI=BLRI+1
  1. ; S @BLRY@(BLRI)=DESC_U_ICD_U_NARR_U_CODE
  1. S @BLRY@(BLRI)=DESC_U_ICD_U_NARR_U_CODE_U_CODESYS ; IHS/MSC/MKK - LR*5.2*1034
  1. Q
  1. ;
  1. ORL(BLRY,BLRINP) ;return order reasons from file 100.03
  1. ; rpc: BLR ORDER REASON LKUP
  1. ; BLRINP = (optional) Partial name lookup - free text
  1. ; Returned as a list of records in the format:
  1. ; 0 1
  1. ; IEN ^ NAME
  1. ; If the DEFAULT DC REASON from the LABORATORY SITE file 69.9 is
  1. ; defined, it will be the 1st entry in the return.
  1. N BLRDEF,BLRI,BLRIEN,BLRJ
  1. S BLRINP=$G(BLRINP)
  1. D ^XBKVAR S X="ERROR^BLRAGUT",@^%ZOSF("TRAP")
  1. S BLRI=0
  1. K ^TMP("BLRAG",$J)
  1. S BLRY=$$TMPGLB^BLRAGUT()
  1. ; 0 1
  1. S @BLRY@(0)="IEN^NAME"
  1. S BLRDEF=$P($G(^LAB(69.9,1,"OR")),"^",2)
  1. I BLRDEF'="" S BLRI=BLRI+1 S @BLRY@(BLRI)=BLRDEF_U_$P($G(^ORD(100.03,BLRDEF,0)),U,1) ;set default DC reason as first entry
  1. S BLRJ=$S(BLRINP'="":$$PREP^BLRAGUT(BLRINP),1:"") F S BLRJ=$O(^ORD(100.03,"B",BLRJ)) Q:BLRJ="" Q:BLRINP'[$E(BLRJ,1,$L(BLRINP)) D
  1. .S BLRIEN=$O(^ORD(100.03,"B",BLRJ,0))
  1. .S BLRI=BLRI+1 S @BLRY@(BLRI)=BLRIEN_U_BLRJ
  1. Q
  1. ;
  1. ; ----- BEGIN IHS/MSC/MKK - LR*5.2*1034
  1. ; AICD 4.0 modified ICD9 global. Need new functions to retrieve data.
  1. ;
  1. FINDER(BLRINP,RES) ; EP - Mimic FIND^DIC call
  1. NEW ICD,ICDSTR
  1. ;
  1. K RES
  1. ;
  1. S ICDSTR=$$ICDDX^ICDEX(BLRINP)
  1. Q:+ICDSTR<1
  1. ;
  1. S RES("DILIST",0)="1^*^0^"
  1. S RES("DILIST",0,"MAP")=".01^10"
  1. S RES("DILIST",1,1)=$P(ICDSTR,"^",2)
  1. S RES("DILIST",2,1)=+ICDSTR
  1. S RES("DILIST","ID",1,.01)=$P(ICDSTR,"^",2)
  1. S ICD=+ICDSTR
  1. S RES("DILIST","ID",1,10)=$$DESCICD(ICD)
  1. Q
  1. ;
  1. DESCICD(ICD,BLRVDT) ; EP - DESCRIPTION is now a multiple
  1. NEW DESCDATE,DESCNUM,DESCRIP
  1. ;
  1. S DESCRIP=$G(^ICD9(ICD,68,+$O(^ICD9(ICD,68,"A"),-1),1)) ; Most Current Description
  1. ;
  1. I +$G(BLRVDT) D ; If there is date, retrieve description current as of that date
  1. . S BLRVDT=$$FMADD^XLFDT(BLRVDT,-1) ; "Back up" 1 day to account for $ORDER function
  1. . S DESCDATE=$O(^ICD9(ICD,68,"B",BLRVDT))
  1. . Q:DESCDATE<1
  1. . ;
  1. . S DESCNUM=$O(^ICD9(ICD,68,"B",DESCDATE,0))
  1. . Q:DESCNUM<1
  1. . ;
  1. . S DESCRIP=$G(^ICD9(ICD,68,DESCNUM,1))
  1. ;
  1. Q DESCRIP
  1. ;
  1. DIAGICD(ICD,BLRVDT) ; EP - DIAGNOSIS is now a multiple
  1. NEW DIAGDATE,DIAGNUM,DIAGDESC
  1. ;
  1. S DIAGDESC=$P($G(^ICD9(ICD,67,+$O(^ICD9(ICD,67,"A"),-1),0)),"^",2) ; Most Current Diagnosis
  1. ;
  1. I +$G(BLRVDT) D ; If there is date, retrieve diagnosis current as of that date
  1. . S BLRVDT=$$FMADD^XLFDT(BLRVDT,-1) ; "Back up" 1 day to account for $ORDER function
  1. . S DIAGDATE=$O(^ICD9(ICD,67,"B",BLRVDT))
  1. . Q:DIAGDATE<1
  1. . ;
  1. . S DIAGNUM=$O(^ICD9(ICD,67,"B",DIAGDATE,0))
  1. . Q:DIAGNUM<1
  1. . ;
  1. . S DIAGDESC=$P($G(^ICD9(ICD,67,DIAGNUM,0)),"^",2)
  1. ;
  1. Q DIAGDESC
  1. ;
  1. INACTDT(ICD,BLRVDT) ; EP - STATUS EFFECTIVE DATE is part of the STATUS Multiple.
  1. Q:$G(BLRVDT)<1 0 ; If no date, then cannot check STATUS EFFECTIVE DATE ==> Not Inactive
  1. ;
  1. NEW STATUS,STSDATE,STSNUM
  1. ;
  1. S BLRVDT=$$FMADD^XLFDT(BLRVDT,-1) ; "Back up" 1 day to account for $ORDER function
  1. S STSDATE=$O(^ICD9(ICD,66,"B",BLRVDT))
  1. Q:STSDATE<1 0 ; If no STATUS EFFECTIVE DATE ==> Not Inactive
  1. ;
  1. Q:STSDATE>BLRVDT 0 ; If STATUS EFFECTIVE DATE > BLRVDT, then cannot check STATUS ==> Not Inactive
  1. ;
  1. S STSNUM=$O(^ICD9(ICD,66,"B",STSDATE,0))
  1. Q:STSNUM<1 0 ; If no STATUS ==> Not Inactive
  1. ;
  1. S STATUS=+$G(^ICD9(ICD,66,STSNUM,0))
  1. Q $S(STATUS=1:0,1:1) ; STATUS = 1 ==> ACTIVE; STATUS = 0 ==> INACTIVE
  1. ;
  1. ; The following routine sets the ICDCODSY array based upon the values
  1. ; in the ICD CODING SYSTEMS file, using the BLRVDT.
  1. ICDCODSY(BLRVDT,ICDCODSY) ; EP - Set the ICDCODSY array
  1. NEW CODESYS,CODESYSA,IEN,IMPLDATE,TMP
  1. ;
  1. K ICDCODSY
  1. ;
  1. ; Sort by implementation date
  1. S IEN=.9999999
  1. F S IEN=$O(^ICDS(IEN)) Q:IEN<1 D
  1. . S IMPLDATE=$$GET1^DIQ(80.4,IEN,"IMPLEMENTATION DATE","I")
  1. . S CODESYSA=$$GET1^DIQ(80.4,IEN,"CODING SYSTEM ABBREVIATION")
  1. . S CODESYS=$O(^ICDS("C",CODESYSA,0))
  1. . S TMP(IMPLDATE,IEN)=CODESYS
  1. ;
  1. ; Find the implementation date less than or equal to BLRVDT
  1. S IMPLDATE="A"
  1. F S IMPLDATE=$O(TMP(IMPLDATE),-1) Q:IMPLDATE<1!($D(ICDCODSY)) D
  1. . I IMPLDATE'>BLRVDT D
  1. .. S IEN=0
  1. .. F S IEN=$O(TMP(IMPLDATE,IEN)) Q:IEN<1 S ICDCODSY(+$G(TMP(IMPLDATE,IEN)))=""
  1. Q
  1. ;
  1. ; TESTIT
  1. TESTIT ; EP - Interactively test ICDLKUP call
  1. NEW (DILOCKTM,DISYS,DT,DTIME,DUZ,IO,IOBS,IOF,IOM,ION,IOS,IOSL,IOST,IOT,IOXY,U,XPARSYS,XQXFLG)
  1. ;
  1. K ^TMP("BLRAG")
  1. ;
  1. S HEADER(1)="Interactively Test ICDLKUP^BLRAG07"
  1. ;
  1. D HEADERDT^BLRGMENU
  1. ;
  1. D ^XBFMK
  1. S DIR(0)="DO"
  1. S DIR("A")="BLRVDT (Date passed to $$ICDDX^ICDEX)"
  1. S DIR("B")=$$DT^XLFDT
  1. D ^DIR
  1. Q:+$G(DIRUT) $$BADSTUFN("No/Quit/Invalid Entry.")
  1. ;
  1. S:+Y BLRVDT=+Y
  1. S BLRVDT=$G(BLRVDT,$$DT^XLFDT)
  1. ;
  1. S HEADER(2)="Search Date:"_$$FMTE^XLFDT(BLRVDT,"5DZ")
  1. ;
  1. S BLRLEX=$G(BLRLEX)
  1. S BLRGEN=$G(BLRGEN)
  1. S BLRECOD=$G(BLRECOD)
  1. S BLRVCOD=$G(BLRVCOD)
  1. ;
  1. D HEADERDT^BLRGMENU
  1. ;
  1. D ^XBFMK
  1. S DIR(0)="FO"
  1. S DIR("A")="Enter ICD Lookup String"
  1. D ^DIR
  1. Q:+$G(DIRUT) $$BADSTUFN("No/Quit/Invalid Entry.")
  1. ;
  1. S BLRINP=$G(X)
  1. D ICDLKUP(.BLRY,BLRINP,,BLRVDT)
  1. ;
  1. S HEADER(3)=$$CJ^XLFSTR("Lookup String:"_BLRINP,IOM)
  1. S HEADER(4)=$$CJ^XLFSTR("Data Stored at "_BLRY,IOM)
  1. S HEADER(5)=" "
  1. S $E(HEADER(6),19)="CODE"
  1. S HEADER(7)="BLRI"
  1. S $E(HEADER(7),9)="ICD"
  1. S $E(HEADER(7),19)="SYS"
  1. S $E(HEADER(7),25)="Description"
  1. S (CNT,PG)=0
  1. S MAXLINES=IOSL-4,LINES=MAXLINES+10
  1. S QFLG="NO"
  1. ;
  1. S BLRI=0
  1. F S BLRI=$O(@BLRY@(BLRI)) Q:BLRI<1!(QFLG="Q") D
  1. . I LINES>MAXLINES D HEADERPG^BLRGMENU(.PG,.QFLG,"NO") Q:QFLG="Q"
  1. . S STR=$G(@BLRY@(BLRI))
  1. . W $J(BLRI,4),?8,$P(STR,"^",4),?19,$P(STR,"^",5)
  1. . D LINEWRAP^BLRGMENU(24,$P(STR,"^"),56)
  1. . W !
  1. . S LINES=LINES+1
  1. . S CNT=CNT+1
  1. ;
  1. D PRESSKEY^BLRGMENU(9)
  1. ;
  1. Q
  1. ;
  1. BADSTUFN(MSG) ; EP - Display Message and Quit with ""
  1. W !!,?4,MSG," Routine Ends."
  1. D PRESSKEY^BLRGMENU(9)
  1. Q ""
  1. ;
  1. ; ----- END IHS/MSC/MKK - LR*5.2*1034