AAYMA
RU
Войти

MoneyMap

Локальное Streamlit-приложение для AML-аналитика: валидирует три parquet, строит граф переводов, назначает роли по правилам, выделяет…

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

О проекте

Команда: CodeAI
Кейс HackAlem.ai: Финансы — Freedom
Стадия: Доведённый продукт

Задача кейса: «Граф денег»: восстановить структуру организованной группы по сети транзакций (AML)

Суть

Локальное Streamlit-приложение для AML-аналитика: валидирует три parquet, строит граф переводов, назначает роли по правилам, выделяет Louvain-кластеры, формирует очередь проверки и интерактивную карту. Интерфейс на казахском языке.

Как устроено

data.py валидирует схему, суммы и сверку рёбер с транзакциями. graph.py строит NetworkX DiGraph и считает взвешенный PageRank, точную betweenness, достижимость от seed и компоненты. roles.py применяет явные правила из config/roles.json (первое подходящее правило), а приоритет собирается из 7 нормированных вкладов. Louvain работает на ненаправленной проекции с seed=42. LLM (OpenAI или NVIDIA) опционально пишет объяснение по готовым фактам; расход токенов учитывается в SQLite.

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

  • NetworkX
  • взвешенный PageRank
  • betweenness centrality
  • Louvain
  • правила ролей из JSON-конфига
  • взвешенный приоритет из 7 компонент
  • анализ чувствительности к порогам
  • vis-network

Метрики

281 автоматический тест пройден; живой LLM-ответ не получен (OpenAI HTTP 401, NVIDIA HTTP 410)

Особенности

В README честно написано, что живая проверка LLM не прошла (401/410). Бюджет и токены API учитываются в SQLite. Есть проверка устойчивости ролей, топ-30 и кластеризации при изменении порога и параметра Louvain. Интерфейс полностью на казахском.

Стек

Python · Streamlit · pandas · PyArrow · NetworkX · Altair · vis-network · SQLite · pytest · PowerShell

Модели

OpenAI Responses API · NVIDIA API Catalog


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

README

README.md

MoneyMap — граф финансовых связей

Проект для HackAlem AI: исследование транзакционной сети и объяснимый выбор клиентов для дальнейшей проверки.

1. О проекте

MoneyMap — локальное рабочее пространство для аналитика банковского финансового мониторинга (AML). Проект помогает перейти от таблиц переводов к связной картине: кто собирает деньги, кто передаёт их дальше, какие клиенты связывают разные части сети и с кого начать проверку.

В кейсе известен 81 исходный клиент, а наблюдаемая сеть содержит 2 248 клиентов. Ручное исследование переводов на несколько шагов затрудняет поиск важных участников. MoneyMap рассчитывает характеристики графа, предлагает финансовые роли, выделяет группы и формирует очередь проверки с числовыми обоснованиями.

Результат — аналитические гипотезы, а не установление виновности или личности организатора. Основной анализ, карта, отчёт и экспорт работают локально без API-ключей. Дополнительное объяснение через LLM включается отдельно.

Интерфейс и текстовые обоснования текущей версии — на казахском языке. Ниже приведены русские пояснения к названиям разделов и кнопок.

Контрольная проверка от 23 сентября 2026 года: локальный анализ и экспорт прошли проверку; 281 автоматический тест пройден. Успешный живой LLM-ответ не получен: OpenAI вернул HTTP 401, NVIDIA — HTTP 410. Основную демонстрацию можно провести без ключей. Подробности и границы проверки: финальный отчёт.

2. Что реализовано

