# Unsupported-Scope and Coverage Decision

`D18-F10-A09` · Fundamental Analysis and Valuation → Sector-Specific Equity Scoring · archetype `record-transform` · difficulty 4/5 · verification **verified**

Full page: https://docs.thefintechbuilder.com/fundamental-analysis-and-valuation/sector-specific-equity-scoring/unsupported-scope-and-coverage-decision/
Agent skill: `npx skills add IslamBaraka90/Fintech-Algorithms-Library` — https://docs.thefintechbuilder.com/guides/agent-skill/

## Install and import

```bash
npm install fintech-algorithms
```

```ts
import { unsupportedScopeAndCoverageDecision } from "fintech-algorithms/fundamental-analysis-and-valuation/sector-specific-equity-scoring/unsupported-scope-and-coverage-decision";
```

## Signature

```ts
unsupportedScopeAndCoverageDecision(data)
```

Decides whether a sector model may be used at all. It refuses an unknown sector or a mismatched framework outright, and otherwise audits each required field against the as-of date, classifying it as available, missing, stale or dated in the future before comparing coverage with the declared minimum.

## Parameters

| Name | Type | Required | Notes |
| --- | --- | --- | --- |
| `data` | `RecordValue` | yes | A plain object. `framework` must be the string `coverage-router-teaching-v1`. `sector` and `candidate_framework` are nonempty strings; the routed sectors are `bank`, `insurance`, `reit`, `utility`, `early-stage`, `cyclical` and `holding-company`, each pinned to one framework and one required-field list. `as_of` is a `YYYY-MM-DD` string, `minimum_coverage` a number in (0, 1], and `max_age_days` a positive number truncated to an integer. `facts` is an array of objects, each with a unique nonempty `name` and a boolean `value_present`; a fact that is present must also carry `knowledge_date` and `period_end` as `YYYY-MM-DD` strings. |

## Returns

`{ state: string; method: string; selected_model: string | null; coverage_ratio: number; available_fields: string[]; missing_fields: string[]; stale_fields: string[]; future_fields: string[]; required_field_count?: number; reasons: string[]; reason: string }`

A required field is missing when absent or not present, lands in `future_fields` when its `knowledge_date` is after `as_of`, in `stale_fields` when `as_of` is more than `max_age_days` after its `period_end`, and in `available_fields` otherwise; `coverage_ratio` is the available share of the required list. `state` is `abstain` whenever any field is future-dated or coverage falls below `minimum_coverage`, `supported` at full coverage, and `partial-review` in between; `selected_model` carries the routed topic ID on the last two and null on abstention. `reasons` accumulates `future-evidence`, `stale-evidence`, `missing-required-fields` and `coverage-below-minimum`, defaulting to `complete-current-coverage`, and `reason` is its first element. The two early refusals return `abstain` with a zero `coverage_ratio` and a single reason of `unsupported-sector` or `framework-mismatch`, and omit `required_field_count`. `method` is `sector-coverage-router-v1`.

## Errors

- When data is not a plain object, or facts is not an array — throws TypeError
- When a fact is not an object, its name is not a nonempty string, or value_present is not a boolean — throws TypeError
- When as_of, or a knowledge_date or period_end on a present fact, is not a YYYY-MM-DD string — throws TypeError
- When framework is not coverage-router-teaching-v1 — throws RangeError
- When minimum_coverage is outside (0, 1], or max_age_days is not positive — throws RangeError
- When two facts share a name — throws RangeError

## Complexity

Time `O(n)`, space `O(n)`.

## Worked example

Captured by running this function on the input its own test provides. Real output of real code — but not asserted against a published figure.

### Input

`data`:

```json
{
  "framework": "coverage-router-teaching-v1",
  "sector": "bank",
  "candidate_framework": "basel-iii-teaching-v1",
  "as_of": "2026-04-15",
  "minimum_coverage": 0.75,
  "max_age_days": 550,
  "facts": [
    {
      "name": "cet1_ratio",
      "value_present": true,
      "knowledge_date": "2026-03-20",
      "period_end": "2025-12-31"
    },
    {
      "name": "leverage_ratio",
      "value_present": true,
      "knowledge_date": "2026-03-20",
      "period_end": "2025-12-31"
    },
    {
      "name": "lcr",
      "value_present": true,
      "knowledge_date": "2026-03-20",
      "period_end": "2025-12-31"
    }
  ]
}
```

### Call

```ts
unsupportedScopeAndCoverageDecision(data)
```

### Returns

object with 11 fields: state, method, selected_model, coverage_ratio, available_fields, missing_fields, stale_fields, future_fields, …

```json
{
  "state": "supported",
  "method": "sector-coverage-router-v1",
  "selected_model": "D18-F10-A01",
  "coverage_ratio": 1,
  "available_fields": [
    "cet1_ratio",
    "leverage_ratio",
    "lcr",
    "nsfr",
    "npl_ratio",
    "provision_coverage_ratio"
  ],
  "missing_fields": [],
  "stale_fields": [],
  "future_fields": [],
  "required_field_count": 8,
  "reasons": ["complete-current-coverage"],
  "reason": "complete-current-coverage"
}
```

## Other exports

`calculate`, `bankFundamentalScore`, `insuranceFundamentalScore`, `reitFundamentalScore`, `utilityFundamentalScore`, `earlyStageLiquidityAndRunwayScore`, `cyclicalAndCommodityCycleNormalization`, `holdingCompanyLookThroughScore`, `sectorSpecificWeightCalibration`. Every module additionally exports `run` as an alias of its primary
function, and a `meta` object carrying its catalog id, domain, family, shape and article URL.

## Verification and provenance

Tier: **verified** (via D).

The worked example below is the figure published in this algorithm's article, replayed and asserted by the test suite on every build. The arithmetic cannot drift without the build failing.

Both tiers guarantee the signature. Full explanation: https://docs.thefintechbuilder.com/guides/verification/

Generated from the docs.json payload shipped inside fintech-algorithms@0.13.0.
The signature and parameter list are checked against the compiled implementation at build time,
so a description that contradicts the code fails the build rather than reaching this file.

## Links

- Article (how it works, step by step): https://thefintechbuilder.com/fundamental-analysis-and-valuation/sector-specific-equity-scoring/unsupported-scope-and-coverage-decision/
- Implementation source: https://github.com/IslamBaraka90/Fintech-Algorithms-Library/blob/main/src/fundamental-analysis-and-valuation/sector-specific-equity-scoring/unsupported-scope-and-coverage-decision/impl.ts
- Package on npm: https://www.npmjs.com/package/fintech-algorithms
- Domain index for agents: https://docs.thefintechbuilder.com/fundamental-analysis-and-valuation/llms.txt
