90 lines
4.6 KiB
TypeScript
Executable File
90 lines
4.6 KiB
TypeScript
Executable File
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);
|
||
}
|