Skip to content

SAIF.Business.CustomerContact business rules

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

BR-003: Contacts with customer relationships cannot be deleted

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

BR-007: Phone records require an ID and formatted value

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