Skip to content

midt-bg/sigma

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 setup    # еднократно при ново сваляне: инсталиране + локален D1 + начални данни
pnpm dev      # ежедневно: пуска приложението и ETL worker-а паралелно

pnpm 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 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

License

Contributing

Stars

70 stars

Watchers

6 watching

Forks

Packages

 
 
 

Contributors