OpenChart
Claude·Codex와 함께하는 무료 데스크톱 차트 도구. 알림 설정·차트 움직임 분석·데이터 제공자 선택
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Цифровая площадка трансграничного финансирования между юрлицами: российские компании публикуют заявки на ликвидность, проверенные зарубежные кредиторы присылают предложения, платформа сравнивает их по полной стоимости и ведёт сделку до статуса «Согласовано».
Демо: https://sber-delta.vercel.app · на странице входа в демо-режиме есть кнопки входа в любую роль.
| Требование | Реализация |
|---|---|
| Регистрация юрлиц с ролями, KYC/AML через администратора | Заёмщик (РФ, ИНН из 10 цифр) или кредитор (страна + рег. номер). Пакет документов PDF, решение администратора по всему пакету: одобрение или отказ с причиной, которую видит компания |
| Заявка: сумма и валюта, юрисдикция, назначение, срок, способ передачи, модерация | Все поля, способы передачи SWIFT / СПФС / CIPS / платёжный агент. Модерация автоматическая: правила проверяют сумму, срок, назначение и стоп-слова и публикуют заявку сразу. Оператору уходят только первая заявка компании и суммы выше порога; опубликованную заявку оператор снимает по жалобе кредитора |
| Отклики кредиторов с фильтрами по стране, сумме и сроку | Фильтры страна / валюта / сумма от–до / срок до. Предложение: сумма к выдаче, ставка, комиссия за организацию, дополнительные условия |
| Статусная модель, принятие/отклонение, чат, «В работе» / «Согласовано», архив и история | Шкала этапов Проверка → Публикация → Предложения → Сделка → Договор → Согласовано; предложение видно заёмщику сразу после автопроверки, оператор показывает или скрывает только отмеченные правилом; заёмщик принимает или отклоняет; чат и документы сделки; журнал событий каждой заявки; архив согласованных сделок |
| Аналитика: количество заявок, средний размер, топ-страны по спросу и предложению | Средний размер — отдельно по каждой валюте; спрос — страны получения средств; предложение — страны кредиторов; доля заявок, дошедших до сделки |
Сверх задания.
/creditors/{id}): завершённые сделки, средняя ставка и комиссия, скорость ответа, доля принятых предложений. Рейтинг из 5 появляется после первой сделки или трёх решений заёмщиков. Профиль видят заёмщики, которым показали предложение, сам кредитор и сотрудники.services/screening.py, пороги в config.py). Жёсткие правила отклоняют сразу с понятной причиной: сумма заявки, длина назначения, стоп-слова, ставка до 50%, комиссия кредитора до 10%, минимум 10% суммы. Мягкие правила отправляют оператору: первая заявка компании, сумма выше порога, ставка дальше 5 п. п. от рыночной (медиана показанных предложений в валюте). Кредиторы могут пожаловаться на опубликованную заявку./deal/{id}/contract-draft.pdf): стороны, сумма, ставка, комиссия, срок и график подставлены из сделки./admin/export.xlsx): аналитика, сделки, заявки, предложения./security): как проверяются участники, кто что видит, перечень документов KYC, сроки.DADATA_API_KEY, без неё выключено).Сравнение предложений. Для каждого оффера: проценты за срок заявки, комиссия в деньгах, переплата и полная стоимость в % годовых = ставка + комиссия × 12 / срок. Экономия лучшего предложения считается на сумму заявки, чтобы офферы с разной суммой к выдаче сравнивались честно.
main.py точка входа (Vercel / uvicorn ищут здесь app)
liquidity/
config.py переменные окружения и справочники (валюты, страны, статусы, документы KYC)
database.py подключение к БД, миграции новых колонок
models.py ORM: users, applications, offers, documents, messages, application_events, stored_files
security.py пароли (bcrypt), сессия (JWT в httpOnly-cookie со сроком), роли, CSRF
web.py шаблоны Jinja2, форматирование сумм и процентов
services/ бизнес-логика без HTTP
accounts.py регистрация, вход, сотрудники
kyc.py пакет документов и решение администратора
applications.py заявки, модерация, поиск с фильтрами, этапы
offers.py предложения, проверка оператором, решение заёмщика
deals.py доступ к сделке, чат, договор, подтверждение
costs.py полная стоимость и сравнение предложений
analytics.py аналитика и архив
files.py безопасная загрузка и выдача файлов
events.py история заявки
demo.py демо-данные
routers/ HTTP-слой по ролям: auth, borrower, creditor, kyc, deals, operator, admin
app.py сборка FastAPI: middleware, обработчики ошибок, роутеры
templates/ base.html (каркас и меню по ролям), _ui.html (общие элементы), экраны
static/css/app.css дизайн-система без внешних CDN
tests/ pytest: сквозной сценарий, сервисы, безопасность
Роутеры только принимают форму, проверяют роль (require_role) и вызывают сервис; сервисы бросают доменные исключения NotFound / Forbidden / Invalid, которые app.py превращает в ответы 404 / 403 / 400.
require_role на каждом маршруте; самостоятельно можно зарегистрироваться только заёмщиком или кредитором.httpOnly, SameSite=Lax, Secure на HTTPS, срок жизни SESSION_HOURS (8 ч).X-Frame-Options: DENY, X-Content-Type-Options: nosniff, Referrer-Policy.Интерфейс серверный (HTML-формы). Полная схема — /docs (Swagger) и /openapi.json.
| Метод и путь | Роль | Назначение |
|---|---|---|
GET / · POST /login · GET /logout | все | вход и выход |
GET/POST /register | гость | регистрация юрлица |
GET /dashboard | все | кабинет по роли |
GET /kyc · POST /kyc/upload · POST /kyc/submit | заёмщик, кредитор | пакет документов KYC |
POST /create_application | заёмщик | заявка (автопроверка; подозрительные — оператору) |
POST /applications/{id}/complain | кредитор | жалоба на опубликованную заявку |
GET /applications/{id}/offers | заёмщик | карточка заявки: этапы, сравнение, история |
POST /accept_offer/{id} · POST /reject_offer/{id} | заёмщик | решение по предложению |
POST /create_offer/{app_id} | кредитор | предложение по опубликованной заявке |
GET /operator/offers · POST /operator/offer/{id}/show · /hide | оператор, админ | предложения, отмеченные автопроверкой |
GET /operator/deals · GET /operator/deal/{id} · POST /operator/deal/{id}/confirm | оператор, админ | проверка и подтверждение сделки |
GET /deal/{id} · POST /deal/{id}/send · /upload_contract · /call_operator | участники, сотрудники | комната сделки |
GET /uploads/{file} | владелец, участники, сотрудники | скачать документ |
GET /admin · POST /admin/application/{id}/moderate · POST /admin/complaint/{id}/dismiss | админ, оператор | аналитика, архив, ручная проверка заявок, жалобы |
POST /admin/kyc/approve_user/{id} · /reject_user/{id} | админ |
pip install -r requirements.txt
cp .env.example .env # заполните DATABASE_URL, SECRET_KEY, ADMIN_EMAIL, ADMIN_PASSWORD
uvicorn main:app --reload
Для быстрого старта без PostgreSQL: DATABASE_URL=sqlite:///./local.db DEMO_MODE=1 uvicorn main:app.
| Переменная | Назначение |
|---|---|
DATABASE_URL | PostgreSQL (на Vercel подставляется интеграцией Neon) или SQLite |
SECRET_KEY | подпись сессий — длинная случайная строка |
ADMIN_EMAIL, ADMIN_PASSWORD | первый администратор, создаётся при старте |
DEMO_MODE=1 | демо-данные и вход в роли одной кнопкой |
SESSION_HOURS | срок жизни сессии, по умолчанию 8 |
DADATA_API_KEY | необязательно: автозаполнение компании по ИНН при регистрации (бесплатный ключ на dadata.ru) |
Vercel сам распознаёт FastAPI в main.py; каждый push в main выкатывается автоматически, для других веток — превью-ссылка.
SECRET_KEY, ADMIN_EMAIL, ADMIN_PASSWORD, для презентации — DEMO_MODE=1.Таблицы и новые колонки создаются при старте. Файлы хранятся в БД (у Vercel нет постоянного диска), лимит файла — 4 МБ.
pip install -r requirements.txt -r requirements-dev.txt
pytest -q
tests/test_flow.py — сквозной сценарий из задания: регистрация → KYC с отказом и повторной подачей → модерация → фильтры → предложения → оператор → отклонение и принятие → договор → «Согласовано» → архив и аналитика; доступ к файлам.tests/test_services.py — расчёт полной стоимости и сравнение, этапы, аналитика по валютам, валидация регистрации, демо-данные (сброс не трогает реальные данные).tests/test_autocheck.py — автоматическая проверка: публикация сразу, флаги для оператора, ставка далеко от рынка, стоп-слова, жалобы кредиторов.tests/test_feedback.py — KYC и чат без перезагрузки, удаление договора, главный администратор, модерация оператором, снятие заявки, подсказки к терминам.tests/test_extras.py — калькулятор, профиль и рейтинг кредитора, сроки ответа, проект договора, выгрузка в Excel, сохранённые фильтры, страница безопасности.tests/test_more.py — частичное финансирование и синдикат, встречная ставка, сроки действия, журнал, отпечаток договора, валютный риск, ИНН, графики, английская версия, PWA.tests/test_security.py — CSRF, флаги и срок сессии, поддельный и истёкший токен, ролевая модель, экранирование HTML, заголовки, демо-режим.Тесты запускаются на GitHub Actions при каждом push (.github/workflows/tests.yml).
Python 3.12, FastAPI, SQLAlchemy 2, PostgreSQL (Neon), Jinja2, python-jose, passlib/bcrypt · собственная дизайн-система на CSS · Vercel.
liquidity/i18n_en.py, русские шаблоны не меняются.| решение по KYC |
POST /admin/create_user | админ | сотрудник (оператор или админ) |
POST /demo/login/{role} · POST /demo/reset | демо-режим | вход в роль, пересоздание демо-данных |
GET /health | все | состояние БД и переменных окружения |