feat: F023 signal-to-match pipeline & shadow market decision flow
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
// ── 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
|
||||
}
|
||||
Reference in New Issue
Block a user