feat(ai): AI pre-market rent recommendation from regional comparables, supply & demand

- IAIService.recommendPreMarketRent: recommended price + range, verdict (UNDERPRICED/FAIR/AMBITIOUS), drivers, rationale, confidence
- MockAIService: deterministic recommendation from locationIntelligence — regional comp median, vacancy (supply), demand strength + days-on-market, rent trend (forward for pre-market)
- BackendAIService: LLM prompt with market context + mock fallback
- usePreMarketRentRecommendation hook; PreMarketPriceAdvisor component shows the recommendation per released unit with verdict ("zu günstig" when underpriced) + adjustable expected price + "Empfehlung übernehmen"
- Replaces the simple indexed suggestion with a market-driven AI recommendation that flags underpricing

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Benjamin Sutter
2026-06-21 00:22:14 +02:00
parent 3e1e945661
commit fb029cf0bc
7 changed files with 239 additions and 53 deletions
+10 -1
View File
@@ -1,6 +1,6 @@
import { useMutation, useQuery } from '@tanstack/react-query'
import { aiService, parseListingText } from '../services/aiService'
import type { OfferEmailPayload, FitOutAdviceInput } from '../services/aiService'
import type { OfferEmailPayload, FitOutAdviceInput, PreMarketRentInput } from '../services/aiService'
export function useParseNeed() {
return useMutation({
@@ -34,3 +34,12 @@ export function useFitOutAdvice(input: FitOutAdviceInput | null) {
staleTime: Infinity,
})
}
export function usePreMarketRentRecommendation(input: PreMarketRentInput | null) {
return useQuery({
queryKey: ['preMarketRent', input],
queryFn: () => aiService.recommendPreMarketRent(input!),
enabled: !!input && !!input.city,
staleTime: Infinity,
})
}