AAYMA
RU
Войти

SanaLab

Django-платформа: представитель бизнеса описывает задачу (название, описание, потребность, ожидаемый результат, контакт, формат взаимодействия)…

Прототип
Команда «SanaLab» 1💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: SanaLab
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Прототип

Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд

Суть

Django-платформа: представитель бизнеса описывает задачу (название, описание, потребность, ожидаемый результат, контакт, формат взаимодействия), подтверждает карточку и получает рейтинг полноты 0–100. Для студентов есть отдельные аккаунты и рекомендации.

Как устроено

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

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

  • rule-based completeness scoring
  • role-based accounts
  • draft/confirm workflow

Стек

Python · Django 6 · SQLite


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

README

README.md

SanaLab

hack-b2505c12-sanalab — репозиторий команды SanaLab для хакатона.

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

О версии документа. Зависимости и точка запуска проверены по переданным корневым файлам; структура данных — по схемам двух резервных баз SQLite. Разделы о функциях и маршрутах основаны на ТЗ и коде из обсуждения проекта. Актуальные папки accounts, backend, frontend, config и рабочая база db.sqlite3 в последнюю загрузку не вошли, поэтому наличие всех функций в текущем репозитории и успешный запуск не подтверждены.

Функциональность по ТЗ

НаправлениеТребование
АккаунтыРегистрация, вход и личный кабинет для ролей «Представитель бизнеса» и «Студент».
Создание задачиСвободный ввод названия, описания, потребности, ожидаемого результата, контакта и формата взаимодействия.
Карточка задачиПросмотр сохранённых сведений и редактирование существующей записи.
Ручное подтверждениеОтдельное действие подтверждения после проверки введённых данных.
ОцениваниеРейтинг полноты от 0 до 100, расшифровка баллов и список недостающих сведений.
ПересчётОбновление оценки после редактирования и сохранения задачи.

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

Данные задачи

ПолеИмя в модели из обсужденияСодержание
НазваниеtitleКраткое название задачи.
ОписаниеdescriptionТекущая ситуация и контекст проблемы.
ПотребностьneedЧто необходимо для решения задачи.
Ожидаемый результатexpected_resultЖелаемые изменения и признаки достижения результата.
КонтактcontactУдобный способ связи, указанный свободным текстом.
Формат взаимодействияinteraction_formatПредпочтительный способ совместной работы.

Все шесть столбцов присутствуют в таблице backend_businessrequest резервной базы db.before_request_features.sqlite3. Это подтверждает структуру снимка, но не правила проверки формы и не состояние рабочей базы.

Рейтинг полноты

ТЗ предусматривает общую оценку 0–100, пояснение начисленных баллов и рекомендации, какие сведения повысят рейтинг. После сохранения изменений пользователь должен видеть актуальную оценку.

Конкретные веса и пороги исходным ТЗ не заданы. В подготовленном ранее дополнении расчёт был вынесен в backend/task_rating.py, а вывод — в шаблоны карточки и списка. В последнюю загрузку этот модуль не вошёл: действующие критерии необходимо проверять в коде репозитория.

Рейтинг полноты не следует представлять как оценку достоверности, коммерческой ценности или выполнимости задачи. Он также не заменяет ручное подтверждение.

Структура проекта

Ниже объединены корневые файлы из последней загрузки и структура приложений, ранее показанная в обсуждении. Дерево не является полным перечнем файлов текущего репозитория.

hack-b2505c12-sanalab/
├── accounts/                         # Аккаунты, вход и личные кабинеты
│   ├── migrations/
│   ├── templates/
│   │   └── accounts/
│   ├── models.py
│   ├── urls.py
│   └── views.py
├── backend/                          # Модели и логика задач
│   ├── migrations/
│   └── models.py
├── config/                           # Настройки и корневые маршруты
│   ├── settings.py
│   └── urls.py
├── frontend/                         # Формы, представления и страницы
│   ├── static/
│   │   └── frontend/
│   ├── templates/
│   │   └── frontend/
│   ├── forms.py
│   ├── urls.py
│   └── views.py
├── .gitignore
├── db.sqlite3                        # Рабочая база; в загрузку не вошла
├── db.before_form_tz.sqlite3          # Резервный снимок базы
├── db.before_request_features.sqlite3 # Резервный снимок базы
├── manage.py
├── requirements.txt
└── README.md

В manage.py по умолчанию установлен модуль настроек config.settings. Команды проекта выполняются из каталога, содержащего manage.py.

Зависимости

Версии перенесены из requirements.txt без изменений:

asgiref==3.12.1
Django==6.0.6
sqlparse==0.6.0
tzdata==2026.4

Версия Python в переданных корневых файлах не зафиксирована. Согласно документации Django 6.0, поддерживаются ветки Python 3.12, 3.13 и 3.14; это требование фреймворка, а не подтверждённая матрица тестирования SanaLab. Источники общих инструкций приведены в конце документа.

