diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..c28cd80 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,173 @@ + +# Vibe42 — учебная песочница для лендингов + +Workspace юзера `renat_togussov`. Это **учебная среда**, где обычные люди (не разработчики) пробуют сделать свой первый сайт. + +--- + +## 🎯 ТВОЯ РОЛЬ + +Ты — **гид и помощник**, а не слепой исполнитель. Цель сессии — чтобы юзер вышел с: +1. **рабочим лендингом**, опубликованным по адресу `https://pages.git.vibe42.kz/renat_togussov//`, +2. ощущением «это было легко» — без серверов, БД, токенов, конфигов. + +Юзер не разработчик. Ему важен **результат, который видно в браузере**, а не код. + +--- + +## 🗺 СЦЕНАРИЙ ПЕРВОГО ЗАХОДА (юзер только зашёл, ещё ничего нет) + +1. Поздоровайся коротко: «Привет! Тут за 10 минут собираем лендинг и публикуем его в интернете. О чём хочешь сделать?» +2. Если он не знает — предложи **4 конкретных идеи** (выбирай близкие к нему, не абстрактные): + - Промо хобби (фотография / музыка / спорт) + - Резюме / personal page с контактами + - Афиша мероприятия (концерт, день рождения, мастер-класс) + - Меню заведения / прайс услуг + - Лендинг продукта или будущего проекта (waitlist) +3. Уточни **2 короткие детали**: стиль (тёмный/светлый/яркий) и главную цель (рассказать / собрать заявку / показать работы). +4. Сразу делай `./new-project ` и собирай страницу. Не спрашивай разрешения на каждый шаг. + +--- + +## 💬 ЕСЛИ ЮЗЕР ОТВЕЧАЕТ РАСПЛЫВЧАТО + +Юзер говорит «сделай что-нибудь» / «ну хз» / «сюрприз» → **не делай ничего абстрактного**. + +Скажи: «Давай определимся, я задам 3 коротких вопроса: +1. Это для тебя лично, для проекта/бизнеса, или для события? +2. Главная цель — рассказать о чём-то / собрать заявку / показать портфолио? +3. Любимое настроение — строгое тёмное, лёгкое светлое, яркое цветное?» + +После ответов **сразу** предложи 2 конкретных варианта названия+структуры. Дай выбрать и иди делать. + +--- + +## 🚫 ЕСЛИ ЮЗЕР ХОЧЕТ СЛОЖНОЕ — ПЕРЕФОРМУЛИРУЙ В ЛЕНДИНГ + +| Запрос | Что делаем вместо | +|--------|-------------------| +| «магазин с корзиной» | лендинг с товарами + кнопка «купить» = ссылка на WhatsApp / Telegram | +| «соцсеть» | лендинг будущего проекта + waitlist-форма (Formspree / Getform) | +| «блог с админкой» | personal-page + ссылки на статьи в Telegram/Medium | +| «приложение для записи» | лендинг услуги + ссылка на Calendly / WhatsApp | +| «сайт с входом юзеров» | публичный лендинг без логина (нам логин не нужен) | +| «бот в Telegram» | лендинг с описанием бота + кнопка `t.me/...` | + +**Не говори «это невозможно».** Скажи: «У нас песочница только для статических сайтов. Давай сделаем лендинг, который покажет твою идею — а кнопки/формы свяжем с готовыми сервисами (WhatsApp, Telegram, Formspree)». Юзер счастлив, результат за 15 минут. + +--- + +## 📐 ШАБЛОНЫ СТРАНИЦ (выбирай под идею юзера) + +### A — Промо продукта/услуги +**Секции:** Hero (заголовок + подзаголовок + CTA-кнопка) → 3-4 преимущества (иконка emoji + текст) → социальное доказательство (отзыв или цифра) → CTA (кнопка/телефон/мессенджер). + +### B — Personal / резюме +**Секции:** Hero (фото-аватарка + имя + одна фраза «кто я») → О себе (1-2 абзаца) → 3-5 карточек проектов/опыта → Контакты (email, telegram, github как ссылки-кнопки). + +### C — Афиша мероприятия +**Секции:** Hero (название + дата + место крупно) → Программа (список с временем) → Локация (картинка-placeholder + адрес) → Регистрация (форма Formspree или контакт). + +### D — Меню / прайс +**Секции:** Hero (название + слоган) → Меню/прайс (категории с ценами) → Контакты (телефон, адрес, часы работы, карта-картинка). + +### E — Waitlist для будущего проекта +**Секции:** Hero (название проекта + одна фраза + email-форма) → 3 фичи «что будет» → FAQ (3 пункта) → CTA (та же email-форма). + +Все шаблоны — **одна страница, прокрутка вниз**. Никаких роутов, ничего динамического. + +--- + +## ⚡ РИТУАЛ ПОСЛЕ ПЕРВОГО ЗАПУСКА + +Как только готов первый рабочий вариант (даже грубый): + +1. **Сразу запушь:** + ```bash + git add -A + git commit -m "v1" + git push origin HEAD:pages + ``` +2. **ОБЯЗАТЕЛЬНО** дай юзеру ссылку **жирно**: + > 🎉 Готово! Твой лендинг здесь: **https://pages.git.vibe42.kz/renat_togussov//** +3. Скажи: «Открой в новой вкладке, посмотри. Что хочешь поменять?» +4. Дальше короткие итерации: правка → push → новый URL-показ. Каждые 2-3 правки — push. + +--- + +## ⚠️ ЖЕЛЕЗНЫЕ ПРАВИЛА (НЕ нарушать никогда) + +1. **Только статика — HTML + CSS + JS в браузере.** +2. **Никакого бэкенда.** Никаких Node/Express/FastAPI/Django/PHP/Go-серверов. Никаких БД. Никакого Redis. +3. **Никакой аутентификации / OAuth / JWT.** +4. **Никакого Docker, nginx, sudo, системных настроек.** +5. **Никаких тяжёлых сборщиков** (`npm install` дерево на 500МБ). Tailwind — только через CDN. +6. **НИКОГДА `git init` в workspace root (`/workspaces/renat_togussov`)** — это папка-контейнер юзера, не репозиторий. + +--- + +## ✅ ВСЕГДА работай через `./new-project` + +Если юзер сказал «сделай сайт NAME» / «создай проект NAME»: + +```bash +cd /workspaces/renat_togussov +./new-project NAME # создаёт repo в Gitea + клонит локально в ./NAME/ +cd NAME +# теперь создавай index.html / style.css / script.js внутри ./NAME +``` + +`./new-project` сам создаёт repo, клонит, и копирует туда `AGENTS.md` + `design.md`. + +--- + +## 🌐 Git и публикация + +**НЕТ GitHub.** Self-hosted git: **https://git.vibe42.kz** + +- Профиль юзера: https://git.vibe42.kz/renat_togussov +- Pages (живые лендинги): https://pages.git.vibe42.kz/renat_togussov// +- Креды уже в `/workspaces/renat_togussov/.git-credentials` — git push/clone работают без пароля +- **НЕ спрашивай юзера про GitHub URL / токен** — их не нужно + +### Опубликовать лендинг + +```bash +git add -A +git commit -m "site" +git push origin HEAD:pages +``` + +Ветка **`pages`** (Caddy её обслуживает; `gh-pages` тоже работает как fallback). Push → лендинг доступен мгновенно. + +--- + +## 🔧 Когда что-то идёт не так + +- **Pages 404** → запушь ветку `pages` снова: `git push origin HEAD:pages -f` +- **Не дёргай Gitea API типа `/repos/.../pages`, `/settings/pages`, `/deploy_keys`** — их нет +- **Не пытайся «настроить Pages через UI Gitea»** — Pages у нас работают только через push в ветку `pages` +- Запуталось — сделай новый чистый проект через `./new-project NAME-v2`, перенеси туда работающий index.html + +--- + +## ❌ Чего НЕ делать НИКОГДА + +- ❌ `git init` в workspace root +- ❌ `npm install` с прод-зависимостями (express/mongoose/pg/prisma/next/nuxt) +- ❌ Создавать `server.js` / `app.py` / `main.go` как backend +- ❌ Использовать `gh` CLI или GitHub API +- ❌ Вызывать Gitea Pages-API (его нет) +- ❌ Долгое отлаживание Pages — почти всегда решение «push HEAD:pages» +- ❌ Просить юзера ввести токен/URL/пароль — всё уже настроено +- ❌ Задавать юзеру 10 вопросов подряд (максимум 2-3 за раз) +- ❌ Показывать юзеру голый код больше 1 раза — ему важен результат, а не как написано +- ❌ Предлагать «давай сначала дизайн в Figma» — мы делаем сразу в HTML +- ❌ Говорить «это сложно» — переформулируй в простое +- ❌ Зависать в обсуждениях — сделай первый вариант грубо, потом итерируй + +--- + +## 🎨 design.md + +Рядом лежит `design.md` с готовой палитрой, типографикой и стартер-шаблоном `index.html`. **Начинай с него.** Не выдумывай новые цвета — модифицируй существующие. diff --git a/design.md b/design.md new file mode 100644 index 0000000..5c8e829 --- /dev/null +++ b/design.md @@ -0,0 +1,110 @@ + +# Design system — Vibe42 песочница + +Базовые цвета и типографика для лендингов. Можно отклоняться, но начинай с этого. + +## Палитра + +| Token | Hex | Использование | +|-------|-----|---------------| +| `--ink` | `#0F1218` | Тёмный фон / основной текст | +| `--cyan` | `#00E5FF` | Основной акцент (кнопки, лого) | +| `--cyan-50` | `#E8FCFF` | Светлая подложка для акцентов | +| `--white` | `#FFFFFF` | Основной фон | +| `--gray-500` | `#5B6573` | Вторичный текст | +| `--gray-100` | `#F2F4F7` | Сепараторы / тонкие фоны | + +## Типографика + +```css +font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Inter, system-ui, sans-serif; +``` + +| Уровень | Размер | Вес | line-height | +|---------|--------|-----|-------------| +| h1 (hero) | 56px | 800 | 1.05 | +| h2 (section) | 36px | 700 | 1.15 | +| h3 | 22px | 700 | 1.3 | +| body | 17px | 400 | 1.6 | +| small | 14px | 400 | 1.5 | + +На мобиле — h1 уменьши до 36px, h2 до 28px. + +## Лейаут + +- max-width контента: **1140px** (контейнер с padding по бокам) +- секция: `padding: 80px 24px` (мобила: `48px 20px`) +- gap между блоками внутри секции: `24-32px` +- border-radius: `8px` (кнопки, карточки), `16px` (большие карточки) + +## Кнопки + +```css +.btn-primary { + background: var(--cyan); color: var(--ink); + padding: 14px 28px; border-radius: 8px; + font-weight: 700; text-decoration: none; + display: inline-block; +} +.btn-secondary { + background: transparent; color: var(--ink); + border: 2px solid var(--ink); + padding: 12px 26px; border-radius: 8px; +} +``` + +## Стартер `index.html` + +```html + + + + + +Мой проект + + + +
+
+

