---
title: WorkCalendar overview
summary: Which service this proxy calls, who consumes it, and what it is used for.
status: draft
owner: SAIF.Core documentation
last_reviewed: 2026-09-24
---

# WorkCalendar overview

`WorkCalendar` calls the SAIF-internal ASMX service `SAIFDates`† to answer work-day calendar questions (is a date a working day, the next work day, the first or last work day of a month), through the authored `WorkCalendarServiceProxy` wrapper, which passes through all four contract operations but has no caller anywhere in this repository.

## Purpose
- Answer work-day calendar questions — `IsWorkingDay`, `NextWorkDay`, `FirstWorkDayOfMonth`, `LastWorkDayOfMonth` — for a given date and named calendar, by delegating to the remote `SAIFDates` service.

## Business context

The called service provides calendar logic (holidays, weekends, and named-calendar variations) that this repository's date calculations could depend on. A separate, external `IWorkCalendarService`/`WorkCalendarService` abstraction — not defined in this repository — is what business code (exercised through `Tests/SAIF.Services.Tests/SaifWorkCalendarTests.cs` and registered in `DependencyMaps/SAIF.DependencyMaps.Web.FrameworkTest/DependencyMap.cs:61-62`) actually depends on for this logic; whether that abstraction calls `SAIFDates` through this proxy or through its own mechanism is unknown**.

| Attribute | Value |
| --- | --- |
| Business capability | Work-day calendar lookups (working-day check, next/first/last work day) |
| Owning team of the called service | Not determined from source |
| Criticality to the consumer | Not determined from source — this proxy has no in-repository caller |
| Fallback when unavailable | None — the calling operation would fail (no call site exists to observe this in-repo) |

## Consumers

| Consumer | Call site | Operations used | Notes |
| --- | --- | --- | --- |
| *(none in this repository)* | — | — | No repository source constructs `WorkCalendarServiceProxy`. The wrapper's own calls to all four operations exist in `Services/SAIF.Services.Web.Proxies/WorkCalendarServiceProxy.cs:25,30,36,42`, but nothing invokes the wrapper's public methods, so the integration is not reached end-to-end in this repository. |

Consumers of the shipped `SAIF.Services.Web.Proxies` NuGet package outside this repository may call `WorkCalendarServiceProxy` directly*; that possibility cannot be confirmed from this repository's source.

## Capability summary

| Capability | Operations | Description |
| --- | --- | --- |
| Working-day check | [`IsWorkingDay`](reference.md#isworkingday) | Returns whether a given date is a working day on a named calendar |
| Next work day | [`NextWorkDay`](reference.md#nextworkday) | Returns the next working day after a given date on a named calendar |
| First work day of month | [`FirstWorkDayOfMonth`](reference.md#firstworkdayofmonth) | Returns the first working day of the month containing a given date |
| Last work day of month | [`LastWorkDayOfMonth`](reference.md#lastworkdayofmonth) | Returns the last working day of the month containing a given date |

## Generation provenance

| Aspect | Finding |
| --- | --- |
| Generated by | `svcutil` (Service Reference) |
| Generated from | `Services/SAIF.Services.Web.Proxies/Service References/WorkCalendar/saifdates.wsdl` |
| Discovery document | `Services/SAIF.Services.Web.Proxies/Service References/WorkCalendar/saifdates.disco` |
| Generated namespace | `SAIF.Services.Web.Proxies.WorkCalendar` |
| Namespace matches the consuming project | Yes — rooted in `SAIF.Services.Web.Proxies`, the project that carries the file |
| Regeneration risk | Refreshing the reference would regenerate `Reference.cs`/`Reference.svcmap`/`configuration*.svcinfo`; the hand-written wrapper `WorkCalendarServiceProxy.cs` is a separate file and is not overwritten by a refresh |

## Non-documented artifacts

- `Reference.cs`, its serialization attributes, and any `…Async`/`…Completed` event scaffolding are svcutil tool output and are not narrated in this document set; the contract is documented from `saifdates.wsdl` and the wrapper's call sites instead.

## Related documentation
- [Client index](index.md)
- [Architecture](architecture.md)
- [Contract](contract.md)
- [Operation map](operation-map.md)
- [Client reference](reference.md)
- [Consumption](consumption.md)
- [Dependencies](dependencies.md)
- [Tech debt](tech-debt.md)

> **Note:** Statements marked with `†` are derived from dependency library
> documentation via the Legends CLI. Statements marked with `*` were inferred
> from code structure or contextual evidence. Statements marked with `**` could
> not be confirmed; treat as unknown until verified.

## Sources
- `Services/SAIF.Services.Web.Proxies/WorkCalendarServiceProxy.cs`
- `Services/SAIF.Services.Web.Proxies/Service References/WorkCalendar/Reference.cs`
- `Services/SAIF.Services.Web.Proxies/Service References/WorkCalendar/Reference.svcmap`
- `Services/SAIF.Services.Web.Proxies/Service References/WorkCalendar/saifdates.wsdl`
- `DependencyMaps/SAIF.DependencyMaps.Web.FrameworkTest/DependencyMap.cs`
- `Tests/SAIF.Services.Tests/SaifWorkCalendarTests.cs`
