---
title: McoImageExporter
summary: API reference for McoImageExporter.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-09-24
library: SAIF.Services
reference_type: package
---

# McoImageExporter

Implements `IMcoImageExporter` as an abstract base for exporting claim document images (via `IImagingClient`) to disk for claims associated with a specific Medical Care Organization (MCO) plan, tracking and retrying failed exports through the `DocumentImagingError` table. It depends on `IUnitOfWork` for error-record persistence, `IEnvironmentService` for JSON-encoded document-type filter configuration, `IImagingClient` for retrieving images/PDFs, `IFileSystem` (System.IO.Abstractions) for all disk operations, and `IClaimDataApiClient` for Guidewire claim data; concrete subclasses (e.g. `MajorisImageExporter`) supply the MCO-specific active/newly-enrolled claim queries via the abstract `GetActiveMcoClaims`/`GetNewlyEnrolledMcoClaims`/`MCO_NAME` members.

## Purpose
- Exports document images for claims currently actively enrolled with the MCO, matching potential claim images against the active-claim list.
- Exports document images for claims newly enrolled with the MCO as of a given enrollment date.
- Establishes and validates a per-MCO working directory (under a caller-supplied root) before any export runs.
- Retries previously failed image exports recorded in the `DocumentImagingError` table, removing successfully retried entries and leaving unresolved ones in place.
- Translates raw imaging-API error text into a short, categorized error description for reporting.

## Context
- Namespace: `SAIF.Services.Imaging`
- Assembly/package: `SAIF.Services` (packaged inside the `SAIF.SAIFCode.Core` NuGet package)

## Public members
| Member | Signature | Purpose |
| --- | --- | --- |
| McoImageExporter(...) | `public McoImageExporter(IUnitOfWork unitOfWork, IEnvironmentService environmentService, IImagingClient imagingClient, IFileSystem fileSystem, IClaimDataApiClient claimDataApiClient)` | Wires in all collaborators (enforcing non-null unit of work, environment service, imaging client, and file system) shared by every MCO-specific exporter subclass. |
| ExportActiveEnrollmentDocuments(imageQueryParameters) | `public McoActiveEnrollmentDocumentExportResults ExportActiveEnrollmentDocuments(QueryParameters imageQueryParameters)` | Validates the working directory, retrieves active MCO claims and matching claim-document images, exports each matched image to disk (recording failures), and returns counts of active claims, potential images, and exported images plus any errors. |
| ExportActiveEnrollmentDocuments(minCreateDate, maxCreateDate, docListEnvironmentServiceKey) | `public McoActiveEnrollmentDocumentExportResults ExportActiveEnrollmentDocuments(DateTime minCreateDate, DateTime maxCreateDate, string docListEnvironmentServiceKey)` | Builds query parameters for the given create-date range, loads document-type/subtype filters from the named environment configuration setting, and delegates to the `QueryParameters` overload. |
| ExportNewEnrollmentDocuments(dateOfEnrollment, imageQueryParameters) | `public McoNewEnrollmentDocumentExportResults ExportNewEnrollmentDocuments(DateTime dateOfEnrollment, QueryParameters imageQueryParameters)` | Validates the working directory, retrieves claims newly enrolled with the MCO on `dateOfEnrollment`, exports each claim's matching document images to disk (recording failures and per-claim image counts), and returns the results. |
| ExportNewEnrollmentDocuments(dateOfEnrollment, docListEnvironmentServiceKey) | `public McoNewEnrollmentDocumentExportResults ExportNewEnrollmentDocuments(DateTime dateOfEnrollment, string docListEnvironmentServiceKey)` | Builds default query parameters, loads document-type/subtype filters from the named environment configuration setting, and delegates to the `QueryParameters` overload. |
| SetWorkingDirectory | `public void SetWorkingDirectory(string directory)` | Creates (if needed) and sets the MCO-specific working directory as `directory\<MCO_NAME>`; throws if the root `directory` does not exist or the subdirectory cannot be created. |
| ExportErrorEnrollmentDocuments | `public MajorisErrorEnrollmentResults ExportErrorEnrollmentDocuments()` | Retries every recorded `DocumentImagingError`, re-fetching and writing each image's PDF to disk; removes successfully retried errors from the table and returns lists of resolved versus still-failing errors. |
| GenerateFileName | `public string GenerateFileName(Image image, long uniqueFileId)` | Builds the export file name as `{ClaimNumber}_{DOCUMENTTYPE}_{DOCUMENTSUBTYPE}_{DocumentDate:MM-dd-yyyy}_{uniqueFileId:00000}.pdf`, defaulting the date segment to `01-01-1970` when the image has no document date. |
| TranslateError | `public string TranslateError(Image image, string errorText)` | Maps known error patterns (timeout, `NoMatchingDataException` with a zero image ID) to fixed short messages, or otherwise extracts the text between `"Exception #1 of"` and `"Source:"` (or the first 100/300 characters as fallbacks), truncated to at most 1000 characters. |

## Behavioral notes
- `ExportImagesToDirectory` continues processing remaining images when a single image's PDF retrieval fails, recording a `DocumentImagingError` (via the private `InsertErrorImage`) rather than aborting the whole export.
- `InsertErrorImage` wraps its check-and-insert of a new error record in its own `UnitOfWork.Begin()`/`Commit()` transaction and skips inserting a duplicate if a record with the same `DocHandle` already exists.
- `ValidateWorkingDirectory` throws if `SetWorkingDirectory` has not been called first, since the working directory cannot be supplied at application-registration time for console-app callers (per the in-code comment).
- Subclasses must supply `MCO_NAME` (used as the working-directory subfolder name) and the two abstract claim-query methods; this base class contains no MCO-identifying logic of its own.

## Sources
- Services/SAIF.Services/Imaging/McoImageExporter.cs
