AAYMA
RU
Войти

Аким на 5 часов

Веб-симулятор с интерактивной картой Астаны: пользователь выбирает 5 мероприятий из 16 в пределах бюджета 100 единиц и видит изменения по районам и…

Доведённый продукт
Команда «Алем жив» 13💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: Алем жив
Кейс HackAlem.ai: Спецтрек — Astana Innovations
Стадия: Доведённый продукт

Задача кейса: «Аким на 5 часов»: городской симулятор, распределяющий бюджет по 5 направлениям и 5 районам

Суть

Веб-симулятор с интерактивной картой Астаны: пользователь выбирает 5 мероприятий из 16 в пределах бюджета 100 единиц и видит изменения по районам и итоговый Astana Quality of Life Score. Результат объясняет AI, есть чат-ассистент на карте.

Как устроено

Java/Spring Boot backend считает модель v2-saraishyk: 6 районов по 10 показателей, эффект мер на горизонте 8 кварталов с учётом задержки, совместимости и синергий. Score = 70% средневзвешенного по населению + 30% слабейшего района − 1 балл за каждый показатель ниже 40. Optimizer перебирает допустимые наборы и сравнивает выбор пользователя с лучшим. GPT-4.1 mini пишет объяснение по дайджесту фактов; числа и меры в тексте проверяются, при ошибке одна самокоррекция, затем шаблон. Next.js + MapLibre показывает геослои Overture (парки, дороги, ЛРТ); сценарии и аккаунты хранятся в PostgreSQL.

Ключевые решения

  • детерминированная формула Score
  • полный перебор допустимых комбинаций мер
  • fact-check ответа LLM с одной самокоррекцией
  • JWT-авторизация
  • Flyway-миграции
  • Overture Maps GeoJSON

Особенности

Сравнение сценария пользователя с оптимальным набором, найденным полным перебором. Реальные геоданные Overture Maps по Астане (parquet → GeoJSON) как пространственный контекст. Защитный слой SimulationLlmTextGuard проверяет числа в тексте LLM. Весь стек поднимается одной командой docker compose, есть healthcheck.

Стек

Java · Spring Boot · Next.js · TypeScript · MapLibre GL · PostgreSQL · Docker Compose · Flyway · Swagger/OpenAPI

Модели

GPT-4.1 mini


Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-61391193-team.

README

README.md

Аким на 5 часов

AI-симулятор городских решений · Команда «Алем жив» · HackAlem AI

Распределите бюджет между городскими инициативами и посмотрите, как пять решений меняют качество жизни в районах Астаны. Интерактивная карта, расчёт последствий и объяснение результата помогают увидеть компромиссы до реализации сценария.

6 районов · 16 мероприятий · 5 решений · 100 единиц бюджета

About Project · Model · AI Assistant · Getting Started · Stack · Screenshots · Documentation · Contributors · License

About Project

«Аким на 5 часов» — интерактивный тренажёр управления городом для жителей, аналитиков и участников обсуждения городских инициатив. Пользователь выбирает мероприятия в рамках общего бюджета, а симулятор показывает изменения по районам и итоговый Astana Quality of Life Score.

Что можно сделать

  • Исследовать Астану: выбрать район на карте, посмотреть исходные показатели и включить слои инфраструктуры, парков, дорог и ЛРТ.
  • Собрать сценарий: выбрать ровно пять мероприятий в направлениях «Транспорт», «Экология», «Соцсфера», «Безопасность» и «Сервисы». У каждого мероприятия есть стоимость, срок проявления эффекта и целевые показатели.
  • Оценить результат: сравнить Score до и после, изменения по районам, состояние самого слабого района и число критических показателей.
  • Получить объяснение: прочитать разбор рассчитанного сценария. API также сравнивает выбор пользователя с лучшим допустимым набором в текущей модели.
  • Спросить ИИ: обсудить выбранный район, мероприятия и результат сценария с помощником прямо на карте.
  • Работать с аккаунтом: зарегистрироваться и войти через интерфейс; API поддерживает сохранение сценариев и историю пользователя в PostgreSQL.

Model