Резервные базы имеют формат SQLite. Фактическое подключение рабочей базы определяется настройкой DATABASES в config/settings.py, содержимое которой в последнюю загрузку не вошло.

Локальный запуск

Инструкция рассчитана на полный репозиторий с приложениями, настройками и миграциями. Одних приложенных корневых файлов недостаточно: отсутствие config/settings.py или кода приложений нельзя исправить установкой зависимостей.

Перед обновлением существующего проекта сохраните копию кода и рабочей базы. Не подменяйте db.sqlite3 одним из резервных снимков для обычного запуска.

1. Открыть корень проекта

Перейдите в уже скачанный или клонированный репозиторий:

cd hack-b2505c12-sanalab
python --version

Адрес репозитория в переданных файлах не указан, поэтому команда клонирования с предполагаемым URL здесь не приводится.

2. Создать и активировать окружение

При первом запуске:

python -m venv venv

Если рабочее окружение уже создано, достаточно его активировать. Выберите команду для своего терминала.

Windows — Git Bash:

source venv/Scripts/activate

Windows — CMD:

venv\Scripts\activate.bat

Windows — PowerShell:

.\venv\Scripts\Activate.ps1

Linux / macOS — Bash или Zsh:

source venv/bin/activate

На Linux/macOS при отсутствии команды python для создания окружения используйте python3 -m venv venv.

3. Установить зависимости

В активированном окружении:

python -m pip install -r requirements.txt
python -m django --version

После установки из приложенного файла ожидаемая версия Django — 6.0.6. Если установщик не находит одну из закреплённых версий, сначала проверьте версию Python, доступ к индексу пакетов и корректность командного окружения; не заменяйте зависимости произвольными версиями без согласования с командой.

4. Проверить проект и применить миграции

python manage.py check
python manage.py migrate

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

5. Запустить сервер разработки

python manage.py runserver

Откройте в браузере:

http://127.0.0.1:8000/

Остановка сервера — Ctrl + C. runserver предназначен для локальной разработки, а не для публичного размещения.

Страницы и маршруты

Адреса приведены по маршрутам из обсуждения. Они предполагают подключение frontend.urls к корню сайта и accounts.urls под префиксом accounts/; актуальный config/urls.py необходимо сверить с репозиторием.

АдресНазначение
/Главная страница.
/request/Создание задачи.
/requests/Список «Мои заявки» из дополнения к карточкам.
/accounts/Выбор типа аккаунта.
/accounts/business/register/Регистрация представителя бизнеса.
/accounts/business/login/Вход представителя бизнеса.
/accounts/business/Личный кабинет представителя бизнеса.
/accounts/student/register/Регистрация студента.
/accounts/student/login/Вход студента.
/accounts/student/Личный кабинет студента.
/accounts/logout/Выход; в присланной реализации используется POST-форма.

В показанном accounts/urls.py личный кабинет имеет имя accounts:dashboard и принимает параметр role со значением business или student. Страницы входа и регистрации используют имена accounts:login и accounts:register.

Точные адреса отдельных карточек и их редактирования следует брать из текущего frontend/urls.py; в корневых файлах они не определены.

База данных и резервные копии

ФайлЧто подтверждает схема снимка
db.before_form_tz.sqlite3Таблица backend_businessrequest содержит первоначальные поля: компанию, email, тип обращения, название, описание, ожидаемый результат и дату создания.
db.before_request_features.sqlite3В таблице задач дополнительно присутствуют need, contact, interaction_format, status, confirmed_at, updated_at, owner_key и revision. Также присутствует accounts_accountprofile со столбцами role и user_id.

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

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

Что исключено из Git

В приложенном .gitignore указано:

__pycache__/
*.py[cod]
db.sqlite3
venv/
.venv/

В этом файле нет правила для db.before_*.sqlite3. Перед публикацией проекта проверьте, не попадут ли резервные базы в репозиторий.

Возможное дополнение, которое не применено автоматически:

*.sqlite3
*.sqlite3-*
.env

Правила .gitignore не прекращают отслеживание файлов, уже добавленных в Git. Изменения состава репозитория нужно проверять отдельно; публикация резервной базы может раскрыть содержащиеся в ней данные.

Проверка изменений

После внесения правок в полный проект:

python manage.py check
python manage.py test

Если установлен ранее подготовленный модуль оценки и существует backend/test_task_rating.py, отдельно доступны его тесты:

python -m unittest backend.test_task_rating -v

Присутствие этого тестового файла и результаты тестов в текущей версии не проверены по последней загрузке. Успешная системная проверка не заменяет проверку пользовательского сценария.

Проверка сценария по ТЗ

  1. Зарегистрировать тестовый аккаунт, выйти и повторно войти; проверить переход в кабинет своей роли.
  2. Создать задачу с шестью полями и убедиться, что после открытия карточки данные сохранены.
  3. Отредактировать карточку и проверить, что изменяется та же запись, а не создаётся новая.
  4. Проверить расшифровку рейтинга и рекомендации, затем изменить сведения и сравнить оценку после сохранения.
  5. Выполнить ручное подтверждение и отдельно проверить поведение статуса после редактирования.

