National Accident Stigma Database · Paid POC

Technical Verification Screen

Backend-first proof of concept. Postgres schema, V1 cleaning rules, 3-variable OLS regression solved in pure SQL via Cramer's Rule, and the smart diminished-value RPC with explicit 10%–25% guardrails (floor / ceiling).

1 · Audit Counters

Seven required structural metrics from the audit view.

Original listings
0
Cleaned listings
0
Excluded · old
0
Excluded · mileage
0
Excluded · salvage
0
Excluded · price
0
Excluded · missing
0

2 · Mathematical Validation — Postgres vs Python / Excel

Side-by-side proof: pure-SQL Cramer's Rule output matches the scikit-learn / Excel closed-form OLS benchmark on the seeded Toyota Camry cohort, to the decimal.

Clean cohort (accident_flag = false)
MetricPostgres (Cramer)Python / Excel|Δ|
intercept (β₀)0-2,947,669.6854
year coefficient (β₁)01,470.62949313
mileage coefficient (β₂)0-0.0621497135
r_squared00.9889860361
sample_count18
Accident cohort (accident_flag = true)
MetricPostgres (Cramer)Python / Excel|Δ|
intercept (β₀)0-3,000,175.0619
year coefficient (β₁)01,494.88407012
mileage coefficient (β₂)0-0.0499646763
r_squared00.9730032371
sample_count12

3 · Diminished-Value RPC Calculator

Live execution of get_vehicle_diminished_value() — raw regression DV% vs guardrailed DV% (floor 10%, ceiling 25%).

Cohort lock: POC currently supports Toyota · Camry. Other inputs trigger the strict validation_status = ERROR path.

Loading RPC output…

4 · Raw Listings vs Excluded Rows

Each row labeled with the precise reason for exclusion from listing_audit.

Cleaned dataset · used by OLS matrix (0)
VINYearPriceMileageAcc
Excluded rows · with reason_for_exclusion (0)
VINYearPriceMileageAccReason

5 · SQL Migration Script

The exact migration applied to this Lovable Cloud backend. Copy or download to re-create the schema anywhere.

-- =====================================================================
-- National Accident Stigma Database (NASD) — POC backend (self-contained)
-- =====================================================================

-- 1. BASE TABLE -------------------------------------------------------
CREATE TABLE IF NOT EXISTS public.listings (
  id            BIGSERIAL PRIMARY KEY,
  vin           TEXT,
  year          INT,
  make          TEXT,
  model         TEXT,
  trim          TEXT,
  price         NUMERIC,
  mileage       NUMERIC,
  zipcode       TEXT,
  state         TEXT,
  source        TEXT,
  accident_flag BOOLEAN NOT NULL DEFAULT false,
  listing_date  DATE,
  created_at    TIMESTAMPTZ NOT NULL DEFAULT now()
);

GRANT SELECT, INSERT, UPDATE, DELETE ON public.listings TO authenticated;
GRANT SELECT ON public.listings TO anon;
GRANT ALL ON public.listings TO service_role;
GRANT USAGE, SELECT ON SEQUENCE public.listings_id_seq TO anon, authenticated, service_role;

ALTER TABLE public.listings ENABLE ROW LEVEL SECURITY;

DROP POLICY IF EXISTS "Public read listings (POC)" ON public.listings;
CREATE POLICY "Public read listings (POC)" ON public.listings FOR SELECT USING (true);

CREATE INDEX IF NOT EXISTS idx_listings_make_model ON public.listings (lower(trim(make)), lower(trim(model)));
CREATE INDEX IF NOT EXISTS idx_listings_listing_date ON public.listings (listing_date);
CREATE INDEX IF NOT EXISTS idx_listings_accident_flag ON public.listings (accident_flag);

