SAIF.Business.Policy.Agency business rules
This page captures the rules enforced by SAIF.Business.Policy.Agency and the inherited BOF behavior it relies on.
BR-001: Missing-key retrieval returns a default object
Field
Value
Statement
Retrieval of a non-existent agency, contract, office, or producer returns a default-initialized object instead of raising a not-found error.
Trigger
A keyed retrieve completes without a matching row.
Enforcement
AfterRetrieve reads and fills only when a row is present.
Outcome
Callers receive an object whose key and data fields remain at their initial values.
Tables
AGENCY , AGENCY_CONTRACT , AGENT
SQL
SQL-001 , SQL-003 , SQL-005 , SQL-007
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgency.vb, clsAgencyContract.vb, clsAgencyOffice.vb, clsProducer.vb
BR-002: Agency sequence number is required
Field
Value
Statement
An agency is invalid when its sequence number is empty.
Trigger
The framework validates a clsAgency instance.
Enforcement
clsAgency.IsValidAgencySeqNum is registered through rule clsAgency01.
Outcome
The object is marked invalid until a sequence number is present.
Tables
AGENCY
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgency.vb
BR-003: Agency FEID filters agency collections
Field
Value
Statement
Agency collections can be filtered by a non-blank federal employer ID.
Trigger
A caller uses the FEID overload of GetAgencyCollection.
Enforcement
clsAgencyCollection.Criteria.RetrieveSQL appends AGENCY.AGENCY_FEID = :FederalEmployerID and binds the parameter.
Outcome
Only agencies with the requested FEID are returned.
Tables
AGENCY
SQL
SQL-002
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgencyCollection.vb
Field
Value
Statement
Agency collections can be filtered to agencies that hold at least one contract of a selected type.
Trigger
A caller uses the contract-type overload of GetAgencyCollection.
Enforcement
clsAgencyCollection.Criteria.RetrieveSQL appends a correlated EXISTS predicate over AGENCY_CONTRACT.
Outcome
Only agencies with at least one matching contract type are returned.
Tables
AGENCY , AGENCY_CONTRACT
SQL
SQL-002
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgencyCollection.vb, Business\SAIF.Business.Policy.Agency\clsAgencyContract.vb
BR-005: Empty collection criteria returns every agency
Field
Value
Statement
The parameterless agency collection retrieve returns every agency row because no WHERE clause is added.
Trigger
A caller invokes GetAgencyCollection(inDataportal) with no FEID or contract-type filters.
Enforcement
clsAgencyCollection.Criteria.RetrieveSQL returns the base agency SQL unchanged.
Outcome
The collection retrieve performs an unfiltered AGENCY read.
Tables
AGENCY
SQL
SQL-002
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgencyCollection.vb
BR-006: Bulk loaders discard orphan child rows
Field
Value
Statement
Bulk-loaded producer and contract rows are discarded when their owning agency is not already present in the target collection.
Trigger
RetrieveProducers() or RetrieveContracts() distributes child rows after the bulk query completes.
Enforcement
The collection adds a child row only when the parent agency lookup succeeds.
Outcome
Child rows whose parent agency is missing are silently ignored.
Tables
AGENT , AGENCY_CONTRACT
SQL
SQL-004 , SQL-009
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgencyCollection.vb
BR-007: Bulk loaders replace N-plus-1 child retrieval
Field
Value
Statement
Producers and contracts for a set of agencies are loaded with one query per child type and then distributed in memory.
Trigger
RetrieveProducers() or RetrieveContracts() is called on an agency collection.
Enforcement
The collection first retrieves all producers or all contracts, resets each agency's child collection, and then assigns rows by agency sequence number.
Outcome
Callers can avoid issuing one child query per agency.
Tables
AGENT , AGENCY_CONTRACT
SQL
SQL-004 , SQL-009
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgencyCollection.vb
BR-008: Active status uses effective and expiration windows
Field
Value
Statement
Agencies, contracts, offices, and producers are active when the effective date is on or before the as-of date and the expiration date is empty or later than the as-of date.
Trigger
Any IsActive(inDate) or collection Active(inDate) helper is evaluated.
Enforcement
Each type compares the requested date against its effective and expiration fields.
Outcome
Callers receive a consistent date-window interpretation across the library.
Tables
AGENCY , AGENCY_CONTRACT , AGENT
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgency.vb, clsAgencyContract.vb, clsAgencyOffice.vb, clsProducer.vb, clsAgencyContractCollection.vb, clsAgencyOfficeCollection.vb, clsProducerCollection.vb
BR-009: Missing active contracts mean unassigned contract type
Field
Value
Statement
An agency returns Unassigned when no active contract exists for the requested date.
Trigger
clsAgency.ContractType(inDate) is evaluated.
Enforcement
The method filters to active contracts and returns the first contract type only when at least one row remains.
Outcome
Agencies without an active appointment on the date are classified as unassigned.
Tables
AGENCY_CONTRACT
SQL
SQL-004
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgency.vb, Business\SAIF.Business.Policy.Agency\clsAgencyContractCollection.vb
BR-010: Agency contract collection scope depends on agency sequence number
Field
Value
Statement
Contract retrieval is scoped to one agency when a sequence number is supplied, and returns all contracts otherwise.
Trigger
A caller selects one of the GetAgencyContractCollection overloads.
Enforcement
clsAgencyContractCollection.Criteria.RetrieveSQL and InitRetrievalArguments bind :AgencySeqNum only when the overload supplies it; otherwise the base AGENCY_CONTRACT query runs unfiltered.
Outcome
Callers get either a single agency's contracts or every contract row, depending on which overload they invoke.
Tables
AGENCY_CONTRACT
SQL
SQL-004
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgencyContractCollection.vb
BR-011: Agency contract and commission codes map to fixed domain values
Field
Value
Statement
Agency contract type codes map to fixed domain values: ARP→Assigned Risk, DW→Direct Writer, FULL→Full Appointment, GRP→Group Agency, GPM→Group Agency Manager, LIMIT→Limited Appointment, PREM→Premier Appointment, SERV→Service Center Only, SA→Servicing Agent, NCCI→VCAP and Assigned Risk Depopulation, and an empty code→Unassigned.
Trigger
clsAgencyContract.Convert translates a persisted contract-type or commission-GL-type code.
Enforcement
clsAgencyContract.vb's Convert Select Case block maps each recognized code to its enum value.
Outcome
Callers receive a strongly typed AgencyContractTypes enum (or code, for the reverse conversion) instead of the raw persisted code.
Tables
AGENCY_CONTRACT
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgencyContract.vb
BR-012: Unknown contract or commission codes become unassigned
Field
Value
Statement
An unrecognized contract-type or commission-GL-type code translates to Unassigned rather than raising an error.
Trigger
Convert(String) or ConvertCommissionGeneralLedgerType(String) receives a code outside the mapped set.
Enforcement
clsAgencyContract.vb's Case Else branch returns the Unassigned enum member.
Outcome
Callers receive a safe default classification instead of an exception.
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgencyContract.vb
BR-013: Producer-commission contracts require GL code AGT
Field
Value
Statement
A contract is a producer-commission contract only when its commission general-ledger type code is AGT.
Trigger
clsAgencyContract.IsProducerCommissionContract is read.
Enforcement
The property compares the contract's mapped commission GL type to CommissionGeneralLedgerTypes.ProducerCommission (code AGT).
Outcome
Only contracts carrying the AGT GL code are treated as producer-commission-bearing for eligibility checks.
Tables
AGENCY_CONTRACT
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgencyContract.vb
BR-014: Unmapped enum-to-code conversions raise exceptions
Field
Value
Statement
Converting an enum value outside the mapped set back to a persisted code is an error.
Trigger
Convert(AgencyContractTypes) or ConvertCommissionGeneralLedgerType(enum) is called with a value that has no corresponding persisted code.
Enforcement
clsAgencyContract.vb's Case Else branch raises ApplicationException("Invalid AgencyContractType") or ApplicationException("Invalid CommissionGeneralLedgerType").
Outcome
The conversion fails loudly instead of returning a misleading default code.
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgencyContract.vb
BR-015: Agency office retrieval requires non-LOV-excluded office rows
Field
Value
Statement
An AGENT row qualifies as an agency office only when it is not excluded from lists of values (EXCLUDE_LOV_FLAG = 'N') and it is either the agency's own row (AGENCY_SEQ_NUM = AGENT_NUM) or explicitly flagged as a location (AGENCY_LOCATION_FLAG = 'Y').
Trigger
Any agency office retrieval executes.
Enforcement
clsAgencyOffice.Criteria.RetrieveAgencyOfficeSQL applies the LOV-exclusion and agency/location predicate.
Outcome
Only qualifying office rows are returned to the caller.
Tables
AGENT
SQL
SQL-005 , SQL-006
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgencyOffice.vb
BR-016: Agency office number is required
Field
Value
Statement
An agency office is invalid when its agent number is empty.
Trigger
The framework validates a clsAgencyOffice instance.
Enforcement
clsAgencyOffice.IsValidAgencyOfficeNumber is registered through rule clsAgencyOffice01.
Outcome
The object carries the broken rule "Error: Invalid AgencyOfficeNumber" until an agent number is present.
Tables
AGENT
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgencyOffice.vb
BR-017: Agent of record is read from POLICY.AGENT_NUM
Field
Value
Statement
The agent of record for a policy is POLICY.AGENT_NUM, and the scalar lookup is unguarded against a missing policy row.**
Trigger
A caller invokes clsProducer.GetAgent for a policy number.
Enforcement
clsProducer.vb issues a scalar query against POLICY.AGENT_NUM and parses the result directly.
Outcome
Returns the decimal agent number; a missing policy row would fail the unguarded parse rather than returning a safe default.**
Tables
POLICY
SQL
SQL-008
Confidence
Unknown
Source
Business\SAIF.Business.Policy.Agency\clsProducer.vb
BR-018: Y/N flags convert through framework Boolean helpers
Field
Value
Statement
Y/N flag columns (paperless, direct writer, EFT, check-limit override, producer detail, exclude-from-LOV, exclude-from-service-center, agency location, exclude-from-no-touch-quote) are interpreted through the framework ToBoolean extension.
Trigger
Any corresponding Boolean predicate property is read.
Enforcement
clsAgency.vb, clsAgencyOffice.vb, and clsProducer.vb each call the shared ToBoolean extension on the persisted flag value.
Outcome
Callers receive a consistent Boolean interpretation of every Y/N flag across the library.
Tables
AGENCY , AGENT
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgency.vb, Business\SAIF.Business.Policy.Agency\clsAgencyOffice.vb, Business\SAIF.Business.Policy.Agency\clsProducer.vb
BR-019: Special agency sequence numbers identify SAIF and not-yet-appointed agencies
Field
Value
Statement
Agency sequence number 0 identifies SAIF itself; sequence number 944 identifies the "SAIF not yet appointed" agency.
Trigger
clsAgency.IsSAIF or IsSAIFNotYetAppointedAgency is read.
Enforcement
clsAgency.vb compares the loaded sequence number against the SAIFAgencySeqNum and SAIFNotYetAppointedAgencySeqNum constants.
Outcome
Callers get a Boolean classification identifying these two special agency rows.
Tables
AGENCY
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgency.vb
BR-020: Agency and producer display names are title-cased and abbreviated consistently
Field
Value
Statement
Agency and producer names are displayed in title case; the abbreviated form additionally shortens "Insurance" to "Ins" and "Services" to "Svcs".
Trigger
Name or NameAbbreviated is read.
Enforcement
clsAgency.vb and clsProducer.vb apply title-casing and the fixed word-shortening substitutions when building the display name.
Outcome
Callers receive a consistently formatted display name across agencies and producers.
Tables
AGENCY
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgency.vb, Business\SAIF.Business.Policy.Agency\clsProducer.vb
BR-021: Regional-office eligibility rejects service-center-only appointments
Field
Value
Statement
A regional office may not be served by an agency whose active contract is a service-center-only appointment.
Trigger
A caller invokes clsAgency.IsValidForOffice(date, isRegionalOffice:=True).
Enforcement
clsAgency.vb inspects the agency's first active contract and returns False when its type is ServiceCenterOnlyAppointment.
Outcome
Service-center-only agencies are rejected as eligible for regional-office assignment.
Tables
AGENCY_CONTRACT
SQL
SQL-004
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgency.vb
BR-022: Active-office aggregation clones offices without data portal context
Field
Value
Statement
An agency office copied into an aggregated cross-agency collection is cloned and stripped of its data portal context.
Trigger
clsAgencyCollection.ActiveAgencyOffices builds a detached collection via clsAgencyOfficeCollection.AddClone.
Enforcement
clsAgencyOfficeCollection.vb's AddClone copies office field values into a new instance without the originating IDataPortalInfo.
Outcome
The aggregated collection contains detached office clones that cannot independently re-fetch or persist through the original data portal.
Tables
AGENT
SQL
SQL-006
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgencyOfficeCollection.vb
BR-023: Producer agencies are detected when agency sequence number equals agent number
Field
Value
Statement
A producer whose agency sequence number equals its own agent number represents the agency itself rather than an individual producer.
Trigger
clsProducer.IsProducerAgency is read.
Enforcement
clsProducer.vb compares the loaded AgencySeqNum to the producer's own AgentNum.
Outcome
Callers receive a Boolean distinguishing agency-level producer rows from individual producers.
Tables
AGENT
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsProducer.vb
BR-024: The library is retrieve-only
Field
Value
Statement
Agency, contract, office, and producer data is read-only through this library; no criteria class provides create, insert, update, or delete SQL.
Trigger
Any attempt to persist a change through one of the eight Criteria classes.
Enforcement
All eight Criteria classes throw for every CRUD SQL property except RetrieveSQL.
Outcome
Attempted mutation raises ApplicationException(BOC.Messages.InvalidSQLProperty); no persistence occurs.
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgency.vb, clsAgencyCollection.vb, clsAgencyContract.vb, clsAgencyContractCollection.vb, clsAgencyOffice.vb, clsAgencyOfficeCollection.vb, clsProducer.vb, clsProducerCollection.vb
BR-025: Identity keys are agency seq, contract seq, and agent number
Field
Value
Statement
Agency identity is AGENCY_SEQ_NUM; contract identity is AGENCY_CONTRACT_SEQ_NUM; office and producer identity is AGENT_NUM.
Trigger
Equals, GetHashCode, or a collection lookup is invoked on any of the four business objects.
Enforcement
clsAgency.vb, clsAgencyContract.vb, clsAgencyOffice.vb, and clsProducer.vb each key equality and hashing on the type's respective identity field.
Outcome
Equality and membership tests are consistent with each type's persisted primary key.
Tables
AGENCY , AGENCY_CONTRACT , AGENT
Confidence
Verified
Source
Business\SAIF.Business.Policy.Agency\clsAgency.vb, clsAgencyContract.vb, clsAgencyOffice.vb, clsProducer.vb
Note: Statements marked with * were inferred from code structure, naming conventions, or
contextual evidence where direct confirmation was not available in source artifacts. Statements
marked with ** could not be confirmed; treat as unknown until verified.
Sources
Business\SAIF.Business.Policy.Agency\clsAgency.vb
Business\SAIF.Business.Policy.Agency\clsAgencyCollection.vb
Business\SAIF.Business.Policy.Agency\clsAgencyContract.vb
Business\SAIF.Business.Policy.Agency\clsAgencyContractCollection.vb
Business\SAIF.Business.Policy.Agency\clsAgencyOffice.vb
Business\SAIF.Business.Policy.Agency\clsAgencyOfficeCollection.vb
Business\SAIF.Business.Policy.Agency\clsProducer.vb
Business\SAIF.Business.Policy.Agency\clsProducerCollection.vb