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

IBACCWLUTIL1.m

Go to the documentation of this file.
IBACCWLUTIL1 ;EDE/TPF - ACC (Automated Community Care) Encounters utility APIs (Cont.) ; 12-SEP-2023
 ;;2.0;INTEGRATED BILLING;**770**;21-MAR-2024;Build 119
 ;;Per VA Directive 6402, this routine should not be modified.
 ;
 ; Reference to $P($G(^DPT(DFN,.3)),U) in ICR #426
 ;
 Q
 ;
 ;CALLED FROM CONVERTDFF^IBACCWLUTIL TO CONVERT VALMDDF FOR PUBLISHING
SUBDATAUPDATE(LINE,IBENCIFN,IBDAIEN,VALMDFFFROM,VALMDFFTO) ;EP - UPDATE SUBSRIBER COLUMN DATA
 ;
 N FIELD,TOCOLUMN,TOWIDTH,IBDATALINE   ;PUBTO,PUBFROM,VALMARFROM,VALMARTO
 ;
 S IBDATALINE=LINE
 ;
 S FIELD=""
 F  S FIELD=$O(VALMDFFTO(FIELD)) Q:FIELD=""  D
 .Q:FIELD="LINENUM"!($D(VALMDFFFROM(FIELD)))  ;IF FIELD EXIXTS IN THE PUBLISHERS COLUMNS NO NEED TO PULL DATA BECAUSE IT WAS TRANSFERRED IN CONVERTDFF^IBACCWLUTIL
 .S TOCOLUMN=$P(VALMDFFTO(FIELD),U,2)
 .S TOWIDTH=$P(VALMDFFTO(FIELD),U,3)-1
 .S TODATA=("S TODATA=$$"_FIELD_"("_IBENCIFN_")")
 .X TODATA
 .S IBDATALINE=$$SETSTR^VALM1(TODATA,IBDATALINE,TOCOLUMN,TOWIDTH)   ;TOCOLUMN+TOWIDTH
 ;
 S LINE=IBDATALINE
 ;
 Q
 ;
DIVNAME(IBENCIFN) ;GET DIVISION NAME  ;TPF;IB*2*770V32;EBILL-5411
 N SITENUM,DIVIEN,DIVNAME
 S SITENUM=$$GET1^DIQ(364.9,IBENCIFN_",",.2)
 S:SITENUM DIVIEN=$$LKUP^XUAF4(SITENUM)
 S DIVNAME=$$GET1^DIQ(4,DIVIEN_",",.01,"E")
 Q DIVNAME
 ;
FORMTYPE(IBENCIFN) ;GET FOMRTYPE
 N FORMTYPE
 S FORMTYPE=$$GET1^DIQ(364.9,IBENCIFN_",",.06)
 Q FORMTYPE
 ;
FACNPI(IBENCIFN) ;GET FACILITY NPI ??? WHERE IS THIS
 N NPI
 S NPI=$$GET1^DIQ(364.9,IBENCIFN_",",.09)
 Q NPI
 ;
PROVNPI(IBENCIFN) ;GET PROVIDER NPI
 N NPI
 S NPI=$$GET1^DIQ(364.9,IBENCIFN_",",.09)
 Q NPI
 ;
CPT(IBENCIFN) ;GET CPT
 N CPT
 S CPT=$$GET1^DIQ(364.9,IBENCIFN_",",.13)
 Q CPT
 ;
DOB(IBENCIFN) ;GET DOB
 Q $$FMTE^XLFDT($$GET1^DIQ(364.9,IBENCIFN_",",.1,"I"),"2ZD")
 ;
PRIMDX(IBENCIFN) ;GET PRIMDX
 Q $$GET1^DIQ(364.9,IBENCIFN_",",.14)
 ;
STATUS(IBENCIFN) ;GET STATUS
 Q $$GET1^DIQ(364.9,IBENCIFN_",",.16)
 ;