-- 2. AUDIT VIEW -------------------------------------------------------
CREATE OR REPLACE VIEW public.listing_audit
WITH (security_invoker = true) AS
WITH base AS (
  SELECT l.*,
    CASE WHEN l.vin IS NULL OR l.year IS NULL OR l.make IS NULL
              OR l.model IS NULL OR l.price IS NULL
              OR l.mileage IS NULL OR l.listing_date IS NULL
         THEN 'missing_required_fields' END AS r_missing,
    CASE WHEN l.listing_date IS NOT NULL
              AND l.listing_date < CURRENT_DATE - INTERVAL '365 days'
         THEN 'old_listing' END AS r_old,
    CASE WHEN l.mileage IS NOT NULL AND l.mileage > 250000
         THEN 'mileage_outlier' END AS r_mileage,
    CASE WHEN COALESCE(l.source,'') ~* '(salvage|rebuilt|flood|junk|lemon)'
           OR COALESCE(l.trim,'')   ~* '(salvage|rebuilt|flood|junk|lemon)'
         THEN 'salvage_title' END AS r_salvage
  FROM public.listings l
),
with_median AS (
  SELECT lower(trim(b.make)) AS mk, lower(trim(b.model)) AS mdl,
         percentile_cont(0.5) WITHIN GROUP (ORDER BY b.price) AS cohort_median_price
  FROM base b
  WHERE b.r_missing IS NULL
  GROUP BY lower(trim(b.make)), lower(trim(b.model))
),
flagged AS (
  SELECT b.id, b.vin, b.year, b.make, b.model, b.trim, b.price, b.mileage,
         b.zipcode, b.state, b.source, b.accident_flag, b.listing_date,
         m.cohort_median_price,
         b.r_missing, b.r_old, b.r_mileage, b.r_salvage,
         CASE WHEN m.cohort_median_price IS NOT NULL
                   AND (b.price < 0.25 * m.cohort_median_price
                     OR b.price > 3.00 * m.cohort_median_price)
              THEN 'price_outlier' END AS r_price
  FROM base b
  LEFT JOIN with_median m
    ON m.mk = lower(trim(b.make)) AND m.mdl = lower(trim(b.model))
)
SELECT id, vin, year, make, model, trim, price, mileage, zipcode, state,
       source, accident_flag, listing_date, cohort_median_price,
       COALESCE(r_missing, r_salvage, r_old, r_mileage, r_price) AS reason_for_exclusion,
       (COALESCE(r_missing, r_salvage, r_old, r_mileage, r_price) IS NULL) AS included
FROM flagged;

GRANT SELECT ON public.listing_audit TO anon, authenticated, service_role;

CREATE OR REPLACE VIEW public.cleaned_listings
WITH (security_invoker = true) AS
SELECT id, vin, year, make, model, trim, price, mileage,
       zipcode, state, source, accident_flag, listing_date
FROM public.listing_audit
WHERE included = true;

GRANT SELECT ON public.cleaned_listings TO anon, authenticated, service_role;

CREATE OR REPLACE VIEW public.audit_counts
WITH (security_invoker = true) AS
SELECT
  (SELECT count(*) FROM public.listings)::INT                                          AS original_listing_count,
  (SELECT count(*) FROM public.listing_audit WHERE included)::INT                      AS cleaned_listing_count,
  (SELECT count(*) FROM public.listing_audit WHERE reason_for_exclusion='old_listing')::INT              AS excluded_old_listing_count,
  (SELECT count(*) FROM public.listing_audit WHERE reason_for_exclusion='mileage_outlier')::INT          AS excluded_mileage_outlier_count,
  (SELECT count(*) FROM public.listing_audit WHERE reason_for_exclusion='salvage_title')::INT            AS excluded_salvage_title_count,
  (SELECT count(*) FROM public.listing_audit WHERE reason_for_exclusion='price_outlier')::INT            AS excluded_price_outlier_count,
  (SELECT count(*) FROM public.listing_audit WHERE reason_for_exclusion='missing_required_fields')::INT  AS excluded_missing_required_fields_count;

GRANT SELECT ON public.audit_counts TO anon, authenticated, service_role;

-- 3. OLS REGRESSION via CRAMER'S RULE --------------------------------
CREATE OR REPLACE FUNCTION public.calc_ols_camry(p_accident BOOLEAN)
RETURNS TABLE(
  intercept           NUMERIC,
  year_coefficient    NUMERIC,
  mileage_coefficient NUMERIC,
  sample_count        INT,
  r_squared           NUMERIC
)
LANGUAGE plpgsql STABLE SECURITY INVOKER SET search_path = public
AS $fn$
DECLARE
  n NUMERIC; sy NUMERIC; sm NUMERIC;
  syy NUMERIC; smm NUMERIC; sym NUMERIC;
  sp NUMERIC; syp NUMERIC; smp NUMERIC;
  detA NUMERIC; det0 NUMERIC; det1 NUMERIC; det2 NUMERIC;
  b0 NUMERIC; b1 NUMERIC; b2 NUMERIC;
  mean_p NUMERIC; tss NUMERIC; rss NUMERIC;
