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

IBACCWLUTIL.m

Go to the documentation of this file.
IBACCWLUTIL ;EDE/TPF - ACC (Automated Community Care) Encounters utility APIs ; 12-SEP-2023
 ;;2.0;INTERATED BILLING;**770**;21-MAR-2024;Build 119
 ;;Per VA Directive 6402, this routine should not be modified.
 ;
 ; Reference to ^ORD(101) in ICR #1372 (Pending)
 ; Reference to XMB(3.8,B, in ICR #3359 (Pending)
 ;
 Q
 ;
 ;CALLED BY IBACCWLAINONBIL,IBACCWLAINOTLEG,IBACCWLAIREAS,IBACCWLAISERVCON,IBACCWLAIVIEW
EDITSTATUS(ENCIEN,STATUS,REQUIRED) ;EP - EDIT STATUS FIELD IN #364.9
 ;
 ;REQUIRED MEANS IT IS NEEDED FOR A ACTIVITY CODE REASSIGNMENT API. REQUIRED FOR AUDITING 
 ;
 Q:'$G(ENCIEN)
 N DIR,SETOFCODES,DUOUT,DTOUT,DIROUT
 N TARGET,MESSAGE   ;WCJ;XINDEX;TEAL
 ;
STA ;REPEAT- STATUS REQUIRED
 ;
 ;S SETOFCODES=$P($P($G(^DD(364.9,.16,0)),U,3),";",1,3)  ;"STATUS^S^0:OPEN;1:IN PROGRESS;2:CLOSED;3:PURGED
 D FIELD^DID(364.9,.16,"N","POINTER","TARGET","MESSAGE")   ;WCJ;XINDEX;TEAL
 ;S SETOFCODES=TARGET("POINTER",";",1,3)  ;WCJ;XINDEX;TEAL
 S SETOFCODES=$P(TARGET("POINTER"),";",1,3)  ;TPF;XINDEX;TEAL
 S DIR(0)="SO^"_SETOFCODES
 S DIR("B")=$G(STATUS)
 S DIR("A")="STATUS"
 D ^DIR
 I $D(DUOUT)!$D(DTOUT)!$D(DIROUT),(REQUIRED) G STA
 Q:$D(DUOUT)!$D(DTOUT)!$D(DIROUT)   ;W !!,"FIELD REQUIRED!" G STA
 S STATUS=Y(0)
 ;
 N DIE,DA,DR,NOW,Y
 S DIE="^IBA(364.9,"
 S DA=ENCIEN
 S DR=".16///"_STATUS_";.22///NOW"
 D ^DIE
 ;
 Q
 ;
 ;D UPDSTATUS^IBACCWLUTIL(1,"OPEN")
 ;'0' FOR OPEN;
 ;'1' FOR IN PROGRESS; 
 ;'2' FOR CLOSED;
 ;CALLED FROM EDITPREVACT^IBACCWLAINONBIL,IBACCWLAINOTLEG,IBACCWLAIREAS,IBACCWLAISERVCON
UPDSTATUS(ENCIEN,STATUS) ;EP - UPDATE STATUS IN 364.9
 ;
 ;ENCIEN = ENCOUNTER IEN
 Q:'$G(ENCIEN)!(STATUS="")
 N ADDFDA,ADDERROR
 S ENCIENS=ENCIEN_","
 S ADDFDA(364.9,ENCIENS,.16)=$G(STATUS)
 S ADDFDA(364.9,ENCIENS,.22)="NOW"
 D FILE^DIE("ET","ADDFDA","ADDERROR")
 ;
 I $D(ADDERROR) D  Q
 .W !,"Problem occurred adding Assigned Group to Encounter. Report to eBilling"
 .W !,$G(ADDERROR("DIERR",1,"TEXT",1))
 .N DIR,DIRUT,DUOUT,DTOUT
 .D PAUSE^VALM1
 W !,"STATUS UPDATED TO: "_$G(STATUS)
 ;
 Q
 ;
 ;CALLED FROM IBACCWLAIBILL
 ;W $$CHKSTATUS^IBACCWLUTIL(ENCIEN)
CHKSTATUS(ENCIEN) ;EP - RETURN EXTERNAL STATUS VALUE
 N CURASSIGGRP,STATUS
 S CURASSIGGRP=$$GET1^DIQ(364.9,ENCIEN_",",3.01)
 S STATUS=$$GET1^DIQ(364.9,ENCIEN_",",.16)  ;STATUS
 Q STATUS_" ASSIGNED TO: "_CURASSIGGRP
 ;
 ;CALLED FROM EDITPREVACT^IBACCWLAINONBIL,IBACCWLAINOTLEG,IBACCWLAIREAS,IBACCWLAISERVCON
EDITAS2GRP(GRPIEN,ASSIGNTOGRP) ;EP - EDIT 'ASSIGNED TO GROUP'
 ;
 Q:'$G(GRPIEN)!$G(ASSIGNTOGRP)=""
 N DIE,DA,DR,Y
 S DIC("S")="I Y'=""HIMS"""  ;TPF;IB*2*770V6 DECTIVATE HIMS
 S DIE="^IBA(364.9,"
 S DA=GRPIEN
 S DR="3.01;3.03///NOW"
 D ^DIE
 ;
 Q
 ;
GRPSETOFCODES(ASSIGNGRP,ACTCODEIEN,ACTGRPIEN) ;EP - RETURN SET OF CODES BASED ON ENTRY IN ASSIGN TO GROUP MULTIPLE
 ;
 N SETOFCODES
 S SETOFCODES=""
 S CODE=""
 F  S CODE=$O(^IBA(364.92,ACTCODEIEN,5,ACTGRPIEN,5,"B",CODE)) Q:CODE=""  D
 .Q:CODE=ASSIGNGRP
 .I CODE="BILL" S SETOFCODES=$G(SETOFCODES)_"BILL:BILLING;"
 .I CODE="FRT" S SETOFCODES=$G(SETOFCODES)_"FRT:FACILITY REVENUE TECHNICIANS;"
 .I CODE="PTF" S SETOFCODES=$G(SETOFCODES)_"PTF:FACILITY REVENUE PTF;"          ;TPF;IB*2*770v12;EBILL-4550
 .I CODE="IV" S SETOFCODES=$G(SETOFCODES)_"IV:INSURANCE VERIFICATION;"
 .I CODE="RUR" S SETOFCODES=$G(SETOFCODES)_"RUR:REVENUE UTILIZATION REVIEW;"
 ;
 Q SETOFCODES
 ;
 ;CALLED FROM EDITPREVACT^IBACCWLAINONBIL,IBACCWLAINOTLEG,IBACCWLAIREAS,IBACCWLAISERVCON
 ;D UPDAS2GRP^IBACCWLUTIL(1,"FRT",1)
UPDAS2GRP(ENCIEN,GROUP,DISPLAY) ;EP - UPDATE 'ASSIGNED TO GROUP' IN 364.9
 N ADDFDA,ADDERROR
 Q:'$G(ENCIEN)!($G(GROUP)="")
 S ENCIENS=ENCIEN_","
 S ADDFDA(364.9,ENCIENS,3.01)=$G(GROUP)
 S ADDFDA(364.9,ENCIENS,3.03)="NOW"
 D FILE^DIE("ET","ADDFDA","ADDERROR")
 ;
 I $D(ADDERROR) D  Q
 .W !,"Problem occurred adding Assigned Group to Encounter. Report to eBilling"
 .W !,$G(ADDERROR("DIERR",1,"TEXT",1))
 .N DIR,DIRUT,DUOUT,DTOUT
 .D PAUSE^VALM1
 I $G(DISPLAY) W !,"'ASSIGNED TO GROUP' UPDATED TO: "_$G(GROUP)  ;TPF;IB*2*770v23;EBILL-4055,5023,5036
 ;
 Q
 ;
 ;TRIGGERED BY EDITING #364.92515 ASSOCIATED ACTION ITEMS IN #364.92 ACTIVITY CODE
 ;DO NOT MOVE
ACTIONREF(DA) ;EP - SET "AC" X-REF IN #364.92
 ;
 N ACTIONID,ACTCODE,ASSIGNGRP
 S ACTIONID=$P($G(^ORD(101,X,4)),U,4)
 Q:ACTIONID=""
 S ACTCODE=$P($G(^IBA(364.92,DA(2),0)),U)
 Q:ACTCODE=""
 S ASSIGNGRP=$P($G(^IBA(364.92,DA(2),5,DA(1),0)),U)
 Q:ASSIGNGRP=""
 S ^IBA(364.92,"AC",ACTIONID,ASSIGNGRP,ACTCODE)=1
 ;
 Q
 ;
 ;TRIGGERED BY EDITING #364.92515 ASSOCIATED ACTION ITEMS IN #364.92 ACTIVITY CODE
 ;DO NOT MOVE
KACTIONREF(DA) ;EP - KILL "AC" X-REF 
 ;
 N ACTIONID,ACTCODE,ASSIGNGRP
 S ACTIONID=$P($G(^ORD(101,X,4)),U,4)
 Q:ACTIONID=""
 S ACTCODE=$P($G(^IBA(364.92,DA(2),0)),U)
 Q:ACTCODE=""
 S ASSIGNGRP=$P($G(^IBA(364.92,DA(2),5,DA(1),0)),U)
 Q:ASSIGNGRP=""
 K ^IBA(364.92,"AC",ACTIONID,ASSIGNGRP,ACTCODE)
 ;
 Q
 ;
 ;TRIGGRED BY #364.9255 ASSIGNED TO GROUP IN #364.92 ACTIVITY CODE
 ;DO NOT MOVE
ASSIGNTOREF(DA) ;EP - CREATE "AD" X-REF IN 364.92
 ;
 N ACTCODE,ASSIGNTOGRP,ASSIGNGRP
 S ACTCODE=$P($G(^IBA(364.92,DA(2),0)),U)
 Q:ACTCODE=""
 S ASSIGNTOGRP=$P($G(^IBA(364.92,DA(2),5,DA(1),0)),U)
 Q:ASSIGNTOGRP=""
 S ASSIGNGRP=$P($G(^IBA(364.92,DA(2),5,DA(1),5,DA,0)),U)
 Q:ASSIGNGRP=""
 S ^IBA(364.92,"AD",ACTCODE,ASSIGNGRP,ASSIGNTOGRP)=1
 ;
 Q
 ;
 ;DO NOT MOVE
KASSIGNTOREF(DA) ;EP - KILL "AD" X-REF
 ;
 N ACTCODE,ASSIGNTOGRP,ASSIGNGRP
 S ACTCODE=$P($G(^IBA(364.92,DA(2),0)),U)
 Q:ACTCODE=""
 S ASSIGNTOGRP=$P($G(^IBA(364.92,DA(2),5,DA(1),0)),U)
 Q:ASSIGNTOGRP=""
 S ASSIGNGRP=$P($G(^IBA(364.92,DA(2),5,DA(1),5,DA,0)),U)
 Q:ASSIGNGRP=""
 K ^IBA(364.92,"AD",ACTCODE,ASSIGNGRP,ASSIGNTOGRP)
 ;
 Q
 ;
 ;CLONED FROM TIUHELP. MODIFIED FOR SAC
 ;HELP CODE FOR PROTOCOLS IBACC WL IBACCBILL,IBACC WL IBACCBILL EE,IBACC WL IBACCFRT,IBACC WL IBACCFRT EE,IBACC WL IBACCFRPTF,IBACC WL IBACCFRPTF EE,IBACC WL IBACCIV,IBACC WL IBACCIV EE,IBACC WL IBACCRUR,IBACC WL IBACCRUR EE,IBACC WL IBACCSUP
PROTOCOL ;EP - DISPLAYS AN EXTENDED HELP FOR ACTION TYPE PROTOCOLS
 N DIRUT,DTOUT,DUOUT,IBX,VALMDDF,VALMPGE,ESC,XQORQUIT,XQORPOP
 S ESC=0
 S IBX=X
 D FULL^VALM1
 I IBX="?" D  G PROTX
 . D DISP^XQORM1 W !!,"Enter selection by typing the name, or abbreviation.",!,"Enter '??' for additional details.",!
 . I IBX="?" W:$$STOP ""
 I IBX="??" D MENU(XQORNOD) I $D(DIROUT) S (XQORQUIT,XQORPOP)=1 Q
PROTX ;
 S VALMBCK="R"
 Q
 N IBSEQ,IBI,IBJ
 D CLEAR^VALM1
 ;
 W:$$CONTINUE "Indicator Section:"
 W !!?5,"* = In progress"
 W !?5,"! = Patient not in VistA"
 W !?5,"# = Reassigned or successfully resubmitted - no longer available"
 W !?5,"C = Closed. No longer available."
 W !!
 ;
 ;ORD(101) ICR #1373 (Controlled) (Pending)
 W "Valid selections are:",!
 S IBI=0 F  S IBI=$O(^ORD(101,+XQORNOD,10,IBI)) Q:+IBI'>0  D
 . S IBJ=+$P($G(^ORD(101,+XQORNOD,10,IBI,0)),U,3) S:$D(IBSEQ(IBJ)) IBJ=IBJ+.1
 . S IBSEQ(IBJ)=+$P(^ORD(101,+XQORNOD,10,IBI,0),U)
 S IBI=0 F  S IBI=$O(IBSEQ(IBI)) Q:+IBI'>0!$D(DIRUT)  D
 . I $D(^ORD(101,+IBSEQ(IBI),0)) D ITEM(+IBSEQ(IBI),1)
 Q
ITEM(XQORNOD,TAB) ; Show descriptions of items
 N IBI
 Q:$P($G(^ORD(101,+XQORNOD,0)),U,2)']""
 W:$$CONTINUE !!,?+$G(TAB),$G(IOINHI),$$UPPER($P($G(^ORD(101,+XQORNOD,0)),U,2)),$G(IOINORM),!
 I $D(DIRUT) Q
 S IBI=0 F  S IBI=$O(^ORD(101,+XQORNOD,1,IBI)) Q:+IBI'>0!$D(DIRUT)  D
 . W:$$CONTINUE ?(TAB+2),$G(^ORD(101,+XQORNOD,1,IBI,0)),! Q:$D(DIRUT)
 Q
 ;
CONTINUE() ; Pagination control
 N Y
 I $Y<(IOSL-2) S Y=1 G CONTX
 S Y=$$STOP("",1) W:+Y @IOF,!
CONTX ;
 Q Y
 ;
STOP(PROMPT,SCROLL) ; Call DIR at bottom of screen
 N DIR,DA,X,Y
 I $E(IOST)'="C" S Y="" G STOPX
 I +$G(SCROLL),(IOSL>($Y+5)) F  W ! Q:IOSL<($Y+6)
 S DIR(0)="FO^1:1",DIR("A")=$S($G(PROMPT)]"":PROMPT,1:"Press RETURN to continue or '^' to exit")
 S DIR("?")="Enter '^' to quit present action or '^^' to quit to menu"
 D ^DIR I $D(DIRUT),(Y="") K DIRUT
 S Y=$S(Y="^":0,Y="^^":0,$D(DTOUT):"",Y="":1,1:1_U_Y)
