Great points. I should treat this as version tracking, not contractId-only deduplication: contractId as the stable identity, with publishedDate and lastModifiedDate used to detect amendments and reissues.
I’ll also normalize date-only deadlines to the source’s end of day before converting them to UTC, and weight description matches above title matches.
For your workflow, should an amendment create a new alert, or update the existing tender alert with a “changed” label? Thanks, this is exactly the edge-case feedback I was hoping for.
Don't just use contractId for deduplication, throw publishedDate and lastModifiedDate in there too. Trust me, you'll catch all those sneaky amendments and re-issued tenders that would otherwise spam your alerts like crazy. Also do yourself a favor and test the deadline stuff early because different sources are all over the place with how they format dates - UK CF is doing full ISO 8601 timestamps while TED's just dropping calendar dates with no time attached, so you gotta normalize everything to end-of-day for same-day deadlines or you'll miss things. One more thing, when you're running keyword searches, hit the description field first instead of the title, since descriptions pack like 3-4x more technical detail and give you way better signal