BEGIN
  SELECT count(*)::NUMERIC, sum(year::NUMERIC), sum(mileage),
         sum(year::NUMERIC * year::NUMERIC), sum(mileage * mileage),
         sum(year::NUMERIC * mileage), sum(price),
         sum(year::NUMERIC * price), sum(mileage * price), avg(price)
    INTO n, sy, sm, syy, smm, sym, sp, syp, smp, mean_p
    FROM public.cleaned_listings
   WHERE lower(make)='toyota' AND lower(model)='camry' AND accident_flag = p_accident;

  IF n IS NULL OR n < 3 THEN
    intercept:=NULL; year_coefficient:=NULL; mileage_coefficient:=NULL;
    sample_count:=COALESCE(n,0)::INT; r_squared:=NULL; RETURN NEXT; RETURN;
  END IF;

  detA :=  n*(syy*smm - sym*sym) - sy*(sy*smm - sym*sm) + sm*(sy*sym - syy*sm);
  det0 :=  sp*(syy*smm - sym*sym) - sy*(syp*smm - sym*smp) + sm*(syp*sym - syy*smp);
  det1 :=  n*(syp*smm - smp*sym) - sp*(sy*smm - sym*sm) + sm*(sy*smp - syp*sm);
  det2 :=  n*(syy*smp - syp*sym) - sy*(sy*smp - syp*sm) + sp*(sy*sym - syy*sm);

  IF detA = 0 THEN
    intercept:=NULL; year_coefficient:=NULL; mileage_coefficient:=NULL;
    sample_count:=n::INT; r_squared:=NULL; RETURN NEXT; RETURN;
  END IF;

  b0 := det0 / detA; b1 := det1 / detA; b2 := det2 / detA;

  SELECT sum((price - mean_p)^2),
         sum((price - (b0 + b1*year::NUMERIC + b2*mileage))^2)
    INTO tss, rss
    FROM public.cleaned_listings
   WHERE lower(make)='toyota' AND lower(model)='camry' AND accident_flag = p_accident;

  intercept:=b0; year_coefficient:=b1; mileage_coefficient:=b2;
  sample_count:=n::INT;
  r_squared := CASE WHEN tss IS NULL OR tss = 0 THEN NULL ELSE 1 - (rss / tss) END;
  RETURN NEXT;
END;
$fn$;

GRANT EXECUTE ON FUNCTION public.calc_ols_camry(BOOLEAN) TO anon, authenticated, service_role;

-- 4. VALIDATED 21-FIELD DIMINISHED-VALUE RPC --------------------------
DROP FUNCTION IF EXISTS public.get_vehicle_diminished_value(INT, TEXT, TEXT, NUMERIC);
CREATE OR REPLACE FUNCTION public.get_vehicle_diminished_value(
  p_year INT, p_make TEXT, p_model TEXT, p_mileage NUMERIC
)
RETURNS TABLE(
  raw_predicted_clean_value      NUMERIC,
  raw_predicted_accident_value   NUMERIC,
  raw_diminished_value           NUMERIC,
  raw_diminished_value_percent   NUMERIC,
  final_predicted_clean_value    NUMERIC,
  final_predicted_accident_value NUMERIC,
  final_diminished_value         NUMERIC,
  final_diminished_value_percent NUMERIC,
  guardrail_applied              BOOLEAN,
  guardrail_type                 TEXT,
  guardrail_reason               TEXT,
  clean_sample_count             INT,
  accident_sample_count          INT,
  r_squared_clean                NUMERIC,
  r_squared_accident             NUMERIC,
  confidence_score               NUMERIC,
  validation_status              TEXT,
  warning_message                TEXT,
  remedy_applied                 TEXT,
  requires_manual_review         BOOLEAN
)
LANGUAGE plpgsql STABLE SECURITY INVOKER SET search_path = public
AS $rpc$
DECLARE
  c RECORD; a RECORD;
  pred_c NUMERIC; pred_a NUMERIC;
  raw_pct NUMERIC; final_pct NUMERIC;
  g_applied BOOLEAN := false;
  g_type TEXT := 'none';
  g_reason TEXT := 'Within standard defensibility boundaries.';
  v_status TEXT := 'OK';
  v_warn TEXT := 'No warnings.';
  v_remedy TEXT := 'NONE';
  v_review BOOLEAN := false;
  v_conf NUMERIC := 0;
  norm_make TEXT := lower(btrim(coalesce(p_make,'')));
  norm_model TEXT := lower(btrim(coalesce(p_model,'')));