ВозможностьЧто получает аналитик
Загрузка и проверка данныхЧтение трёх Parquet-файлов, проверка схемы, идентификаторов, сумм, дат и соответствия агрегированных связей исходным операциям
Обзор сетиЧисло клиентов и переводов, оборот по дням, распределение ролей, компоненты связности и ограничения наблюдения
Финансовые ролиОдна из шести гипотез для каждого клиента, сила соответствия правилу и краткое числовое обоснование
Очередь проверкиТоп-30 по умолчанию, таблица всех клиентов, фильтр по роли и разложение приоритета на семь составляющих
Интерактивная картаНаправленные связи, поиск по полному gid, окружение на 1–2 шага, вся сеть или отдельный кластер; фильтры по роли, кластеру, сумме и направлению
Карточка клиентаВходящие и исходящие суммы, контрагенты, операции, даты, правило роли, вклад показателей в приоритет и наблюдаемые пути от исходных клиентов
Анализ кластеровLouvain-группы, внутренние и межкластерные потоки, концентрация переводов и числовые основания групповой гипотезы
Проверка устойчивостиСравнение ролей, состава топ-30 и кластеризации при изменении порога для сборщика денег и параметра Louvain
Аналитическая справкаЛокальный отчёт по рассчитанным фактам, выгрузка TXT/JSON; опциональное объяснение OpenAI или NVIDIA
Экспорт и воспроизводимостьТри итоговых CSV, JSON-отчёт, ZIP; командная строка и отдельный скрипт приёмочной проверки

Свёрнутое боковое меню сохраняет логотип и значки разделов. Переход из очереди, кластера или справки на карту передаёт выбранного клиента либо группу. Фильтры карты меняют отображение; рассчитанные показатели клиента сохраняют привязку к полному загруженному набору.

Как определяются роли и приоритет

Основной алгоритм — явные правила из config/roles.json. Обученной модели классификации в проекте нет. Правила проверяются в порядке строк таблицы; если подходят несколько, выбирается первое.

Роль в CSVИнтерпретация и основные условия по умолчанию
coordinatorСтруктурный кандидат в координаторы: не менее 3 отправителей и 3 получателей, достижим из не менее 2 других исходных клиентов, положительная промежуточная центральность не ниже 90-го перцентиля её положительных значений
distributorРаспределитель: не менее 10 разных получателей
consolidatorСборщик денег: не менее 5 отправителей, наблюдаемый расход/приход ≤ 0,3
transitТранзит: есть входящие и исходящие связи, расход/приход от 0,8 до 1,2; отсутствует противоречие «весь расход раньше первого прихода»
terminalНаблюдаемый конечный получатель: положительный приход и отсутствие исходящих связей в доступной выборке
peripheralНедостаточно оснований для предыдущих ролей либо недостаточно наблюдений

Перед этими правилами учитываются ограничения данных. Узлы четвёртого шага, изолированные клиенты и клиенты только с переводами самим себе получают peripheral. Для исходных клиентов (is_seed) роли consolidator, transit, terminal не назначаются: их входящие потоки неполны. Соотношение расхода и прихода используется только при положительном наблюдаемом приходе и допустимой полноте наблюдения.

role_score отражает силу соответствия правилу, а priority_score — отдельный приоритет проверки. Оба находятся в диапазоне 0–1 и не являются вероятностью противоправных действий.

Приоритет складывается из нормированных признаков: концентрация средств — 25%, входящая сумма — 15%, число отправителей — 15%, промежуточная центральность — 15%, достижимость от исходных клиентов — 15%, число получателей — 10%, PageRank — 5%. В интерфейсе доступны отдельные вклады. Точные пороги и параметры нормирования сохраняются в отчёте расчёта.

3. Как работает решение

  1. Входные данные. Аналитик открывает локальный кейс, загружает три Parquet-файла или выбирает встроенный синтетический пример.
  2. Валидация. Приложение проверяет данные и показывает ошибки и ограничения. При блокирующих ошибках анализ не запускается; строки не удаляются молча.
  3. Расчёт. Из связей строится направленный граф со всеми клиентами, включая изолированных. Рассчитываются метрики, временные признаки, кластеры, роли и приоритеты.
  4. Исследование. Аналитик выбирает клиента в очереди, переходит на карту, изучает операции, окружение и обоснование роли. При необходимости открывает весь кластер.
  5. Результат. Аналитик получает справку и выгружает три CSV для дальнейшей проверки. Дополнительный LLM-комментарий не меняет рассчитанные роли и рейтинг.