PRIMINSUR(IBENCIFN) ;GET PRIMARY INSURANCE
 Q $$GET1^DIQ(364.9,IBENCIFN_",",.17)
 ;
SECINSUR(IBDAIEN) ;GET SECONDARY INSURANCE
 Q $$GET1^DIQ(364.9,IBENCIFN_",",.18)
 ;
SERVCON(IBENCIFN) ;GET SERVICE CONNECTED
 N SERVCON
 I $G(DFN) S SERVCON=$P($G(^DPT(DFN,.3)),U) ;ICR #426 (Private)
 E  S SERVCON="UNK"
 Q SERVCON
 ;
ASSIGNEDGRP(IBENCIFN) ;GET ASSIGNED GROUP
 Q $$GET1^DIQ(364.9,IBENCIFN_",",3.01,"I")
 ;
BILLNUM(IBENCIFN) ;GET BILL NUMBER
 N BILL
 S BILL=$$GET1^DIQ(364.9,IBENCIFN_",",2.02)
 I 'BILL D
 .S BILL=$$GET1^DIQ(364.9,IBENCIFN_",",.15)
 .S BILL=$E(BILL,($L(BILL)-$P(VALMDFFTO("BILLNUM"),U,3))+1,$L(BILL))
 Q BILL
 ;
DATEASSNED(IBENCIFN) ;GET DATE ASSIGNED
 Q $$FMTE^XLFDT($$GET1^DIQ(364.9,IBENCIFN_",",3.03,"I"),"2ZD")
 ;
DAYSONWL(IBENCIFN) ;GET DAYS ON THE WORKLIST
 Q $$GET1^DIQ(364.9,IBENCIFN_",",.23)
 ;
INDICATOR(IBENCIFN) ;GET INDICATOR
 N PATNOTFOUND,STATUS,VISMARK
 S PATNOTFOUND=$D(^IBA(364.9,IBENCIFN,5,"B",1))  ;1 = #364.91 - PAT NOT FOUND IS CODE 1
 S STATUS=$$GET1^DIQ(364.9,IBENCIFN_",",.16,"I")
 S VISMARK=$S(PATNOTFOUND:"!",1:"")
 S VISMARK=VISMARK_$S(STATUS=1:"*",1:"")  ;* = 'IN PROGRESS' ! = PAT NOT IN #200
 Q $G(VISMARK)
 ;
PATTYPE(IBENCIFN) ;GET PATIENT TYPE
 Q $$GET1^DIQ(364.9,IBENCIFN_",",.05,"I")
 ;
PREVACT(IBENCIFN) ;GET LAST PREVIOUS ACTIVITY
 N PREVACTIEN,ACTCODEIENS,ACTRTEUN,ACTERROR
 S PREVACTIEN=$O(^IBA(364.9,IBENCIFN,4,99999),-1)
 I PREVACTIEN D
 .S ACTCODEIENS=$P(^IBA(364.9,IBENCIFN,4,PREVACTIEN,0),U,3)_","
 .D GETS^DIQ(364.92,ACTCODEIENS,".01;.02;","E","ACTRETURN","ACTERROR")
 .S PREVACTIVITY=$G(ACTRETURN(364.92,ACTCODEIENS,.01,"E"))_" "_$E($G(ACTRETURN(364.92,ACTCODEIENS,.02,"E")),1,50)
 Q $G(PREVACTIVITY)
 ;
PROVIDER(IBENCIFN) ;GET PROVIDER
 Q $$GET1^DIQ(364.9,IBENCIFN_",",.07,"I")
 ;
REASCODE(IBENCIFN) ;GET REASON CODE
 N REASON,REASCODE,REASIEN,REASONPTR
 S REASIEN=$O(^IBA(364.9,IBENCIFN,5,0))
 I REASIEN D
 .S REASONPTR=$P($G(^IBA(364.9,IBENCIFN,5,REASIEN,0)),U)
 .I REASONPTR'="" D
 ..S REASCODE=$$RJ^XLFSTR($P($G(^IBA(364.91,REASONPTR,0)),U),3," ")
 ..S REASON=$P($G(^IBA(364.91,REASONPTR,0)),U,2)
 .S REASON=$G(REASCODE)_" "_$G(REASON)
 Q $G(REASON)
 ;