BEGIN
  IF norm_make <> 'toyota' OR norm_model <> 'camry' THEN
    raw_predicted_clean_value:=0; raw_predicted_accident_value:=0;
    raw_diminished_value:=0; raw_diminished_value_percent:=0;
    final_predicted_clean_value:=0; final_predicted_accident_value:=0;
    final_diminished_value:=0; final_diminished_value_percent:=0;
    guardrail_applied:=true; guardrail_type:='unsupported_cohort';
    guardrail_reason:='POC currently supports Toyota Camry only.';
    clean_sample_count:=0; accident_sample_count:=0;
    r_squared_clean:=NULL; r_squared_accident:=NULL; confidence_score:=0;
    validation_status:='ERROR';
    warning_message:='POC currently supports Toyota Camry only.';
    remedy_applied:='UNSUPPORTED_COHORT_BLOCKED'; requires_manual_review:=true;
    RETURN NEXT; RETURN;
  END IF;

  SELECT * INTO c FROM public.calc_ols_camry(false);
  SELECT * INTO a FROM public.calc_ols_camry(true);

  IF c.intercept IS NULL OR a.intercept IS NULL THEN
    raw_predicted_clean_value:=0; raw_predicted_accident_value:=0;
    raw_diminished_value:=0; raw_diminished_value_percent:=0;
    final_predicted_clean_value:=0; final_predicted_accident_value:=0;
    final_diminished_value:=0; final_diminished_value_percent:=0;
    guardrail_applied:=true; guardrail_type:='insufficient_data';
    guardrail_reason:='Not enough cleaned cohort rows (need >= 3 per cohort).';
    clean_sample_count:=COALESCE(c.sample_count,0);
    accident_sample_count:=COALESCE(a.sample_count,0);
    r_squared_clean:=c.r_squared; r_squared_accident:=a.r_squared;
    confidence_score:=0; validation_status:='ERROR';
    warning_message:='Insufficient cleaned cohort data to compute regression.';
    remedy_applied:='ABORTED_LOW_SAMPLE'; requires_manual_review:=true;
    RETURN NEXT; RETURN;
  END IF;

  pred_c := c.intercept + c.year_coefficient*p_year + c.mileage_coefficient*p_mileage;
  pred_a := a.intercept + a.year_coefficient*p_year + a.mileage_coefficient*p_mileage;
  raw_pct := CASE WHEN pred_c > 0 THEN (pred_c - pred_a)/pred_c ELSE NULL END;

  IF raw_pct IS NULL THEN
    final_pct:=0.10; g_applied:=true; g_type:='invalid_prediction';
    g_reason:='Predicted clean value non-positive; defaulted to 10% floor.';
    v_remedy:='CLAMPED_TO_FLOOR_INVALID_PRED'; v_review:=true;
  ELSIF raw_pct*100 < 10 THEN
    final_pct:=0.10; g_applied:=true; g_type:='minimum_threshold';
    g_reason:='Raw observed depreciation below MarketVerify''s 10% minimum DV threshold.';
    v_remedy:='CLAMPED_TO_FLOOR_10PCT'; v_review:=true;
  ELSIF raw_pct*100 > 25 THEN
    final_pct:=0.25; g_applied:=true; g_type:='maximum_threshold';
    g_reason:='Raw observed depreciation exceeded MarketVerify''s 25% maximum V1 threshold.';
    v_remedy:='CLAMPED_TO_CEILING_25PCT'; v_review:=true;
  ELSE
    final_pct:=raw_pct; g_applied:=false; g_type:='none';
    g_reason:='Within standard 10%-25% defensibility boundaries.';
    v_remedy:='NONE'; v_review:=false;
  END IF;

  v_conf := round(LEAST(1.0,
    0.6*GREATEST(0, COALESCE((c.r_squared + a.r_squared)/2.0, 0))
    + 0.4*LEAST(1.0, (c.sample_count + a.sample_count)::NUMERIC/30.0)
  )::NUMERIC, 4);

  IF (c.sample_count + a.sample_count) < 20 THEN v_review:=true; END IF;

  IF g_applied THEN
    v_status:='GUARDRAILED';
    v_warn:='Final DV% adjusted by '||g_type||' guardrail.';
  END IF;

  raw_predicted_clean_value      := pred_c;
  raw_predicted_accident_value   := pred_a;
  raw_diminished_value           := pred_c - pred_a;
  raw_diminished_value_percent   := COALESCE(raw_pct,0)*100;
  final_predicted_clean_value    := pred_c;
  final_predicted_accident_value := pred_c - (pred_c * final_pct);
  final_diminished_value         := pred_c * final_pct;
  final_diminished_value_percent := final_pct * 100;
  guardrail_applied              := g_applied;
  guardrail_type                 := g_type;
  guardrail_reason               := g_reason;
  clean_sample_count             := c.sample_count;
  accident_sample_count          := a.sample_count;
  r_squared_clean                := c.r_squared;
  r_squared_accident             := a.r_squared;
  confidence_score               := v_conf;
  validation_status              := v_status;
  warning_message                := v_warn;
  remedy_applied                 := v_remedy;
  requires_manual_review         := v_review;
  RETURN NEXT;
