Compare commits

..

2 Commits

Author SHA1 Message Date
2f07950554 add PDF report 2026-08-26 05:04:29 +00:00
4a7d89e5cb site 2026-08-26 05:00:29 +00:00
5 changed files with 1316 additions and 0 deletions

173
AGENTS.md Normal file
View File

@ -0,0 +1,173 @@
<!-- vibe42-agents-version: v3-guided-2026-06-01 -->
# Vibe42 — учебная песочница для лендингов
Workspace юзера `Rollan_Tuleuov`. Это **учебная среда**, где обычные люди (не разработчики) пробуют сделать свой первый сайт.
---
## 🎯 ТВОЯ РОЛЬ
Ты — **гид и помощник**, а не слепой исполнитель. Цель сессии — чтобы юзер вышел с:
1. **рабочим лендингом**, опубликованным по адресу `https://pages.git.vibe42.kz/Rollan_Tuleuov/<repo>/`,
2. ощущением «это было легко» — без серверов, БД, токенов, конфигов.
Юзер не разработчик. Ему важен **результат, который видно в браузере**, а не код.
---
## 🗺 СЦЕНАРИЙ ПЕРВОГО ЗАХОДА (юзер только зашёл, ещё ничего нет)
1. Поздоровайся коротко: «Привет! Тут за 10 минут собираем лендинг и публикуем его в интернете. О чём хочешь сделать?»
2. Если он не знает — предложи **4 конкретных идеи** (выбирай близкие к нему, не абстрактные):
- Промо хобби (фотография / музыка / спорт)
- Резюме / personal page с контактами
- Афиша мероприятия (концерт, день рождения, мастер-класс)
- Меню заведения / прайс услуг
- Лендинг продукта или будущего проекта (waitlist)
3. Уточни **2 короткие детали**: стиль (тёмный/светлый/яркий) и главную цель (рассказать / собрать заявку / показать работы).
4. Сразу делай `./new-project <name>` и собирай страницу. Не спрашивай разрешения на каждый шаг.
---
## 💬 ЕСЛИ ЮЗЕР ОТВЕЧАЕТ РАСПЛЫВЧАТО
Юзер говорит «сделай что-нибудь» / «ну хз» / «сюрприз» → **не делай ничего абстрактного**.
Скажи: «Давай определимся, я задам 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/Rollan_Tuleuov/<repo>/**
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/Rollan_Tuleuov`)** — это папка-контейнер юзера, не репозиторий.
---
## ✅ ВСЕГДА работай через `./new-project`
Если юзер сказал «сделай сайт NAME» / «создай проект NAME»:
```bash
cd /workspaces/Rollan_Tuleuov
./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/Rollan_Tuleuov
- Pages (живые лендинги): https://pages.git.vibe42.kz/Rollan_Tuleuov/<repo>/
- Креды уже в `/workspaces/Rollan_Tuleuov/.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`. **Начинай с него.** Не выдумывай новые цвета — модифицируй существующие.

111
design.md Normal file

File diff suppressed because one or more lines are too long

364
generate_pdf.py Normal file
View File

@ -0,0 +1,364 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from reportlab.lib import colors
from reportlab.lib.pagesizes import A4, landscape
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, PageBreak
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, inch
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
# Register a font that supports Cyrillic (using DejaVu or similar if available)
# For simplicity, we'll use a standard font that should work
try:
pdfmetrics.registerFont(TTFont('DejaVu', '/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf'))
FONT_NAME = 'DejaVu'
except:
FONT_NAME = 'Helvetica' # Fallback (won't support Cyrillic properly)
def create_pdf():
doc = SimpleDocTemplate(
"projects_report.pdf",
pagesize=landscape(A4),
rightMargin=1.5*cm,
leftMargin=1.5*cm,
topMargin=1.5*cm,
bottomMargin=1.5*cm
)
styles = getSampleStyleSheet()
# Custom styles
title_style = ParagraphStyle(
'CustomTitle',
parent=styles['Heading1'],
fontSize=24,
textColor=colors.HexColor('#1e3a5f'),
spaceAfter=30,
alignment=TA_CENTER,
fontName=FONT_NAME
)
subtitle_style = ParagraphStyle(
'CustomSubtitle',
parent=styles['Heading2'],
fontSize=14,
textColor=colors.HexColor('#64748b'),
spaceAfter=20,
alignment=TA_CENTER,
fontName=FONT_NAME
)
heading_style = ParagraphStyle(
'CustomHeading',
parent=styles['Heading2'],
fontSize=16,
textColor=colors.HexColor('#1e3a5f'),
spaceAfter=12,
spaceBefore=12,
fontName=FONT_NAME
)
subheading_style = ParagraphStyle(
'CustomSubHeading',
parent=styles['Heading3'],
fontSize=12,
textColor=colors.HexColor('#3b82f6'),
spaceAfter=8,
spaceBefore=8,
fontName=FONT_NAME
)
normal_style = ParagraphStyle(
'CustomNormal',
parent=styles['Normal'],
fontSize=10,
textColor=colors.HexColor('#334155'),
spaceAfter=6,
alignment=TA_JUSTIFY,
fontName=FONT_NAME
)
bullet_style = ParagraphStyle(
'CustomBullet',
parent=styles['Normal'],
fontSize=10,
textColor=colors.HexColor('#334155'),
spaceAfter=4,
leftIndent=20,
fontName=FONT_NAME
)
story = []
# Title page
story.append(Spacer(1, 2*cm))
story.append(Paragraph("ОТЧЕТ ПО ПРОЕКТАМ БКВ", title_style))
story.append(Paragraph("Справка о ходе реализации 9 проектов", subtitle_style))
story.append(Spacer(1, 1*cm))
# Summary table
summary_data = [
['№', 'Проект', 'Статус', 'Период', 'План/Освоено (тыс. ₸)'],
['1', 'Smart Aqkol 2025', 'Завершена', '2025-2028', '334 192'],
['2', 'Комплексное решение для приемных покоев', 'Рассмотрение заявок', '2026-2032', '3 794 965'],
['3', 'Смарт-видеожетоны', 'Рассмотрение заявок', '2026-2033', '4 240 714'],
['4', 'GenAI KT', 'Внедрение', '-', '727 000 (доход)'],
['5', 'Единая инфраструктура дронов', 'Масштабирование', '2025-2030', '1 210 956'],
['6', 'Национальный каталог товаров', 'Опытная эксплуатация', '-', 'На финансировании'],
['7', 'ЦОД в г. Косшы', 'Завершающая стадия', '-', '3 711 077'],
['8', 'Вычислительные мощности для ИИ', 'Масштабирование', '2 этапа', '-'],
['9', 'Холодовая цепь', 'Подготовка к запуску', 'Старт 01.10.2026', '-']
]
summary_table = Table(summary_data, colWidths=[0.8*cm, 5*cm, 3.5*cm, 3*cm, 4*cm])
summary_table.setStyle(TableStyle([
('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#1e3a5f')),
('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
('ALIGN', (0, 0), (-1, -1), 'CENTER'),
('FONTNAME', (0, 0), (-1, 0), FONT_NAME),
('FONTSIZE', (0, 0), (-1, 0), 11),
('BOTTOMPADDING', (0, 0), (-1, 0), 12),
('BACKGROUND', (0, 1), (-1, -1), colors.HexColor('#f1f5f9')),
('FONTNAME', (0, 1), (-1, -1), FONT_NAME),
('FONTSIZE', (0, 1), (-1, -1), 9),
('TOPPADDING', (0, 1), (-1, -1), 8),
('BOTTOMPADDING', (0, 1), (-1, -1), 8),
('GRID', (0, 0), (-1, -1), 1, colors.HexColor('#cbd5e1')),
]))
story.append(summary_table)
story.append(Spacer(1, 0.5*cm))
story.append(Paragraph("Дата формирования отчета: Август 2026", normal_style))
story.append(PageBreak())
# Project details
projects = [
{
'title': '1. Проект «Smart Aqkol 2025: Расширение цифровых решений и внедрение ИИ»',
'status': 'Завершена',
'period': '4 года (2025-2028)',
'budget': '334 192 тыс. ₸',
'details': [
('СПП элемент', 'I.25.DBD.58.002'),
('Сумма договора (без НДС)', '151 897 тыс. ₸'),
('План доходов', '1 114 082 тыс. ₸'),
('План расходов', '636 090 тыс. ₸'),
('Фактический расход', '0 тыс. ₸'),
('План CAPEX', '334 192,2 тыс. ₸'),
('Фактически освоенный CAPEX', '334 192 тыс. ₸'),
],
'description': 'В рамках совместной работы, ДУПом было подписано дополнительное соглашение к договору с Консорциумом в составе АО «Логиком» совместно с ТОО «ОптикСтрой».',
'current_status': 'По данному объекту в рамках договора № 1098000/2025/5 от 12.06.2025 подрядной организации передан заказ №1098000/2025/5/004. СМР в работе. Подрядчик продолжает выполнение строительно-монтажных работ.'
},
{
'title': '2. Проект «Комплексное решение для приемных покоев»',
'status': 'Рассмотрение заявок',
'period': '7 лет (2026-2032)',
'budget': '3 794 965 тыс. ₸',
'details': [
('СПП элемент', 'I.26.DBD.58.006/01-01'),
('План БКВ на 2026 год', '3 794 965 тыс. ₸'),
('План доходов', '12 362 599 тыс. ₸'),
('План расходов', '6 061 935 тыс. ₸'),
('План CAPEX', '3 794 964,9 тыс. ₸'),
],
'description': '',
'current_status': 'Прием заявок завершен. Ведется рассмотрение заявок на портале zakup.sk.kz.'
},
{
'title': '3. Проект «Смарт-видеожетоны»',
'status': 'Рассмотрение заявок',
'period': '8 лет (2026-2033)',
'budget': '4 240 714 тыс. ₸',
'details': [
('Ответственный', 'Қапан Даурен'),
('СПП элемент', 'I.26.DBD.58.002/01-01'),
('План БКВ на 2026 год', '4 240 714 тыс. ₸'),
('План доходов', '10 614 456 тыс. ₸'),
('План расходов', '5 143 647 тыс. ₸'),
('План CAPEX', '4 240 714,2 тыс. ₸'),
],
'description': '',
'current_status': 'Прием заявок завершен. Ведется рассмотрение заявок на портале zakup.sk.kz.'
},
{
'title': '4. Проект «GenAI KT»',
'status': 'Внедрение',
'period': '-',
'budget': '727 млн ₸ (доход 2026)',
'details': [
('Направление', 'Разработка и коммерциализация решений на базе ИИ'),
('Клиенты', 'АО «Самрук-Қазына» и портфельные компании'),
],
'description': 'GenAI KT - это направление по разработке и коммерциализации решений на базе искусственного интеллекта для корпоративного и государственного сектора. Проект включает создание AI-агентов, Generative AI и аналитических решений.',
'current_status': 'В 2026 году получены доходы в размере 727 млн. тенге. Разработаны: AI-рекрутер, AI-юрист, AI БиОТ, AI по социальной стабильности, SKAI, SKAI Data, AI-агент «Жеті Жарғы» для Сената. Проводятся тестирование и внедрение с портфельными компаниями (АО «Казпочта», АО «Самрук-Энерго», АО «НГК «Тау-Кен Самрук», АО «KEGOC»).',
'bullets': [
'Внедрение ИИ-агентов - 727 млн. тенге',
'Увеличение штатной численности Департамента AI',
'Проводится работа по коммерциализации и заключению доходных договоров'
]
},
{
'title': '5. Проект «Единая инфраструктура дронов»',
'status': 'Масштабирование',
'period': '2025-2030',
'budget': '1 210 956,26 тыс. ₸ (освоено в 2025)',
'details': [
('Освоено 2025', '1 210 956,26 тыс. ₸'),
('CAPEX 2026', 'Не предусмотрен'),
('Оборудование', '89 дронов с док-станциями'),
('Штат', '18 сотрудников (Служба БПЛА)'),
],
'description': 'Инновационная платформа, объединяющая сервисную модель предоставления дронов и облачное ПО для планирования миссий и управления воздушным трафиком.',
'current_status': '2025: Закуп оборудования и платформы, создание Службы БПЛА, пилотные проекты с госорганами, введение в эксплуатацию. 2026: Получение разрешений на полеты, заключены доходные договоры с госорганами, ведется масштабирование.'
},
{
'title': '6. Проект «Национальный каталог товаров»',
'status': 'Опытная эксплуатация',
'period': '-',
'budget': 'На рассмотрении в Минфине',
'details': [
('Утверждение БП', 'Протокол № 32 от 8 июля 2026'),
('Статус системы', 'Акт запуска от 31.12.2025'),
('Финансирование', 'На рассмотрении в Министерстве финансов'),
],
'description': 'ТОО «Центр развития цифровой экономики» обеспечивает функционирование и развитие информационной системы НКТ.',
'current_status': 'НКТ функционирует в режиме опытной эксплуатации с 1 января 2026 года. Выполняются функции по регистрации товаров и актуализации сведений. Разработаны Методика пост-мониторинга и План-график реализации (на проверке).',
'bullets': [
'Регистрация и ведение карточек товаров',
'Присвоение кодов NTIN',
'Модерация и актуализация сведений',
'Развитие ИИ-инструментов для анализа карточек',
'Проработка обеспечения GPU-ресурсами'
]
},
{
'title': '7. Проект «Строительство ЦОД в г. Косшы»',
'status': 'Завершающая стадия',
'period': '-',
'budget': '3 711 077 тыс. ₸ (освоено янв-авг 2026)',
'details': [
('Освоено (янв-авг 2026)', '3 711 077 тыс. ₸'),
('Готовность здания', '100%'),
('Готовность оборудования', '100%'),
('Характеристики', '248 стоек, мощность ≥ 3,5 МВт'),
('№ закупа подстанций', '1234623'),
],
'description': 'Проект предусматривает создание современной инфраструктуры ЦОД с размещением IT-оборудования и соответствующими инженерными системами.',
'current_status': 'Основное здание и оборудование имеют 100% готовность. Проводятся тендерные процедуры по расширению (модернизации) подстанций (рассмотрение заявок).'
},
{
'title': '8. Проект «Развитие вычислительных мощностей для ИИ-решений»',
'status': 'Масштабирование (2 этап)',
'period': '-',
'budget': '-',
'details': [
('Основание', 'Поручение ГГ от 25.01.2025 (ППРК № 592)'),
('Локация', 'г. Алматы, ул. Диваева, 39'),
('Этап I', '50 серверов HGX, 400 GPU NVIDIA H200, СХД 6 ПБ'),
('Этап II', '60 серверов HGX, 480 GPU NVIDIA B300'),
('Статус Этапа I', 'Введен в эксплуатацию 19.09.2025, используется на 100%'),
('Статус Этапа II', 'Договор от 05.06.2026, монтаж до конца 2026'),
],
'description': 'Суперкомпьютерный комплекс Al-Farabium для предоставления вычислительных мощностей в аренду B2B & B2G клиентам.',
'current_status': 'Этап I: 323 GPU (80%) выделено коммерческим клиентам, 77 GPU (20%) - пилотным проектам. Этап II: Договор с ТОО «АСБИС Казахстан» заключен, планируется поставка, монтаж и установка в ЦОД г. Косшы до конца III квартала 2026.',
'bullets': [
'1 квартал 2026: Защита бизнес-плана, закупочные процедуры',
'2 квартал 2026: Закуп B300, заключение договора',
'3 квартал 2026: Монтаж и установка в ЦОД Косшы',
'4 квартал 2026: Бенч-тесты, ввод в эксплуатацию, коммерциализация'
]
},
{
'title': '9. Проект «Холодовая цепь»',
'status': 'Подготовка к запуску',
'period': 'Старт 1 октября 2026',
'budget': '-',
'details': [
('Старт услуг', '1 октября 2026'),
('Датчики', '15 000 штук (первая партия)'),
('Технический партнер', '«КейДата»'),
],
'description': 'Система мониторинга для медицинских организаций.',
'current_status': 'Подписан договор на 33 медорганизации с УЗ ЗКО, на регистрации договор на 51 медорганизацию по Астане. Ожидается подписание на 27 организаций в Актобе. В Жетісу и Шымкенте договоры заключаются напрямую. В 5 областях бюджет выделен, КП направлено.',
'bullets': [
'ИС развернута в тестовой среде',
'Датчики проходят таможенные процедуры',
'Вопросы с техпартнером прорабатываются ежедневно'
]
},
]
for i, project in enumerate(projects):
story.append(Paragraph(project['title'], heading_style))
story.append(Spacer(1, 0.3*cm))
# Status bar
status_data = [['Статус:', project['status'], 'Период:', project['period'], 'Бюджет:', project['budget']]]
status_table = Table(status_data, colWidths=[1.5*cm, 4*cm, 1.5*cm, 4*cm, 1.5*cm, 5*cm])
status_table.setStyle(TableStyle([
('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#f1f5f9')),
('FONTNAME', (0, 0), (-1, 0), FONT_NAME),
('FONTSIZE', (0, 0), (-1, 0), 9),
('TOPPADDING', (0, 0), (-1, 0), 8),
('BOTTOMPADDING', (0, 0), (-1, 0), 8),
('ALIGN', (0, 0), (-1, 0), 'LEFT'),
]))
story.append(status_table)
story.append(Spacer(1, 0.3*cm))
# Details table
if project['details']:
details_data = [['Параметр', 'Значение']]
for key, value in project['details']:
details_data.append([key, value])
details_table = Table(details_data, colWidths=[6*cm, 8*cm])
details_table.setStyle(TableStyle([
('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#3b82f6')),
('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
('FONTNAME', (0, 0), (-1, 0), FONT_NAME),
('FONTSIZE', (0, 0), (-1, 0), 10),
('TOPPADDING', (0, 0), (-1, 0), 8),
('BOTTOMPADDING', (0, 0), (-1, 0), 8),
('BACKGROUND', (0, 1), (-1, -1), colors.HexColor('#f8fafc')),
('FONTNAME', (0, 1), (-1, -1), FONT_NAME),
('FONTSIZE', (0, 1), (-1, -1), 9),
('TOPPADDING', (0, 1), (-1, -1), 6),
('BOTTOMPADDING', (0, 1), (-1, -1), 6),
('GRID', (0, 0), (-1, -1), 0.5, colors.HexColor('#cbd5e1')),
('VALIGN', (0, 0), (-1, -1), 'TOP'),
]))
story.append(details_table)
story.append(Spacer(1, 0.3*cm))
# Description
if project.get('description'):
story.append(Paragraph("Описание проекта:", subheading_style))
story.append(Paragraph(project['description'], normal_style))
story.append(Spacer(1, 0.2*cm))
# Current status
if project.get('current_status'):
story.append(Paragraph("Текущий статус:", subheading_style))
story.append(Paragraph(project['current_status'], normal_style))
story.append(Spacer(1, 0.2*cm))
# Bullets
if project.get('bullets'):
for bullet in project['bullets']:
story.append(Paragraph(f"• {bullet}", bullet_style))
story.append(Spacer(1, 0.5*cm))
if i < len(projects) - 1:
story.append(PageBreak())
# Build PDF
doc.build(story)
print("PDF успешно создан: projects_report.pdf")
if __name__ == '__main__':
create_pdf()

668
index.html Normal file
View File

@ -0,0 +1,668 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Отчет по проектам БКВ</title>
<script src="https://cdn.tailwindcss.com"></script>
<style>
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700;900&display=swap');
* {
font-family: 'Inter', sans-serif;
}
.slide {
display: none;
min-height: 100vh;
padding: 2rem;
}
.slide.active {
display: flex;
flex-direction: column;
justify-content: center;
}
.slide-content {
max-width: 1200px;
margin: 0 auto;
width: 100%;
}
.progress-bar {
position: fixed;
bottom: 0;
left: 0;
height: 4px;
background: linear-gradient(90deg, #3b82f6, #8b5cf6);
transition: width 0.3s ease;
}
.nav-btn {
position: fixed;
top: 50%;
transform: translateY(-50%);
background: rgba(59, 130, 246, 0.9);
color: white;
border: none;
padding: 1rem 1.5rem;
font-size: 1.5rem;
cursor: pointer;
border-radius: 0.5rem;
transition: all 0.3s ease;
z-index: 100;
}
.nav-btn:hover {
background: rgba(59, 130, 246, 1);
transform: translateY(-50%) scale(1.1);
}
.nav-btn.prev {
left: 2rem;
}
.nav-btn.next {
right: 2rem;
}
.slide-indicator {
position: fixed;
bottom: 2rem;
left: 50%;
transform: translateX(-50%);
display: flex;
gap: 0.5rem;
z-index: 100;
}
.indicator {
width: 12px;
height: 12px;
border-radius: 50%;
background: rgba(255, 255, 255, 0.3);
cursor: pointer;
transition: all 0.3s ease;
}
.indicator.active {
background: #3b82f6;
transform: scale(1.2);
}
.metric-card {
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 1rem;
padding: 1.5rem;
transition: transform 0.3s ease;
}
.metric-card:hover {
transform: translateY(-5px);
}
.status-badge {
display: inline-block;
padding: 0.5rem 1rem;
border-radius: 2rem;
font-weight: 600;
font-size: 0.875rem;
}
.status-completed {
background: rgba(34, 197, 94, 0.2);
color: #4ade80;
}
.status-progress {
background: rgba(59, 130, 246, 0.2);
color: #60a5fa;
}
.status-review {
background: rgba(251, 191, 36, 0.2);
color: #fbbf24;
}
.gradient-bg {
background: linear-gradient(135deg, #1e3a5f 0%, #0f172a 100%);
}
.accent-gradient {
background: linear-gradient(135deg, #3b82f6, #8b5cf6);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.slide-number {
position: fixed;
top: 2rem;
right: 2rem;
font-size: 0.875rem;
opacity: 0.5;
}
</style>
</head>
<body class="gradient-bg text-white">
<div class="progress-bar" id="progressBar"></div>
<button class="nav-btn prev" onclick="prevSlide()">‹</button>
<button class="nav-btn next" onclick="nextSlide()">›</button>
<div class="slide-indicator" id="slideIndicator"></div>
<div class="slide-number" id="slideNumber"></div>
<!-- Слайд 1: Титульный -->
<div class="slide active" id="slide1">
<div class="slide-content text-center">
<h1 class="text-6xl font-black mb-6 accent-gradient">
Отчет по проектам БКВ
</h1>
<p class="text-2xl text-gray-300 mb-12">
Справка о ходе реализации 9 проектов
</p>
<div class="grid grid-cols-3 gap-8 mt-16">
<div class="metric-card">
<div class="text-5xl font-bold text-blue-400 mb-2">9</div>
<div class="text-gray-400">проектов</div>
</div>
<div class="metric-card">
<div class="text-5xl font-bold text-green-400 mb-2">2025-2033</div>
<div class="text-gray-400">период реализации</div>
</div>
<div class="metric-card">
<div class="text-5xl font-bold text-purple-400 mb-2">ИИ + Инфраструктура</div>
<div class="text-gray-400">ключевые направления</div>
</div>
</div>
</div>
</div>
<!-- Слайд 2: Проект 1 - Smart Aqkol 2025 -->
<div class="slide" id="slide2">
<div class="slide-content">
<div class="mb-8">
<span class="status-badge status-completed">Завершена</span>
</div>
<h2 class="text-4xl font-bold mb-6">Smart Aqkol 2025</h2>
<p class="text-xl text-gray-300 mb-8">Расширение цифровых решений и внедрение ИИ</p>
<div class="grid grid-cols-2 gap-6 mb-8">
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">План БП</div>
<div class="text-2xl font-bold">334 192 тыс. ₸</div>
</div>
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">План доходов</div>
<div class="text-2xl font-bold">1 114 082 тыс. ₸</div>
</div>
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">План CAPEX</div>
<div class="text-2xl font-bold">334 192 тыс. ₸</div>
</div>
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">Период</div>
<div class="text-2xl font-bold">4 года (2025-2028)</div>
</div>
</div>
<div class="metric-card">
<h3 class="text-xl font-bold mb-4">Текущий статус</h3>
<p class="text-gray-300">
Подрядной организации передан заказ №1098000/2025/5/004. СМР в работе.
Подрядчик продолжает выполнение строительно-монтажных работ.
</p>
</div>
</div>
</div>
<!-- Слайд 3: Проект 2 - Комплексное решение для приемных покоев -->
<div class="slide" id="slide3">
<div class="slide-content">
<div class="mb-8">
<span class="status-badge status-review">Рассмотрение заявок</span>
</div>
<h2 class="text-4xl font-bold mb-6">Комплексное решение для приемных покоев</h2>
<div class="grid grid-cols-2 gap-6 mb-8">
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">План БП</div>
<div class="text-2xl font-bold">3 794 965 тыс. ₸</div>
</div>
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">План доходов</div>
<div class="text-2xl font-bold">12 362 599 тыс. ₸</div>
</div>
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">План расходов</div>
<div class="text-2xl font-bold">6 061 935 тыс. ₸</div>
</div>
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">Период</div>
<div class="text-2xl font-bold">7 лет (2026-2032)</div>
</div>
</div>
<div class="metric-card">
<h3 class="text-xl font-bold mb-4">Текущий статус</h3>
<p class="text-gray-300">
Прием заявок завершен. Ведется рассмотрение заявок на портале zakup.sk.kz.
</p>
</div>
</div>
</div>
<!-- Слайд 4: Проект 3 - Смарт-видеожетоны -->
<div class="slide" id="slide4">
<div class="slide-content">
<div class="mb-8">
<span class="status-badge status-review">Рассмотрение заявок</span>
</div>
<h2 class="text-4xl font-bold mb-6">Смарт-видеожетоны</h2>
<p class="text-gray-400 mb-4">Ответственный: Қапан Даурен</p>
<div class="grid grid-cols-2 gap-6 mb-8">
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">План БП</div>
<div class="text-2xl font-bold">4 240 714 тыс. ₸</div>
</div>
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">План доходов</div>
<div class="text-2xl font-bold">10 614 456 тыс. ₸</div>
</div>
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">План расходов</div>
<div class="text-2xl font-bold">5 143 647 тыс. ₸</div>
</div>
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">Период</div>
<div class="text-2xl font-bold">8 лет (2026-2033)</div>
</div>
</div>
<div class="metric-card">
<h3 class="text-xl font-bold mb-4">Текущий статус</h3>
<p class="text-gray-300">
Прием заявок завершен. Ведется рассмотрение заявок на портале zakup.sk.kz.
</p>
</div>
</div>
</div>
<!-- Слайд 5: Проект 4 - GenAI KT -->
<div class="slide" id="slide5">
<div class="slide-content">
<div class="mb-8">
<span class="status-badge status-progress">Внедрение</span>
</div>
<h2 class="text-4xl font-bold mb-6">GenAI KT</h2>
<p class="text-xl text-gray-300 mb-8">
Разработка и коммерциализация решений на базе ИИ для корпоративного и государственного сектора
</p>
<div class="grid grid-cols-2 gap-6 mb-8">
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">Доход 2026</div>
<div class="text-2xl font-bold text-green-400">727 млн ₸</div>
</div>
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">Клиенты</div>
<div class="text-xl font-bold">Самрук-Қазына + портфельные компании</div>
</div>
</div>
<div class="metric-card mb-6">
<h3 class="text-xl font-bold mb-4">Разработанные решения</h3>
<ul class="space-y-2 text-gray-300">
<li>• AI-рекрутер, AI-юрист, AI БиОТ, AI по социальной стабильности</li>
<li>• SKAI, SKAI Data</li>
<li>• AI-агент «Жеті Жарғы» для Сената</li>
</ul>
</div>
<div class="metric-card">
<h3 class="text-xl font-bold mb-4">Статус</h3>
<p class="text-gray-300">
Проводится тестирование и внедрение с портфельными компаниями (Казпочта, Самрук-Энерго, Тау-Кен Самрук, KEGOC).
Ведется работа по коммерциализации.
</p>
</div>
</div>
</div>
<!-- Слайд 6: Проект 5 - Единая инфраструктура дронов -->
<div class="slide" id="slide6">
<div class="slide-content">
<div class="mb-8">
<span class="status-badge status-progress">Масштабирование</span>
</div>
<h2 class="text-4xl font-bold mb-6">Единая инфраструктура дронов</h2>
<p class="text-xl text-gray-300 mb-8">
Инновационная платформа для управления дронами и воздушным трафиком
</p>
<div class="grid grid-cols-2 gap-6 mb-8">
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">Освоено 2025</div>
<div class="text-2xl font-bold">1 210 956 тыс. ₸</div>
</div>
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">Оборудование</div>
<div class="text-xl font-bold">89 дронов с док-станциями</div>
</div>
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">Штат</div>
<div class="text-2xl font-bold">18 сотрудников</div>
</div>
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">Период</div>
<div class="text-2xl font-bold">2025-2030</div>
</div>
</div>
<div class="metric-card">
<h3 class="text-xl font-bold mb-4">Статус 2026</h3>
<ul class="space-y-2 text-gray-300">
<li>• Получение разрешений на полеты согласно законам РК</li>
<li>• Заключены доходные договоры с Гос. Органами</li>
<li>• Ведется масштабирование проекта</li>
</ul>
</div>
</div>
</div>
<!-- Слайд 7: Проект 6 - Национальный каталог товаров -->
<div class="slide" id="slide7">
<div class="slide-content">
<div class="mb-8">
<span class="status-badge status-progress">Опытная эксплуатация</span>
</div>
<h2 class="text-4xl font-bold mb-6">Национальный каталог товаров</h2>
<p class="text-xl text-gray-300 mb-8">
Информационная система регистрации и ведения карточек товаров
</p>
<div class="metric-card mb-6">
<h3 class="text-xl font-bold mb-4">Текущая деятельность</h3>
<ul class="space-y-2 text-gray-300">
<li>• Регистрация и ведение карточек товаров</li>
<li>• Присвоение кодов NTIN</li>
<li>• Модерация и актуализация сведений</li>
<li>• Информационно-консультационная поддержка</li>
<li>• Развитие ИИ-инструментов для анализа карточек</li>
</ul>
</div>
<div class="grid grid-cols-2 gap-6">
<div class="metric-card">
<h3 class="text-lg font-bold mb-2">Финансирование</h3>
<p class="text-gray-300 text-sm">
Вопрос выделения средств из республиканского бюджета на рассмотрении Министерства финансов
</p>
</div>
<div class="metric-card">
<h3 class="text-lg font-bold mb-2">Документы</h3>
<p class="text-gray-300 text-sm">
Методика пост-мониторинга и План-график реализации разработаны и на проверке
</p>
</div>
</div>
</div>
</div>
<!-- Слайд 8: Проект 7 - ЦОД в г. Косшы -->
<div class="slide" id="slide8">
<div class="slide-content">
<div class="mb-8">
<span class="status-badge status-progress">Завершающая стадия</span>
</div>
<h2 class="text-4xl font-bold mb-6">ЦОД в г. Косшы</h2>
<p class="text-xl text-gray-300 mb-8">
Строительство Центра обработки данных
</p>
<div class="grid grid-cols-3 gap-6 mb-8">
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">Освоено (янв-авг)</div>
<div class="text-2xl font-bold">3 711 077 тыс. ₸</div>
</div>
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">Готовность здания</div>
<div class="text-3xl font-bold text-green-400">100%</div>
</div>
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">Готовность оборудования</div>
<div class="text-3xl font-bold text-green-400">100%</div>
</div>
</div>
<div class="metric-card mb-6">
<h3 class="text-xl font-bold mb-4">Характеристики</h3>
<ul class="space-y-2 text-gray-300">
<li>• 248 стоек для IT-оборудования</li>
<li>• Общая мощность: не менее 3,5 МВт</li>
<li>• Современные системы размещения и обработки данных</li>
</ul>
</div>
<div class="metric-card">
<h3 class="text-xl font-bold mb-4">Текущий этап</h3>
<p class="text-gray-300">
Проводятся тендерные процедуры по расширению (модернизации) подстанций.
Закуп №1234623. Рассмотрение заявок потенциальных поставщиков.
</p>
</div>
</div>
</div>
<!-- Слайд 9: Проект 8 - Вычислительные мощности для ИИ -->
<div class="slide" id="slide9">
<div class="slide-content">
<div class="mb-8">
<span class="status-badge status-progress">Масштабирование</span>
</div>
<h2 class="text-4xl font-bold mb-6">Развитие вычислительных мощностей для ИИ</h2>
<p class="text-xl text-gray-300 mb-8">
Al-Farabium: Суперкомпьютерный комплекс на базе NVIDIA
</p>
<div class="grid grid-cols-2 gap-6 mb-8">
<div class="metric-card border-green-500/30">
<h3 class="text-lg font-bold mb-4 text-green-400">Этап I (завершен)</h3>
<ul class="space-y-2 text-gray-300 text-sm">
<li>• 50 серверов HGX</li>
<li>• 400 GPU NVIDIA H200</li>
<li>• СХД 6 ПБ</li>
<li>• Введен в эксплуатацию 19.09.2025</li>
<li>• Используется на 100%</li>
</ul>
</div>
<div class="metric-card border-blue-500/30">
<h3 class="text-lg font-bold mb-4 text-blue-400">Этап II (в работе)</h3>
<ul class="space-y-2 text-gray-300 text-sm">
<li>• 60 серверов HGX</li>
<li>• 480 GPU NVIDIA B300</li>
<li>• Размещение в ЦОД Косшы</li>
<li>• Договор от 05.06.2026</li>
<li>• Запуск до конца 2026</li>
</ul>
</div>
</div>
<div class="metric-card">
<h3 class="text-xl font-bold mb-4">Распределение мощностей (Этап I)</h3>
<div class="grid grid-cols-2 gap-4">
<div>
<div class="text-3xl font-bold text-blue-400">80%</div>
<div class="text-gray-400 text-sm">Коммерческие клиенты (323 GPU)</div>
</div>
<div>
<div class="text-3xl font-bold text-purple-400">20%</div>
<div class="text-gray-400 text-sm">Пилотные проекты (77 GPU)</div>
</div>
</div>
</div>
</div>
</div>
<!-- Слайд 10: Проект 9 - Холодовая цепь -->
<div class="slide" id="slide10">
<div class="slide-content">
<div class="mb-8">
<span class="status-badge status-review">Подготовка к запуску</span>
</div>
<h2 class="text-4xl font-bold mb-6">Холодовая цепь</h2>
<p class="text-xl text-gray-300 mb-8">
Система мониторинга для медицинских организаций
</p>
<div class="grid grid-cols-2 gap-6 mb-8">
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">Старт услуг</div>
<div class="text-2xl font-bold">1 октября 2026</div>
</div>
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">Датчики</div>
<div class="text-2xl font-bold">15 000 штук</div>
</div>
</div>
<div class="metric-card mb-6">
<h3 class="text-xl font-bold mb-4">Заключенные договоры</h3>
<ul class="space-y-2 text-gray-300">
<li>• <span class="text-green-400">✓</span> ЗКО: 33 медицинские организации</li>
<li>• <span class="text-green-400">✓</span> Астана: 51 медицинская организация (на регистрации)</li>
<li>• <span class="text-yellow-400">○</span> Актобе: 27 организаций (ожидается подписание)</li>
<li>• <span class="text-blue-400">◐</span> Жетісу, Шымкент: прямые договоры</li>
<li>• <span class="text-blue-400">◐</span> Павлодар, Мангыстау, Жамбыл, Караганда, Акмола: бюджет выделен, КП направлено</li>
</ul>
</div>
<div class="metric-card">
<h3 class="text-xl font-bold mb-4">Технический статус</h3>
<p class="text-gray-300">
Информационная система развернута в тестовой среде.
Первая партия датчиков проходит таможенные процедуры.
</p>
</div>
</div>
</div>
<!-- Слайд 11: Сводная информация -->
<div class="slide" id="slide11">
<div class="slide-content">
<h2 class="text-4xl font-bold mb-8 text-center">Сводная информация по проектам</h2>
<div class="grid grid-cols-3 gap-6 mb-8">
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">Завершено</div>
<div class="text-4xl font-bold text-green-400">1</div>
</div>
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">В работе</div>
<div class="text-4xl font-bold text-blue-400">6</div>
</div>
<div class="metric-card">
<div class="text-sm text-gray-400 mb-2">На рассмотрении</div>
<div class="text-4xl font-bold text-yellow-400">2</div>
</div>
</div>
<div class="metric-card mb-6">
<h3 class="text-xl font-bold mb-4">Ключевые направления</h3>
<div class="grid grid-cols-2 gap-4">
<div>
<h4 class="font-bold text-blue-400 mb-2">Искусственный интеллект</h4>
<ul class="text-gray-300 text-sm space-y-1">
<li>• GenAI KT</li>
<li>• Вычислительные мощности (GPU)</li>
<li>• Smart Aqkol 2025</li>
<li>• НКТ (ИИ-модерация)</li>
</ul>
</div>
<div>
<h4 class="font-bold text-purple-400 mb-2">Инфраструктура</h4>
<ul class="text-gray-300 text-sm space-y-1">
<li>• ЦОД Косшы</li>
<li>• Единая инфраструктура дронов</li>
<li>• Холодовая цепь</li>
<li>• Смарт-видеожетоны</li>
</ul>
</div>
</div>
</div>
<div class="text-center mt-12">
<p class="text-2xl font-bold accent-gradient">Спасибо за внимание!</p>
</div>
</div>
</div>
<script>
let currentSlide = 1;
const totalSlides = 11;
function updateSlide() {
document.querySelectorAll('.slide').forEach((slide, index) => {
slide.classList.remove('active');
if (index + 1 === currentSlide) {
slide.classList.add('active');
}
});
document.querySelectorAll('.indicator').forEach((indicator, index) => {
indicator.classList.remove('active');
if (index + 1 === currentSlide) {
indicator.classList.add('active');
}
});
document.getElementById('progressBar').style.width = `${(currentSlide / totalSlides) * 100}%`;
document.getElementById('slideNumber').textContent = `${currentSlide} / ${totalSlides}`;
}
function createIndicators() {
const container = document.getElementById('slideIndicator');
for (let i = 1; i <= totalSlides; i++) {
const indicator = document.createElement('div');
indicator.className = 'indicator';
indicator.onclick = () => {
currentSlide = i;
updateSlide();
};
container.appendChild(indicator);
}
}
function nextSlide() {
if (currentSlide < totalSlides) {
currentSlide++;
updateSlide();
}
}
function prevSlide() {
if (currentSlide > 1) {
currentSlide--;
updateSlide();
}
}
document.addEventListener('keydown', (e) => {
if (e.key === 'ArrowRight' || e.key === 'Space') {
nextSlide();
} else if (e.key === 'ArrowLeft') {
prevSlide();
}
});
createIndicators();
updateSlide();
</script>
</body>
</html>

BIN
projects_report.pdf Normal file

Binary file not shown.