---
title: ClaimIntake
summary: Operations exposed by the ClaimIntake WCF service class for claim submission, intake status, and review flagging.
status: draft
owner: Claims Systems Team
last_reviewed: 2026-09-10
---

# ClaimIntake

`ClaimIntake` is the WCF service class that lets SAIF's internal applications submit a first report of injury, read the intake status of a submitted claim, and flag a submitted claim for manual review. It is called by the claims portal and by the `SAIF.Claims.Intake.Client` proxy package.

| Field | Value |
| --- | --- |
| **Service class** | `ClaimIntake` |
| **Declared contract** | `IClaimIntake` - In repository (`src/SAIF.Claims.Intake.Service/IClaimIntake.cs`) |
| **Route** | `ClaimIntake.svc` |
| **Source** | `src/SAIF.Claims.Intake.Service/ClaimIntake.svc.cs` |
| **Service attributes** | `[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]`, `[LogErrorBehavior]` |
| **Instancing / concurrency** | `InstanceContextMode.PerCall` / `ConcurrencyMode.Single` |
| **Binding** | `basicHttpBinding` (`ClaimIntakeBasic`) |
| **Class-level authorization** | None in code |
| **Error handling** | `ClaimIntakeErrorHandler` installed by `[LogErrorBehavior]` - see [Faults and error pipeline](../faults.md) |
| **Operations** | 3 |
| **Also hosted in** | - |

---

## SubmitClaim

Records a first report of injury and returns a receipt carrying the assigned claim number.

| Field | Value |
| --- | --- |
| **Operation name** | `SubmitClaim` |
| **Contract name** | `SubmitClaim` |
| **SOAP action** | `http://services.saif.example/claims/intake/v1/ClaimIntake/SubmitClaim` |
| **Implementing member** | `ClaimIntake.SubmitClaim` (`src/SAIF.Claims.Intake.Service/ClaimIntake.svc.cs:44`) |
| **Pattern** | Request/response |
| **Binding** | `basicHttpBinding` (`ClaimIntakeBasic`) |
| **Authorization** | `SAIF\ClaimsIntakeSubmitters` role |
| **Process** | OP-001 |

### Input message

| Part | Type | Required | Default | Purpose |
| --- | --- | --- | --- | --- |
| `submission` | `ClaimSubmission` | Yes | - | The first report of injury being submitted |

#### Complex input types

| Type | Kind | Members | Declared in |
| --- | --- | --- | --- |
| `ClaimSubmission` | Data contract | `BodyPartCode`, `ClaimantContact`, `ClaimantFirstName`, `ClaimantLastName`, `EmployerPolicyNumber`, `InjuryDate`, `InjuryDescription` | `src/SAIF.Claims.Intake.Service/DataContracts/ClaimSubmission.cs` |
| `ClaimantContact` | Data contract | `Email`, `Phone` | `src/SAIF.Claims.Intake.Service/DataContracts/ClaimantContact.cs` |

### Output message

| Field | Value |
| --- | --- |
| **Return type** | `ClaimReceipt` |
| **Meaning** | Confirmation that intake accepted the report, carrying the assigned claim number |
| **Empty-result behavior** | Never empty: on success the receipt is always populated, and on failure the operation throws instead of returning null |

| Member | Type | Nullable | Purpose |
| --- | --- | --- | --- |
| `ClaimNumber` | `string` | No | The claim number assigned by intake, or the existing number when the submission is a duplicate |
| `IsDuplicate` | `bool` | No | True when an earlier submission matched and no new record was written (BR-CLM-003) |
| `ReceivedUtc` | `DateTime` | No | When intake accepted the original submission |
| `Status` | `string` | No | The intake status at the time of the call, always `Received` on a first submission |

### Faults

| Fault | Declared | Raised when | Surfaced as | Detail crosses the boundary |
| --- | --- | --- | --- | --- |
| `ClaimValidationFault` | `[FaultContract(typeof(ClaimValidationFault))]` | The injury date is in the future (BR-CLM-001) or the employer policy is not active on the injury date (BR-CLM-002) | Typed SOAP fault | Yes |
| `OracleException` | Not declared | The `PKG_CLAIM_INTAKE.INSERT_CLAIM` call fails | Generic SOAP fault produced by WCF through the error pipeline | No |

### Authorization

`SubmitClaim` carries `[PrincipalPermission(SecurityAction.Demand, Role = @"SAIF\ClaimsIntakeSubmitters")]`, so a caller outside that Windows group is rejected before the method body runs. See the Submitter role requirement section of Authentication and authorization.

### Side effects

| Aspect | Finding |
| --- | --- |
| Records written | `CLM.CLAIM_INTAKE` (data model) |
| Downstream calls | `PKG_CLAIM_INTAKE.INSERT_CLAIM` (Oracle stored procedure) |
| Files or messages produced | None |
| Shared state touched | None |
| Repeat-call behavior | A second submission with the same policy number, claimant name, and injury date within 24 hours returns the original receipt with `IsDuplicate` set to true and writes no second record (BR-CLM-003) |