Расчётная модель v2-saraishyk описывает шесть районов Астаны: Есиль, Алматы, Сарыарку, Байконур, Нуру и Сарайшык. У каждого района есть десять показателей от 0 до 100 — от доступности транспорта и школ до качества воздуха и надёжности ЖКХ.

Вы выбираете 5 мероприятий из 16 при бюджете 100 единиц. Модель оценивает их эффект на горизонте 8 кварталов: учитывает время реализации, совместимость и взаимное усиление мер. Например, если эффект проявляется через два квартала, в расчёт входит 6/8 его полной величины.

Итоговый Astana Quality of Life Score складывается из трёх частей:

  • 70% — средний балл районов с учётом доли населения.
  • 30% — балл самого слабого района.
  • Минус 1 балл за каждый показатель района ниже 40.

Такой подход поощряет улучшение города в целом и помощь отстающим районам. Backend также перебирает допустимые сочетания мероприятий и находит лучший сценарий по этим правилам, чтобы сравнить его с вашим выбором. Одинаковый набор решений всегда даёт одинаковый Score.

Формула и ограничения подробно описаны в документации модели.

Показатели, стоимость и эффекты мероприятий основаны на синтетическом конкурсном датасете. Симулятор предназначен для обучения и сравнения сценариев, а геоданные служат пространственным контекстом. Результаты не являются прогнозом реальных последствий или официальной городской статистикой.

AI Assistant

ИИ-ассистент помогает разобраться в данных города и своих решениях. Откройте панель «Спросить ИИ» и задайте вопрос, например: «Что известно о выбранном районе?» или «Как мои решения повлияли на результат?». Чат доступен после входа в аккаунт.

Помощник получает контекст текущего экрана: выбранный район и его статистику, список мероприятий, бюджет и результат расчёта. Это позволяет обсуждать свой сценарий без повторного ввода всех данных. Ответы приходят на русском языке; точные показатели можно сверить с карточками района и экраном результатов.

По умолчанию чат и объяснение результата используют GPT-4.1 mini (gpt-4.1-mini-2025-04-14) через OpenAI API. Языковая модель формулирует ответы, а числовой Score рассчитывается по правилам симулятора. Модель можно изменить через SIMULATION_LLM_MODEL.

На экране результатов раздел AI Analysis объясняет итог, основные риски и сравнение с лучшим сценарием. Backend проверяет числа и упомянутые мероприятия в этом объяснении; если проверка не проходит, запрашивает одно исправление и при необходимости возвращает шаблонный текст. Сильные стороны, риски и рекомендации в отдельных списках формируются по правилам расчёта.

Для подключения добавьте OPENAI_API_KEY в .env и перезапустите проект командой docker compose up -d --build. Ключ используется на серверах Next.js и backend и не передаётся браузеру. Без ключа или при недоступности API чат не сможет ответить, но симуляция продолжит работать с шаблонным объяснением результата.

Getting Started

Требования

  • Git — чтобы клонировать репозиторий.
  • Запущенный Docker Desktop с Linux-контейнерами либо Docker Engine с Compose v2.
  • Свободные порты 3000, 8081 и 5432.

Node.js, Java и PostgreSQL устанавливать на компьютер для Docker-запуска не нужно: окружение собирается внутри контейнеров. При первой сборке требуется интернет для загрузки образов и зависимостей; подложка карты также загружается из сети.

1. Получите проект

git clone https://github.com/BAITC-Hacks/hack-61391193-team.git
cd hack-61391193-team

Если репозиторий уже скачан, откройте терминал в его корне — рядом с compose.yaml.

2. Запустите весь проект

Команда подходит для PowerShell, macOS и Linux. Она использует готовые локальные настройки из .env.example; API-ключ для первого запуска не требуется.

docker compose --env-file .env.example up -d --build --wait --wait-timeout 180

Compose собирает и запускает три сервиса:

СервисЧто внутриАдрес на компьютере
frontendИнтерфейс Next.js: карта, каталог мероприятий, результат сценария, вход и регистрацияhttp://localhost:3000
backend-akimJava API: расчёт, справочники, геоданные, авторизация и историяhttp://localhost:8081/api/v1
postgresPostgreSQL: аккаунты, каталог районов и сохранённые сценарииlocalhost:5432

