---
title: SAIF.Data.Guidewire architecture
summary: Architectural responsibilities, boundaries, and interaction patterns.
status: draft
owner: SAIF.Core documentation team
last_reviewed: 2026-09-24
library: SAIF.Data.Guidewire
reference_type: package
---

# SAIF.Data.Guidewire architecture

SAIF.Data.Guidewire is the lowest layer of the SAIF.Data family: a set of five typed HTTP clients (Activity, Claim, Financial, Provider, and Worker data) that call Guidewire ClaimCenter and ContactManager REST APIs, built on a shared `HttpClientBase` pattern for URL resolution, Basic authentication, and Polly-backed response caching.

## Responsibilities
- Provide five async client interfaces (`IActivityDataApiClient`, `IClaimDataApiClient`, `IFinancialDataApiClient`, `IProviderDataApiClient`, `IWorkerDataApiClient`) and their implementations over Guidewire REST endpoints.
- Resolve each client's base URL from environment configuration and its Basic-auth credentials from secure configuration, decrypted with a system hash, through the shared `HttpClientBase`.
- Cache GET/POST responses through a Polly policy looked up in `IReadOnlyPolicyRegistry<string>`, configurable per `IDataClientConfiguration` (`UseCache`, `CachePolicyKey`, `MaxCacheDuration`).
- Define the request/response DTOs for each Guidewire API surface under `Models/**` and `Contracts/**`.
- Supply `IDataClientConfiguration`/`DataClientConfiguration`, the configuration contract that `SAIF.Data`'s `ContainerBuilderExtensions.AddDataClients` uses to register these clients.

## Component boundaries
- `Clients/`: `HttpClientBase` (shared abstract base), `HttpClientHelper`, `IDataClientConfiguration`/`DataClientConfiguration`, and the five concrete `*DataApiClient` classes.
- `Interfaces/`: the five client contracts (`I*DataApiClient`).
- `Contracts/`: search-criteria and shared request types (`ActiveMco`, `FindClaimsSearchCriteria`).
- `Models/`: per-API request/response DTOs (`ActivityDataApi`, `ClaimDataApi`, `FinancialDataApi`, `ProviderDataApi`, `Shared`, `WorkerDataApi`).

## Interaction model
This library has no internal project references and no Autofac module of its own; `SAIF.Data.Configuration.ContainerBuilderExtensions.AddDataClients` (in `SAIF.Data`) registers each client `InstancePerLifetimeScope`. At call time, each client's `HttpClientBase` resolves its base URL from `IEnvironmentService.GetConfigSetting(UrlKey)`, and — on first use, when `AuthKey` is set — computes a system hash via `SystemHashUtil` and reads Basic credentials from `IEnvironmentService.GetSecureConfigSetting(AuthKey, hash)`. Cached GET/POST calls execute through the Polly cache policy (or a NoOp policy when caching is disabled). `SAIF.Data`'s `CCClaimApiService` also derives directly from this library's `HttpClientBase`.

## Architecture diagram
The following diagram shows the registration path from `SAIF.Data` and the shared HTTP/authentication/cache pipeline each client uses to reach Guidewire.

```mermaid
flowchart TD
	SD["SAIF.Data<br>ContainerBuilderExtensions.AddDataClients"] --> Clients["Guidewire data clients<br>(Activity, Claim, Financial,<br>Provider, Worker)"]
	Clients --> Base["HttpClientBase<br>(URL/AuthKey resolution,<br>Basic auth, Polly cache)"]
	Base --> CC["Guidewire ClaimCenter API"]
	Base --> AB["Guidewire ContactManager /<br>AddressBook API"]
```

## Sequence diagram
The following diagram shows claim data retrieval by id through `ClaimDataApiClient` (OP-SDG-03).

```mermaid
sequenceDiagram
	participant Caller as SAIF.Data caller
	participant Client as ClaimDataApiClient
	participant Base as HttpClientBase
	participant CC as Guidewire ClaimCenter API
	Caller->>Client: GetClaim(claimId)
	Client->>Base: GetAsyncCached<ClaimData>(GET claims/id/{id})
	Base->>CC: GET claims/id/{id} (Basic auth)
	CC-->>Base: 200 OK / claim JSON
	Base-->>Client: Cached/deserialized ClaimData
	Client-->>Caller: ClaimData
```

## Design constraints
- There is no database access anywhere in this library; every operation is an outbound HTTP call to a Guidewire REST API.
- There are no internal project references; this is the lowest layer of the SAIF.Data family, so it cannot depend on `SAIF.Data` or `SAIF.Data.NHibernate`.
- Response caching is process-wide via Polly with a default 30-second TTL unless `UseCache` is `false`; the obsolete client constructors force `UseCache = false` and silently ignore their `baseUrlOverride` argument ([SDG-BR-003](business-rules.md#sdg-br-003-responses-cached-unless-caching-is-disabled)).
- `ProviderDataApiClient` does not check the response status of its address add/update calls, so failures are unverified by the caller ([SDG-BR-014](business-rules.md#sdg-br-014-provider-address-changes-are-fire-and-forget))*.
- SAIF.Web.API.Clients/Core, RestSharp, and FluentValidation are referenced in `packages.config` but have no confirmed usage in source*.
- Guidewire API contracts (response schemas, error semantics) live outside the repository and could not be verified**.

> **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.

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Dependencies](dependencies.md)
- [Configuration](configuration.md)
- [Operations and processes](operations-processes.md)
- [Business rules](business-rules.md)
- [API reference](api/index.md)

## Sources
- `Data/SAIF.Data.Guidewire/SAIF.Data.Guidewire.csproj`
- `Data/SAIF.Data.Guidewire/Clients/HttpClientBase.cs`
- `Data/SAIF.Data.Guidewire/Clients/HttpClientHelper.cs`
- `Data/SAIF.Data.Guidewire/Clients/DataClientConfiguration.cs`
- `Data/SAIF.Data.Guidewire/Clients/ActivityDataApiClient.cs`
- `Data/SAIF.Data.Guidewire/Clients/ClaimDataApiClient.cs`
- `Data/SAIF.Data.Guidewire/Clients/FinancialDataApiClient.cs`
- `Data/SAIF.Data.Guidewire/Clients/ProviderDataApiClient.cs`
- `Data/SAIF.Data.Guidewire/Clients/WorkerDataApiClient.cs`
- `Data/SAIF.Data/Configuration/ContainerBuilderExtensions.cs`
- `Data/SAIF.Data/Queries/Claims/CCClaimApiService.cs`
- `Data/SAIF.Data.Guidewire/packages.config`
- `Data/SAIF.Data.Guidewire/Models/ClaimDataApi/ReservesData.cs`