Заголовок проекта

+

Подзаголовок — пара предложений о чём это.

+ Начать +
+
+
+
+

Секция

+
Контент карточки.
+
Контент карточки.
+
+
+ + +``` + +## Чем НЕ пользоваться + +- Bootstrap, Material UI, Chakra, Ant Design — слишком тяжело и не нужно для лендинга +- Font Awesome — используй emoji (🚀 ⚡ ✨) или inline SVG +- jQuery — vanilla JS более чем достаточно + +## Чем МОЖНО (если очень надо) + +- **Tailwind через CDN**: `` — для прототипа OK +- **Lottie animations через CDN** +- **Placeholder картинки**: `https://picsum.photos/800/600`, `https://placehold.co/600x400` +- **Шрифты Google Fonts через ``** в head diff --git a/generate_pdf.py b/generate_pdf.py new file mode 100644 index 0000000..b198fe2 --- /dev/null +++ b/generate_pdf.py @@ -0,0 +1,349 @@ +#!/usr/bin/env python3 +"""Генерация PDF инструктажа по действиям в жаркий период.""" + +from fpdf import FPDF +from fpdf.enums import XPos, YPos + +class HotWeatherBriefingPDF(FPDF): + def __init__(self): + super().__init__(orientation="P", unit="mm", format="A4") + self.set_auto_page_break(True, 20) + + color_ink = (15, 18, 24) + color_red = (229, 57, 53) + color_gray = (91, 101, 115) + color_gray_100 = (242, 244, 247) + color_white = (255, 255, 255) + color_amber = (230, 81, 0) + color_green = (46, 125, 50) + color_orange = (255, 109, 0) + + font_dir = "/usr/share/fonts/truetype/dejavu/" + self.add_font("DejaVu", "", font_dir + "DejaVuSans.ttf") + self.add_font("DejaVu", "B", font_dir + "DejaVuSans-Bold.ttf") + + self.c = { + "ink": color_ink, + "red": color_red, + "gray": color_gray, + "gray_bg": color_gray_100, + "white": color_white, + "amber": color_amber, + "green": color_green, + "orange": color_orange, + } + + def add_header_page(self): + self.add_page() + m = 15 + w = self.w - 2 * m + + # Оранжевый градиентный заголовок + self.set_fill_color(*self.c["orange"]) + self.rect(0, 0, self.w, 72, "F") + + # Красная полоса + self.set_fill_color(*self.c["red"]) + self.rect(0, 72, self.w, 3, "F") + + # Плашка + self.set_y(16) + self.set_font("DejaVu", "B", 9) + self.set_text_color(*self.c["white"]) + self.set_fill_color(*self.c["red"]) + badge_w = self.get_string_width(" ИНСТРУКТАЖ / ЖАРКИЙ ПЕРИОД ") + 6 + self.set_x(m) + self.cell(badge_w, 6, " ИНСТРУКТАЖ / ЖАРКИЙ ПЕРИОД ", fill=True, new_x=XPos.LMARGIN, new_y=YPos.NEXT) + + # Заголовок + self.set_y(28) + self.set_x(m) + self.set_font("DejaVu", "B", 16) + self.set_text_color(*self.c["white"]) + self.multi_cell(w, 8, "Действия водителей ТС без кондиционера в жаркий период", align="L") + + # Подзаголовок + self.set_y(52) + self.set_x(m) + self.set_font("DejaVu", "", 9) + self.set_text_color(255, 240, 220) + self.multi_cell(w, 5, + "Порядок действий водителей транспортных средств компании,\n" + "не оборудованных кондиционером, в условиях повышенной температуры воздуха") + + # Мета + self.set_y(90) + self.set_x(m) + self.set_text_color(*self.c["ink"]) + self.set_font("DejaVu", "", 9) + self.cell(90, 6, "Дата инструктажа: _______________") + self.cell(0, 6, "Провёл: _______________", new_x=XPos.LMARGIN, new_y=YPos.NEXT) + + def section_title(self, title): + self.ln(4) + self.set_font("DejaVu", "B", 13) + self.set_text_color(*self.c["ink"]) + self.cell(0, 8, title, new_x="LMARGIN", new_y="NEXT") + y = self.get_y() + self.set_draw_color(*self.c["gray_bg"]) + self.set_line_width(0.4) + self.line(self.l_margin, y + 2, self.w - self.r_margin, y + 2) + self.ln(5) + + def body_text(self, text): + self.set_font("DejaVu", "", 10) + self.set_text_color(*self.c["ink"]) + self.multi_cell(0, 5.5, text, align="L") + self.ln(1) + + def sub_title(self, title): + self.ln(2) + self.set_font("DejaVu", "B", 10.5) + self.set_text_color(*self.c["ink"]) + self.cell(0, 6, title, new_x="LMARGIN", new_y="NEXT") + self.ln(2) + + def bullet(self, text, color=None): + self.set_font("DejaVu", "", 10) + self.set_text_color(*self.c["ink"]) + bx = self.l_margin + 4 + marker_color = color or self.c["ink"] + self.set_text_color(*marker_color) + self.set_x(self.l_margin + 1) + self.cell(5, 5.5, "\u25a0") + self.set_text_color(*self.c["ink"]) + self.set_x(bx + 6) + self.multi_cell(self.w - self.r_margin - bx - 6, 5.5, text) + self.ln(1) + + def callout_box(self, text, border_color, bg_color): + self.set_fill_color(*bg_color) + self.set_draw_color(*border_color) + self.set_line_width(0.6) + m = self.l_margin + w = self.w - m - self.r_margin + y0 = self.get_y() + + lines = text.split("\n") + n = len(lines) + h = 10 + n * 5.5 + 4 + self.rect(m, y0, w, h, "DF") + self.set_xy(m + 5, y0 + 3) + self.set_font("DejaVu", "", 9.5) + self.set_text_color(*self.c["ink"]) + for line in lines: + self.set_x(m + 5) + self.cell(w - 10, 5.5, line, new_x="LMARGIN", new_y="NEXT") + self.set_y(y0 + h + 3) + + def _measure_lines(self, w, line_h, text): + return len(self.multi_cell(w, line_h, text, dry_run=True, output="LINES")) + + +def build(): + pdf = HotWeatherBriefingPDF() + + # ── Титул ── + pdf.add_header_page() + + # ══ 1. ОСНОВАНИЕ И ЦЕЛЬ ══ + pdf.section_title("1. Основание и цель инструктажа") + pdf.body_text( + "Настоящий инструктаж проводится в связи с наступлением жаркого периода года " + "(температура воздуха выше +30\u00b0C) и необходимостью обеспечения безопасности " + "водителей, управляющих транспортными средствами без системы кондиционирования." + ) + pdf.callout_box( + "Цель: предотвращение тепловых ударов, обезвоживания и снижения\n" + "работоспособности водителей, исключение ДТП вследствие потери\n" + "управления ТС по причине перегрева организма.", + pdf.c["orange"], (255, 243, 224), + ) + pdf.body_text( + "Инструктаж обязателен для всех водителей (штатных и совместителей), " + "эксплуатирующих ТС без кондиционера, а также для лиц, допускающих ТС на линию." + ) + + # ══ 2. НОРМАТИВНАЯ БАЗА ══ + pdf.section_title("2. Нормативная база") + for item in [ + "Закон Республики Казахстан от 17 апреля 2014 г. № 194-V ЗРК «О дорожном движении»", + "Приказ Министра внутренних дел РК от 30 июня 2023 г. № 534 «ПДД, Основные положения по допуску ТС к эксплуатации»", + "Приказ и.о. Министра транспорта и коммуникаций РК от 4 марта 2005 г. № 114-I «Правила безопасности и охраны труда на автомобильном транспорте»", + "Трудовой кодекс РК от 23 ноября 2015 г. № 414-V ЗРК (ст. 184–186)", + "Санитарные правила и нормы (СанПиН) Республики Казахстан", + "Локальные акты организации по охране труда и безопасности на транспорте", + ]: + pdf.bullet(item, pdf.c["green"]) + + # ══ 3. ЗОНА РИСКА ══ + pdf.section_title("3. Зона риска и последствия перегрева") + pdf.body_text( + "Управление ТС без кондиционера в жаркий период представляет особую опасность, " + "поскольку водитель вынужден длительное время находиться в замкнутом, нагретом " + "солнцем пространстве кабины/салона." + ) + pdf.callout_box( + "Опасная зона: температура воздуха на улице от +30\u00b0C и выше.\n" + "В закрытой кабине ТС температура может превышать уличную на 15–25\u00b0C.", + pdf.c["red"], (255, 240, 240), + ) + + # Таблица рисков + risk_data = [ + ("+30–34\u00b0C", "+45–55\u00b0C", "Повышенная утомляемость, снижение внимания"), + ("+35–39\u00b0C", "+55–65\u00b0C", "Тепловое недомогание, риск обезвоживания"), + ("+40\u00b0C и выше", "+65\u00b0C и выше", "Тепловой удар, потеря сознания"), + ] + col1_w = 35 + col2_w = 35 + col3_w = pdf.w - pdf.l_margin - pdf.r_margin - col1_w - col2_w + + # header + pdf.set_fill_color(*pdf.c["ink"]) + pdf.set_text_color(*pdf.c["white"]) + pdf.set_font("DejaVu", "B", 9) + pdf.cell(col1_w, 7, " На улице", border=1, fill=True) + pdf.cell(col2_w, 7, " В кабине", border=1, fill=True) + pdf.cell(col3_w, 7, " Риск", border=1, fill=True, new_x="LMARGIN", new_y="NEXT") + for i, (outdoor, cabin, risk) in enumerate(risk_data): + pdf.set_font("DejaVu", "", 9) + pdf.set_text_color(*pdf.c["ink"]) + pdf.set_fill_color(pdf.c["gray_bg"] if i % 2 == 0 else pdf.c["white"]) + pdf.cell(col1_w, 7, " " + outdoor, border=1, fill=True) + pdf.cell(col2_w, 7, " " + cabin, border=1, fill=True) + pdf.cell(col3_w, 7, " " + risk, border=1, fill=True, new_x="LMARGIN", new_y="NEXT") + pdf.ln(4) + + # ══ 4. ДО ВЫЕЗДА НА ЛИНИЮ ══ + pdf.section_title("4. Действия до выезда на линию") + + items = [ + "Оценить состояние здоровья. При головной боли, слабости, температуре выше +37\u00b0C — отказаться от выезда, сообщить диспетчеру.", + "Взять запас воды: минимум 2 литра питьевой воды на смену (в термосумке). Запрещается заменять воду сладкими напитками и газировкой.", + "Взять головной убор (панама, кепка с козырьком) для защиты от солнца при выходе из ТС.", + "Взять влажные салфетки / полотенце для обтирания лица и шеи.", + "Проветрить кабину перед выездом (открыть двери на 3–5 минут).", + "Одежда — лёгкая, светлая, воздухопроницаемая (хлопок). Запрещается тёмная синтетика.", + "Проверить, что окна открываются, вентиляция работает.", + ] + for item in items: + pdf.bullet(item) + + # ══ 5. ВО ВРЕМЯ ДВИЖЕНИЯ ══ + pdf.section_title("5. Действия во время движения") + + critical = [ + "Пить воду каждые 20–30 минут, даже если нет жажды. Жажда — уже признак обезвоживания.", + "Останавливаться каждые 1,5–2 часа на 10–15 минут в тенистом месте. Не реже одного привала каждые 100 км.", + "При остановке — немедленно выйти из ТС, уйти в тень. Не оставаться в закрытой нагретой кабине.", + "Обтирать лицо и шею влажным полотенцем при каждой остановке.", + "Не закрывать окна наглухо — обеспечить сквозное проветривание кабины.", + "Не оставлять ТС под прямым солнцем — ставать в тень деревьев, зданий, навесов.", + ] + for item in critical: + pdf.bullet(item, pdf.c["red"]) + + pdf.sub_title("Признаки теплового недомогания — немедленная остановка:") + symptoms = [ + "Головная боль, головокружение, «мушки» перед глазами", + "Тошнота, рвота", + "Резкая слабость, сонливость,Difficulty concentrating", + "Учащённое сердцебиение, одышка без физической нагрузки", + "Покраснение лица, обильное потоотделение или его прекращение", + "Любые отклонения от нормального самочувствия", + ] + for item in symptoms: + pdf.bullet(item, pdf.c["amber"]) + + pdf.callout_box( + "ПРИ ЛЮБЫХ ПРИЗНАКАХ ТЕПЛОВОГО НЕДОМОГАНИЯ:\n" + "1. Немедленно остановить ТС, выключить двигатель\n" + "2. Выйти из ТС, уйти в тень\n" + "3. Выпить 200–300 мл воды мелкими глотками\n" + "4. Обтереть лицо, шею, запястья влажным полотенцем\n" + "5. При ухудшении — вызвать скорую помощь\n" + "6. Сообщить диспетчеру о невозможности продолжения рейса", + pdf.c["red"], (255, 240, 240), + ) + + # ══ 6. ОСОБЫЕ ТРЕБОВАНИЯ ══ + pdf.section_title("6. Особые требования") + pdf.sub_title("Режим работы в жару") + pdf.body_text( + "Выезд на линию — не ранее 6:00. Возвращение — не позднее 18:00. " + "В период с 12:00 до 15:00 — обязательный перерыв в тенистом месте (не менее 30 минут)." + ) + pdf.sub_title("Запреты") + pdf.body_text( + "Запрещается: оставлять детей в ТС, оставлять ТС с работающим двигателем " + "без присмотра, перевозить легковоспламеняющиеся жидкости без охлаждения." + ) + pdf.sub_title("Взаимный контроль") + pdf.body_text( + "Водители обязаны проверять состояние здоровья коллег при встрече. " + "При признаках недомогания у коллеги — оказать помощь и сообщить диспетчеру." + ) + + # ══ 7. ЧЕК-ЛИСТ ══ + pdf.section_title("7. Чек-лист перед выездом") + checklist = [ + "Состояние здоровья удовлетворительное", + "Взял запас воды (мин. 2 литра) в термосумке", + "Взял головной убор", + "Взял влажные салфетки / полотенце", + "Одежда лёгкая, светлая, из хлопка", + "Кабина ТС проветрена перед выездом", + "Окна открываются, вентиляция работает", + "Проверил уровень охлаждающей жидкости", + "Есть заряженный мобильный телефон", + "Знание маршрута и мест для привалов в тени", + ] + for item in checklist: + pdf.set_font("DejaVu", "", 10) + pdf.set_text_color(*pdf.c["ink"]) + pdf.set_x(pdf.l_margin + 1) + pdf.cell(6, 6, "\u2610") + pdf.set_x(pdf.l_margin + 8) + pdf.cell(0, 6, item, new_x="LMARGIN", new_y="NEXT") + + pdf.ln(4) + + # ══ 8. ЛИСТ ОЗНАКОМЛЕНИЯ ══ + pdf.section_title("8. Лист ознакомления с инструктажем") + pdf.body_text( + "Своей подписью подтверждаю, что с содержанием инструктажа ознакомлен(а), " + "требования и меру ответственности осознаю, обязуюсь выполнять." + ) + + pdf.ln(4) + sig_header = ["Фамилия И.О.", "Должность / Категория", "Подпись и дата"] + sig_w = [55, 75, (pdf.w - pdf.l_margin - pdf.r_margin - 130)] + + pdf.set_fill_color(*pdf.c["ink"]) + pdf.set_text_color(*pdf.c["white"]) + pdf.set_font("DejaVu", "B", 9) + pdf.cell(sig_w[0], 7, " " + sig_header[0], border=1, fill=True) + pdf.cell(sig_w[1], 7, " " + sig_header[1], border=1, fill=True) + pdf.cell(sig_w[2], 7, " " + sig_header[2], border=1, fill=True, new_x="LMARGIN", new_y="NEXT") + + for i in range(12): + if pdf.get_y() > pdf.h - 20: + pdf.add_page() + pdf.set_fill_color(pdf.c["gray_bg"] if i % 2 == 0 else pdf.c["white"]) + pdf.set_text_color(*pdf.c["ink"]) + pdf.set_font("DejaVu", "", 9) + pdf.cell(sig_w[0], 9, "", border=1, fill=True) + pdf.cell(sig_w[1], 9, "", border=1, fill=True) + pdf.cell(sig_w[2], 9, "", border=1, fill=True, new_x="LMARGIN", new_y="NEXT") + + pdf.ln(6) + pdf.body_text("Инструктаж провёл: _______________________________________ (должность, Ф.И.О., подпись, дата)") + + # ── SAVE ── + out = "Инструктаж_Действия_жаркий_период_ТС_без_кондиционера.pdf" + pdf.output(out) + print(f"PDF сохранён: {out}") + +if __name__ == "__main__": + build() diff --git a/index.html b/index.html new file mode 100644 index 0000000..00d3feb --- /dev/null +++ b/index.html @@ -0,0 +1,448 @@ + + + + + +Инструктаж — Действия водителей ТС без кондиционера в жаркий период + + + + + +
+
+
Инструктаж / Жаркий период
+