PostgreSQL стартует первым. Backend ожидает готовности БД и применяет миграции Flyway; frontend запускается после готовности backend. Внутри Docker интерфейс обращается к http://backend-akim:8080 — этот адрес уже настроен в Compose.

Если у вас уже настроен собственный .env, используйте его вместо примера:

docker compose up -d --build --wait --wait-timeout 180

3. Откройте приложение

Откройте localhost:3000 в браузере. Выберите район на карте, добавьте пять мероприятий в пределах бюджета и нажмите «Подвести итог». Вы увидите оценку города и объяснение результата. Регистрация для этого не нужна.

Для разработчиков: документация API и проверка запросов в Swagger.

Проверка и управление

# Статус контейнеров
docker compose --env-file .env.example ps

# Логи приложения
docker compose --env-file .env.example logs -f frontend backend-akim

# Остановка с сохранением данных PostgreSQL
docker compose --env-file .env.example down

Для своего .env уберите --env-file .env.example из этих команд. Данные PostgreSQL хранятся в именованном томе postgres-data и сохраняются после обычного down.

ПроверкаОжидаемый результат
docker compose ... psТри работающих контейнера; backend-akim и postgres имеют статус healthy
Соединение с БД{"status":"UP"}
API через frontendJSON с правилами симуляции и modelVersion: "v2-saraishyk"

Свои настройки и AI-объяснение

Для изменения портов, реквизитов или подключения AI создайте .env на основе .env.example. Если .env уже существует, отредактируйте его, сохранив текущие значения.

ПеременнаяНазначениеЗначение в примере / по умолчанию
FRONTEND_PORTВнешний порт интерфейса3000
BACKEND_PORTВнешний порт API8081
POSTGRES_PORTВнешний порт PostgreSQL5432
POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORDПодключение backend и контейнера БДЛокальные значения в .env.example
JWT_SECRET, JWT_TTL_SECONDSПодпись и время жизни токеновКлюч для разработки; 3600 секунд
ADMIN_EMAIL, ADMIN_PASSWORD, ADMIN_USERNAMEАдминистратор, создаваемый при первом запуске[email protected] / Admin / admin
OPENAI_API_KEYКлюч для чата и AI-объяснения результатаПусто; для расчёта не требуется
SIMULATION_LLM_MODELЯзыковая модель чата и объясненияgpt-4.1-mini-2025-04-14
SIMULATION_LLM_URLАдрес API для объяснения на backend; чат использует OpenAI APIПо умолчанию OpenAI Chat Completions

После изменения .env примените настройки:

docker compose up -d --build --wait --wait-timeout 180

Ключ используется серверной частью чата и backend. Поведение чата и объяснения без подключения описано в AI Assistant. Секреты храните в .env, который исключён из Git. Реквизиты из примера предназначены для локальной разработки.

Что лежит в репозитории

.
├── frontend/                  # Next.js: страницы, карта, сценарии и формы входа
│   ├── src/                   # Компоненты, API-клиент и серверные маршруты сессии
│   └── public/                # Статические ресурсы и данные карты
├── backend-akim/              # Java / Spring Boot API
│   └── src/
│       ├── main/              # Расчёт, REST API, авторизация, каталог и миграции БД
│       └── test/              # Тесты backend
├── data1/overture/astana/      # Подготовленные GeoJSON и статистика районов
├── docs1/                     # Датасет, OpenAPI, примеры запросов и описание модели
│   └── screenshots/           # Скриншоты интерфейса для README
├── scripts/                   # Обработка геоданных, запуск и smoke-проверки
├── deploy/                    # Отдельная конфигурация развёртывания с туннелем
├── compose.yaml               # Локальный стек: frontend + backend + PostgreSQL
├── .env.example               # Образец настроек локального запуска
├── Readme-backend.md           # Подробный контракт API и правила расчёта
└── README.md                  # Обзор и быстрый старт

Если не запускается

