---
title: Configuration settings
summary: Configuration keys consumed by this library, retrieval methods, and runtime dependencies.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-09-24
library: SAIF.Services
reference_type: package
---

# Configuration settings

SAIF.Services reads all of its own configuration through `IEnvironmentService.GetConfigSetting`/`IsProduction` (SAIF.Framework.Core) plus one typed `ApplicationSettingsBase` property generated for the CleanAddress SOAP proxy; it consumes 23 unique setting keys directly (21 literal Environment API keys after merging two case-variant pairs, 1 caller-supplied/dynamic Environment API key, and 1 `applicationSettings` key), makes zero calls to `GetSecureConfigSetting`, `ConfigurationManager.AppSettings`, or `DbConnectionManager`, and pulls in 17 additional transitive configuration keys required at run time by its `SAIF.Data`, `SAIF.Data.Guidewire`, and `SAIF.Services.Web.Proxies` dependencies (3 of which are secure/credential-bearing). `IsProduction` is checked 15 times across 12 classes to select production/non-production behavior.

## Configuration retrieval methods

| Method | Class / Interface | Namespace | Usage pattern |
| --- | --- | --- | --- |
| `GetConfigSetting(string key)` | `IEnvironmentService` | `SAIF.Core.Services` (package `SAIF.Framework.Core`) | Constructor-injected `IEnvironmentService` in 17 compiled service classes; keys are string literals or `private const string` fields, read either in constructors (`TaskService`, `LegalTaskService`, `TemplateSearchService`, `AutoImportHelperService`) or at call time in batch/email methods. |
| `GetConfigSetting(string key)` with a caller-supplied key | `IEnvironmentService` | `SAIF.Core.Services` | `McoImageExporter.ExportActiveEnrollmentDocuments`/`ExportNewEnrollmentDocuments` accept `docListEnvironmentServiceKey` and read a JSON document-type list under that key (`Services/SAIF.Services/Imaging/McoImageExporter.cs:85,121`). |
| `IsProduction` (property) | `IEnvironmentService` | `SAIF.Core.Services` | Boolean environment flag used for 15 behavioral branches in 12 classes (see Environment variance assessment). |
| `new WindowsEnvironmentService()` | `WindowsEnvironmentService` | Framework package (`SAIF.Framework.Core`)* | Instantiated as a protected field in `PharmacyEligibilityService` (`Services/SAIF.Services/Claims/PharmacyElilgbility/PharmacyEligibilityService.cs:28`) but never read in the class — a dead configuration dependency. |
| `Settings.Default.<property>` | `SAIF.Services.Properties.Settings : ApplicationSettingsBase` | `SAIF.Services.Properties` | Generated web-reference URL setting read by the CleanAddress SOAP proxy constructor (`Services/SAIF.Services/Web References/CleanAddressSvc/Reference.cs:46`). |
| Host-injected constructor strings | `BillPaymentService`, `SubpoenaPaymentService` | `SAIF.Services.Legal.*` | Both take a `string developerEmails` constructor argument that the DI host must supply (`Services/SAIF.Services/Legal/Bills/BillPaymentService.cs:77,100`; `Services/SAIF.Services/Legal/Subpoenas/SubpoenaPaymentService.cs:79,100`); source not traced — registered outside this library**. |

Not found in compiled source: `GetSecureConfigSetting`, `GetGlobalConfigSetting`, `SystemHashUtil`, `ConfigurationManager.AppSettings`, `ConfigurationManager.ConnectionStrings`, `WebConfigurationManager`, `DbConnectionManager`, `EnvironmentConfigKeys`, and Properties.xml loaders.

## Environment API settings

Settings retrieved via `IEnvironmentService`. All rows use `GetConfigSetting`; none is secure.

