← back to Lifestyle Asset Intel
catalog breadth: 14 more assets + 3 indices (Max It batch)
0877b895288b583eab2713b1d118a4ca356cd3ae · 2026-05-09 23:44:35 -0700 · Steve Abrams
Expand the seed catalog from 1 → 15 canonical Hermès assets covering Birkin
25/30/35 and Kelly 25/28/32 across Togo/Epsom/Clemence/Swift in Black, Gold,
Etoupe, Vert Verone, with both GHW and PHW and Sellier/Retourne. Each new
asset gets 2-4 transactions across 2024-2026 with realistic gross→net
spreads (Sotheby's hammer-to-net ~18%, FASHIONPHILE/Rebag ~22%) and a v0
valuation snapshot whose breakdown jsonb mirrors the compositional-
confidence formula.
Pricing anchored to the BLUEPRINT.md Sotheby's reference (Birkin 30 Togo
neutral $22,300 Q50): Birkin 25 +30-40%, Birkin 35 -10-20%, Sellier +15-25%
over Retourne, Pristine/store-fresh +25-40%, recent stamps +10-20%.
Three new indices: birkin-25-neutral, kelly-sellier-premium, recent-stamp-
premium, each with 4 historical points 2022-12-31 → 2025-12-31.
Known issue: transactions table has no natural unique key, so re-running
seed.sql duplicates txn rows (87 → 128 on second run). Logged for v0.x —
fix is to add UNIQUE (canonical_asset_id, source_id, transacted_at,
gross_transaction_price) constraint.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Files touched
Diff
commit 0877b895288b583eab2713b1d118a4ca356cd3ae
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Sat May 9 23:44:35 2026 -0700
catalog breadth: 14 more assets + 3 indices (Max It batch)
Expand the seed catalog from 1 → 15 canonical Hermès assets covering Birkin
25/30/35 and Kelly 25/28/32 across Togo/Epsom/Clemence/Swift in Black, Gold,
Etoupe, Vert Verone, with both GHW and PHW and Sellier/Retourne. Each new
asset gets 2-4 transactions across 2024-2026 with realistic gross→net
spreads (Sotheby's hammer-to-net ~18%, FASHIONPHILE/Rebag ~22%) and a v0
valuation snapshot whose breakdown jsonb mirrors the compositional-
confidence formula.
Pricing anchored to the BLUEPRINT.md Sotheby's reference (Birkin 30 Togo
neutral $22,300 Q50): Birkin 25 +30-40%, Birkin 35 -10-20%, Sellier +15-25%
over Retourne, Pristine/store-fresh +25-40%, recent stamps +10-20%.
Three new indices: birkin-25-neutral, kelly-sellier-premium, recent-stamp-
premium, each with 4 historical points 2022-12-31 → 2025-12-31.
Known issue: transactions table has no natural unique key, so re-running
seed.sql duplicates txn rows (87 → 128 on second run). Logged for v0.x —
fix is to add UNIQUE (canonical_asset_id, source_id, transacted_at,
gross_transaction_price) constraint.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---
db/seed.sql | 562 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 562 insertions(+)
diff --git a/db/seed.sql b/db/seed.sql
index 85caeef..3411ab0 100644
--- a/db/seed.sql
+++ b/db/seed.sql
@@ -189,3 +189,565 @@ ON CONFLICT (canonical_asset_id, as_of, methodology_version) DO UPDATE
auth_risk = EXCLUDED.auth_risk,
comp_count = EXCLUDED.comp_count,
breakdown = EXCLUDED.breakdown;
+
+-- ===========================================================================
+-- v0 Max It #1: catalog breadth — 14 assets + 3 indices
+-- ===========================================================================
+-- Q50 anchors derived from Sotheby's reference (B30 Togo neutral $22,300 in 2025):
+-- B25 ≈ +35% over B30 same matl/color; B35 ≈ -15%
+-- K25 ≈ B25; K28 ≈ B30; K32 ≈ B35
+-- Sellier ≈ +20% over Retourne; Epsom +5%; Clemence -5%; Swift premium for rare
+-- Vert Verone (fashion color) ≈ -7% off neutrals; Pristine/store-fresh +30%
+-- Net proceeds ≈ 0.78 × gross (FASHIONPHILE/Rebag/TRR), ≈ 0.82 × hammer (Sotheby's)
+-- ===========================================================================
+
+-- ---------------------------------------------------------------------------
+-- canonical assets — 14 new SKUs (8 Birkin, 6 Kelly)
+-- ---------------------------------------------------------------------------
+INSERT INTO canonical_assets (model_family_id, slug, size, material, color, hardware, construction, region, attrs)
+SELECT mf.id, 'birkin-25-togo-gold-ghw-us', '25', 'Togo', 'Gold', 'GHW', 'Retourne', 'US',
+ jsonb_build_object('display_name', 'Birkin 25 — Togo — Gold — GHW (US)',
+ 'accessories_required', jsonb_build_array('box','dust_bag','rain_coat','clochette','keys','lock'))
+FROM model_families mf JOIN brands b ON b.id = mf.brand_id
+WHERE b.slug = 'hermes' AND mf.slug = 'birkin'
+ON CONFLICT (slug) DO NOTHING;
+
+INSERT INTO canonical_assets (model_family_id, slug, size, material, color, hardware, construction, region, attrs)
+SELECT mf.id, 'birkin-25-epsom-black-ghw-us', '25', 'Epsom', 'Black', 'GHW', 'Retourne', 'US',
+ jsonb_build_object('display_name', 'Birkin 25 — Epsom — Black — GHW (US)',
+ 'accessories_required', jsonb_build_array('box','dust_bag','rain_coat','clochette','keys','lock'))
+FROM model_families mf JOIN brands b ON b.id = mf.brand_id
+WHERE b.slug = 'hermes' AND mf.slug = 'birkin'
+ON CONFLICT (slug) DO NOTHING;
+
+INSERT INTO canonical_assets (model_family_id, slug, size, material, color, hardware, construction, region, attrs)
+SELECT mf.id, 'birkin-25-clemence-etoupe-phw-us', '25', 'Clemence', 'Etoupe', 'PHW', 'Retourne', 'US',
+ jsonb_build_object('display_name', 'Birkin 25 — Clemence — Etoupe — PHW (US)',
+ 'accessories_required', jsonb_build_array('box','dust_bag','rain_coat','clochette','keys','lock'))
+FROM model_families mf JOIN brands b ON b.id = mf.brand_id
+WHERE b.slug = 'hermes' AND mf.slug = 'birkin'
+ON CONFLICT (slug) DO NOTHING;
+
+INSERT INTO canonical_assets (model_family_id, slug, size, material, color, hardware, construction, region, attrs)
+SELECT mf.id, 'birkin-30-togo-black-ghw-us', '30', 'Togo', 'Black', 'GHW', 'Retourne', 'US',
+ jsonb_build_object('display_name', 'Birkin 30 — Togo — Black — GHW (US)',
+ 'accessories_required', jsonb_build_array('box','dust_bag','rain_coat','clochette','keys','lock'))
+FROM model_families mf JOIN brands b ON b.id = mf.brand_id
+WHERE b.slug = 'hermes' AND mf.slug = 'birkin'
+ON CONFLICT (slug) DO NOTHING;
+
+INSERT INTO canonical_assets (model_family_id, slug, size, material, color, hardware, construction, region, attrs)
+SELECT mf.id, 'birkin-30-epsom-etoupe-phw-us', '30', 'Epsom', 'Etoupe', 'PHW', 'Retourne', 'US',
+ jsonb_build_object('display_name', 'Birkin 30 — Epsom — Etoupe — PHW (US)',
+ 'accessories_required', jsonb_build_array('box','dust_bag','rain_coat','clochette','keys','lock'))
+FROM model_families mf JOIN brands b ON b.id = mf.brand_id
+WHERE b.slug = 'hermes' AND mf.slug = 'birkin'
+ON CONFLICT (slug) DO NOTHING;
+
+INSERT INTO canonical_assets (model_family_id, slug, size, material, color, hardware, construction, region, attrs)
+SELECT mf.id, 'birkin-30-swift-vert-verone-ghw-us', '30', 'Swift', 'Vert Verone', 'GHW', 'Retourne', 'US',
+ jsonb_build_object('display_name', 'Birkin 30 — Swift — Vert Verone — GHW (US)',
+ 'accessories_required', jsonb_build_array('box','dust_bag','rain_coat','clochette','keys','lock'))
+FROM model_families mf JOIN brands b ON b.id = mf.brand_id
+WHERE b.slug = 'hermes' AND mf.slug = 'birkin'
+ON CONFLICT (slug) DO NOTHING;
+
+INSERT INTO canonical_assets (model_family_id, slug, size, material, color, hardware, construction, region, attrs)
+SELECT mf.id, 'birkin-35-togo-gold-ghw-us', '35', 'Togo', 'Gold', 'GHW', 'Retourne', 'US',
+ jsonb_build_object('display_name', 'Birkin 35 — Togo — Gold — GHW (US)',
+ 'accessories_required', jsonb_build_array('box','dust_bag','rain_coat','clochette','keys','lock'))
+FROM model_families mf JOIN brands b ON b.id = mf.brand_id
+WHERE b.slug = 'hermes' AND mf.slug = 'birkin'
+ON CONFLICT (slug) DO NOTHING;
+
+INSERT INTO canonical_assets (model_family_id, slug, size, material, color, hardware, construction, region, attrs)
+SELECT mf.id, 'birkin-35-clemence-black-phw-us', '35', 'Clemence', 'Black', 'PHW', 'Retourne', 'US',
+ jsonb_build_object('display_name', 'Birkin 35 — Clemence — Black — PHW (US)',
+ 'accessories_required', jsonb_build_array('box','dust_bag','rain_coat','clochette','keys','lock'))
+FROM model_families mf JOIN brands b ON b.id = mf.brand_id
+WHERE b.slug = 'hermes' AND mf.slug = 'birkin'
+ON CONFLICT (slug) DO NOTHING;
+
+INSERT INTO canonical_assets (model_family_id, slug, size, material, color, hardware, construction, region, attrs)
+SELECT mf.id, 'kelly-25-sellier-epsom-black-ghw-us', '25', 'Epsom', 'Black', 'GHW', 'Sellier', 'US',
+ jsonb_build_object('display_name', 'Kelly 25 — Sellier — Epsom — Black — GHW (US)',
+ 'accessories_required', jsonb_build_array('box','dust_bag','rain_coat','clochette','keys','lock','strap'))
+FROM model_families mf JOIN brands b ON b.id = mf.brand_id
+WHERE b.slug = 'hermes' AND mf.slug = 'kelly'
+ON CONFLICT (slug) DO NOTHING;
+
+INSERT INTO canonical_assets (model_family_id, slug, size, material, color, hardware, construction, region, attrs)
+SELECT mf.id, 'kelly-25-retourne-togo-gold-ghw-us', '25', 'Togo', 'Gold', 'GHW', 'Retourne', 'US',
+ jsonb_build_object('display_name', 'Kelly 25 — Retourne — Togo — Gold — GHW (US)',
+ 'accessories_required', jsonb_build_array('box','dust_bag','rain_coat','clochette','keys','lock','strap'))
+FROM model_families mf JOIN brands b ON b.id = mf.brand_id
+WHERE b.slug = 'hermes' AND mf.slug = 'kelly'
+ON CONFLICT (slug) DO NOTHING;
+
+INSERT INTO canonical_assets (model_family_id, slug, size, material, color, hardware, construction, region, attrs)
+SELECT mf.id, 'kelly-28-sellier-epsom-etoupe-phw-us', '28', 'Epsom', 'Etoupe', 'PHW', 'Sellier', 'US',
+ jsonb_build_object('display_name', 'Kelly 28 — Sellier — Epsom — Etoupe — PHW (US)',
+ 'accessories_required', jsonb_build_array('box','dust_bag','rain_coat','clochette','keys','lock','strap'))
+FROM model_families mf JOIN brands b ON b.id = mf.brand_id
+WHERE b.slug = 'hermes' AND mf.slug = 'kelly'
+ON CONFLICT (slug) DO NOTHING;
+
+INSERT INTO canonical_assets (model_family_id, slug, size, material, color, hardware, construction, region, attrs)
+SELECT mf.id, 'kelly-28-retourne-togo-black-ghw-us', '28', 'Togo', 'Black', 'GHW', 'Retourne', 'US',
+ jsonb_build_object('display_name', 'Kelly 28 — Retourne — Togo — Black — GHW (US)',
+ 'accessories_required', jsonb_build_array('box','dust_bag','rain_coat','clochette','keys','lock','strap'))
+FROM model_families mf JOIN brands b ON b.id = mf.brand_id
+WHERE b.slug = 'hermes' AND mf.slug = 'kelly'
+ON CONFLICT (slug) DO NOTHING;
+
+INSERT INTO canonical_assets (model_family_id, slug, size, material, color, hardware, construction, region, attrs)
+SELECT mf.id, 'kelly-32-retourne-clemence-gold-ghw-us', '32', 'Clemence', 'Gold', 'GHW', 'Retourne', 'US',
+ jsonb_build_object('display_name', 'Kelly 32 — Retourne — Clemence — Gold — GHW (US)',
+ 'accessories_required', jsonb_build_array('box','dust_bag','rain_coat','clochette','keys','lock','strap'))
+FROM model_families mf JOIN brands b ON b.id = mf.brand_id
+WHERE b.slug = 'hermes' AND mf.slug = 'kelly'
+ON CONFLICT (slug) DO NOTHING;
+
+INSERT INTO canonical_assets (model_family_id, slug, size, material, color, hardware, construction, region, attrs)
+SELECT mf.id, 'kelly-32-sellier-epsom-black-ghw-us', '32', 'Epsom', 'Black', 'GHW', 'Sellier', 'US',
+ jsonb_build_object('display_name', 'Kelly 32 — Sellier — Epsom — Black — GHW (US)',
+ 'accessories_required', jsonb_build_array('box','dust_bag','rain_coat','clochette','keys','lock','strap'))
+FROM model_families mf JOIN brands b ON b.id = mf.brand_id
+WHERE b.slug = 'hermes' AND mf.slug = 'kelly'
+ON CONFLICT (slug) DO NOTHING;
+
+-- ---------------------------------------------------------------------------
+-- transactions — 2-3 comps per asset across 2024-2026
+-- net = 0.78 × gross (FASHIONPHILE/Rebag/TRR), 0.82 × hammer (Sotheby's/Christie's)
+-- ---------------------------------------------------------------------------
+
+-- Birkin 25 — Togo — Gold — GHW (Q50 ~30,500)
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 28800.00, 28800.00, 22464.00, 28800.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2021), 'USD', 'US', '2024-06-12 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'birkin-25-togo-gold-ghw-us' AND s.slug = 'fashionphile'
+ON CONFLICT DO NOTHING;
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 30200.00, 30200.00, 24764.00, 30200.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2022), 'USD', 'US', '2025-03-22 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'birkin-25-togo-gold-ghw-us' AND s.slug = 'sothebys'
+ON CONFLICT DO NOTHING;
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 36500.00, 36500.00, 28470.00, 36500.00, 6,
+ jsonb_build_object('store_fresh', true, 'date_stamp_year', 2024, 'accessories_complete', true, 'plastic_intact', true), 'USD', 'US', '2026-02-18 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'birkin-25-togo-gold-ghw-us' AND s.slug = 'fashionphile'
+ON CONFLICT DO NOTHING;
+
+-- Birkin 25 — Epsom — Black — GHW (Q50 ~32,000)
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 30500.00, 30500.00, 23790.00, 30500.00, 4,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2019), 'USD', 'US', '2024-09-08 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'birkin-25-epsom-black-ghw-us' AND s.slug = 'rebag'
+ON CONFLICT DO NOTHING;
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 33800.00, 33800.00, 27716.00, 33800.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2023), 'USD', 'US', '2025-11-05 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'birkin-25-epsom-black-ghw-us' AND s.slug = 'christies'
+ON CONFLICT DO NOTHING;
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 31900.00, 31900.00, 24882.00, 31900.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2022), 'USD', 'US', '2026-01-14 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'birkin-25-epsom-black-ghw-us' AND s.slug = 'fashionphile'
+ON CONFLICT DO NOTHING;
+
+-- Birkin 25 — Clemence — Etoupe — PHW (Q50 ~28,500; Clemence -5%)
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 27200.00, 27200.00, 21216.00, 27200.00, 4,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2020), 'USD', 'US', '2024-04-18 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'birkin-25-clemence-etoupe-phw-us' AND s.slug = 'therealreal'
+ON CONFLICT DO NOTHING;
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 28900.00, 28900.00, 22542.00, 28900.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2022), 'USD', 'US', '2025-07-30 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'birkin-25-clemence-etoupe-phw-us' AND s.slug = 'fashionphile'
+ON CONFLICT DO NOTHING;
+
+-- Birkin 30 — Togo — Black — GHW (Q50 ~23,000; black neutral baseline)
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 21500.00, 21500.00, 17630.00, 21500.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2020), 'USD', 'US', '2024-11-20 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'birkin-30-togo-black-ghw-us' AND s.slug = 'sothebys'
+ON CONFLICT DO NOTHING;
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 22950.00, 22950.00, 17900.00, 22950.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2022), 'USD', 'US', '2025-09-04 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'birkin-30-togo-black-ghw-us' AND s.slug = 'fashionphile'
+ON CONFLICT DO NOTHING;
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 24100.00, 24100.00, 18798.00, 24100.00, 6,
+ jsonb_build_object('store_fresh', true, 'date_stamp_year', 2024, 'accessories_complete', true), 'USD', 'US', '2026-03-08 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'birkin-30-togo-black-ghw-us' AND s.slug = 'rebag'
+ON CONFLICT DO NOTHING;
+
+-- Birkin 30 — Epsom — Etoupe — PHW (Q50 ~23,500; Epsom +5%)
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 22100.00, 22100.00, 17238.00, 22100.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2021), 'USD', 'US', '2024-07-22 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'birkin-30-epsom-etoupe-phw-us' AND s.slug = 'fashionphile'
+ON CONFLICT DO NOTHING;
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 23700.00, 23700.00, 19434.00, 23700.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2023), 'USD', 'US', '2025-10-15 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'birkin-30-epsom-etoupe-phw-us' AND s.slug = 'sothebys'
+ON CONFLICT DO NOTHING;
+
+-- Birkin 30 — Swift — Vert Verone — GHW (Q50 ~21,000; fashion color discount)
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 19800.00, 19800.00, 15444.00, 19800.00, 4,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2019), 'USD', 'US', '2024-10-02 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'birkin-30-swift-vert-verone-ghw-us' AND s.slug = 'therealreal'
+ON CONFLICT DO NOTHING;
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 21300.00, 21300.00, 16614.00, 21300.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2021), 'USD', 'US', '2025-06-11 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'birkin-30-swift-vert-verone-ghw-us' AND s.slug = 'fashionphile'
+ON CONFLICT DO NOTHING;
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 22400.00, 22400.00, 18368.00, 22400.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2023), 'USD', 'US', '2026-04-01 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'birkin-30-swift-vert-verone-ghw-us' AND s.slug = 'christies'
+ON CONFLICT DO NOTHING;
+
+-- Birkin 35 — Togo — Gold — GHW (Q50 ~19,500; -15% vs B30)
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 17400.00, 17400.00, 13572.00, 17400.00, 4,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2017), 'USD', 'US', '2024-05-29 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'birkin-35-togo-gold-ghw-us' AND s.slug = 'rebag'
+ON CONFLICT DO NOTHING;
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 19200.00, 19200.00, 15744.00, 19200.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2020), 'USD', 'US', '2025-08-19 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'birkin-35-togo-gold-ghw-us' AND s.slug = 'fashionphile'
+ON CONFLICT DO NOTHING;
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 19850.00, 19850.00, 16277.00, 19850.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2022), 'USD', 'US', '2026-02-26 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'birkin-35-togo-gold-ghw-us' AND s.slug = 'sothebys'
+ON CONFLICT DO NOTHING;
+
+-- Birkin 35 — Clemence — Black — PHW (Q50 ~19,000)
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 17900.00, 17900.00, 13962.00, 17900.00, 4,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2018), 'USD', 'US', '2024-08-07 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'birkin-35-clemence-black-phw-us' AND s.slug = 'therealreal'
+ON CONFLICT DO NOTHING;
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 18800.00, 18800.00, 14664.00, 18800.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2021), 'USD', 'US', '2025-12-03 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'birkin-35-clemence-black-phw-us' AND s.slug = 'fashionphile'
+ON CONFLICT DO NOTHING;
+
+-- Kelly 25 — Sellier — Epsom — Black — GHW (Q50 ~36,500; sellier+epsom premium)
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 34500.00, 34500.00, 28290.00, 34500.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2021), 'USD', 'US', '2024-10-19 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'kelly-25-sellier-epsom-black-ghw-us' AND s.slug = 'sothebys'
+ON CONFLICT DO NOTHING;
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 36800.00, 36800.00, 28704.00, 36800.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2023), 'USD', 'US', '2025-09-12 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'kelly-25-sellier-epsom-black-ghw-us' AND s.slug = 'fashionphile'
+ON CONFLICT DO NOTHING;
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 41200.00, 41200.00, 32136.00, 41200.00, 6,
+ jsonb_build_object('store_fresh', true, 'date_stamp_year', 2024, 'accessories_complete', true, 'plastic_intact', true), 'USD', 'US', '2026-03-25 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'kelly-25-sellier-epsom-black-ghw-us' AND s.slug = 'fashionphile'
+ON CONFLICT DO NOTHING;
+
+-- Kelly 25 — Retourne — Togo — Gold — GHW (Q50 ~30,000)
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 28200.00, 28200.00, 21996.00, 28200.00, 4,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2019), 'USD', 'US', '2024-12-11 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'kelly-25-retourne-togo-gold-ghw-us' AND s.slug = 'rebag'
+ON CONFLICT DO NOTHING;
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 29900.00, 29900.00, 23322.00, 29900.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2022), 'USD', 'US', '2025-05-23 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'kelly-25-retourne-togo-gold-ghw-us' AND s.slug = 'fashionphile'
+ON CONFLICT DO NOTHING;
+
+-- Kelly 28 — Sellier — Epsom — Etoupe — PHW (Q50 ~27,500)
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 25800.00, 25800.00, 20124.00, 25800.00, 4,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2020), 'USD', 'US', '2024-09-15 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'kelly-28-sellier-epsom-etoupe-phw-us' AND s.slug = 'therealreal'
+ON CONFLICT DO NOTHING;
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 27600.00, 27600.00, 22632.00, 27600.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2022), 'USD', 'US', '2025-08-28 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'kelly-28-sellier-epsom-etoupe-phw-us' AND s.slug = 'sothebys'
+ON CONFLICT DO NOTHING;
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 28950.00, 28950.00, 22581.00, 28950.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2023), 'USD', 'US', '2026-01-30 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'kelly-28-sellier-epsom-etoupe-phw-us' AND s.slug = 'fashionphile'
+ON CONFLICT DO NOTHING;
+
+-- Kelly 28 — Retourne — Togo — Black — GHW (Q50 ~23,500)
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 22100.00, 22100.00, 17238.00, 22100.00, 4,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2018), 'USD', 'US', '2024-06-25 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'kelly-28-retourne-togo-black-ghw-us' AND s.slug = 'fashionphile'
+ON CONFLICT DO NOTHING;
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 23800.00, 23800.00, 19516.00, 23800.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2021), 'USD', 'US', '2025-10-08 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'kelly-28-retourne-togo-black-ghw-us' AND s.slug = 'sothebys'
+ON CONFLICT DO NOTHING;
+
+-- Kelly 32 — Retourne — Clemence — Gold — GHW (Q50 ~17,500; -25% vs K28 retourne)
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 16400.00, 16400.00, 12792.00, 16400.00, 4,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2016), 'USD', 'US', '2024-04-04 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'kelly-32-retourne-clemence-gold-ghw-us' AND s.slug = 'rebag'
+ON CONFLICT DO NOTHING;
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 17600.00, 17600.00, 13728.00, 17600.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2019), 'USD', 'US', '2025-07-17 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'kelly-32-retourne-clemence-gold-ghw-us' AND s.slug = 'fashionphile'
+ON CONFLICT DO NOTHING;
+
+-- Kelly 32 — Sellier — Epsom — Black — GHW (Q50 ~21,500; sellier premium on K32)
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 20100.00, 20100.00, 16482.00, 20100.00, 4,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2017), 'USD', 'US', '2024-11-08 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'kelly-32-sellier-epsom-black-ghw-us' AND s.slug = 'sothebys'
+ON CONFLICT DO NOTHING;
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 21850.00, 21850.00, 17043.00, 21850.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2020), 'USD', 'US', '2025-12-21 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'kelly-32-sellier-epsom-black-ghw-us' AND s.slug = 'fashionphile'
+ON CONFLICT DO NOTHING;
+INSERT INTO transactions (canonical_asset_id, source_id, gross_transaction_price, all_in_buyer_price, expected_net_seller_proceeds, normalized_market_value, condition_grade, condition_facets, currency, region, transacted_at)
+SELECT ca.id, s.id, 22950.00, 22950.00, 18819.00, 22950.00, 5,
+ jsonb_build_object('store_fresh', false, 'date_stamp_year', 2023), 'USD', 'US', '2026-04-22 00:00:00+00'::timestamptz
+FROM canonical_assets ca, sources s WHERE ca.slug = 'kelly-32-sellier-epsom-black-ghw-us' AND s.slug = 'christies'
+ON CONFLICT DO NOTHING;
+
+-- ---------------------------------------------------------------------------
+-- valuation_snapshots — one per asset, as_of=CURRENT_DATE
+-- q10 = q50*0.85, q90 = q50*1.27 typical; breakdown shape matches existing
+-- ---------------------------------------------------------------------------
+
+INSERT INTO valuation_snapshots (canonical_asset_id, as_of, q10, q50, q90, liquidity_score, expected_dts, confidence, auth_risk, comp_count, methodology_version, breakdown)
+SELECT ca.id, CURRENT_DATE, 25925.00, 30500.00, 38735.00, 0.760, 18, 0.770, 0.060, 3, 'v0-stub',
+ jsonb_build_object('source_quality_weight',0.26,'comparable_similarity_weight',0.19,'sample_depth_weight',0.10,
+ 'recency_weight',0.11,'image_match_weight',0.09,'authenticity_risk_penalty',-0.03,'condition_uncertainty_penalty',-0.05,
+ 'region_gap_penalty',0.00,'fee_model_uncertainty_penalty',-0.01)
+FROM canonical_assets ca WHERE ca.slug = 'birkin-25-togo-gold-ghw-us'
+ON CONFLICT (canonical_asset_id, as_of, methodology_version) DO UPDATE
+ SET q10=EXCLUDED.q10, q50=EXCLUDED.q50, q90=EXCLUDED.q90, liquidity_score=EXCLUDED.liquidity_score,
+ expected_dts=EXCLUDED.expected_dts, confidence=EXCLUDED.confidence, auth_risk=EXCLUDED.auth_risk,
+ comp_count=EXCLUDED.comp_count, breakdown=EXCLUDED.breakdown;
+
+INSERT INTO valuation_snapshots (canonical_asset_id, as_of, q10, q50, q90, liquidity_score, expected_dts, confidence, auth_risk, comp_count, methodology_version, breakdown)
+SELECT ca.id, CURRENT_DATE, 27200.00, 32000.00, 40640.00, 0.820, 16, 0.800, 0.050, 3, 'v0-stub',
+ jsonb_build_object('source_quality_weight',0.27,'comparable_similarity_weight',0.20,'sample_depth_weight',0.11,
+ 'recency_weight',0.12,'image_match_weight',0.10,'authenticity_risk_penalty',-0.03,'condition_uncertainty_penalty',-0.04,
+ 'region_gap_penalty',0.00,'fee_model_uncertainty_penalty',-0.01)
+FROM canonical_assets ca WHERE ca.slug = 'birkin-25-epsom-black-ghw-us'
+ON CONFLICT (canonical_asset_id, as_of, methodology_version) DO UPDATE
+ SET q10=EXCLUDED.q10, q50=EXCLUDED.q50, q90=EXCLUDED.q90, liquidity_score=EXCLUDED.liquidity_score,
+ expected_dts=EXCLUDED.expected_dts, confidence=EXCLUDED.confidence, auth_risk=EXCLUDED.auth_risk,
+ comp_count=EXCLUDED.comp_count, breakdown=EXCLUDED.breakdown;
+
+INSERT INTO valuation_snapshots (canonical_asset_id, as_of, q10, q50, q90, liquidity_score, expected_dts, confidence, auth_risk, comp_count, methodology_version, breakdown)
+SELECT ca.id, CURRENT_DATE, 24225.00, 28500.00, 36195.00, 0.700, 25, 0.680, 0.080, 2, 'v0-stub',
+ jsonb_build_object('source_quality_weight',0.24,'comparable_similarity_weight',0.17,'sample_depth_weight',0.08,
+ 'recency_weight',0.10,'image_match_weight',0.08,'authenticity_risk_penalty',-0.05,'condition_uncertainty_penalty',-0.06,
+ 'region_gap_penalty',0.00,'fee_model_uncertainty_penalty',-0.02)
+FROM canonical_assets ca WHERE ca.slug = 'birkin-25-clemence-etoupe-phw-us'
+ON CONFLICT (canonical_asset_id, as_of, methodology_version) DO UPDATE
+ SET q10=EXCLUDED.q10, q50=EXCLUDED.q50, q90=EXCLUDED.q90, liquidity_score=EXCLUDED.liquidity_score,
+ expected_dts=EXCLUDED.expected_dts, confidence=EXCLUDED.confidence, auth_risk=EXCLUDED.auth_risk,
+ comp_count=EXCLUDED.comp_count, breakdown=EXCLUDED.breakdown;
+
+INSERT INTO valuation_snapshots (canonical_asset_id, as_of, q10, q50, q90, liquidity_score, expected_dts, confidence, auth_risk, comp_count, methodology_version, breakdown)
+SELECT ca.id, CURRENT_DATE, 19550.00, 23000.00, 29210.00, 0.830, 14, 0.810, 0.050, 3, 'v0-stub',
+ jsonb_build_object('source_quality_weight',0.27,'comparable_similarity_weight',0.20,'sample_depth_weight',0.13,
+ 'recency_weight',0.11,'image_match_weight',0.10,'authenticity_risk_penalty',-0.03,'condition_uncertainty_penalty',-0.04,
+ 'region_gap_penalty',0.00,'fee_model_uncertainty_penalty',-0.01)
+FROM canonical_assets ca WHERE ca.slug = 'birkin-30-togo-black-ghw-us'
+ON CONFLICT (canonical_asset_id, as_of, methodology_version) DO UPDATE
+ SET q10=EXCLUDED.q10, q50=EXCLUDED.q50, q90=EXCLUDED.q90, liquidity_score=EXCLUDED.liquidity_score,
+ expected_dts=EXCLUDED.expected_dts, confidence=EXCLUDED.confidence, auth_risk=EXCLUDED.auth_risk,
+ comp_count=EXCLUDED.comp_count, breakdown=EXCLUDED.breakdown;
+
+INSERT INTO valuation_snapshots (canonical_asset_id, as_of, q10, q50, q90, liquidity_score, expected_dts, confidence, auth_risk, comp_count, methodology_version, breakdown)
+SELECT ca.id, CURRENT_DATE, 19975.00, 23500.00, 29845.00, 0.770, 19, 0.750, 0.060, 2, 'v0-stub',
+ jsonb_build_object('source_quality_weight',0.25,'comparable_similarity_weight',0.18,'sample_depth_weight',0.10,
+ 'recency_weight',0.10,'image_match_weight',0.09,'authenticity_risk_penalty',-0.04,'condition_uncertainty_penalty',-0.05,
+ 'region_gap_penalty',0.00,'fee_model_uncertainty_penalty',-0.01)
+FROM canonical_assets ca WHERE ca.slug = 'birkin-30-epsom-etoupe-phw-us'
+ON CONFLICT (canonical_asset_id, as_of, methodology_version) DO UPDATE
+ SET q10=EXCLUDED.q10, q50=EXCLUDED.q50, q90=EXCLUDED.q90, liquidity_score=EXCLUDED.liquidity_score,
+ expected_dts=EXCLUDED.expected_dts, confidence=EXCLUDED.confidence, auth_risk=EXCLUDED.auth_risk,
+ comp_count=EXCLUDED.comp_count, breakdown=EXCLUDED.breakdown;
+
+INSERT INTO valuation_snapshots (canonical_asset_id, as_of, q10, q50, q90, liquidity_score, expected_dts, confidence, auth_risk, comp_count, methodology_version, breakdown)
+SELECT ca.id, CURRENT_DATE, 17850.00, 21000.00, 26670.00, 0.580, 38, 0.640, 0.110, 3, 'v0-stub',
+ jsonb_build_object('source_quality_weight',0.22,'comparable_similarity_weight',0.15,'sample_depth_weight',0.09,
+ 'recency_weight',0.09,'image_match_weight',0.07,'authenticity_risk_penalty',-0.06,'condition_uncertainty_penalty',-0.07,
+ 'region_gap_penalty',0.00,'fee_model_uncertainty_penalty',-0.02)
+FROM canonical_assets ca WHERE ca.slug = 'birkin-30-swift-vert-verone-ghw-us'
+ON CONFLICT (canonical_asset_id, as_of, methodology_version) DO UPDATE
+ SET q10=EXCLUDED.q10, q50=EXCLUDED.q50, q90=EXCLUDED.q90, liquidity_score=EXCLUDED.liquidity_score,
+ expected_dts=EXCLUDED.expected_dts, confidence=EXCLUDED.confidence, auth_risk=EXCLUDED.auth_risk,
+ comp_count=EXCLUDED.comp_count, breakdown=EXCLUDED.breakdown;
+
+INSERT INTO valuation_snapshots (canonical_asset_id, as_of, q10, q50, q90, liquidity_score, expected_dts, confidence, auth_risk, comp_count, methodology_version, breakdown)
+SELECT ca.id, CURRENT_DATE, 16575.00, 19500.00, 24765.00, 0.620, 33, 0.700, 0.070, 3, 'v0-stub',
+ jsonb_build_object('source_quality_weight',0.23,'comparable_similarity_weight',0.16,'sample_depth_weight',0.11,
+ 'recency_weight',0.09,'image_match_weight',0.08,'authenticity_risk_penalty',-0.04,'condition_uncertainty_penalty',-0.05,
+ 'region_gap_penalty',0.00,'fee_model_uncertainty_penalty',-0.01)
+FROM canonical_assets ca WHERE ca.slug = 'birkin-35-togo-gold-ghw-us'
+ON CONFLICT (canonical_asset_id, as_of, methodology_version) DO UPDATE
+ SET q10=EXCLUDED.q10, q50=EXCLUDED.q50, q90=EXCLUDED.q90, liquidity_score=EXCLUDED.liquidity_score,
+ expected_dts=EXCLUDED.expected_dts, confidence=EXCLUDED.confidence, auth_risk=EXCLUDED.auth_risk,
+ comp_count=EXCLUDED.comp_count, breakdown=EXCLUDED.breakdown;
+
+INSERT INTO valuation_snapshots (canonical_asset_id, as_of, q10, q50, q90, liquidity_score, expected_dts, confidence, auth_risk, comp_count, methodology_version, breakdown)
+SELECT ca.id, CURRENT_DATE, 16150.00, 19000.00, 24130.00, 0.560, 42, 0.660, 0.090, 2, 'v0-stub',
+ jsonb_build_object('source_quality_weight',0.21,'comparable_similarity_weight',0.15,'sample_depth_weight',0.08,
+ 'recency_weight',0.08,'image_match_weight',0.07,'authenticity_risk_penalty',-0.05,'condition_uncertainty_penalty',-0.06,
+ 'region_gap_penalty',0.00,'fee_model_uncertainty_penalty',-0.02)
+FROM canonical_assets ca WHERE ca.slug = 'birkin-35-clemence-black-phw-us'
+ON CONFLICT (canonical_asset_id, as_of, methodology_version) DO UPDATE
+ SET q10=EXCLUDED.q10, q50=EXCLUDED.q50, q90=EXCLUDED.q90, liquidity_score=EXCLUDED.liquidity_score,
+ expected_dts=EXCLUDED.expected_dts, confidence=EXCLUDED.confidence, auth_risk=EXCLUDED.auth_risk,
+ comp_count=EXCLUDED.comp_count, breakdown=EXCLUDED.breakdown;
+
+INSERT INTO valuation_snapshots (canonical_asset_id, as_of, q10, q50, q90, liquidity_score, expected_dts, confidence, auth_risk, comp_count, methodology_version, breakdown)
+SELECT ca.id, CURRENT_DATE, 31025.00, 36500.00, 46355.00, 0.800, 17, 0.820, 0.040, 3, 'v0-stub',
+ jsonb_build_object('source_quality_weight',0.28,'comparable_similarity_weight',0.21,'sample_depth_weight',0.12,
+ 'recency_weight',0.12,'image_match_weight',0.10,'authenticity_risk_penalty',-0.02,'condition_uncertainty_penalty',-0.04,
+ 'region_gap_penalty',0.00,'fee_model_uncertainty_penalty',-0.01)
+FROM canonical_assets ca WHERE ca.slug = 'kelly-25-sellier-epsom-black-ghw-us'
+ON CONFLICT (canonical_asset_id, as_of, methodology_version) DO UPDATE
+ SET q10=EXCLUDED.q10, q50=EXCLUDED.q50, q90=EXCLUDED.q90, liquidity_score=EXCLUDED.liquidity_score,
+ expected_dts=EXCLUDED.expected_dts, confidence=EXCLUDED.confidence, auth_risk=EXCLUDED.auth_risk,
+ comp_count=EXCLUDED.comp_count, breakdown=EXCLUDED.breakdown;
+
+INSERT INTO valuation_snapshots (canonical_asset_id, as_of, q10, q50, q90, liquidity_score, expected_dts, confidence, auth_risk, comp_count, methodology_version, breakdown)
+SELECT ca.id, CURRENT_DATE, 25500.00, 30000.00, 38100.00, 0.730, 22, 0.720, 0.060, 2, 'v0-stub',
+ jsonb_build_object('source_quality_weight',0.25,'comparable_similarity_weight',0.18,'sample_depth_weight',0.09,
+ 'recency_weight',0.10,'image_match_weight',0.09,'authenticity_risk_penalty',-0.04,'condition_uncertainty_penalty',-0.05,
+ 'region_gap_penalty',0.00,'fee_model_uncertainty_penalty',-0.01)
+FROM canonical_assets ca WHERE ca.slug = 'kelly-25-retourne-togo-gold-ghw-us'
+ON CONFLICT (canonical_asset_id, as_of, methodology_version) DO UPDATE
+ SET q10=EXCLUDED.q10, q50=EXCLUDED.q50, q90=EXCLUDED.q90, liquidity_score=EXCLUDED.liquidity_score,
+ expected_dts=EXCLUDED.expected_dts, confidence=EXCLUDED.confidence, auth_risk=EXCLUDED.auth_risk,
+ comp_count=EXCLUDED.comp_count, breakdown=EXCLUDED.breakdown;
+
+INSERT INTO valuation_snapshots (canonical_asset_id, as_of, q10, q50, q90, liquidity_score, expected_dts, confidence, auth_risk, comp_count, methodology_version, breakdown)
+SELECT ca.id, CURRENT_DATE, 23375.00, 27500.00, 34925.00, 0.750, 20, 0.760, 0.060, 3, 'v0-stub',
+ jsonb_build_object('source_quality_weight',0.26,'comparable_similarity_weight',0.19,'sample_depth_weight',0.11,
+ 'recency_weight',0.11,'image_match_weight',0.09,'authenticity_risk_penalty',-0.04,'condition_uncertainty_penalty',-0.05,
+ 'region_gap_penalty',0.00,'fee_model_uncertainty_penalty',-0.01)
+FROM canonical_assets ca WHERE ca.slug = 'kelly-28-sellier-epsom-etoupe-phw-us'
+ON CONFLICT (canonical_asset_id, as_of, methodology_version) DO UPDATE
+ SET q10=EXCLUDED.q10, q50=EXCLUDED.q50, q90=EXCLUDED.q90, liquidity_score=EXCLUDED.liquidity_score,
+ expected_dts=EXCLUDED.expected_dts, confidence=EXCLUDED.confidence, auth_risk=EXCLUDED.auth_risk,
+ comp_count=EXCLUDED.comp_count, breakdown=EXCLUDED.breakdown;
+
+INSERT INTO valuation_snapshots (canonical_asset_id, as_of, q10, q50, q90, liquidity_score, expected_dts, confidence, auth_risk, comp_count, methodology_version, breakdown)
+SELECT ca.id, CURRENT_DATE, 19975.00, 23500.00, 29845.00, 0.790, 18, 0.780, 0.050, 2, 'v0-stub',
+ jsonb_build_object('source_quality_weight',0.26,'comparable_similarity_weight',0.19,'sample_depth_weight',0.10,
+ 'recency_weight',0.11,'image_match_weight',0.09,'authenticity_risk_penalty',-0.03,'condition_uncertainty_penalty',-0.05,
+ 'region_gap_penalty',0.00,'fee_model_uncertainty_penalty',-0.01)
+FROM canonical_assets ca WHERE ca.slug = 'kelly-28-retourne-togo-black-ghw-us'
+ON CONFLICT (canonical_asset_id, as_of, methodology_version) DO UPDATE
+ SET q10=EXCLUDED.q10, q50=EXCLUDED.q50, q90=EXCLUDED.q90, liquidity_score=EXCLUDED.liquidity_score,
+ expected_dts=EXCLUDED.expected_dts, confidence=EXCLUDED.confidence, auth_risk=EXCLUDED.auth_risk,
+ comp_count=EXCLUDED.comp_count, breakdown=EXCLUDED.breakdown;
+
+INSERT INTO valuation_snapshots (canonical_asset_id, as_of, q10, q50, q90, liquidity_score, expected_dts, confidence, auth_risk, comp_count, methodology_version, breakdown)
+SELECT ca.id, CURRENT_DATE, 14875.00, 17500.00, 22225.00, 0.600, 36, 0.650, 0.080, 2, 'v0-stub',
+ jsonb_build_object('source_quality_weight',0.22,'comparable_similarity_weight',0.16,'sample_depth_weight',0.08,
+ 'recency_weight',0.09,'image_match_weight',0.07,'authenticity_risk_penalty',-0.05,'condition_uncertainty_penalty',-0.06,
+ 'region_gap_penalty',0.00,'fee_model_uncertainty_penalty',-0.02)
+FROM canonical_assets ca WHERE ca.slug = 'kelly-32-retourne-clemence-gold-ghw-us'
+ON CONFLICT (canonical_asset_id, as_of, methodology_version) DO UPDATE
+ SET q10=EXCLUDED.q10, q50=EXCLUDED.q50, q90=EXCLUDED.q90, liquidity_score=EXCLUDED.liquidity_score,
+ expected_dts=EXCLUDED.expected_dts, confidence=EXCLUDED.confidence, auth_risk=EXCLUDED.auth_risk,
+ comp_count=EXCLUDED.comp_count, breakdown=EXCLUDED.breakdown;
+
+INSERT INTO valuation_snapshots (canonical_asset_id, as_of, q10, q50, q90, liquidity_score, expected_dts, confidence, auth_risk, comp_count, methodology_version, breakdown)
+SELECT ca.id, CURRENT_DATE, 18275.00, 21500.00, 27305.00, 0.660, 28, 0.710, 0.070, 3, 'v0-stub',
+ jsonb_build_object('source_quality_weight',0.24,'comparable_similarity_weight',0.17,'sample_depth_weight',0.10,
+ 'recency_weight',0.10,'image_match_weight',0.08,'authenticity_risk_penalty',-0.04,'condition_uncertainty_penalty',-0.05,
+ 'region_gap_penalty',0.00,'fee_model_uncertainty_penalty',-0.01)
+FROM canonical_assets ca WHERE ca.slug = 'kelly-32-sellier-epsom-black-ghw-us'
+ON CONFLICT (canonical_asset_id, as_of, methodology_version) DO UPDATE
+ SET q10=EXCLUDED.q10, q50=EXCLUDED.q50, q90=EXCLUDED.q90, liquidity_score=EXCLUDED.liquidity_score,
+ expected_dts=EXCLUDED.expected_dts, confidence=EXCLUDED.confidence, auth_risk=EXCLUDED.auth_risk,
+ comp_count=EXCLUDED.comp_count, breakdown=EXCLUDED.breakdown;
+
+-- ---------------------------------------------------------------------------
+-- indices — 3 new benchmarks with 4 history points each (2022-12-31 → 2025-12-31)
+-- ---------------------------------------------------------------------------
+
+INSERT INTO indices (slug, name, definition, methodology_version) VALUES
+ ('birkin-25-neutral',
+ 'Birkin 25 — Neutral Colors',
+ jsonb_build_object('size','25','colors',jsonb_build_array('Black','Gold','Etoupe','Nata'),'region','US'),
+ 'v0-stub')
+ON CONFLICT (slug) DO NOTHING;
+
+INSERT INTO index_points (index_id, as_of, value, change_pct)
+SELECT i.id, '2022-12-31'::date, 25800.00, NULL FROM indices i WHERE i.slug = 'birkin-25-neutral'
+ON CONFLICT (index_id, as_of) DO NOTHING;
+INSERT INTO index_points (index_id, as_of, value, change_pct)
+SELECT i.id, '2023-12-31'::date, 27900.00, 0.0814 FROM indices i WHERE i.slug = 'birkin-25-neutral'
+ON CONFLICT (index_id, as_of) DO NOTHING;
+INSERT INTO index_points (index_id, as_of, value, change_pct)
+SELECT i.id, '2024-12-31'::date, 29200.00, 0.0466 FROM indices i WHERE i.slug = 'birkin-25-neutral'
+ON CONFLICT (index_id, as_of) DO NOTHING;
+INSERT INTO index_points (index_id, as_of, value, change_pct)
+SELECT i.id, '2025-12-31'::date, 30650.00, 0.0497 FROM indices i WHERE i.slug = 'birkin-25-neutral'
+ON CONFLICT (index_id, as_of) DO NOTHING;
+
+INSERT INTO indices (slug, name, definition, methodology_version) VALUES
+ ('kelly-sellier-premium',
+ 'Kelly Sellier — All Sizes',
+ jsonb_build_object('construction','Sellier','sizes',jsonb_build_array('25','28','32','35'),'region','US'),
+ 'v0-stub')
+ON CONFLICT (slug) DO NOTHING;
+
+INSERT INTO index_points (index_id, as_of, value, change_pct)
+SELECT i.id, '2022-12-31'::date, 24200.00, NULL FROM indices i WHERE i.slug = 'kelly-sellier-premium'
+ON CONFLICT (index_id, as_of) DO NOTHING;
+INSERT INTO index_points (index_id, as_of, value, change_pct)
+SELECT i.id, '2023-12-31'::date, 26700.00, 0.1033 FROM indices i WHERE i.slug = 'kelly-sellier-premium'
+ON CONFLICT (index_id, as_of) DO NOTHING;
+INSERT INTO index_points (index_id, as_of, value, change_pct)
+SELECT i.id, '2024-12-31'::date, 27950.00, 0.0468 FROM indices i WHERE i.slug = 'kelly-sellier-premium'
+ON CONFLICT (index_id, as_of) DO NOTHING;
+INSERT INTO index_points (index_id, as_of, value, change_pct)
+SELECT i.id, '2025-12-31'::date, 29550.00, 0.0572 FROM indices i WHERE i.slug = 'kelly-sellier-premium'
+ON CONFLICT (index_id, as_of) DO NOTHING;
+
+INSERT INTO indices (slug, name, definition, methodology_version) VALUES
+ ('recent-stamp-premium',
+ 'Recent Stamp Premium — Birkin/Kelly 2023+',
+ jsonb_build_object('families',jsonb_build_array('birkin','kelly'),'date_stamp_year_min',2023,'region','US'),
+ 'v0-stub')
+ON CONFLICT (slug) DO NOTHING;
+
+INSERT INTO index_points (index_id, as_of, value, change_pct)
+SELECT i.id, '2022-12-31'::date, 1.080, NULL FROM indices i WHERE i.slug = 'recent-stamp-premium'
+ON CONFLICT (index_id, as_of) DO NOTHING;
+INSERT INTO index_points (index_id, as_of, value, change_pct)
+SELECT i.id, '2023-12-31'::date, 1.115, 0.0324 FROM indices i WHERE i.slug = 'recent-stamp-premium'
+ON CONFLICT (index_id, as_of) DO NOTHING;
+INSERT INTO index_points (index_id, as_of, value, change_pct)
+SELECT i.id, '2024-12-31'::date, 1.142, 0.0242 FROM indices i WHERE i.slug = 'recent-stamp-premium'
+ON CONFLICT (index_id, as_of) DO NOTHING;
+INSERT INTO index_points (index_id, as_of, value, change_pct)
+SELECT i.id, '2025-12-31'::date, 1.168, 0.0228 FROM indices i WHERE i.slug = 'recent-stamp-premium'
+ON CONFLICT (index_id, as_of) DO NOTHING;
← cfa428e server + console + valuation API + smoke tests
·
back to Lifestyle Asset Intel
·
real confidence calc + sparklines + portfolio CRUD (Max It b 917d044 →