Files
property-match/src/domain/signalPipeline.ts
T

126 lines
4.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ── Pipeline Stages ───────────────────────────────────────────────────────────
export const PipelineStage = {
STAGE_1_RAW_EVIDENCE: 'STAGE_1_RAW_EVIDENCE',
STAGE_2_NORMALIZED: 'STAGE_2_NORMALIZED',
STAGE_3_ENRICHED: 'STAGE_3_ENRICHED',
STAGE_4_REVIEW_CANDIDATE: 'STAGE_4_REVIEW_CANDIDATE',
STAGE_5_APPROVED_FUTURE: 'STAGE_5_APPROVED_FUTURE',
STAGE_6_MATCHABLE_RESULT: 'STAGE_6_MATCHABLE_RESULT',
STAGE_7_STRATEGIC_INPUT: 'STAGE_7_STRATEGIC_INPUT',
} as const
export type PipelineStage = typeof PipelineStage[keyof typeof PipelineStage]
export const PIPELINE_STAGE_LABELS: Record<PipelineStage, string> = {
STAGE_1_RAW_EVIDENCE: 'Rohe Markt-Evidenz',
STAGE_2_NORMALIZED: 'Normalisiertes Signal',
STAGE_3_ENRICHED: 'Angereichertes Signal',
STAGE_4_REVIEW_CANDIDATE: 'Review-Kandidat',
STAGE_5_APPROVED_FUTURE: 'Genehmigtes Future Signal',
STAGE_6_MATCHABLE_RESULT: 'Matchbares Ergebnis',
STAGE_7_STRATEGIC_INPUT: 'Strategischer Entscheidungs-Input',
}
export const PIPELINE_STAGE_DESCRIPTIONS: Record<PipelineStage, string> = {
STAGE_1_RAW_EVIDENCE: 'Rohe Evidenz aus Quellen gesammelt noch unverarbeitet',
STAGE_2_NORMALIZED: 'Daten normalisiert, Felder validiert und vereinheitlicht',
STAGE_3_ENRICHED: 'Entitäten extrahiert, Kontext angereichert und bewertet',
STAGE_4_REVIEW_CANDIDATE: 'Signal bereit für manuellen Analyst-Review',
STAGE_5_APPROVED_FUTURE: 'Genehmigt als Future Availability Signal intern sichtbar',
STAGE_6_MATCHABLE_RESULT: 'Im Unified Result Feed Match-Engine nutzbar',
STAGE_7_STRATEGIC_INPUT: 'Eingang in Decision Briefs und strategische Analyse',
}
export const PIPELINE_STAGE_ORDER: PipelineStage[] = [
'STAGE_1_RAW_EVIDENCE',
'STAGE_2_NORMALIZED',
'STAGE_3_ENRICHED',
'STAGE_4_REVIEW_CANDIDATE',
'STAGE_5_APPROVED_FUTURE',
'STAGE_6_MATCHABLE_RESULT',
'STAGE_7_STRATEGIC_INPUT',
]
// ── Gate Types ────────────────────────────────────────────────────────────────
export const GateType = {
EVIDENCE_GATE: 'EVIDENCE_GATE',
CONFIDENCE_GATE: 'CONFIDENCE_GATE',
SENSITIVITY_GATE: 'SENSITIVITY_GATE',
REVIEW_GATE: 'REVIEW_GATE',
MATCHABILITY_GATE: 'MATCHABILITY_GATE',
FEED_ELIGIBILITY_GATE: 'FEED_ELIGIBILITY_GATE',
} as const
export type GateType = typeof GateType[keyof typeof GateType]
export const GATE_LABELS: Record<GateType, string> = {
EVIDENCE_GATE: 'Evidenz-Gate',
CONFIDENCE_GATE: 'Konfidenz-Gate',
SENSITIVITY_GATE: 'Sensitivitäts-Gate',
REVIEW_GATE: 'Review-Gate',
MATCHABILITY_GATE: 'Matchbarkeits-Gate',
FEED_ELIGIBILITY_GATE: 'Feed-Eignung',
}
// ── Gate Status ───────────────────────────────────────────────────────────────
export const GateStatus = {
PASSED: 'PASSED',
FAILED: 'FAILED',
PENDING: 'PENDING',
BLOCKED: 'BLOCKED',
SKIPPED: 'SKIPPED',
} as const
export type GateStatus = typeof GateStatus[keyof typeof GateStatus]
export const GATE_STATUS_LABELS: Record<GateStatus, string> = {
PASSED: 'Bestanden',
FAILED: 'Fehlgeschlagen',
PENDING: 'Ausstehend',
BLOCKED: 'Blockiert',
SKIPPED: 'Übersprungen',
}
export const GATE_STATUS_COLORS: Record<GateStatus, { bg: string; fg: string }> = {
PASSED: { bg: 'rgba(22,163,74,0.1)', fg: '#15803d' },
FAILED: { bg: 'rgba(239,68,68,0.1)', fg: '#dc2626' },
PENDING: { bg: 'rgba(234,179,8,0.1)', fg: '#a16207' },
BLOCKED: { bg: 'rgba(239,68,68,0.08)', fg: '#dc2626' },
SKIPPED: { bg: 'rgba(148,163,184,0.1)', fg: '#64748b' },
}
// ── Interfaces ────────────────────────────────────────────────────────────────
export interface GateCheck {
label: string
passed: boolean
value?: string
note?: string
}
export interface GateEvaluation {
gateType: GateType
status: GateStatus
reason: string
nextAction?: string
evaluatedAt: string
checks: GateCheck[]
}
export interface PipelineState {
signalId: string
currentStage: PipelineStage
gates: Record<GateType, GateEvaluation>
overallEligible: boolean
publishedToFutureAvailability: boolean
publishedAt?: string
feedDisclaimer?: string
}
export interface AuditTrailEntry {
id: string
signalId: string
timestamp: string
stage: PipelineStage
action: string
performedBy: string
details: string
gateType?: GateType
}