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

ABMDVST.m

Go to the documentation of this file.
  1. ABMDVST ; IHS/ASDST/DMJ - PCC Visit Stuff ;
  1. ;;2.6;IHS 3P BILLING SYSTEM;**10,19,22**;NOV 12, 2009;Build 418
  1. ;Original;TMD;08/19/96 4:45 PM
  1. ;
  1. ; IHS/SD/SDR - V2.5 P8 - IM12246/IM17548 - Added code to put defaults on claim for CLIAs
  1. ; IHS/SD/SDR - v2.5 p8 - task 8 - Added tag for insurer replace and splitting routine
  1. ; IHS/SD/SDR - v2.5 p10 - IM19717/IM20374 - Added to check for when to merge visits into one claim
  1. ; IHS/SD/SDR - v2.5 p10 - IM20610 - Fix Medicare Part B check so only one claim will generate
  1. ; IHS/SD/SDR - v2.5 p10 - task order item 1 - Calls for ChargeMaster added to national code. Calls were
  1. ; supplied by Lori Butcher
  1. ; IHS/SD/SDR - v2.5 p10 - IM21500 - Added code to check new V Med field POINT OF SALE BILLING STATUS
  1. ; and only generate claim if at least one med wasn't billed by POS or was billed and rejected
  1. ;
  1. ;IHS/SD/SDR - 2.6*19 - HEAT251217 - Made change to populate SERVICE DATE FROM and SERVICE DATE TO all the time.
  1. ;IHS/SD/SDR 2.6*22 HEAT335246 - Added call to claim splitter
  1. ; *********************************************************************
  1. VAR ;
  1. N ABMSRC,DA,DIE,DIK
  1. K ABMP("DUP"),ABMP("NEWBORN")
  1. I '$D(ABMP("VTYP")) D
  1. .S ABMP("VTYP")=$$VTYP^ABMDVCK1(ABMVDFN,SERVCAT,ABMP("INS"),ABMP("CLN"))
  1. I $P($G(^ABMNINS(DUZ(2),ABMP("INS"),1,ABMP("VTYP"),0)),U,7)="N" D Q
  1. .S DIE="^AUPNVSIT("
  1. .S DA=ABMVDFN
  1. .S DR=".04////22"
  1. .D ^DIE
  1. ;Find new Claim ien if ien null
  1. ;Not sure what will happen here if the claim is a split claim.
  1. ;Clearly only one claim will be updated.
  1. I '$G(ABMP("CDFN")) S ABMP("CDFN")=$O(^ABMDCLM(DUZ(2),"AV",ABMVDFN,""))
  1. I ABMP("CDFN")<1 S ABM=0 F S ABM=$O(^ABMDCLM(DUZ(2),"B",ABMP("PDFN"),ABM)) Q:'ABM D Q:ABMP("CDFN")
  1. .I '$D(^ABMDCLM(DUZ(2),ABM,0)) K ^ABMDCLM(DUZ(2),"B",ABMP("PDFN"),ABM) Q
  1. .Q:$P($G(^ABMDCLM(DUZ(2),ABM,0)),U,2)'=ABMP("VDT") ;encounter(visit) date
  1. .Q:$P($G(^ABMDCLM(DUZ(2),ABM,0)),U,3)'=ABMP("LDFN") ;visit location
  1. .Q:$P($G(^ABMDCLM(DUZ(2),ABM,0)),U,7)'=ABMP("VTYP") ;visit type
  1. .Q:$P($G(^ABMDCLM(DUZ(2),ABM,0)),U,6)'=ABMP("CLN") ;clinic
  1. .D GETPPRV ;get primary provider
  1. .D GETPPOV ;find primary DX
  1. .I ABMVPRV'=0,(ABMCPRV=ABMVPRV),(ABMVICD'=0),(ABMCICD=ABMVICD) S ABMP("CDFN")=ABM
  1. I ABMARPS,ABMP("CDFN")<1 D Q:$G(ABMP("NOKILLABILL"))=2
  1. .S ABMP("CDFN")=$O(^ABMDCLM(ABMP("LDFN"),"AV",ABMVDFN,""))
  1. .I ABMP("CDFN"),'$D(^ABMDCLM(ABMP("LDFN"),ABMP("CDFN"),0)) D
  1. ..K ^ABMDCLM(ABMP("LDFN"),"AV",ABMVDFN,ABMP("CDFN"))
  1. ..S ABMP("CDFN")=0
  1. .Q:ABMP("CDFN")<1
  1. .S ABMP("NOKILLABILL")=2
  1. G NEW:ABMP("CDFN")<1
  1. Q:$G(^ABMDCLM(DUZ(2),ABMP("CDFN"),0))=""
  1. ;25= Existing claim modified
  1. N R
  1. S R=$P(^AUPNVSIT(ABMVDFN,0),U,4)
  1. I R'=24!((R=24)&('$D(ABMNFLG))),R'=25 D
  1. .S DIE="^AUPNVSIT("
  1. .S DA=ABMVDFN
  1. .S DR=".04////25"
  1. .D ^DIE
  1. L +^ABMDCLM(DUZ(2),ABMP("CDFN")):10 E S ABMP("LOCKFAIL")=1 Q
  1. S DR=""
  1. S Y=^ABMDCLM(DUZ(2),ABMP("CDFN"),0)
  1. I $P(Y,U,10)'=DT D
  1. .S DR=".1////"_DT
  1. I $P(Y,U,2)'=ABMP("VDT") D
  1. .S DR=".02////"_ABMP("VDT")_$S(DR]"":";"_DR,1:"")
  1. S DR=$S(DR]"":DR_";",1:"")_".06////"_ABMP("CLN")
  1. I $P(Y,U,7)'=ABMP("VTYP"),$D(ABMP("PRIMVSIT")) D
  1. .S DR=$S(DR]"":DR_";",1:"")_".07////"_ABMP("VTYP")
  1. ;The following works because the only way that 97 will be the value is
  1. ;if the primary insurer is billed elswhere (e.g. Data Center)
  1. I ABMP("PRI")=97 S DR=$S(DR]"":DR_";",1:"")_".04////U;.08////"_ABMP("INS")
  1. ;The next line checks the active insurer field. If it is null & the
  1. ;insurer in ABMP("INS") is the primary insurer set and the mode of
  1. ;export
  1. I $P(Y,U,8)="",DR'[".08",'$O(ABML(ABMP("PRI")),-1),$O(ABML(ABMP("PRI"),""))=ABMP("INS") D
  1. .N ABMMODE
  1. .S ABMMODE=$P($G(^ABMNINS(DUZ(2),ABMP("INS"),1,ABMP("VTYP"),0)),U,4)
  1. .S DR=$S(DR]"":DR_";",1:"")_".08////"_ABMP("INS")_$S(ABMMODE:";.14///"_ABMMODE,1:"")
  1. I DR]"" D
  1. .S DIE="^ABMDCLM(DUZ(2),"
  1. .S DA=ABMP("CDFN")
  1. .D ^DIE
  1. D VSIT
  1. D FRATE
  1. D OTHER
  1. ;if routine BCMZINHO exists and there are tran codes in the table run BCMZINHO
  1. I $T(^BCMZINHO)]"",$O(^BCMTCA(0)) D:$D(^AUPNVSIT("AD",ABMVDFN)) ^BCMZINHO ;IHS/CMI/LAB-chargemaster call
  1. I $O(^ABMDBILL(DUZ(2),"AV",ABMVDFN,0)),$P($G(^ABMDCLM(DUZ(2),ABMP("CDFN"),0)),U,4)'="U" D Q:ABM("OUT")
  1. .S ABM("OUT")=1
  1. .Q:$D(^ABMDCLM(DUZ(2),ABMP("CDFN"),13,"B",ABMP("INS")))
  1. .S DA=$O(^ABMDBILL(DUZ(2),"AV",ABMVDFN,0))
  1. .S ABM=$P($G(^ABMDBILL(DUZ(2),DA,0)),U,8) ; Active Insurer
  1. .Q:'ABM
  1. .;I $P($G(^AUTNINS(ABM,2)),U)="I" D ;Type of ins = Indian Pat ;abm*2.6*10 HEAT73780
  1. .I $$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,ABM,".211","I"),1,"I")="I" D ;Type of ins = Indian Pat ;abm*2.6*10 HEAT73780
  1. ..S ABM("OUT")=0
  1. ..S DIE="^ABMDBILL(DUZ(2),"
  1. ..S DR=".04////X" ;Mark bill as cancelled
  1. ..D ^ABMDDIE
  1. ..S DIE="^ABMDCLM(DUZ(2),"
  1. ..S DA=ABMP("CDFN")
  1. ..S DR=".04////F;.08////"_ABMP("INS")
  1. ..D ^ABMDDIE
  1. I $D(^ABMDBILL(DUZ(2),"AS",ABMP("CDFN"))) Q
  1. Q
  1. ;
  1. ; *********************************************************************
  1. NEW ;CREATE NEW CLAIM
  1. I $D(^ABMDBILL(DUZ(2),"AV",ABMVDFN)) D Q
  1. .S DIE="^AUPNVSIT("
  1. .S DA=ABMVDFN
  1. .S DR=".04////20"
  1. .D ^DIE
  1. ;BILLED POS insurer?
  1. I $P($G(^AUTNINS(ABMP("INS"),2)),U,3)="P" D
  1. .S ABMVMIEN=0
  1. .F S ABMVMIEN=$O(^AUPNVMED("AD",ABMVDFN,ABMVMIEN)) Q:+ABMVMIEN=0 D Q:$G(ABMPSFLG)=1
  1. ..I $P($G(^AUPNVMED(ABMVMIEN,11)),U,6)'=1 S ABMPSFLG=1
  1. I $D(^AUPNVMED("AD",ABMVDFN)),$P($G(^AUTNINS(ABMP("INS"),2)),U,3)="P",($G(ABMPSFLG)'=1) D Q
  1. .K ABMPSFLG
  1. .D PCFL^ABMDVCK(62) ;billed POS
  1. S DINUM=$$NXNM^ABMDUTL
  1. I DINUM="" S ABMP("NOKILLABILL")=1 Q
  1. K DIC
  1. S DIC="^ABMDCLM(DUZ(2),"
  1. S DIC(0)="L"
  1. S X=ABMP("PDFN")
  1. K DD,DO
  1. D FILE^DICN
  1. I Y<1 S ABMP("NOKILLABILL")=1 Q
  1. S ABMP("CDFN")=+Y
  1. L +^ABMDCLM(DUZ(2),+Y):1 E S ABMP("LOCKFAIL")=1 Q
  1. S DA=+Y
  1. S DIE=DIC
  1. S DR=".02////"_$P($P(ABMP("V0"),U),".")_";.03////"_ABMP("LDFN")
  1. S DR=DR_";.04////"_"F"_";.06////"_ABMP("CLN")_";.07////"_ABMP("VTYP")
  1. ;No active insurer if one insurer billed elsewhere
  1. I '$D(ABML(97)) S DR=DR_";.08////"_ABMP("INS")
  1. S DR=DR_";.1////"_DT_";.17////"_DT
  1. S DR=DR_";.71////"_$P($P(ABMP("V0"),U),".")_";.72////"_$P($P(ABMP("V0"),U),".") ;abm*2.6*19 IHS/SD/SDR HEAT251217
  1. D ^DIE
  1. S DIE="^AUPNVSIT("
  1. S DA=ABMVDFN
  1. S DR=".04////24"
  1. D ^DIE
  1. D VSIT
  1. S ABMNFLG=1
  1. D FRATE
  1. D OTHER
  1. ;if routine BCMZINHO exists and there are tran codes in the table run BCMZINHO
  1. I $T(^BCMZINHO)]"",$O(^BCMTCA(0)) D:$D(^AUPNVSIT("AD",ABMVDFN)) ^BCMZINHO ;IHS/CMI/LAB-chargemaster call
  1. K X,Y
  1. D ^ABMPSPLT ;abm*2.6*22 IHS/SD/SDR HEAT335246
  1. D MAIN^ABMASPLT(ABMP("CDFN"))
  1. ;I $P($G(^AUTNINS(+ABMP("INS"),2)),U)="R" D ;abm*2.6*10 HEAT73780
  1. I $$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,+ABMP("INS"),".211","I"),1,"I")="R" D ;abm*2.6*10 HEAT73780
  1. .S ABMBONLY=$S($P($G(^ABMDPARM(ABMP("LDFN"),1,5)),U)'="":$P(^ABMDPARM(ABMP("LDFN"),1,5),U),1:2)
  1. .I (ABMBONLY'=2) Q
  1. .D MAIN^ABMDSPLB(ABMP("CDFN"))
  1. Q
  1. ;
  1. ; *********************************************************************
  1. VSIT ;
  1. S DA(1)=ABMP("CDFN")
  1. S DIC="^ABMDCLM(DUZ(2),"_DA(1)_",11,"
  1. S DIC(0)="LE"
  1. I $D(@(DIC_ABMVDFN_")")),'$D(ABMP("PRIMVSIT")) Q
  1. ;This section needs to be done for non-new claims
  1. ;Direct set into the claim file
  1. S DIC("P")=$P(^DD(9002274.3,11,0),U,2)
  1. K DD,DO,DR,DIC("DR")
  1. I $D(ABMP("PRIMVSIT")) S DIC("DR")=".02////P"
  1. S (X,DINUM)=ABMVDFN
  1. I '$D(@(DIC_ABMVDFN_")")) D
  1. .D FILE^DICN
  1. E D
  1. .S DIE=DIC
  1. .S DR=DIC("DR")
  1. .S DA=DINUM
  1. .D ^DIE
  1. .K DIE,DR,DINUM
  1. K DIC
  1. Q
  1. ;
  1. ; *********************************************************************
  1. FRATE ;
  1. ;I need code to prevent 2nd visit on claim from undoing eligibility
  1. N V,INSADD,INSSKIP
  1. S V=0
  1. F S V=$O(^ABMDCLM(DUZ(2),ABMP("CDFN"),11,V)) Q:'V D Q:$D(INSADD)
  1. .I V'=ABMVDFN,$D(^TMP($J,"PROC",V)) D
  1. ..S IEN=$O(^ABMDCLM(DUZ(2),ABMP("CDFN"),13,"B",ABMP("INS"),""))
  1. ..I 'IEN S INSADD="" Q
  1. ..I $P(^ABMDCLM(DUZ(2),ABMP("CDFN"),13,IEN,0),U,3)?1(1"P",1"I"),ABMP("PRI")>96 S INSSKIP=""
  1. I '$D(INSSKIP),$D(ABMP("OPONADMIT")) D
  1. .Q:$P(ABML(ABMP("PRI"),ABMP("INS")),U,3)'?1(1"M",1"R")
  1. .Q:ABMP("PRI")<97
  1. .;If the patient has B but not A don't skip.
  1. .I $G(ABML(ABMP("PRI"),ABMP("INS"),"COV",+$O(ABML(ABMP("PRI"),ABMP("INS"),"COV",""))))="B" Q
  1. . I $P(ABML(ABMP("PRI"),ABMP("INS")),U,6)=44 S INSSKIP=""
  1. I '$D(INSSKIP) D ADDCHK^ABMDE2E
  1. S ABMP("C0")=^ABMDCLM(DUZ(2),ABMP("CDFN"),0)
  1. S ABMX("INS")=ABMP("INS")
  1. D:'$D(ABMP("BTYP")) BTYP^ABMDEVAR
  1. D FRATE^ABMDE2X1
  1. D EXP^ABMDE2X5
  1. I ABMP("EXP")=22!(ABMP("EXP")=23)!(ABMP("EXP")=3)!(ABMP("EXP")=14)!(ABMP("EXP")=25) D
  1. .S DIE="^ABMDCLM(DUZ(2),"
  1. .S DA=ABMP("CDFN")
  1. .S DR=".922////"_$P($G(^ABMDPARM(ABMP("LDFN"),1,4)),U,11)
  1. .S DR=DR_";.923///"_$P($G(^ABMDPARM(ABMP("LDFN"),1,4)),U,12)
  1. .D ^DIE
  1. K ABMV,ABMX
  1. Q
  1. ;
  1. OTHER ;RUN OTHER STUFFING ROUTINES
  1. ;ABMDVST1 - Purpose of visit
  1. ;ABMDVST2 - Provider
  1. ;ABMDVST3 - ICD Procedure
  1. ;ABMDVST4 - Hospitalization
  1. ;ABMDVST5 - Pharmacy
  1. ;ABMDVST6 - Dental
  1. ;ABMDVST7 - Not used
  1. ;ABMDVST8 - Not used
  1. ;ABMDVST9 - IV Pharmacy
  1. ;ABMDVS10 - Not used
  1. ;ABMDVS11 - Lab
  1. ;ABMDVS12 - Not used
  1. ;ABMDVS13 - CPT CODES
  1. S ABMACTVI=$P(^ABMDCLM(DUZ(2),ABMP("CDFN"),0),U,8)
  1. I ABMACTVI="" S ABMACTVI=ABMP("INS")
  1. K ABM("DONE")
  1. F ABM("COUNTER")=1:1 D Q:$G(ABM("DONE"))
  1. .S ABM("ROUTINE")=$S(ABM("COUNTER")<10:"ABMDVST"_ABM("COUNTER"),1:"ABMDVS"_ABM("COUNTER"))
  1. .Q:(ABM("COUNTER")<5!(ABM("COUNTER")>6))&(ABMACTVI'=ABMP("INS"))&(ABM("COUNTER")<14)
  1. .S X=ABM("ROUTINE")
  1. .X ^%ZOSF("TEST") E S:ABM("COUNTER")>13 ABM("DONE")=1 Q
  1. .I D @("^"_ABM("ROUTINE"))
  1. I ABMACTVI=ABMP("INS") S ABMIDONE=1
  1. I $T(^BCMDVS01)]"",$O(^BCMTCA(0)) D ^BCMDVS01 ;IHS/CMI/LAB-chargemaster call
  1. Q
  1. GETPPRV ;
  1. ;get attending/operating provider from claim
  1. S ABMCPRV=+$O(^ABMDCLM(DUZ(2),ABM,41,"C","A",0))
  1. S:ABMCPRV=0 ABMCPRV=+$O(^ABMDCLM(DUZ(2),ABM,41,"C","O",0))
  1. I ABMCPRV'=0 S ABMCPRV=$P($G(^ABMDCLM(DUZ(2),ABM,41,ABMCPRV,0)),U)
  1. ;get provider from visit
  1. S ABMV=0
  1. F S ABMV=$O(^AUPNVPRV("AD",ABMVDFN,ABMV)) Q:+ABMV=0 D Q:+$G(ABMVPRV)'=0
  1. .Q:$P($G(^AUPNVPRV(ABMV,0)),U,4)'="P"
  1. .S ABMVPRV=$P($G(^AUPNVPRV(ABMV,0)),U)
  1. I $G(ABMVPRV)="" S ABMVPRV=0
  1. Q
  1. GETPPOV ;
  1. ;get Primary/first entry from claim
  1. S ABMCICD=+$O(^ABMDCLM(DUZ(2),ABM,17,0))
  1. ;get Primary or first entry from claim
  1. S ABMV=0
  1. K ABMVFST
  1. S ABMVFST=""
  1. F S ABMV=$O(^AUPNVPOV("AD",ABMVDFN,ABMV)) Q:+ABMV=0 D Q:+$G(ABMVICD)'=0
  1. .I $G(ABMVFST)="" S ABMVFST=$P($G(^AUPNVPOV(ABMV,0)),U)
  1. .Q:$P($G(^AUPNVPOV(ABMV,0)),U,12)'="P"
  1. .S ABMVICD=$P($G(^AUPNVPOV(ABMV,0)),U)
  1. I +$G(ABMVICD)=0 S ABMVICD=ABMVFST
  1. Q