Дополнительно следует проверить доступ к карточкам из другого аккаунта и другой сессии. В ранее подготовленном дополнении использовалась привязка к сессии; её нельзя автоматически считать привязкой к учётной записи после добавления авторизации.

Источники документации

Материалы проекта: исходный README.md, manage.py, requirements.txt, .gitignore, схемы двух приложенных резервных баз, а также ранее показанные структура проекта, accounts/urls.py, accounts/views.py и ТЗ. Предложенные ранее дополнения описаны отдельно от подтверждённого состава последней загрузки.

Общие инструкции по окружению и командам сверены с официальной документацией и не являются результатом запуска SanaLab:

ИсточникАдрес
Совместимость Python и Django 6.0https://docs.djangoproject.com/en/6.0/faq/install/
Окружение Python venvhttps://docs.python.org/3/library/venv.html
Команды manage.pyhttps://docs.djangoproject.com/en/6.0/ref/django-admin/
Сервер разработки Djangohttps://docs.djangoproject.com/en/6.0/intro/tutorial01/
Модели и миграции Djangohttps://docs.djangoproject.com/en/6.0/intro/tutorial02/
Правила .gitignorehttps://git-scm.com/docs/gitignore

Команда и лицензия

Команда — SanaLab. В исходном README проект обозначен как командный репозиторий для хакатона.

Состав команды и лицензия в переданных материалах не указаны. Этот документ не назначает проекту лицензию и не добавляет отсутствующие сведения об авторах.

Okesh Alikhan \ Timur Mukushev

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

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

TimurMukushev 11X-an-tati 9

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

  • 2026-09-23 17:50change READMEX-an-tati
  • 2026-09-23 17:42add readmeTimurMukushev
  • 2026-09-23 17:39add recommendations for studentsTimurMukushev
  • 2026-09-23 17:14fix student registration errorTimurMukushev
  • 2026-09-23 17:02Resolve merge conflicts and ignore generated filesTimurMukushev
  • 2026-09-23 16:58main page recommendationsTimurMukushev
  • 2026-09-23 16:57fix_cabX-an-tati
  • 2026-09-23 16:39Merge branch 'main' of https://github.com/BAITC-Hacks/hack-b2505c12-sanalabX-an-tati
Все коммиты (20)
  • 2026-09-23 16:39cabinet2X-an-tati
  • 2026-09-23 16:22add profile pageTimurMukushev
  • 2026-09-23 16:22add_authX-an-tati
  • 2026-09-23 15:40change_request_page_againX-an-tati
  • 2026-09-23 15:23add authentication and registration logicTimurMukushev
  • 2026-09-23 15:10change_request_pageX-an-tati
  • 2026-09-23 15:03change models file for backendTimurMukushev
  • 2026-09-23 14:51add_request_pageX-an-tati
  • 2026-09-23 14:29add model for business cardsTimurMukushev
  • 2026-09-23 14:15main structureX-an-tati
  • 2026-09-23 13:21add frontend appTimurMukushev
  • 2026-09-23 13:09create project and appTimurMukushev
Структура репозитория (52 файлов)
.gitignore
README.md
accounts/__init__.py
accounts/admin.py
accounts/apps.py
accounts/migrations/0001_initial.py
accounts/migrations/__init__.py
accounts/models.py
accounts/templates/accounts/auth_base.html
accounts/templates/accounts/choose_role.html
accounts/templates/accounts/dashboard.html
accounts/templates/accounts/login.html
accounts/templates/accounts/register.html
accounts/tests.py
accounts/urls.py
accounts/views.py
backend/__init__.py
backend/admin.py
backend/apps.py
backend/migrations/0001_initial.py
backend/migrations/0002_businessrequest_contact_and_more.py
backend/migrations/0003_alter_businessrequest_options_and_more.py
backend/migrations/0004_businessrequest_owner.py
backend/migrations/__init__.py
backend/models.py
backend/tests.py
backend/views.py
config/__init__.py
config/asgi.py
config/settings.py
config/urls.py
config/wsgi.py
db.before_form_tz.sqlite3
db.before_request_features.sqlite3
frontend/__init__.py
frontend/admin.py
frontend/apps.py
frontend/forms.py
frontend/migrations/0001_initial.py
frontend/migrations/__init__.py
frontend/models.py
frontend/templates/frontend/business_request.html
frontend/templates/frontend/index.html
frontend/templates/frontend/request_base.html
frontend/templates/frontend/request_detail.html
frontend/templates/frontend/request_list.html
frontend/tests.py
frontend/tests_requests.py
frontend/urls.py
frontend/views.py
manage.py
requirements.txt

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

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

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