СимптомЧто проверить
Docker не может подключиться к daemonЗапущен ли Docker Desktop и выбран ли режим Linux-контейнеров
Порт уже занятИзмените соответствующий *_PORT в .env и запускайте Compose без --env-file .env.example
Backend не стал healthyПосмотрите docker compose --env-file .env.example logs --tail=100 backend-akim postgres; проверьте настройки БД и JWT_SECRET
На карте нет подложкиПроверьте доступ к интернету и OpenFreeMap

Stack

СлойТехнологииРоль
FrontendNext.js 16.3.6, React 19.2.8, TypeScript, Tailwind CSS 4Интерфейс и серверный прокси к API
Карта и визуализацияMapLibre GL JS, OpenFreeMap, Three.jsИнтерактивная карта и 3D-превью мероприятий
BackendJava 21, Spring Boot 4.1.1, MavenREST API, валидация, детерминированный расчёт и оптимизация
ДанныеPostgreSQL 16, Spring Data JPA / JDBC, FlywayХранение аккаунтов, районов, сценариев и миграции
АвторизацияSpring Security, JWT, BCrypt, HttpOnly cookieВход, роли и серверная сессия frontend
AIGPT-4.1 mini, OpenAI Chat Completions APIЧат о городе и сценарии; объяснение результата с проверкой чисел на backend
ГеоданныеOverture Maps, OpenStreetMap, GeoJSON; Python / DuckDB для подготовкиСлои города и пространственная статистика
Инфраструктура и проверкиDocker Compose, Actuator, OpenAPI / Swagger UI, JUnit, Testcontainers, ESLintСборка, диагностика, документация и тестирование

Поток данных при локальном Docker-запуске:

Браузер → Next.js :3000 → Spring Boot :8080 → PostgreSQL :5432
                              │
                              └→ API модели (необязательно)

В этой схеме указаны внутренние порты сервисов; на компьютере API опубликован на 8081. Версии frontend зафиксированы в package-lock.json, Java-зависимости — в pom.xml.

Screenshots

Карта и каталог мероприятий

Выбор района, фильтры направлений, стоимость и ожидаемые эффекты городских инициатив.

Карта Астаны и каталог мероприятий для района Есиль

Результат сценария

Итоговый Score, изменение относительно исходного состояния, использованный бюджет и выбранные решения.

Экран результата сценария с итоговым Score 53,89 и изменениями по направлениям

Карта с AI-помощником

Панель «Спросите про город»: вопросы о выбранном районе, мероприятиях и своём сценарии рядом с картой.

Карта Астаны с открытой панелью AI-помощника

Documentation

МатериалЧто найти
Backend и APIЭндпоинты, авторизация, история, ошибки, формула Score и настройка PostgreSQL
FrontendЗапуск интерфейса для разработки и работа с сессией
OpenAPIСохранённая схема для импорта в Postman или Swagger Editor; актуальная схема доступна у запущенного API по /v3/api-docs
Пример сценарияПять решений стоимостью 95 единиц для проверки расчёта
Сценарий с СарайшыкомПример для модели шести районов
ГеоданныеСостав слоёв, происхождение, ограничения и атрибуция
Сарайшык и модель данныхИсточники, синтетические показатели и расчёт весов районов
Городские сервисыМероприятия M15 и M16, параметры и обоснование

Проверки при разработке

Для локальных проверок backend нужен JDK 21; интеграционные тесты с Testcontainers используют Docker. Команды выполняются из backend-akim/:

# Windows / PowerShell
.\mvnw.cmd test
# macOS / Linux
bash ./mvnw test

Для frontend используйте Node.js 22 и npm, команды выполняются из frontend/:

npm ci
npm run lint
npm run build

Contributors

Проект команды «Алем жив» для HackAlem AI.

УчастникНаправлениеВклад
Arsen · @math-lover47AI / MLПервоначальный AI/ML-прототип и пайплайн Laya
Zhunis Ayanat · @barcek2281BackendJava API, расчёт сценариев, работа с данными и документация
@Rask1lllFrontendИнтерфейс, интерактивная карта и пользовательские сценарии

License

Лицензия исходного кода пока не указана: в репозитории отсутствует файл LICENSE.

