Files
mkd/inspectionElementTemplates.ts

90 lines
4.6 KiB
TypeScript
Raw Normal View History

2026-02-04 00:17:04 +05:00
import type { InspectionMKDElement } from './types';
function createElement(id: string, name: string): InspectionMKDElement {
return {
id,
name,
generalStatus: 'NOT_SELECTED',
electroStatus: 'NOT_SELECTED',
weldingStatus: 'NOT_SELECTED',
repairType: '',
mainPhoto: undefined,
additionalPhotos: []
};
}
/** Типовые наименования элементов по этажу подъезда (поэтажный осмотр). */
export const FLOOR_ELEMENT_NAMES = [
'Стены и потолок',
'Напольное покрытие',
'Лестничный марш',
'Перила',
'Окна и подоконники',
'Освещение',
'Почтовые ящики',
'Двери в квартиры (состояние коробок)',
'Колясочная (при наличии)'
] as const;
/** Типовые элементы для секции «Парадная» (входная группа). */
export const ENTRANCE_ELEMENT_NAMES = [
'Входная дверь',
'Козырьки',
'Домофон / видеодомофон',
'Освещение',
'Уборка / состояние вестибюля'
] as const;
/** Элементы по общим секциям (ключ — title секции). */
export const COMMON_SECTION_ELEMENTS: Record<string, readonly string[]> = {
'Кровля': ['Покрытие', 'Примыкания', 'Водосточная система', 'Выходы на кровлю', 'Ограждения'],
'Подвал': ['Несущие конструкции', 'Коммуникации', 'Освещение', 'Вентиляция', 'Отсутствие протечек / затоплений', 'Двери и люки'],
'Фундамент': ['Видимая часть фундамента', 'Отмостка', 'Гидроизоляция', 'Вентиляционные продухи'],
'Фасад': ['Стены', 'Швы', 'Окна общего пользования', 'Отливы', 'Балконы (общие конструкции)'],
'Благоустройство': [
'Дорожки и проезды, тротуары',
'Освещение дворовой территории',
'Урны и контейнеры для мусора',
'Контейнерная площадка',
'Озеленение (газоны, кустарники)',
'Детская / спортивная площадки',
'Парковочные места',
'Ограждение территории',
'Крыльца и входные группы (со стороны двора)',
'Ливневая канализация'
],
'Общий паркинг': ['Покрытие', 'Разметка', 'Освещение', 'Ограждение', 'Вентиляция (если подземный)'],
'Технический этаж': ['Конструкции', 'Инженерное оборудование', 'Освещение', 'Доступ'],
'Чердак': ['Конструкции', 'Утепление', 'Вентиляция', 'Освещение', 'Люки'],
'Цоколь': ['Видимая часть цоколя', 'Отмостка', 'Гидроизоляция', 'Вентиляционные продухи']
};
/** Создать массив элементов МКД из списка названий (с уникальными id). */
export function buildElementsFromNames(
names: readonly string[],
prefix: string
): InspectionMKDElement[] {
return names.map((name, idx) =>
createElement(`${prefix}-${idx}-${Date.now()}`, name)
);
}
/** Создать элементы этажа по шаблону. */
export function buildFloorElements(entranceNumber: number, floorNumber: number): InspectionMKDElement[] {
const prefix = `entrance-${entranceNumber}-floor-${floorNumber}`;
return buildElementsFromNames(FLOOR_ELEMENT_NAMES, prefix);
}
/** Создать элементы парадной по шаблону. */
export function buildEntranceElements(entranceNumber: number): InspectionMKDElement[] {
const prefix = `entrance-${entranceNumber}`;
return buildElementsFromNames(ENTRANCE_ELEMENT_NAMES, prefix);
}
/** Создать элементы для общей секции по title. */
export function buildCommonSectionElements(sectionTitle: string, sectionId: string): InspectionMKDElement[] {
const names = COMMON_SECTION_ELEMENTS[sectionTitle];
if (!names || names.length === 0) return [];
return buildElementsFromNames(names, sectionId);
}