feat(domain): F004 – expand domain model layer

- need.ts: add SizeRange, MustHaveCriterion, WeightedPreference types; extend Need with desiredLocation, sizeRange, mustHaveCriteria, weightedPreferences, status
- futureSignal.ts: add SignalEvidence type; extend FutureSignal with title, evidence, matchabilityScore, reviewStatus
- aiOutput.ts: new AIOutput entity with type, inputHash, outputJson, provider/model/promptVersion/schemaVersion, reviewStatus
- activityEvent.ts: new ActivityEvent entity with actorId, action, entityType, entityId, timestamp, metadata
- unifiedResult.ts: discriminated union (VerifiedPortfolioResult | ExternalMarketResult | FutureAvailabilityResult)
- index.ts: export all three new files
- Properties.tsx: add LIGHT_INDUSTRIAL + UNKNOWN cases to exhaustive switches

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin SutterandClaude Sonnet 4.6 committed 2026-05-15 10:58:27 +02:00
1 parent 3b45b0c121
commit 0b874865ba
10 files changed
+399 -40

No files matched your search

+13 -1
View File
@@ -1,4 +1,4 @@
import type { SignalType, RiskLevel } from './enums'
import type { SignalType, RiskLevel, ReviewStatus } from './enums'
export interface SignalSource {
type: 'PRESS' | 'CONSTRUCTION_PERMIT' | 'JOB_POSTING' | 'COMPANY_REPORT' | 'MARKET_DATA' | 'MANUAL'
@@ -7,6 +7,12 @@ export interface SignalSource {
credibility: 'LOW' | 'MEDIUM' | 'HIGH'
}
export interface SignalEvidence {
summary: string
sourceUrls?: string[]
extractedAt?: string
}
export interface FutureSignal {
id: string
signalType: SignalType
@@ -30,4 +36,10 @@ export interface FutureSignal {
organizationId?: string
createdAt: string
updatedAt: string
// F004 additions
title?: string // short human-readable headline
evidence?: SignalEvidence // structured evidence block
matchabilityScore?: number // 0–100: how well this signal can be matched to needs
reviewStatus?: ReviewStatus
}