STOPX ;
 Q Y
 ;
UPPER(X) ; Convert lower case X to UPPER CASE
 Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
 ;
 ;CALLED FROM IBACCWLAIREAS,IBACCWLAIBILL
PUBLISH(PUBLISHGRP,IBENCIFN,FROMIBDA,ASSIGNTOGRP,VALMDDF,PUBSUCCESS,IBDAIEN,LASTONEPUBLISHED) ;EP - PLACE DATA TO PUBLISH TO OTHER ACC ENCOUNTER WORK GROUP USERS INTO THEIR DATA GLOBALS
 ;
 Q  ;***********************DIABLE TO NEXT ITERATION DO NOT RUSH THIS BECAUSE OF HURRICANE
 ;Q:$G(DUZ)'=561 ;EBILL-NNNN JUST FOR TESTING RE-ESTABLISHING THIS API
 N LASTONE,LINE,JOB,SUBCRIBEGRP,TARGETIBDAIEN,X
 N SAMESUBCRIBEGRP,TARSUBCRIBEGRP  ;TPF;IB*2*770VNNNN;EBILL-9999  ;TPF XINDEX
 ;
 S PUBSUCCESS=0
 ;S SUBCRIBEGRP="IBACCWL"_ASSIGNTOGRP
 S TARSUBCRIBEGRP="IBACCWL"_ASSIGNTOGRP_""    ;TPF;IB*2*770VNNNN;EBILL-NNNN
 S SAMESUBCRIBEGRP="IBACCWL"_ASSIGNGRP_""  ;TPF;IB*2*770VNNNN;EBILL-NNNN
 ;I $D(^TMP(SUBCRIBEGRP)) D
 ;
 F SUBCRIBEGRP=TARSUBCRIBEGRP,SAMESUBCRIBEGRP D   ;TPF;IB*2*770VNNNN;EBILL-NNNN
 .;
 .S JOB=0
 .F  S JOB=$O(^TMP(SUBCRIBEGRP,JOB)) Q:'JOB  D
 ..;
 ..Q:JOB=$J  ;DO NOT PUBLISH TO SELF
 ..;
 ..S TARGETIBDAIEN=$G(^TMP(SUBCRIBEGRP,JOB,"IEN3649",IBENCIFN))  ;TPF;IB*2*770VNNNN;EBILL-NNNN;FIND THE IBDAIEN OF THE SAME ENCOUNTER IEN IN THE SUBSCRIBER WORKGROUP DATA ARRAY
 ..;Q:'TARGETIBDAIEN  ;TPF;IB*2*770VNNNN;EBILL-9999 QUIT SINCE THE ENCOUNTER DOES NOT EXIST ON THE POTENTIAL SUBSCRIBER WL  
 ..;I 'TARGETIBDAIEN,(SUBCRIBEGRP=SAMESUBCRIBEGRP) THEN ADD TO SAME GROUP WL
 ..;I 'TARGETIBDAIEN,(SUBCRIBEGRP'=SAMESUBCRIBEGRP) THEN ADD TO TARGET GROUP WL
 ..;
 ..;I 'TARGETIBDAIEN W !!,"NEED TO ADD API TO ADD ENCOUNTER TO TARGET WORKGROUPS! QUITING FOR NOW" Q  ;TPF;IB*2*770VNNNN;EBILL-NNNN
 ..;
 ..;I $D(^TMP(SUBCRIBEGRP,JOB,TARGETIBDAIEN,"UNAVAILABLE")) Q  ;PREVENT DUPES FROM SEVERAL USERS ASSIGNING TO SAME GROUP. QUIT IF ON THE LIST BUT ALREADY MARKED UNAVAILABLE
 ..I $G(TARGETIBDAIEN),$D(^TMP(SUBCRIBEGRP,JOB,TARGETIBDAIEN,"UNAVAILABLE")) Q  ;TPF;IB*2*770VNNNN;EBILL-NNNN
 ..; 
 ..;I $G(^TMP(SUBCRIBEGRP,JOB,2,0))[("NO DATA FOUND") Q   ;DEAL WITH THAT ONE VERY LOW POSSIBLE SITUATION. THIS WOULD BE A USER SITTING ON A NO DATA FOUND WL
 ..I $G(^TMP(SUBCRIBEGRP,JOB,2,0))[("NO DATA FOUND") Q   ;TPF;IB*2*770VNNNN;EBILL-NNNN
 ..;
 ..I $G(TARGETIBDAIEN) S LASTONEPUBLISHED=TARGETIBDAIEN  ;THEN EXISTING ENTRY NEEDS TO BE UPDATED
 ..E  S LASTONEPUBLISHED=$O(^TMP(SUBCRIBEGRP,JOB,"IDX",""),-1)+1  ;A NEW ENTRY NEEDS TO BE CREATED
 ..;
 ..;IF IEN3649 X-REF EXISTS THEN UPDATE THAT LINE DO NOT ADD A NEW 'LASTONE"
 ..;THIS TAKES CARE OF THE GROUP WE ARE ASSIGNING IT TO
 ..;HMMM, IF THIS IS TRUE WE DO NOT WANT TO DO ANYTHING
 ..;I $D(^TMP(SUBCRIBEGRP,JOB,"IEN3649",@VALMAR@(IBDAIEN,"IEN3649",1))) Q  ;D;TPF;IB*2*770VNNNN;EBILL-NNNN DOES NOT MAKE SENSE. ANENTRY IN ANOTHER WL AND SAME GRP WIL NOT BE UPDATED BY THE UPDSTATUS CALL
 ..;
 ..D CONVERTDFF(IBENCIFN,.LINE,LASTONEPUBLISHED,PUBLISHGRP,ASSIGNTOGRP,$J,JOB)
 ..;
 ..S ^TMP(SUBCRIBEGRP,JOB,LASTONEPUBLISHED,0)=LINE       ;LINE IS NOT THE CORRECT DATA COLUMN FORMAT UNLESS CONVERTDFF COMPLETES
 ..S ^TMP(SUBCRIBEGRP,JOB,LASTONEPUBLISHED,"IEN3649",1)=$G(@VALMAR@(IBDAIEN,"IEN3649",1))
 ..S ^TMP(SUBCRIBEGRP,JOB,LASTONEPUBLISHED,"IEN399",1)=$G(@VALMAR@(IBDAIEN,"IEN399",1))
 ..S ^TMP(SUBCRIBEGRP,JOB,"IDX",LASTONEPUBLISHED,LASTONEPUBLISHED)=""
 ..S ^TMP(SUBCRIBEGRP,JOB,"PUBLISH")="YOU HAVE A NEW ENCOUNTER ASSIGNED"
 ..S:$G(@VALMAR@(IBDA,"IEN3649",1)) ^TMP(SUBCRIBEGRP,JOB,"PUBLISH",@VALMAR@(IBDAIEN,"IEN3649",1))="IEN OF NEW ENCOUNTER ASSIGNED"
 ;
 S PUBSUCCESS=1
 Q
 ;
 ;EXIT ACTION FOR PROTOCOLS IBACC WL IBACCBILL,IBACC WL IBACCFRT,IBACC WL IBACCFRT EE MENU,IBACC WL IBACCFRPTF,IBACC WL IBACCFRPTF EE
 ;IBACC WL IBACCIV,IBACC WL IBACCIV EE MENU,IBACC WL IBACCRUR,IBACC WL IBACCRUR EE MENU,IBACC WL IBACCSU
SUBSCRIBE ;EP - PULL DATA PUBLISHED FROM OTHER ACC ENCOUNTER USERS PLACED INTO YOUR DATA GLOBAL AND REFRESH SCREEN WITH IT
 ;
 N IEN
 I $D(@VALMAR@("PUBLISH")) D
 .D MSG^VALM10($G(@VALMAR@("PUBLISH")))  ;TRIED UPDATING MESSAGE BAR
 .S VALMCNT=$O(@VALMAR@("IDX",""),-1)    ;UPDATE THE LIST COUNT
 .D RE^VALM4                             ;REFRESH LIST AREA
 .K @VALMAR@("PUBLISH")                  ;CLEAR PUBLISHED NODE
 ;
 Q
 ;
 ;CONVERT ONE VALMDDF TO ANOTHER
 ;D CONVERTDFF^IBACCWLUTIL()
CONVERTDFF(IBENCIFN,TODATA,LASTONE,FROMDFF,TODFF,FROMJOB,TOJOB) ;EP - CONVERT ONE VALMDDF TO ANOTHER
 ;
 ;TODFF = THE TO VALMDFF ARRAY OF COLUMNS
 ;FROMDFF = THE FROM VALMDFF ARRAY OF COLUMNS
 ;
 N FIELD,FROMCOLUMN,FROMWIDTH,FROMDATA,LISTNAME,LISTIEN,PUBTO,PUBFROM,VALMARFROM,VALMARTO
 N VALMDFFTO,VALMDFFFROM
 ;
 I '($D(TODFF)\2) D
 .S LISTNAME="IBACC WL IBACC"_TODFF
 .S LISTIEN=$O(^SD(409.61,"B",LISTNAME,""))
 .I LISTIEN="" W !!,"'"_LISTNAME_"' LIST TEMPLATE CAN NOT BE FOUND!!" S ABORT=1 Q
 .S I=0  ;SET UP COLUMN DATA ARRAY
 .F  S I=$O(^SD(409.61,LISTIEN,"COL",I)) Q:'I  I $D(^(I,0)) S VALMDFFTO($P(^(0),U))=^(0)
 ;
 I '($D(FROMDFF)\2) D
 .S LISTNAME="IBACC WL IBACC"_FROMDFF
 .S LISTIEN=$O(^SD(409.61,"B",LISTNAME,""))
 .I LISTIEN="" W !!,"'"_LISTNAME_"' LIST TEMPLATE CAN NOT BE FOUND!!" S ABORT=1 Q
 .S I=0  ;SET UP COLUMN DATA ARRAY
 .F  S I=$O(^SD(409.61,LISTIEN,"COL",I)) Q:'I  I $D(^(I,0)) S VALMDFFFROM($P(^(0),U))=^(0)
 ;
 S PUBTO="IBACCWL"_TODFF
 S PUBFROM="IBACCWL"_FROMDFF
 S VALMARTO="^TMP("""_PUBTO_""","_TOJOB_")"
 S VALMARFROM="^TMP("""_PUBFROM_""","_$J_")"
 ;
 S TODATA=""
 S FIELD=""
 F  S FIELD=$O(VALMDFFFROM(FIELD)) Q:FIELD=""  D
 .S FROMCOLUMN=$P(VALMDFFFROM(FIELD),U,2)
 .S FROMWIDTH=$P(VALMDFFFROM(FIELD),U,3)-1
 .S FROMDATA=$E(@VALMARFROM@(IBDAIEN,0),FROMCOLUMN,FROMCOLUMN+FROMWIDTH)
 .I FIELD="LINENUM" D
 ..S FROMDATA=""
 ..S FROMDATA=$$SETSTR^VALM1(LASTONE,FROMDATA,FROMCOLUMN,FROMCOLUMN+FROMWIDTH)
 .;
 .Q:'$D(VALMDFFTO(FIELD))
 .S TOCOLUMN=$P(VALMDFFTO(FIELD),U,2)
 .S TOWIDTH=$P(VALMDFFTO(FIELD),U,3)-1
 .S $E(TODATA,TOCOLUMN,TOCOLUMN+TOWIDTH)=FROMDATA
 ;
 D SUBDATAUPDATE^IBACCWLUTIL1(.TODATA,IBENCIFN,IBDAIEN,.VALMDFFFROM,.VALMDFFTO)  ;FOR FIELDS NOT IN THE PUBLISHER'S COLUMNS BUT IN THE SUBSCRIBERS COLUMN DATA, GRAB THE DATA 
 ;
 Q
 ;
 ;S FROM=DT,TO=3240405.1200 W $$DAYSCREEN^IBACCWLUTIL(FROM,TO,60)
 ;USED BY PULLLIST^IBACCWL1 AS SCREEN FOR LIST^DIC CALL.
 ;MINIMUMN # DAYS ON THE WORKLIST PROMPT IN INIT^IBACCWLSORT IF TRUE THE RECORD IS PULLED ONTO THE WORKLIST
DAYSSCREEN(FROM,TO,MINDAYS) ;EP - DAYS ON WORKLIST SCREEN FOR SORTS
 N X1,X2
 Q:MINDAYS=0 1
 Q:FROM=""!(TO="") 1
 S X1=$P(TO,".")
 S X2=$P(FROM,".")
 D ^%DTC
 Q -X=MINDAYS!(-X>MINDAYS)
 ;
 ;USED BY IBACCWL1 TO SET UP LOOKUP FILTER FOR LIST^DIC CALL
AUTHCHK(IBBILLER,IBIFN) ;EP - AUTHORIZED BILLER SCREEN
 N AUTHORIZER
 Q:'$D(IBBILLER)!($G(IBIFN)="") 0
 S AUTHORIZER=$P($G(^DGCR(399,IBIFN,"S")),U,11)
 Q:AUTHORIZER="" 0
 Q $D(IBBILLER(AUTHORIZER))
 ;
 ;CALLED BY SETARRAY^IBACCWL1
SORTLINE(VALMDDFF,LINENUM,LINE) ;EP - CREATE A LINE TO SEPARATE THE K# SORT FORM NON K# SORT
 N FIELD,TODATA,X
 S LINE=""
 S FIELD=""
 F  S FIELD=$O(VALMDDFF(FIELD)) Q:FIELD=""  D
 .S TODATA=""
 .S FROMWIDTH=$P(VALMDDFF(FIELD),U,3)+1
 .;
 .I FIELD="LINENUM" S TODATA=LINENUM
 .E  S $P(TODATA,"-",FROMWIDTH)=""
 .;
 .S LINE=$$SETFLD^VALM1(TODATA,LINE,FIELD)
 ;
 Q
 ;
 ;ADD PREVIOUS ACTIVITY AND PREVIOUS ACTIVITY COMMENTS - NO USER INTERACTION
 ;CALLED FROM RTN IBCE837ACC
ADDPREVACT(RETURN,IBENCIFN,DUZ,ACTCODE,ASSIGNGRP,ASSIGNTOGRP,COMMENT) ;EP - ADD PREVIOUS ACTIVITY - NO USER PROMPT
 ;
 ;RETURN
 N ADDIENS,ADDFDA,ADDERR,WPIENS,WPERR
 ;
 S ADDIENS="+1,"_IBENCIFN_","
 S ADDFDA(364.94,ADDIENS,.01)="NOW"
 S ADDFDA(364.94,ADDIENS,.02)="`"_$G(DUZ)
 S ADDFDA(364.94,ADDIENS,.03)=$G(ACTCODE)
 S ADDFDA(364.94,ADDIENS,.04)=$G(ASSIGNGRP)
 S ADDFDA(364.94,ADDIENS,.05)=$G(ASSIGNTOGRP)
 ;
 D UPDATE^DIE("ES","ADDFDA","ADDIENS","ADDERR")
 ;
 I $D(ADDERR) S RETURN="0"_U_$G(ADDERR("DIERR",1,"TEXT",1)) Q
 ;
 S WPIENS=ADDIENS(1)_","_IBENCIFN_","
 D EDITPREVACT(WPIENS,.COMMENT,.WPERR)  ;EDIT PREVIOUS ACTIVITY
 ;
 I $D(WPERR) S RETURN=WPERR  Q
 ;
 S RETURN="1^Update Successful"
 ;
 Q
 ;
 ;CALLED FROM EDITPREVACT^IBACCWLAINONBIL,IBACCWLAINOTLEG,IBACCWLAIREAS,IBACCWLAISERVCON  ;REVSTATUSLOOP^IBACCWLAIVIEW ?
 ;K WPERR S WPIENS="6,1,",COMMENT(1)="TEST1",COMMENT(2)="TEST2" D EDITPREVACT^IBACCWLUTIL(WPIENS,.COMMENT,.WPERR)
EDITPREVACT(WPIENS,COMMENT,WPERR) ;EP- EDIT PREVIOUS ACTIVITY 
 ;
 D WP^DIE(364.94,WPIENS,10,"","COMMENT","WPERR")
 ;
 I $D(WPERR) D
 .S RETURN="0"_U_$G(WPERR("DIERR",1,"TEXT",1))
 .K WPERR
 .S WPERR=RETURN
 ;
 Q
 ;
 ;CALLED BY PULLLIST^IBACCWL1,EN^IBACCWLSEC,
 ;W $$ISTESTER^IBACCWLUTIL(DUZ)
ISTESTER(DUZ) ;EP - RETURN 1 IF USER IS A PART OF THE ACC CENCOUNTER TEST USER GROUP
 ;
 N XMDUZ
 ;
 Q:'$G(DUZ) 0
 Q:$$PROD^XUPROD(1) 0
 ;
 S Y=$$FIND1^DIC(3.8,"","X","IB EBILL TESTERS","B")  ;ICR #3359 (Private) Pending
 I 'Y D  Q 0
 .W !!,"THERE IS NO 'IB EBILL TESTERS' MAIL GROUP!!"
 ;
 S XMDUZ=DUZ D CHK^XMA21    ;ICR #10067 (Supported)
 Q $T
 ;
 ;W $$ISITME^IBACCWLUTIL(DUZ)
ISITME(DUZ) ;EP  - IS IT TIM? USE ONLY IN BREAKS SO BREAKS OCCUR ONLY FOR TIM F.
 Q:'$G(DUZ)
 N USERNAME
 S USERNAME=$P($G(^VA(200,DUZ,0)),U)
 Q:USERNAME=("FRAZIER,TIM") 1
 Q 0
 ;
 ;W $$MG^IBACCWLUTIL($S)
MG(BYTES) ;EP -CONVERT BYTES TOI MEGABYTES
 Q BYTES/1000000
 ;
 ;W $$GG^IBACCWLUTIL($S)
GG(BYTES) ;
 Q BYTES/1000000000
 ;
 ;W MG2BYTES^IBACCWLUTIL($S)
MG2BYTES(MG) ;EP -
 Q MG*1000000
 ;
 ;K IBAUTH S USERGROUP="BILL" D AUTHORIZER^IBACCWLUTIL(USERGROUP,.IBAUTH)
AUTHORIZER(USERGROUP,IBAUTH) ;EP - FIND ALL AUTHORIZERS GIVEN A GROUP NAME
 ;
 N AUTHORIZER,ENCIFN,GRP,IBIFN
 K IBAUTH
 S ENCIFN=0
 F  S ENCIFN=$O(^IBA(364.9,"AC",USERGROUP,ENCIFN)) Q:'ENCIFN  D
 .S IBIFN=$P($G(^IBA(364.9,ENCIFN,2)),U,2)
 .Q:'IBIFN
 .S AUTHORIZER=$P($G(^DGCR(399,IBIFN,"S")),U,11)
 .Q:'AUTHORIZER
 .S IBAUTH(AUTHORIZER)=$G(IBAUTH(AUTHORIZER))+1
 Q
 ;
GETFLD(FIELD,LINE) ;EP - RETURN CURRENT VALUE OF A DISPLAY FIELD FROM LINE
 ;
 Q:'$D(FIELD)!('$D(LINE)) 0
 N IBDA,COLUMN,WIDTH,CURVALUE
 S IBDA=$G(LINE)
 S COLUMN=$P(FIELD,U,2)
 S WIDTH=$P(FIELD,U,3)
 S CURVALUE=$E(LINE(IBDA),COLUMN,COLUMN+(WIDTH-1))
 Q CURVALUE