Раздел интерфейсаНазначение
ШолуОбзор и запуск анализа
Тексеру кезегіОчередь проверки
Желі картасыКарта финансовых связей
КластерлерГруппы и их потоки
АнықтамаСправка и дополнительное LLM-объяснение
Деректер және экспортДанные, качество и выгрузка результатов

4. Технологии

КомпонентТехнологии и применение
Язык и средаPython; проверенная среда — Windows x64, Python 3.14.3
Веб-приложениеStreamlit 1.64.0, состояние пользовательской сессии
Данныеpandas 3.0.6 и PyArrow 25.0.1: таблицы и Parquet; NumPy 2.5.3 и SciPy 1.18.1: численные зависимости анализа
Графовые алгоритмыNetworkX 3.7: направленный граф, взвешенный PageRank, точная невзвешенная betweenness centrality, достижимость, компоненты и Louvain
Диаграммы и картаAltair 6.3.0; собственный Streamlit-компонент на HTML/CSS/JavaScript с локальной vis-network 9.1.2
Дополнительные APIHTTP-запросы через Requests 2.34.2 к OpenAI Responses API или NVIDIA API Catalog; модели и включение описаны ниже
Локальный учёт APISQLite через стандартный модуль sqlite3: журнал запросов, токенов и расчётного бюджета
Проверкиpytest 9.1.1, Streamlit AppTest, имитации ответов провайдеров и независимая проверка CSV

Все Python-зависимости закреплены в requirements.txt. Ресурсы карты хранятся в репозитории и не требуют CDN. Отдельная сборка Node.js, PHP, OSPanel, внешний сервер базы данных или GPU для запуска приложения не нужны.

5. Архитектура проекта

Веб-интерфейс и CLI используют одни и те же модули обработки данных и расчёта.

Три Parquet-файла
       ↓
  data.py — чтение и валидация
       ↓
  graph.py — направленный граф, метрики и даты
       ↓
  roles.py + config/roles.json — роли, приоритеты, кластеры
       ├── UI → карта → карточка клиента
       ├── reports.py → CSV / JSON / ZIP
       └── ai_facts.py → локальная справка
                          └── опционально: API → проверка ответа → LLM-текст

Louvain работает на взвешенной ненаправленной проекции графа с фиксированным seed=42. Исходный направленный граф сохраняется для анализа потоков. Кластеры Louvain и компоненты связности — разные сущности.

ПутьОтветственность
app.pyТочка входа Streamlit, загрузка данных, обзор и навигация
moneymap/data.pyВалидация трёх входных таблиц
moneymap/graph.pyГраф, метрики клиентов, даты, пути и компоненты
moneymap/roles.pyПравила ролей, рейтинг, групповые потоки и чувствительность к параметрам
moneymap/ui_*.pyРазделы интерфейса, оформление и состояние навигации
moneymap/graph_view.py, moneymap/map_component.py, moneymap/graph_component/Подготовка отображаемого графа, обмен событиями с браузером и локальная карта
moneymap/ai_*.pyПодготовка фактов, локальная справка, настройки, API, проверка ответа и бюджет
moneymap/reports.pyФормирование экспортируемых файлов
moneymap/main.pyCLI: demo, validate, analyze, run
tests/, scripts/Автоматические тесты, приёмочная проверка и сборка архивов
docs/Исследование кейса, аудит данных и отчёты проверок

Загруженные через браузер данные и результаты работы интерфейса находятся в памяти сессии. CLI сохраняет результаты в указанную папку. Единственная встроенная база SQLite относится к учёту дополнительных API-запросов, а не к хранению банковских операций.

6. Установка и запуск

Требования

  • Windows x64 и установленный Python 3.14 x64, доступный командой python. Именно эта среда проверена в проекте.
  • PowerShell, браузер и распакованный проект.
  • Интернет для первоначальной установки зависимостей, если нет подготовленной папки wheelhouse.
  • Для реального кейса — три файла организатора. Для встроенного демо дополнительные файлы не нужны.

Обычный запуск

Откройте PowerShell в корне проекта, где находятся app.py и requirements.txt.

python --version
powershell -ExecutionPolicy Bypass -File .\setup.ps1
powershell -ExecutionPolicy Bypass -File .\start.ps1

