---
title: SAIF.Services.CleanAddress operations and processes
summary: Operation catalog and cross-operation hub for the CorrectAddress vendor-service adapter.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-07-30
library: SAIF.Services.CleanAddress
reference_type: package
---

# SAIF.Services.CleanAddress operations and processes

This page is the operation catalog and cross-operation hub for `SAIF.Services.CleanAddress`. The library exposes five independent operations that each wrap a single CorrectAddress vendor SOAP call: a health check, a batch cleansing launcher, a proper-case string converter, a ZIP-based city/state/county lookup, and the primary single-address cleanse. Each operation calls the vendor independently and is not part of a shared CRUD rule set, so each is documented on its own page. 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 |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [Health check](operations/health-check.md) | Confirm that the vendor service can respond | Caller invokes `clsCleanAddress.HelloWorld()` | None | Service greeting string | None registered* | — | — |
| [Batch address cleanse](operations/batch-address-cleanse.md) | Launch a server-side batch run and normalize its return code | Caller invokes `clsCleanAddress.RunCleanAddressBatch(inPath)` | `inPath` | `clsBatchReturnInfo` | [BR-004](business-rules.md#br-004-batch-return-code-mapping) | — | — |
| [Proper-case conversion](operations/proper-case-conversion.md) | Convert a string to proper case by using the vendor service | Caller invokes `clsCleanAddress.ConvertToProperCase(inString)` | `inString` | Trimmed `String` | None registered* | — | — |
| [City/state/county lookup by ZIP](operations/city-state-county-lookup.md) | Convert a ZIP code into one or more city/state/county rows | Caller invokes `clsCleanAddress.FindCityStateInfoByZip(inZIP)` | `inZIP` | `List(Of clsCityStateCountyInfo)` | None registered* | — | — |
| [Address cleanse](operations/address-cleanse.md) | Clean and classify an address, then return normalized fields and flags | Caller invokes `clsCleanAddress.CleanAddress(inLine1, inLine2, inCity, inState, inZip, inZip4, inMixedCase)` | `inLine1`, `inLine2`, `inCity`, `inState`, `inZip`, `inZip4`, `inMixedCase` | `clsCleanAddressInfo` | [BR-001](business-rules.md#br-001-cleaned-address-classification), [BR-002](business-rules.md#br-002-unmatched-versus-multiple-match-classification), [BR-003](business-rules.md#br-003-vendor-exception-fallback), [BR-005](business-rules.md#br-005-postnet-barcode-derivation) | — | — |

## Process flow diagram

The following diagram visualizes the primary address-cleansing flow, which is the library's main operation; the other four operations are single-call vendor wrappers that do not branch into this flow.

```mermaid
flowchart TD
	Start([Caller invokes CleanAddress]) --> Proxy[Create clsCAServices proxy]
	Proxy --> Call[Call vendor CleanAddress]
	Call --> Exception{Exception raised?}
	Exception -->|Yes| Fallback[Set USPS return code to -999]
	Exception -->|No| Parse[Parse returned USPS error codes]
	Fallback --> Parse
	Parse --> Classify[Apply cleaned or unmatched<br>or multiple-match rules]
	Classify --> Barcode[Derive POSTNET barcode<br>when check digit is numeric]
	Barcode --> Return([Return clsCleanAddressInfo])
```

## Failure and edge-case behavior

- [Address cleanse](operations/address-cleanse.md) converts service-call exceptions into return code `-999` and continues result classification rather than rethrowing to the caller, per [BR-003](business-rules.md#br-003-vendor-exception-fallback).
- [City/state/county lookup by ZIP](operations/city-state-county-lookup.md) depends on the vendor returning rows in the expected fixed-width layout; a mismatched row width is not validated.**
- [Address cleanse](operations/address-cleanse.md) leaves `PostnetBarcode` empty when the returned check digit is not a single numeric character, per [BR-005](business-rules.md#br-005-postnet-barcode-derivation).
- [Batch address cleanse](operations/batch-address-cleanse.md) maps return codes outside the known cases to `BatchReturnTypes.Unknown`, per [BR-004](business-rules.md#br-004-batch-return-code-mapping).
- [Health check](operations/health-check.md), [Proper-case conversion](operations/proper-case-conversion.md), and [City/state/county lookup by ZIP](operations/city-state-county-lookup.md) do not wrap their vendor calls in a `Try/Catch`, unlike [Address cleanse](operations/address-cleanse.md); a SOAP fault or transport error propagates to the caller unhandled for those three operations.*

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Business rules](business-rules.md)
- [API reference](api/index.md)

> **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
- `Services\SAIF.Services.CleanAddress\clsCleanAddress.vb`
- `Services\SAIF.Services.CleanAddress\clsBatchReturnInfo.vb`
- `Services\SAIF.Services.CleanAddress\clsCityStateCountyInfo.vb`
- `Services\SAIF.Services.CleanAddress\clsCleanAddressInfo.vb`
- `Services\SAIF.Services.CleanAddress\mdlEnums.vb`
- `Services\SAIF.Services.CleanAddress\Web References\CleanAddressSvc\Reference.vb`