Для геоданных в проекте указана отдельная атрибуция:

© OpenStreetMap contributors, Overture Maps Foundation

Согласно описанию данных, слои building, segment и land_use распространяются по ODbL, place — по CDLA-Permissive-2.0. Атрибуция источников отображается на карте.

↑ К началу

Звёзды
⭐ 0
Форки
0
Язык
Java
Последний push
в прошлом месяце
Коммиты
40
Авторы
4
Файлы
181
Ветки
3

Авторы коммитов

Rask1lll 23barcek2281 9Zhunis Ayanat 5Arsen 3

История коммитов

  • 2026-09-23 17:54Merge pull request #8 from BAITC-Hacks/front-endRask1lll
  • 2026-09-23 17:54refactor: replace Home page content with DistrictMap componentRask1lll
  • 2026-09-23 17:51Merge pull request #7 from BAITC-Hacks/backendZhunis Ayanat
  • 2026-09-23 17:50feat: add animated previews for municipal service measuresRask1lll
  • 2026-09-23 17:50backend: ридмиbarcek2281
  • 2026-09-23 17:45Merge pull request #6 from BAITC-Hacks/front-endRask1lll
  • 2026-09-23 17:44Merge remote-tracking branch 'origin/front-end' into front-endRask1lll
  • 2026-09-23 17:43feat: redesign Home page layout with introductory content and navigationRask1lll
Все коммиты (40)
  • 2026-09-23 17:42feat: enhance frontend and backend integration with new environment variables and UI improvementsRask1lll
  • 2026-09-23 17:30Results: comparison with the model's best plan, AI/template badge, Saraishyk on the map; add missing three dependencyArsen
  • 2026-09-23 17:27Merge pull request #5 from BAITC-Hacks/front-endRask1lll
  • 2026-09-23 17:27Merge branch 'main' into front-endRask1lll
  • 2026-09-23 17:25AI explanation: fact digest, fact check with one self-correction, best-plan comparison; remove unused Laya/ML stackArsen
  • 2026-09-23 17:24feat: add frontend service to Docker Compose and update environment configurationRask1lll
  • 2026-09-23 17:20chore: update dependencies and improve error handling in proxyRask1lll
  • 2026-09-23 17:09Merge pull request #4 from BAITC-Hacks/backendZhunis Ayanat
  • 2026-09-23 17:08backend: новые мероприятияbarcek2281
  • 2026-09-23 17:07refactor: enhance API response handling and update UI componentsRask1lll
  • 2026-09-23 17:04Merge origin/main into front-endRask1lll
  • 2026-09-23 16:43Merge pull request #3 from BAITC-Hacks/backendZhunis Ayanat
  • 2026-09-23 16:41Merge branch 'main' into backendbarcek2281
  • 2026-09-23 16:40backend: сарайшык и лрт добавленыbarcek2281
  • 2026-09-23 16:35refactor: enhance DistrictMap component and update README.mdRask1lll
  • 2026-09-23 16:18refactor: update authentication flow and improve README.mdRask1lll
  • 2026-09-23 16:13Merge remote-tracking branch 'origin/main' into front-endRask1lll
  • 2026-09-23 16:10feat: backend integrationRask1lll
  • 2026-09-23 16:02Update README.md to include details on login and registration functionality. Enhance globals.css with new styles for authentication screens, including layout, form elements, and responsive design adjuRask1lll
  • 2026-09-23 15:54Merge pull request #2 from BAITC-Hacks/backendZhunis Ayanat
  • 2026-09-23 15:53Merge branch 'main' into backendbarcek2281
  • 2026-09-23 15:52backend: 3rd commit, auth + analyzebarcek2281
  • 2026-09-23 15:51Update pom.xml to change resource directory path and enhance next.config.ts with API rewrites. Remove unused district-map.tsx component to streamline frontend codebase.Rask1lll
  • 2026-09-23 15:13Merge remote-tracking branch 'origin/main' into front-endRask1lll
  • 2026-09-23 15:12Enhance DistrictMap component with selection reset functionality and responsive layout. Update CSS for improved styling and structure, including new brand and selection panel designs. Simplify page stRask1lll
  • 2026-09-23 15:11Merge pull request #1 from BAITC-Hacks/backendZhunis Ayanat
  • 2026-09-23 14:59Merge branch 'main' into backendbarcek2281
  • 2026-09-23 14:58backend: second commit, added backend readmebarcek2281
  • 2026-09-23 14:49Update project structure and dependencies for interactive district map in Astana. Added MapLibre GL for mapping functionality, updated ESLint configuration, and modified README for project clarity. EnRask1lll
  • 2026-09-23 14:36Scaffold hackathon stack: Laya, Docker Compose, and fine-tune pipeline.Arsen
  • 2026-09-23 14:19init frontRask1lll
  • 2026-09-23 13:43backend: first commitbarcek2281
