---
title: SAIF.NetCore.Common operations and processes
summary: Business and technical operations supported by this library.
status: draft
owner: Framework.NCore maintainers
last_reviewed: 2026-10-02
library: SAIF.NetCore.Common
reference_type: package
---

# SAIF.NetCore.Common operations and processes

This page is the operation catalog and cross-operation hub for this library. `SAIF.NetCore.Common` has no business workflows, endpoints, or entry points of its own; its "operations" are reusable utility capabilities that consumers call directly. Each operation's detailed, step-by-step logic lives in its own page under `operations/`.

## Operation catalog
| Operation | Intent | Trigger | Inputs | Outputs | Rules | Tables | SQL |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [Title-case a string](operations/title-case-a-string.md) | Normalize free-text input into title case while preserving organization abbreviations, Roman numerals, US state/direction codes, and listed lowercase articles/prepositions. | A consumer calls `StringExtensions.ToTitleCase(value)`. | `value` (string) | The title-cased string, or the original value unchanged for null/empty input. | [BR-019](business-rules.md#br-019-title-casing-preserves-a-fixed-set-of-organization-abbreviations-roman-numerals-and-lowercase-words) | — | — |
| [Evaluate date-range overlap and validity](operations/evaluate-date-range-overlap-and-validity.md) | Determine whether `DateRange` values are individually valid, overlap pairwise or across an ordered sequence, form a contiguous sequence, or contain/are matched by a given date. | A consumer calls `DateRangeExtensions.IsOverlapping`, `IsValidRange`/`IsOpenEnded`/`IsFutureRange`/`IsPastRange`, `IsContiguous`, `IsOverLapping` (sequence form), `IsInRange`, `AsOf<T>`, `ContainsDateRange`, or `ContainsBeginDate`. | `range1`/`range2` (`DateRange`) or an `IEnumerable<DateRange>`/`IEnumerable<T>`, plus policy/date arguments as applicable | A `bool` for most members; `IEnumerable<T>` for `AsOf<T>`. | [BR-012](business-rules.md#br-012-a-date-range-is-valid-only-when-begin-does-not-exceed-end), [BR-013](business-rules.md#br-013-overlapping-ranges-require-both-ranges-valid-and-respect-the-same-date-overlap-flag), [BR-014](business-rules.md#br-014-contiguous-range-evaluation-has-three-selectable-policies-and-a-short-circuit-for-fewer-than-two-ranges), [BR-015](business-rules.md#br-015-in-range-tests-default-to-include-begin-exclude-end), [BR-016](business-rules.md#br-016-daterange-equality-is-defined-by-equal-begin-and-end-dates) | — | — |
| [Classify nullable date-range overlap state](operations/classify-nullable-date-range-overlap-state.md) | Classify the relationship between two open-ended-capable date ranges into one of ten specific overlap categories. | A consumer calls `NullableDateRange.GetOverlapState(rangeA, rangeB)`. | `rangeA`, `rangeB` (`NullableDateRange`, each with a required `StartDate` and nullable `EndDate`) | A `DateRangeOverlapResult` enum value. | — | — | — |
| [Validate and convert Julian dates](operations/validate-and-convert-julian-dates.md) | Validate a Julian-format date string or integer and convert it to a `DateTime`, or convert a `DateTime` into Julian format. | A consumer calls `Julian.IsValid`, `Julian.GetYear`, `Julian.ToDate`, or the `DateTime.ToJulian()` extension method. | `julian` (string or int), optional `millenium` (int), `yearLength` (int, for `ToJulian`) | `IsValid` returns `bool` with an out message; `ToDate` returns `DateTime`; `ToJulian` returns `string`. | [BR-017](business-rules.md#br-017-a-julian-value-requires-at-least-four-digits-and-a-day-of-year-within-the-valid-range) | — | — |
| [Build EDI-style date strings](operations/build-edi-style-date-strings.md) | Parse EDI-format date/time strings into a `DateTime`, split a delimited date-range string, or render a date (or date range) back into EDI-style text. | A consumer calls `DateMaker.MakeDateTime`, `.ExtractDateRange`, or `.EdiFileDateString`. | `date` (string, `yyyyMMdd` or `yyMMdd`), optional `time` (string, default `"000000"`); or `value` (string, `-`-delimited); or `start`/`end` (`DateTime`/`DateTime?`) | A `DateTime` (`MakeDateTime`), two `out DateTime` values (`ExtractDateRange`), or a formatted string (`EdiFileDateString`). | [BR-018](business-rules.md#br-018-two-digit-edi-years-resolve-to-the-2000s-and-a-missing-time-means-midnight) | — | — |
| [Format exception chains for logging](operations/format-exception-chains-for-logging.md) | Render an exception and its full `InnerException` chain into a human-readable multi-exception report, or a compact log-and-display pair. | A consumer calls `ExceptionExtensions.GetFullFormattedException` or `.GetErrorLogFormattedException` in a catch block. | `ex` (`Exception`), optional `innerToOuter` (bool, default true) | A formatted string report. | — | — | — |
| [Enforce argument and state guard clauses](operations/enforce-argument-and-state-guard-clauses.md) | Centralize null/empty/condition validation for method arguments and object state, throwing a typed exception on failure. | A consumer or an internal library call site invokes any `Enforce.*` guard-clause member at the start of a method. | `value`/`name` (for null/empty checks), `condition` (bool or `Func<bool>`), optional `Exception` instance. | No return value on success for the four `Enforce.True` overloads; `ArgumentNotNull<T>`, `ArgumentNotNullOrEmpty`, `ArgumentNotNullOrWhiteSpace`, and `NotNull<T>` instead return the validated `T`/string value on success, enabling fluent call sites. A thrown exception on failure for every member. | [BR-001](business-rules.md#br-001-required-argument-must-not-be-null), [BR-002](business-rules.md#br-002-required-string-must-not-be-null-empty-or-white-space), [BR-003](business-rules.md#br-003-required-object-must-not-be-null-as-a-state-check), [BR-004](business-rules.md#br-004-caller-supplied-condition-must-evaluate-true), [BR-005](business-rules.md#br-005-validatednotnullattribute-is-a-marker-only) | — | — |
| [Assemble a validation result and exception](operations/assemble-a-validation-result-and-exception.md) | Collect one or more validation failures into a `ValidationResult` and optionally wrap it in a throwable `SaifValidationException`. | A consumer populates a `ValidationResult` after running validation logic, or constructs a `SaifValidationException` to report a single failure. | `PropertyName`, `ErrorMessage`, `AttemptedValue` (for `ValidationFailure`); or `propertyName`/`errorMessage` (for `SaifValidationException`) | A `ValidationResult` with populated `Errors`/`Messages`, or a `SaifValidationException` carrying a `ValidationResult`. | [BR-020](business-rules.md#br-020-a-validation-result-is-valid-only-when-it-has-no-errors) | — | — |
| [Search and strip byte-array headers](operations/search-and-strip-byte-array-headers.md) | Locate a byte or text pattern within a byte array and optionally strip bytes preceding it, for example removing junk bytes before a PDF file header. | A consumer calls `ByteExtensions.Search` or `.StripHeader` on a `byte[]`. | `bytes` (byte[]), `searchFor` (string or byte[]), optional `start` (int, default 0), `maxBytesToSearch` (int) | `Search` returns the match position or `-1`; `StripHeader` returns a (possibly trimmed) `byte[]` and an `out bool found`. | [BR-021](business-rules.md#br-021-a-header-is-stripped-only-when-found-strictly-after-position-zero) | — | — |

## Process flow diagram
The following diagram visualizes how a consumer typically selects and exercises one of this library's utility operations.

```mermaid
flowchart TD
	Start([Consumer code]) --> Pick{What is being done?}
	Pick -->|Format text| OP1["OP-01: Title-case a string"]
	Pick -->|Test/filter ranges| OP2["OP-02: Evaluate date-range<br>overlap and validity"]
	Pick -->|Classify ranges| OP3["OP-03: Classify nullable<br>date-range overlap state"]
	Pick -->|Convert Julian date| OP4["OP-04: Validate and convert<br>Julian dates"]
	Pick -->|Build EDI date| OP5["OP-05: Build EDI-style<br>date strings"]
	Pick -->|Log an error| OP6["OP-06: Format exception<br>chains for logging"]
	Pick -->|Guard an argument| OP7["OP-07: Enforce argument<br>and state guard clauses"]
	Pick -->|Report validation| OP8["OP-08: Assemble a validation<br>result and exception"]
	Pick -->|Process a byte stream| OP9["OP-09: Search and strip<br>byte-array headers"]
	OP1 --> Used([Result used by caller])
	OP2 --> Used
	OP3 --> Used
	OP4 --> Used
	OP5 --> Used
	OP6 --> Used
	OP7 --> Used
	OP8 --> Used
	OP9 --> Used
```

## Failure and edge-case behavior
- None of the operations on this page read or write a database or issue SQL; the library has zero data-access surface.
- None of the operations delegate into a referenced library, because the library has no `SAIF.NetCore.*` or third-party package dependencies.
- See each operation's own `## Failure and edge-case behavior` for its specific validation and error paths.

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Business rules](business-rules.md)
- [API reference](api/index.md)

## Sources
- `src/SAIF.NetCore.Common/SAIF.NetCore.Common/SAIF.NetCore.Common/Extensions/StringExtensions.cs`
- `src/SAIF.NetCore.Common/SAIF.NetCore.Common/SAIF.NetCore.Common/InternalUtility/TitleCase.cs`
- `src/SAIF.NetCore.Common/SAIF.NetCore.Common/SAIF.NetCore.Common/Extensions/DateRangeExtensions.cs`
- `src/SAIF.NetCore.Common/SAIF.NetCore.Common/SAIF.NetCore.Common/Types/DateRange.cs`
- `src/SAIF.NetCore.Common/SAIF.NetCore.Common/SAIF.NetCore.Common/Types/NullableDateRange.cs`
- `src/SAIF.NetCore.Common/SAIF.NetCore.Common/SAIF.NetCore.Common/Helpers/Julian.cs`
- `src/SAIF.NetCore.Common/SAIF.NetCore.Common/SAIF.NetCore.Common/Helpers/DateMaker.cs`
- `src/SAIF.NetCore.Common/SAIF.NetCore.Common/SAIF.NetCore.Common/Extensions/ExceptionExtensions.cs`
- `src/SAIF.NetCore.Common/SAIF.NetCore.Common/SAIF.NetCore.Common/Helpers/Enforce.cs`
- `src/SAIF.NetCore.Common/SAIF.NetCore.Common/SAIF.NetCore.Common/Types/ValidationResult.cs`
- `src/SAIF.NetCore.Common/SAIF.NetCore.Common/SAIF.NetCore.Common/Types/ValidationFailure.cs`
- `src/SAIF.NetCore.Common/SAIF.NetCore.Common/SAIF.NetCore.Common/Types/SaifValidationException.cs`
- `src/SAIF.NetCore.Common/SAIF.NetCore.Common/SAIF.NetCore.Common/Extensions/ByteExtensions.cs`
