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:
2026-04-10 11:52:54 -04:00
parent 71790242f6
commit 30703bfd45
9 changed files with 1074 additions and 263 deletions

View File

@@ -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