END;
$rpc$;

GRANT EXECUTE ON FUNCTION public.get_vehicle_diminished_value(INT, TEXT, TEXT, NUMERIC)
  TO anon, authenticated, service_role;

-- 5. SEED.SQL — complete mock dataset (39 rows) -----------------------
INSERT INTO public.listings (id, vin, year, make, model, trim, price, mileage, zipcode, state, source, accident_flag, listing_date) VALUES
(1, '4T1BF1FK000000001', 2021, 'Toyota', 'Camry', 'XLE', 22516.59, 47544, '89817', 'TX', 'autotrader', false, '2026-06-06'),
(2, '4T1BF1FK000000002', 2022, 'Toyota', 'Camry', 'XLE', 24339.7, 20657, '29920', 'WA', 'carmax', false, '2026-03-22'),
(3, '4T1BF1FK000000003', 2017, 'Toyota', 'Camry', 'LE', 16643.84, 32675, '83148', 'NC', 'cargurus', false, '2026-05-23'),
(4, '4T1BF1FK000000004', 2021, 'Toyota', 'Camry', 'XLE', 23255.86, 23204, '87905', 'WA', 'dealer-feed', false, '2026-06-03'),
(5, '4T1BF1FK000000005', 2019, 'Toyota', 'Camry', 'LE', 19971.25, 17829, '45381', 'WA', 'autotrader', false, '2026-03-24'),
(6, '4T1BF1FK000000006', 2017, 'Toyota', 'Camry', 'XLE', 11107.27, 121677, '94820', 'NC', 'carmax', false, '2026-05-23'),
(7, '4T1BF1FK000000007', 2022, 'Toyota', 'Camry', 'XSE', 24268.12, 26312, '97641', 'GA', 'autotrader', false, '2026-06-12'),
(8, '4T1BF1FK000000008', 2019, 'Toyota', 'Camry', 'SE', 18526.87, 31779, '90074', 'TX', 'carmax', false, '2026-03-07'),
(9, '4T1BF1FK000000009', 2022, 'Toyota', 'Camry', 'XLE', 25053.9, 23495, '26952', 'NY', 'carmax', false, '2026-06-28'),
(10, '4T1BF1FK000000010', 2017, 'Toyota', 'Camry', 'XSE', 14886.06, 66520, '20561', 'FL', 'carmax', false, '2026-06-18'),
(11, '4T1BF1FK000000011', 2016, 'Toyota', 'Camry', 'XLE', 9881.55, 111987, '27947', 'PA', 'dealer-feed', false, '2026-05-23'),
(12, '4T1BF1FK000000012', 2016, 'Toyota', 'Camry', 'XSE', 13007.86, 65955, '57024', 'PA', 'cars.com', false, '2026-04-03'),
(13, '4T1BF1FK000000013', 2016, 'Toyota', 'Camry', 'SE', 14842.76, 42910, '29830', 'NY', 'cars.com', false, '2026-03-16'),
(14, '4T1BF1FK000000014', 2020, 'Toyota', 'Camry', 'TRD', 15535.0, 117874, '33900', 'IL', 'cargurus', false, '2026-03-05'),
(15, '4T1BF1FK000000015', 2018, 'Toyota', 'Camry', 'XSE', 17543.91, 38878, '80069', 'GA', 'dealer-feed', false, '2026-05-05'),
(16, '4T1BF1FK000000016', 2020, 'Toyota', 'Camry', 'TRD', 18694.74, 55376, '90949', 'CA', 'carmax', false, '2026-06-13'),
(17, '4T1BF1FK000000017', 2017, 'Toyota', 'Camry', 'XSE', 15433.31, 57249, '61658', 'TX', 'carmax', false, '2026-06-02'),
(18, '4T1BF1FK000000018', 2021, 'Toyota', 'Camry', 'SE', 22444.85, 33540, '18827', 'NY', 'carmax', false, '2026-04-04'),
(19, '4T1BF1FK000000019', 2020, 'Toyota', 'Camry', 'XLE', 18600.33, 28459, '88738', 'CA', 'autotrader', true, '2026-03-19'),
(20, '4T1BF1FK000000020', 2020, 'Toyota', 'Camry', 'SE', 17658.22, 27624, '80335', 'TX', 'cargurus', true, '2026-03-03'),
(21, '4T1BF1FK000000021', 2020, 'Toyota', 'Camry', 'SE', 17180.46, 65990, '90487', 'PA', 'cars.com', true, '2026-05-12'),
(22, '4T1BF1FK000000022', 2019, 'Toyota', 'Camry', 'TRD', 11687.66, 124090, '57731', 'WA', 'autotrader', true, '2026-03-28'),
(23, '4T1BF1FK000000023', 2022, 'Toyota', 'Camry', 'XSE', 17014.72, 94351, '71078', 'WA', 'carmax', true, '2026-05-03'),
(24, '4T1BF1FK000000024', 2019, 'Toyota', 'Camry', 'SE', 12329.65, 130799, '23393', 'GA', 'cargurus', true, '2026-06-27'),
(25, '4T1BF1FK000000025', 2018, 'Toyota', 'Camry', 'SE', 12221.28, 90582, '77676', 'CA', 'cars.com', true, '2026-05-05'),
(26, '4T1BF1FK000000026', 2017, 'Toyota', 'Camry', 'TRD', 11972.93, 59124, '13544', 'CO', 'cargurus', true, '2026-03-23'),
(27, '4T1BF1FK000000027', 2021, 'Toyota', 'Camry', 'XLE', 16769.82, 75988, '77947', 'GA', 'cars.com', true, '2026-05-25'),
(28, '4T1BF1FK000000028', 2016, 'Toyota', 'Camry', 'SE', 8380.36, 90708, '79807', 'CO', 'dealer-feed', true, '2026-05-21'),
(29, '4T1BF1FK000000029', 2020, 'Toyota', 'Camry', 'SE', 12453.29, 141791, '90377', 'NY', 'cars.com', true, '2026-06-24'),
(30, '4T1BF1FK000000030', 2018, 'Toyota', 'Camry', 'SE', 9750.72, 129659, '36203', 'CO', 'carmax', true, '2026-05-24'),
(31, 'OLDLIST00000000001', 2019, 'Toyota', 'Camry', 'LE', 18500, 62000, '90210', 'CA', 'autotrader', false, '2024-03-01'),
(32, 'MILEHIGH000000001', 2014, 'Toyota', 'Camry', 'SE', 9500, 278000, '75001', 'TX', 'cargurus', false, '2026-05-01'),
(33, 'SALVAGE0000000001', 2020, 'Toyota', 'Camry', 'XLE', 12000, 55000, '33101', 'FL', 'copart-salvage-auction', true, '2026-04-15'),
(34, 'REBUILT000000001A', 2021, 'Toyota', 'Camry', 'SE Rebuilt', 15500, 42000, '60601', 'IL', 'craigslist', true, '2026-05-20'),
(35, 'MISSING000000001A', 2020, 'Toyota', 'Camry', 'LE', NULL, 48000, '30301', 'GA', 'autotrader', false, '2026-05-30'),
(36, 'MISSING000000002A', 2019, 'Toyota', 'Camry', 'SE', 17500, NULL, '10001', 'NY', 'cars.com', false, '2026-06-01'),
(37, 'PRICEHI00000000A1', 2022, 'Toyota', 'Camry', 'TRD', 85000, 15000, '94016', 'CA', 'dealer-listing', false, '2026-06-02'),
(38, 'PRICELO00000000A1', 2020, 'Toyota', 'Camry', 'LE', 2500, 68000, '19101', 'PA', 'private-seller', false, '2026-06-03'),
(39, 'FLOOD0000000000A1', 2021, 'Toyota', 'Camry', 'XSE', 14000, 35000, '77001', 'TX', 'flood-recovery-listings', true, '2026-05-10')
ON CONFLICT (id) DO NOTHING;
SELECT setval('public.listings_id_seq', (SELECT max(id) FROM public.listings));
Loading verification data…