setup.ps1 создаёт .venv и устанавливает зависимости. start.ps1 запускает Streamlit из этой среды.

Откройте http://127.0.0.1:8501. Оставьте терминал открытым; остановка сервера — Ctrl+C. При следующих запусках достаточно start.ps1. Если порт занят:

powershell -ExecutionPolicy Bypass -File .\start.ps1 -Port 8502

Подготовка данных

Создайте папку data/case и скопируйте туда файлы организатора без переименования:

data/case/
├── nodes.parquet
├── edges.parquet
└── transactions.parquet

В приложении появится кнопка «Берілген кейсті ашу» — «Открыть предоставленный кейс». Альтернатива: загрузить три файла в панели «Кейс деректері · ашу немесе ауыстыру» и нажать «Файлдарды тексеру» — «Проверить файлы».

data/ исключена из Git. После получения только исходного кода реальные данные нужно добавить отдельно. Готовые CSV не заменяют входные Parquet-файлы.

Установка без интернета

Если полученный offline-архив содержит папку wheelhouse, установите пакеты из неё:

powershell -ExecutionPolicy Bypass -File .\setup.ps1 -Wheelhouse .\wheelhouse
powershell -ExecutionPolicy Bypass -File .\start.ps1

Подготовленный набор wheel-пакетов предназначен для Windows x64 / Python 3.14. Сам Python и исходные данные в архив не входят. Проверка на macOS/Linux или другом физическом компьютере в текущем отчёте не заявлена.

Расчёт без браузера

.\.venv\Scripts\python.exe -m moneymap run --data-dir data/case --out output/submission/results

Команда проверяет данные, выполняет анализ и записывает три CSV и run_report.json. Для другой папки измените --data-dir. Дополнительно доступны --config config/roles.json и --top-n 50; минимальное запрашиваемое значение top-n — 20, а для меньшего набора выгружаются все клиенты.

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

7. Как проверить решение: сценарий для жюри

Быстрая проверка без файлов организатора

  1. Запустите приложение и нажмите «Демо деректермен тексеру» — «Проверить на демоданных».
  2. На странице «Шолу» проверьте: 16 клиентов, 15 направленных связей, 17 операций. Это полностью синтетический пример.
  3. Нажмите «Талдауды бастау» — «Начать анализ».
  4. В «Тексеру кезегі» выберите клиента и нажмите «Желіде ашу →» либо выберите строку таблицы. Проверьте переход к нему на карте и числовое обоснование в карточке.
  5. На странице «Желі картасы» найдите клиента 1004 через поле «Кез келген клиентті іздеу · gid» и кнопку «Картадан табу». Это изолированный исходный клиент: он остаётся в анализе, имеет роль peripheral и приоритет 0.
  6. В «Анықтама» нажмите «Көмекшіге деректерді дайындау», затем «Анықтаманы дайындау · API-сыз». Справка должна сформироваться без API-ключа.
  7. Откройте «Деректер және экспорт» → «Экспорт» и скачайте CSV или ZIP. В nodes_roles.csv и top_nodes.csv для этого небольшого примера должно быть по 16 строк данных.

Тот же пример можно проверить через CLI, указав ещё не существующую папку для генерации входных файлов:

.\.venv\Scripts\python.exe -m moneymap demo --output-dir data/jury-demo
.\.venv\Scripts\python.exe -m moneymap run --data-dir data/jury-demo --out output/jury-demo

demo отказывается перезаписывать существующие файлы. Для повторного анализа используйте вторую команду.

Проверка на исходном кейсе

Откройте файлы организатора и повторите анализ. Ожидаемые значения для исходного набора и текущей конфигурации зафиксированы в отчёте проверки версии:

Контрольная точкаОжидаемое значение
Клиенты / направленные связи / операции2 248 / 3 119 / 4 840
Исходные клиенты (is_seed)81
Узлы четвёртого шага444; роль peripheral
Изолированные исходные клиенты19; все сохранены
Компоненты слабой связности, включая изолированных35
Кластеры Louvain91
Строки данных в nodes_roles.csv / clusters.csv / top_nodes.csv2 248 / 91 / 30

