Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

383 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

СИГМА

Платформа за прозрачност на обществените поръчки. Публичен портал, който събира на едно място отворените данни за българските обществени поръчки от официалния регистър (ЦАИС ЕОП / АОП), свързва институции → договори → компании и прави всяка сума проследима до конкретния договор — кой, на кого, колко и с каква история. Отворени данни за граждани, журналисти и НПО.

Публичен портал: sigma.midt.bg · данни от 2020 г. до днес, с ежедневно обновяване от официалния регистър.

Обществените поръчки са сред най-големите разходи на държавата — милиарди левове всяка година. Доскоро да проследиш една поръчка изискваше експертиза и месеци ровене в стотици записи; СИГМА ги събира в свързана, търсима и сваляема картина, в която всеки тръгва от възложител или фирма и стига до конкретните договори.

Документация

Дизайнът и решенията живеят в docs/ — започнете оттам:

  • docs/architecture.md — преглед на системата и карта към решенията.
  • docs/adr/ — Architecture Decision Records (по едно решение на файл).
  • docs/core-scope.md — доменен модел и речник на данните.
  • docs/etl.md — ETL pipeline-ът и емисията от ЦАИС ЕОП.
  • docs/deploy.md — деплой към Cloudflare.
  • docs/spec/ai-assistant.md — спецификация на AI асистента (планиран).
  • docs/README.mdпълен индекс на документацията, вкл. достъпност и стандартите за ревю.

Какво показва текущата версия

Справочник само за четене върху три същности и връзките между тях:

  • Институция — възложителят;
  • Компания — получателят, с ключ ЕИК;
  • Договор — сключеният договор;

плюс паричните потоци институция → компания и глобалното търсене, които свързват трите същности в един общ граф.

Страница Route На какъв въпрос отговаря
Начало / Обобщени суми + входни точки (най-големите възложители и получатели)
Институции /authorities Всички възложители, с подреждане и филтри
Профил на институция /authorities/[eik] Един възложител: колко, за какво, към кого
Компании /companies Получателите; по подразбиране подредени по спечелена сума
Профил на компания /companies/[eik] Един получател: общо спечелено, от кого, какво
Договори /contracts Филтриран списък с договори
Детайл на договор /contracts/[id] Една сделка с пълна проследимост до източника
Потоци /flows Парични потоци възложител → компания (суми + брой)
Търсене /search По имена, предмет и идентификатори

Списъците имат CSV експорт (/contracts.csv, /companies.csv, /authorities.csv), всеки договор — JSON изглед (/contracts/[id].json). Има и страници за методология, достъпност, поверителност и impressum, плюс robots.txt и sitemap файлове.

Накъде върви

Прозрачността върху публичните данни работи днес. Следващите стъпки надграждат същата структура, която вече ги предвижда, затова нищо не се преправя наново:

  • Слой „собственици и свързани лица“ — пълно свързване с Търговския регистър.
  • Автоматични проверки на задания, цени и картели, с публичен рисков индекс на всяка поръчка (зелено / жълто / червено) — с публична методология и отворен код.
  • AI асистент на български — разговорен слой над данните (текст и глас): намира и обяснява поръчките и изготвя справки.

Освен контрол, целта е и да помага на малкия и средния бизнес да намира лесно подходящите за него поръчки. СИГМА е част от инициативите на МИДТ за прозрачност чрез отворени данни.

Бърз старт

Хранилището е пригодено за разработка в Devcontainer — вашата машина се нуждае от Docker (или съвместим: OrbStack, Rancher Desktop) и редактор с поддръжка на Devcontainer (VS Code, JetBrains и др.).

# Отворете папката в редактора и "Reopen in Container"
# (или от CLI: `devcontainer up --workspace-folder .`)

pnpm run setup  # еднократно при ново сваляне: инсталиране + локален D1 + начални данни
pnpm dev        # ежедневно: пуска приложението и ETL worker-а паралелно

pnpm run setup инсталира зависимостите, прилага D1 миграциите и зарежда малък примерен набор данни (scripts/seed.sql) в локалната miniflare база. pnpm dev стартира приложението на http://localhost:5173 и ETL worker-а на :8789. Пълният корпус се зарежда с pnpm run import — изисква свалената EOP емисия в data/eop (виж ETL).