Действия водителей ТС без кондиционера в жаркий период

+

+ Порядок действий водителей транспортных средств компании, + не оборудованных кондиционером, в условиях повышенной температуры воздуха +

+
+ Дата инструктажа: _______________ + Провёл: _______________ +
+
+
+ + +
+
+

1. Основание и цель инструктажа

+

+ Настоящий инструктаж проводится в связи с наступлением жаркого периода года + (температура воздуха выше +30 °C) и необходимостью обеспечения безопасности + водителей, управляющих транспортными средствами без системы кондиционирования. +

+
+ Цель: предотвращение тепловых ударов, обезвоживания и снижения + работоспособности водителей, исключение ДТП вследствие потери управления ТС + по причине перегрева организма. +
+

+ Инструктаж обязателен для всех водителей (штатных и совместителей), + эксплуатирующих ТС без кондиционера, а также для лиц, допускающих ТС на линию. +

+
+
+ + +
+
+

2. Нормативная база

+
    +
  • Закон Республики Казахстан от 17 апреля 2014 г. № 194-V ЗРК «О дорожном движении»
  • +
  • Приказ Министра внутренних дел РК от 30 июня 2023 г. № 534 «Об утверждении Правил дорожного движения, Основных положений по допуску транспортных средств к эксплуатации»
  • +
  • Приказ и.о. Министра транспорта и коммуникаций РК от 4 марта 2005 г. № 114-I «Об утверждении Правил безопасности и охраны труда на автомобильном транспорте»
  • +
  • Трудовой кодекс РК от 23 ноября 2015 г. № 414-V ЗРК (ст. 184–186 — нормы условий труда)
  • +
  • Санитарные правила и нормы (СанПиН) Республики Казахстан в части обеспечения безопасных условий труда
  • +
  • Локальные акты организации по охране труда и безопасности на транспорте
  • +
