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

ABMECS.m

Go to the documentation of this file.
  1. ABMECS ; IHS/ASDST/DMJ - ELECTRONIC CLAIMS SUBMISSION ;
  1. ;;2.6;IHS Third Party Billing System;**2,6,10,19**;NOV 12, 2009;Build 300
  1. ;Original;DMJ;01/02/96 4:18 PM
  1. ;
  1. ; This routine is called from the EMC Create a Batch Menu option.
  1. ; It will show you a summary of bills ready to export grouped by
  1. ; bill type and export type. The user is asked to select one
  1. ; group. An entry is then made in 3P TX STATUS file and a file
  1. ; is created in unix as specified by the user.
  1. ;
  1. ; IHS/ASDS/DMJ - 03/01/01 - V2.4 Patch 9 - NOIS HQW-0301-100010 - Modified to accommodate new Envoy electronic format
  1. ; IHS/ASDS/DMJ - 01/03/02 - V2.4 Patch 10 - NOIS NDA-1201-180141 - Modified code to calculate submission number differently as
  1. ; Medicare saves the numbers for up to a year.
  1. ; IHS/ASDS/SDR - 01/16/02 - V2.4 Patch 10 - NOIS XAA-0800-200136 - Modified so as not to combine different export modes
  1. ; into one file
  1. ; IHS/SD/SDR - v2.5 p8 - IM13650 - Set ABMAPOK so the trigger on Bill Status field gets executed
  1. ; to update A/R.
  1. ; IHS/SD/SDR - abm*2.6*2 - 5PMS10005 - Populate EXPORT NUMBER RE-EXPORT mult
  1. ; IHS/SD/SDR - abm*2.6*6 - 5010 - Added clearinghouse code
  1. ;IHS/SD/SDR - 2.6*19 - HEAT138428 - Made change to stop programming error <UNDEF>START+24^ABMEF31, <UNDEF>START+24^ABMEF32, <UNDEF>START+24^ABMEF33
  1. ; ********************************************************************
  1. START ;
  1. K ABME,ABMER
  1. ; Display summary of bills ready to export and ask user to select
  1. ; one group. The ABMER array and ABMSEQ are undefined going into
  1. ; EMCREAT^ABMECDSP but are needed upon return.
  1. D EMCREAT^ABMECDSP(.ABMER,.ABMSEQ)
  1. Q:'+$G(ABMSEQ) ; Quit if no group selected.
  1. ;start old code abm*2.6*6 5010
  1. ;S DIR(0)="Y"
  1. ;S DIR("A")="Proceed"
  1. ;S DIR("B")="YES"
  1. ;D ^DIR
  1. ;K DIR
  1. ;I Y'=1 K ABME Q
  1. ;end old code 5010
  1. K ABMGCN ;abm*2.6*6 5010
  1. I $D(^TMP($J,"S-CH",ABMSEQ)) D CHFILE Q ;abm*2.6*6 5010
  1. D FILE ; Make entry in 3P TX STATUS and create a file
  1. S DIR(0)="E"
  1. D ^DIR
  1. K DIR
  1. K ABMER,ABMP,ABMSEQ
  1. Q
  1. ;
  1. ;start new code abm*2.6*6 5010
  1. CHFILE ;
  1. S ABMER("CNT")=0,ABMER("LAST")=0
  1. S ABMCH=$P(ABMER(ABMSEQ),U)
  1. ;start old abm*2.6*19 IHS/SD/SDR HEAT138428
  1. ;S ABMINS("IEN")=0
  1. ;F S ABMINS("IEN")=$O(^TMP($J,"S-CH",ABMSEQ,ABMCH,ABMINS("IEN"))) Q:'(ABMINS("IEN")) S ABMER("LAST")=+$G(ABMER("LAST"))+1
  1. ;S ABMINS("IEN")=0
  1. ;F S ABMINS("IEN")=$O(^TMP($J,"S-CH",ABMSEQ,ABMCH,ABMINS("IEN"))) Q:'(ABMINS("IEN")) D
  1. ;.;S ABMITYP=$P(^AUTNINS(ABMINS("IEN"),2),U) ; Insurance type
  1. ;.S ABMITYP=$$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,ABMINS("IEN"),".211","I"),1,"I") ; Insurance type ;abm*2.6*10 HEAT73780
  1. ;.S ABMVTYPE=$P(ABMER(ABMSEQ),U,2) ; Visit type
  1. ;.S ABMEXP=$P(ABMER(ABMSEQ),U,3) ; export type
  1. ;.; Loop through locations in TMP global created by EMCREAT^ABMECDSP
  1. ;.S ABMLOC=""
  1. ;.F S ABMLOC=$O(^TMP($J,"D",ABMINS("IEN"),ABMLOC)) Q:ABMLOC="" D
  1. ;..Q:$D(^TMP($J,"D",ABMINS("IEN"),ABMLOC,ABMVTYPE))<2
  1. ;..;S ABMER("CNT")=+$G(ABMER("CNT"))+1 ;abm*2.6*@@ IHS/SD/SDR HEAT138428
  1. ;..S ABMER("CNT")=+$G(ABMER("LAST")) ;abm*2.6*@@ IHS/SD/SDR HEAT138428
  1. ;..D NEWB ; Create a new batch in 3P TX STATUS
  1. ;..I $G(Y)<0 D MSG^ABMERUTL("Could not enter batch in 3P TX STATUS file.") Q
  1. ;..; Add bill to detail in 3P TX STATUS for this batch
  1. ;..S ^ABMDTXST(DUZ(2),DA(1),2,0)="^9002274.61P^^"
  1. ;..S ABMAPOK=1
  1. ;..S ABMDA=0
  1. ;..F S ABMDA=$O(^TMP($J,"D",ABMINS("IEN"),ABMLOC,ABMVTYPE,ABMEXP,ABMDA)) Q:'+ABMDA D
  1. ;...S X=ABMDA
  1. ;...S DIC="^ABMDTXST(DUZ(2),DA(1),2,"
  1. ;...S DIC(0)="LXNE"
  1. ;...S DINUM=X
  1. ;...K DD,DO D FILE^DICN
  1. ;...Q:+Y<0
  1. ;...S DA=+Y
  1. ;...S DIE="^ABMDTXST(DUZ(2),DA(1),2,"
  1. ;...S ABMAPRV=$O(^ABMDBILL(DUZ(2),ABMDA,41,"C","A",0))
  1. ;...S:ABMAPRV ABMAPRV=$P(^ABMDBILL(DUZ(2),ABMDA,41,ABMAPRV,0),U)
  1. ;...I ABMAPRV D
  1. ;....S DR=".02///`"_ABMAPRV
  1. ;....D ^DIE
  1. ;....K ABMAPRV
  1. ;...S ABMSBR=$$SBR^ABMUTLP(ABMDA)
  1. ;...S DR=".03///"_ABMSBR
  1. ;...D ^DIE
  1. ;...K ABMSBR
  1. ;...S DIE="^ABMDBILL(DUZ(2),"
  1. ;...S DA=ABMDA
  1. ;...S DR=".04////B;.16////A"_$S($P($G(^ABMDBILL(DUZ(2),ABMDA,1)),U,7)="":";.17////"_ABMP("XMIT"),1:"")
  1. ;...S ABMREX("BDFN")=ABMDA
  1. ;...D ^DIE
  1. ;..K ABMAPOK
  1. ;..; Write record (Create EMC unix file)
  1. ;..D @("^ABMEF"_$P(ABMER(ABMSEQ),U,3))
  1. ;..I $G(POP) D
  1. ;...S DIE="^ABMDTXST(DUZ(2),"
  1. ;...S DA=ABMP("XMIT")
  1. ;...S DR=".14///NOPEN"
  1. ;...D ^DIE
  1. ;end new code 5010
  1. ;end old start new abm*2.6*19 IHS/SD/SDR HEAT138428
  1. S ABMER("LAST")=0
  1. S ABMLOC="",ABMLOCSV=""
  1. ;F S ABMLOC=$O(^TMP($J,"FILE",ABMLOC)) Q:ABMLOC="" S ABMER("LAST")=+$G(ABMER("LAST"))+1
  1. F S ABMLOC=$O(^TMP($J,"FILE",ABMLOC)) Q:ABMLOC="" D
  1. .S ABMINS=0
  1. .F S ABMINS=$O(^TMP($J,"FILE",ABMLOC,ABMINS)) Q:'ABMINS D
  1. ..S ABMVTYP=0,ABMVTYPS=0
  1. ..F S ABMVTYP=$O(^TMP($J,"FILE",ABMLOC,ABMINS,ABMVTYP)) Q:'ABMVTYP D
  1. ...S ABMEXP=0,ABMEXPSV=0
  1. ...F S ABMEXP=$O(^TMP($J,"FILE",ABMLOC,ABMINS,ABMVTYP,ABMEXP)) Q:'ABMEXP D
  1. ....I (ABMLOCSV'=ABMLOC)!(ABMVTYPS'=ABMVTYPE)!(ABMEXPSV'=ABMEXP) S ABMER(ABMLOC,"LAST")=+$G(ABMER(ABMLOC,"LAST"))+1
  1. ....S ABMLOCSV=ABMLOC,ABMVTYPS=ABMVTYPE,ABMEXPSV=ABMEXP
  1. ;
  1. S ABMLOC=""
  1. S ABMLOCSV=""
  1. F S ABMLOC=$O(^TMP($J,"FILE",ABMLOC)) Q:ABMLOC="" D
  1. .S ABMER("CNT")=0
  1. .S ABMER("LAST")=$G(ABMER(ABMLOC,"LAST"))
  1. .S ABMINS("IEN")=0
  1. .F S ABMINS("IEN")=$O(^TMP($J,"FILE",ABMLOC,ABMINS("IEN"))) Q:'ABMINS("IEN") D
  1. ..S ABMITYP=$$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,ABMINS("IEN"),".211","I"),1,"I") ; Insurance type
  1. ..S ABMVTYPE=0,ABMVTYPS=0
  1. ..F S ABMVTYPE=$O(^TMP($J,"FILE",ABMLOC,ABMINS("IEN"),ABMVTYPE)) Q:'ABMVTYPE D
  1. ...S ABMEXP=0,ABMEXPSV=0
  1. ...F S ABMEXP=$O(^TMP($J,"FILE",ABMLOC,ABMINS("IEN"),ABMVTYPE,ABMEXP)) Q:'ABMEXP D
  1. ....Q:$D(^TMP($J,"D",ABMINS("IEN"),ABMLOC,ABMVTYPE))<2
  1. ....S ABMER("CNT")=+$G(ABMER("CNT"))+1
  1. ....I (ABMLOCSV'=ABMLOC)!(ABMVTYPS'=ABMVTYPE)!(ABMEXPSV'=ABMEXP) D NEWB ; Create a new batch in 3P TX STATUS
  1. ....S ABMLOCSV=ABMLOC,ABMVTYPS=ABMVTYPE,ABMEXPSV=ABMEXP
  1. ....I $G(Y)<0 D MSG^ABMERUTL("Could not enter batch in 3P TX STATUS file.") Q
  1. ....; Add bill to detail in 3P TX STATUS for this batch
  1. ....S ^ABMDTXST(DUZ(2),DA(1),2,0)="^9002274.61P^^"
  1. ....S ABMAPOK=1
  1. ....S ABMDA=0
  1. ....F S ABMDA=$O(^TMP($J,"D",ABMINS("IEN"),ABMLOC,ABMVTYPE,ABMEXP,ABMDA)) Q:'+ABMDA D
  1. .....S X=ABMDA
  1. .....S DIC="^ABMDTXST(DUZ(2),DA(1),2,"
  1. .....S DIC(0)="LXNE"
  1. .....S DINUM=X
  1. .....K DD,DO D FILE^DICN
  1. .....Q:+Y<0
  1. .....S DA=+Y
  1. .....S DIE="^ABMDTXST(DUZ(2),DA(1),2,"
  1. .....S ABMAPRV=$O(^ABMDBILL(DUZ(2),ABMDA,41,"C","A",0))
  1. .....S:ABMAPRV ABMAPRV=$P(^ABMDBILL(DUZ(2),ABMDA,41,ABMAPRV,0),U)
  1. .....I ABMAPRV D
  1. ......S DR=".02///`"_ABMAPRV
  1. ......D ^DIE
  1. ......K ABMAPRV
  1. .....S ABMSBR=$$SBR^ABMUTLP(ABMDA)
  1. .....S DR=".03///"_ABMSBR
  1. .....D ^DIE
  1. .....K ABMSBR
  1. .....S DIE="^ABMDBILL(DUZ(2),"
  1. .....S DA=ABMDA
  1. .....S DR=".04////B;.16////A"_$S($P($G(^ABMDBILL(DUZ(2),ABMDA,1)),U,7)="":";.17////"_ABMP("XMIT"),1:"")
  1. .....S ABMREX("BDFN")=ABMDA
  1. .....D ^DIE
  1. ....K ABMAPOK
  1. ....; Write record (Create EMC unix file)
  1. ....D @("^ABMEF"_$P(ABMER(ABMSEQ),U,3))
  1. ....I $G(POP) D
  1. .....S DIE="^ABMDTXST(DUZ(2),"
  1. .....S DA=ABMP("XMIT")
  1. .....S DR=".14///NOPEN"
  1. .....D ^DIE
  1. ;end new abm*2.6*19 IHS/SD/SDR HEAT138428
  1. S DIR(0)="E"
  1. D ^DIR
  1. K DIR
  1. K ABMER,ABMP,ABMSEQ
  1. Q
  1. FILE ;
  1. ; File bills to 3P TX STATUS FILE
  1. S ABMER("CNT")=1,ABMER("LAST")=1 ;abm*2.6*6 5010
  1. S ABMINS("IEN")=$P(ABMER(ABMSEQ),U) ; Active Insurer IEN
  1. ;S ABMITYP=$P(^AUTNINS(ABMINS("IEN"),2),U) ; Insurance type ;abm*2.6*10 HEAT73780
  1. S ABMITYP=$$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,ABMINS("IEN"),".211","I"),1,"I") ; Insurance type ;abm*2.6*10 HEAT73780
  1. S ABMVTYPE=$P(ABMER(ABMSEQ),U,2) ; Visit type
  1. S ABMEXP=$P(ABMER(ABMSEQ),U,3) ; export type
  1. ; Loop through locations in TMP global created by EMCREAT^ABMECDSP
  1. S ABMLOC=""
  1. F S ABMLOC=$O(^TMP($J,"D",ABMINS("IEN"),ABMLOC)) Q:ABMLOC="" D
  1. .Q:$D(^TMP($J,"D",ABMINS("IEN"),ABMLOC,ABMVTYPE))<2
  1. .K ABMGCN ;abm*2.6*6
  1. .D NEWB ; Create a new batch in 3P TX STATUS
  1. .I $G(Y)<0 D MSG^ABMERUTL("Could not enter batch in 3P TX STATUS file.") Q
  1. .; Add bill to detail in 3P TX STATUS for this batch
  1. .S ^ABMDTXST(DUZ(2),DA(1),2,0)="^9002274.61P^^"
  1. .S ABMAPOK=1
  1. .S ABMDA=0
  1. .F S ABMDA=$O(^TMP($J,"D",ABMINS("IEN"),ABMLOC,ABMVTYPE,ABMEXP,ABMDA)) Q:'+ABMDA D
  1. ..S X=ABMDA
  1. ..S DIC="^ABMDTXST(DUZ(2),DA(1),2,"
  1. ..S DIC(0)="LXNE"
  1. ..S DINUM=X
  1. ..K DD,DO D FILE^DICN
  1. ..Q:+Y<0
  1. ..S DA=+Y
  1. ..S DIE="^ABMDTXST(DUZ(2),DA(1),2,"
  1. ..S ABMAPRV=$O(^ABMDBILL(DUZ(2),ABMDA,41,"C","A",0))
  1. ..S:ABMAPRV ABMAPRV=$P(^ABMDBILL(DUZ(2),ABMDA,41,ABMAPRV,0),U)
  1. ..I ABMAPRV D
  1. ...S DR=".02///`"_ABMAPRV
  1. ...D ^DIE
  1. ...K ABMAPRV
  1. ..S ABMSBR=$$SBR^ABMUTLP(ABMDA)
  1. ..S DR=".03///"_ABMSBR
  1. ..D ^DIE
  1. ..K ABMSBR
  1. ..S DIE="^ABMDBILL(DUZ(2),"
  1. ..S DA=ABMDA
  1. ..;S DR=".04////B;.16////A;.17////"_ABMP("XMIT") ;abm*2.6*2 5PMS10005
  1. ..S DR=".04////B;.16////A"_$S($P($G(^ABMDBILL(DUZ(2),ABMDA,1)),U,7)="":";.17////"_ABMP("XMIT"),1:"") ;abm*2.6*2 5PMS10005
  1. ..S ABMREX("BDFN")=ABMDA ;abm*2.6*3
  1. ..D ^DIE
  1. ..;D BILLSTAT^ABMDREEX(DUZ(2),ABMDA,ABMP("XMIT"),"O",$P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),1)),U,6)) ;abm*2.6*2 5PMS10005
  1. .K ABMAPOK
  1. .; Write record (Create EMC unix file)
  1. .D @("^ABMEF"_$P(ABMER(ABMSEQ),U,3))
  1. .I $G(POP) D
  1. ..S DIE="^ABMDTXST(DUZ(2),"
  1. ..S DA=ABMP("XMIT")
  1. ..S DR=".14///NOPEN"
  1. ..D ^DIE
  1. Q
  1. ;
  1. NEWB ;
  1. ; Create a new batch (Make entry in 3P TX STATUS)
  1. D NOW^%DTC
  1. S X=%
  1. S DIC="^ABMDTXST(DUZ(2),"
  1. S DIC(0)="LX"
  1. S DLAYGO=9002274.6
  1. K DD,DO D FILE^DICN
  1. K DLAYGO
  1. Q:Y<0
  1. S ABMP("XMIT")=+Y
  1. S DIE=DIC
  1. S DA=+Y
  1. S DR=".02///"_$P(ABMER(ABMSEQ),U,3)_";.04///`"_ABMINS("IEN")_";.03///"_ABMITYP_";.05////"_DUZ_";.09///"_$P(ABMER(ABMSEQ),U,4)_";.11///"_$J($P(ABMER(ABMSEQ),U,5),1,2)
  1. S DR=DR_";.17////"_$$FMT^ABMERUTL(ABMER("CNT"),"4NR") ;abm*2.6*6 5010
  1. D ^DIE
  1. ;S DR=".16///"_$$NSN^ABMERUTL D ^DIE ;abm*2.6*3 5PMS10005#2
  1. D GCNMULT^ABMERUTL("O",$S(($G(ABMREX("BILLSELECT"))!($G(ABMREX("BATCHSELECT")))):"1",1:"")) ;abm*2.6*3 5PMS10005#2
  1. S DA(1)=DA
  1. W !,"ENTRY CREATED IN 3P TX STATUS FILE."
  1. W !,"LOCATION: ",ABMLOC
  1. ;W !,"VISIT TYPE: ",$P(^ABMDVTYP(ABMVTYPE,0),U),! ;abm*2.6*2 5PMS10005
  1. W:$G(ABMVTYPE) !,"VISIT TYPE: ",$P(^ABMDVTYP(ABMVTYPE,0),U),! ;abm*2.6*2 5PMS10005
  1. Q