| Setting key | Method | Data type | Purpose | Consuming class | Source |
| --- | --- | --- | --- | --- | --- |
| `Noreplyemailsenderaddress` | `GetConfigSetting` | string | No-reply sender address for notification emails | `MissingTimeLossService`, `BillPaymentService`, `SubpoenaPaymentService`, `ZeroPaySubpoenaProcess`, `SubpoenaLabelService` | `Services/SAIF.Services/Claims/Information/MissingTimeLossService.cs:82` |
| `noreplyemailsenderaddress` (lower-case spelling of the key above) | `GetConfigSetting` | string | Same as above | `SubpoenaDocumentService.EmailSubpoenaToProcessServer` | `Services/SAIF.Services/Legal/Subpoenas/SubpoenaDocumentService.cs:217` |
| `manage_claim_activity.missing_tax_id_lookback_days` | `GetConfigSetting` | int (parsed via `int.Parse`) | Lookback window for missing-tax-id task generation | `ClaimTaskGenerationService.GenerateMissingTaxIdActivities` | `Services/SAIF.Services/Claims/Tasks/ClaimTaskGenerationService.cs:64` |
| `manage_claim_activity.request_tax_id_30` | `GetConfigSetting` | string | 30-day task text | `ClaimTaskGenerationService.GenerateMissingTaxIdActivities` | `Services/SAIF.Services/Claims/Tasks/ClaimTaskGenerationService.cs:65` |
| `manage_claim_activity.request_tax_id_60` | `GetConfigSetting` | string | 60-day task text | `ClaimTaskGenerationService.GenerateMissingTaxIdActivities` | `Services/SAIF.Services/Claims/Tasks/ClaimTaskGenerationService.cs:66` |
| `ClaimActivities.ValidGroups` | `GetConfigSetting` | string (comma-split) | Valid claim-activity group list | `TaskService` constructor | `Services/SAIF.Services/Claims/Tasks/TaskService.cs:134` |
| `ImagingApi.OnBaseCustomQueryId` | `GetConfigSetting` | string | OnBase custom query identifier | `TaskService.GetOnBaseEncodedString` | `Services/SAIF.Services/Claims/Tasks/TaskService.cs:398` |
| `LegalActivities.ValidGroups` | `GetConfigSetting` | string (comma-split) | Valid legal-activity group list | `LegalTaskService` constructor | `Services/SAIF.Services/Legal/Tasks/LegalTaskService.cs:142` |
| `ImagingApi.onbaseclaimcustomqueryparms` | `GetConfigSetting` | string | OnBase claim custom-query parameters | `LegalTaskService.GetClaimDocumentURL` | `Services/SAIF.Services/Legal/Tasks/LegalTaskService.cs:473` |
| `ImagingApi.onbaselegalcustomqueryparms` | `GetConfigSetting` | string | OnBase legal custom-query parameters | `LegalTaskService.GetCaseDocumentURL` | `Services/SAIF.Services/Legal/Tasks/LegalTaskService.cs:487` |
| `idmfilepath` | `GetConfigSetting` | string (path) | IDM auto-import output directory | `AutoImportHelperService` constructor | `Services/SAIF.Services/Imaging/AutoImportHelperService.cs:48` |
| `xpressionsoutputdocumentspath` | `GetConfigSetting` | string (path) | xPressions output-documents directory | `DocumentDeferredService.SheetCount`, `WitnessSubpoenaProcess.GenerateWitnessCashDisbursementRequest` | `Services/SAIF.Services/Documents/DocumentDeferredService.cs:45` |
| `Xpressionsoutputdocumentspath` (capitalized spelling of the key above) | `GetConfigSetting` | string (path) | xPressions checks output path (`\Checks` appended) | `ZeroPaySubpoenaProcess.GenerateZeroPayDocuments` | `Services/SAIF.Services/Legal/Subpoenas/ZeroPaySubpoenaProcess.cs:68-69` |
| `Xpressionsoutputcheckspath` | `GetConfigSetting` | string (path) | xPressions checks output path | `OpposingCounselService.GenerateOpposingCounselDocuments`, `WitnessSubpoenaProcess.GenerateWitnessDocuments` | `Services/SAIF.Services/Legal/Subpoenas/OpposingCounselService.cs:25,49` |
| `Xpressionsxmlpath` | `GetConfigSetting` | string (path) | xPressions XML batch-file path | `OpposingCounselService.GenerateOpposingCounselDocuments`, `WitnessSubpoenaProcess`, `ZeroPaySubpoenaProcess.GenerateZeroPayDocuments` | `Services/SAIF.Services/Legal/Subpoenas/OpposingCounselService.cs:23,50` |
| `imagingapiurl` | `GetConfigSetting` | string (URL) | OnBase Imaging API base URL | `TemplateSearchService` constructor (`new ImagingClient(url)`) | `Services/SAIF.Services/Documents/TemplateSearchService.cs:45` |
| `internalwebhost` | `GetConfigSetting` | string (URL) | Host root for links in notification emails | `BillPaymentService.RejectBillForAddressCorrection`, `SubpoenaPaymentService.RejectSubpoenaForAddressCorrection`, `SubpoenaService.GetApprovalEmail` | `Services/SAIF.Services/Legal/Bills/BillPaymentService.cs:686` |
| `corporate800number` | `GetConfigSetting` | string | Corporate 800 number in notification content | `SubpoenaDocumentService.EmailSubpoenaToProcessServer` | `Services/SAIF.Services/Legal/Subpoenas/SubpoenaDocumentService.cs:218` |
| `k2attachmentlocation` | `GetConfigSetting` | string (path) | File-share path for label images | `SubpoenaLabelService.GenerateRecipientLabels` | `Services/SAIF.Services/Legal/Subpoenas/SubpoenaLabelService.cs:26,101,129` |
| `casemanagement.supportemaillist` | `GetConfigSetting` | string | Developer/support recipient list | `SubpoenaLabelService.FormatEmailForInvalidAddress` | `Services/SAIF.Services/Legal/Subpoenas/SubpoenaLabelService.cs:28,174` |
| `casemanagement.mailroomsupportemails` | `GetConfigSetting` | string | Mailroom support recipient list | `SubpoenaLabelService.FormatEmailForInvalidAddress` | `Services/SAIF.Services/Legal/Subpoenas/SubpoenaLabelService.cs:29,175` |
| `casemanagement.providersupportemail` | `GetConfigSetting` | string | Provider support recipient | `SubpoenaLabelService.FormatEmailForInvalidAddress` | `Services/SAIF.Services/Legal/Subpoenas/SubpoenaLabelService.cs:30,176` |
| `pdfDataDirectory` | `GetConfigSetting` | string (path) | Root of PDF tracking folders | `PdfTrackingService.PurgeFolders` | `Services/SAIF.Services/Utilities/Pdf/PdfTrackingService.cs:222` |
| caller-supplied `docListEnvironmentServiceKey` | `GetConfigSetting` | string (dynamic key name; value is JSON) | Enrollment document-type list, deserialized to `List<DocumentTypeSubTypeCombo>` | `McoImageExporter.ExportActiveEnrollmentDocuments`/`ExportNewEnrollmentDocuments` (inherited by `MajorisImageExporter`) | `Services/SAIF.Services/Imaging/McoImageExporter.cs:85,121,205-208` |

