9cf3e72033
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>
69 lines
1.9 KiB
TypeScript
69 lines
1.9 KiB
TypeScript
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 // 0–1
|
||
dataQualityScore: number // 0–1
|
||
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
|
||
}
|