This page captures the business rules enforced directly by SAIF.Business.CustomerContact.
BR-001: Search requires at least one populated criterion
Field
Value
Statement
At least one customer or contact search criterion must be populated before a combined search can execute.
Trigger
SearchForCustomerContacts is called.
Enforcement
SearchRequest.IsCustomerSearchable, IsContactSearchable, and IsValidRequest reject empty requests.
Outcome
The library returns Invalid Search Request. and does not execute SQL.
Confidence
Verified
Tables
PERSON , COMPANY , COMPANY_PERSON
SQL
SQL-031 , SQL-037
Source
Business\SAIF.Business.CustomerContact\clsCustomerContactSearch.vb
BR-002: Search results are capped at 300
Field
Value
Statement
Combined search results cannot exceed 300 rows and may be split between contact and customer quotas.
Trigger
A combined search executes or the split ratio changes.
Enforcement
SearchRequest.ResultMax, ValidateSplitRatio, and CalcLimits clamp the request and distribute result quotas.
Outcome
Search processing enforces a 300-row ceiling and applies the configured split ratio.
Confidence
Verified
Tables
PERSON , COMPANY , COMPANY_PERSON
SQL
SQL-031 , SQL-037
Source
Business\SAIF.Business.CustomerContact\clsCustomerContactSearch.vb
Field
Value
Statement
A contact cannot be deleted while customer relationships still exist.
Trigger
A clsContact instance is deleted.
Enforcement
ValidateOnDelete = True and ValidateNoRelationshipsOnDelete check CustomerRelationships.Count > 0 before delete.
Outcome
Delete validation fails until the contact is no longer linked to any customer.
Confidence
Verified
Tables
PERSON , COMPANY_PERSON , COMPANY
SQL
SQL-028 , SQL-077
Source
Business\SAIF.Business.CustomerContact\Contact\clsContact.vb
Field
Value
Statement
A customer-contact relationship must include a non-blank relationship code.
Trigger
A clsCustomerContact record is inserted or updated.
Enforcement
CommonBusinessRules.TrimTextRequired is registered for RelationshipCode.
Outcome
Relationship saves fail until a valid relationship code is supplied.
Confidence
Verified
Tables
COMPANY_PERSON
SQL
SQL-010 , SQL-069
Source
Business\SAIF.Business.CustomerContact\Customer\clsCustomerContact.vb
BR-005: Address records require an ID and address type
Field
Value
Statement
Address records require a non-zero address identifier and an address type code.
Trigger
clsAddressInfo is validated before save.
Enforcement
CommonBusinessRules.NonZeroDecimalRequired and TrimTextRequired enforce AddressID and AddressCode.
Outcome
Invalid address objects surface explicit address-ID and address-type validation errors.
Confidence
Verified
Tables
ADDRESS
SQL
SQL-001 , SQL-002 , SQL-064 , SQL-065 , SQL-075 , SQL-076
Source
Business\SAIF.Business.CustomerContact\InfoItems\clsAddressInfo.vb
BR-006: Email validation severity and depth are configurable
Field
Value
Statement
Email validation can raise warnings or errors and can enforce syntax-only or syntax-plus-DNS checks.
Trigger
An email address is validated.
Enforcement
EmailAddressValidation, EmailValidationType, and the syntax/DNS rule methods determine how the value is checked.
Outcome
Email saves are accepted, warned, or rejected according to the configured validation mode.
Confidence
Verified
Tables
EMAIL_ADDRESS
SQL
SQL-014 , SQL-015 , SQL-071 , SQL-072 , SQL-088 , SQL-089
Source
Business\SAIF.Business.CustomerContact\InfoItems\clsEmailAddressInfo.vb
Field
Value
Statement
Phone records require a non-zero phone identifier and a populated phone value.
Trigger
clsPhoneInfo is validated before save.
Enforcement
CommonBusinessRules.NonZeroDecimalRequired and TrimTextRequired enforce PhoneID and phone content.
Outcome
Missing IDs or empty phone values produce validation errors.
Confidence
Verified
Tables
PHONE
SQL
SQL-016 , SQL-017 , SQL-073 , SQL-074 , SQL-090 , SQL-091
Source
Business\SAIF.Business.CustomerContact\InfoItems\clsPhoneInfo.vb
BR-008: Generated agency, agent, and provider records can be forced inactive
Field
Value
Statement
Agency, agent, and provider conversion flows mark generated customer or contact records inactive when source effective or expiration dates indicate a future or expired relationship.
Trigger
CreateAgency, CreateAgent, or GetCustomerIDForProvider creates a new local record.
Enforcement
Date checks against Today.Date set IsActive = False before save when the source record is not currently active.
Outcome
Generated records are persisted in an inactive state until the source date range becomes current or is corrected.
Confidence
Verified
Tables
COMPANY , PERSON , CUSTOMER_AGENCY , CUSTOMER_AGENT , CUSTOMER_PROVIDER
SQL
SQL-018 , SQL-019 , SQL-024 , SQL-046 , SQL-048 , SQL-060
Source
Business\SAIF.Business.CustomerContact\mdlCustomerContact.vb
BR-009: Blank long notes are deleted rather than stored as empty text
Field
Value
Statement
When a customer's or contact's long note text is blank at save time, the underlying note row is deleted instead of being persisted with empty text.
Trigger
clsCustomer.Save() or clsContact.Save() runs with an existing (non-new) note whose NoteText is blank.
Enforcement
clsCustomer.OnSave() and clsContact.OnSave() each check Not <Note>.IsNew And <Note>.NoteText.Trim.Length = 0 and call <Note>.Delete() before the save cascade persists the note.
Outcome
The COMPANY_NOTE or PERSON_NOTE row is removed; a subsequent retrieve returns a fresh, clean note object with empty text rather than a stored blank row.
Confidence
Verified
Tables
COMPANY_NOTE , PERSON_NOTE
SQL
SQL-070 , SQL-080 , SQL-086 , SQL-006
Source
Business\SAIF.Business.CustomerContact\Customer\clsCustomer.vb, Business\SAIF.Business.CustomerContact\Contact\clsContact.vb
BR-010: Changing an email address value clears its verified flag
Field
Value
Statement
Setting a new value on an email address always resets IsVerified to False, even if the address had previously been verified.
Trigger
clsEmailAddressInfo.Value is assigned a new value.
Enforcement
clsEmailAddressInfo.OnValueChange calls the base value-change handler and then explicitly sets IsVerified = False.
Outcome
Any edit to an email address requires re-verification before the address can be treated as validated again.
Confidence
Verified
Tables
EMAIL_ADDRESS
SQL
SQL-071 , SQL-072
Source
Business\SAIF.Business.CustomerContact\InfoItems\clsEmailAddressInfo.vb
Sources
Business\SAIF.Business.CustomerContact\Contact\clsContact.vb
Business\SAIF.Business.CustomerContact\Contact\clsContactNote.vb
Business\SAIF.Business.CustomerContact\Customer\clsCustomer.vb
Business\SAIF.Business.CustomerContact\Customer\clsCustomerContact.vb
Business\SAIF.Business.CustomerContact\Customer\clsCustomerNote.vb
Business\SAIF.Business.CustomerContact\InfoItems\clsAddressInfo.vb
Business\SAIF.Business.CustomerContact\InfoItems\clsEmailAddressInfo.vb
Business\SAIF.Business.CustomerContact\InfoItems\clsPhoneInfo.vb
Business\SAIF.Business.CustomerContact\clsCustomerContactSearch.vb
Business\SAIF.Business.CustomerContact\mdlCustomerContact.vb