Skip to content

Provider EFT collection retrieval

clsProviderEFTCollection exposes four shared factory methods that return different slices of provider location EFT data — records that already have an EFT row for a specific provider, a batch export of every EFT row in the system, every location for a provider whether or not it has an EFT row yet, and the same location set enriched with the administering external user's email address. All four populate the same collection type and are read-only, so they are documented together; the collection also exposes LINQ filter properties (UnAssignedPaymentLocations, AssignedPaymentLocations, AllPaymentLocations) that classify the retrieved rows for callers.

Field Value
Operation ID OP-PP-05
Trigger GetProviderEFTColl, GetAllEFTsColl, GetProviderEFTLocations, or GetProviderEFTLocEmails on clsProviderEFTCollection
Inputs ProviderSeqNum (except GetAllEFTsColl); for the location-based queries: IsUserSAIFEmployee, AdminUserTypeSeqNum, MaskBankNumbers, BankValidatorXML
Outputs Populated clsProviderEFTCollection; UnAssignedPaymentLocations/AssignedPaymentLocations/AllPaymentLocations filtered views over that collection
Primary components clsProviderEFTCollection.GetProviderEFTColl, clsProviderEFTCollection.GetAllEFTsColl, clsProviderEFTCollection.GetProviderEFTLocations, clsProviderEFTCollection.GetProviderEFTLocEmails, clsProviderEFTCollection.UnAssignedPaymentLocations, clsProviderEFTCollection.AssignedPaymentLocations, clsProviderEFTCollection.AllPaymentLocations
Entry point Business\SAIF.Business.Provider.PaymentPreference\clsProviderEFT.vb

Steps

  1. List EFTs for a provider. GetProviderEFTColl(dpi, providerSeqNum) selects every PROVIDER_EFT_INTERFACE row for the provider (SQL-010, PROVIDER_EFT_INTERFACE); every row therefore represents a location that already has an EFT record.
  2. List all EFTs (batch). GetAllEFTsColl(dpi) selects every PROVIDER_EFT_INTERFACE row in the table with no filter (SQL-009), intended for batch/system-wide processing rather than a single provider's data.
  3. List all locations with EFT status. GetProviderEFTLocations(dpi, providerID, isUserSAIFEmployee, adminUserTypeSeqNum, maskBankNumbers, bankValidatorXML) left-outer-joins PROVIDER_LOCATION to PROVIDER_EFT_INTERFACE, additionally left-outer-joining PROVIDER_ADDRESS and filtering to locations with an active physical address (SQL-011, BR-15). Locations without a matching EFT row are still returned, flagged via a case when EFT.UPDATE_USER IS NULL then 'Y' else 'N' computed IsNewEFTFlag column, so every eligible location appears exactly once whether or not it has EFT data yet.
  4. The four masking/context inputs (IsUserSAIFEmployee, AdminUserTypeSeqNum, MaskBankNumbers, BankValidatorXML) are stored on the collection itself after the query runs, for use by child objects retrieved through it.
  5. List all locations with administering-user email. GetProviderEFTLocEmails(dpi, providerID, isUserSAIFEmployee, adminUserTypeSeqNum, maskBankNumbers, bankValidatorXML) runs the same location/EFT left-outer-join as step 3, additionally chaining through EXT_USER_TYPE → EXT_USER → EMAIL_ADDRESS to populate ExtUserEmailAddr for each row (SQL-012). It does not include the physical-address eligibility filter present in step 3's query. This method was not present in the prior operations catalog for this library.*
  6. Records retrieved this way carry a populated ExtUserEmailAddr, which EFT payment location assignment copies into CustomerContactEmailAddress when AssignPaymentLocation is called on one of these objects.
  7. Classify locations after retrieval. Once a clsProviderEFTCollection is populated (typically via step 3 or 4), callers can read:
  8. UnAssignedPaymentLocations — every record where LocationHasEFT is false (BR-07).
  9. AssignedPaymentLocations — every record where LocationHasEFT is true and IsActive is true (both today falls within [EffDate, ExpDate] and the location currently has an active direct-deposit preference) (BR-06, BR-07).
  10. AllPaymentLocations — every record that is either currently active or does not yet have EFT, i.e. everything except an inactive/expired-but-still-EFT-flagged record.

Process flow

flowchart TD
    Start([Caller requests a collection]) --> Which{Which query?}
    Which -->|By provider, existing EFT rows| ByProvider[GetProviderEFTColl:<br>select PROVIDER_EFT_INTERFACE by ProviderSeqNum]
    Which -->|All rows, batch| AllRows[GetAllEFTsColl:<br>select every PROVIDER_EFT_INTERFACE row]
    Which -->|All locations + EFT status| AllLocs[GetProviderEFTLocations:<br>left outer join Location to EFT,<br>filter to active physical address]
    Which -->|All locations + admin email| AllLocsEmail[GetProviderEFTLocEmails:<br>left outer join Location to EFT to<br>ExtUserType to ExtUser to Email]
    ByProvider --> Collection[Populated clsProviderEFTCollection]
    AllRows --> Collection
    AllLocs --> StoreCtx[Store IsUserSAIFEmployee,<br>AdminUserTypeSeqNum, MaskBankNumbers,<br>BankValidatorXML on collection]
    AllLocsEmail --> StoreCtx
    StoreCtx --> Collection
    Collection --> Classify{Caller filters by status?}
    Classify -->|Unassigned| Unassigned([UnAssignedPaymentLocations:<br>not LocationHasEFT])
    Classify -->|Assigned/active| Assigned([AssignedPaymentLocations:<br>LocationHasEFT and IsActive])
    Classify -->|All eligible| AllPref([AllPaymentLocations:<br>IsActive or not LocationHasEFT])

Failure and edge-case behavior

  • GetProviderEFTLocations restricts results to locations with an active physical address (BR-15), but GetProviderEFTLocEmails does not apply the same filter, so the two "all locations" queries can return a different set of locations for the same provider.*
  • GetAllEFTsColl has no WHERE clause at all; it is intended for batch/system-wide callers (per source comments referencing ACH0015_UpdateDirectDepositStatus) and returning it for interactive per-provider use would be a misuse of the method.*
  • GetProviderEFTColl and GetAllEFTsColl only return locations that already have a PROVIDER_EFT_INTERFACE row; a provider location with no EFT history at all will never appear in either result, even though it would appear (flagged as new) in GetProviderEFTLocations/GetProviderEFTLocEmails.

Note: Statements marked with * were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts.

Sources

  • Business\SAIF.Business.Provider.PaymentPreference\clsProviderEFT.vb