rates/backend
jtricerolph 38b0c36923 Use text-search approach for rate conditions (breakfast/cancel/payment)
Original scrapy approach: extract <li> condition lines from each rate plan row
and text-search for known keywords. No match = null (unknown), not assumed false.

Adds breakfast_text, cancel_text, payment_text columns to booking_com_rates.
Booleans now nullable (null = not mentioned, true/false = explicit signal).

JS extraction searches all <li> items in the row (falls back to newline-split
innerText if none). Breakfast: 'breakfast' keyword. Cancel: 'free cancellation',
'non-refundable', 'total cost to cancel', 'fully chargeable'. Payment: 'no
prepayment', 'pay at the property', 'pay online'. data-fltrs used as fallback.

API snapshot endpoint now returns breakfast/cancel/payment text strings. Old
boolean-only rows degrade gracefully to derived labels.

Modal plan rows replace the fixed meal|cancel|price column layout with a single
stacked conditions cell: 0-3 lines depending on what the page actually shows.
Breakfast green when 'included', cancel green when 'Free cancellation…'.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-14 18:10:00 +00:00
..
api Use text-search approach for rate conditions (breakfast/cancel/payment) 2026-07-14 18:10:00 +00:00
jobs Fix booking scrape date selection — oldest-first tiered distribution 2026-07-14 09:39:35 +00:00
services Use text-search approach for rate conditions (breakfast/cancel/payment) 2026-07-14 18:10:00 +00:00
auth.py
database.py
Dockerfile Revert Firefox: root cause was broken DataImpulse nodes not fingerprinting 2026-07-10 09:54:50 +00:00
main.py Add Power BI reporting endpoints — flat tabular data via API key auth 2026-07-14 17:27:50 +00:00
migrate_direct_data.py
requirements.txt
scheduler.py Scraper: force-reset endpoint + watchdog to prevent stuck lock 2026-07-09 16:56:35 +00:00
schema.sql Use text-search approach for rate conditions (breakfast/cancel/payment) 2026-07-14 18:10:00 +00:00