**Notes:**
- **Case-variant keys.** `Noreplyemailsenderaddress`/`noreplyemailsenderaddress` and `xpressionsoutputdocumentspath`/`Xpressionsoutputdocumentspath` are the same logical setting requested with different casing. The in-repo Environment API lower-cases track and key before lookup (`Services/SAIF.Services.WebApi/EnvironmentApi/Classes/EnvironmentSettings.cs:84,123`); whether the production `IEnvironmentService` implementation is also case-insensitive is not visible from this repository**.
- **Declared but unused key constants.** `OpposingCounselService.OutputPathEnvironmentVariable = "xPressionsOutputDocumentsPath"` and `SubpoenaLabelService.XmlPathEnvironmentVariable = "Xpressionsoutputdocumentspath"` are never passed to `GetConfigSetting` — not active configuration.
- **Dynamic key.** No production caller of the `docListEnvironmentServiceKey` overloads exists in this repository; the only caller is a unit test passing `"test"`. The real key name is supplied by an external host**.
- **Parsing risk.** `manage_claim_activity.missing_tax_id_lookback_days` is parsed with `int.Parse` without a guard, so a missing or non-numeric value throws at run time*. The two `*.ValidGroups` keys are `.Split(',')` directly, so a missing value throws `NullReferenceException` in the constructor*.