SERVDATE(IBENCIFN) ;GET SERVICE DATE
 Q $$FMTE^XLFDT($$GET1^DIQ(364.9,IBENCIFN_",",.12,"I"),"2ZD")
 ;
SERVFAC(IBENCIFN) ;GET SERVICE FACILITY
 Q $$GET1^DIQ(364.9,IBENCIFN_",",.2,"I")
 ;
SSN(IBENCIFN) ;GET SERVICE FACILITY
 Q $E($$GET1^DIQ(364.9,IBENCIFN_",",.11,"I"),6,9)
 ;
 ;PUBLISH CHANGE TO JUST ONE FIELD
FIELDPUBLISH(FIELD,FIELDVALUE,IBENCIFN,PUBSUCCESS) ;EP - PLACE DATA TO PUBLISH TO OTHER ACC ENCOUNTER WORK GROUP USERS INTO THEIR DATA GLOBALS
 ;
 N IBTOIBDA,LASTONE,LINE,JOB,SUBCRIBEGRP,X,VALMAR
 ;
 S FIELD=$P(FIELD,U)
 ;
 S PUBSUCCESS=0
 S SUBCRIBEGRP="IBACCWL"
 F  S SUBCRIBEGRP=$O(^TMP(SUBCRIBEGRP)) Q:SUBCRIBEGRP=""!(SUBCRIBEGRP'[("IBACCWL"))  D
 .S JOB=0
 .F  S JOB=$O(^TMP(SUBCRIBEGRP,JOB)) Q:'JOB  D
 ..;
 ..Q:JOB=$J  ;DO NOT ASSIGN TO SELF
 ..; 
 ..I $G(^TMP(SUBCRIBEGRP,JOB,2,0))[("NO DATA FOUND") K ^TMP(SUBCRIBEGRP,JOB) Q   ;DEAL WITH THAT ONE VERY LOW POSSIBLE SITUATION A S LASTONEPUBLISHED=1
 ..;
 ..Q:'$D(^TMP(SUBCRIBEGRP,$J,"IEN3649",IBENCIFN))  ;=348
 ..;
 ..;UPDATE ENTRY IN WORKLIST
 ..S IBTOIBDA=$G(^TMP(SUBCRIBEGRP,JOB,"IEN3649",IBENCIFN))
 ..Q:IBTOIBDA=""  ;TPF;IB*2*770v9;EBILL-4482  IF THIS NODE IS NOT THERE IT IS A CORRUPT REC. OR WAS DELETED BEFORE THIS PUBLISH OCCURED
 ..S VALMAR="^TMP("""_SUBCRIBEGRP_""","_JOB_")"
 ..D FLDTEXT^VALM10(IBTOIBDA,FIELD,FIELDVALUE)
 ;
 Q
 ;
TRANSMITTED(IBIFN) ;EP - CHECK BILL FOR TRANSMISION STATUS
 ;
 N STATUS
 S STATUS=$$GET1^DIQ(399,IBIFN_",",.13,"E")  ;STATUS
 ;JWS;7/31/25;EBILL-5712;IB*2.0*770v38;added AUTHORIZED as a successful status (commercial claims until transmitted)
 Q (STATUS="REQUEST MRA")!(STATUS="PRNT/TX")!(STATUS="AUTHORIZED")
 ;
 ;CALLED BY IBACCWLAIVIEW
ASKSTATUS(REQUIRED) ;EP - ASK STATUS ONLY FOR BACTH PROCESSING
 ;
 N DIR,SETOFCODES,DUOUT,DTOUT,DIROUT
 N TARGET,MESSAGE   ;WCJ;XINDEX;TEAL
 ;
STA ;
 ;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)="S^"_SETOFCODES
 S DIR("A")="BATCH STATUS"
 D ^DIR
 I $D(DUOUT)!$D(DTOUT)!$D(DIROUT),(REQUIRED),(X="@") G STA
 Q:$D(DUOUT)!$D(DTOUT)!$D(DIROUT) 0  ;W !!,"FIELD REQUIRED!" G STA
 S STATUS=Y(0)
 Q STATUS
 ;
AVAILABLECHK(IBDA) ;EP - CHECK IF RECORD HAS BEEN REASSIGNED AND THEREFOREE UNAVAILABEL TOI THE CURRENT USER
 ;
 N IBENCIFN,IBDAIEN
 I $D(IBFROMVALMDDF) N VALMAR S VALMAR=$G(IBFROMVALMDDF(1,"VALMAR")) Q:VALMAR=""  ;TPF;IB*2*770v38;EBILL-5485,5721
 S IBDAIEN=0
 ;
 I '$O(IBDA("")),$G(IBDA) W !!,"RECORD IS NO LONGER AVAILABLE." N DIR D PAUSE^VALM1 Q  ;TPF;IB*2*770v48;EBILL-6095
 ;
 F  S IBDAIEN=$O(IBDA(IBDAIEN)) Q:'IBDAIEN  D
 .;
 .I $D(@VALMAR@(IBDAIEN,"UNAVAILABLE")) D
 ..W !,"RECORD "_IBDAIEN_" IS NO LONGER AVAILABLE BECAUSE "
 ..W !,$G(@VALMAR@(IBDAIEN,"UNAVAILABLE"))
 ..W !,$S($G(IBDA("TOTAL"))>1:"RECORD WILL BE REMOVED FROM THE BATCH.",1:"RECORD CAN NOT BE PROCESSED!")  ;TPF;IB*2*770v????;EBILL-9999
 ..K IBDA(IBDAIEN)  ;REMOVE FROM BATCH
 ..S VALMBCK="R"
 ..N DIR  ;TPF;IB*2*770v47;EBILL-6042
 ..D PAUSE^VALM1
 ..;
 .;IBPARENT=0 SHOWS IT IS A "CHILD" SCREEN!
 .I $G(IBPARENT)=0 D  ;TPF;IB*2*770v38;EBILL-5485
 ..;S IBENCIFN=$G(@VALMAR@("IEN3649",1))  ;TMP("IBACCWLEE",2866858,"IEN3649",1)=683
 ..S IBENCIFN=$G(^TMP("IBACCWLEE",$J,"IEN3649",1))  ;;TPF;IB*2*770v48;EBILL-6095
 .E  D
 ..S IBENCIFN=$G(@VALMAR@(IBDAIEN,"IEN3649",1))
 .;
 .I $$STATUS^IBACCWLUTIL1(IBENCIFN)="CLOSED" D  Q
 ..W !,"THIS RECORD IS NO LONGER AVAILABLE BECAUSE "
 ..W !,"IT HAS BEEN CLOSED!"
 ..W !,$S($G(IBDA("TOTAL"))>1:"RECORD WILL BE REMOVED FROM THE BATCH.",1:"RECORD CAN NOT BE PROCESSED!")  ;TPF;IB*2*770vPURPLE;EBILL-9999
 ..K IBDA(IBDAIEN)  ;REMOVE FROM BATCH
 ..S VALMBCK="R"
 ..N DIR  ;TPF;IB*2*770v47;EBILL-6042
 ..D PAUSE^VALM1
 ..;
 ;
 I $D(IBDA)=1 K IBDA D
 .W !!,"THE SELECTED RECORD(S) HAVE BEEN REASSIGNED."
 .W !,"YOU CAN NO LONGER SELECT THIS RECORD!"
 I '$D(IBDA) W !,"ALL SELECTIONS HAVE BEEN REASSIGNED" N DIR D PAUSE^VALM1 Q  ;TPF;IB*2*770v47;EBILL-6042
 ;
 Q
 ;
 ;TPF;IB*2*770vPURPLE;EBILL-5466
NBSCREEN(IBDA) ;EP - SCREEN FOR ACTION NB WHERE THE K# IS NOT CANCELLED YET
 ;
 N IBBILL,IBIFN,IBENCIFN,IBDAIEN,ORIGBTOT
 S ORIGBTOT=IBDA("TOTAL")
 W !
 S IBDAIEN=0
 F  S IBDAIEN=$O(IBDA(IBDAIEN)) Q:'IBDAIEN  D
 .;
 .I $G(IBDA(IBDAIEN))["-------------" K IBDA(IBDAIEN) S IBDA("TOTAL")=IBDA("TOTAL")-1 Q
 .;IBPARENT=0 SHOWS IT IS A "CHILD" SCREEN!
 .I $G(IBPARENT)=0 D  ;TPF;IB*2*770v38;EBILL-5485
 ..S IBENCIFN=$G(@VALMAR@("IEN3649",1))
 .E  D
 ..S IBENCIFN=$G(@VALMAR@(IBDAIEN,"IEN3649",1))
 .Q:'$G(IBENCIFN)
 .;
 .S IBIFN=$$GET1^DIQ(364.9,IBENCIFN_",",2.02,"I")
 .Q:IBIFN=""
 .;
 .I '$$CANCELLED(IBIFN) D
 ..S IBBILL=$$GET1^DIQ(399,IBIFN_",",.01,"E")
 ..W !!,$G(IBBILL)_" is not cancelled and cannot be closed via NB!"
 ..W:(ORIGBTOT>1) !,"Encounter has been removed from the batch."
 ..K IBDA(IBDAIEN)
 ..S IBDA("TOTAL")=IBDA("TOTAL")-1
 ;
 K:IBDA("TOTAL")=0!(IBDA("TOTAL")<0) IBDA("TOTAL")
 ;
 I $D(IBDA)=1 K IBDA D
 .W:(ORIGBTOT>1) !!,"NO ITEMS LEFT IN THE BATCH!"
 .N DIR  ;TPF;IB*2*770v47;EBILL-6042
 .D PAUSE^VALM1
 ; 
 Q
CANCELLED(IBIFN) ;EP - CHECK BILL FOR CANCELLED STATUS
 ;
 N STATUS
 S STATUS=$$GET1^DIQ(399,IBIFN_",",.13,"E")  ;STATUS
 Q (STATUS="CANCELLED")
 ;
 ;TPF;IB*2*770vPURPLE;EBILL-5715
IPSCREEN(IBDA) ;EP - SCREEN FOR ACTIVITY CODE 506 - APPLIES TO ONLY IP
 ;
 N IBENCIFN,IBDAIEN,IBTYPE,IBENC,ORIGBTOT  ;EBILL-5946;v42
 S ORIGBTOT=IBDA("TOTAL")  ;EBILL-5946;v42
 W !
 S IBDAIEN=0
 F  S IBDAIEN=$O(IBDA(IBDAIEN)) Q:'IBDAIEN  D
 .I $G(IBDA(IBDAIEN))["--------------" K IBDA(IBDAIEN) S IBDA("TOTAL")=IBDA("TOTAL")-1 Q
 .;IBPARENT=0 SHOWS IT IS A "CHILD" SCREEN!
 .I $G(IBPARENT)=0 D  ;TPF;IB*2*770v38;EBILL-5485
 ..S IBENCIFN=$G(@VALMAR@("IEN3649",1))
 .E  D
 ..S IBENCIFN=$G(@VALMAR@(IBDAIEN,"IEN3649",1))
 .;
 .Q:'$G(IBENCIFN)
 .;
 .S IBTYPE=$$GET1^DIQ(364.9,IBENCIFN_",",.05,"E")
 .Q:IBTYPE="IN-PATIENT"  ;506 FOR IP IS OK
 .;
 .S IBBILL=$$GET1^DIQ(364.9,IBENCIFN_",",2.02,"E")
 .S:IBBILL="" IBBILL=$$GET1^DIQ(364.9,IBENCIFN_",",.15)
 .;
 .W !!,"Activity Code 506 is for Inpatient encounters only."
 .W:(ORIGBTOT>1) !,IBBILL," has been removed from the batch."  ;EBILL-5946;v42
 .K IBDA(IBDAIEN)
 .S IBDA("TOTAL")=IBDA("TOTAL")-1
 ;
 K:IBDA("TOTAL")=0!(IBDA("TOTAL")<0) IBDA("TOTAL")
 ;
 I $D(IBDA)=1 K IBDA D
 .W:(ORIGBTOT>1) !,"NO ITEMS LEFT IN THE BATCH!"   ;EBILL-5946;v42
 .N DIR  ;TPF;IB*2*770v47;EBILL-6042
 .D PAUSE^VALM1
 ; 
 Q
 ;
 ;EBILL-5130 RESEARCHING CAUSE OF <UNDEFINED>FLDTEXT+5^VALM10. CAN NOT REPLICATE
 ;ERROR REALLY OCCURRS IN EEPUBLISH+12^IBACCWLUTIL1 BECAUSE THE VALMAR OF PARENT WL IS GONE
 ;COMMENT PLACED HERE BECAUSE IBACCWLAIBILL WAS TOO BIG
EEPUBLISH(IBDAIEN,IBFROMVALMDDF,SUCCESS,LASTONEPUBLISHED) ;EP - MUST COME HERE TO PUBLISH FROM EE/RE-ASSIGN, RA-RESUBMIT
 ;UPDATE THE APPROPRIATE USER'S SCREEN LIST. IF CALLING FROM AN EE THEN UPDATE THE DATA ARRAY FOR THE WL THEY CALLED EE FROM
 ;SUCCESS IS ONLY DEFINED IN THE RA - RESUBMIT ACTION ITEM IN RESUBMITLOOP^IBACCWLAIBILL
 N VALMAR,VALMDDF
 S VALMAR=$G(IBFROMVALMDDF(1,"VALMAR"))
 Q:VALMAR=""
 M VALMDDF=IBFROMVALMDDF
 ;
 I $G(SUCCESS) D
 .S @VALMAR@(IBDAIEN,"UNAVAILABLE")="RECORD HAS BEEN REASSIGNED OR RESUBMITTED. ON YOUR NEXT LOG IN YOU WILL NOT SEE THIS ENTRY."
 .D:$D(IBFROMVALMDDF("INDICATOR")) FLDTEXT^VALM10(IBDAIEN,"INDICATOR","# ")  ;TPF;IB*2*770v35;EBILL-5728
 ;
 D:$D(IBFROMVALMDDF("ASSIGNEDGRP")) FLDTEXT^VALM10(IBDAIEN,"ASSIGNEDGRP",$G(ASSIGNTOGRP))
 ;
 ;I '$D(^TMP("IBACCWLEE",$J,IBDAIEN,0)) Q  ;TPF;EBILL-5130??? SHOULD BE ^TMP("IBACCWLFRT" OR ANY PARENT WL VALMAR IS WRONG
 I $G(CURASSIGGRP)'=$$ASSIGNEDGRP^IBACCWLUTIL1(IBENCIFN) D  ;TPF;IB*2*770v35;EBILL-5728
 .S @VALMAR@(IBDAIEN,"UNAVAILABLE")="RECORD HAS BEEN REASSIGNED. ON YOUR NEXT LOG IN YOU WILL NOT SEE THIS ENTRY."
 .D:$D(IBFROMVALMDDF("INDICATOR")) FLDTEXT^VALM10(IBDAIEN,"INDICATOR","# ")
 ;
 D:$D(IBFROMVALMDDF("PREVACT")) FLDTEXT^VALM10(IBDAIEN,"PREVACT",$G(PREVACTIVITY))
 I $D(IBFROMVALMDDF("PREVACT")) S PREVACTIVITY=$$PREVACT^IBACCWLUTIL1(IBDAIEN)
 ;
 D:$G(PUBLISHINGON)&($G(ASSIGNTOGRP)'="") PUBLISH^IBACCWLUTIL(ASSIGNGRP,IBENCIFN,IBDAIEN,ASSIGNTOGRP,.IBFROMVALMDDF,.PUBSUCCESS,IBDAIEN,.LASTONEPUBLISHED)  ;UPDATE OTHER USERS IN ASSIGNED TO GROUP
 ;
 Q
 ;
 ;USED BY X-REF 
 ;W $$PTNAME^IBACCWLUTIL1(34)
PTNAME(IBENCIFN) ;EP - COMBINE NAME FIELD SIN #364.9 INTOVISTA TYPE NAME FOR NAME LOOKUP X-REF
 ;
 N FNAME,LNAME,MNAME
 S LNAME=$P($G(^IBA(364.9,IBENCIFN,0)),U,2)
 S FNAME=$P($G(^IBA(364.9,IBENCIFN,0)),U,3)
 S MNAME=$P($G(^IBA(364.9,IBENCIFN,0)),U,4)
 Q:LNAME=""&(FNAME="")&(MNAME="") "UNDEF"_U_IBENCIFN
 ;
 Q LNAME_","_FNAME_" "_MNAME
 ;
 ;DAYS ON WORKGROUP WORKLIST
 ;W $$DAYSONWRKGRP^IBACCWLUTIL1(1)
DAYSONWRKGRP(IBENCIFN) ;COMPUTE DAYS ON WORKGROUP WORKLIST
 ;
 Q:'$G(IBENCIFN)
 ;
 N DTASSIGNED,IENS,STATUS,STATUSDTCHANG,X,Y,X1,X2,%Y
 S IENS=IBENCIFN_","
 S STATUSDTCHANG=$$GET1^DIQ(364.9,IENS,.22,"I")  ;DATE STATUS WAS CHANGED. IF STATUS=CLOSED USE AS STOP OF CLOCK
 S DTASSIGNED=$$GET1^DIQ(364.9,IENS,3.03,"I")    ;DATE ENCOUNTER ASSIGNED TO GROUP IN FIELD #3.01 ASSIGNED TO GROUP
 S STATUS=$$GET1^DIQ(364.9,IENS,.16,"I")         ;CURRENT STATUS OF THE ENCOUNTER
 ;'0' FOR OPEN; 
 ;'1' FOR IN PROGRESS; 
 ;'2' FOR CLOSED; 
 ;'3' FOR PURGED;
 ;
 I STATUS=2 D        ;2 = CLOSED THIS WILL BE USED FOR AUDIT REPORT?
 .S X1=STATUSDTCHANG
 .S X2=DTASSIGNED
 .D ^%DTC                ;X2 IS SUBTRACTED FROM X1
 .I $G(%Y) S DAYS=X
 .E  S DAYS="ERR"
 E  D
 .S X1=DT
 .S X2=DTASSIGNED
 .D ^%DTC
 .I $G(%Y) S DAYS=X
 .E  S DAYS="ERR"
 ;
 Q DAYS
 ;
 ;;TPF*IB*2*770v20;EBILL=4462,4928 ADD SECONDARY DX
CONVERT2DEC(SECONDX,EEDXDISPLAY) ;EP - CONVERT SECONDARY DX STRING IN FIELD .3 FILE #364.9 TO READABLE DECIMAL
 ;
 Q:$G(SECONDX)?." " ""  ;TPF;IB*2*770V20 ;TPF*IB*2*770v20;EBILL=4928 DEAL WITH NULL DX PASSED
 N LENGTH,PIECE,RETDX,SECDX
 S RETDX=""
 S LENGTH=$L(SECONDX,",")-1
 F PIECE=1:1  S SECDX=$P(SECONDX,",",PIECE) Q:SECDX=""  D
 .I PIECE'=LENGTH S RETDX=RETDX_$$ICDLKUP(SECDX)_", "
 .S EEDXDISPLAY(PIECE)=$$ICDLKUP(SECDX)
 .E  S RETDX=RETDX_$P($$ICDLKUP(SECDX)," ")
 ;
 Q RETDX
 ;TPF;IB*2*770v18;EBILL-4623 PROVIDED BY TIM Z. BUT MODIFIED
 ;W $$ICDLKUP^IBACCWLUTIL1("J329")
 ;TAZ;IB*2*770v19;EBILL-4938
ICDLKUP(IC) ;Look up the ICD Code desciption v12
 ;
 Q:$G(IC)?." " ""  ;TPF;IB*2*770V20 ;TPF*IB*2*770v20;EBILL=4928 DEAL WITH NULL DX PASSED
 N ICDARY,DESC
 N RSLT  ;TPF XINDEX
 S IC=$E(IC,1,3)_"."_$E(IC,4,$L(IC))
 S RSLT=$$DIAGSRCH^LEX10CS(IC,.ICDARY)  ;ICR #5681 (Supported)
 S DESC="" D
 . I RSLT<0 S DESC="Unknown Code" Q
 . I $G(ICDARY(1,"IDS"))]"" S DESC=ICDARY(1,"IDS") Q
 . I $G(ICDARY(1,"LEX"))]"" S DESC=ICDARY(1,"LEX") Q
 . I $G(ICDARY(1,"MENU"))]"" S DESC=ICDARY(1,"MENU") Q
 . S DESC="Unknown Code"
ICDLKUPQ ;Exit lookup 
 Q IC_" - "_DESC
 ;
 ;
HCPCSMANY(CODES,EDXDISPLAY) ;
 Q:$G(CODES)=""
 N PIECE,LENGTH
 F PIECE=1:1 S CODE=$P(CODES,",",PIECE) Q:CODE=""  D
 .S EDXDISPLAY(PIECE)=$$HCPCS(CODE)
 Q 
 ;TPF;IB*2*770v18;EBILL-4623 PROVIDED BY TIM Z. BUT MODIFIED
HCPCS(CODE) ;CPT Code lookup
 N CPTARY,RSLT
 S RSLT=$$CPT^ICPTCOD(CODE,.CPTARY)  ;ICR #1995 (Supported)
 I RSLT'["" S CODE=CODE_" - Unknown Code" Q CODE
 S CODE=CODE_" - "_$P(RSLT,U,3)
 Q CODE
 ;
 ;and the modifier:
 ;TPF;IB*2*770v18;EBILL-4623 PROVIDED BY TIM Z. BUT MODIFIED
CPTMOD(CODE) ;CPT Code Modifier lookup v12
 N CPTARY,RSLT
 S RSLT=$$MOD^ICPTMOD(CODE,.CPTARY)  ;ICR #1996 (Supported)
 I RSLT'["" S CODE=CODE_" - Unknown Code" Q CODE
 S CODE=CODE_" - "_$P(RSLT,U,3)
 Q CODE
 ;
 ;TPF;IB*2*770v26;EBILL-5242
 ;S DFN=2 W $$ISSPECAUTH^IBACCWLUTIL1(DFN)
ISSPECAUTH(IBPATIEN) ;EP - RETURN Y/N FOR SPECIAL AUTHORITY 
 N IBRESLT,SA,SC  ;TPF XINDEX
 D CL^IBACV(IBPATIEN,,,.IBRESLT)
 S (SC,SA)=" "
 I $D(IBRESLT(1)) S SA="Y"
 I $D(IBRESLT(2)) S SA="Y"
 I $D(IBRESLT(3)) S SC="Y"  ;"SERVICE CONNECTED"
 I $D(IBRESLT(4)) S SA="Y"
 I $D(IBRESLT(5)) S SA="Y"
 I $D(IBRESLT(6)) S SA="Y"
 I $D(IBRESLT(7)) S SA="Y"
 I $D(IBRESLT(8)) S SA="Y"
 ;
 S RET=" "_SC_"/"_SA
 Q RET