fix: Conservative FMV valuations - no more inflated prices!
- Reduced base prices to realistic restoration project values * Griswold #8: → (60% reduction) * Wagner #8: → (58% reduction) * Lodge #8: → (69% reduction) - Added condition detection: * Restored items: 1.5x FMV (deserves premium) * Damaged/cracked: 0.5x FMV (realistic discount) - Now finding 6 real deals instead of 40+ questionable ones - Deals are now TRULY exceptional (80%+ off realistic values) - No more false positives from inflated FMV
This commit is contained in:
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -5,15 +5,17 @@ Determines fair market value and calculates discount percentage
|
||||
"""
|
||||
import re
|
||||
|
||||
# Base price ranges for common cast iron items (in good condition)
|
||||
# Base price ranges for common cast iron items (RESTORATION PROJECT prices - conservative)
|
||||
# These are realistic "as-is" prices, not restored retail values
|
||||
BASE_PRICES = {
|
||||
'griswold': {'skillet': 150, 'griddle': 200, 'dutch_oven': 250, 'pot': 120, 'pan': 100},
|
||||
'wagner': {'skillet': 120, 'griddle': 180, 'dutch_oven': 220, 'pot': 100, 'pan': 90},
|
||||
'wapak': {'skillet': 180, 'griddle': 220, 'dutch_oven': 280, 'pot': 150, 'pan': 130},
|
||||
'birmingham': {'skillet': 160, 'griddle': 190, 'dutch_oven': 240, 'pot': 130, 'pan': 110},
|
||||
'lodge': {'skillet': 80, 'griddle': 120, 'dutch_oven': 150, 'pot': 70, 'pan': 60},
|
||||
'victor': {'skillet': 140, 'griddle': 170, 'dutch_oven': 210, 'pot': 120, 'pan': 100},
|
||||
'default': {'skillet': 100, 'griddle': 150, 'dutch_oven': 200, 'pot': 80, 'pan': 70}
|
||||
'griswold': {'skillet': 60, 'griddle': 80, 'dutch_oven': 100, 'pot': 50, 'pan': 45},
|
||||
'wagner': {'skillet': 50, 'griddle': 70, 'dutch_oven': 90, 'pot': 45, 'pan': 40},
|
||||
'wapak': {'skillet': 70, 'griddle': 90, 'dutch_oven': 110, 'pot': 60, 'pan': 55},
|
||||
'birmingham': {'skillet': 65, 'griddle': 85, 'dutch_oven': 105, 'pot': 55, 'pan': 50},
|
||||
'lodge': {'skillet': 25, 'griddle': 40, 'dutch_oven': 60, 'pot': 30, 'pan': 25},
|
||||
'victor': {'skillet': 55, 'griddle': 75, 'dutch_oven': 95, 'pot': 50, 'pan': 45},
|
||||
'unmarked': {'skillet': 30, 'griddle': 45, 'dutch_oven': 60, 'pot': 35, 'pan': 30},
|
||||
'default': {'skillet': 40, 'griddle': 60, 'dutch_oven': 80, 'pot': 40, 'pan': 35}
|
||||
}
|
||||
|
||||
# Size multipliers
|
||||
@@ -82,6 +84,18 @@ def calculate_fmv(title):
|
||||
|
||||
return round(fmv, 2)
|
||||
|
||||
def has_restoration_keywords(title):
|
||||
"""Check if title mentions restoration work"""
|
||||
title_lower = title.lower()
|
||||
keywords = ['restored', 'restoration', 'refinished', 'seasoned', 'new condition', 'excellent condition']
|
||||
return any(kw in title_lower for kw in keywords)
|
||||
|
||||
def has_damage_keywords(title):
|
||||
"""Check if title mentions damage"""
|
||||
title_lower = title.lower()
|
||||
keywords = ['crack', 'cracked', 'broken', 'chip', 'damaged', 'warp', 'warped']
|
||||
return any(kw in title_lower for kw in keywords)
|
||||
|
||||
def is_good_deal(price, title, min_discount=50):
|
||||
"""
|
||||
Determine if an item is a good deal
|
||||
@@ -89,6 +103,14 @@ def is_good_deal(price, title, min_discount=50):
|
||||
"""
|
||||
fmv = calculate_fmv(title)
|
||||
|
||||
# Adjust FMV based on condition keywords
|
||||
if has_restoration_keywords(title):
|
||||
# Restored items are worth more
|
||||
fmv = fmv * 1.5
|
||||
elif has_damage_keywords(title):
|
||||
# Damaged items are worth less
|
||||
fmv = fmv * 0.5
|
||||
|
||||
if price <= 0 or fmv <= 0:
|
||||
return False, 0, fmv
|
||||
|
||||
|
||||
Reference in New Issue
Block a user