Структура репозитория (181 файлов)
.env.example
.gitignore
README.md
Readme-backend.md
backend-akim/.gitattributes
backend-akim/.gitignore
backend-akim/.mvn/wrapper/maven-wrapper.properties
backend-akim/Dockerfile
backend-akim/Dockerfile.dockerignore
backend-akim/mvnw
backend-akim/mvnw.cmd
backend-akim/pom.xml
backend-akim/src/main/java/astana/innovation/backendakim/BackendAkimApplication.java
backend-akim/src/main/java/astana/innovation/backendakim/auth/AccountRepository.java
backend-akim/src/main/java/astana/innovation/backendakim/auth/AdminAccountInitializer.java
backend-akim/src/main/java/astana/innovation/backendakim/auth/AdminController.java
backend-akim/src/main/java/astana/innovation/backendakim/auth/AuthController.java
backend-akim/src/main/java/astana/innovation/backendakim/auth/AuthExceptionHandler.java
backend-akim/src/main/java/astana/innovation/backendakim/auth/AuthResponse.java
backend-akim/src/main/java/astana/innovation/backendakim/auth/AuthService.java
backend-akim/src/main/java/astana/innovation/backendakim/auth/AuthUserResponse.java
backend-akim/src/main/java/astana/innovation/backendakim/auth/JwtConfiguration.java
backend-akim/src/main/java/astana/innovation/backendakim/auth/JwtTokenService.java
backend-akim/src/main/java/astana/innovation/backendakim/auth/LoginRequest.java
backend-akim/src/main/java/astana/innovation/backendakim/auth/RegisterRequest.java
backend-akim/src/main/java/astana/innovation/backendakim/auth/SecurityConfiguration.java
backend-akim/src/main/java/astana/innovation/backendakim/auth/SecurityProblemWriter.java
backend-akim/src/main/java/astana/innovation/backendakim/auth/TokenAuthenticationManager.java
backend-akim/src/main/java/astana/innovation/backendakim/catalog/CatalogController.java
backend-akim/src/main/java/astana/innovation/backendakim/catalog/CatalogService.java
backend-akim/src/main/java/astana/innovation/backendakim/catalog/DistrictDataset.java
backend-akim/src/main/java/astana/innovation/backendakim/catalog/DistrictMeasureResponse.java
backend-akim/src/main/java/astana/innovation/backendakim/catalog/DistrictProvenance.java
backend-akim/src/main/java/astana/innovation/backendakim/catalog/DistrictRepository.java
backend-akim/src/main/java/astana/innovation/backendakim/catalog/DistrictResponse.java
backend-akim/src/main/java/astana/innovation/backendakim/catalog/LrtContextController.java
backend-akim/src/main/java/astana/innovation/backendakim/catalog/MeasureResponse.java
backend-akim/src/main/java/astana/innovation/backendakim/config/OpenApiConfig.java
backend-akim/src/main/java/astana/innovation/backendakim/config/WebConfig.java
backend-akim/src/main/java/astana/innovation/backendakim/history/AnonymousTokens.java
backend-akim/src/main/java/astana/innovation/backendakim/history/AnonymousUserRepository.java
backend-akim/src/main/java/astana/innovation/backendakim/history/AnonymousUserResponse.java
backend-akim/src/main/java/astana/innovation/backendakim/history/HistoryExceptionHandler.java
backend-akim/src/main/java/astana/innovation/backendakim/history/HistoryPersistenceConfig.java
backend-akim/src/main/java/astana/innovation/backendakim/history/SavedSimulationResponse.java
backend-akim/src/main/java/astana/innovation/backendakim/history/SimulationHistoryController.java
backend-akim/src/main/java/astana/innovation/backendakim/history/SimulationHistoryPage.java
backend-akim/src/main/java/astana/innovation/backendakim/history/SimulationHistoryRepository.java
backend-akim/src/main/java/astana/innovation/backendakim/history/SimulationHistoryService.java
backend-akim/src/main/java/astana/innovation/backendakim/mapdata/MapDataController.java
backend-akim/src/main/java/astana/innovation/backendakim/mapdata/MapDataService.java
backend-akim/src/main/java/astana/innovation/backendakim/mapdata/MapLayer.java
backend-akim/src/main/java/astana/innovation/backendakim/simulation/ScoreCalculator.java
backend-akim/src/main/java/astana/innovation/backendakim/simulation/SimulationBootstrapController.java
backend-akim/src/main/java/astana/innovation/backendakim/simulation/SimulationController.java
backend-akim/src/main/java/astana/innovation/backendakim/simulation/SimulationExceptionHandler.java
backend-akim/src/main/java/astana/innovation/backendakim/simulation/SimulationExplanationService.java
backend-akim/src/main/java/astana/innovation/backendakim/simulation/SimulationLlmClient.java
backend-akim/src/main/java/astana/innovation/backendakim/simulation/SimulationLlmFacts.java
backend-akim/src/main/java/astana/innovation/backendakim/simulation/SimulationLlmTextGuard.java
backend-akim/src/main/java/astana/innovation/backendakim/simulation/SimulationOptimizer.java
backend-akim/src/main/java/astana/innovation/backendakim/simulation/SimulationRequest.java
backend-akim/src/main/java/astana/innovation/backendakim/simulation/SimulationResult.java
backend-akim/src/main/java/astana/innovation/backendakim/simulation/SimulationRules.java
backend-akim/src/main/java/astana/innovation/backendakim/simulation/SimulationService.java
backend-akim/src/main/java/astana/innovation/backendakim/simulation/SimulationValidationException.java
backend-akim/src/main/java/astana/innovation/backendakim/simulation/SimulationValidator.java
backend-akim/src/main/resources/application-postgres.yaml
backend-akim/src/main/resources/application.yaml
backend-akim/src/main/resources/catalog/districts-v2.json
backend-akim/src/main/resources/db/migration/V1__simulation_history.sql
backend-akim/src/main/resources/db/migration/V2__registered_users.sql
backend-akim/src/main/resources/db/migration/V3__district_catalog.sql
backend-akim/src/main/resources/measure-data/M3/lrt-context.json
backend-akim/src/test/java/astana/innovation/backendakim/ApiContractIntegrationTests.java
backend-akim/src/test/java/astana/innovation/backendakim/BackendAkimApplicationTests.java
backend-akim/src/test/java/astana/innovation/backendakim/LrtDataIntegrationTests.java
backend-akim/src/test/java/astana/innovation/backendakim/auth/AuthenticationIntegrationTests.java
backend-akim/src/test/java/astana/innovation/backendakim/catalog/DistrictDatasetTests.java
backend-akim/src/test/java/astana/innovation/backendakim/history/HistoryWithoutDatabaseTests.java
backend-akim/src/test/java/astana/innovation/backendakim/history/SimulationHistoryIntegrationTests.java
backend-akim/src/test/java/astana/innovation/backendakim/simulation/ScoreCalculatorTests.java
backend-akim/src/test/java/astana/innovation/backendakim/simulation/SimulationApiIntegrationTests.java
backend-akim/src/test/java/astana/innovation/backendakim/simulation/SimulationFixtures.java
backend-akim/src/test/java/astana/innovation/backendakim/simulation/SimulationLlmClientTests.java
backend-akim/src/test/java/astana/innovation/backendakim/simulation/SimulationLlmScenarioTests.java
backend-akim/src/test/java/astana/innovation/backendakim/simulation/SimulationLlmTextGuardTests.java
backend-akim/src/test/java/astana/innovation/backendakim/simulation/SimulationOptimizerTests.java
backend-akim/src/test/java/astana/innovation/backendakim/simulation/SimulationServiceTests.java
backend-akim/src/test/java/astana/innovation/backendakim/simulation/SimulationValidatorExhaustiveTests.java
backend-akim/src/test/resources/history/simulation-result-v1.json
compose.yaml
data1/overture/astana/README.md
data1/overture/astana/city_boundary.geojson
data1/overture/astana/district_stats.csv
data1/overture/astana/district_stats.json
data1/overture/astana/districts.geojson
data1/overture/astana/lrt.geojson
data1/overture/astana/parks.geojson
data1/overture/astana/pois.geojson
data1/overture/astana/raw/building.parquet
data1/overture/astana/raw/connector.parquet
data1/overture/astana/raw/division.parquet
data1/overture/astana/raw/division_area.parquet
data1/overture/astana/raw/division_boundary.parquet
data1/overture/astana/raw/infrastructure.parquet
data1/overture/astana/raw/land_cover.parquet
data1/overture/astana/raw/land_use.parquet
data1/overture/astana/raw/place.parquet
data1/overture/astana/raw/segment.parquet
data1/overture/astana/raw/water.parquet
data1/overture/astana/roads_main.geojson
deploy/Frontend.Dockerfile
deploy/Frontend.Dockerfile.dockerignore
deploy/compose.yaml
deploy/ship.sh
docs1/HackAlem AI_ «Аким на 5 часов» - AI-симулятор управления городом.docx
docs1/municipal-measures.md
docs1/openapi.yaml
docs1/saraishyk-research.md
docs1/screenshots/city-assistant.png
docs1/screenshots/measure-catalog.png
docs1/screenshots/scenario-results.png
docs1/simulation-example.json
docs1/simulation-municipal-example.json
docs1/simulation-optimal-example.json
docs1/simulation-saraishyk-example.json
docs1/Датасет районов.docx
frontend/.dockerignore
frontend/.gitignore
frontend/AGENTS.md
frontend/CLAUDE.md
frontend/Dockerfile
frontend/README.md
frontend/eslint.config.mjs
frontend/next.config.ts
frontend/package-lock.json
frontend/package.json
frontend/postcss.config.mjs
frontend/public/data/astana-districts.geojson
frontend/public/file.svg
frontend/public/globe.svg
frontend/public/next.svg
frontend/public/vercel.svg
frontend/public/window.svg
frontend/scripts/convert-districts.mjs
frontend/src/app/api.ts
frontend/src/app/api/chat/route.ts
frontend/src/app/api/session/login/route.ts
frontend/src/app/api/session/logout/route.ts
frontend/src/app/api/session/me/route.ts
frontend/src/app/api/session/register/route.ts
frontend/src/app/api/session/session-server.ts
frontend/src/app/auth-client.ts
frontend/src/app/auth-form.tsx
frontend/src/app/auth-nav.tsx
frontend/src/app/chat-panel.module.css
frontend/src/app/chat-panel.tsx
frontend/src/app/district-map.module.css
frontend/src/app/district-map.tsx
frontend/src/app/favicon.ico
frontend/src/app/globals.css
frontend/src/app/initiative-modal.module.css
frontend/src/app/initiative-modal.tsx
frontend/src/app/layout.tsx
frontend/src/app/login/page.tsx
frontend/src/app/page.tsx
frontend/src/app/register/page.tsx
frontend/src/app/scenario-comparison.tsx
frontend/src/app/scenario-ui.tsx
frontend/src/components/measure-3d/MeasurePreview.tsx
frontend/src/components/measure-3d/catalog.ts
frontend/src/components/measure-3d/factory.ts
frontend/src/components/measure-3d/measure-preview.module.css
frontend/src/proxy.ts
frontend/tsconfig.json
plan.md
scripts/overture_astana.py
scripts/prepare_lrt.py
scripts/run-backend.sh
scripts/smoke-simulation.sh
Ветки (3)

Обсуждение 0 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.