Дополнительная проверка времени: найдите 100000005873152100. У него наблюдается расход 10 000 ₸ 3 июля 2026, а приход 10 000 ₸ — 5 июля. Карточка показывает временное противоречие, роль — peripheral. Равенство сумм само по себе не превращает такого клиента в транзитный узел.

Автоматические проверки

.\.venv\Scripts\python.exe -m pytest -q
.\.venv\Scripts\python.exe -m pip check
.\.venv\Scripts\python.exe scripts\verify_submission.py --data-dir data/case --out output/submission/results

Последняя команда дважды пересчитывает результаты из Parquet, проверяет схемы CSV, охват клиентов, диапазоны оценок, обоснования, кластерные суммы, порядок рейтинга и ограничение времени 300 секунд. Также сравниваются байты трёх CSV и хэши исходных файлов. Результат записывается в acceptance_report.json; успешное завершение отмечается PASS.

Внутри CLI-процессов проверяющий скрипт блокирует Python socket/DNS-вызовы. Это проверка отсутствия сетевых обращений расчёта, а не изоляция сети на уровне ОС. Интеграции LLM тестируются с имитацией ответов провайдеров; успешный реальный API-вызов этим не подтверждается.

8. Формат результатов

ФайлКолонки
nodes_roles.csvgid, role, role_score, cluster_id, priority_score, evidence
clusters.csvcluster_id, n_nodes, n_seed, sum_kzt_internal, top_gids, hypothesis
top_nodes.csvrank, gid, role, priority_score, why

На каждого входного клиента приходится ровно одна строка в nodes_roles.csv. evidence — непустое числовое обоснование длиной не более 200 символов. top_gids содержит JSON-список идентификаторов в текстовом представлении. CSV записываются в UTF-8 с BOM.

run_report.json содержит конфигурацию, пороги, нормирование, сводные показатели, групповые потоки и результаты проверки чувствительности. При запуске через CLI дополнительно сохраняются SHA-256 входных файлов и конфигурации, версии библиотек и время от чтения исходных данных до получения CSV.

Большие gid передаются в браузер строками для сохранения точности. При импорте CSV в Excel задавайте для идентификаторов текстовый тип, иначе длинные числа могут округлиться.

9. Данные и интеграции

Входные файлы

ФайлОбязательные колонкиСодержание
nodes.parquetgid, depth, is_seedКлиенты, шаг обнаружения 0–4, признак исходного клиента
edges.parquetsrc, dst, sum_kzt, n_tx, depthНаправленные пары, суммарный объём и число переводов, шаг обнаружения связи
transactions.parquetsrc, dst, date, sum_kztОтдельные переводы: отправитель, получатель, дата и сумма в тенге

Источник реального набора — материалы организатора хакатона. Согласно аудиту входных данных, он содержит операции 1–31 июля 2026 года; наблюдаемая сумма — 365 890 012,01 ₸. Выборка ограничена одним банком, переводами от 5 000 ₸ и четырьмя шагами исходящих связей от начальных клиентов.

Валидатор проверяет обязательные колонки, пропуски, точность целочисленных ID, уникальность клиентов и агрегированных пар, наличие участников в nodes, положительные конечные суммы, число операций и даты. Агрегация транзакций по паре должна совпадать с edges по сумме и количеству. Веб-загрузка ограничена 20 МБ на файл.

Прямых интеграций с банковскими системами, внешними реестрами клиентов или потоками транзакций нет. Второй источник данных — встроенный генератор синтетического демо в moneymap/demo.py.

Дополнительное LLM-объяснение

API не обязателен для запуска и проверки основного решения. Граф, роли, кластеры, рейтинг, локальная справка и CSV рассчитываются без внешней модели. Для дополнительного объяснения достаточно одного доступного провайдера и его ключа; оба ключа одновременно не требуются.

ПровайдерРеализованный APIМодель, закреплённая в коде
OpenAIhttps://api.openai.com/v1/responsesgpt-4.1-mini-2025-04-14
NVIDIA API Cataloghttps://integrate.api.nvidia.com/v1/chat/completionsmeta/llama-3.3-70b-instruct

