Rene Fichtmueller
4299e24e13
fix(scraper): parse FS.com delivery dates + lead_time; fix units_sold K/M inflation
...
FS.com renders per-warehouse availability as a bare word-date on each line
("2 Stk. im DE-Lager, 8. Juli 2026 Lieferbar"). The old regex only matched a
"Lieferung:"/"erwartet:" prefix or numeric dd.mm.yyyy, so warehouse_de/global
delivery_date + backorder_estimated_date were 0% populated across 85k rows, and
lead_time_days was never written at all.
- new fs-com-parse.ts: pure, unit-tested parsers (13 node:test cases).
- extractDeliveryDate finds the bare word/numeric date per warehouse, bounded to
its own line so a date never bleeds to a neighbouring warehouse.
- computeLeadTimeDays = min(delivery_date - today), floored at 0; threaded into
upsertStockObservation (now writes lead_time_days) and upsertPriceObservation.
- parseGermanQty: K/M abbreviations now treat '.' as a decimal ("4.8K"=4800,
"1.4M"=1.4M) instead of stripping it (was "1.4M"->14,000,000 — the outlier).
- units_sold sanity gate at ingest (FS_MAX_UNITS_SOLD, default 2,000,000).
- sql/122: purge impossible historical units_sold, re-document columns as collected.
2026-07-04 22:37:05 +02:00
..
2026-04-28 23:31:13 +02:00
2026-04-27 00:00:14 +02:00
2026-04-28 23:14:06 +02:00
2026-04-27 00:00:14 +02:00
2026-03-30 21:20:23 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-02 02:02:44 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:44:18 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-26 19:00:21 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-05-09 22:16:29 +02:00
2026-05-09 18:22:09 +02:00
2026-05-14 00:08:57 +02:00
2026-05-13 16:36:33 +02:00
2026-04-28 23:31:13 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-28 23:07:26 +02:00
2026-04-27 00:00:14 +02:00
2026-04-26 19:08:09 +02:00
2026-04-27 00:00:14 +02:00
2026-04-28 23:28:10 +02:00
2026-04-27 00:00:14 +02:00
2026-04-26 20:15:54 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-28 23:04:08 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-06 18:03:36 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:44:18 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-26 19:00:21 +02:00
2026-04-28 23:04:08 +02:00
2026-04-27 00:00:14 +02:00
2026-04-11 03:17:33 +02:00
2026-04-27 00:00:14 +02:00
2026-04-20 23:00:00 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:44:18 +02:00
2026-04-27 00:00:14 +02:00
2026-04-26 19:18:31 +02:00
2026-04-27 00:00:14 +02:00
2026-04-02 02:02:44 +02:00
2026-04-27 00:00:14 +02:00
2026-04-28 23:07:26 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-18 01:42:08 +02:00
2026-04-02 02:02:44 +02:00
2026-04-27 00:44:18 +02:00
2026-04-18 01:35:57 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-28 23:24:53 +02:00
2026-04-27 00:00:14 +02:00
2026-04-28 23:28:10 +02:00
2026-05-09 15:56:08 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-28 23:31:13 +02:00
2026-04-26 19:18:31 +02:00
2026-04-27 00:00:14 +02:00
2026-05-10 01:42:24 +02:00
2026-04-27 00:00:14 +02:00
2026-05-06 23:39:00 +02:00
2026-04-28 23:14:06 +02:00
2026-05-09 09:36:28 +02:00
2026-04-20 23:35:02 +02:00
2026-05-09 09:36:28 +02:00
2026-03-30 08:07:12 +02:00
2026-03-27 23:17:42 +13:00
2026-04-06 02:17:50 +02:00
2026-04-27 00:00:14 +02:00
2026-04-28 23:28:10 +02:00
2026-07-04 22:37:05 +02:00
2026-07-04 22:37:05 +02:00
2026-07-04 22:37:05 +02:00
2026-04-27 00:00:14 +02:00
2026-05-09 22:16:29 +02:00
2026-05-09 22:16:29 +02:00
2026-05-10 00:03:42 +02:00
2026-04-27 00:00:14 +02:00
2026-04-02 02:02:44 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-26 19:12:27 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-26 19:16:16 +02:00
2026-04-06 02:17:50 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-28 23:14:06 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-03-28 02:30:19 +13:00
2026-04-27 00:00:14 +02:00
2026-04-26 19:08:09 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-28 22:57:23 +02:00
2026-04-27 00:00:14 +02:00
2026-04-28 23:04:08 +02:00
2026-04-27 00:00:14 +02:00
2026-06-06 21:39:57 +00:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-18 01:09:10 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-11 03:17:33 +02:00
2026-06-06 16:34:02 +00:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:44:18 +02:00
2026-03-31 08:51:22 +02:00
2026-04-02 22:38:00 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-28 23:31:13 +02:00
2026-04-26 19:20:12 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-05-14 00:08:57 +02:00
2026-04-11 19:13:36 +02:00
2026-04-11 03:17:33 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-28 23:28:10 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-11 02:57:13 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-05-09 17:03:35 +02:00
2026-04-27 00:00:14 +02:00
2026-04-28 23:07:26 +02:00
2026-04-27 00:00:14 +02:00
2026-04-28 23:24:53 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-28 22:57:23 +02:00
2026-04-11 03:17:33 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-02 02:02:44 +02:00
2026-04-28 23:24:53 +02:00
2026-05-10 01:42:24 +02:00
2026-05-09 18:22:09 +02:00
2026-04-27 00:00:14 +02:00
2026-04-28 23:24:53 +02:00
2026-04-27 00:00:14 +02:00
2026-04-18 00:21:58 +02:00
2026-04-17 10:45:59 +02:00
2026-04-27 00:00:14 +02:00
2026-03-30 08:07:12 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-02 02:02:44 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-18 02:19:53 +02:00
2026-04-18 02:19:53 +02:00
2026-03-30 08:07:12 +02:00
2026-04-21 07:57:55 +02:00
2026-04-21 07:57:55 +02:00
2026-03-30 08:07:12 +02:00
2026-03-30 08:07:12 +02:00
2026-03-30 08:07:12 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-28 23:04:08 +02:00
2026-04-27 00:00:14 +02:00
2026-04-28 23:07:26 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-05-13 21:33:19 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-05-10 00:03:42 +02:00
2026-04-27 00:44:18 +02:00
2026-04-27 00:00:14 +02:00
2026-04-18 01:35:57 +02:00
2026-04-27 00:44:18 +02:00
2026-04-20 22:18:13 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-03-30 08:07:12 +02:00
2026-04-25 08:55:21 +02:00
2026-04-28 22:57:23 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00
2026-04-27 00:00:14 +02:00