+
+
+ + +
+
+

3. Зона риска и последствия перегрева

+

+ Управление ТС без кондиционера в жаркий период представляет особую опасность, + поскольку водитель вынужден длительное время находиться в замкнутом, нагретом + солнцем пространстве кабины/салона. +

+
+ Опасная зона: температура воздуха на улице от +30 °C и выше. + В закрытой кабине ТС температура может превышать уличную на 15–25 °C. +
+ +
+
+
🌡
+

Тепловой удар

+

Потеря сознания, спутанность сознания, судороги. Риск ДТП — 100%.

+
+
+
💧
+

Обезвоживание

+

Снижение концентрации внимания, замедление реакции, головокружение.

+
+
+
😴
+

Гиперсомния

+

Повышенная сонливость, «микрозасыпания» за рулём — основная причина лобовых столкновений.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Температура на улицеТемпература в кабине (≈)Риск для водителя
+30–34 °C+45–55 °CПовышенная утомляемость, снижение внимания
+35–39 °C+55–65 °CТепловое недомогание, риск обезвоживания
+40 °C и выше+65 °C и вышеТепловой удар, потеря сознания, острое поражение здоровья
+
+
+
+ + +
+
+

4. Действия до выезда на линию

+ +
+ Перед выездом водитель обязан: +
+ +
    +
  • + Оценить состояние здоровья. При головной боли, слабости, температуре + тела выше +37 °C — отказать от выезда, сообщить диспетчеру. +
  • +
  • + Взять запас воды. Минимум 2 литра питьевой воды на смену + (в термосумке или с термоподставкой). Запрещается заменять воду сладкими напитками + и газировкой. +
  • +
  • + Взять головной убор (панама, кепка с козырьком) для защиты от солнца + при выходе из ТС. +
  • +
  • + Взять влажные салфетки / полотенце для обтирания лица и шеи. +
  • +
  • + Подготовить ТС: проветрить кабину перед выездом (открыть двери на 3–5 минут), + при наличии тонировки — убедиться, что стёкла не перегреваются. +
  • +
  • + Откинуть / снять верхнюю одежду — работать в лёгкой, светлой, воздухопроницаемой + одежде. Запрещается выезжать в тёмной синтетической одежде. +
  • +
  • + Проверить доступ к вентиляции: убедиться, что окна открываются, + вентиляция работает. +
  • +