### Example message

```xml
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <SubmitClaim xmlns="http://services.saif.example/claims/intake/v1">
      <submission xmlns:d="http://schemas.datacontract.org/2004/07/SAIF.Claims.Intake.Service.DataContracts">
        <d:BodyPartCode>HND</d:BodyPartCode>
        <d:ClaimantContact>
          <d:Email>alex.rivera@example.com</d:Email>
          <d:Phone>503-555-0142</d:Phone>
        </d:ClaimantContact>
        <d:ClaimantFirstName>Alex</d:ClaimantFirstName>
        <d:ClaimantLastName>Rivera</d:ClaimantLastName>
        <d:EmployerPolicyNumber>PL-0048213</d:EmployerPolicyNumber>
        <d:InjuryDate>2026-09-03T00:00:00</d:InjuryDate>
        <d:InjuryDescription>Laceration to left hand while clearing a jammed conveyor.</d:InjuryDescription>
      </submission>
    </SubmitClaim>
  </soap:Body>
</soap:Envelope>
```

```xml
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <SubmitClaimResponse xmlns="http://services.saif.example/claims/intake/v1">
      <SubmitClaimResult xmlns:d="http://schemas.datacontract.org/2004/07/SAIF.Claims.Intake.Service.DataContracts">
        <d:ClaimNumber>2026-0041872</d:ClaimNumber>
        <d:IsDuplicate>false</d:IsDuplicate>
        <d:ReceivedUtc>2026-09-10T16:42:08Z</d:ReceivedUtc>
        <d:Status>Received</d:Status>
      </SubmitClaimResult>
    </SubmitClaimResponse>
  </soap:Body>
</soap:Envelope>
```

---

## GetClaimStatus

Returns the current intake status of a previously submitted claim.

| Field | Value |
| --- | --- |
| **Operation name** | `GetClaimStatus` |
| **Contract name** | `GetClaimStatus` |
| **SOAP action** | `http://services.saif.example/claims/intake/v1/ClaimIntake/GetClaimStatus` |
| **Implementing member** | `ClaimIntake.GetClaimStatus` (`src/SAIF.Claims.Intake.Service/ClaimIntake.svc.cs:88`) |
| **Pattern** | Request/response |
| **Binding** | `basicHttpBinding` (`ClaimIntakeBasic`) |
| **Authorization** | None in code |
| **Process** | - |

### Input message

| Part | Type | Required | Default | Purpose |
| --- | --- | --- | --- | --- |
| `claimNumber` | `string` | Yes | - | The claim number returned by `SubmitClaim` |

### Output message

| Field | Value |
| --- | --- |
| **Return type** | `ClaimStatusResult` |
| **Meaning** | The intake status recorded for the claim and when it last changed |
| **Empty-result behavior** | Returns null when no claim matches the claim number, and also when the lookup fails (see Swallowed failures in [Faults and error pipeline](../faults.md)) |

| Member | Type | Nullable | Purpose |
| --- | --- | --- | --- |
| `ClaimNumber` | `string` | No | The claim number that was requested |
| `LastUpdatedUtc` | `DateTime` | No | When the status last changed |
| `Status` | `string` | No | One of `Received`, `InReview`, `Accepted`, or `Denied` |
| `StatusReason` | `string` | Yes | Free-text reason recorded with the status, absent when none was entered |

### Faults

| Fault | Declared | Raised when | Surfaced as | Detail crosses the boundary |
| --- | --- | --- | --- | --- |
| `Exception` | Not declared | Any failure inside the method, including a database error | Not surfaced - the exception is caught and the operation returns null | No |

No fault contract is declared for this operation. See [Faults and error pipeline](../faults.md) for what the caller actually receives.

### Authorization

None in code. The `ClaimIntakeBasic` binding requires Windows transport authentication, so the caller is identified, but no role or permission check is made inside the method. See Authentication and authorization.

### Side effects

| Aspect | Finding |
| --- | --- |
| Records written | None |
| Downstream calls | `PKG_CLAIM_INTAKE.GET_STATUS` (Oracle stored procedure) |
| Files or messages produced | None |
| Shared state touched | None |
| Repeat-call behavior | Returns the current status each time; no state changes |

### Example message

```xml
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetClaimStatus xmlns="http://services.saif.example/claims/intake/v1">
      <claimNumber>2026-0041872</claimNumber>
    </GetClaimStatus>
  </soap:Body>
</soap:Envelope>
```

