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
- Overview
- Architecture
- Dependencies
- Operations and processes
- Business rules
- Security and authorization
- Database tables
- SQL catalog
- API reference
Sources¶
Services/SAIF.Services/app.configServices/SAIF.Services/Properties/Settings.Designer.csServices/SAIF.Services/Properties/Settings.settingsServices/SAIF.Services.WebApi/EnvironmentApi/App_Data/environments.xmlServices/SAIF.Services.WebApi/EnvironmentApi/Classes/EnvironmentSettings.csServices/SAIF.Services/Claims/Information/MissingTimeLossService.csServices/SAIF.Services/Claims/Tasks/ClaimTaskGenerationService.csServices/SAIF.Services/Claims/Tasks/TaskService.csServices/SAIF.Services/Legal/Tasks/LegalTaskService.csServices/SAIF.Services/Imaging/AutoImportHelperService.csServices/SAIF.Services/Imaging/McoImageExporter.csServices/SAIF.Services/Documents/DocumentDeferredService.csServices/SAIF.Services/Documents/TemplateSearchService.csServices/SAIF.Services/Legal/Subpoenas/Services/SAIF.Services/Legal/Bills/BillPaymentService.csServices/SAIF.Services/Utilities/Pdf/PdfTrackingService.csServices/SAIF.Services/Claims/PharmacyElilgbility/PharmacyEligibilityService.csData/SAIF.Data/Queries/Claims/CCClaimApiService.csData/SAIF.Data/Clients/MedicalBillingApiService.csData/SAIF.Data.Guidewire/Clients/Services/SAIF.Services.Web.Proxies/GoogleMapsApiServiceProxy.csServices/SAIF.Services.Web.Proxies/SimpleCertifiedMailServiceProxy.cs