core/factories/finding.factory.ts

core/factories/finding.factory.ts is a file in GovLab Patterns. 34 lines of code and 6 definitions.

import type { ExplanationSpec, Finding, FindingInput, Narrative } from "#types/finding.types";
import { coordinate } from "#core/factories/axis.factory";
import { mathTypeOf } from "#core/resolvers/math.resolver";

const EXPLANATION = "explanation";

export const reasonOf = function reasonOf(observation: string, explanation: string): Narrative {
    return { explanation, observation };
};

export const makeFinding = function makeFinding(input: FindingInput): Finding {
    const base: Finding = {
        coordinate: input.coordinate,
        field: input.field,
        mathType: mathTypeOf(input.coordinate.analysis),
        name: input.name,
        narrative: input.narrative,
        observation: input.observation,
        support: 0,
    };
    const withSignificance = input.significance === undefined ? base : { ...base, significance: input.significance };
    return input.prediction ? { ...withSignificance, prediction: input.prediction } : withSignificance;
};

export const explanationFinding = function explanationFinding(spec: ExplanationSpec): Finding {
    return makeFinding({
        coordinate: coordinate({
            analysis: spec.analysis,
            ontology: spec.ontology,
            reasoning: EXPLANATION,
            representation: spec.representation,
        }),
        field: spec.field,
        name: spec.name,
        narrative: reasonOf(spec.observed, spec.explained),
        observation: spec.observation,
    });
};