IBCNSUR4 ;ALB/VD - SELECT MULTIPLE SUBSCRIBERS LOOK-UP UTILITY ; 14-APR-15
;;2.0;INTEGRATED BILLING;**549**;14-APR-15;Build 54
;;Per VA Directive 6402, this routine should not be modified.
;;
;
EN(IBC1,IBP1,IBDD,IBSBID,IBVAL,IBSUBACT,IBEFDT,IBEFDT1,IBEFDT2) ; Entry Point
; Look-up Utility to Select Multiple Subscribers
; Input: IBC1 -- Pointer to the company in file #36
; IBP1 -- Pointer to the plan in file #355.3
; IBDD -- Deceased Subscribers Indicator (1 - Include
; Deceased, 0 - Ignore Deceased)
; IBSBID -- Subscriber ID Filter (1 - Use IBVAL to filter
; Subscriber IDs, 0 - Ignore Subscriber IDs)
; IBVAL -- Use the contained value to screen Subscriber IDs.
; IBSUBACT -- Subscriber Filter for Active Indicator (0 - Ignore
; Active Status, 1 - Filter Active, 2 - Filter Inactive)
; to be excluded from selection
; IBEFDT -- Effective Date Filter Indicator (1 - Use Effective
; Dates as a filter, 0 - Ignore Effective Dates.)
; IBEFDT1 -- Effective Date Filter Start Date.
; IBEFDT2 -- Effective Date Filter End Date.
;
; Output: IBCNT -- Number of Subscriber Policies to Move.
; ^TMP("IBCNSUR4A,$J) - Array of selected Subscribers.
D EN^VALM("IBCN SUBSCRIBER SELECTOR")
I +$G(IBFASTXT) S IBQUIT=1
Q +$G(NUMSEL)_U_+$G(IBSUB)
;
HDR(SELECTED) ;EP
; Header code for the Subscriber Selection template
; Input: SELECTED -- 1=Showing header for selected listman
; 0=Is the default or optional value
;
; IBC1 -- Pointer to the company in file #36
; IBP1 -- Pointer to the plan in file #355.3
; IBDD -- Deceased Subscribers Indicator (1 - Include
; Deceased, 0 - Ignore Deceased)
; IBSBID -- Subscriber ID Filter (1 - Use IBVAL to filter
; Subscriber IDs, 0 - Ignore Subscriber IDs)
; IBVAL -- Use the contained value to screen Subscriber IDs.
; IBSUBACT -- Subscriber Filter for Active Indicator (0 - Ignore
; Active Status, 1 - Filter Active, 2 - Filter Inactive)
; to be excluded from selection
; IBACTV -- List of Active or Inactive policies.
; IBEFDT -- Effective Date Filter Indicator (1 - Use Effective
; Dates as a filter, 0 - Ignore Effective Dates.)
; IBEFDT1 -- Effective Date Filter Start Date.
; IBEFDT2 -- Effective Date Filter End Date.
;
; Output: VALMHDR -- Header information to display
N HCTR
S:$G(IBSORT)="" IBSORT="1^Patient Name"
S VALMHDR(1)="Subscribers in: "_$$GET1^DIQ(36,+IBC1,.01),$E(VALMHDR(1),50,79)="Grp Name: "_$$GET1^DIQ(355.3,+IBP1,.03)
S VALMHDR(2)=$E($$GET1^DIQ(36,+IBC1,.111),1,20)_" "_$E($$GET1^DIQ(36,+IBC1,.114),1,20) ; Address and City
S VALMHDR(2)=VALMHDR(2)_", "_$P($G(^DIC(5,+$$GET1^DIQ(36,+IBC1,.115,"I"),0)),U,2)_" "_$E($$GET1^DIQ(36,+IBC1,.116),1,5) ; ST Zip.
S $E(VALMHDR(2),53,99)="Grp #: "_$$GET1^DIQ(355.3,+IBP1,.04)
;
S VALMHDR(3)=+$G(NUMSEL)_" Subscriber"_$S(+$G(NUMSEL)=1:"",1:"s")_" selected out of "_+$G(IBSUB),$E(VALMHDR(3),50,99)="Sorted by: "_$P(IBSORT,U,2)
S HCTR=4
S VALMHDR(HCTR)="Filters: "_$S(IBDD=1:"Living PATs",1:"All PATs")
I $L(IBVAL) S VALMHDR(HCTR)=VALMHDR(HCTR)_", SubIDs w/'"_IBVAL_"'"
I $L(VALMHDR(HCTR))>57 S HCTR=HCTR+1
I '$D(VALMHDR(HCTR)) S VALMHDR(HCTR)=" "
S VALMHDR(HCTR)=VALMHDR(HCTR)_$S(IBSUBACT=1:", Active",IBSUBACT=2:", Inactive",IBSUBACT=3:", All",1:$S(+IBSUBACT:"",1:", All"))_" Policies"
I $L(VALMHDR(HCTR))>46 S HCTR=HCTR+1
I +IBEFDT D
. I '$D(VALMHDR(HCTR)) S VALMHDR(HCTR)=" "
. S VALMHDR(HCTR)=VALMHDR(HCTR)_", Eff "_$$DAT1^IBOUTL(IBEFDT1)_"-"_$$DAT1^IBOUTL(IBEFDT2)
Q
;
INIT ;EP
; Initialize variables and list array
; Input: None
; Output: ^TMP("IBCNSUR4",$J) - Body lines to display
K ^TMP("IBCNSUR4",$J),^TMP("IBCNSUR4IX",$J),^TMP("IBCNSUR4A",$J)
S:$G(IBSORT)="" IBSORT="1^Patient Name"
D BLD
Q
;
BLD ; Build listman body
; Input: IBC1 -- Pointer to the company in file #36
; IBP1 -- Pointer to the plan in file #355.3
; IBDD -- Deceased Subscribers Indicator (1 - Include
; Deceased, 0 - Ignore Deceased)
; IBSBID -- Subscriber ID Filter (1 - Use IBVAL to filter
; Subscriber IDs, 0 - Ignore Subscriber IDs)
; IBVAL -- Use the contained value to screen Subscriber IDs.
; IBSUBACT -- Subscriber Filter for Active Indicator (0 - Include
; Both Active & Inactive, 1 - Include Active,
; 2 - Include Inactive) to be included in selection.
; IBACTV -- List of Active or Inactive policies.
; IBEFDT -- Effective Date Filter Indicator (1 - Use Effective
; Dates as a filter, 0 - Ignore Effective Dates.)
; IBEFDT1 -- Effective Date Filter Start Date.
; IBEFDT2 -- Effective Date Filter End Date.
; Output: VALMCNT - Total number of lines displayed in the body
; ^TMP("IBCNSUR4",$J) - Body lines to display
; ^TMP("IBCNSUR4IX",$J) - Index of Entry IENs by display line
;
N ACTIVE,CURCNT,DFN,DFNY,OMIT,PATEFF,PATEXP,PATID,PATNAM,PATSID,PATSSN,PATWHO
N SORTED,SRTKEY1,SRTKEY2,SRTKEY3,SRTREC,Y
S IBSUB=$$SUBS^IBCNSJ(IBC1,IBP1,0,"^TMP($J,""IBCNSURS"")")
S (CURCNT,VALMCNT)=0
I '+IBSUB S ^TMP("IBCNSUR4",$J,1,0)="* This group plan has no subscribers!" Q
I IBSUB D
. S DFN=""
. F S DFN=$O(^TMP($J,"IBCNSURS",DFN)) Q:DFN="" D
. . S Y=""
. . F S Y=$O(^TMP($J,"IBCNSURS",DFN,Y)) Q:Y="" D
. . . S OMIT=0,DFNY=DFN_"~"_Y
. . . D GTSREC(DFNY,.SRTREC)
. . . S PATSID=$P(SRTREC,U,2),PATEFF=$P(SRTREC,U,3),PATEXP=$P(SRTREC,U,4)
. . . S ACTIVE=$S('PATEXP:1,DT>+PATEXP:0,1:1)
. . . I +IBDEAD,+$$GET1^DIQ(2,DFN_",",.351,"I") Q ; If ignoring deceased and subscriber is deceased exclude.
. . . I +IBSUBID,$L(IBVALUE),($$UP^XLFSTR(PATSID)'[IBVALUE) Q ; Sub ID doesn't contain the Sub ID screen exclude.
. . . I +IBSUBACT D Q:OMIT ; Active vs Inactive
. . . . I IBSUBACT=1,'ACTIVE S OMIT=1 Q ; Include active Policies.
. . . . I IBSUBACT=2,+ACTIVE S OMIT=1 ; Include inactive Policies.
. . . I +IBEFDT D Q:OMIT ; Effective Date
. . . . I PATEFF<IBEFDT1 S OMIT=1 Q ; Effective date is less than starting date.
. . . . I PATEFF>IBEFDT2 S OMIT=1 ; Effective date is less than ending date.
. . . I '$D(IBSORT) S IBSORT=1
. . . S SRTKEY1=$P(SRTREC,U,IBSORT)
. . . S SRTKEY2=$P(SRTREC,U,1) ; PATNAM
. . . S SRTKEY3=$O(SORTED(SRTKEY1,SRTKEY2,""),-1)+1
. . . S SORTED(SRTKEY1,SRTKEY2,SRTKEY3)=SRTREC
. . . ;
. S SRTKEY1=""
. F S SRTKEY1=$O(SORTED(SRTKEY1)) Q:SRTKEY1="" D
. . S SRTKEY2=""
. . F S SRTKEY2=$O(SORTED(SRTKEY1,SRTKEY2)) Q:SRTKEY2="" D
. . . S SRTKEY3=""
. . . F S SRTKEY3=$O(SORTED(SRTKEY1,SRTKEY2,SRTKEY3)) Q:SRTKEY3="" D
. . . . S SRTREC=SORTED(SRTKEY1,SRTKEY2,SRTKEY3)
. . . . S DFNY=$P(SRTREC,U,8),DFN=$P(DFNY,"~",1),Y=$P(DFNY,"~",2)
. . . . S CURCNT=CURCNT+1
. . . . S LINE=$$BLDLN(CURCNT,DFN,Y,SRTREC)
. . . . S VALMCNT=VALMCNT+1
. . . . D SET^VALM10(VALMCNT,LINE,LINE)
. . . . S ^TMP("IBCNSUR4IX",$J,CURCNT)=DFNY
I IBSUB S IBSUB=CURCNT
I VALMCNT=0 D
. S ^TMP("IBCNSUR4",$J,1,0)="No Subscribers with Selection Criteria were found."
Q
;
GTSREC(DFNY,SRTREC) ; Get the sort record data
N DFN,PATEFF,PATEXP,PATID,PATNAM,PATSID,PATSSN,PATWHO,Y
S SRTREC=""
S DFN=$P(DFNY,"~",1),Y=$P(DFNY,"~",2)
S PATNAM=$$GET1^DIQ(2,DFN_",",.01),PATNAM=$S($L(PATNAM):PATNAM,1:" ")
S PATSSN=$E($$GET1^DIQ(2,DFN_",",.09),6,9),PATSSN=$S($L(PATSSN):PATSSN,1:" ")
S PATSID=$E($$GET1^DIQ(2.312,Y_","_DFN_",",7.02),1,20),PATSID=$S($L(PATSID):PATSID,1:" ") ;Only use the 1st 20 chars of SUBID.
S PATEFF=$$GET1^DIQ(2.312,Y_","_DFN_",",8,"I"),PATEFF=$S($L(PATEFF):PATEFF,1:" ")
S PATEXP=$$GET1^DIQ(2.312,Y_","_DFN_",",3,"I"),PATEXP=$S($L(PATEXP):PATEXP,1:" ")
S PATWHO=$$GET1^DIQ(2.312,Y_","_DFN_",",6),PATWHO=$S('$L(PATWHO):"UNK",1:$E(PATWHO,1,3))
S PATID=$$GET1^DIQ(2.312,Y_","_DFN_",",5.01),PATID=$S($L(PATID):PATID,1:" ")
S SRTREC=PATNAM_U_PATSID_U_PATEFF_U_PATEXP_U_PATWHO_U_PATID_U_PATSSN_U_DFNY
Q
;
BLDLN(ICTR,DFN,Y,SRTREC) ;EP
; Also called from BLD^IBCNEILK2
; Builds a line to display one Subscriber
; Input: ICTR - Selection Number
; DFN - DFN of the Subscriber to be displayed
; Y - Y of the 2.312 occurrence.
; ^TMP("IBCNSUR4A",$J,DFN,Y) - Array of currently selected Subscribers
; Output: LINE - Formatted for setting into the list display
N LINE,LINEI,XXN
S:$D(^TMP("IBCNSUR4A",$J,DFN,Y)) ICTR=ICTR_">" ; Mark as selected
S LINE=$$SETSTR^VALM1(ICTR,"",1,4) ; Selection #
S LINE=$$SETSTR^VALM1($E($P(SRTREC,U,1),1,15),LINE,6,20) ; Patient Name
S LINE=$$SETSTR^VALM1($S($P(SRTREC,U,7)=-9999:" ",1:$P(SRTREC,U,7)),LINE,22,25) ; SSN
S LINE=$$SETSTR^VALM1($S($P(SRTREC,U,2)=-9999:" ",1:$E($P(SRTREC,U,2),1,20)),LINE,27,46) ; Subscriber ID (first 20 chars)
S LINE=$$SETSTR^VALM1($S($P(SRTREC,U,3)=-9999:" ",1:$$DAT1^IBOUTL($P(SRTREC,U,3))),LINE,48,55) ; Effective Date
S LINE=$$SETSTR^VALM1($S($P(SRTREC,U,4)=-9999:" ",1:$$DAT1^IBOUTL($P(SRTREC,U,4))),LINE,57,64) ; Expiration Date
S LINE=$$SETSTR^VALM1($P(SRTREC,U,5),LINE,66,68) ; Whose
S LINE=$$SETSTR^VALM1($S($P(SRTREC,U,6)=-9999:" ",1:$E($P(SRTREC,U,6),1,30)),LINE,71,100) ; Patient ID
Q LINE
;
HELP ;EP
; Help code
; Input: None
D FULL^VALM1
S VALMBCK="R"
W @IOF,"A '>' after the Subscriber Selection number indicates that this Subscriber"
W !,"has already been selected."
Q
;
EXIT ;EP
; Exit code
; Input: None
K IBSORT,^TMP("IBCNSUR4",$J),^TMP("IBCNSUR4IX",$J)
D CLEAR^VALM1
Q
;
SEL ;EP
; Protocol Action to de-select an already selected Subscriber
; Input: NUMSEL - Current number of selected Subscribers
; ^TMP("IBCNSUR4",$J) - Current Array of displayed Subscribers
; ^TMP("IBCNSUR4IX",$J) - Current Index of displayed Subscribers
; ^TMP("IBCNSUR4A,$J,DFN,Y) - Current Array of selected Subscribers
;
; Output: NUMSEL - Updated number of selected Subscribers
; ^TMP("IBCNSUR4A,$J,DFN,Y) - Updated Array of selected Subscribers
; Selected Subscriber is removed from the worklist
; Error message displayed (potentially)
N DFN,DFNS,DFNY,DIR,DIROUT,DIRUT,DLINE,DTOUT,DUOUT,ERROR,IX,LINE,PROMPT,Y
S VALMBCK="R",ERROR=0
;
; First select the Subscriber(s) to be selected
S PROMPT="Select Subscriber(s)"
S DFNS=$$SELSUB(1,PROMPT,.DLINE,1,"IBCNSUR4IX")
I DFNS="" S VALMBCK="R" Q ; None Selected
F IX=1:1:$L(DFNS,",") D
. S DFNY=$P(DFNS,",",IX)
. S DFN=$P(DFNY,"~",1)
. S Y=$P(DFNY,"~",2)
. S LINE=$P(DLINE,",",IX)
. ;
. ; If currently selected, display an error message
. I $D(^TMP("IBCNSUR4A",$J,DFN,Y)) D Q
. . W !,*7,">>>> # ",LINE," is currently selected."
. . S ERROR=1
. D MARK(1,DFNY,LINE,.NUMSEL) ; Show the selection mark
D HDR ; Update the header
D:ERROR PAUSE^VALM1
Q
;
UNSEL(SELECTED) ;EP
; Protocol Action to de-select an already selected Subscriber
; Input:
; Optional, defaults to 0
; NUMSEL - Current number of selected Subscribers
; ^TMP("IBCNSUR4",$J) - Current Array of displayed Subscribers
; ^TMP("IBCNSUR4S",$J) - Current Array of selected Insurance Companies
; ^TMP("IBCNSUR4IX",$J) - Current Index of displayed Subscribers
; ^TMP("IBCNSUR4A,$J,DFN,Y) - Current Array of selected Subscribers
;
; Output: NUMSEL - Current number of selected Subscribers
; ^TMP("IBCNSUR4A,$J,DFN,Y) - Updated Array of selected Subscribers
;
; Selected Subscriber is removed from the worklist
; Error message displayed (potentially)
N DFN,DFNS,DFNY,DIR,DIROUT,DIRUT,DLINE,DTOUT,DUOUT,ERROR,IX,LINE,MSG,PROMPT,WARRAY,Y
I '$D(SELECTED) D
. S SELECTED=0,WARRAY="IBCNSUR4IX"
E S WARRAY="IBCNSUR4SIX"
S VALMBCK="R",ERROR=0
;
; First select the Subscriber(s) to be de-selected
S PROMPT="De-Select Subscriber(s)"
S MSG="Are you sure you want to De-Select "
S DFNS=$$SELSUB(1,PROMPT,.DLINE,1,WARRAY)
I DFNS="" S VALMBCK="R" Q ; None Selected
F IX=1:1:$L(DFNS,",") D
. S DFNY=$P(DFNS,",",IX)
. S DFN=$P(DFNY,"~",1)
. S Y=$P(DFNY,"~",2)
. S LINE=$P(DLINE,",",IX)
. ;
. ; If not currently selected, display an error message
. I '$D(^TMP("IBCNSUR4A",$J,DFN,Y)) D Q
. . W !,*7,">>>> # ",LINE," is not currently selected. It cannot be de-selected."
. . S ERROR=1
. D MARK(0,DFNY,LINE,.NUMSEL) ; De-Select the entry
D HDR ; Update the header
D:ERROR PAUSE^VALM1
Q
;
MARK(WHICH,DFNY,LINE,NUMSEL) ; Mark/Remove 'Selection' from a selected
; Subscriber line
; Input: WHICH - 0 - Remove 'Selection' mark
; 1 - Set 'Selection' mark
; DFNY - DFN and Y of the entry to Mark/Remove 'In-Progress'
; LINE - Line number being marked/unmarked
; WLIST - Worklist, the user is selecting from.
; NUMSEL - Current # of selected Subscriber
; ^TMP("IBCNSUR4A",$J)- Current array of selected Subscriber
; Output: Subscriber is marked or unmarked as selected
; NUMSEL - Current # of selected Subscribers
; ^TMP("IBCNSUR4A",$J)- Updated array of selected Subscribers
;
N TEXT,DFN,Y
S DFN=$P(DFNY,"~",1)
S Y=$P(DFNY,"~",2)
I WHICH D ; Mark as selected
. S ^TMP("IBCNSUR4A",$J,DFN,Y)=""
. S TEXT=LINE_">",NUMSEL=NUMSEL+1
E D ; Mark as unselected
. K ^TMP("IBCNSUR4A",$J,DFN,Y)
. S TEXT=LINE,NUMSEL=NUMSEL-1
D FLDTEXT^VALM10(LINE,"CTR",TEXT) ; Update display
D WRITE^VALM10(LINE) ; Redisplay line
Q
;
SHOWSEL ;EP
; Protocol action used to display a listman template of the currently
; selected Subscribers
; Input: NUMSEL - Current number of selected Subscribers
; ^TMP("IBCNSUR4A",$J,DFN,Y) - Current Array of selected Subscribers
; Output: NUMSEL - Updated number of selected Subscribers
; ^TMP("IBCNSUR4A",$J,DFN,Y) - Updated Array of selected Subscribers
S VALMBCK="R"
D EN^VALM("IBCN SUBSCRIBER SELECTED")
D HDR,BLD
Q
;
SELSUB(FULL,PROMPT,DLINE,MULT,WLIST) ;EP
; Select Subscriber(s) to perform an action upon
; Input: FULL - 1 - full screen mode, 0 otherwise
; PROMPT - Prompt to be displayed to the user
; MULT - 1 to allow multiple entry selection
; 0 to only allow single entry selection
; Optional, defaults to 0
; WLIST - Worklist, the user is selecting from
; ^TMP("IBCNSUR4IX",$J) - Index of displayed lines of the Subscriber
; Selector Template.
; Only used when WLIST="IBCNSUR4IX"
; ^TMP("IBCNSUR4SIX",$J) - Index of displayed lines of the Subscriber
; Selected Template
; Only used if WLIST is "IBCNSUR4IX"
; Output: DLINE - Comma delimited list of Line #(s) of the
; selected Subscriber
; Returns: IEN(s) - Comma delimited string or IENS for the selected Subscriber(s)
; Error message and "" DFNS if multi-selection and not allowed
N DFNY,DFNS,DIR,DIROUT,DIRUT,DTOUT,DUOUT,IX,VALMY,X,Y
S:'$D(MULT) MULT=0
S:'$D(WLIST) WLIST="IBCNSUR4"
D:FULL FULL^VALM1
S DLINE=$P($P($G(XQORNOD(0)),"^",4),"=",2) ; User selection with action
S DLINE=$TR(DLINE,"/\; .",",,,,,") ; Check for multi-selection
S DFNS=""
I 'MULT,DLINE["," D Q "" ; Invalid multi-selection
. W !,*7,">>>> Only single entry selection is allowed"
. S DLINE=""
. K DIR
. D PAUSE^VALM1
;
; Let the user enter their selection(s)
D EN^VALM2($G(XQORNOD(0)),"O") ; ListMan generic selector
I '$D(VALMY) Q ""
S IX="",DLINE=""
F D Q:IX=""
. S IX=$O(VALMY(IX))
. Q:IX=""
. S DLINE=$S(DLINE="":IX,1:DLINE_","_IX)
. S DFNY=$G(^TMP(WLIST,$J,IX))
. S DFNS=$S(DFNS="":DFNY,1:DFNS_","_DFNY)
Q DFNS
;
INIT2 ;EP for Show Selections
; Initialize variables and list array
; Input: None
; Output: ^TMP("IBCNSUR4",$J) - Body lines to display
K ^TMP("IBCNSUR4S",$J),^TMP("IBCNSUR4SIX",$J)
D BLD2
Q
;
BLD2 ; Build listman body for Show Selections
; Input: None
; Output: VALMCNT - Total number of lines displayed in the body
; ^TMP("IBCNSUR4S",$J) - Body lines to display
; ^TMP("IBCNSUR4SIX",$J) - Index of Entry DFNs by display line
N DFN,DFNY,ICTR,LINE,SORTED,SRTKEY1,SRTKEY2,SRTKEY3,Y
;
; First sort the currently selected Subscribers into name order
S DFN=""
F S DFN=$O(^TMP("IBCNSUR4A",$J,DFN)) Q:DFN="" D
. S Y=""
. F S Y=$O(^TMP("IBCNSUR4A",$J,DFN,Y)) Q:Y="" D
. . S DFNY=DFN_"~"_Y
. . D GTSREC(DFNY,.SRTREC)
. . S SRTKEY1=$P(SRTREC,U,IBSORT)
. . S SRTKEY2=$P(SRTREC,U,1) ; PATNAM
. . S SRTKEY3=$O(SORTED(SRTKEY1,SRTKEY2,""),-1)+1
. . S SORTED(SRTKEY1,SRTKEY2,SRTKEY3)=SRTREC
;
; Now build the lines to be displayed
S (ICTR,VALMCNT)=0,SRTKEY1=""
F S SRTKEY1=$O(SORTED(SRTKEY1)) Q:SRTKEY1="" D
. S SRTKEY2=""
. F S SRTKEY2=$O(SORTED(SRTKEY1,SRTKEY2)) Q:SRTKEY2="" D
. . S SRTKEY3=""
. . F S SRTKEY3=$O(SORTED(SRTKEY1,SRTKEY2,SRTKEY3)) Q:SRTKEY3="" D
. . . S SRTREC=SORTED(SRTKEY1,SRTKEY2,SRTKEY3)
. . . S DFNY=$P(SRTREC,U,8)
. . . S DFN=$P(DFNY,"~",1),Y=$P(DFNY,"~",2)
. . . S ICTR=ICTR+1
. . . S LINE=$$BLDLN(ICTR,DFN,Y,SRTREC)
. . . S VALMCNT=VALMCNT+1
. . . D SET^VALM10(VALMCNT,LINE,LINE)
. . . S ^TMP("IBCNSUR4SIX",$J,ICTR)=DFN_"~"_Y
;
I VALMCNT=0 D
. S ^TMP("IBCNSUR4",$J,1,0)="No Selected Subscribers were found."
Q
;
EXIT2 ;EP for Show Selections
; Exit code
; Input: None
K ^TMP("IBCNSUR4S",$J),^TMP("IBCNSUR4SIX",$J)
D CLEAR^VALM1
Q
;
SELSORT ; select the way to sort the list screen
N DIR,DIRUT,X,Y,DTOUT,DUOUT,DIROUT,ST,STDES
;
D FULL^VALM1 W !
W !,"Select the item to sort the subscriber records on the subscriber list screen."
S DIR(0)="SO^1:Patient Name;2:Subscriber ID;3:Effective Date;4:Date Expired;5:Whose;6:Patient ID"
S DIR("A")="Sort the list by",DIR("B")=$P($G(IBSORT),"^",2)
D ^DIR K DIR
I 'Y G SELSORTX
S IBSORT=Y_"^"_Y(0)
;
; rebuild and resort the list and update the list header
D BLD,HDR
;
SELSORTX ;
S VALMBCK="R",VALMBG=1
Q
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HIBCNSUR4 19425 printed Oct 16, 2024@18:18:47 Page 2
IBCNSUR4 ;ALB/VD - SELECT MULTIPLE SUBSCRIBERS LOOK-UP UTILITY ; 14-APR-15
+1 ;;2.0;INTEGRATED BILLING;**549**;14-APR-15;Build 54
+2 ;;Per VA Directive 6402, this routine should not be modified.
+3 ;;
+4 ;
EN(IBC1,IBP1,IBDD,IBSBID,IBVAL,IBSUBACT,IBEFDT,IBEFDT1,IBEFDT2) ; Entry Point
+1 ; Look-up Utility to Select Multiple Subscribers
+2 ; Input: IBC1 -- Pointer to the company in file #36
+3 ; IBP1 -- Pointer to the plan in file #355.3
+4 ; IBDD -- Deceased Subscribers Indicator (1 - Include
+5 ; Deceased, 0 - Ignore Deceased)
+6 ; IBSBID -- Subscriber ID Filter (1 - Use IBVAL to filter
+7 ; Subscriber IDs, 0 - Ignore Subscriber IDs)
+8 ; IBVAL -- Use the contained value to screen Subscriber IDs.
+9 ; IBSUBACT -- Subscriber Filter for Active Indicator (0 - Ignore
+10 ; Active Status, 1 - Filter Active, 2 - Filter Inactive)
+11 ; to be excluded from selection
+12 ; IBEFDT -- Effective Date Filter Indicator (1 - Use Effective
+13 ; Dates as a filter, 0 - Ignore Effective Dates.)
+14 ; IBEFDT1 -- Effective Date Filter Start Date.
+15 ; IBEFDT2 -- Effective Date Filter End Date.
+16 ;
+17 ; Output: IBCNT -- Number of Subscriber Policies to Move.
+18 ; ^TMP("IBCNSUR4A,$J) - Array of selected Subscribers.
+19 DO EN^VALM("IBCN SUBSCRIBER SELECTOR")
+20 IF +$GET(IBFASTXT)
SET IBQUIT=1
+21 QUIT +$GET(NUMSEL)_U_+$GET(IBSUB)
+22 ;
HDR(SELECTED) ;EP
+1 ; Header code for the Subscriber Selection template
+2 ; Input: SELECTED -- 1=Showing header for selected listman
+3 ; 0=Is the default or optional value
+4 ;
+5 ; IBC1 -- Pointer to the company in file #36
+6 ; IBP1 -- Pointer to the plan in file #355.3
+7 ; IBDD -- Deceased Subscribers Indicator (1 - Include
+8 ; Deceased, 0 - Ignore Deceased)
+9 ; IBSBID -- Subscriber ID Filter (1 - Use IBVAL to filter
+10 ; Subscriber IDs, 0 - Ignore Subscriber IDs)
+11 ; IBVAL -- Use the contained value to screen Subscriber IDs.
+12 ; IBSUBACT -- Subscriber Filter for Active Indicator (0 - Ignore
+13 ; Active Status, 1 - Filter Active, 2 - Filter Inactive)
+14 ; to be excluded from selection
+15 ; IBACTV -- List of Active or Inactive policies.
+16 ; IBEFDT -- Effective Date Filter Indicator (1 - Use Effective
+17 ; Dates as a filter, 0 - Ignore Effective Dates.)
+18 ; IBEFDT1 -- Effective Date Filter Start Date.
+19 ; IBEFDT2 -- Effective Date Filter End Date.
+20 ;
+21 ; Output: VALMHDR -- Header information to display
+22 NEW HCTR
+23 if $GET(IBSORT)=""
SET IBSORT="1^Patient Name"
+24 SET VALMHDR(1)="Subscribers in: "_$$GET1^DIQ(36,+IBC1,.01)
SET $EXTRACT(VALMHDR(1),50,79)="Grp Name: "_$$GET1^DIQ(355.3,+IBP1,.03)
+25 ; Address and City
SET VALMHDR(2)=$EXTRACT($$GET1^DIQ(36,+IBC1,.111),1,20)_" "_$EXTRACT($$GET1^DIQ(36,+IBC1,.114),1,20)
+26 ; ST Zip.
SET VALMHDR(2)=VALMHDR(2)_", "_$PIECE($GET(^DIC(5,+$$GET1^DIQ(36,+IBC1,.115,"I"),0)),U,2)_" "_$EXTRACT($$GET1^DIQ(36,+IBC1,.116),1,5)
+27 SET $EXTRACT(VALMHDR(2),53,99)="Grp #: "_$$GET1^DIQ(355.3,+IBP1,.04)
+28 ;
+29 SET VALMHDR(3)=+$GET(NUMSEL)_" Subscriber"_$SELECT(+$GET(NUMSEL)=1:"",1:"s")_" selected out of "_+$GET(IBSUB)
SET $EXTRACT(VALMHDR(3),50,99)="Sorted by: "_$PIECE(IBSORT,U,2)
+30 SET HCTR=4
+31 SET VALMHDR(HCTR)="Filters: "_$SELECT(IBDD=1:"Living PATs",1:"All PATs")
+32 IF $LENGTH(IBVAL)
SET VALMHDR(HCTR)=VALMHDR(HCTR)_", SubIDs w/'"_IBVAL_"'"
+33 IF $LENGTH(VALMHDR(HCTR))>57
SET HCTR=HCTR+1
+34 IF '$DATA(VALMHDR(HCTR))
SET VALMHDR(HCTR)=" "
+35 SET VALMHDR(HCTR)=VALMHDR(HCTR)_$SELECT(IBSUBACT=1:", Active",IBSUBACT=2:", Inactive",IBSUBACT=3:", All",1:$SELECT(+IBSUBACT:"",1:", All"))_" Policies"
+36 IF $LENGTH(VALMHDR(HCTR))>46
SET HCTR=HCTR+1
+37 IF +IBEFDT
Begin DoDot:1
+38 IF '$DATA(VALMHDR(HCTR))
SET VALMHDR(HCTR)=" "
+39 SET VALMHDR(HCTR)=VALMHDR(HCTR)_", Eff "_$$DAT1^IBOUTL(IBEFDT1)_"-"_$$DAT1^IBOUTL(IBEFDT2)
End DoDot:1
+40 QUIT
+41 ;
INIT ;EP
+1 ; Initialize variables and list array
+2 ; Input: None
+3 ; Output: ^TMP("IBCNSUR4",$J) - Body lines to display
+4 KILL ^TMP("IBCNSUR4",$JOB),^TMP("IBCNSUR4IX",$JOB),^TMP("IBCNSUR4A",$JOB)
+5 if $GET(IBSORT)=""
SET IBSORT="1^Patient Name"
+6 DO BLD
+7 QUIT
+8 ;
BLD ; Build listman body
+1 ; Input: IBC1 -- Pointer to the company in file #36
+2 ; IBP1 -- Pointer to the plan in file #355.3
+3 ; IBDD -- Deceased Subscribers Indicator (1 - Include
+4 ; Deceased, 0 - Ignore Deceased)
+5 ; IBSBID -- Subscriber ID Filter (1 - Use IBVAL to filter
+6 ; Subscriber IDs, 0 - Ignore Subscriber IDs)
+7 ; IBVAL -- Use the contained value to screen Subscriber IDs.
+8 ; IBSUBACT -- Subscriber Filter for Active Indicator (0 - Include
+9 ; Both Active & Inactive, 1 - Include Active,
+10 ; 2 - Include Inactive) to be included in selection.
+11 ; IBACTV -- List of Active or Inactive policies.
+12 ; IBEFDT -- Effective Date Filter Indicator (1 - Use Effective
+13 ; Dates as a filter, 0 - Ignore Effective Dates.)
+14 ; IBEFDT1 -- Effective Date Filter Start Date.
+15 ; IBEFDT2 -- Effective Date Filter End Date.
+16 ; Output: VALMCNT - Total number of lines displayed in the body
+17 ; ^TMP("IBCNSUR4",$J) - Body lines to display
+18 ; ^TMP("IBCNSUR4IX",$J) - Index of Entry IENs by display line
+19 ;
+20 NEW ACTIVE,CURCNT,DFN,DFNY,OMIT,PATEFF,PATEXP,PATID,PATNAM,PATSID,PATSSN,PATWHO
+21 NEW SORTED,SRTKEY1,SRTKEY2,SRTKEY3,SRTREC,Y
+22 SET IBSUB=$$SUBS^IBCNSJ(IBC1,IBP1,0,"^TMP($J,""IBCNSURS"")")
+23 SET (CURCNT,VALMCNT)=0
+24 IF '+IBSUB
SET ^TMP("IBCNSUR4",$JOB,1,0)="* This group plan has no subscribers!"
QUIT
+25 IF IBSUB
Begin DoDot:1
+26 SET DFN=""
+27 FOR
SET DFN=$ORDER(^TMP($JOB,"IBCNSURS",DFN))
if DFN=""
QUIT
Begin DoDot:2
+28 SET Y=""
+29 FOR
SET Y=$ORDER(^TMP($JOB,"IBCNSURS",DFN,Y))
if Y=""
QUIT
Begin DoDot:3
+30 SET OMIT=0
SET DFNY=DFN_"~"_Y
+31 DO GTSREC(DFNY,.SRTREC)
+32 SET PATSID=$PIECE(SRTREC,U,2)
SET PATEFF=$PIECE(SRTREC,U,3)
SET PATEXP=$PIECE(SRTREC,U,4)
+33 SET ACTIVE=$SELECT('PATEXP:1,DT>+PATEXP:0,1:1)
+34 ; If ignoring deceased and subscriber is deceased exclude.
IF +IBDEAD
IF +$$GET1^DIQ(2,DFN_",",.351,"I")
QUIT
+35 ; Sub ID doesn't contain the Sub ID screen exclude.
IF +IBSUBID
IF $LENGTH(IBVALUE)
IF ($$UP^XLFSTR(PATSID)'[IBVALUE)
QUIT
+36 ; Active vs Inactive
IF +IBSUBACT
Begin DoDot:4
+37 ; Include active Policies.
IF IBSUBACT=1
IF 'ACTIVE
SET OMIT=1
QUIT
+38 ; Include inactive Policies.
IF IBSUBACT=2
IF +ACTIVE
SET OMIT=1
End DoDot:4
if OMIT
QUIT
+39 ; Effective Date
IF +IBEFDT
Begin DoDot:4
+40 ; Effective date is less than starting date.
IF PATEFF<IBEFDT1
SET OMIT=1
QUIT
+41 ; Effective date is less than ending date.
IF PATEFF>IBEFDT2
SET OMIT=1
End DoDot:4
if OMIT
QUIT
+42 IF '$DATA(IBSORT)
SET IBSORT=1
+43 SET SRTKEY1=$PIECE(SRTREC,U,IBSORT)
+44 ; PATNAM
SET SRTKEY2=$PIECE(SRTREC,U,1)
+45 SET SRTKEY3=$ORDER(SORTED(SRTKEY1,SRTKEY2,""),-1)+1
+46 SET SORTED(SRTKEY1,SRTKEY2,SRTKEY3)=SRTREC
+47 ;
End DoDot:3
End DoDot:2
+48 SET SRTKEY1=""
+49 FOR
SET SRTKEY1=$ORDER(SORTED(SRTKEY1))
if SRTKEY1=""
QUIT
Begin DoDot:2
+50 SET SRTKEY2=""
+51 FOR
SET SRTKEY2=$ORDER(SORTED(SRTKEY1,SRTKEY2))
if SRTKEY2=""
QUIT
Begin DoDot:3
+52 SET SRTKEY3=""
+53 FOR
SET SRTKEY3=$ORDER(SORTED(SRTKEY1,SRTKEY2,SRTKEY3))
if SRTKEY3=""
QUIT
Begin DoDot:4
+54 SET SRTREC=SORTED(SRTKEY1,SRTKEY2,SRTKEY3)
+55 SET DFNY=$PIECE(SRTREC,U,8)
SET DFN=$PIECE(DFNY,"~",1)
SET Y=$PIECE(DFNY,"~",2)
+56 SET CURCNT=CURCNT+1
+57 SET LINE=$$BLDLN(CURCNT,DFN,Y,SRTREC)
+58 SET VALMCNT=VALMCNT+1
+59 DO SET^VALM10(VALMCNT,LINE,LINE)
+60 SET ^TMP("IBCNSUR4IX",$JOB,CURCNT)=DFNY
End DoDot:4
End DoDot:3
End DoDot:2
End DoDot:1
+61 IF IBSUB
SET IBSUB=CURCNT
+62 IF VALMCNT=0
Begin DoDot:1
+63 SET ^TMP("IBCNSUR4",$JOB,1,0)="No Subscribers with Selection Criteria were found."
End DoDot:1
+64 QUIT
+65 ;
GTSREC(DFNY,SRTREC) ; Get the sort record data
+1 NEW DFN,PATEFF,PATEXP,PATID,PATNAM,PATSID,PATSSN,PATWHO,Y
+2 SET SRTREC=""
+3 SET DFN=$PIECE(DFNY,"~",1)
SET Y=$PIECE(DFNY,"~",2)
+4 SET PATNAM=$$GET1^DIQ(2,DFN_",",.01)
SET PATNAM=$SELECT($LENGTH(PATNAM):PATNAM,1:" ")
+5 SET PATSSN=$EXTRACT($$GET1^DIQ(2,DFN_",",.09),6,9)
SET PATSSN=$SELECT($LENGTH(PATSSN):PATSSN,1:" ")
+6 ;Only use the 1st 20 chars of SUBID.
SET PATSID=$EXTRACT($$GET1^DIQ(2.312,Y_","_DFN_",",7.02),1,20)
SET PATSID=$SELECT($LENGTH(PATSID):PATSID,1:" ")
+7 SET PATEFF=$$GET1^DIQ(2.312,Y_","_DFN_",",8,"I")
SET PATEFF=$SELECT($LENGTH(PATEFF):PATEFF,1:" ")
+8 SET PATEXP=$$GET1^DIQ(2.312,Y_","_DFN_",",3,"I")
SET PATEXP=$SELECT($LENGTH(PATEXP):PATEXP,1:" ")
+9 SET PATWHO=$$GET1^DIQ(2.312,Y_","_DFN_",",6)
SET PATWHO=$SELECT('$LENGTH(PATWHO):"UNK",1:$EXTRACT(PATWHO,1,3))
+10 SET PATID=$$GET1^DIQ(2.312,Y_","_DFN_",",5.01)
SET PATID=$SELECT($LENGTH(PATID):PATID,1:" ")
+11 SET SRTREC=PATNAM_U_PATSID_U_PATEFF_U_PATEXP_U_PATWHO_U_PATID_U_PATSSN_U_DFNY
+12 QUIT
+13 ;
BLDLN(ICTR,DFN,Y,SRTREC) ;EP
+1 ; Also called from BLD^IBCNEILK2
+2 ; Builds a line to display one Subscriber
+3 ; Input: ICTR - Selection Number
+4 ; DFN - DFN of the Subscriber to be displayed
+5 ; Y - Y of the 2.312 occurrence.
+6 ; ^TMP("IBCNSUR4A",$J,DFN,Y) - Array of currently selected Subscribers
+7 ; Output: LINE - Formatted for setting into the list display
+8 NEW LINE,LINEI,XXN
+9 ; Mark as selected
if $DATA(^TMP("IBCNSUR4A",$JOB,DFN,Y))
SET ICTR=ICTR_">"
+10 ; Selection #
SET LINE=$$SETSTR^VALM1(ICTR,"",1,4)
+11 ; Patient Name
SET LINE=$$SETSTR^VALM1($EXTRACT($PIECE(SRTREC,U,1),1,15),LINE,6,20)
+12 ; SSN
SET LINE=$$SETSTR^VALM1($SELECT($PIECE(SRTREC,U,7)=-9999:" ",1:$PIECE(SRTREC,U,7)),LINE,22,25)
+13 ; Subscriber ID (first 20 chars)
SET LINE=$$SETSTR^VALM1($SELECT($PIECE(SRTREC,U,2)=-9999:" ",1:$EXTRACT($PIECE(SRTREC,U,2),1,20)),LINE,27,46)
+14 ; Effective Date
SET LINE=$$SETSTR^VALM1($SELECT($PIECE(SRTREC,U,3)=-9999:" ",1:$$DAT1^IBOUTL($PIECE(SRTREC,U,3))),LINE,48,55)
+15 ; Expiration Date
SET LINE=$$SETSTR^VALM1($SELECT($PIECE(SRTREC,U,4)=-9999:" ",1:$$DAT1^IBOUTL($PIECE(SRTREC,U,4))),LINE,57,64)
+16 ; Whose
SET LINE=$$SETSTR^VALM1($PIECE(SRTREC,U,5),LINE,66,68)
+17 ; Patient ID
SET LINE=$$SETSTR^VALM1($SELECT($PIECE(SRTREC,U,6)=-9999:" ",1:$EXTRACT($PIECE(SRTREC,U,6),1,30)),LINE,71,100)
+18 QUIT LINE
+19 ;
HELP ;EP
+1 ; Help code
+2 ; Input: None
+3 DO FULL^VALM1
+4 SET VALMBCK="R"
+5 WRITE @IOF,"A '>' after the Subscriber Selection number indicates that this Subscriber"
+6 WRITE !,"has already been selected."
+7 QUIT
+8 ;
EXIT ;EP
+1 ; Exit code
+2 ; Input: None
+3 KILL IBSORT,^TMP("IBCNSUR4",$JOB),^TMP("IBCNSUR4IX",$JOB)
+4 DO CLEAR^VALM1
+5 QUIT
+6 ;
SEL ;EP
+1 ; Protocol Action to de-select an already selected Subscriber
+2 ; Input: NUMSEL - Current number of selected Subscribers
+3 ; ^TMP("IBCNSUR4",$J) - Current Array of displayed Subscribers
+4 ; ^TMP("IBCNSUR4IX",$J) - Current Index of displayed Subscribers
+5 ; ^TMP("IBCNSUR4A,$J,DFN,Y) - Current Array of selected Subscribers
+6 ;
+7 ; Output: NUMSEL - Updated number of selected Subscribers
+8 ; ^TMP("IBCNSUR4A,$J,DFN,Y) - Updated Array of selected Subscribers
+9 ; Selected Subscriber is removed from the worklist
+10 ; Error message displayed (potentially)
+11 NEW DFN,DFNS,DFNY,DIR,DIROUT,DIRUT,DLINE,DTOUT,DUOUT,ERROR,IX,LINE,PROMPT,Y
+12 SET VALMBCK="R"
SET ERROR=0
+13 ;
+14 ; First select the Subscriber(s) to be selected
+15 SET PROMPT="Select Subscriber(s)"
+16 SET DFNS=$$SELSUB(1,PROMPT,.DLINE,1,"IBCNSUR4IX")
+17 ; None Selected
IF DFNS=""
SET VALMBCK="R"
QUIT
+18 FOR IX=1:1:$LENGTH(DFNS,",")
Begin DoDot:1
+19 SET DFNY=$PIECE(DFNS,",",IX)
+20 SET DFN=$PIECE(DFNY,"~",1)
+21 SET Y=$PIECE(DFNY,"~",2)
+22 SET LINE=$PIECE(DLINE,",",IX)
+23 ;
+24 ; If currently selected, display an error message
+25 IF $DATA(^TMP("IBCNSUR4A",$JOB,DFN,Y))
Begin DoDot:2
+26 WRITE !,*7,">>>> # ",LINE," is currently selected."
+27 SET ERROR=1
End DoDot:2
QUIT
+28 ; Show the selection mark
DO MARK(1,DFNY,LINE,.NUMSEL)
End DoDot:1
+29 ; Update the header
DO HDR
+30 if ERROR
DO PAUSE^VALM1
+31 QUIT
+32 ;
UNSEL(SELECTED) ;EP
+1 ; Protocol Action to de-select an already selected Subscriber
+2 ; Input:
+3 ; Optional, defaults to 0
+4 ; NUMSEL - Current number of selected Subscribers
+5 ; ^TMP("IBCNSUR4",$J) - Current Array of displayed Subscribers
+6 ; ^TMP("IBCNSUR4S",$J) - Current Array of selected Insurance Companies
+7 ; ^TMP("IBCNSUR4IX",$J) - Current Index of displayed Subscribers
+8 ; ^TMP("IBCNSUR4A,$J,DFN,Y) - Current Array of selected Subscribers
+9 ;
+10 ; Output: NUMSEL - Current number of selected Subscribers
+11 ; ^TMP("IBCNSUR4A,$J,DFN,Y) - Updated Array of selected Subscribers
+12 ;
+13 ; Selected Subscriber is removed from the worklist
+14 ; Error message displayed (potentially)
+15 NEW DFN,DFNS,DFNY,DIR,DIROUT,DIRUT,DLINE,DTOUT,DUOUT,ERROR,IX,LINE,MSG,PROMPT,WARRAY,Y
+16 IF '$DATA(SELECTED)
Begin DoDot:1
+17 SET SELECTED=0
SET WARRAY="IBCNSUR4IX"
End DoDot:1
+18 IF '$TEST
SET WARRAY="IBCNSUR4SIX"
+19 SET VALMBCK="R"
SET ERROR=0
+20 ;
+21 ; First select the Subscriber(s) to be de-selected
+22 SET PROMPT="De-Select Subscriber(s)"
+23 SET MSG="Are you sure you want to De-Select "
+24 SET DFNS=$$SELSUB(1,PROMPT,.DLINE,1,WARRAY)
+25 ; None Selected
IF DFNS=""
SET VALMBCK="R"
QUIT
+26 FOR IX=1:1:$LENGTH(DFNS,",")
Begin DoDot:1
+27 SET DFNY=$PIECE(DFNS,",",IX)
+28 SET DFN=$PIECE(DFNY,"~",1)
+29 SET Y=$PIECE(DFNY,"~",2)
+30 SET LINE=$PIECE(DLINE,",",IX)
+31 ;
+32 ; If not currently selected, display an error message
+33 IF '$DATA(^TMP("IBCNSUR4A",$JOB,DFN,Y))
Begin DoDot:2
+34 WRITE !,*7,">>>> # ",LINE," is not currently selected. It cannot be de-selected."
+35 SET ERROR=1
End DoDot:2
QUIT
+36 ; De-Select the entry
DO MARK(0,DFNY,LINE,.NUMSEL)
End DoDot:1
+37 ; Update the header
DO HDR
+38 if ERROR
DO PAUSE^VALM1
+39 QUIT
+40 ;
MARK(WHICH,DFNY,LINE,NUMSEL) ; Mark/Remove 'Selection' from a selected
+1 ; Subscriber line
+2 ; Input: WHICH - 0 - Remove 'Selection' mark
+3 ; 1 - Set 'Selection' mark
+4 ; DFNY - DFN and Y of the entry to Mark/Remove 'In-Progress'
+5 ; LINE - Line number being marked/unmarked
+6 ; WLIST - Worklist, the user is selecting from.
+7 ; NUMSEL - Current # of selected Subscriber
+8 ; ^TMP("IBCNSUR4A",$J)- Current array of selected Subscriber
+9 ; Output: Subscriber is marked or unmarked as selected
+10 ; NUMSEL - Current # of selected Subscribers
+11 ; ^TMP("IBCNSUR4A",$J)- Updated array of selected Subscribers
+12 ;
+13 NEW TEXT,DFN,Y
+14 SET DFN=$PIECE(DFNY,"~",1)
+15 SET Y=$PIECE(DFNY,"~",2)
+16 ; Mark as selected
IF WHICH
Begin DoDot:1
+17 SET ^TMP("IBCNSUR4A",$JOB,DFN,Y)=""
+18 SET TEXT=LINE_">"
SET NUMSEL=NUMSEL+1
End DoDot:1
+19 ; Mark as unselected
IF '$TEST
Begin DoDot:1
+20 KILL ^TMP("IBCNSUR4A",$JOB,DFN,Y)
+21 SET TEXT=LINE
SET NUMSEL=NUMSEL-1
End DoDot:1
+22 ; Update display
DO FLDTEXT^VALM10(LINE,"CTR",TEXT)
+23 ; Redisplay line
DO WRITE^VALM10(LINE)
+24 QUIT
+25 ;
SHOWSEL ;EP
+1 ; Protocol action used to display a listman template of the currently
+2 ; selected Subscribers
+3 ; Input: NUMSEL - Current number of selected Subscribers
+4 ; ^TMP("IBCNSUR4A",$J,DFN,Y) - Current Array of selected Subscribers
+5 ; Output: NUMSEL - Updated number of selected Subscribers
+6 ; ^TMP("IBCNSUR4A",$J,DFN,Y) - Updated Array of selected Subscribers
+7 SET VALMBCK="R"
+8 DO EN^VALM("IBCN SUBSCRIBER SELECTED")
+9 DO HDR
DO BLD
+10 QUIT
+11 ;
SELSUB(FULL,PROMPT,DLINE,MULT,WLIST) ;EP
+1 ; Select Subscriber(s) to perform an action upon
+2 ; Input: FULL - 1 - full screen mode, 0 otherwise
+3 ; PROMPT - Prompt to be displayed to the user
+4 ; MULT - 1 to allow multiple entry selection
+5 ; 0 to only allow single entry selection
+6 ; Optional, defaults to 0
+7 ; WLIST - Worklist, the user is selecting from
+8 ; ^TMP("IBCNSUR4IX",$J) - Index of displayed lines of the Subscriber
+9 ; Selector Template.
+10 ; Only used when WLIST="IBCNSUR4IX"
+11 ; ^TMP("IBCNSUR4SIX",$J) - Index of displayed lines of the Subscriber
+12 ; Selected Template
+13 ; Only used if WLIST is "IBCNSUR4IX"
+14 ; Output: DLINE - Comma delimited list of Line #(s) of the
+15 ; selected Subscriber
+16 ; Returns: IEN(s) - Comma delimited string or IENS for the selected Subscriber(s)
+17 ; Error message and "" DFNS if multi-selection and not allowed
+18 NEW DFNY,DFNS,DIR,DIROUT,DIRUT,DTOUT,DUOUT,IX,VALMY,X,Y
+19 if '$DATA(MULT)
SET MULT=0
+20 if '$DATA(WLIST)
SET WLIST="IBCNSUR4"
+21 if FULL
DO FULL^VALM1
+22 ; User selection with action
SET DLINE=$PIECE($PIECE($GET(XQORNOD(0)),"^",4),"=",2)
+23 ; Check for multi-selection
SET DLINE=$TRANSLATE(DLINE,"/\; .",",,,,,")
+24 SET DFNS=""
+25 ; Invalid multi-selection
IF 'MULT
IF DLINE[","
Begin DoDot:1
+26 WRITE !,*7,">>>> Only single entry selection is allowed"
+27 SET DLINE=""
+28 KILL DIR
+29 DO PAUSE^VALM1
End DoDot:1
QUIT ""
+30 ;
+31 ; Let the user enter their selection(s)
+32 ; ListMan generic selector
DO EN^VALM2($GET(XQORNOD(0)),"O")
+33 IF '$DATA(VALMY)
QUIT ""
+34 SET IX=""
SET DLINE=""
+35 FOR
Begin DoDot:1
+36 SET IX=$ORDER(VALMY(IX))
+37 if IX=""
QUIT
+38 SET DLINE=$SELECT(DLINE="":IX,1:DLINE_","_IX)
+39 SET DFNY=$GET(^TMP(WLIST,$JOB,IX))
+40 SET DFNS=$SELECT(DFNS="":DFNY,1:DFNS_","_DFNY)
End DoDot:1
if IX=""
QUIT
+41 QUIT DFNS
+42 ;
INIT2 ;EP for Show Selections
+1 ; Initialize variables and list array
+2 ; Input: None
+3 ; Output: ^TMP("IBCNSUR4",$J) - Body lines to display
+4 KILL ^TMP("IBCNSUR4S",$JOB),^TMP("IBCNSUR4SIX",$JOB)
+5 DO BLD2
+6 QUIT
+7 ;
BLD2 ; Build listman body for Show Selections
+1 ; Input: None
+2 ; Output: VALMCNT - Total number of lines displayed in the body
+3 ; ^TMP("IBCNSUR4S",$J) - Body lines to display
+4 ; ^TMP("IBCNSUR4SIX",$J) - Index of Entry DFNs by display line
+5 NEW DFN,DFNY,ICTR,LINE,SORTED,SRTKEY1,SRTKEY2,SRTKEY3,Y
+6 ;
+7 ; First sort the currently selected Subscribers into name order
+8 SET DFN=""
+9 FOR
SET DFN=$ORDER(^TMP("IBCNSUR4A",$JOB,DFN))
if DFN=""
QUIT
Begin DoDot:1
+10 SET Y=""
+11 FOR
SET Y=$ORDER(^TMP("IBCNSUR4A",$JOB,DFN,Y))
if Y=""
QUIT
Begin DoDot:2
+12 SET DFNY=DFN_"~"_Y
+13 DO GTSREC(DFNY,.SRTREC)
+14 SET SRTKEY1=$PIECE(SRTREC,U,IBSORT)
+15 ; PATNAM
SET SRTKEY2=$PIECE(SRTREC,U,1)
+16 SET SRTKEY3=$ORDER(SORTED(SRTKEY1,SRTKEY2,""),-1)+1
+17 SET SORTED(SRTKEY1,SRTKEY2,SRTKEY3)=SRTREC
End DoDot:2
End DoDot:1
+18 ;
+19 ; Now build the lines to be displayed
+20 SET (ICTR,VALMCNT)=0
SET SRTKEY1=""
+21 FOR
SET SRTKEY1=$ORDER(SORTED(SRTKEY1))
if SRTKEY1=""
QUIT
Begin DoDot:1
+22 SET SRTKEY2=""
+23 FOR
SET SRTKEY2=$ORDER(SORTED(SRTKEY1,SRTKEY2))
if SRTKEY2=""
QUIT
Begin DoDot:2
+24 SET SRTKEY3=""
+25 FOR
SET SRTKEY3=$ORDER(SORTED(SRTKEY1,SRTKEY2,SRTKEY3))
if SRTKEY3=""
QUIT
Begin DoDot:3
+26 SET SRTREC=SORTED(SRTKEY1,SRTKEY2,SRTKEY3)
+27 SET DFNY=$PIECE(SRTREC,U,8)
+28 SET DFN=$PIECE(DFNY,"~",1)
SET Y=$PIECE(DFNY,"~",2)
+29 SET ICTR=ICTR+1
+30 SET LINE=$$BLDLN(ICTR,DFN,Y,SRTREC)
+31 SET VALMCNT=VALMCNT+1
+32 DO SET^VALM10(VALMCNT,LINE,LINE)
+33 SET ^TMP("IBCNSUR4SIX",$JOB,ICTR)=DFN_"~"_Y
End DoDot:3
End DoDot:2
End DoDot:1
+34 ;
+35 IF VALMCNT=0
Begin DoDot:1
+36 SET ^TMP("IBCNSUR4",$JOB,1,0)="No Selected Subscribers were found."
End DoDot:1
+37 QUIT
+38 ;
EXIT2 ;EP for Show Selections
+1 ; Exit code
+2 ; Input: None
+3 KILL ^TMP("IBCNSUR4S",$JOB),^TMP("IBCNSUR4SIX",$JOB)
+4 DO CLEAR^VALM1
+5 QUIT
+6 ;
SELSORT ; select the way to sort the list screen
+1 NEW DIR,DIRUT,X,Y,DTOUT,DUOUT,DIROUT,ST,STDES
+2 ;
+3 DO FULL^VALM1
WRITE !
+4 WRITE !,"Select the item to sort the subscriber records on the subscriber list screen."
+5 SET DIR(0)="SO^1:Patient Name;2:Subscriber ID;3:Effective Date;4:Date Expired;5:Whose;6:Patient ID"
+6 SET DIR("A")="Sort the list by"
SET DIR("B")=$PIECE($GET(IBSORT),"^",2)
+7 DO ^DIR
KILL DIR
+8 IF 'Y
GOTO SELSORTX
+9 SET IBSORT=Y_"^"_Y(0)
+10 ;
+11 ; rebuild and resort the list and update the list header
+12 DO BLD
DO HDR
+13 ;
SELSORTX ;
+1 SET VALMBCK="R"
SET VALMBG=1
+2 QUIT
+3 ;