Статус: прототип. Приложението и refresh worker-ът работят локално и се деплойват на Cloudflare през GitHub Actions; аналитичният слой (оценка на риска, аномалии, картели) е в плана за развитие.

Структура на хранилището

СИГМА използва изпитан единен TypeScript monorepo (pnpm + turbo) върху edge платформата на Cloudflare. Днес продуктът използва Workers (React Router v7 SSR) + D1 + Cloudflare Workflows; останалите услуги на платформата (Durable Objects, Vectorize, Workers AI, Queues, KV, R2, AI Gateway) са на разположение за аналитичния слой.

Директория Съдържание
apps/web Worker sigma — React Router v7 SSR приложение; чете D1 директно през @sigma/db
apps/etl Worker sigma-etl — cron-only опресняване на данните (durable Workflow sigma-refresh)
packages/ Споделени библиотеки — @sigma/db (схема, миграции, заявки), @sigma/ingest, @sigma/api-contract, @sigma/config, @sigma/shared
scripts/ Bootstrap, setup, teardown, рендериране на wrangler конфига; зареждане на данни от ЦАИС ЕОП (load-eop.mjs, import.mjs, normalize-raw.sql и съпътстващите SQL стъпки)
data/ Кешираната storage.eop.bg емисия под data/eop — ~192 хил. договора от 2020 г. насам; gitignored. Зарежда се в D1 от pipeline-а в scripts/ — виж docs/etl.md
docs/ Спецификация и дизайн документи
.devcontainer/ Контейнерна dev среда
.github/workflows/ ci.yml — lint, typecheck, тестове, одит на зависимостите и сканиране за тайни при push и PR; deploy.yml — деплой при release tag (v* → production) или ръчно стартиране (staging/production)

Често използвани команди

Команда Предназначение
pnpm run setup Първоначална настройка при ново сваляне (инсталиране + миграции + начални данни)
pnpm dev Пуска приложението и ETL worker-а локално (miniflare)
pnpm typecheck Проверка на типовете в целия проект
pnpm test Пуска всички тестове
pnpm lint / format Prettier проверка / форматиране
pnpm run import Зарежда EOP емисията в локалния D1 и преизгражда производните таблици; --catchup сам изчислява прозореца за догонване. run е задължително; голото pnpm import е вградена pnpm команда
pnpm bootstrap Пробно създаване на Cloudflare ресурсите (еднократно за Cloudflare профил); bootstrap:apply ги създава реално
pnpm run deploy Деплой на двата Worker-а; в CI се пуска при release tag или ръчно. run е задължително; голото pnpm deploy е вградена pnpm команда
pnpm teardown Изтрива локалното miniflare състояние (.wrangler на двата worker-а)

ETL

Историческата база на ЦАИС ЕОП се зарежда от публичната EOP MinIO емисия с отворени данни: scripts/load-eop.mjs сваля и подготвя дневните bucket-и (по подразбиране пише SQL файлове и ги прилага само с --apply), а scripts/import.mjs прилага локалните D1 миграции, зарежда емисията и преизгражда производните таблици. Базовият адрес по подразбиране е https://storage.eop.bg и може да се подмени с EOP_OPEN_DATA_BASE_URL.

В production worker-ът sigma-etl опреснява базата на всеки 6 часа (cron 0 */6 * * *), като стартира durable Workflow sigma-refresh върху малък скорошен прозорец; големите догонвания остават за CLI-то (pnpm run import --catchup). Подробности — в docs/etl.md.

Оперативна сигурност

Production деплоите тръгват само от GitHub Actions (release tag или ръчно стартиране); машината за разработка никога не държи дълготрайни production данни за достъп. Данните за обществени поръчки са публични по дизайн, но интеграциите с национални регистри (НАП, Търговски регистър) носят ограничения за достъп — третирайте всички данни за достъп до тях като production тайни.

Лиценз

Лицензиран под MIT — виж LICENSE.

About

СИГМА — платформа за прозрачност на обществените поръчки

Resources

Contributing

Stars

78 stars

Watchers

5 watching

Forks

Releases

Packages

Contributors

Languages