Фактический статус на 23 сентября 2026 года:

ПровайдерРезультат живой проверкиЧто это означает для жюри
OpenAIHTTP 401, ошибка аутентификацииС текущим ключом ответ не получен. Нужны корректные учётные данные и повторная проверка; причина ошибки не доказывает проблему баланса или конкретное состояние аккаунта
NVIDIAHTTP 410 GoneЗакреплённая модель недоступна на используемом размещённом endpoint. В официальной карточке отмечено Free Endpoint Deprecated; замена одного ключа не гарантирует восстановление. Карточка NVIDIA

Проверка использовала только синтетические демоданные. Выполнены по одному исходному и одному отдельному диагностическому запросу к каждому провайдеру — четыре запроса, без автоматических повторов. Ключи присутствовали в локальных настройках, но MONEYMAP_AI_ENABLED=false; для диагностики режим включался только внутри проверяющего процесса. Успешного LLM-ответа и оценки качества модели нет. Полные результаты: FINAL_CHECK_RU.md.

Настройка выбранного провайдера

Создайте локальный .env в корне проекта по образцу .env.example. Если файл уже есть, отредактируйте его, сохранив нужные настройки. Вставьте настоящий ключ вместо YOUR_...; ключи не следует помещать в README или Git. Для внешнего запроса нужны интернет и доступ к выбранной модели у провайдера.

Для OpenAI:

MONEYMAP_AI_ENABLED=true
OPENAI_API_KEY=YOUR_OPENAI_API_KEY
OPENAI_MODEL=gpt-4.1-mini-2025-04-14

Текущая конфигурация NVIDIA приведена для воспроизводимости; она не устраняет HTTP 410:

MONEYMAP_AI_ENABLED=true
NVIDIA_API_KEY=YOUR_NVIDIA_API_KEY
NVIDIA_MODEL=meta/llama-3.3-70b-instruct

Произвольная замена NVIDIA_MODEL в .env не поддерживается: код разрешает только закреплённую модель. Переход на другую модель требует изменения конфигурации в коде и проверки адаптера, формата ответа и лимитов. В текущей версии такая миграция не выполнена.

По умолчанию интеграция выключена. Переменные окружения процесса имеют приоритет над .env, включая явно пустые значения. Кнопка «API күйін жаңарту» перечитывает настройки, не отправляет пробный запрос и не подтверждает работоспособность ключа или модели.

Как проверить именно LLM-ответ

  1. Загрузите встроенное демо и выполните анализ по сценарию раздела 7.
  2. Откройте «Анықтама», нажмите «Көмекшіге деректерді дайындау», выберите тип справки и клиента, например 1005 из демоданных.
  3. Раскройте «Қосымша: LLM түсіндірмесі және баптаулар», выберите провайдера и нажмите «API күйін жаңарту» после изменения .env.
  4. Нажмите «AI түсіндірмесін алу». Только это действие запускает новый запрос; одинаковый уже успешно обработанный запрос может вернуться из сессионного кэша.
  5. При успешном новом ответе появляется «LLM түсіндірмесі алынды · талдаушы тексеруі қажет». Откройте «LLM мәтіні · автоматты расталмаған түсіндірме»: именно там расположен текст модели. Основная справка на странице остаётся локальной. Сообщение «Кэштен алынды · жаңа сұрау жоқ» означает, что новый сетевой запрос не выполнялся.
  6. При ошибке приложение показывает предупреждение и локальную справку. Наличие справки после ошибки не подтверждает успех API. Для гарантированной демонстрации без сети используйте «Анықтаманы дайындау · API-сыз».

Шаги 4–5 описывают ожидаемое поведение при доступном провайдере; контрольная проверка текущих ключей и моделей завершилась ошибками из таблицы выше.

