Автор: Стилиан Палазов (SVPalazov23)
Организация: Професионална гимназия по компютърно програмиране и иновации — гр. Бургас
Основната цел на приложението е да дигитализира и автоматизира ежедневните процеси в Изпълнителната агенция по рибарство и аквакултури (ИАРА). Системата предоставя централизиран уеб интерфейс за инспектори и администратори, с който лесно и безгрешно се управлява риболовният флот, издават се разрешителни по регулации на ЕС, вписват се инспекции и дневници, и се изчисляват такси за любителски риболов.
За разработването на тази система заложих на съвременни, бързи и надеждни технологии:
| Компонент | Технология | Описание и роля в проекта |
|---|---|---|
| Backend | 🐍 Python 3.x | Основният език, на който е написана цялата бизнес логика. |
| Уеб Рамка | 🌶️ Flask | Лек и мощен софтуерен рамков инструмент за маршрутизация (routing) и обработка на потребителски заявки. |
| База Данни | 🗄️ SQLite 3 | Релационна база данни. Всички данни се пазят сигурно в един локален файл (iara.db), като се използват релационни връзки (FOREIGN KEY) за интегритет. |
| Пакетен Мениджър | ⚡ uv (by Astral) |
Използван за светкавично управление наdependencies и изолиране на проекта във виртуална среда (.venv). |
| Шаблонизатор | 🎨 Jinja2 | Позволява динамично генериране на HTML страници и директно вграждане на Python данни в изгледите. |
| Frontend | 🌐 HTML5 & CSS3 | Чист, семантичен код за интерфейса с интуитивна синя навигационна лента, съобразена с брандинга на държавните институции. |
| Контрол на версиите | 🐙 Git & GitHub | Използвани за системно проследяване на промените и сигурно качване на кода в GitHub Classroom. |
Проектът използва релационен модел за управление на данните. Връзките между обектите са подсигурени чрез ограничения за външни ключове (FOREIGN KEY), което гарантира липса на излишно дублиране на данни (Data Integrity).
Пази данните за профилите на служителите с цел сигурен достъп до системата.
id(INTEGER, Primary Key, Autoincrement) — Уникален идентификатор на служителя.username(TEXT, Unique, NOT NULL) — Потребителско име за вход.password(TEXT, NOT NULL) — Хеширана/защитена парола.
Съдържа техническа информация за всички регистрирани плавателни съдове.
id(INTEGER, Primary Key, Autoincrement) — Уникален номер на кораба.name(TEXT, NOT NULL) — Име на плавателния съд.registration_number(TEXT, Unique, NOT NULL) — Регистрационен номер / Външна маркировка.length(REAL) — Дължина на кораба в метри.owner(TEXT, NOT NULL) — Име на корабособственика (физическо или юридическо лице).
Следи легалния статус на корабите съгласно квотите и регулациите.
id(INTEGER, Primary Key, Autoincrement) — Номер на разрешителното.ship_id(INTEGER, Foreign Key ➔ships.id) — Към кой кораб е издадено.permit_type(TEXT, NOT NULL) — Вид стопански риболов.issue_date(TEXT, NOT NULL) — Дата на издаване.expiry_date(TEXT, NOT NULL) — Дата на изтичане на валидността.status(TEXT, NOT NULL) — Текущ статус (Активно / Изтекло).
Използва вградена логика за автоматично таксуване на гражданите.
id(INTEGER, Primary Key, Autoincrement) — Номер на билета.fisherman_name(TEXT, NOT NULL) — Трите имена на риболовеца.egn(TEXT, NOT NULL) — ЕГН за проверка на възрастта.birth_date(TEXT, NOT NULL) — Дата на раждане.ticket_type(TEXT, NOT NULL) — Срок на валидност (Седмичен, Месечен, Годишен).price(REAL, NOT NULL) — Изчислена крайна цена (с автоматична отстъпка за пенсионери над 65 г.).
Пази история за контролната дейност на инспекторите на ИАРА.
id(INTEGER, Primary Key, Autoincrement) — Номер на инспекцията.inspector_id(INTEGER, Foreign Key ➔users.id) — Кой инспектор е извършил проверката.ship_id(INTEGER, Foreign Key ➔ships.id) — Кой кораб е проверяван.inspection_date(TEXT, NOT NULL) — Дата на проверката.findings(TEXT) — Констатации (Наличие на нарушения, нередовни уреди и т.н.).
- 🔒 Управление на достъпа (Session Management): Страници за Вход (
/login) и Регистрация (/register). Системата използва бисквитки за сесии и custom декоратора@login_required, блокиращ неоторизиран достъп до вътрешните административни страници. - 🏠 Начало (Dashboard): Главна страница с бързи връзки, съобразена с визуалните изисквания за държавна администрация.
- 🚢 Модул "Кораби": Форма за въвеждане на нови плавателни съдове и динамична таблица, визуализираща целия флот.
- 📄 Модул "Разрешителни": Административен панел за обвързване на кораб с активна квота за улов.
- 🎟️ Модул "Билети": Позволява бързо издаване на билети за любители. Бекендът автоматично калкулира цената въз основа на ЕГН-то.
- 📋 Модул "Дневник / Инспекции": Място за регистриране на нарушения и констативни протоколи на вода.
Ако имате инсталиран пакетния мениджър uv:
uv run app.py