## AppSettings (Web.config)

None. `Services/SAIF.Services/app.config` has no `<appSettings>` section and no compiled source calls `ConfigurationManager.AppSettings`.

## Database connection configuration

None resolved. There is no `DbConnectionManager`, `EnvironmentConfigKeys.OracleDatabase`, or `<connectionStrings>` usage in this library — data access goes through `IUnitOfWork`/`IRepositoryFactory` supplied by SAIF.Data.NHibernate and the SAIF.Framework.Data.NHibernate package, whose connection is configured by the host*.

| Connection name | Provider | Retrieval method | Purpose | Source |
| --- | --- | --- | --- | --- |
| N/A (provider registration only) | ODP.NET managed (`Oracle.ManagedDataAccess.Client.OracleClientFactory`, v4.122.21.1) | `<system.data><DbProviderFactories>` registration | Registers the Oracle managed provider factory; a class library's `app.config` is not loaded by the hosting process at run time* | `Services/SAIF.Services/app.config` |

## Secure settings

None. No compiled source in SAIF.Services calls `GetSecureConfigSetting` or `SystemHashUtil`. Secure settings reached indirectly through dependencies are listed in Transitive configuration below.

## Custom configuration sections

Declared in `Services/SAIF.Services/app.config:3-8`:

| Section name | Handler type | Purpose |
| --- | --- | --- |
| `applicationSettings` / `SAIF.Services.Properties.Settings` | `System.Configuration.ApplicationSettingsGroup` / `System.Configuration.ClientSettingsSection` | Holds the typed `Settings` values generated for the CleanAddress web reference |
| `oracle.manageddataaccess.client` | `OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.21.1` | ODP.NET managed-driver section; declared but no element body present, so it carries no settings |

`<system.serviceModel>` is present with empty `<bindings />` and `<client />` (`Services/SAIF.Services/app.config:120-123`); the CleanAddress proxy is an ASMX `SoapHttpClientProtocol` and does not use WCF bindings.

## ApplicationSettingsBase settings

| Class | Property | Type | Default value | Source |
| --- | --- | --- | --- | --- |
| `SAIF.Services.Properties.Settings` (internal sealed) | `SAIF_Services_CleanAddressSvc_clsCAServices` | `string`, application-scoped, `SpecialSetting.WebServiceUrl` | `http://correctaddress/wsCorrectAddress/clsCAServices.asmx` | `Services/SAIF.Services/Properties/Settings.Designer.cs:26-34` |

The web reference is declared with `UrlBehavior=Dynamic` (`Services/SAIF.Services/SAIF.Services.csproj:531-541`), so the proxy constructor reads `Settings.Default.SAIF_Services_CleanAddressSvc_clsCAServices` (`Services/SAIF.Services/Web References/CleanAddressSvc/Reference.cs:46`). A host can override the value by adding an `applicationSettings/SAIF.Services.Properties.Settings` section to its own `Web.config`; otherwise the compiled `DefaultSettingValueAttribute` URL is used*. This is the only configuration value in SAIF.Services that does not come from the Environment API.

## Transitive configuration (from dependencies)

