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

BLRRLHL.m

Go to the documentation of this file.
  1. BLRRLHL ;cmi/anch/maw - BLR HL7 Utilities for Reference Lab ;27-Jul-2015 06:10;MKK
  1. ;;5.2;IHS LABORATORY;**1027,1028,1031,1034,1036**;NOV 01, 1997;Build 10
  1. Q
  1. ;
  1. CLIENT N BLRCLCNT
  1. I +$G(BLRAGUI) Q $$CLIENTG^BLRRLEDI(LRORD,LRUID)
  1. S BLRCLCNT=$$CLCNT(DUZ(2))
  1. I $G(BLRCLCNT)=1 D
  1. . S BLRRL("CLIENT")=$O(^BLRSITE($S($G(BLRALTDZ):BLRALTDZ,1:DUZ(2)),"RLCA","B",""))
  1. . I $G(BLRRL("CLIENT"))="" S BLRRL("CLIENT")=$P($G(^BLRRL(BLRRL("RL"),0)),U,13)
  1. I $G(BLRCLCNT)>1 D
  1. . W !,"Please select the appropriate account number for this accession"
  1. . N BLRRLD
  1. . S BLRRLD=0 F S BLRRLD=$O(BLRCLA(BLRRLD)) Q:'BLRRLD D
  1. .. W !,BLRRLD_") "_$G(BLRCLA(BLRRLD))
  1. . K DIR
  1. . S DIR(0)="N^1:"_$G(BLRCLCNT),DIR("A")="Which account number for this accession "
  1. . D ^DIR
  1. . Q:$D(DIRUT)
  1. . S BLRRL("CLIENT")=$G(BLRCLA(+Y))
  1. S BLRRLCLT=BLRRL("CLIENT")
  1. I $G(BLRRL("CLIENT"))="" G CLIENT
  1. S BLRRLCLA=BLRRLCLT
  1. ;cmi/maw 2/25/2008 end of mods for multiple account numbers
  1. ;cmi/maw 10/31/07 ask what type of billing here
  1. ;cmi/maw 10/31/07 end of mods
  1. Q
  1. ;
  1. CLCNT(DZ2) ;-- get the number of client account numbers to see if we need to prompt
  1. N BLRRLDA,BLRCLC
  1. S BLRCLC=0
  1. S BLRRLDA=0 F S BLRRLDA=$O(^BLRSITE($S($G(BLRALTDZ):BLRALTDZ,1:DZ2),"RLCA","B",BLRRLDA)) Q:BLRRLDA="" D
  1. . S BLRCLC=BLRCLC+1
  1. . S BLRCLA(BLRCLC)=BLRRLDA
  1. Q +$G(BLRCLC)
  1. ;
  1. BILL ;-- this is where we ask billing type
  1. I '$G(BLRRLASK),BLRRLCNT>0 D Q
  1. . I $E($G(BLRRLBTP),1,1)="P" D PATBILL(BLRTSTDA) Q
  1. . Q:$E($G(BLRRLBTP),1,1)'="T"
  1. . S BLRRL("BILL TYPE")="T"
  1. . D SETINS
  1. . ;D SETDX^BLRRLHL2 ;ihs/cmi/maw p1034
  1. S DIR(0)="S^C:Client;T:Third Party;P:Patient"
  1. S DIR("A")="Which Party is Responsible for Billing: "
  1. S DIR("B")=$P($G(^BLRSITE($S($G(BLRALTDZ):BLRALTDZ,1:DUZ(2)),"RL")),U,15)
  1. D ^DIR
  1. ; S BLRRL("BILL TYPE")=Y(0)
  1. ; I $D(DIRUT) S BLRRL("BILL TYPE")="Client"
  1. ; ----- BEGIN IHS/MSC/MKK - LR*5.2*1036
  1. I $D(DIRUT) S BLRRL("BILL TYPE")="Client"
  1. E S BLRRL("BILL TYPE")=$G(Y(0))
  1. ; ----- END IHS/MSC/MKK - LR*5.2*1036
  1. K DIR
  1. I $E(BLRRL("BILL TYPE"),1,1)="T" D
  1. . K DXCNT,INSCNT
  1. . S DXCNT=1
  1. . S INSCNT=1
  1. . ;D DX^BLRRLEDI(LRORD) ;ihs/cmi/maw - LR*5.2*1034
  1. . ;D DX2^BLRRLHL2(BLRRL("PAT")) ;ihs/cmi/maw - LR*5.2*1034
  1. . D INS(BLRRL("PAT"),0)
  1. ;I $E(BLRRL("BILL TYPE"),1,1)="T",$G(BLRRL("DX"))="" D G BILL
  1. I $E(BLRRL("BILL TYPE"),1,1)="T",'$O(^BLRRLO(BLRO,1,"B",0)) D G BILL ;ihs/cmi/maw p1034
  1. . W !,"You must select an ICD Diagnosis if Bill Type is Third Party"
  1. . D DX^BLRRLEDI(LRORD)
  1. I $E(BLRRL("BILL TYPE"),1,1)="T",$G(BLRRL("INSE"))="" D G BILL
  1. . W !,"You must select an Insurer if Bill Type is Third Party"
  1. I $E(BLRRL("BILL TYPE"),1,1)="P" D PATBILL(BLRTSTDA)
  1. S BLRRLCNT=BLRRLCNT+1
  1. S BLRRLBTP=BLRRL("BILL TYPE")
  1. Q
  1. ;
  1. DX(PAT) ;-- get the diagnosis for billing
  1. D DX2^BLRRLHL2(PAT) ; IHS/MSC/MKK - LR*5.2*1034
  1. Q
  1. ;
  1. INS(PAT,FLG) ;-- lets get a list of selectable insurances for the patient and if set for auto select pick the first one in sequence
  1. ;we must also setup the BLRRL insurance array and diagnosis array for GIS
  1. S DFN=PAT
  1. D ^AGINS
  1. I '$D(AGINS(1)),$E($G(BLRRL("BILL TYPE")),1,1)="T" D Q ;p1034
  1. . W !,"Patient has No Insurance on file, changing Bill Type to Client"
  1. . S BLRRL("BILL TYPE")="Client"
  1. . S BLRRL("INSCOV")=BLRRL("BILL TYPE")
  1. ;W !,"Now Applying Sequenced Insurer to Accession"
  1. ;cmi/maw 1/22/2010 readded ask of insurance if flag set for no sequencing
  1. I $P($G(^BLRSITE($S($G(BLRALTDZ):BLRALTDZ,1:DUZ(2)),"RL")),U,21) D Q ;get flag for insurance
  1. . I '$G(FLG) W !,"Now applying Sequenced Insurer to Accession"
  1. . S BLRINS=1
  1. . D SETINS
  1. I $G(FLG) S BLRINS=1 G SETINS
  1. N BLRRLDA,BLRRLCN
  1. S BLRRLCN=0
  1. S BLRRLDA=0 F S BLRRLDA=$O(AGINS(BLRRLDA)) Q:'BLRRLDA D
  1. . S BLRRLCN=BLRRLCN+1
  1. . W !,BLRRLCN_")"_$P(AGINS(BLRRLDA),U)
  1. . W ?30,"Policy #: "_$P(AGINS(BLRRLDA),U,9)
  1. . W ?50,"Elg/Exp Date: "_$S($P(AGINS(BLRRLDA),U,5)>0:$$FMTE^XLFDT($P(AGINS(BLRRLDA),U,5)),1:"")_"/"_$S($P(AGINS(BLRRLDA),U,6)>0:$$FMTE^XLFDT($P(AGINS(BLRRLDA),U,6)),1:"")
  1. S DIR(0)="N^1:"_$G(BLRRLCN),DIR("A")="Select the insurer for this accession: "
  1. D ^DIR
  1. Q:$D(DIRUT)
  1. Q:Y<0
  1. S BLRINS=+Y
  1. ;cmi/maw 1/22/2010 end of add of ask of insurer
  1. SETINS I '$G(PAT) S PAT=DFN
  1. I $G(BLRRL(BLRTSTDA,"CDT")) S BLRRLCDT=BLRRL(BLRTSTDA,"CDT")
  1. D SEQINS(.AGINS,PAT,$G(BLRRLCDT))
  1. I '$D(BLRSEQ(1)) D Q
  1. . W !,"Patient Insurance has not been Sequenced, changing Bill Type to Client"
  1. . S BLRRL("BILL TYPE")="Client"
  1. . S BLRRL("INSCOV")=BLRRL("BILL TYPE")
  1. K AGINS
  1. M AGINS=BLRSEQ
  1. K BLRSEQ
  1. S BLRINS=1
  1. I '$G(FLG) D UPINS^BLRRLEDI(LRORD,LRUID,PAT,$TR(AGINS(BLRINS),"^","~")) ;ihs/cmi/maw p1034
  1. S BLRRL(BLRTSTDA,"INSE")=$P(AGINS(BLRINS),U)
  1. S BLRRL("INSE")=$P(AGINS(BLRINS),U)
  1. S BLRRL(BLRTSTDA,"INSI")=$P(AGINS(BLRINS),U,2)
  1. I '$G(BLRRL(BLRTSTDA,"INSI")) D Q
  1. . W !,"The entry for "_$G(BLRRL("INSE"))_" for this patient does not have a valid pointer to the INSURER file, this needs to be fixed to proceed"
  1. . S BLRRL("BILL TYPE")="Patient"
  1. . S BLRRL("INSCOV")=BLRRL("BILL TYPE")
  1. S BLRRL(BLRTSTDA,"INSCOV")=$E($G(BLRRL("BILL TYPE")),1,1)
  1. S BLRRL(BLRTSTDA,"INSPH")=$P(AGINS(BLRINS),U,7)
  1. S BLRRL(BLRTSTDA,"INSGRP")=$P(AGINS(BLRINS),U,20)
  1. S BLRRL(BLRTSTDA,"INSREL")=$S($P(AGINS(BLRINS),U,16):$P($G(^AUTTRLSH($P(AGINS(BLRINS),U,16),0)),U),1:"")
  1. S BLRRL(BLRTSTDA,"INSRELE")=BLRRL(BLRTSTDA,"INSREL")
  1. I $G(BLRRL(BLRTSTDA,"INSREL"))]"" D
  1. . I BLRRL(BLRTSTDA,"INSREL")="SELF" S BLRRL(BLRTSTDA,"INSREL")=$S(BLRRL("RLE")["QUEST":2,1:1) Q
  1. . I BLRRL(BLRTSTDA,"INSREL")="SPOUSE" S BLRRL(BLRTSTDA,"INSREL")=$S(BLRRL("RLE")["QUEST":2,1:2),BLRRL(BLRTSTDA,"INSRELE")="SPOUSE" Q
  1. . I BLRRL(BLRTSTDA,"INSREL")="HUSBAND" S BLRRL(BLRTSTDA,"INSREL")=$S(BLRRL("RLE")["QUEST":2,1:2),BLRRL(BLRTSTDA,"INSRELE")="SPOUSE" Q
  1. . I BLRRL(BLRTSTDA,"INSREL")="WIFE" S BLRRL(BLRTSTDA,"INSREL")=$S(BLRRL("RLE")["QUEST":2,1:2),BLRRL(BLRTSTDA,"INSRELE")="SPOUSE" Q
  1. . S BLRRL(BLRTSTDA,"INSREL")=$S(BLRRL("RLE")["QUEST":8,1:3),BLRRL(BLRTSTDA,"INSRELE")="OTHER" Q
  1. I $G(BLRRL(BLRTSTDA,"INSREL"))="" S BLRRL(BLRTSTDA,"INSREL")=$S(BLRRL("RLE")["QUEST":1,1:1),BLRRL(BLRTSTDA,"INSRELE")="SELF"
  1. S BLRRL(BLRTSTDA,"INSPOL")=$P(AGINS(BLRINS),U,9)
  1. S BLRRL(BLRTSTDA,"INSELG")=$P(AGINS(BLRINS),U,5)
  1. S BLRRL(BLRTSTDA,"INSEXP")=$P(AGINS(BLRINS),U,6)
  1. S BLRRL(BLRTSTDA,"INSPLN")=$S(BLRRL(BLRTSTDA,"INSE")["MEDICARE":"MC",BLRRL(BLRTSTDA,"INSE")["MEDICAID":"MD",1:"PI")
  1. S BLRRL(BLRTSTDA,"INSTYP")=$P($G(^AUTNINS(BLRRL(BLRTSTDA,"INSI"),2)),U)
  1. I BLRRL(BLRTSTDA,"INSI")]"" D
  1. . ;S BLRRL(BLRTSTDA,"INSID")=$TR($P($G(^AUTNINS(BLRRL(BLRTSTDA,"INSI"),2)),U,10),"~") ;cmi/maw 2/17/2009 changed to piece 10 external group name from external id 2
  1. . S BLRRL(BLRTSTDA,"INSID")=$TR($P($G(^AUTNINS(BLRRL(BLRTSTDA,"INSI"),2)),U,19),"~") ;cmi/maw 2/17/2009 changed to piece 19 external ID 3
  1. . S BLRRL(BLRTSTDA,"INSCNME")=$P($G(^AUTNINS(BLRRL(BLRTSTDA,"INSI"),0)),U) ;insurance company name
  1. . S BLRRL(BLRTSTDA,"INSADD")=$$INSADD(BLRRL(BLRTSTDA,"INSI"))
  1. . S BLRRL(BLRTSTDA,"INSADDE")=$TR($P(BLRRL(BLRTSTDA,"INSADD"),U),U," ")_"~"_$TR($P(BLRRL(BLRTSTDA,"INSADD"),U,3,99),U," ")
  1. . S BLRRL(BLRTSTDA,"INSPHO")=$P($G(^AUTNINS(BLRRL(BLRTSTDA,"INSI"),0)),U,6)
  1. . S BLRRL(BLRTSTDA,"INSTYP")=$P($G(^AUTNINS(BLRRL(BLRTSTDA,"INSI"),2)),U)
  1. S BLRRL(BLRTSTDA,"PATADD")=$$PATADD(PAT)
  1. S BLRRL(BLRTSTDA,"PATADDE")=$TR($P($$PATADD(PAT),U),U," ")_"~"_$TR($P($$PATADD(PAT),U,3,99),U," ")
  1. S BLRRL(BLRTSTDA,"INSEMP")=$$GET1^DIQ(2,PAT,.3111)
  1. S BLRRL(BLRTSTDA,"INSNOI")=$$HLNAME^XLFNAME($P(^DPT(PAT,0),U))
  1. S BLRRL(BLRTSTDA,"INSNOIE")=$P(^DPT(PAT,0),U)
  1. ;next set of lines for hl7 in1 segments
  1. D HL7
  1. S BLRRL(BLRTSTDA,"GT1PHI")=$P(AGINS(BLRINS),U,7)
  1. I $E(BLRRL(BLRTSTDA,"GT1PHI"),1,1)="P" D Q
  1. . S BLRRL(BLRTSTDA,"GT1NM")=$$HLNAME^XLFNAME($P(^AUPN3PPH($E(BLRRL(BLRTSTDA,"GT1PHI"),2,99),0),U))
  1. . S BLRRL(BLRTSTDA,"GT1ADD")=$$GT1ADD($E(BLRRL(BLRTSTDA,"GT1PHI"),2,99))
  1. . S BLRRL(BLRTSTDA,"GT1PHO")=$P($G(^AUPN3PPH($E(BLRRL(BLRTSTDA,"GT1PHI"),2,99),0)),U,14)
  1. . D INSTYP(BLRTSTDA)
  1. . S BLRRL(BLRTSTDA,"GT1ADDE")=$TR($P($G(BLRRL(BLRTSTDA,"GT1ADD")),U),U," ")_"~"_$TR($P($G(BLRRL(BLRTSTDA,"GT1ADD")),U,3,99),U," ")
  1. . S BLRRL(BLRTSTDA,"GT1NME")=$TR($G(BLRRL(BLRTSTDA,"GT1NM")),U," ")
  1. I BLRRL(BLRTSTDA,"GT1PHI")]"" D
  1. . S BLRRL(BLRTSTDA,"GT1NM")=$$HLNAME^XLFNAME($P(^DPT(PAT,0),U))
  1. . S BLRRL(BLRTSTDA,"GT1ADD")=$$PATADD(PAT)
  1. . S BLRRL(BLRTSTDA,"GT1PHO")=$P($G(^DPT(PAT,.131)),U)
  1. I $G(BLRRL(BLRTSTDA,"GT1NM"))="" D
  1. . S BLRRL(BLRTSTDA,"GT1NM")=BLRRL(BLRTSTDA,"INSNOI")
  1. . S BLRRL(BLRTSTDA,"GT1ADD")=BLRRL(BLRTSTDA,"PATADD")
  1. D INSTYP(BLRTSTDA)
  1. S BLRRL(BLRTSTDA,"GT1ADDE")=$TR($P($G(BLRRL(BLRTSTDA,"GT1ADD")),U),U," ")_"~"_$TR($P($G(BLRRL(BLRTSTDA,"GT1ADD")),U,3,99),U," ")
  1. S BLRRL(BLRTSTDA,"GT1NME")=$TR($G(BLRRL(BLRTSTDA,"GT1NM")),U," ")
  1. Q
  1. ;
  1. INSTYP(TDA) ;-- get insurance type
  1. I $G(BLRRL(TDA,"INSTYP"))]"" D
  1. . I BLRRL(TDA,"INSTYP")="H" S BLRRL(TDA,"INSTYP")="HMO"
  1. . I BLRRL(TDA,"INSTYP")="MD" S BLRRL(TDA,"INSTYP")="Medicare"
  1. . I BLRRL(TDA,"INSTYP")="M" S BLRRL(TDA,"INSTYP")="Medicare"
  1. . I BLRRL(TDA,"INSTYP")="P" S BLRRL(TDA,"INSTYP")="Private Insurance"
  1. . I BLRRL(TDA,"INSTYP")="D" S BLRRL(TDA,"INSTYP")="Medicaid"
  1. . I BLRRL(TDA,"INSTYP")="R" S BLRRL(TDA,"INSTYP")="Medicare"
  1. . I BLRRL(TDA,"INSTYP")="MH" S BLRRL(TDA,"INSTYP")="Medicaid"
  1. I $G(BLRRL(TDA,"INSTYP"))="" S BLRRL(TDA,"INSTYP")="Private Insurance"
  1. S BLRRL("INSTYP")=$G(BLRRL(TDA,"INSTYP"))
  1. Q
  1. ;
  1. PATBILL(TSTDA) ;-- return data for the patient bill
  1. S BLRRL(TSTDA,"GT1NM")=$$HLNAME^XLFNAME($P(^DPT(BLRRL("PAT"),0),U))
  1. S BLRRL(TSTDA,"GT1NME")=$P(^DPT(BLRRL("PAT"),0),U)
  1. S BLRRL(TSTDA,"GT1ADD")=$$PATADD(BLRRL("PAT"))
  1. S BLRRL(TSTDA,"GT1ADDE")=$TR($P($$PATADD(BLRRL("PAT")),U),U," ")_"~"_$TR($P($$PATADD(BLRRL("PAT")),U,3,99),U," ")
  1. S BLRRL(TSTDA,"GT1PHO")=$P($G(^DPT(BLRRL("PAT"),.13)),U)
  1. S BLRRL(TSTDA,"INSCOV")="P"
  1. S BLRRL("INSE")="Patient Bill"
  1. Q
  1. ;
  1. INSADD(INSI) ;-- return the insurance address is HL7 format
  1. N ADD,DATA,STR,CTY,ST,ZIP
  1. S DATA=$G(^AUTNINS(INSI,0))
  1. S STR=$P(DATA,U,2)
  1. S CTY=$P(DATA,U,3)
  1. S ST=$S($P(DATA,U,4):$P($G(^DIC(5,$P(DATA,U,4),0)),U,2),1:"")
  1. S ZIP=$P(DATA,U,5)
  1. S ADD=STR_U_U_CTY_U_ST_U_ZIP
  1. Q ADD
  1. ;
  1. PATADD(PAT) ;-- return insured address
  1. N ADD,DATA,STR,CTY,ST,ZIP
  1. S DATA=$G(^DPT(PAT,.11))
  1. S STR=$P(DATA,U)
  1. S CTY=$P(DATA,U,4)
  1. S ST=$S($P(DATA,U,5):$P($G(^DIC(5,$P(DATA,U,5),0)),U,2),1:"")
  1. S ZIP=$P(DATA,U,6)
  1. S ADD=STR_U_U_CTY_U_ST_U_ZIP
  1. Q ADD
  1. ;
  1. GT1ADD(PH) ;-- return insured address
  1. N ADD,DATA,STR,CTY,ST,ZIP
  1. S DATA=$G(^AUPN3PPH(PH,0))
  1. S STR=$P(DATA,U,9)
  1. S CTY=$P(DATA,U,11)
  1. S ST=$S($P(DATA,U,12):$P($G(^DIC(5,$P(DATA,U,12),0)),U,2),1:"")
  1. S ZIP=$P(DATA,U,13)
  1. S ADD=STR_U_U_CTY_U_ST_U_ZIP
  1. Q ADD
  1. ;
  1. HL7 ;-- setup hl7 lines
  1. N HLDA
  1. S HLDA=0 F S HLDA=$O(AGINS(HLDA)) Q:'HLDA D
  1. . ; D HLSET(HLDA)
  1. . D HLSET^BLRRLHL2(HLDA) ; IHS/MSC/MKK - LR*5.2*1034
  1. Q
  1. ;
  1. ;
  1. SEQINS(BINS,PT,RLCDT) ;-- lets go through sequencing insurers
  1. Q:'$O(BINS(""))
  1. N BDA
  1. S BDA=0 F S BDA=$O(BINS(BDA)) Q:'BDA D
  1. . N BINI,SEQ,POLI
  1. . S BINI=$P(BINS(BDA),U,2)
  1. . S POLI=$P(BINS(BDA),U,9)
  1. . S SEQ=$$FNDSEQ(BINI,PT,POLI,RLCDT)
  1. . Q:'SEQ
  1. . S BLRSEQ(SEQ)=$G(BINS(BDA))
  1. Q
  1. ;
  1. FNDSEQ(BN,PTI,POL,CDT) ;-- find the category prioritization
  1. N SQDA,EFF,SQPRI
  1. S EFF=$O(^AUPNICP("EFF",PTI,"M",CDT),-1)
  1. I '$G(EFF) Q ""
  1. S SQDA=0 F S SQDA=$O(^AUPNICP("EFF",PTI,"M",EFF,SQDA)) Q:'SQDA!($G(SQPRI)) D
  1. . N SQDATA,SQPAT,SQPOL,SQINS
  1. . S SQDATA=$G(^AUPNICP(SQDA,0))
  1. . S SQPAT=$P(SQDATA,U,2)
  1. . S SQINS=$P(SQDATA,U,3)
  1. . S SQPOL=$P(SQDATA,U,10)
  1. . Q:SQPAT'=PTI
  1. . Q:SQINS'=BN
  1. . Q:SQPOL'=POL
  1. . S SQPRI=$P(SQDATA,U,5)
  1. Q $G(SQPRI)
  1. ;