СитуацияЧто проверить
Кнопка запроса недоступнаMONEYMAP_AI_ENABLED=true, ключ выбранного провайдера, формат .env, переменные окружения
Ошибка аутентификации / HTTP 401 или 403Корректность ключа и доступ к модели; не публикуйте ключ при диагностике
HTTP 410 у текущей NVIDIA-моделиПрекращение доступа к endpoint; требуется отдельная миграция интеграции
Лимит провайдера / HTTP 429Ограничения запросов или кредита в аккаунте провайдера
Сетевая ошибка или таймаутДоступ к интернету и сервису; автоматического повтора нет
Ответ не принятJSON, ссылки на факты или значения не прошли проверку; такой текст не используется
Локальный лимит запросов, токенов или бюджетаНастройки MONEYMAP_AI_MAX_REQUESTS, MONEYMAP_AI_MAX_TOTAL_TOKENS, MONEYMAP_AI_BUDGET_USD и журнал в дополнительном разделе

LLM получает ограниченный набор рассчитанных фактов с обозначениями вида C001. Исходные Parquet-файлы и таблица соответствия полным gid не передаются; сами финансовые показатели остаются реальными данными. Ответ проверяется по структуре JSON, ссылкам на факты и допустимым числовым значениям. Такая проверка не гарантирует истинность всех смысловых выводов модели.

Доступны пять заданий: объяснение клиента, краткая справка о нём, приоритетные клиенты, обзор кластера и общие получатели выбранных клиентов. Свободного чата с произвольными запросами нет. Локальная справка строится из фактов Python-кодом и не является LLM-ответом.

Настройки по умолчанию: 20 запросов, 200 000 учитываемых/резервируемых токенов и $1 расчётного бюджета OpenAI. Это локальные ограничения приложения, не баланс и не платёжный лимит аккаунта провайдера. Для NVIDIA неизвестная денежная стоимость не подменяется оценкой; действуют ограничения запросов и токенов. Число запросов и токены учитываются совместно для обоих провайдеров в output/ai/usage.sqlite3; история сохраняется после перезапуска или замены ключа. Неудачные попытки тоже учитываются, а неизвестный расход сохраняется как резерв. Автоматических повторных запросов нет. .env и журнал расходов исключены из передаваемых сборок.

10. Ограничения текущей версии

  • Неполная финансовая картина. Нет переводов ниже 5 000 ₸, других банков и операций вне выбранного месяца. Клиентские профили, назначения платежей, остатки и подтверждённые роли отсутствуют. Полное выявление дробления сумм невозможно.
  • Граница графа. Исходящие операции 444 клиентов четвёртого шага не раскрыты. Нельзя считать их конечными получателями только из-за отсутствия видимого расхода. Входящие потоки исходных клиентов также неполны; превышение расхода над приходом само по себе не доказывает аномалию.
  • Ограниченная временная детализация. Есть даты, но нет времени внутри дня. Структурный путь не доказывает движение одних и тех же денег по цепочке. Проверка дат отсекает часть противоречий, но не выполняет точное сопоставление входящих и исходящих средств.
  • Оборот не равен остатку или преступному доходу. Одна сумма может учитываться повторно на разных шагах. Внешний поток кластера означает связь с другим кластером внутри наблюдаемого графа, а не перевод в другой банк.
  • Нет эталонной разметки. Роли и групповые гипотезы основаны на правилах; accuracy, precision и полнота выявления организаторов не измерены. Чувствительность к параметрам не заменяет оценку качества на размеченных данных.
  • Неоднозначные повторения операций. В исходном наборе сохранены 97 дополнительных строк с совпадающими реквизитами. Без уникального ID транзакции нет оснований автоматически удалять их как ошибки.
  • Масштабирование не подтверждено. Pandas и NetworkX держат данные в памяти, точная betweenness дорога на больших графах, полная карта передаётся браузеру. Проверки на миллион узлов нет.
  • Локальный прототип. Нет пользовательских аккаунтов, разграничения прав и совместного ведения расследований. Нет подключения к банковской АБС, автоматического блокирования счетов или симуляции разрушения сети. Рабочее состояние интерфейса не заменяет постоянное хранилище кейсов.
  • Язык и внешние модели. Интерфейс и обоснования — на казахском; переключатель на русский не реализован. Дополнительные API требуют ключей, интернета и отдельной проверки доступности. Собственная нейросеть не обучалась.

