fintech-algorithms
Using a coding agent? Give it the skill: npx skills add IslamBaraka90/Fintech-Algorithms-Library What it does →

Data Provenance, Lineage, Ownership, and Licensing

Install and import#

bash
npm install fintech-algorithms
ts
import { dataProvenanceLineageOwnershipAndLicensing } from "fintech-algorithms/foundations/data-variables-samples-and-measurement/data-provenance-lineage-ownership-and-licensing";

Signature#

dataProvenanceLineageOwnershipAndLicensing(input)

Checks a dataset's provenance record against the five fields the engine treats as mandatory and reports which of them are absent.

Parameters#

NameTypeNotes
inputD00InputA plain object. Every F03 topic first reads rows, which must be a non-empty array of row objects, and derives the sorted union of every key seen across them before any per-topic branch runs, even though this topic does not use them. The calculation itself reads provenance, an optional record that defaults to empty and is checked for source, owner, license, retrievedAt and transformations.

Returns#

{ complete: boolean; missingFields: string[]; lineageSteps: number }

missingFields lists whichever of the five required fields is absent or falsy, and complete is true only when that list is empty. lineageSteps is the length of provenance.transformations, or 0 when it is absent.

Errors#

  • When input is not a plain object — throws TypeError
  • When rows is missing, empty, or not an array — throws RangeError

Complexity: time O(r * c), space O(r * c).

Worked example#

verified This is the worked example published in the article, replayed by the test suite on every run. The output cannot drift.

Input#

input
{
  "rows": [
    {
      "entity": "A",
      "timestamp": "2025-01-01T00:00:00Z",
      "value": 10,
      "rating": "low"
    },
    {
      "entity": "A",
      "timestamp": "2025-01-02T00:00:00Z",
      "value": null,
      "rating": "medium",
      "censored": true
    },
    {
      "entity": "B",
      "timestamp": "2025-01-01T00:00:00Z",
      "value": 12,
      "rating": "high"
    }
  ],
  "ordinalColumns": ["rating"],
  "populationSize": 100,
  "frameSize": 80,
  "keyColumns": ["entity", "timestamp"],
  "truncationRule": "values below 5 excluded",
  "measurements": [9.9, 10, 10.1, 10],
  "referenceValue": 10,
  "vintages": [
    {
      "availableAt": "2025-02-01T00:00:00Z",
      "value": 100
    },
    {
      "availableAt": "2025-03-01T00:00:00Z",
      "value": 102
    },
    {
      "availableAt": "2025-04-01T00:00:00Z",
      "value": 101
    }
  ],
  "asOf": "2025-03-15T00:00:00Z",
  "provenance": {
    "source": "teaching.csv",
    "owner": "Fintech Builder",
    "license": "CC-BY-4.0",
    "retrievedAt": "2026-08-10",
    "transformations": ["parse", "validate"]
  }
}

Call#

dataProvenanceLineageOwnershipAndLicensing(input)

Returns#

object with 2 fields: complete, missingFields

{
  "complete": true,
  "missingFields": []
}

Diagrams#

Data Provenance, Lineage, Ownership, and Licensing — article hero
Data Provenance, Lineage, Ownership, and Licensing — concept anatomy
Data Provenance, Lineage, Ownership, and Licensing — mistake contrast
Data Provenance, Lineage, Ownership, and Licensing — teaching map

How it works#

This page states the contract — how to call it correctly. The article explains the concept: why it works, and where it breaks.

Read the article →

References#

  • 1. W3C PROV-O: The PROV Ontology
  • 2. W3C Data on the Web Best Practices
  • Evidence boundary

The rest of the Data, Variables, Samples, and Measurement family#