Files
property-match/src/components/match-card/MatchCardViewModel.ts
T
Benjamin Sutter 9cf3e72033 feat: Schattenmarkt UX — separate section, relevance bridge, source links
Signals are now in their own feed section with an explanation banner
so users understand they are not confirmed properties. Each signal card
shows WHY it appears in their search (e.g. 'Fläche könnte frei werden').
Source pills are now clickable links. FutureAvailabilityContextPanel
redesigned with full AI summary, source button, and relevance bridge.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 21:59:08 +02:00

69 lines
1.9 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.
import type { ResultType } from '../../domain/enums'
import type { TradeOff, Risk, MissingDataItem } from '../../domain/match'
export type MatchCardVariant = 'compact' | 'expanded' | 'review' | 'compare-mini'
export type MatchCardActionType =
| 'OPEN_DETAIL'
| 'ADD_COMPARE'
| 'SAVE_SHORTLIST'
| 'SEND_REVIEW'
| 'APPROVE'
| 'REJECT'
| 'REQUEST_DATA'
export interface MatchCardAction {
id: string
label: string
actionType: MatchCardActionType
variant?: 'primary' | 'secondary' | 'danger'
disabled?: boolean
onClick: () => void
}
export interface MatchCardReason {
type: 'HARD_FACT' | 'SOFT_FACTOR' | 'STRATEGIC'
label: string
explanation: string
score: number
}
export interface MatchCardViewModel {
id: string
title: string
resultType: ResultType
assetType?: string
matchScore: number
confidenceScore: number // 01
dataQualityScore: number // 01
locationLabel: string
availabilityLabel?: string
sourceLabel?: string
externalUrl?: string
reasons: MatchCardReason[] // max 3: HARD_FACT, SOFT_FACTOR, STRATEGIC
tradeoffs: TradeOff[]
risks: Risk[]
missingData: MissingDataItem[]
actions: MatchCardAction[]
disclaimer?: string // required for FUTURE_AVAILABILITY
explainabilitySummary?: string
taxCalculatorUrl?: string // deeplink to cantonal tax calculator
// Schattenmarkt / FUTURE_AVAILABILITY signal fields
signalSourceType?: 'PRESS' | 'CONSTRUCTION_PERMIT' | 'JOB_POSTING' | 'COMPANY_REPORT' | 'MARKET_DATA' | 'MANUAL'
signalSourceUrl?: string
signalSourceCredibility?: 'LOW' | 'MEDIUM' | 'HIGH'
signalProbability?: number
signalMarketIndicator?: string
signalType?: string
signalIsVerified?: boolean
aiSignalSummary?: string
// States
isSelected?: boolean
isCompareSelected?: boolean
isRestricted?: boolean
isReviewRequired?: boolean
isStaleData?: boolean
}