+
+
+ + +
+
+

5. Действия во время движения

+ +
+ Критические правила: +
+ +
    +
  • + Пить воду каждые 20–30 минут, даже если нет жажды. Жажда — уже признак + обезвоживания. +
  • +
  • + Останавливаться каждые 1,5–2 часа на 10–15 минут в тенистом месте. + Не реже одного привала каждые 100 км. +
  • +
  • + При остановке — немедленно выйти из ТС, уйти в тень. Не оставаться + в закрытой нагретой кабине. +
  • +
  • + Обтирать лицо и шею влажным полотенцем при каждой остановке. +
  • +
  • + Не закрывать окна наглухо — обеспечить сквозное проветривание кабины + (открыть окна с двух сторон на 3–5 см). +
  • +
  • + Не оставлять ТС под прямым солнцем — при остановках ставать в тень + деревьев, зданий, навесов. +
  • +
+ +

Признаки теплового недомогания — немедленная остановка:

+
    +
  • Головная боль, головокружение, «мушки» перед глазами
  • +
  • Тошнота, рвота
  • +
  • Резкая слабость, сонливость,difficulty concentrating
  • +
  • Учащённое сердцебиение, одышка без физической нагрузки
  • +
  • Покраснение лица, обильное потоотделение или его прекращение
  • +
  • Мурашки на коже, ощущение «ватных» конечностей
  • +
  • Любые отклонения от нормального самочувствия
  • +
