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

ABMUCUTL.m

Go to the documentation of this file.
  1. ABMUCUTL ; IHS/SD/SDR - 3PB/UFMS Cashiering Utilities
  1. ;;2.6;IHS Third Party Billing;**1,3,4,6,8,10,11,21**;NOV 12, 2009;Build 379
  1. ; New routine - v2.5 p12 SDD item 4.9.1
  1. ; Cashiering Utilities
  1. ;
  1. ; IHS/SD/SDR - v2.5 p13 - IM25924 - <UNDEF>EP+32^ABMUCAPI
  1. ; IHS/SD/SDR - abm*2.6*1 - HEAT4323 - Added Quit if tribal to ADDBENTR
  1. ; IHS/SD/SDR - abm*2.6*1 - FIXPMS10011 - Added DOS to GETBILL
  1. ; IHS/SD/SDR - abm*2.6*4 - NOHEAT - fix for duplicate bills when ITYP changes
  1. ; IHS/SD/SDR - abm*2.6*6 - HEAT27136 - Bug found when two parents on same database.
  1. ;IHS/SD/SDR - 2.6*21 - HEAT121470 - Updated to use a new x-ref for session status. Taking
  1. ; too long to look through all sessions and causing <STORE>FINDACLS+22^ABMUCUTL
  1. ;
  1. FINDOPEN(ABMDUZ) ;EP - look for open session for one user
  1. ; 0 returned means no open session found
  1. ; anything else means there's an open session (IEN of session will be returned)
  1. ;
  1. I $G(SDRAML)'="" Q 1
  1. S:+$G(ABMLOC)=0 ABMLOC=$$FINDLOC ;what location to look under
  1. S ABMFD=0
  1. S ABMSDT=0
  1. F S ABMSDT=$O(^ABMUCASH(ABMLOC,10,ABMDUZ,20,ABMSDT)) Q:+ABMSDT=0 D Q:ABMFD'=0
  1. .I $P($G(^ABMUCASH(ABMLOC,10,ABMDUZ,20,ABMSDT,0)),U,3)'="" Q
  1. .S ABMFD=ABMSDT
  1. Q ABMFD
  1. FINDAOPN ;EP - look for all open sessions
  1. D FINDAOPN^ABMUCUT2 ;abm*2.6*21 IHS/SD/SDR HEAT121470 split routine
  1. Q
  1. FINDACLS ;EP - look for all closed sessions
  1. ; 0 returned means no closed sessions found
  1. ; anything else is list of closed sessions (ABMO(SESSION#,DUZ,SDT)
  1. D FINDACLS^ABMUCUT2 ;abm*2.6*21 IHS/SD/SDR HEAT121470 split routine
  1. Q
  1. FINDALLS ;EP - look for all sessions
  1. ; 0 returned means no sessions found
  1. ; anything else is list of sessions (ABMO(SESSION#,DUZ,SDT)
  1. ;
  1. K ABMO
  1. S ABMLOC=$$FINDLOC ;what location to look under
  1. S ABMFD=0
  1. S ABMDUZ=0
  1. F S ABMDUZ=$O(^ABMUCASH(ABMLOC,10,ABMDUZ)) Q:+ABMDUZ=0 D
  1. .S ABMSDT=0
  1. .F S ABMSDT=$O(^ABMUCASH(ABMLOC,10,ABMDUZ,20,ABMSDT)) Q:+ABMSDT=0 D Q:ABMFD'=0
  1. ..I $P($G(^ABMUCASH(ABMLOC,10,ABMDUZ,20,ABMSDT,0)),U,3)="" Q
  1. ..S ABMO(ABMSDT,ABMDUZ,ABMSDT)=""
  1. Q
  1. ;
  1. CR8SESS() ;EP - create new session in file
  1. ;location
  1. S ABMLOC=$$FINDLOC
  1. K DIC,DIE,X,Y,DA
  1. S DIC="^ABMUCASH("
  1. S DIC(0)="LMN"
  1. S (X,DINUM)="`"_ABMLOC
  1. D ^DIC
  1. I Y<0 Q 0
  1. S ABMLOC=+Y
  1. ;
  1. ;user
  1. K DIC,DIE,X,Y,DA
  1. S DA(1)=ABMLOC
  1. S DIC="^ABMUCASH(DA(1),10,"
  1. S DIC(0)="LMN"
  1. S DIC("P")=$P(^DD(9002274.45,".02",0),U,2)
  1. S (X,DINUM)="`"_DUZ
  1. D ^DIC
  1. I Y<0 Q 0
  1. S ABMUSER=+Y
  1. ;
  1. ;sign in date
  1. K DIC,DIE,X,Y,DA
  1. S DA(2)=ABMLOC
  1. S DA(1)=ABMUSER
  1. S DIC="^ABMUCASH("_DA(2)_",10,"_DA(1)_",20,"
  1. S X="NOW"
  1. S DIC(0)="LMO"
  1. S DIC("P")=$P(^DD(9002274.4502,".02",0),U,2)
  1. S DIC("DR")=".04////O"
  1. D ^DIC
  1. I Y<0 Q 0
  1. Q Y
  1. ;
  1. CLOSESES(ABMLOC,ABMDUZ,ABMFD) ;EP - close session
  1. K DIC,DIE,X,Y,DA
  1. I ABMDUZ D
  1. .S DA(2)=ABMLOC
  1. .S DA(1)=ABMDUZ
  1. .S DIE="^ABMUCASH("_DA(2)_",10,"_DA(1)_",20,"
  1. .S DA=ABMFD
  1. .S DR=".03///NOW;.04////C"
  1. .S DR=DR_";.05////"_+$G(ABMSBTOT)_";.06////"_+$G(ABMSATOT)
  1. I 'ABMDUZ D ;POS session
  1. .S DA(2)=ABMLOC
  1. .S DA(1)=1
  1. .S DIE="^ABMUCASH("_DA(2)_",20,"_DA(1)_",20,"
  1. .S DA=ABMFD
  1. .S DR=".03///NOW;.04////C"
  1. .S DR=DR_";.05////"_+$G(ABMSBTOT)_";.06////"_+$G(ABMSATOT)
  1. D ^DIE
  1. Q
  1. ;
  1. ADDBENTR(ABMGRP,ABMBIEN) ;EP - Add claim/bill to session log
  1. ;ABMGRP=can claim/can bill/appr bill
  1. ;ABMBIEN=bill IEN
  1. I $D(ZTQUEUED),($G(ABMAUTOF)=1) D AUTOUFMS^ABMEAUTO Q ;create/update entry for auto-approve claims
  1. S ABMLOC=$$FINDLOC() ;find location to file bill for
  1. S ABMTRIBL=$P($G(^ABMDPARM(DUZ(2),1,4)),U,14)
  1. ;Q:ABMTRIBL=0 ;abm*2.6*1 HEAT4323 ;abm*2.6*3 HEAT13663
  1. S ABMSDT=$$FINDOPEN(DUZ) ;find open session
  1. Q:+$G(ABMSDT)=0 ;no open session
  1. ;I ABMGRP["BILL" S ABMITYP=$P($G(^AUTNINS($P($G(^ABMDBILL(DUZ(2),ABMBIEN,0)),U,8),2)),U) ;abm*2.6*4 NOHEAT
  1. I ABMGRP["BILL" S ABMITYP=$P($G(^ABMDBILL(DUZ(2),ABMBIEN,2)),U,2) ;abm*2.6*4 NOHEAT
  1. ;E S ABMITYP=$P($G(^AUTNINS($P($G(^ABMDCLM(DUZ(2),ABMBIEN,0)),U,8),2)),U)
  1. E D
  1. .S ABMITYP=""
  1. .;S:$P($G(^ABMDCLM(DUZ(2),ABMBIEN,0)),U,8) ABMITYP=$P($G(^AUTNINS($P($G(^ABMDCLM(DUZ(2),ABMBIEN,0)),U,8),2)),U) ;abm*2.6*10 HEAT73780
  1. .S:$P($G(^ABMDCLM(DUZ(2),ABMBIEN,0)),U,8) ABMITYP=$$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,$P($G(^ABMDCLM(DUZ(2),ABMBIEN,0)),U,8),".211","I"),1,"I") ;abm*2.6*10 HEAT73780
  1. .I ABMITYP="" S ABMITYP=$S($P($G(^AUPNPAT($P(^ABMDCLM(DUZ(2),ABMBIEN,0),U),11)),U,12)="I":"N",1:"I")
  1. I ABMITYP="I" D
  1. .K DIC,DIE,X,Y,DA
  1. .S DA(2)=ABMLOC
  1. .S DA(1)=DUZ
  1. .S DA=ABMSDT
  1. .S DIE="^ABMUCASH("_DA(2)_",10,"_DA(1)_",20,"
  1. .S DR=".11////"_($P($G(^ABMUCASH(DA(2),10,DA(1),20,DA,0)),U,11)+1) ;ben count
  1. .D ^DIE
  1. ;
  1. K DIC,DIE,X,Y,DA
  1. S DA(3)=ABMLOC
  1. S DA(2)=DUZ
  1. S DA(1)=ABMSDT
  1. S DIC="^ABMUCASH("_DA(3)_",10,"_DA(2)_",20,"_DA(1)_",11,"
  1. S DIC(0)="LM" ;insurer type
  1. S X=ABMITYP
  1. D ^DIC
  1. I +Y<0 W !,"NO ENTRY IN CASHIERING SESSION MADE",! H 2 Q
  1. S ABMBA=+Y
  1. K DIC,DIE,X,Y,DA
  1. S DA(4)=ABMLOC
  1. S DA(3)=DUZ
  1. S DA(2)=ABMSDT
  1. S DA(1)=ABMBA
  1. S:ABMGRP="ABILL"!(ABMGRP="CBILL") X=$P($G(^ABMDBILL(DUZ(2),ABMBIEN,0)),U)
  1. S:ABMGRP="CCLM" X=ABMBIEN
  1. S ABMGRP=$S(ABMGRP="CCLM":1,ABMGRP="ABILL":2,1:3) ;what multiple to file in
  1. S DIC="^ABMUCASH("_DA(4)_",10,"_DA(3)_",20,"_DA(2)_",11,"_DA(1)_","_ABMGRP_","
  1. S DIC("P")=$P(^DD(9002274.4510211,ABMGRP,0),U,2)
  1. S DIC(0)="LM"
  1. S DIC("DR")=".02////"_DUZ(2)_";.03////"_ABMBIEN
  1. D ^DIC
  1. Q
  1. REQBILL(ABMBIEN) ;EP - Add bill to requeue session log
  1. ;ABMBIEN=bill IEN
  1. S ABMLOC=$$FINDLOC() ;find location to file bill for
  1. S ABMSDT=$$FINDOPEN(DUZ) ;find open session
  1. I ABMSDT=0 D Q:ABMANS=0 ;no open session found; ask if they want to create one
  1. .K DIR,DIC,DIE,X,Y,DA
  1. .S DIR(0)="Y"
  1. .W !
  1. .S DIR("A",1)="No open session was found for you."
  1. .S DIR("A")="Would you like to open a session"
  1. .D ^DIR K DIR
  1. .S ABMANS=+Y
  1. I ABMSDT=0 S ABMSDT=$P($$CR8SESS^ABMUCUTL,U) ;create session
  1. K DIC,DIE,X,Y,DA
  1. S DA(3)=ABMLOC
  1. S DA(2)=DUZ
  1. S DA(1)=ABMSDT
  1. S DIC="^ABMUCASH("_DA(3)_",10,"_DA(2)_",20,"_DA(1)_",12,"
  1. S DIC(0)="LM"
  1. S X=$P($G(^ABMDBILL(DUZ(2),ABMBIEN,0)),U)
  1. S DIC("DR")=".02////"_DUZ(2)_";.03////"_ABMBIEN
  1. D ^DIC
  1. I +Y<0 W !,"NO ENTRY IN CASHIERING SESSION MADE",! H 2 Q
  1. Q
  1. ;
  1. BDISPLAY(ABMXMIT) ;EP - view batch info
  1. ;ABMXMIT=batch IEN into 3P UFMS EXPORTS file
  1. D HOME^%ZIS
  1. S $P(ABMLINE,"-",80)="-"
  1. W $$EN^ABMVDF("IOF")
  1. W !
  1. D CENTER("UFMS EXPORT SUMMARY")
  1. W !!,"EXPORT DATE: ",$$CDT^ABMDUTL($P($G(^ABMUTXMT(ABMXMIT,0)),U))
  1. W !,"FILE NAME: ",$P($G(^ABMUTXMT(ABMXMIT,0)),U,2)
  1. W !!?5,"BUDGET ACTIVITY"
  1. W ?32,"BILL COUNT"
  1. W ?48,"AMOUNT"
  1. W !,ABMLINE,!
  1. D GETBTDTL(ABMXMIT) ;get batch detail
  1. S ABMSESSN=0
  1. F S ABMSESSN=$O(ABMO(ABMSESSN)) Q:+ABMSESSN=0 D
  1. .S ABMUSER=""
  1. .F S ABMUSER=$O(ABMO(ABMSESSN,ABMUSER)) Q:ABMUSER="" D
  1. ..W !,"SESSION ID: ",ABMSESSN
  1. ..W ?30,"BILLER: ",$S(ABMUSER:$P($G(^VA(200,ABMUSER,0)),U),1:"POS CLAIMS"),!
  1. ..S ABMBAU=""
  1. ..F S ABMBAU=$O(ABMO(ABMSESSN,ABMUSER,ABMBAU)) Q:ABMBAU="" D
  1. ...S ABMBACNT=+$P($G(ABMO(ABMSESSN,ABMUSER,ABMBAU)),U)
  1. ...S ABMBATOT=+$P($G(ABMO(ABMSESSN,ABMUSER,ABMBAU)),U,2)
  1. ...W !
  1. ...;W ?5,$P($T(@ABMBAU^ABMUCASH),";;",2) ;abm*2.6*11 insurer type
  1. ...W ?5,$$INSTYP^ABMUCASH(ABMBAU) ;abm*2.6*11 insurer type
  1. ...W ?32,ABMBACNT,$S(ABMBACNT=1:" bill",1:" bills")
  1. ...W ?45,$$FMT^ABMERUTL($J(ABMBATOT,".",2),"10R")
  1. W !!,"TOTAL BILLS FOR THIS SESSION: ",?32,$P($G(ABMO("TOTAL")),U),$S($P($G(ABMO("TOTAL")),U)=1:" BILL",1:" BILLS"),?45,$$FMT^ABMERUTL($J($P($G(ABMO("TOTAL")),U,2),".",2),"10R")
  1. Q
  1. GETBTDTL(ABMXMIT) ;EP - get batch detail; return in array
  1. ; ABMO(SESSION#,DUZ,BUDGETACT)=COUNT^AMOUNT
  1. ; ABMO("TOTAL")=TOTALCOUNT^TOTALAMOUNT
  1. ;
  1. K ABMO
  1. F ABMLOOP=1,2 D
  1. .S ABMUSER=0
  1. .F S ABMUSER=$O(^ABMUTXMT(ABMXMIT,ABMLOOP,ABMUSER)) Q:+ABMUSER=0 D
  1. ..S ABMUSERU=ABMUSER
  1. ..I ABMLOOP=2 S ABMUSERU="POS"
  1. ..S ABMSDT=0
  1. ..F S ABMSDT=$O(^ABMUTXMT(ABMXMIT,ABMLOOP,ABMUSER,2,ABMSDT)) Q:+ABMSDT=0 D
  1. ...S ABMBA=0
  1. ...F S ABMBA=$O(^ABMUTXMT(ABMXMIT,ABMLOOP,ABMUSER,2,ABMSDT,11,ABMBA)) Q:+ABMBA=0 D
  1. ....S ABMBAU=$P($G(^ABMUTXMT(ABMXMIT,ABMLOOP,ABMUSER,2,ABMSDT,11,ABMBA,0)),U)
  1. ....S ABMBILL=0
  1. ....F S ABMBILL=$O(^ABMUTXMT(ABMXMIT,ABMLOOP,ABMUSER,2,ABMSDT,11,ABMBA,2,ABMBILL)) Q:+ABMBILL=0 D
  1. .....S ABMBIEN=$P($G(^ABMUTXMT(ABMXMIT,ABMLOOP,ABMUSER,2,ABMSDT,11,ABMBA,2,ABMBILL,0)),U,3)
  1. .....S ABMBAMT=$P($G(^ABMUTXMT(ABMXMIT,ABMLOOP,ABMUSER,2,ABMSDT,11,ABMBA,2,ABMBILL,0)),U,4)
  1. .....S $P(ABMO(ABMSDT,ABMUSERU,ABMBAU),U)=+$P($G(ABMO(ABMSDT,ABMUSERU,ABMBAU)),U)+1
  1. .....S $P(ABMO(ABMSDT,ABMUSERU,ABMBAU),U,2)=+$P($G(ABMO(ABMSDT,ABMUSERU,ABMBAU)),U,2)+ABMBAMT
  1. .....S $P(ABMO("TOTAL"),U)=+$P($G(ABMO("TOTAL")),U)+1
  1. .....S $P(ABMO("TOTAL"),U,2)=+$P($G(ABMO("TOTAL")),U,2)+ABMBAMT
  1. K ABMUSER,ABMSDT,ABMBA,ABMBILL,ABMBIEN,ABMBAU,ABMUSERU
  1. Q
  1. REQBTCH(ABMBIEN) ;EP - Add bill to requeue session log
  1. ;ABMBIEN=batch IEN
  1. S ABMLOC=$$FINDLOC() ;find location to file bill for
  1. S ABMSDT=$$FINDOPEN(DUZ) ;find open session
  1. I ABMSDT=0 D Q:ABMANS=0 ;no open session found; ask if they want to create one
  1. .K DIR,DIC,DIE,X,Y,DA
  1. .S DIR(0)="Y"
  1. .W !
  1. .S DIR("A",1)="No open session was found for you."
  1. .S DIR("A")="Would you like to open a session"
  1. .D ^DIR K DIR
  1. .S ABMANS=+Y
  1. I ABMSDT=0 S ABMSDT=$P($$CR8SESS^ABMUCUTL,U) ;create session
  1. K DIC,DIE,X,Y,DA
  1. S DA(3)=ABMLOC
  1. S DA(2)=DUZ
  1. S DA(1)=ABMSDT
  1. S DIC="^ABMUCASH(DA(3),10,DA(2),20,DA(1),13,"
  1. S DIC(0)="LM"
  1. S X="`"_ABMBIEN
  1. D ^DIC
  1. I +Y<0 W !,"NO ENTRY IN CASHIERING SESSION MADE",! H 2 Q
  1. Q
  1. ;
  1. FINDLOC() ;EP - return what site should bills be filed under for export
  1. K ABMPSFLG
  1. ;S ABMLOC=DUZ(2) ;abm*2.6*6 HEAT27136
  1. S ABMBLOC=DUZ(2) ;abm*2.6*6 HEAT27136
  1. S:$G(ABMP("LDFN"))="" ABMP("LDFN")=DUZ(2)
  1. S:$G(ABMP("VDT"))="" ABMP("VDT")=DT
  1. S ABMPAR=0
  1. F S ABMPAR=$O(^BAR(90052.05,ABMPAR)) Q:+ABMPAR=0 D Q:($G(ABMPSFLG)=1)
  1. .I $D(^BAR(90052.05,ABMPAR,ABMP("LDFN"))) D
  1. ..; Use A/R parent/sat is yes, but DUZ(2) is not the parent for this
  1. ..; visit location
  1. ..Q:$P($G(^BAR(90052.05,ABMPAR,ABMP("LDFN"),0)),U,3)'=ABMPAR
  1. ..Q:$P($G(^BAR(90052.05,ABMPAR,ABMP("LDFN"),0)),U,6)>ABMP("VDT")
  1. ..Q:$P($G(^BAR(90052.05,ABMPAR,ABMP("LDFN"),0)),U,7)&($P(^(0),U,7)<ABMP("VDT"))
  1. ..;S ABMLOC=ABMPAR,ABMPSFLG=1 ;abm*2.6*6 HEAT27136
  1. ..S ABMBLOC=ABMPAR,ABMPSFLG=1 ;abm*2.6*6 HEAT27136
  1. ;Q ABMLOC ;abm*2.6*6 HEAT27136
  1. Q ABMBLOC ;abm*2.6*6 HEAT27136
  1. GETBILL(ABMPREC) ;EP - get bill info from appropriate 3P Bill file
  1. S ABMHOLD=DUZ(2)
  1. S DUZ(2)=$P(ABMPREC,U,2)
  1. ;S ABMLOC=$$FINDLOC^ABMUCUTL ;abm*2.6*8 HEAT27136
  1. S ABMBLOC=$$FINDLOC^ABMUCUTL ;abm*2.6*8 HEAT27136
  1. S ABMP("BDFN")=$P(ABMPREC,U,3)
  1. S ABMDTAPP=$P($G(^ABMDBILL(DUZ(2),ABMP("BDFN"),1)),U,5) ;date/time approved
  1. S ABMP("INS")=$P($G(^ABMDBILL(DUZ(2),ABMP("BDFN"),0)),U,8) ;active insurer
  1. S ABMTAXID=$TR($P($G(^AUTNINS(ABMP("INS"),0)),U,11),"-") ;TAX ID
  1. S ABMP("LDFN")=$P($G(^ABMDBILL(DUZ(2),ABMP("BDFN"),0)),U,3) ;visit location
  1. S ABMPDOS=$P($G(^ABMDBILL(DUZ(2),ABMP("BDFN"),7)),U,1) ;service date
  1. ;S ABMPASUF=$$ASUFAC(ABMLOC,ABMPDOS) ;abm*2.6*6 HEAT27136
  1. S ABMPASUF=$$ASUFAC(ABMBLOC,ABMPDOS) ;abm*2.6*6 HEAT27136
  1. S ABMUAOF=$P($G(^ABMDPARM(ABMP("LDFN"),1,4)),U,17) ;use asufac of
  1. S ABMSASUF=$$ASUFAC($S(+$G(ABMUAOF)'=0:ABMUAOF,1:ABMP("LDFN")),ABMPDOS)
  1. S ABMPBNUM=$P($G(^ABMDBILL(DUZ(2),ABMP("BDFN"),0)),U) ;Bill Number
  1. S ABMP("BAMT")=$P($G(^ABMDBILL(DUZ(2),ABMP("BDFN"),2)),U) ;bill amount
  1. ;S ABMP("ITYP")=$P($G(^AUTNINS(ABMP("INS"),2)),U) ;abm*2.6*10 HEAT73780
  1. S ABMP("ITYP")=$$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,ABMP("INS"),".211","I"),1,"I") ;abm*2.6*10 HEAT73780
  1. S ABMCLN=$P($G(^ABMDBILL(DUZ(2),ABMP("BDFN"),0)),U,10)
  1. S ABMP("VTYP")=$P($G(^ABMDVTYP($P($G(^ABMDBILL(DUZ(2),ABMP("BDFN"),0)),U,7),0)),U) ;abm*2.6*1 visit type description FIXPMS10011
  1. S ABMP("DOS")=$P($G(^ABMDBILL(DUZ(2),ABMP("BDFN"),7)),U) ;DOS abm*2.6*1 FIXPMS10011
  1. S DUZ(2)=ABMHOLD
  1. Q
  1. ;
  1. ASUFAC(X,Y) ;EP - get ASUFAC for DOS
  1. K ASUFAC
  1. S ASUFAC=0
  1. S ABMDT=0
  1. S ABMDTFLG=0
  1. S ASUFAC=$P($G(^AUTTLOC(X,0)),U,10) ;ASUFAC index
  1. Q:+$G(ASUFAC)'=0 ASUFAC ;ASUFAC found; stop here
  1. F S ABMDT=$O(^AUTTLOC(X,11,ABMDT)) Q:ABMDT=""!(ABMDTFLG=1) D
  1. .I Y>$P($G(^AUTTLOC(X,11,ABMDT,0)),U) D
  1. ..S ASUFAC=$P($G(^AUTTLOC(X,11,ABMDT,0)),U,6)
  1. ..S ABMDTFLG=1
  1. Q ASUFAC
  1. ;
  1. CENTER(X) ;EP
  1. S CENTER=IOM/2
  1. W ?CENTER-($L(X)/2),X
  1. Q