mirror of
https://github.com/morluto/rea.git
synced 2026-11-07 05:56:19 -10:00
refactor(reconstruction): share canonical original cases across evaluation
This commit is contained in:
1 parent
1173c0a9dc
commit
60daca427d
2 files changed
+16
-18
No files matched your search
@@ -181,6 +181,7 @@ const evaluateObligation = (
|
||||
): ReconstructionObligation => {
|
||||
const bindings = context.bindings.get(candidate.obligation_id) ?? [];
|
||||
const binding = bindings.length === 1 ? (bindings[0] ?? null) : null;
|
||||
const originalCases = originalCasesFor(candidate, binding);
|
||||
const diagnostics: Diagnostic[] = [];
|
||||
if (candidate.definitionCount > 1)
|
||||
addDiagnostic(
|
||||
@@ -203,9 +204,9 @@ const evaluateObligation = (
|
||||
if (binding !== null)
|
||||
evaluateBinding(candidate, binding, context, diagnostics);
|
||||
diagnostics.push(
|
||||
...originalCaseDiagnostics(candidate, binding, context.evidence),
|
||||
...originalCaseDiagnostics(candidate, originalCases, context.evidence),
|
||||
);
|
||||
evaluateAuthority(candidate, binding, context, diagnostics);
|
||||
evaluateAuthority(candidate, originalCases, context, diagnostics);
|
||||
evaluateDisposition(candidate, diagnostics);
|
||||
diagnostics.push(
|
||||
...contradictionDiagnostics(
|
||||
@@ -232,7 +233,7 @@ const evaluateObligation = (
|
||||
target: candidate.target,
|
||||
authority_references: candidate.authority_references,
|
||||
source_state: candidate.source_state,
|
||||
observed_cases: originalCasesFor(candidate, binding),
|
||||
observed_cases: originalCases,
|
||||
required: candidate.required,
|
||||
required_case_kinds: candidate.required_case_kinds,
|
||||
required_original_authority: candidate.required_original_authority,
|
||||
@@ -407,7 +408,7 @@ const evaluateVerifier = (
|
||||
|
||||
const evaluateAuthority = (
|
||||
candidate: ReconstructionObligationCandidate,
|
||||
binding: Binding | null,
|
||||
originalCases: ReconstructionObligation["observed_cases"],
|
||||
context: EvaluationContext,
|
||||
diagnostics: Diagnostic[],
|
||||
): void => {
|
||||
@@ -426,18 +427,16 @@ const evaluateAuthority = (
|
||||
);
|
||||
},
|
||||
);
|
||||
const caseSatisfied = originalCasesFor(candidate, binding).some(
|
||||
({ evidence_id: evidenceId }) => {
|
||||
const evidence = context.evidence.get(evidenceId);
|
||||
return (
|
||||
evidence !== undefined &&
|
||||
evidenceSupportsOriginalAuthority(
|
||||
evidence,
|
||||
candidate.required_original_authority,
|
||||
)
|
||||
);
|
||||
},
|
||||
);
|
||||
const caseSatisfied = originalCases.some(({ evidence_id: evidenceId }) => {
|
||||
const evidence = context.evidence.get(evidenceId);
|
||||
return (
|
||||
evidence !== undefined &&
|
||||
evidenceSupportsOriginalAuthority(
|
||||
evidence,
|
||||
candidate.required_original_authority,
|
||||
)
|
||||
);
|
||||
});
|
||||
const satisfied = referenceSatisfied || caseSatisfied;
|
||||
if (!satisfied)
|
||||
addDiagnostic(
|
||||
|
||||
@@ -31,11 +31,10 @@ export const originalCasesFor = (
|
||||
/** Report original cases that are absent or lack comparable Evidence authority. */
|
||||
export const originalCaseDiagnostics = (
|
||||
candidate: ReconstructionObligationCandidate,
|
||||
binding: Binding | null,
|
||||
originalCases: ReconstructionObligation["observed_cases"],
|
||||
evidenceById: ReadonlyMap<string, Evidence>,
|
||||
): Diagnostic[] => {
|
||||
const diagnostics: Diagnostic[] = [];
|
||||
const originalCases = originalCasesFor(candidate, binding);
|
||||
// Retain optional case rows, but never leave one of their Evidence links
|
||||
// unresolved merely because its kind is not required for closure.
|
||||
for (const { kind, evidence_id: evidenceId } of originalCases)
|
||||
|
||||
Reference in new issue
Block a user