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

IBACCWLSORT1.m

Go to the documentation of this file.
IBACCWLSORT1 ;EDE/TPF - ACC (Automated Community Care) Encounters Sort Global Sets ; 12-SEP-2023
 ;;2.0;INTEGRATED BILLING;**770**;21-MAR-2024;Build 119
 ;;Per VA Directive 6402, this routine should not be modified.
 ;THIS ROUTINE WAS CLONED FROM ROUTINE IBCECSA BECAUSE ITS PROMPT FORMAT WAS REQUESTED BY THE eBIZ TEAM FOR THE ACC ENCOUNTERS
 Q
 ;
 ;CALLED FROM PULL3649^IBACCWL1
SORTSET(RETURN,ENCIENS,BILLRETURN,IBIFN,RETURNREC) ;EP - SORT THE FIELD DATA PULLED BY THE USER'S SORT AND FILTER SETTINGS
 ;IBSORT(1,"364.9 FIELD NAME","REASONS")=""
 ;IBSORT(1,"399 FIELD NAME","UNDEF")=""
 ;IBSORT(1,"Reason Not AutoBilled")=""
 ;IBSORT(2,"364.9 FIELD NAME","SERVICE DATE")=""
 ;IBSORT(2,"399 FIELD NAME","UNDEF")=""
 ;IBSORT(2,"Date of Service")=""
 ;IBSORT(2,"YES")="D"
 ;IBSORT(3,"364.9 FIELD NAME","DAYS ON WORKLIST")=""
 ;IBSORT(3,"399 FIELD NAME","UNDEF")=""
 ;IBSORT(3,"Days on the Worklist")=""
 ;
 ;IBSORT(1,"364.9 FIELD NAME","X12 CLAIM NUMBER")=""
 ;IBSORT(1,"399 FIELD NAME","BILL NUMBER")=""
 ;IBSORT(1,"Bill Number")=""
 ;IBSORTOR(1)="D"
 ;
 N FIELD3649,FIELD399,FLDORD,IBSORTED1,IBSORTED2,IBSORTED3,ORDER3649,ORDER399,PAIDAMT,PATNAME,PAYERPTR,VAR
 ;
 F FLDORD=1:1:3 S VAR="IBSORTED"_FLDORD,@VAR@(FLDORD)="UNDEF"
 ;
 S FLDORD=0
 F  S FLDORD=$O(IBSORT(FLDORD)) Q:'FLDORD  D
 .S FIELD3649=$O(IBSORT(FLDORD,"364.9 FIELD NAME",""))
 .S FIELD399=$O(IBSORT(FLDORD,"399 FIELD NAME",""))
 .S ORDER3649=$G(IBSORT(FLDORD,FIELD3649))
 .S ORDER399=$G(IBSORT(FLDORD,FIELD399))
 .S:FIELD3649="" FIELD3649="UNDEF"
 .S:FIELD399="" FIELD399="UNDEF"
 .S VAR="IBSORTED"_FLDORD
 .;
 .I FIELD3649="PATIENT SSN" D  Q     ;TPF;IB*2*770v18;EBILL-4623
 ..I $P(VALMDDF("SSN"),U,3)=9 D  ;NO NEED TO SPACE PREFIX THE SORT ON FULL SSN
 ...S @VAR@(FLDORD)=$G(^TMP("IBACCUTIL",$J,RETURNREC,364.9,ENCIENS,FIELD3649,"E"),"UNDEF")
 ..E  S @VAR@(FLDORD)=" "_$G(^TMP("IBACCUTIL",$J,RETURNREC,364.9,ENCIENS,FIELD3649,"E"))
 ..S:@VAR@(FLDORD)=" " @VAR@(FLDORD)=""
 .;
 .I FIELD3649="SERVICE DATE" D  Q   ;TPF;IB*2*770v17;EBILL-4736
 ..S @VAR@(FLDORD)=$S(ORDER3649="A":"-",1:"")_$G(^TMP("IBACCUTIL",$J,RETURNREC,364.9,ENCIENS,FIELD3649,"I"),"UNDEF")  ;TPF;IB*2*770v8;EBILL-4440
 .;
 .I FIELD3649="DAYS ON GROUP WORKLIST" D  Q   ;TPF;IB*2*770v17;EBILL-4736
 ..S @VAR@(FLDORD)=$S(ORDER3649="D":"-",1:"")_$G(^TMP("IBACCUTIL",$J,RETURNREC,364.9,ENCIENS,FIELD3649,"I"))  ;TPF;IB*2*770v8;EBILL-
 .;
 .I FIELD3649="SERVICE FACILITY NPI" D  Q  ;TPF;IB*2*770v8;EBILL-4224
 ..S @VAR@(FLDORD)=$S(ORDER3649="D":"-",1:"")_$G(^TMP("IBACCUTIL",$J,RETURNREC,364.9,ENCIENS,FIELD3649,"I"),"UNDEF")
 .;
 .I FIELD3649="STATUS" D  Q
 ..N S1 S S1="IBACCUTIL"  ;WCJ
 ..S @VAR@(FLDORD)=$S(ORDER3649="D"&$G(^TMP(S1,$J,RETURNREC,364.9,ENCIENS,FIELD3649,"I"))=1:"00",ORDER3649="A"&$G(^TMP(S1,$J,RETURNREC,364.9,ENCIENS,FIELD3649,"I"))=1:"-1",1:$G(^TMP(S1,$J,RETURNREC,364.9,ENCIENS,FIELD3649,"I"),"UNDEF"))
 .;
 .I FIELD3649="PATIENT NAME" D  Q
 ..S PATNAME=$G(^TMP("IBACCUTIL",$J,RETURNREC,364.9,ENCIENS,"PATIENT LAST NAME","E"))_", "_$G(^TMP("IBACCUTIL",$J,RETURNREC,364.9,ENCIENS,"PATIENT FIRST NAME","E"))_" "_$G(^TMP("IBACCUTIL",$J,RETURNREC,364.9,ENCIENS,"PATIENT MIDDLE NAME","E"))
 ..S @VAR@(FLDORD)=$G(PATNAME)
 .;
 .I FIELD3649="PAID AMOUNT" D  Q
 ..I ORDER3649="D" S PAIDAMT=-$G(^TMP("IBACCUTIL",$J,RETURNREC,364.9,ENCIENS,"PAID AMOUNT","E"))
 ..E  S PAIDAMT=+$G(^TMP("IBACCUTIL",$J,RETURNREC,364.9,ENCIENS,"PAID AMOUNT","E"))
 ..S @VAR@(FLDORD)=$G(PAIDAMT)
 .;
 .;TPF;IB*2*770v25;BEGIN EBILL-5133
 .I FIELD3649="SITE NUMBER" D  Q
 ..N SITEIEN,SITENAME
 ..S SITEIEN=$$LKUP^XUAF4($G(^TMP("IBACCUTIL",$J,RETURNREC,364.9,ENCIENS,FIELD3649,"E")))
 ..S SITENAME=$P($$NNT^XUAF4(SITEIEN),U)
 ..S @VAR@(FLDORD)=SITENAME
 .;TPF;IB*2*770v25;END EBILL-5133
 .;
 .I FIELD3649="PRIMARY DX" D  Q  ;TPF;IB*2*770v38;EBILL-5505
 ..I ORDER3649="A" D
 ...S @VAR@(FLDORD)=$G(^TMP("IBACCUTIL",$J,RETURNREC,364.9,ENCIENS,FIELD3649,"I"),"UNDEF")
 ..E  D
 ...S @VAR@(FLDORD)=$$INVERT^IBACCWLSORT1($G(^TMP("IBACCUTIL",$J,RETURNREC,364.9,ENCIENS,FIELD3649,"I"),"UNDEF"))
 .;
 .I FIELD3649'="" S @VAR@(FLDORD)=$G(^TMP("IBACCUTIL",$J,RETURNREC,364.9,ENCIENS,FIELD3649,"E"))
 .;
 .I $G(IBIFN) D BILL399OVER(RETURNREC)
 .;
 .Q:$G(FIELD399)="UNDEF"!('IBIFN)
 .;
 .;IF 399 HAS A FIELD DEFINED ITS VALUE TAKES PRECEDENCE OVER A VALUE FOUND IN 364.9
 .;
 .I FIELD399="$$CURR~IBCEF2(IBIFN)" D  Q  ;PAYER
 ..S PAYERPTR=$$CURR^IBCEF2(IBIFN)
 ..I PAYERPTR S @VAR@(FLDORD)=$$GET1^DIQ(36,PAYERPTR_",",.01)
 .;
 .I FIELD399="$$INPAT^IBCEF(IBIFN)" D  Q
 ..S @VAR@(FLDORD)=$$INPAT^IBCEF(IBIFN)
 .;
 .I FIELD399'=""  S @VAR@(FLDORD)=$G(BILLRETURN(399,IBIFN_",",FIELD399,"E"))
 ;
 F FLDORD=1:1:3 S VAR="IBSORTED"_FLDORD I @VAR@(FLDORD)="" S @VAR@(FLDORD)="z "  ;IF NO DATA FOUND  ;TPF;IB*2*770v11;EBIL-???? UNDEF SORT WRONG 'Z' DOES NOT DISPLAY
 ;
 I $G(IBIFN) I $$TRANSMITTED^IBACCWLUTIL1(IBIFN) D UPDSTATUS^IBACCWLUTIL(+ENCIENS,"CLOSED") Q
 ;
 I $G(IBIFN) M ^TMP("IBACCUTIL",$J,"K# SORTED",IBSORTED1(1),IBSORTED2(2),IBSORTED3(3))=^TMP("IBACCUTIL",$J,RETURNREC)
 E  M ^TMP("IBACCUTIL",$J,"NO K# SORTED",IBSORTED1(1),IBSORTED2(2),IBSORTED3(3))=^TMP("IBACCUTIL",$J,RETURNREC)
 ;
 Q
 ;
 ;S STR="TESTSTRING" W $$INVERT^IBACCWLSORT1(STR)
INVERT(STR) ;EP - INVERT STRING FOR REVERSE SORT - USED FOR DX
 N CHAR,RESULT
 S RESULT=""
 F CHAR=1:1:$LENGTH(STR) D
 .S RESULT=RESULT_$C(255-$A($E(STR,CHAR)))
 Q RESULT
 ;
 ;THERE IS NOT ENOUGH DATA AT THIS TIME 5/8/2024 TO REALLY MAKE A GOOD DECISION ABOUT OVERWRITING ALL OF THESE FIELDS
BILL399OVER(RETURNREC) ;EP - 399 DATA OVERRIDES 364.9
 N IBIFNIENS,PATPTR,PATSSN,PRIMINS,SECINS
 ;
 S IBIFNIENS=IBIFN_","
 S ^TMP("IBACCUTIL",$J,RETURNREC,364.9,ENCIENS,"PRIMARY INS","E")=$G(BILLRETURN(399,IBIFNIENS,"PRIMARY INSURANCE CARRIER","E"))
 S ^TMP("IBACCUTIL",$J,RETURNREC,364.9,ENCIENS,"SECONDARY INS","E")=$G(BILLRETURN(399,IBIFNIENS,"SECONDARY INSURANCE CARRIER","E"))
 ;
 Q
 S PATPTR=$G(BILLRETURN(399,IBIFNIENS,"PATIENT NAME","I"))  ;PAT PTR
 S PATSSN=$P($G(^DPT(PATPTR,0)),U,9)
 I $G(^TMP("IBACCUTIL",$J,RETURNREC,364.9,ENCIENS,"PATIENT SSN","E"))="" S ^TMP("IBACCUTIL",$J,RETURNREC,364.9,ENCIENS,"PATIENT SSN","E")=PATSSN
 ;
 Q
 ;
 ;ASK FOR FIELD SORT ORDER. CALL FROM IBACCWLSORT
IBSORTOR(IBZ,IBSORT,IBSORTOR,LVL,VALMQUIT)  ;GET SORT ORDER;TPF;IB*2*770v12;EBILL-4224
 N DIR,DTOUT,DUOUT,DIROUT,FILTERSORTS,X,Y
 ;
 ;I IBZ="C" D  Q    ;CLAIM AMOUNT
 I IBZ="A" D       ;TPF;IB*2*770v20;EBILL-4968
 . S DIR(0)="Y"
 . S DIR("A")="Display Highest Balances First",DIR("B")="Yes"
 . S DIR("A",1)=""
 . S DIR("?",1)="Enter Yes or No."
 . S DIR("?",2)=""
 . S DIR("?",3)="Yes, I want to see the large balances first at the top of the list and the"
 . S DIR("?",4)="small balances last at the bottom of the list."
 . S DIR("?",5)=""
 . S DIR("?",6)="No, I want to see the small balances first at the top of the list and the"
 . S DIR("?")="large balances last at the bottom of the list."
 . D ^DIR K DIR
 . I $D(DTOUT) S VALMQUIT=1 Q    ; timeout
 . I $D(DUOUT) S VALMQUIT=1 K @("IBSORT"_LVL) Q  ;TPF;IB*2*770v27;EBILL-5297
 . I $D(DIRUT) S:LVL=1 VALMQUIT=1 K @("IBSORT"_LVL) Q   ; ^ or nil resp
 . I Y S IBSORTOR(IBZ)="D"    ; yes, large first, descending
 . I 'Y S IBSORTOR(IBZ)="A"   ; no, small first, ascending
 .I Y S IBSORT(LVL,$$FLD3649^IBACCWLSORT(IBZ))="D"
 .E  S IBSORT(LVL,$$FLD3649^IBACCWLSORT(IBZ))="A"
 ;
 ;I IBZ="S" D  Q    ; SERVICE DATE question
 I IBZ="S" D  ;TPF;IB*2*770v18;EBILL-4623
 . S DIR(0)="Y"
 . S DIR("A")="Display Oldest Encounters First",DIR("B")="Yes"
 . S DIR("A",1)=""
 . S DIR("?",1)="Enter Yes or No."
 . S DIR("?",2)=""
 . S DIR("?",3)="Yes, I want to see Encounters with old dates of service at the top of the list"
 . S DIR("?",4)="and Encounters with recent dates of service at the bottom of the list."
 . S DIR("?",5)=""
 . S DIR("?",6)="No, I want to see Encounters with recent dates of service at the top of the list"
 . S DIR("?")="and older Encounters at the bottom of the list."
 . D ^DIR K DIR
 . I $D(DTOUT) S VALMQUIT=1 Q    ; timeout
 . I $D(DUOUT) S VALMQUIT=1 K @("IBSORT"_LVL) Q  ;TPF;IB*2*770v27;EBILL-5297
 . I $D(DIRUT) S:LVL=1 VALMQUIT=1 K @("IBSORT"_LVL) Q   ; ^ or nil resp
 . I Y S IBSORTOR(IBZ)="A"    ; yes, old first, ascending sort
 . I 'Y S IBSORTOR(IBZ)="D"   ; no, new first, descending sort
 .I Y S IBSORT(LVL,$$FLD3649^IBACCWLSORT(IBZ))="D"
 .E  S IBSORT(LVL,$$FLD3649^IBACCWLSORT(IBZ))="A"
 ;
 I IBZ="R" D  Q    ; STATUS question
 . S DIR(0)="Y"
 . S DIR("A")="Display Encounter 'In Progress' Last",DIR("B")="Yes"
 . S DIR("A",1)=""
 . S DIR("?",1)="Enter Yes or No."
 . S DIR("?",2)=""
 . S DIR("?",3)="Yes, I want to group together Encounters 'In Progress' at the bottom of"
 . S DIR("?",4)="the list."
 . S DIR("?",5)=""
 . S DIR("?",6)="No, I want to group together Encounters 'In Progress' at the top of the"
 . S DIR("?")="list."
 . D ^DIR K DIR
 . I $D(DTOUT) S VALMQUIT=1 Q    ; timeout
 . I $D(DUOUT) S VALMQUIT=1 K @("IBSORT"_LVL) Q  ;TPF;IB*2*770v27;EBILL-5297
 . I $D(DIRUT) S:LVL=1 VALMQUIT=1 K @("IBSORT"_LVL) Q   ; ^ or nil resp
 . I Y S IBSORTOR(IBZ)="A"    ; yes, 1 at bottom, 0 at top, ascending
 . I 'Y S IBSORTOR(IBZ)="D"   ; no, 1 at top, 0 at bottom, descending
 .I Y S IBSORT(LVL,$$FLD3649^IBACCWLSORT(IBZ))="D"
 .E  S IBSORT(LVL,$$FLD3649^IBACCWLSORT(IBZ))="A"
 ;
 I IBZ="SFN" D  Q    ;SERVICE FACILITY NPI   ;TPF;IB*2*770v12;EBILL-4224
 . S DIR(0)="Y"
 . S DIR("A")="Display NPI is Descending order",DIR("B")="Yes"
 . S DIR("A",1)=""
 . S DIR("?",1)="Enter Yes or No."
 . S DIR("?",2)=""
 . S DIR("?",3)="Yes, I want to see the larger NPIs first at the top of the list and the"
 . S DIR("?",4)="small balances last at the bottom of the list."
 . S DIR("?",5)=""
 . S DIR("?",6)="No, I want to see the smaller NPIs first at the top of the list and the"
 . S DIR("?")="large balances last at the bottom of the list."
 . D ^DIR K DIR
 . I $D(DTOUT) S VALMQUIT=1 Q    ; timeout
 . I $D(DUOUT) S VALMQUIT=1 K @("IBSORT"_LVL) Q  ;TPF;IB*2*770v27;EBILL-5297
 . I $D(DIRUT) S:LVL=1 VALMQUIT=1 K @("IBSORT"_LVL) Q   ; ^ or nil resp
 . I Y S IBSORTOR(IBZ)="D"    ; yes, large first, descending
 . I 'Y S IBSORTOR(IBZ)="A"   ; no, small first, ascending
 .I Y S IBSORT(LVL,$$FLD3649^IBACCWLSORT(IBZ))="D"
 .E  S IBSORT(LVL,$$FLD3649^IBACCWLSORT(IBZ))="A"
 ;
 ;BEGIN TPF;IB*2*770v38;EBILL-5505 ONLY RUR GETS PRIMARY DX AS A SORT
 I IBZ="X" D
 . S DIR(0)="Y"
 . S DIR("A")="Display Primary DX in Ascending order"
 . S DIR("B")="Yes"
 . S DIR("A",1)=""
 . S DIR("?",1)="Enter Yes or No."
 . S DIR("?",2)=""
 . S DIR("?",3)="Yes, I want to see the Primary DX alphanumerical ordered first to last."
 . S DIR("?",4)=""
 . S DIR("?",5)="No, I want to see the Primary DX in reverse alphanumerical order last at the top of the list."
 . S DIR("?")=""
 . D ^DIR K DIR
 . I $D(DTOUT) S VALMQUIT=1 Q    ; timeout
 . I $D(DUOUT) S VALMQUIT=1 K @("IBSORT"_LVL) Q
 . I $D(DIRUT) S:LVL=1 VALMQUIT=1 K @("IBSORT"_LVL) Q   ; ^ or nil resp
 . I Y S IBSORTOR(IBZ)="A"    ; yes, large first, ascending
 . I 'Y S IBSORTOR(IBZ)="D"   ; no, small first, descending
 .I Y S IBSORT(LVL,$$FLD3649^IBACCWLSORT(IBZ))="A"
 .E  S IBSORT(LVL,$$FLD3649^IBACCWLSORT(IBZ))="D"
 ;END TPF;IB*2*770v38;EBILL-5505
 ;
 I $G(VALMQUIT) Q  ;TPF;IB*2*770v27;EBILL-5297
 ;ADDTIONAL FILTERS TO SORTS
 ;TPF;IB*2*770v20;EBILL-4631;FOR SORT "FILTER"
 ;
 ;Q:(U_"FRT"_U_"PTF"_U_"IV"_U)'[(U_USERGROUP_U)  ;TPF;IB*2*770v25;EBILL-4705 CANNOT FILTER OUT RUR AND IV ANYMORE
 S FILTERSORTS=""  ;AND FILTERSORTS FOR ALL GROUPS DEFAULTS TO NULL
 ;
 ;I USERGROUP="IV" S FILTERSORTS=U_"M"_U    ;THESE ARE SORTS THAT HAVE BEEN REQUESTED TO HAVE "FILTERS" ADDED TO THEM PER EBILL-4631
 I USERGROUP="FRT"!(USERGROUP="PTF") S FILTERSORTS=U_"A"_U_"E"_U_"N"_U_"M"_U_"P"_U_"L"_U
 ;
 I USERGROUP="IV"!(USERGROUP="RUR")!(USERGROUP="BILL") S FILTERSORTS=U_"A"_U_"E"_U_"M"_U_"N"_U_"P"_U       ;TPF;IB*2*770v27;EBILL-5355
 ;
 I USERGROUP="RUR" S FILTERSORTS=FILTERSORTS_U_"X"_U  ;TPF;IB*2*770v38;EBILL-5505 ONLY RUR GETS PRIMARY DX AS A SORT
 ;
 S FILTERSORTS=FILTERSORTS_U_"S"_U  ;TPF;IB*2*770v25;EBILL-4705 FOR ALL GROUPS ADD DATE OF SERVICE TO FILTER LIST
 ;
 I FILTERSORTS[(U_IBZ_U) D
 .N FILTER3649,FILTER399,FILE,FIELD   ;TPF XINDEX
 .S FIELD=$O(IBSORT(LVL,"364.9 FIELD NAME",""))  ;CLUMSY
 .S:FIELD'="" FILE=364.9
 .;
 .S IBSORTFIL(LVL,IBZ)=" "_$$SORTFILTER^IBACCWLUTIL2(FILE,FIELD)
 ;
 ;PRESENT THE LOGIC TO THE USER AND REMOVE LOGIC FROM THE ARRAY
 ;CJ DID NOT SEEM TO THINK THE USER COULD USE THIS. TOO MUCH INFO???
 ;W !!,"Below is the filter logic you have chosen for this worklist load."
 N CODE,FIELD,LEVEL,LOGIC,SORTTYP
 S LEVEL=0
 F  S LEVEL=$O(IBSORTFIL(LEVEL)) Q:'LEVEL  D
 .S SORTTYP=""
 .F  S SORTTYP=$O(IBSORTFIL(LEVEL,SORTTYP)) Q:SORTTYP=""  D
 ..S FIELD=$O(IBSORT(LEVEL,""),-1)
 ..S CODE=$P(IBSORTFIL(LEVEL,SORTTYP),"|")
 ..S LOGIC=$P(IBSORTFIL(LEVEL,SORTTYP),"|",2)
 ..S $P(IBSORTFIL(LEVEL,SORTTYP),"|",2)=""
 ..S IBSORTFIL(LEVEL,SORTTYP)=$TR(IBSORTFIL(LEVEL,SORTTYP),"|")
 ..;W !!,$S(LOGIC'="":LOGIC,1:"No Filter selected for "_$G(FIELD)_".")
 ..S IBSORTFIL(LEVEL,SORTTYP,"LOGIC")=LOGIC
 ..I CODE=" " K IBSORTFIL(LEVEL,SORTTYP),IBSORTFIL(LEVEL,"LOGIC")
 W !!
 ;
 Q