240 lines
6.3 KiB
HTML
240 lines
6.3 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="ru">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<title>Карточка участка {{ cad_num }}</title>
|
||
<style>
|
||
@font-face {
|
||
font-family: 'DejaVu Sans';
|
||
src: url('{{ font_url }}') format('truetype');
|
||
}
|
||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
||
body {
|
||
font-family: 'DejaVu Sans', Arial, sans-serif;
|
||
font-size: 10pt;
|
||
color: #1a1a2e;
|
||
background: #ffffff;
|
||
padding: 20mm 18mm 18mm 18mm;
|
||
}
|
||
/* ── HEADER ── */
|
||
.header {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: flex-start;
|
||
border-bottom: 2px solid #2563eb;
|
||
padding-bottom: 8px;
|
||
margin-bottom: 14px;
|
||
}
|
||
.header-left h1 {
|
||
font-size: 14pt;
|
||
font-weight: bold;
|
||
color: #2563eb;
|
||
}
|
||
.header-left .subtitle {
|
||
font-size: 9pt;
|
||
color: #64748b;
|
||
margin-top: 2px;
|
||
}
|
||
.header-right {
|
||
text-align: right;
|
||
font-size: 8pt;
|
||
color: #64748b;
|
||
}
|
||
/* ── SECTION TITLE ── */
|
||
.section-title {
|
||
font-size: 10pt;
|
||
font-weight: bold;
|
||
color: #1e3a5f;
|
||
background: #eff6ff;
|
||
padding: 4px 8px;
|
||
border-left: 3px solid #2563eb;
|
||
margin-bottom: 8px;
|
||
}
|
||
/* ── KPI GRID ── */
|
||
.kpi-grid {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px;
|
||
margin-bottom: 14px;
|
||
}
|
||
.kpi-card {
|
||
flex: 1 1 140px;
|
||
border: 1px solid #cbd5e1;
|
||
border-radius: 4px;
|
||
padding: 7px 10px;
|
||
background: #f8fafc;
|
||
}
|
||
.kpi-card .kpi-label {
|
||
font-size: 7.5pt;
|
||
color: #64748b;
|
||
margin-bottom: 2px;
|
||
}
|
||
.kpi-card .kpi-value {
|
||
font-size: 11pt;
|
||
font-weight: bold;
|
||
color: #1e3a5f;
|
||
}
|
||
/* ── TABLE ── */
|
||
table {
|
||
width: 100%;
|
||
border-collapse: collapse;
|
||
font-size: 8.5pt;
|
||
margin-bottom: 14px;
|
||
}
|
||
table thead tr th {
|
||
background: #1e3a5f;
|
||
color: #ffffff;
|
||
padding: 5px 8px;
|
||
text-align: left;
|
||
font-weight: bold;
|
||
}
|
||
table tbody tr:nth-child(even) td {
|
||
background: #f1f5f9;
|
||
}
|
||
table tbody tr td {
|
||
padding: 4px 8px;
|
||
border-bottom: 1px solid #e2e8f0;
|
||
color: #1a1a2e;
|
||
}
|
||
.badge {
|
||
display: inline-block;
|
||
padding: 1px 6px;
|
||
border-radius: 10px;
|
||
font-size: 7.5pt;
|
||
font-weight: bold;
|
||
}
|
||
.badge-green { background: #dcfce7; color: #166534; }
|
||
.badge-yellow { background: #fef9c3; color: #854d0e; }
|
||
.badge-blue { background: #dbeafe; color: #1e40af; }
|
||
/* ── FOOTER ── */
|
||
.footer {
|
||
position: fixed;
|
||
bottom: 12mm;
|
||
left: 18mm;
|
||
right: 18mm;
|
||
border-top: 1px solid #cbd5e1;
|
||
padding-top: 5px;
|
||
display: flex;
|
||
justify-content: space-between;
|
||
font-size: 7.5pt;
|
||
color: #94a3b8;
|
||
}
|
||
.disclaimer {
|
||
font-size: 7pt;
|
||
color: #94a3b8;
|
||
margin-top: 4px;
|
||
font-style: italic;
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<!-- HEADER -->
|
||
<div class="header">
|
||
<div class="header-left">
|
||
<h1>GenDesign — Карточка участка</h1>
|
||
<div class="subtitle">Данные НСПД / ЕГРНsource: cad_parcels. Не является официальной выпиской ЕГРН.</div>
|
||
</div>
|
||
<div class="header-right">
|
||
<strong>{{ cad_num }}</strong><br/>
|
||
{{ district or '—' }}<br/>
|
||
{{ address or '—' }}
|
||
</div>
|
||
</div>
|
||
|
||
<!-- BLOCK 1: KPI -->
|
||
<div class="section-title">Основные характеристики</div>
|
||
<div class="kpi-grid">
|
||
<div class="kpi-card">
|
||
<div class="kpi-label">Площадь</div>
|
||
<div class="kpi-value">{{ area_ha }} га</div>
|
||
</div>
|
||
<div class="kpi-card">
|
||
<div class="kpi-label">Кадастровая стоимость</div>
|
||
<div class="kpi-value">{{ cadastral_cost }}</div>
|
||
</div>
|
||
<div class="kpi-card">
|
||
<div class="kpi-label">Категория земель</div>
|
||
<div class="kpi-value">{{ land_category or '—' }}</div>
|
||
</div>
|
||
<div class="kpi-card">
|
||
<div class="kpi-label">ВРИ</div>
|
||
<div class="kpi-value">{{ vri or '—' }}</div>
|
||
</div>
|
||
<div class="kpi-card">
|
||
<div class="kpi-label">Последнее обновление</div>
|
||
<div class="kpi-value">{{ last_update or '—' }}</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- BLOCK 2: Top-7 POI -->
|
||
<div class="section-title">Ближайшая инфраструктура (топ-7 по взвешенному баллу)</div>
|
||
{% if poi_items %}
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>Категория</th>
|
||
<th>Название</th>
|
||
<th>Расстояние</th>
|
||
<th>Пешком</th>
|
||
<th>Балл</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
{% for poi in poi_items %}
|
||
<tr>
|
||
<td>{{ poi.category_ru }}</td>
|
||
<td>{{ poi.name or '—' }}</td>
|
||
<td>{{ poi.distance_m }} м</td>
|
||
<td>{{ poi.walk_min }} мин</td>
|
||
<td><span class="badge badge-blue">{{ poi.weighted_score }}</span></td>
|
||
</tr>
|
||
{% endfor %}
|
||
</tbody>
|
||
</table>
|
||
{% else %}
|
||
<p style="color:#64748b; font-size:8.5pt; margin-bottom:14px;">POI в радиусе 1 км не найдены.</p>
|
||
{% endif %}
|
||
|
||
<!-- BLOCK 3: Competitors -->
|
||
<div class="section-title">Конкуренты в радиусе 3 км (топ {{ competitors|length }})</div>
|
||
{% if competitors %}
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>ЖК / Объект</th>
|
||
<th>Застройщик</th>
|
||
<th>Класс</th>
|
||
<th>Квартир</th>
|
||
<th>Расстояние</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
{% for c in competitors %}
|
||
<tr>
|
||
<td>{{ c.comm_name or '—' }}</td>
|
||
<td>{{ c.dev_name or '—' }}</td>
|
||
<td>{{ c.obj_class or '—' }}</td>
|
||
<td>{{ c.flat_count or '—' }}</td>
|
||
<td>{{ c.distance_m }} м</td>
|
||
</tr>
|
||
{% endfor %}
|
||
</tbody>
|
||
</table>
|
||
{% else %}
|
||
<p style="color:#64748b; font-size:8.5pt; margin-bottom:14px;">Конкурентов в радиусе 3 км не обнаружено.</p>
|
||
{% endif %}
|
||
|
||
<div class="disclaimer">
|
||
Не является выпиской из ЕГРН. Данные носят аналитический характер.
|
||
Для официальной выписки: rosreestr.gov.ru
|
||
</div>
|
||
|
||
<!-- FOOTER -->
|
||
<div class="footer">
|
||
<span>gendsgn.ru — GenDesign Analytics</span>
|
||
<span>Сформировано: {{ generated_at }}</span>
|
||
</div>
|
||
|
||
</body>
|
||
</html>
|