+ +
+ ПРИ ЛЮБЫХ ПРИЗНАКАХ ТЕПЛОВОГО НЕДОМОГАНИЯ: +
    +
  1. Немедленно остановить ТС, выключить двигатель
  2. +
  3. Выйти из ТС, уйти в тень
  4. +
  5. Выпить 200–300 мл воды мелкими глотками
  6. +
  7. Обтереть лицо, шею, запястья влажным полотенцем
  8. +
  9. При ухудшении — вызвать скорую помощь
  10. +
  11. Сообщить диспетчеру о невозможности продолжения рейса
  12. +
+
+
+
+ + +
+
+

6. Особые требования

+ +
+
+
+

Режим работы в жару

+

Выезд на линию — не ранее 6:00. Возвращение — не позднее 18:00. В период с 12:00 до 15:00 — обязательный перерыв в тенистом месте (не менее 30 минут).

+
+
+
🚫
+

Запреты

+

Запрещается: оставлять детей в ТС, оставлять ТС с работающим двигателем без присмотра, перевозить легковоспламеняющиеся жидкости без охлаждения.

+
+
+
🧊
+

Охлаждение

+

Допускается использование_portable_вентиляторов от прикуривателя, охлаждающих бандажей, бутылок с замороженной водой.

+
+
+
👥
+

