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

BHLX835.m

Go to the documentation of this file.
  1. BHLX835 ; cmi/flag/maw - BHL Parse X12 835 into readable format ; [ 10/10/2002 9:28 AM ]
  1. ;;3.01;BHL IHS Interfaces with GIS;**6**;OCT 15, 2002
  1. ;
  1. ;
  1. ;
  1. ;this routine will parse the incoming message into readable format
  1. ;
  1. MAIN ;EP - this is the main routine driver
  1. K ^BHLX835($J)
  1. S BHLNOST=1
  1. D ^XBKVAR
  1. I $G(FS)="" S FS="*"
  1. D PRS
  1. D FL
  1. D UPD
  1. D EOJ
  1. Q
  1. ;
  1. PRS ;-- parse the message
  1. S (SCNT,CNT,LCNT)=0
  1. S BHLXUIF=$G(UIF)
  1. Q:BHLXUIF=""
  1. S BHLXDA=0 F S BHLXDA=$O(^INTHU(BHLXUIF,3,BHLXDA)) Q:'BHLXDA D
  1. . S DATA=$G(^INTHU(BHLXUIF,3,BHLXDA,0))
  1. . S SEG=$P(DATA,FS)
  1. . Q:SEG["|"
  1. . I SEG="ST" S CNT=CNT+1,SCNT=0
  1. . I SEG="LX" S LCNT=LCNT+1
  1. . S SCNT=SCNT+1
  1. . S SEGDATA=$P($P($G(DATA),FS,2,9999),"|")
  1. . S ^BHLX835($J,CNT,$S(LCNT=0:1,1:LCNT),SCNT,SEG)=$G(SEGDATA)
  1. K SEG,SEGDATA,CNT,SCNT,LCNT
  1. Q
  1. ;
  1. FL ;-- loop through bhlx835 and get data
  1. S XCNT=0
  1. S BHLXSDA=0 F S BHLXSDA=$O(^BHLX835($J,BHLXSDA)) Q:'BHLXSDA D
  1. . S XCNT=XCNT+1
  1. . S BHLXLDA=0 F S BHLXLDA=$O(^BHLX835($J,BHLXSDA,BHLXLDA)) Q:'BHLXLDA D
  1. .. S BHLXCDA=0 F S BHLXCDA=$O(^BHLX835($J,BHLXSDA,BHLXLDA,BHLXCDA)) Q:'BHLXCDA D
  1. ... S BHLXSEG=$O(^BHLX835($J,BHLXSDA,BHLXLDA,BHLXCDA,""))
  1. ... Q:$G(BHLXSEG)=""
  1. ... S BHLXDAT=$P($G(^BHLX835($J,BHLXSDA,BHLXLDA,BHLXCDA,BHLXSEG)),"~")
  1. ... I BHLXSEG="TRN" D TRN(BHLXDAT,BHLXSDA,BHLXLDA,BHLXCDA)
  1. ... I BHLXSEG="N1" D N1(BHLXDAT,BHLXSDA,BHLXLDA,BHLXCDA)
  1. ... I BHLXSEG="CLP" D CLP(BHLXDAT,BHLXSDA,BHLXLDA,BHLXCDA)
  1. ... I BHLXSEG="DTM" D DTM(BHLXDAT,BHLXSDA,BHLXLDA,BHLXCDA)
  1. ... I BHLXSEG="CAS" D CAS(BHLXDAT,BHLXSDA,BHLXLDA,BHLXCDA)
  1. ... I BHLXSEG="NM1" D NM1(BHLXDAT,BHLXSDA,BHLXLDA,BHLXCDA)
  1. K XCNT
  1. Q
  1. ;
  1. TRN(DAT,SDA,LDA,CDA) ;-- trn
  1. S ^BHLX835V($J,SDA,"TRACE #")=$P(DAT,FS,2)
  1. Q
  1. ;
  1. N1(DAT,SDA,LDA,CDA) ;-- n1
  1. Q:$P(DAT,FS)'="PR"
  1. S ^BHLX835V($J,SDA,"PAYOR")=$P(DAT,FS,2)
  1. Q
  1. ;
  1. CLP(DAT,SDA,LDA,CDA) ;--clp
  1. S ^BHLX835V($J,SDA,LDA,"BILL #")=$P(DAT,FS)
  1. S ^BHLX835V($J,SDA,LDA,"CHARGED AMOUNT")=$P(DAT,FS,3)
  1. S ^BHLX835V($J,SDA,LDA,"RECORD #")=$P(DAT,FS,7)
  1. S ^BHLX835V($J,SDA,LDA,"PD AMT")=$P(DAT,FS,4)
  1. Q
  1. ;
  1. DTM(DAT,SDA,LDA,CDA) ;--dtm
  1. Q:$P(DAT,FS)'=472
  1. S ^BHLX835V($J,SDA,LDA,"DOS")=$P(DAT,FS,2)
  1. Q
  1. ;
  1. CAS(DAT,SDA,LDA,CDA) ;-- cas
  1. S ^BHLX835V($J,SDA,LDA,XCNT,"ADJ REASON CODE")=$P(DAT,FS,2)
  1. S ^BHLX835V($J,SDA,LDA,XCNT,"ADJUSTMENT")=$P(DAT,FS,3)
  1. S XCNT=XCNT+1
  1. I $P(DAT,FS,5)]"" D
  1. . S ^BHLX835V($J,SDA,LDA,XCNT,"ADJ REASON CODE")=$P(DAT,FS,5)
  1. . S ^BHLX835V($J,SDA,LDA,XCNT,"ADJUSTMENT")=$P(DAT,FS,6)
  1. . S XCNT=XCNT+1
  1. I $P(DAT,FS,8)]"" D
  1. . S ^BHLX835V($J,SDA,LDA,XCNT,"ADJ REASON CODE")=$P(DAT,FS,8)
  1. . S ^BHLX835V($J,SDA,LDA,XCNT,"ADJUSTMENT")=$P(DAT,FS,9)
  1. . S XCNT=XCNT+1
  1. I $P(DAT,FS,11)]"" D
  1. . S ^BHLX835V($J,SDA,LDA,XCNT,"ADJ REASON CODE")=$P(DAT,FS,11)
  1. . S ^BHLX835V($J,SDA,LDA,XCNT,"ADJUSTMENT")=$P(DAT,FS,12)
  1. . S XCNT=XCNT+1
  1. I $P(DAT,FS,14)]"" D
  1. . S ^BHLX835V($J,SDA,LDA,XCNT,"ADJ REASON CODE")=$P(DAT,FS,14)
  1. . S ^BHLX835V($J,SDA,LDA,XCNT,"ADJUSTMENT")=$P(DAT,FS,15)
  1. . S XCNT=XCNT+1
  1. I $P(DAT,FS,17)]"" D
  1. . S ^BHLX835V($J,SDA,LDA,XCNT,"ADJ REASON CODE")=$P(DAT,FS,17)
  1. . S ^BHLX835V($J,SDA,LDA,XCNT,"ADJUSTMENT")=$P(DAT,FS,18)
  1. . S XCNT=XCNT+1
  1. Q
  1. ;
  1. NM1(DAT,SDA,LDA,CDA) ;-- nm1
  1. Q:$P(DAT,FS)'="QC"
  1. S BHLXLNM=$P(DAT,FS,3)
  1. S BHLXFNM=$P(DAT,FS,4)
  1. S BHLXMI=$P(DAT,FS,5)
  1. S ^BHLX835V($J,SDA,LDA,"PATIENT NAME")=BHLXLNM_","_BHLXFNM_" "_BHLXMI
  1. Q
  1. ;
  1. UPD ;-- update the holding file
  1. S BHLXUSDA=0 F S BHLXUSDA=$O(^BHLX835V($J,BHLXUSDA)) Q:'BHLXUSDA D
  1. . D L1(BHLXUSDA)
  1. . S BHLXULDA=0 F S BHLXULDA=$O(^BHLX835V($J,BHLXUSDA,BHLXULDA)) Q:BHLXULDA="" D
  1. .. D L2(BHLXUSDA,BHLXULDA)
  1. .. S BHLXUCDA=0 F S BHLXUCDA=$O(^BHLX835V($J,BHLXUSDA,BHLXULDA,BHLXUCDA)) Q:'BHLXUCDA D
  1. ... D L3(BHLXUSDA,BHLXULDA,BHLXUCDA)
  1. .. D FH(BHLXUSDA,BHLXULDA,.BHLXUPD)
  1. .. K BHLXUPD("ADJUSTMENT"),BHLXUPD("ADJ REASON CODE")
  1. K UPD,XIEN
  1. Q
  1. ;
  1. L1(USDA) ;-- setup lev 1 vars for filing
  1. S BHLXUPD("PAYOR")=$G(^BHLX835V($J,USDA,"PAYOR"))
  1. S BHLXUPD("TRACE #")=$G(^BHLX835V($J,USDA,"TRACE #"))
  1. Q
  1. ;
  1. L2(USDA,ULDA) ;-- setup level 2 vars for filing
  1. Q:ULDA'?.N
  1. S BHLXUPD("BILL #")=$G(^BHLX835V($J,USDA,ULDA,"BILL #"))
  1. S BHLXUPD("CHARGED AMOUNT")=$G(^BHLX835V($J,USDA,ULDA,"CHARGED AMOUNT"))
  1. S BHLXUPD("DOS")=$$HDT^INHUT1($G(^BHLX835V($J,USDA,ULDA,"DOS")))
  1. S BHLXUPD("RECORD #")=$G(^BHLX835V($J,USDA,ULDA,"RECORD #"))
  1. S BHLXUPD("PATIENT NAME")=$G(^BHLX835V($J,USDA,ULDA,"PATIENT NAME"))
  1. S BHLXUPD("PD AMT")=$G(^BHLX835V($J,USDA,ULDA,"PD AMT"))
  1. Q
  1. ;
  1. L3(USDA,ULDA,UCDA) ;-- setup level 3 vars for filing
  1. Q:UCDA'?.N
  1. S BHLXUPD("ADJ REASON CODE",UCDA)=$G(^BHLX835V($J,USDA,ULDA,UCDA,"ADJ REASON CODE"))
  1. S BHLXUPD("ADJUSTMENT",UCDA)=$G(^BHLX835V($J,USDA,ULDA,UCDA,"ADJUSTMENT"))
  1. Q
  1. ;
  1. FH(USDA,ULDA,UPD) ;-- file into holding
  1. ;look for entry in 90051.01
  1. K XIEN
  1. Q:'USDA
  1. Q:'ULDA
  1. S BHLXMT=$$LK(UPD("TRACE #"))
  1. I $G(BHLXMT) D
  1. . D FBL(UPD("BILL #"),UPD("PATIENT NAME"),UPD("DOS"))
  1. K DD,DO
  1. S DIC="^BAR835(",DIC(0)="L",X=UPD("BILL #")
  1. S DIC("DR")=".02///"_$S($G(BHLXBMT):1,1:0)_";.03///"_UPD("RECORD #")
  1. S DIC("DR")=DIC("DR")_";.04///"_UPD("PAYOR")
  1. S DIC("DR")=DIC("DR")_";.05///"_UPD("TRACE #")
  1. S DIC("DR")=DIC("DR")_";.06///"_$G(XIEN("BATCH"))
  1. S DIC("DR")=DIC("DR")_";.07///"_$G(XIEN("ITEM"))
  1. S DIC("DR")=DIC("DR")_";.08////"_$G(XIEN("BILL IEN"))
  1. S DIC("DR")=DIC("DR")_";.11///"_UPD("PATIENT NAME")
  1. S DIC("DR")=DIC("DR")_";.12////"_$G(XIEN("AR PAT"))
  1. S DIC("DR")=DIC("DR")_";.13////"_UPD("DOS")
  1. S DIC("DR")=DIC("DR")_";.14///"_$G(XIEN("AR DOS"))
  1. S DIC("DR")=DIC("DR")_";.15///"_UPD("CHARGED AMOUNT")
  1. S DIC("DR")=DIC("DR")_";.16///"_$G(XIEN("AR AMOUNT"))
  1. S DIC("DR")=DIC("DR")_";.17///"_$G(XIEN("AR BAL"))
  1. S DIC("DR")=DIC("DR")_";.18///"_UPD("PD AMT")
  1. D FILE^DICN
  1. S BHLXHIEN=+Y
  1. K DD,DO,DIC
  1. S DIC="^BAR835("_BHLXHIEN_",2,",DIC(0)="L",DA(1)=BHLXHIEN
  1. S DIC("P")=$P(^DD(90056.07,20,0),"^",2)
  1. S XHIEN=0 F S XHIEN=$O(UPD("ADJUSTMENT",XHIEN)) Q:'XHIEN D
  1. . S X=UPD("ADJUSTMENT",XHIEN)
  1. . S DIC("DR")=".02///"_$S(UPD("ADJ REASON CODE",XHIEN)?.N:+UPD("ADJ REASON CODE",XHIEN),1:UPD("ADJ REASON CODE",XHIEN))
  1. . S DIC("DR")=DIC("DR")_";.03///"_$$ARADJ(UPD("ADJ REASON CODE",XHIEN))
  1. . D FILE^DICN
  1. Q
  1. ;
  1. LK(TRC) ;EP - lookup batch by trace.check #
  1. K XIEN,BHLXBILL
  1. I '$O(^BARCOL(DUZ(2),"D",TRC,0)) Q ""
  1. S BHLXCOL=$O(^BARCOL(DUZ(2),"D",TRC,0))
  1. S BHLXITM=$O(^BARCOL(DUZ(2),"D",TRC,BHLXCOL,0))
  1. I '$G(BHLXITM) Q ""
  1. S XIEN("BATCH")=$P($G(^BARCOL(DUZ(2),BHLXCOL,0)),U)
  1. S XIEN("ITEM")=$P($G(^BARCOL(DUZ(2),BHLXCOL,1,BHLXITM,0)),U)
  1. Q 1
  1. ;
  1. FBL(BL,UPNM,UDOS) ;EP - find the bill number
  1. K BHLXBMT
  1. S BHLXCNT=0
  1. Q:'$O(^BARBL(DUZ(2),"B",BL,0))
  1. S XDA=0 F S XDA=$O(^BARBL(DUZ(2),"B",BL,XDA)) Q:XDA="" D
  1. . S BHLXCNT=BHLXCNT+1
  1. I BHLXCNT>1 D Q
  1. . S XDA=0 F S XDA=$O(^BARCB(DUZ(2),"B",BL,XDA)) Q:XDA="" D
  1. .. S ADOS=$P($G(^BARBL(DUZ(2),XDA,1)),U,2)
  1. .. Q:ADOS'=UDOS
  1. .. S APNM=$$GET1^DIQ(90050.01,XDA,101)
  1. .. S APLK=$P(APNM,",")_$E($P(APNM,",",2),1,2)
  1. .. S UPLK=$P(UPNM,",")_$E($P(UPNM,",",2),1,2)
  1. .. Q:UPLK'=APLK
  1. .. S BHLXBILL=XDA
  1. .. S XIEN("BILL IEN")=BHLXBILL
  1. .. S XIEN("AR DOS")=$P($G(^BARBL(DUZ(2),BHLXBILL,1)),U,2)
  1. .. S XIEN("AR PAT")=$P($G(^BARBL(DUZ(2),BHLXBILL,1)),U)
  1. .. S XIEN("AR AMOUNT")=$P($G(^BARBL(DUZ(2),BHLXBILL,0)),U,13)
  1. .. S XIEN("AR BAL")=$P($G(^BARBL(DUZ(2),BHLXBILL,0)),U,15)
  1. I BHLXCNT=1 S BHLXBILL=$O(^BARBL(DUZ(2),"B",BL,0))
  1. I '$G(BHLXBILL) K ADOS,APNM
  1. S BHLXBMT=1
  1. S XIEN("BILL IEN")=BHLXBILL
  1. S XIEN("AR DOS")=$P($G(^BARBL(DUZ(2),BHLXBILL,1)),U,2)
  1. S XIEN("AR PAT")=$P($G(^BARBL(DUZ(2),BHLXBILL,1)),U)
  1. S XIEN("AR AMOUNT")=$P($G(^BARBL(DUZ(2),BHLXBILL,0)),U,13)
  1. S XIEN("AR BAL")=$P($G(^BARBL(DUZ(2),BHLXBILL,0)),U,15)
  1. K ADOS,APNM
  1. Q
  1. ;
  1. ARADJ(ARC) ;-- lookup a/r reason code
  1. I ARC="" Q ""
  1. I ARC?.N S ARC=+ARC
  1. S BHLXAIEN=$O(^BARADJ("B",ARC,0))
  1. I 'BHLXAIEN Q ""
  1. Q $P($G(^BARADJ(BHLXAIEN,0)),U,3)_"/"_$P($G(^BARADJ(BHLXAIEN,0)),U,4)
  1. ;
  1. EOJ ;-- kill vars
  1. K ^BHLX835($J)
  1. K ^BHLX835V($J)
  1. D EN^XBVK("BHLX")
  1. Q
  1. ;