```xml
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetClaimStatusResponse xmlns="http://services.saif.example/claims/intake/v1">
      <GetClaimStatusResult xmlns:d="http://schemas.datacontract.org/2004/07/SAIF.Claims.Intake.Service.DataContracts">
        <d:ClaimNumber>2026-0041872</d:ClaimNumber>
        <d:LastUpdatedUtc>2026-09-10T16:42:08Z</d:LastUpdatedUtc>
        <d:Status>Received</d:Status>
        <d:StatusReason i:nil="true" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" />
      </GetClaimStatusResult>
    </GetClaimStatusResponse>
  </soap:Body>
</soap:Envelope>
```

---

## FlagClaimForReview

Marks a submitted claim for manual review and records the reason, without returning anything to the caller.

| Field | Value |
| --- | --- |
| **Operation name** | `FlagClaimForReview` |
| **Contract name** | `FlagClaimForReview` |
| **SOAP action** | `http://services.saif.example/claims/intake/v1/ClaimIntake/FlagClaimForReview` |
| **Implementing member** | `ClaimIntake.FlagClaimForReview` (`src/SAIF.Claims.Intake.Service/ClaimIntake.svc.cs:121`) |
| **Pattern** | One-way (`IsOneWay = true`) |
| **Binding** | `basicHttpBinding` (`ClaimIntakeBasic`) |
| **Authorization** | `SAIF\ClaimsIntakeSubmitters` role |
| **Process** | OP-002 |

### Input message

| Part | Type | Required | Default | Purpose |
| --- | --- | --- | --- | --- |
| `claimNumber` | `string` | Yes | - | The claim to flag |
| `reason` | `string` | Yes | - | Why the claim needs manual review; an empty value is rejected (BR-CLM-004) |

### Output message

| Field | Value |
| --- | --- |
| **Return type** | void |
| **Meaning** | A successful send means only that the request was accepted for processing; the caller cannot learn whether the flag was recorded |
| **Empty-result behavior** | Not applicable - a one-way operation returns no message |

### Faults

| Fault | Declared | Raised when | Surfaced as | Detail crosses the boundary |
| --- | --- | --- | --- | --- |
| `OracleException` | Not declared | The `PKG_CLAIM_INTAKE.ADD_REVIEW_FLAG` call fails | Not surfaced - a one-way operation returns no message, so the failure is only logged by the error pipeline | No |

No fault contract is declared for this operation. See [Faults and error pipeline](../faults.md) for what the caller actually receives.

### Authorization

`FlagClaimForReview` carries `[PrincipalPermission(SecurityAction.Demand, Role = @"SAIF\ClaimsIntakeSubmitters")]`, the same requirement as `SubmitClaim`. See the Submitter role requirement section of Authentication and authorization.

### Side effects

| Aspect | Finding |
| --- | --- |
| Records written | `CLM.CLAIM_INTAKE_NOTE` (data model) |
| Downstream calls | `PKG_CLAIM_INTAKE.ADD_REVIEW_FLAG` (Oracle stored procedure) |
| Files or messages produced | None |
| Shared state touched | None |
| Repeat-call behavior | Each call inserts another note row; duplicate flags are not detected |

### Example message

```xml
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <FlagClaimForReview xmlns="http://services.saif.example/claims/intake/v1">
      <claimNumber>2026-0041872</claimNumber>
      <reason>Injury description conflicts with the employer's report.</reason>
    </FlagClaimForReview>
  </soap:Body>
</soap:Envelope>
```

This operation is one-way, so there is no response envelope.

---

## Coverage checklist

| Public member | Documented section | Pattern |
| --- | --- | --- |
| `ClaimReceipt SubmitClaim(ClaimSubmission submission)` | [`SubmitClaim`](#submitclaim) | Request/response |
| `ClaimStatusResult GetClaimStatus(string claimNumber)` | [`GetClaimStatus`](#getclaimstatus) | Request/response |
| `void FlagClaimForReview(string claimNumber, string reason)` | [`FlagClaimForReview`](#flagclaimforreview) | One-way |
| `ClaimIntake()` | Not an operation - parameterless constructor, not declared on `IClaimIntake` | - |

## Related documentation
- [Index](../index.md)
- Overview
- Architecture
- Activation and hosting
- Operations
- [Faults and error pipeline](../faults.md)
- Authentication and authorization
- Dependencies
- Configuration
- Operations and processes
- Business rules
- Data model
- Operational runbook
- Tech debt

## Sources
- `src/SAIF.Claims.Intake.Service/ClaimIntake.svc.cs`
- `src/SAIF.Claims.Intake.Service/IClaimIntake.cs`
- `src/SAIF.Claims.Intake.Service/DataContracts/ClaimSubmission.cs`
- `src/SAIF.Claims.Intake.Service/DataContracts/ClaimantContact.cs`
- `src/SAIF.Claims.Intake.Service/DataContracts/ClaimReceipt.cs`
- `src/SAIF.Claims.Intake.Service/DataContracts/ClaimStatusResult.cs`
- `src/SAIF.Claims.Intake.Service/DataContracts/ClaimValidationFault.cs`
- `src/SAIF.Claims.Intake.Service/Web.config`