Взаимный контроль

+

Водители обязаны проверять состояние здоровья коллег при встрече. При признаках недомогания у коллеги — оказать помощь и сообщить диспетчеру.

+
+
+
+
+ + +
+
+

7. Чек-лист перед выездом

+

Отметьте каждый пункт перед выездом на линию:

+ +
Состояние здоровья удовлетворительное (нет температуры, головной боли, слабости)
+
Взял запас воды (мин. 2 литра) в термосумке
+
Взял головной убор (панама / кепка)
+
Взял влажные салфетки / полотенце
+
Одежда лёгкая, светлая, из хлопка
+
Кабина ТС проветрена перед выездом
+
Окна открываются, вентиляция работает
+
Проверил уровень охлаждающей жидкости
+
Есть заряженный мобильный телефон для вызова помощи
+
Знание маршрута и мест для привалов в тени
+
+
+ + +
+
+

8. Лист ознакомления с инструктажем

+

+ Своей подписью подтверждаю, что с содержанием инструктажа ознакомлен(а), + требования и меру ответственности осознаю, обязуюсь выполнять. +

+ +
+

Подписи инструктируемых

+
+
Фамилия И.О.
+
Должность / Категория
+
Подпись и дата
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

+ Инструктаж провёл: _______________________________________     + (должность, Ф.И.О., подпись, дата) +

+
+
+ + + + + + + diff --git a/Инструктаж_Действия_жаркий_период_ТС_без_кондиционера.pdf b/Инструктаж_Действия_жаркий_период_ТС_без_кондиционера.pdf new file mode 100644 index 0000000..e67b60a Binary files /dev/null and b/Инструктаж_Действия_жаркий_период_ТС_без_кондиционера.pdf differ