SAIF.Services has project references to `SAIF.SAIFCode.Core`, `SAIF.Data`, `SAIF.Data.Guidewire`, `SAIF.Data.NHibernate`, `SAIF.Domain`, and `SAIF.Services.Web.Proxies`. The keys below are required at run time when SAIF.Services code resolves or calls the listed dependency types. `SAIF.Domain` and `SAIF.Data.NHibernate` contain no `GetConfigSetting`, `GetSecureConfigSetting`, `ConfigurationManager`, or `DbConnectionManager` calls.

| Setting key | Method | Source dependency | Dependency type | Purpose |
| --- | --- | --- | --- | --- |
| `cc.ccclaimdataapiurl` | `GetConfigSetting` | SAIF.Data (`CCClaimApiService`) | Project Reference | Guidewire ClaimCenter claim-data API base URL, used via `ICCClaimApiService` in 25 compiled files (`BillService`, `EbillingService`, `ClaimInformationService`, `LegalService`, `SubpoenaService`, and others) |
| `cc.medicalbillingapiurl` | `GetConfigSetting` | SAIF.Data (`MedicalBillingApiService`) | Project Reference | Medical billing API base URL, used via `IMedicalBillingApiService` in `EbillingService` |
| `medicalbillingapi.creds` | `GetSecureConfigSetting` | SAIF.Data (`MedicalBillingApiService`) | Project Reference | Medical billing API credentials (secure), used via `IMedicalBillingApiService` in `EbillingService` |
| `cc.claimdata.api.url.v1` | `GetConfigSetting` | SAIF.Data.Guidewire (`ClaimDataApiClient`) | Project Reference | Claim data API v1 base URL, used via `IClaimDataApiClient` in 20 compiled files (`BillQueryService`, `TaskService`, `LegalTaskService`, `McoImageExporter`, and others) |
| `cc.activitydata.api.url.v1` | `GetConfigSetting` | SAIF.Data.Guidewire (`ActivityDataApiClient`) | Project Reference | Activity data API base URL, used via `IActivityDataApiClient` in `SeverityModelActivityService`, `BillPaymentService` |
| `cc.financial.api.url.v1` | `GetConfigSetting` | SAIF.Data.Guidewire (`FinancialDataApiClient`) | Project Reference | Financial transaction API base URL, used via `IFinancialDataApiClient` in `BillQueryService`, `EbillingService`, `FinancialTransactionService`, `BillPaymentService`, `SubpoenaPaymentService` |
| `cc.workerdata.api.url.v1` | `GetConfigSetting` | SAIF.Data.Guidewire (`WorkerDataApiClient`) | Project Reference | Worker data API base URL, used via `IWorkerDataApiClient` in `CollectionsService`, `SoilService`, `FraudInvestigationService` |
| `ab.providerdata.api.url.v1` | `GetConfigSetting` | SAIF.Data.Guidewire (`ProviderDataApiClient`) | Project Reference | Provider data API base URL, used via `IProviderDataApiClient` in `AddressVerificationService` |
| `cc.gwcreds` | `GetSecureConfigSetting` | SAIF.Data.Guidewire (`HttpClientBase`) | Project Reference | Guidewire API credentials (secure), shared by claim/activity/financial/worker clients above |
| `cc.providerdataapi.gwcreds` | `GetSecureConfigSetting` | SAIF.Data.Guidewire (`HttpClientBase`) | Project Reference | Provider-data API credentials (secure), used via `IProviderDataApiClient` in `AddressVerificationService` |
| `googlemaps.apibaseuri` | `GetConfigSetting` | SAIF.Services.Web.Proxies (`GoogleMapsApiServiceProxy`) | Project Reference | Google Maps API base URI, used in `SubpoenaService` |
| `googlemaps.apikey` | `GetConfigSetting` (plain-text — API key is credential-bearing) | SAIF.Services.Web.Proxies (`GoogleMapsApiServiceProxy`) | Project Reference | Google Maps API key, used in `SubpoenaService` |
| `SimpleCertifiedMailService.Url` | `GetConfigSetting` | SAIF.Services.Web.Proxies (`SimpleCertifiedMailServiceProxy`) | Project Reference | Certified mail service base URL, used in `DocumentDeferredService`, `SubpoenaLabelService` |
| `SimpleCertifiedMailService.UserName`, `.Password`, `.ClientCode`, `.PartnerKey` | `GetConfigSetting` (plain-text — credentials read through the non-secure method) | SAIF.Services.Web.Proxies (`SimpleCertifiedMailServiceProxy`) | Project Reference | Certified mail service credentials, used only when the request DTO leaves the field null |

