---
title: SAIF.Business.CustomerContact operations and processes
summary: Operation catalog and cross-operation hub for the customer/contact business objects.
status: draft
owner: SAIF
last_reviewed: 2026-07-30
library: SAIF.Business.CustomerContact
reference_type: package
---

# SAIF.Business.CustomerContact operations and processes

This page is the operation catalog and cross-operation hub for `SAIF.Business.CustomerContact`. The library exposes eleven operations covering combined customer/contact search, root customer and contact CRUD with cascading child persistence, customer-contact relationship maintenance, the standalone address/email/phone info-item types and their link rows, long-form note persistence, resolution of external agency/agent/provider and other source-system identifiers into local customer records, and the helper factories/code-map lookups that support those resolution flows. Each operation's detailed, step-by-step logic lives in its own page under `operations/`.

## Operation catalog

| Operation | Intent | Trigger | Inputs | Outputs | Rules | Tables | SQL |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [Customer/contact search](operations/customer-contact-search.md) | Validate a combined search request and return contact and customer matches within the configured limit | Caller populates a `SearchRequest` and calls `clsCustomerContactSearch.Search` | `SearchRequest` criteria, split ratio, result limit | `SearchResult` containing customer/contact matches | [BR-001](business-rules.md#br-001-search-requires-at-least-one-populated-criterion), [BR-002](business-rules.md#br-002-search-results-are-capped-at-300) | [PERSON](database-tables.md#person), [COMPANY](database-tables.md#company), [COMPANY_PERSON](database-tables.md#company-person) | [SQL-031](sql/SQL-031.md), [SQL-037](sql/SQL-037.md) |
| [Customer CRUD with child persistence](operations/customer-crud-with-child-persistence.md) | Create, retrieve, update, and delete root customer rows and coordinate child saves | `clsCustomer.GetCustomer`/`NewCustomer` followed by property edits and `Save()` | `clsCustomer` state plus child address/email/phone/note/relationship collections | Persisted `COMPANY` row; synchronized child BOF state | [BR-009](business-rules.md#br-009-blank-long-notes-are-deleted-rather-than-stored-as-empty-text) | [COMPANY](database-tables.md#company) | [SQL-008](sql/SQL-008.md), [SQL-035](sql/SQL-035.md), [SQL-068](sql/SQL-068.md), [SQL-082](sql/SQL-082.md) |
| [Contact CRUD with child persistence](operations/contact-crud-with-child-persistence.md) | Create, retrieve, update, and delete root contact rows and coordinate child saves | `clsContact.GetContact`/`NewContact` followed by property edits and `Save()` | `clsContact` state plus child address/email/phone/note collections | Persisted `PERSON` row; synchronized child BOF state | [BR-003](business-rules.md#br-003-contacts-with-customer-relationships-cannot-be-deleted), [BR-009](business-rules.md#br-009-blank-long-notes-are-deleted-rather-than-stored-as-empty-text) | [PERSON](database-tables.md#person) | [SQL-003](sql/SQL-003.md), [SQL-028](sql/SQL-028.md), [SQL-029](sql/SQL-029.md), [SQL-066](sql/SQL-066.md), [SQL-077](sql/SQL-077.md) |
| [Customer-contact relationship CRUD](operations/customer-contact-relationship-crud.md) | Persist customer-to-contact relationship rows independently from the root contact record | `clsCustomerContact` property edits and `Save()`, or a related-customer/contact lookup call | `clsCustomerContact` state or related-customer lookup request | Persisted or retrieved `COMPANY_PERSON` relationship rows | [BR-004](business-rules.md#br-004-customer-contact-links-require-a-relationship-code) | [COMPANY_PERSON](database-tables.md#company-person), [COMPANY](database-tables.md#company), [PERSON](database-tables.md#person) | [SQL-010](sql/SQL-010.md), [SQL-028](sql/SQL-028.md), [SQL-038](sql/SQL-038.md), [SQL-069](sql/SQL-069.md), [SQL-084](sql/SQL-084.md) |
| [Address info CRUD and linking](operations/address-info-crud-and-linking.md) | Persist standalone address rows and maintain their customer/contact link rows | Caller adds/edits/removes a `clsAddressInfo` in a customer's or contact's Addresses collection and the parent saves | Address fields, owning customer/contact ID, connected-phone linkage | Persisted `ADDRESS` row; persisted or removed `COMPANY_ADDRESS`/`PERSON_ADDRESS` link row | [BR-005](business-rules.md#br-005-address-records-require-an-id-and-address-type) | [ADDRESS](database-tables.md#address), [COMPANY_ADDRESS](database-tables.md#company-address), [COMPANY_ADDRESS_PHONE](database-tables.md#company-address-phone), [PERSON_ADDRESS](database-tables.md#person-address), [PERSON_ADDRESS_PHONE](database-tables.md#person-address-phone) | [SQL-001](sql/SQL-001.md), [SQL-002](sql/SQL-002.md), [SQL-004](sql/SQL-004.md), [SQL-009](sql/SQL-009.md), [SQL-030](sql/SQL-030.md), [SQL-036](sql/SQL-036.md), [SQL-064](sql/SQL-064.md), [SQL-065](sql/SQL-065.md), [SQL-075](sql/SQL-075.md), [SQL-076](sql/SQL-076.md), [SQL-078](sql/SQL-078.md), [SQL-083](sql/SQL-083.md) |
| [Email info CRUD and linking](operations/email-info-crud-and-linking.md) | Persist standalone email rows and maintain their customer/contact link rows | Caller adds/edits/removes a `clsEmailAddressInfo` in a customer's or contact's EmailAddresses collection and the parent saves | Email fields, owning customer/contact ID | Persisted `EMAIL_ADDRESS` row; persisted or removed `COMPANY_EMAIL`/`PERSON_EMAIL` link row | [BR-006](business-rules.md#br-006-email-validation-severity-and-depth-are-configurable), [BR-010](business-rules.md#br-010-changing-an-email-address-value-clears-its-verified-flag) | [EMAIL_ADDRESS](database-tables.md#email-address), [COMPANY_EMAIL](database-tables.md#company-email), [PERSON_EMAIL](database-tables.md#person-email) | [SQL-005](sql/SQL-005.md), [SQL-011](sql/SQL-011.md), [SQL-014](sql/SQL-014.md), [SQL-015](sql/SQL-015.md), [SQL-071](sql/SQL-071.md), [SQL-072](sql/SQL-072.md), [SQL-079](sql/SQL-079.md), [SQL-085](sql/SQL-085.md), [SQL-088](sql/SQL-088.md), [SQL-089](sql/SQL-089.md) |
| [Phone info CRUD and linking](operations/phone-info-crud-and-linking.md) | Persist standalone phone rows and maintain their customer/contact link rows | Caller adds/edits/removes a `clsPhoneInfo` in a customer's or contact's Phones collection and the parent saves | Phone fields, owning customer/contact ID | Persisted `PHONE` row; persisted or removed `COMPANY_PHONE`/`PERSON_PHONE` link row | [BR-007](business-rules.md#br-007-phone-records-require-an-id-and-formatted-value) | [PHONE](database-tables.md#phone), [COMPANY_PHONE](database-tables.md#company-phone), [PERSON_PHONE](database-tables.md#person-phone) | [SQL-007](sql/SQL-007.md), [SQL-013](sql/SQL-013.md), [SQL-016](sql/SQL-016.md), [SQL-017](sql/SQL-017.md), [SQL-073](sql/SQL-073.md), [SQL-074](sql/SQL-074.md), [SQL-081](sql/SQL-081.md), [SQL-087](sql/SQL-087.md), [SQL-090](sql/SQL-090.md), [SQL-091](sql/SQL-091.md) |
| [Long-note persistence](operations/long-note-persistence.md) | Persist long-form notes separately from the root customer or contact rows, deleting blank notes rather than storing them | Caller sets `clsCustomer.LongNoteText`/`clsContact.LongNoteText` and the parent saves | `NoteText`, owning customer/contact ID | Persisted or deleted `COMPANY_NOTE`/`PERSON_NOTE` row | [BR-009](business-rules.md#br-009-blank-long-notes-are-deleted-rather-than-stored-as-empty-text) | [COMPANY_NOTE](database-tables.md#company-note), [PERSON_NOTE](database-tables.md#person-note) | [SQL-006](sql/SQL-006.md), [SQL-012](sql/SQL-012.md), [SQL-033](sql/SQL-033.md), [SQL-040](sql/SQL-040.md), [SQL-067](sql/SQL-067.md), [SQL-070](sql/SQL-070.md), [SQL-080](sql/SQL-080.md), [SQL-086](sql/SQL-086.md) |
| [Agency, agent, and provider customer resolution](operations/agency-agent-provider-resolution.md) | Resolve agency, agent, and provider identifiers into local customer/contact records, creating and linking them on first use | Caller invokes `GetCustomerInfoForAgent` or `GetCustomerIDForProvider` with an external identifier | Agency/agent/provider identifier, optional `create` flag | Resolved `AgentInfo` or provider `CustomerID`; newly created `COMPANY`/`PERSON` rows and mapping rows when no mapping existed | [BR-008](business-rules.md#br-008-generated-agency-agent-and-provider-records-can-be-forced-inactive) | [AGENCY](database-tables.md#agency), [AGENT](database-tables.md#agent), [CUSTOMER_AGENCY](database-tables.md#customer-agency), [CUSTOMER_AGENT](database-tables.md#customer-agent), [CUSTOMER_PROVIDER](database-tables.md#customer-provider), [PROVIDER](database-tables.md#provider), [PROVIDER_TAX_ID](database-tables.md#provider-tax-id) | [SQL-018](sql/SQL-018.md), [SQL-019](sql/SQL-019.md), [SQL-024](sql/SQL-024.md), [SQL-046](sql/SQL-046.md), [SQL-047](sql/SQL-047.md), [SQL-048](sql/SQL-048.md), [SQL-049](sql/SQL-049.md), [SQL-059](sql/SQL-059.md), [SQL-060](sql/SQL-060.md), [SQL-063](sql/SQL-063.md) |
| [External identifier resolution](operations/external-identifier-resolution.md) | Resolve auditor, MCO, RTW, group, policy, and injured-worker identifiers into local customer records | Caller invokes one of the `GetCustomerIDFor*` resolution functions with an external source-system identifier | Auditor/MCO/RTW/group/policy/worker identifier | Resolved `CustomerID` (or populated `WorkerInfo`); newly created `COMPANY` row and mapping row when no mapping existed | None registered* | [PA_AUDITOR](database-tables.md#pa-auditor), [CUSTOMER_AUDITOR](database-tables.md#customer-auditor), [CUSTOMER_SOURCE](database-tables.md#customer-source), [RTW_LOAD_CODE](database-tables.md#rtw-load-code), [CUSTOMER_GROUP](database-tables.md#customer-group), [GROUP_ASSOCIATION](database-tables.md#group-association), [CUSTOMER_POLICY](database-tables.md#customer-policy), [POLICY](database-tables.md#policy) | [SQL-020](sql/SQL-020.md), [SQL-021](sql/SQL-021.md), [SQL-022](sql/SQL-022.md), [SQL-023](sql/SQL-023.md), [SQL-025](sql/SQL-025.md), [SQL-050](sql/SQL-050.md), [SQL-051](sql/SQL-051.md), [SQL-052](sql/SQL-052.md), [SQL-053](sql/SQL-053.md), [SQL-054](sql/SQL-054.md), [SQL-055](sql/SQL-055.md), [SQL-056](sql/SQL-056.md), [SQL-057](sql/SQL-057.md), [SQL-058](sql/SQL-058.md), [SQL-061](sql/SQL-061.md), [SQL-062](sql/SQL-062.md) |
| [Contact info helper factories and code-map lookups](operations/contact-info-helper-factories.md) | Build and attach phone/email info items from raw values, and cache code-map lookups for type/description resolution | Caller invokes `mdlCustomerContact.CreatePhone`/`CreateEmail`, or any operation resolves a code/type description | Raw phone/email value, type identifier, `isPrimary` | Constructed `clsPhoneInfo`/`clsEmailAddressInfo` attached to the contact's collection; cached code-map lookups | None registered* | None documented* | None catalogued* |

## Process flow diagram

The following diagram shows how the eleven operations relate: a caller searches for or retrieves a customer/contact, maintains the root record and its info-item/relationship/note children, and — for records originating outside this system — resolves an external identifier into a local customer before that customer participates in the rest of the model.

```mermaid
flowchart TD
	Start([Caller requests customer/contact data]) --> Search[Customer/contact search]
	Start --> Retrieve[Retrieve or create<br>root customer/contact]
	Retrieve --> CustomerCRUD[Customer CRUD with<br>child persistence]
	Retrieve --> ContactCRUD[Contact CRUD with<br>child persistence]
	CustomerCRUD --> Children[Maintain child info items]
	ContactCRUD --> Children
	Children --> Address[Address info CRUD and linking]
	Children --> Email[Email info CRUD and linking]
	Children --> Phone[Phone info CRUD and linking]
	Children --> Note[Long-note persistence]
	CustomerCRUD --> Relationship[Customer-contact relationship CRUD]
	ContactCRUD --> Relationship
	Email --> Helper[Contact info helper factories<br>and code-map lookups]
	Phone --> Helper
	External([External identifier presented]) --> Resolve{Identifier type}
	Resolve -->|Agency/agent/provider| Agency[Agency, agent, and provider<br>customer resolution]
	Resolve -->|Auditor/MCO/RTW/group/policy/worker| ExtID[External identifier resolution]
	Agency --> CustomerCRUD
	Agency --> Relationship
	ExtID --> CustomerCRUD
	Agency --> Done([Local customer/contact<br>ready for use])
	ExtID --> Done
	Relationship --> Done
	Note --> Done
	Address --> Done
	Phone --> Done
	Search --> Done
```

## Database interactions

The following table summarizes which operations read from or write to the database. Per-step SQL and table citations live in each operation's detail page under `operations/`.

| Operation | SQL | Tables | Type |
| --- | --- | --- | --- |
| [Customer/contact search](operations/customer-contact-search.md) | [SQL-031](sql/SQL-031.md), [SQL-037](sql/SQL-037.md) | [PERSON](database-tables.md#person), [COMPANY](database-tables.md#company), [COMPANY_PERSON](database-tables.md#company-person) | Read |
| [Customer CRUD with child persistence](operations/customer-crud-with-child-persistence.md) | [SQL-008](sql/SQL-008.md), [SQL-035](sql/SQL-035.md), [SQL-068](sql/SQL-068.md), [SQL-082](sql/SQL-082.md) | [COMPANY](database-tables.md#company) | Read / Write |
| [Contact CRUD with child persistence](operations/contact-crud-with-child-persistence.md) | [SQL-003](sql/SQL-003.md), [SQL-028](sql/SQL-028.md), [SQL-029](sql/SQL-029.md), [SQL-066](sql/SQL-066.md), [SQL-077](sql/SQL-077.md) | [PERSON](database-tables.md#person) | Read / Write |
| [Customer-contact relationship CRUD](operations/customer-contact-relationship-crud.md) | [SQL-010](sql/SQL-010.md), [SQL-028](sql/SQL-028.md), [SQL-038](sql/SQL-038.md), [SQL-069](sql/SQL-069.md), [SQL-084](sql/SQL-084.md) | [COMPANY_PERSON](database-tables.md#company-person), [COMPANY](database-tables.md#company), [PERSON](database-tables.md#person) | Read / Write |
| [Address info CRUD and linking](operations/address-info-crud-and-linking.md) | [SQL-001](sql/SQL-001.md), [SQL-002](sql/SQL-002.md), [SQL-004](sql/SQL-004.md), [SQL-009](sql/SQL-009.md), [SQL-030](sql/SQL-030.md), [SQL-036](sql/SQL-036.md), [SQL-064](sql/SQL-064.md), [SQL-065](sql/SQL-065.md), [SQL-075](sql/SQL-075.md), [SQL-076](sql/SQL-076.md), [SQL-078](sql/SQL-078.md), [SQL-083](sql/SQL-083.md) | [ADDRESS](database-tables.md#address), [COMPANY_ADDRESS](database-tables.md#company-address), [COMPANY_ADDRESS_PHONE](database-tables.md#company-address-phone), [PERSON_ADDRESS](database-tables.md#person-address), [PERSON_ADDRESS_PHONE](database-tables.md#person-address-phone) | Read / Write |
| [Email info CRUD and linking](operations/email-info-crud-and-linking.md) | [SQL-005](sql/SQL-005.md), [SQL-011](sql/SQL-011.md), [SQL-014](sql/SQL-014.md), [SQL-015](sql/SQL-015.md), [SQL-071](sql/SQL-071.md), [SQL-072](sql/SQL-072.md), [SQL-079](sql/SQL-079.md), [SQL-085](sql/SQL-085.md), [SQL-088](sql/SQL-088.md), [SQL-089](sql/SQL-089.md) | [EMAIL_ADDRESS](database-tables.md#email-address), [COMPANY_EMAIL](database-tables.md#company-email), [PERSON_EMAIL](database-tables.md#person-email) | Read / Write |
| [Phone info CRUD and linking](operations/phone-info-crud-and-linking.md) | [SQL-007](sql/SQL-007.md), [SQL-013](sql/SQL-013.md), [SQL-016](sql/SQL-016.md), [SQL-017](sql/SQL-017.md), [SQL-073](sql/SQL-073.md), [SQL-074](sql/SQL-074.md), [SQL-081](sql/SQL-081.md), [SQL-087](sql/SQL-087.md), [SQL-090](sql/SQL-090.md), [SQL-091](sql/SQL-091.md) | [PHONE](database-tables.md#phone), [COMPANY_PHONE](database-tables.md#company-phone), [PERSON_PHONE](database-tables.md#person-phone) | Read / Write |
| [Long-note persistence](operations/long-note-persistence.md) | [SQL-006](sql/SQL-006.md), [SQL-012](sql/SQL-012.md), [SQL-033](sql/SQL-033.md), [SQL-040](sql/SQL-040.md), [SQL-067](sql/SQL-067.md), [SQL-070](sql/SQL-070.md), [SQL-080](sql/SQL-080.md), [SQL-086](sql/SQL-086.md) | [COMPANY_NOTE](database-tables.md#company-note), [PERSON_NOTE](database-tables.md#person-note) | Read / Write |
| [Agency, agent, and provider customer resolution](operations/agency-agent-provider-resolution.md) | [SQL-018](sql/SQL-018.md), [SQL-019](sql/SQL-019.md), [SQL-024](sql/SQL-024.md), [SQL-046](sql/SQL-046.md), [SQL-047](sql/SQL-047.md), [SQL-048](sql/SQL-048.md), [SQL-049](sql/SQL-049.md), [SQL-059](sql/SQL-059.md), [SQL-060](sql/SQL-060.md), [SQL-063](sql/SQL-063.md) | [AGENCY](database-tables.md#agency), [AGENT](database-tables.md#agent), [CUSTOMER_AGENCY](database-tables.md#customer-agency), [CUSTOMER_AGENT](database-tables.md#customer-agent), [CUSTOMER_PROVIDER](database-tables.md#customer-provider), [PROVIDER](database-tables.md#provider), [PROVIDER_TAX_ID](database-tables.md#provider-tax-id) | Read / Write |
| [External identifier resolution](operations/external-identifier-resolution.md) | [SQL-020](sql/SQL-020.md), [SQL-021](sql/SQL-021.md), [SQL-022](sql/SQL-022.md), [SQL-023](sql/SQL-023.md), [SQL-025](sql/SQL-025.md), [SQL-050](sql/SQL-050.md), [SQL-051](sql/SQL-051.md), [SQL-052](sql/SQL-052.md), [SQL-053](sql/SQL-053.md), [SQL-054](sql/SQL-054.md), [SQL-055](sql/SQL-055.md), [SQL-056](sql/SQL-056.md), [SQL-057](sql/SQL-057.md), [SQL-058](sql/SQL-058.md), [SQL-061](sql/SQL-061.md), [SQL-062](sql/SQL-062.md) | [PA_AUDITOR](database-tables.md#pa-auditor), [CUSTOMER_AUDITOR](database-tables.md#customer-auditor), [CUSTOMER_SOURCE](database-tables.md#customer-source), [RTW_LOAD_CODE](database-tables.md#rtw-load-code), [CUSTOMER_GROUP](database-tables.md#customer-group), [GROUP_ASSOCIATION](database-tables.md#group-association), [CUSTOMER_POLICY](database-tables.md#customer-policy), [POLICY](database-tables.md#policy) | Read / Write |
| [Contact info helper factories and code-map lookups](operations/contact-info-helper-factories.md) | None catalogued* | None documented* | Read (cached reference data) |

## Failure and edge-case behavior
- Search execution is blocked until callers satisfy [BR-001](business-rules.md#br-001-search-requires-at-least-one-populated-criterion) and [BR-002](business-rules.md#br-002-search-results-are-capped-at-300).
- Contact deletion is blocked by [BR-003](business-rules.md#br-003-contacts-with-customer-relationships-cannot-be-deleted) while relationship rows still exist.
- Relationship maintenance fails until callers satisfy [BR-004](business-rules.md#br-004-customer-contact-links-require-a-relationship-code); a suspected defect in the relationship update statement may cause a relationship-code change to match zero rows rather than update the intended row.*
- Address, email, and phone save paths apply [BR-005](business-rules.md#br-005-address-records-require-an-id-and-address-type), [BR-006](business-rules.md#br-006-email-validation-severity-and-depth-are-configurable), and [BR-007](business-rules.md#br-007-phone-records-require-an-id-and-formatted-value) before persistence; removing an info item from a collection deletes only the customer/contact link row, never the standalone `ADDRESS`/`EMAIL_ADDRESS`/`PHONE` row.*
- A blank long note is deleted rather than persisted as empty text ([BR-009](business-rules.md#br-009-blank-long-notes-are-deleted-rather-than-stored-as-empty-text)); changing an email's value clears its verified flag ([BR-010](business-rules.md#br-010-changing-an-email-address-value-clears-its-verified-flag)).
- Agency, agent, and provider conversion flows can create inactive records according to [BR-008](business-rules.md#br-008-generated-agency-agent-and-provider-records-can-be-forced-inactive); `CreateAgent`'s existing-mapping lookup is suspected to bind the wrong identifier, and provider address creation is present in source as dead, commented-out code.*
- `GetCustomerIDForMCO` is the only external-identifier resolution function that never creates a customer when no mapping is found; the injured-worker path depends on an external REST API (`CCClaimDataApi`) rather than another SAIF library.*
- `mdlCustomerContact.CreateEmail` has no validity gate before attaching a new email to a contact's collection, unlike the equivalent `CreatePhone` helper, which only attaches phones that are already valid.*

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

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Business rules](business-rules.md)
- [Database tables](database-tables.md)
- [SQL catalog](sql/index.md)
- [API reference](api/index.md)
- [Configuration](configuration.md)

## Sources
- `Business\SAIF.Business.CustomerContact\clsCustomerContactSearch.vb`
- `Business\SAIF.Business.CustomerContact\mdlCustomerContact.vb`
- `Business\SAIF.Business.CustomerContact\mdlCodeMaps.vb`
- `Business\SAIF.Business.CustomerContact\AgentInfo.vb`
- `Business\SAIF.Business.CustomerContact\WorkerInfo.vb`
- `Business\SAIF.Business.CustomerContact\Customer\clsCustomer.vb`
- `Business\SAIF.Business.CustomerContact\Customer\clsCustomerContact.vb`
- `Business\SAIF.Business.CustomerContact\Customer\clsCustomerAddressCollection.vb`
- `Business\SAIF.Business.CustomerContact\Customer\clsCustomerEmailCollection.vb`
- `Business\SAIF.Business.CustomerContact\Customer\clsCustomerPhoneCollection.vb`
- `Business\SAIF.Business.CustomerContact\Customer\clsCustomerNote.vb`
- `Business\SAIF.Business.CustomerContact\Contact\clsContact.vb`
- `Business\SAIF.Business.CustomerContact\Contact\clsContactAddressCollection.vb`
- `Business\SAIF.Business.CustomerContact\Contact\clsContactEmailCollection.vb`
- `Business\SAIF.Business.CustomerContact\Contact\clsContactPhoneCollection.vb`
- `Business\SAIF.Business.CustomerContact\Contact\clsContactNote.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\InfoItems\clsInfoCollection.vb`
