Files
property-match/src/domain/enums.ts
T
Benjamin Sutter 0b874865ba 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>
2026-05-15 10:58:27 +02:00

170 lines
8.1 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.
// ── Asset Types ───────────────────────────────────────────────────────────────
export const AssetType = {
OFFICE: 'OFFICE',
RETAIL: 'RETAIL',
GASTRO: 'GASTRO', // legacy kept for mock-data compatibility
LIGHT_INDUSTRIAL: 'LIGHT_INDUSTRIAL',
LOGISTICS: 'LOGISTICS',
PRODUCTION: 'PRODUCTION',
MIXED: 'MIXED',
UNKNOWN: 'UNKNOWN',
} as const
export type AssetType = typeof AssetType[keyof typeof AssetType]
// ── Result Types ──────────────────────────────────────────────────────────────
export const ResultType = {
VERIFIED_PORTFOLIO: 'VERIFIED_PORTFOLIO',
EXTERNAL_MARKET: 'EXTERNAL_MARKET',
FUTURE_AVAILABILITY: 'FUTURE_AVAILABILITY',
} as const
export type ResultType = typeof ResultType[keyof typeof ResultType]
// ── Match Strength ─────────────────────────────────────────────────────────────
export const MatchStrength = {
STRONG: 'STRONG',
MODERATE: 'MODERATE',
WEAK: 'WEAK',
} as const
export type MatchStrength = typeof MatchStrength[keyof typeof MatchStrength]
// ── Match Status ──────────────────────────────────────────────────────────────
export const MatchStatus = {
PENDING_REVIEW: 'PENDING_REVIEW',
APPROVED: 'APPROVED',
REJECTED: 'REJECTED',
SHORTLISTED: 'SHORTLISTED',
ARCHIVED: 'ARCHIVED',
} as const
export type MatchStatus = typeof MatchStatus[keyof typeof MatchStatus]
// ── Risk Level ────────────────────────────────────────────────────────────────
export const RiskLevel = {
LOW: 'LOW',
MEDIUM: 'MEDIUM',
HIGH: 'HIGH',
CRITICAL: 'CRITICAL',
} as const
export type RiskLevel = typeof RiskLevel[keyof typeof RiskLevel]
// ── Confidence Level (qualitative) ───────────────────────────────────────────
export const ConfidenceLevel = {
VERY_HIGH: 'VERY_HIGH', // >= 0.90
HIGH: 'HIGH', // >= 0.75
MEDIUM: 'MEDIUM', // >= 0.55
LOW: 'LOW', // >= 0.35
VERY_LOW: 'VERY_LOW', // < 0.35
} as const
export type ConfidenceLevel = typeof ConfidenceLevel[keyof typeof ConfidenceLevel]
// ── Data Quality Level (qualitative) ─────────────────────────────────────────
export const DataQualityLevel = {
HIGH: 'HIGH', // >= 0.80
MEDIUM: 'MEDIUM', // >= 0.60
LOW: 'LOW', // < 0.60
INCOMPLETE: 'INCOMPLETE', // missing critical fields
} as const
export type DataQualityLevel = typeof DataQualityLevel[keyof typeof DataQualityLevel]
// ── Availability Status ───────────────────────────────────────────────────────
export const AvailabilityStatus = {
AVAILABLE_NOW: 'AVAILABLE_NOW',
AVAILABLE_SOON: 'AVAILABLE_SOON',
FUTURE_SIGNAL: 'FUTURE_SIGNAL',
OCCUPIED: 'OCCUPIED',
UNKNOWN: 'UNKNOWN',
} as const
export type AvailabilityStatus = typeof AvailabilityStatus[keyof typeof AvailabilityStatus]
// ── Availability Type (structural distinction) ────────────────────────────────
export const AvailabilityType = {
CONFIRMED: 'CONFIRMED', // verified, date known
INDICATIVE: 'INDICATIVE', // external listing, unconfirmed
PROBABILISTIC: 'PROBABILISTIC', // AI signal, no confirmed date
} as const
export type AvailabilityType = typeof AvailabilityType[keyof typeof AvailabilityType]
// ── Source Type ───────────────────────────────────────────────────────────────
export const SourceType = {
ERP_IMPORT: 'ERP_IMPORT',
MANUAL_ENTRY: 'MANUAL_ENTRY',
IMMOSCOUT_SCRAPE: 'IMMOSCOUT_SCRAPE',
HOMEGATE_SCRAPE: 'HOMEGATE_SCRAPE',
NEWHOME_SCRAPE: 'NEWHOME_SCRAPE',
MATCHOFFICE_SCRAPE: 'MATCHOFFICE_SCRAPE',
MAISON_WORK_SCRAPE: 'MAISON_WORK_SCRAPE',
AI_SIGNAL: 'AI_SIGNAL',
PARTNER_FEED: 'PARTNER_FEED',
UNKNOWN: 'UNKNOWN',
} as const
export type SourceType = typeof SourceType[keyof typeof SourceType]
// ── Freshness Status ──────────────────────────────────────────────────────────
export const FreshnessStatus = {
FRESH: 'FRESH', // updated within 48h
STALE: 'STALE', // 214 days old
OUTDATED: 'OUTDATED', // > 14 days old
} as const
export type FreshnessStatus = typeof FreshnessStatus[keyof typeof FreshnessStatus]
/** @deprecated Use FreshnessStatus — kept for mock-data backward compatibility */
export const DataFreshness = FreshnessStatus
export type DataFreshness = FreshnessStatus
// ── Review Status ─────────────────────────────────────────────────────────────
export const ReviewStatus = {
UNREVIEWED: 'UNREVIEWED',
IN_REVIEW: 'IN_REVIEW',
APPROVED: 'APPROVED',
REJECTED: 'REJECTED',
FLAGGED: 'FLAGGED',
} as const
export type ReviewStatus = typeof ReviewStatus[keyof typeof ReviewStatus]
// ── Sensitivity Level ─────────────────────────────────────────────────────────
export const SensitivityLevel = {
PUBLIC: 'PUBLIC',
INTERNAL: 'INTERNAL',
CONFIDENTIAL: 'CONFIDENTIAL',
RESTRICTED: 'RESTRICTED',
} as const
export type SensitivityLevel = typeof SensitivityLevel[keyof typeof SensitivityLevel]
// ── Shortlist Status ──────────────────────────────────────────────────────────
export const ShortlistStatus = {
ACTIVE: 'ACTIVE',
SHARED: 'SHARED',
ARCHIVED: 'ARCHIVED',
CONVERTED: 'CONVERTED',
} as const
export type ShortlistStatus = typeof ShortlistStatus[keyof typeof ShortlistStatus]
// ── User Role ─────────────────────────────────────────────────────────────────
export const UserRole = {
SUPER_ADMIN: 'SUPER_ADMIN',
ORGANIZATION_ADMIN: 'ORGANIZATION_ADMIN',
PROPERTY_MANAGER: 'PROPERTY_MANAGER',
REVIEWER: 'REVIEWER',
OWNER_VIEWER: 'OWNER_VIEWER',
DEMAND_USER: 'DEMAND_USER',
} as const
export type UserRole = typeof UserRole[keyof typeof UserRole]
// ── Signal Type ───────────────────────────────────────────────────────────────
export const SignalType = {
EXPANSION: 'EXPANSION',
POSSIBLE_MOVE_OUT: 'POSSIBLE_MOVE_OUT',
CONSTRUCTION_PROJECT: 'CONSTRUCTION_PROJECT',
RESTRUCTURING: 'RESTRUCTURING',
PROJECT_DEVELOPMENT: 'PROJECT_DEVELOPMENT',
SPACE_CONSOLIDATION: 'SPACE_CONSOLIDATION',
} as const
export type SignalType = typeof SignalType[keyof typeof SignalType]
// ── Workspace ─────────────────────────────────────────────────────────────────
export const WorkspaceType = {
SUPPLY: 'SUPPLY',
DEMAND: 'DEMAND',
OPERATIONS: 'OPERATIONS',
} as const
export type WorkspaceType = typeof WorkspaceType[keyof typeof WorkspaceType]