The Google Maps API key and the Simple Certified Mail password are credential-bearing values read with `GetConfigSetting` rather than `GetSecureConfigSetting`; this is a security-relevant finding attributable to the `SAIF.Services.Web.Proxies` library, not to SAIF.Services itself. The consumer file lists above were derived by a text search for the dependency interface names in compiled SAIF.Services files*.

## Configuration dependencies

| Dependency | Type | Required at | Impact if missing |
| --- | --- | --- | --- |
| `IEnvironmentService` | Constructor-injected service | Startup (constructor) / Request | Constructor throws or later calls fail if not registered by the host |
| `docListEnvironmentServiceKey` caller input | Method parameter | Request | `McoImageExporter` export methods fail if the caller does not supply a valid key name |
| `developerEmails` constructor string | Constructor parameter | Startup (constructor) | `BillPaymentService`/`SubpoenaPaymentService` construction fails if the host does not supply a value |
| `applicationSettings/SAIF.Services.Properties.Settings` (host `Web.config`) | Optional config section | Startup (proxy construction) | Falls back to the compiled default CleanAddress URL if absent* |

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Operations and processes](operations-processes.md)
- [Business rules](business-rules.md)
- [Security and authorization](security-authorization.md)
- [Database tables](database-tables.md)
- [SQL catalog](sql/index.md)
- [API reference](api/index.md)

## Sources
- `Services/SAIF.Services/app.config`
- `Services/SAIF.Services/Properties/Settings.Designer.cs`
- `Services/SAIF.Services/Properties/Settings.settings`
- `Services/SAIF.Services.WebApi/EnvironmentApi/App_Data/environments.xml`
- `Services/SAIF.Services.WebApi/EnvironmentApi/Classes/EnvironmentSettings.cs`
- `Services/SAIF.Services/Claims/Information/MissingTimeLossService.cs`
- `Services/SAIF.Services/Claims/Tasks/ClaimTaskGenerationService.cs`
- `Services/SAIF.Services/Claims/Tasks/TaskService.cs`
- `Services/SAIF.Services/Legal/Tasks/LegalTaskService.cs`
- `Services/SAIF.Services/Imaging/AutoImportHelperService.cs`
- `Services/SAIF.Services/Imaging/McoImageExporter.cs`
- `Services/SAIF.Services/Documents/DocumentDeferredService.cs`
- `Services/SAIF.Services/Documents/TemplateSearchService.cs`
- `Services/SAIF.Services/Legal/Subpoenas/`
- `Services/SAIF.Services/Legal/Bills/BillPaymentService.cs`
- `Services/SAIF.Services/Utilities/Pdf/PdfTrackingService.cs`
- `Services/SAIF.Services/Claims/PharmacyElilgbility/PharmacyEligibilityService.cs`
- `Data/SAIF.Data/Queries/Claims/CCClaimApiService.cs`
- `Data/SAIF.Data/Clients/MedicalBillingApiService.cs`
- `Data/SAIF.Data.Guidewire/Clients/`
- `Services/SAIF.Services.Web.Proxies/GoogleMapsApiServiceProxy.cs`
- `Services/SAIF.Services.Web.Proxies/SimpleCertifiedMailServiceProxy.cs`
