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