11. Развёрнутая версия и материалы проекта

Подтверждённая публичная deployed-версия в репозитории не указана. В текущей конфигурации сервер привязан к 127.0.0.1. Адрес http://127.0.0.1:8501 доступен локально после запуска и не является публичной ссылкой для жюри.

Дополнительные материалы, преимущественно на казахском языке:

Для подготовки архива после успешной приёмочной проверки:

.\.venv\Scripts\python.exe scripts\package_submission.py

Архив создаётся в output/submission/ и включает код, документацию, тесты, ресурсы карты и подготовленные результаты. Сборка исключает исходные Parquet, .env, ключи, виртуальную среду и журнал API-расходов. Для демонстрации реального кейса исходные три файла нужно передать отдельно. Папка output/ исключена из Git; результаты и архивы можно воспроизвести командами выше.

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

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

Yernur Noraly 10Codex 2Codex 1

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

  • 2026-09-23 17:53docs: identify exact revision used for final checksYernur Noraly
  • 2026-09-23 17:52docs: record final verification and live API limitationsYernur Noraly
  • 2026-09-23 17:43qweYernur Noraly
  • 2026-09-23 17:40Replace main project with current MoneyMap workspaceYernur Noraly
  • 2026-09-23 17:40docs: add Russian README for hackathon juryYernur Noraly
  • 2026-09-23 17:29qweYernur Noraly
  • 2026-09-23 16:41Complete investigation tools and expert review workflowCodex
  • 2026-09-23 16:30Add investigation lab, graph insights and local AI assistantCodex
Все коммиты (13)
  • 2026-09-23 15:48qweYernur Noraly
  • 2026-09-23 15:17version 2Yernur Noraly
  • 2026-09-23 14:55Deliver AQSHA TRACE AML graph analysis workspaceCodex
  • 2026-09-23 14:51Merge pull request #1 from BAITC-Hacks/version_1Yernur Noraly
  • 2026-09-23 14:41version_1Yernur Noraly
Структура репозитория (68 файлов)
.env.example
.gitignore
.streamlit/config.toml
README.md
app.py
config/roles.json
docs/ARCHITECTURE.md
docs/CASE_COMPLIANCE_REVIEW_KK.md
docs/CASE_RESEARCH_KK.md
docs/DEMO.md
docs/FINAL_CHECK_RU.md
docs/INPUT_AUDIT.md
docs/JURY_QA.md
docs/RELEASE_REVIEW_KK.md
docs/ROADMAP.md
docs/STAGE2.md
docs/STAGE3.md
docs/STAGE4.md
docs/STAGE5.md
docs/STAGE6.md
docs/VERIFICATION.md
docs/architecture.html
docs/architecture.svg
moneymap/__init__.py
moneymap/__main__.py
moneymap/ai_budget.py
moneymap/ai_facts.py
moneymap/ai_provider.py
moneymap/ai_response.py
moneymap/ai_service.py
moneymap/ai_settings.py
moneymap/data.py
moneymap/demo.py
moneymap/graph.py
moneymap/graph_component/graph.css
moneymap/graph_component/graph.js
moneymap/graph_component/index.html
moneymap/graph_view.py
moneymap/map_component.py
moneymap/reports.py
moneymap/roles.py
moneymap/ui_ai.py
moneymap/ui_design.py
moneymap/ui_graph.py
moneymap/ui_map.py
moneymap/ui_roles.py
moneymap/ui_state.py
pytest.ini
requirements.txt
scripts/package_submission.py
scripts/verify_submission.py
setup.ps1
start.ps1
tests/test_ai_app.py
tests/test_ai_budget.py
tests/test_ai_facts.py
tests/test_ai_provider.py
tests/test_ai_response.py
tests/test_ai_service.py
tests/test_ai_settings.py
tests/test_app.py
tests/test_cli.py
tests/test_data.py
tests/test_graph.py
tests/test_graph_view.py
tests/test_map_component.py
tests/test_roles.py
tests/test_submission_verifier.py
Ветки (3)

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

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

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