docs: public data + machine-readable endpoints reference (#54) - #149
Conversation
An external dev (midt-bg#54) asked where to find docs for the data source to build a location-based app. Document what exists: CSV exports (honouring the list filters), per-contract JSON, sitemaps, the shared query/filter grammar, the CC-BY source/licence, rate limits, and the explicit non-goals (no open SQL/REST query endpoint — matches the security posture). Linked from docs/README. Closes midt-bg#54
nedda76
left a comment
There was a problem hiding this comment.
Хубав и точен документ — нужен е за външни разработчици (#54). Спот-проверих endpoint-ите и филтър-параметрите спрямо реалните routes: съвпадат, формулировките за кеш/rate-limit/лиценз също.
Едно за подредбата (не по съдържанието): редът „CSV-тата уважават същите филтри като списъка" е точно поведението, което #146/#138 поправя — на main днес /contracts.csv още игнорира ?bids, така че твърдението става напълно вярно чак след merge на #146. Бих мерджнала #149 след #146 (или с кратка уговорка дотогава), за да не изпревари документът кода за кратко. Иначе — готова за merge. 🙏
lyubomir-bozhinov
left a comment
There was a problem hiding this comment.
Преди merge — този PR рекламира точно повърхностите, които #173 маркира като изтичане на ЕИК на физически лица (CWE-359 · GDPR Art. 4/5 · ЗЗЛД), и то без бележка за физически лица:
- ред 41:
GET /contracts/{id}.json→ „пълният запис на договора" (JSON-ът носиeik+ сурови имена от източника; сервира се сCache-Control: public, s-maxage=…и безX-Robots-Tag). - редове 31–33:
/contracts.csv,/companies.csv,/authorities.csv(CSV-тата съдържат ЕИК на физически лица). - редове 17–18: ЕИК като ключ на субекта, без разграничение ЕТ / физическо лице.
- секцията за sitemap-и насърчава програмно изброяване на „всички URL-и (вкл. всеки договор)".
HTML профилите вече слагат noindex за физически лица (company.tsx), а машинно-четимите повърхности — не. Тоест документацията промотира за bulk/индексируема консумация повърхност с нерешен privacy дефект.
Не блокирам самия текст — фактологически е верен. Но предлагам да изчака политиката по #173 (или поне да добави кратка бележка в api.md за идентификаторите на физически лица), за да не насърчава bulk консумацията преди #173 да е затворен. Бележката за „CSV-тата уважават същите филтри като HTML списъка" пък важи чак след #146.
|
Благодаря за прегледа — двете бележки са добавени в
|
…eguards The note claimed sitemaps carry natural-person ЕИК and that the model does not yet distinguish ЕТ from legal entities. The code does distinguish them: recognised ЕТ profiles are noindex and /sitemap-companies.xml drops ЕТ-named profiles (name-prefix heuristic, so not exhaustive). Scope the caveat to the outputs that really carry undifferentiated ЕИК (CSV exports, contract JSON) and stop promising "all URLs" in the sitemap section.
|
Прегледах
Иначе точен и полезен. Approve по същество след горните уточнения. |
|
Двете уточнения са добавени в af568c7: бележката за източника вече казва, че при малкия набор |
|
✅ Проверих всичко срещу кода. Готово с прегледа. Ето финалния коментар (само той, за публикуване): Прегледах този PR стриктно — с фокус върху сигурност, лични данни и целостта на данните. PR-ът е само документация ( Сверено 1:1 с кода (всичко се потвърждава):
Целост на данните и лични данни: документът не въвежда дефект — той описва съществуващи повърхности. Основната останала грижа (промотиране на bulk/машинно четими изходи, които носят ЕИК на физически лица преди затваряне на #173 — CWE-359 · GDPR чл. 4/5 · ЗЗЛД) е изрично оградена с бележка на редове 47–53, насочваща потребителите да третират полетата като лични данни. Това е приемливо смекчаване за документ, докато политиката по #173 се финализира. Дребни бележки (не блокиращи, вече повдигнати от рецензентите):
Няма следи от зловреден код, backdoor, обфускация или ексфилтрация. Чисто, точно и полезно за външните разработчици (#54). Благодаря за прилежната работа по caveat-ите — рядко се вижда документация, която честно описва собствените си все-още-неслети зависимости. 🙏 Verdict: APPROVE — само-документация, фактологически вярна и сверена с кода; препоръчвам merge след (или заедно с) #146 и #185, а #173 да се проследи отделно. |
…rate-limit) Removes two 'Временно' notes: the midt-bg#146 one (/contracts.csv now honours bids - midt-bg#146 is merged) and the note stating the .data variants are un-rate-limited until midt-bg#185 (do not publicly document an un-throttled surface; the gap stays tracked in midt-bg#184/midt-bg#185).
Какво и защо
Външен разработчик (#54, Явор) пита къде е документацията за източника на данни, за да направи location-based мобилно приложение. Този PR добавя
docs/api.md— справка за наличните публични данни и машинно четими endpoint-и, така че да се строи върху СИГМА без HTML скрейпинг.Покрива (всичко проверено спрямо реалните routes):
/contracts.csv,/companies.csv,/authorities.csv— уважават същите филтри като списъците./contracts/{id}.json— пълният запис на договора.year/sector/procedure/value/eu/authority/bidder/q/bids/sort, и т.н.), вкл. multi-value и keyset курсора.storage.eop.bg.Линкнат от
docs/README.md.Валидация: endpoint-ите, content-type-овете и параметрите са сверени 1:1 с
apps/web/app/routes.ts,contract.json.tsx,contracts.csv.tsxиlib/filters.ts. prettier чист.Closes #54