Files
mkd/constants.tsx
2026-02-04 00:17:04 +05:00

526 lines
25 KiB
TypeScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { Building, District, EntranceSection, User, Employee, Candidate, Vacancy, PREvent, ResidentReport, DomaApplication, ResidentFeedback, StrategicGoal, Invoice, OfficeRequest, OfficeInventoryItem, OfficeDocument, OfficeAsset, LegalContract, LegalCourtCase, LegalCounterparty, PersonalAccount, AccountMeter, MeterReading } from './types';
import {
LayoutDashboard,
Map,
Wrench,
Banknote,
Scale,
Briefcase,
UsersRound,
Megaphone,
Building2,
Settings,
} from 'lucide-react';
export const CURRENT_USER_MOCK: User = {
id: 'u1',
name: 'Алексей Петров',
role: 'DIRECTOR',
avatar: 'https://picsum.photos/id/1005/64/64'
};
export const MOCK_DISTRICTS: District[] = [];
export const EMPLOYEE_POSITIONS: string[] = [
'Слесарь-сантехник',
'Электрик',
'Дворник',
'Мастер участка',
'Сантехник',
'Сварщик',
'Юрист по работе с дебиторской задолженностью',
'Слесарь-сантехник (4-5 разряд)',
'Другое'
];
export const MOCK_EMPLOYEES: Employee[] = [
{
id: 'e1',
name: 'Иванов Иван Иванович',
position: 'Слесарь-сантехник',
phone: '+7 900 123-45-67',
status: 'active',
salary: 45000,
assignedDistrictId: 'd-1',
birthDate: '1985-03-15',
messengerLogins: [
{ messenger: 'Telegram', login: '@ivanov_ii' },
{ messenger: 'Max', login: '+7 900 123-45-67' }
],
photoUrl: 'https://picsum.photos/id/64/200/200',
registrationDate: '2020-01-15',
hrData: {
passportData: {
series: '4510',
number: '123456',
issuedBy: 'ОУФМС России по г. Москве',
issuedDate: '2010-05-20',
registrationAddress: 'г. Москва, ул. Ленина, д. 10, кв. 25'
},
laborBook: {
number: 'ТК-123456',
entries: [
{ date: '2020-01-15', organization: 'ООО "УК Дружба"', position: 'Слесарь-сантехник' }
]
},
certificates: [
{ type: '2-НДФЛ', requestedDate: '2024-01-10', issuedDate: '2024-01-12', status: 'ready' },
{ type: 'Справка с места работы', requestedDate: '2024-03-05', status: 'requested' }
],
otherDocuments: [
{ name: 'Договор трудового найма', type: 'Трудовой договор', date: '2020-01-15' },
{ name: 'Медицинская книжка', type: 'Мед. документ', date: '2023-06-10' }
]
}
},
{
id: 'e2',
name: 'Петров Петр Петрович',
position: 'Электрик',
phone: '+7 900 123-45-68',
status: 'vacation',
salary: 50000,
assignedDistrictId: 'd-1',
birthDate: '1988-07-22',
messengerLogins: [
{ messenger: 'Telegram', login: '@petrov_pp' }
],
registrationDate: '2019-05-10',
hrData: {
passportData: {
series: '4512',
number: '234567',
issuedBy: 'ОУФМС России по г. Москве',
issuedDate: '2012-08-15',
registrationAddress: 'г. Москва, пр. Мира, д. 5, кв. 12'
},
laborBook: {
number: 'ТК-234567',
entries: [
{ date: '2019-05-10', organization: 'ООО "УК Дружба"', position: 'Электрик' }
]
}
}
},
{
id: 'e3',
name: 'Сидорова Анна Александровна',
position: 'Дворник',
phone: '+7 900 123-45-69',
status: 'active',
salary: 25000,
assignedDistrictId: 'd-2',
birthDate: '1975-11-30',
messengerLogins: [
{ messenger: 'Max', login: '+7 900 123-45-69' }
],
photoUrl: 'https://picsum.photos/id/65/200/200',
registrationDate: '2021-03-01',
hrData: {
passportData: {
series: '4508',
number: '345678',
issuedBy: 'ОУФМС России по г. Москве',
issuedDate: '2008-12-10',
registrationAddress: 'г. Москва, ул. Заречная, д. 20, кв. 8'
},
laborBook: {
number: 'ТК-345678',
entries: [
{ date: '2021-03-01', organization: 'ООО "УК Дружба"', position: 'Дворник' }
]
},
certificates: [
{ type: 'Справка о доходах', requestedDate: '2024-05-15', status: 'requested' }
]
}
},
{
id: 'e4',
name: 'Кузнецов Владимир Викторович',
position: 'Мастер участка',
phone: '+7 900 111-22-33',
status: 'active',
salary: 65000,
assignedDistrictId: 'd-1',
birthDate: '1980-02-14',
messengerLogins: [
{ messenger: 'Telegram', login: '@kuznetsov_vv' },
{ messenger: 'Max', login: '+7 900 111-22-33' }
],
photoUrl: 'https://picsum.photos/id/66/200/200',
registrationDate: '2018-09-01',
hrData: {
passportData: {
series: '4509',
number: '456789',
issuedBy: 'ОУФМС России по г. Москве',
issuedDate: '2009-03-25',
registrationAddress: 'г. Москва, ул. Центральная, д. 15, кв. 45'
},
laborBook: {
number: 'ТК-456789',
entries: [
{ date: '2018-09-01', organization: 'ООО "УК Дружба"', position: 'Мастер участка' },
{ date: '2015-01-10', organization: 'ООО "СтройСервис"', position: 'Мастер' }
]
},
certificates: [
{ type: '2-НДФЛ', requestedDate: '2024-01-10', issuedDate: '2024-01-12', status: 'ready' }
]
}
},
{
id: 'e5',
name: 'Степанов Сергей Сергеевич',
position: 'Сантехник',
phone: '+7 900 444-55-66',
status: 'active',
salary: 42000,
assignedDistrictId: 'd-2',
birthDate: '1990-09-05',
messengerLogins: [
{ messenger: 'Telegram', login: '@stepanov_ss' }
],
registrationDate: '2022-06-15',
hrData: {
passportData: {
series: '4511',
number: '567890',
issuedBy: 'ОУФМС России по г. Москве',
issuedDate: '2011-11-18',
registrationAddress: 'г. Москва, ул. Новая, д. 8, кв. 15'
},
laborBook: {
number: 'ТК-567890',
entries: [
{ date: '2022-06-15', organization: 'ООО "УК Дружба"', position: 'Сантехник' }
]
}
}
},
];
export const MOCK_CANDIDATES: Candidate[] = [
{ id: 'c1', name: 'Новиков Д.Д.', position: 'Мастер участка', stage: 'interview', phone: '+7 999 000-00-01' },
{ id: 'c2', name: 'Козлов Е.Е.', position: 'Сварщик', stage: 'new', phone: '+7 999 000-00-02' },
];
export const MOCK_VACANCIES: Vacancy[] = [
{ id: 'v1', position: 'Слесарь-сантехник (4-5 разряд)', department: 'Тех. отдел', status: 'urgent', salary: '55 000 - 65 000 ₽', applicantsCount: 3, postedDate: '2024-05-10', description: 'Техническое обслуживание внутридомовых инженерных систем ГВС, ХВС, отопления и канализации.' },
{ id: 'v2', position: 'Мастер участка', department: 'Эксплуатация', status: 'active', salary: '70 000 ₽', applicantsCount: 12, postedDate: '2024-05-15', description: 'Организация и контроль работы линейного персонала на вверенном участке (8-10 МКД).' },
{ id: 'v3', position: 'Юрист по работе с дебиторской задолженностью', department: 'Юр. отдел', status: 'active', salary: '60 000 ₽', applicantsCount: 8, postedDate: '2024-05-20', description: 'Подготовка приказов, исковых заявлений, представление интересов УК в судах и ФССП.' },
];
export const MOCK_PR_EVENTS: PREvent[] = [
{ id: 'ev1', title: 'День Соседа (Гриль-вечеринка)', date: '2024-06-15', type: 'resident', category: 'holiday', status: 'planned', location: 'ул. Ленина, д.12 (двор)', attendeesCount: 0, budget: 15000 },
{ id: 'ev2', title: 'Эко-субботник "Чистый Участок"', date: '2024-06-08', type: 'resident', category: 'eco', status: 'planned', location: 'пр. Мира, д.8', attendeesCount: 0, budget: 5000 },
{ id: 'ev3', title: 'Квартальный Тимбилдинг (Квиз)', date: '2024-06-20', type: 'internal', category: 'training', status: 'planned', location: 'Офис УК', attendeesCount: 24, budget: 12000 },
];
export const MOCK_RESIDENT_REPORTS: ResidentReport[] = [
{ id: 'rep1', buildingId: 'b-1', address: 'Тестовый пер., д.55', month: 'Май 2024', status: 'published', stats: { appsDone: 42, budgetSpent: 125000, cleaningQuality: 4.8 } },
{ id: 'rep2', buildingId: 'b-2', address: 'ул. Ленина, д.12', month: 'Май 2024', status: 'draft', stats: { appsDone: 15, budgetSpent: 45000, cleaningQuality: 3.2 } },
];
export const MOCK_STRATEGIC_GOALS: StrategicGoal[] = [
{ id: 'g1', department: 'production', title: 'Качество и Скорость', description: 'Снизить долю просроченных заявок', currentValue: 8, targetValue: 5, unit: '%', deadline: '30.09.2024' },
{ id: 'g2', department: 'pr', title: 'Лояльность Жителей', description: 'Повысить общий NPS по компании', currentValue: 68, targetValue: 75, unit: '', deadline: '31.12.2024' },
{ id: 'g3', department: 'finance', title: 'Финансовая Эффективность', description: 'Достичь чистой прибыли (мес)', currentValue: 1200000, targetValue: 1500000, unit: '₽', deadline: '31.07.2024' },
{ id: 'g4', department: 'development', title: 'Рост Портфеля', description: 'Подключить новые дома в управление', currentValue: 3, targetValue: 5, unit: 'домов', deadline: '31.12.2024' },
{ id: 'g5', department: 'legal', title: 'Юридическая Сила', description: 'Повысить процент выигранных дел', currentValue: 85, targetValue: 90, unit: '%', deadline: '30.09.2024' },
{ id: 'g6', department: 'hr', title: 'Стабильность Команды', description: 'Снизить текучесть кадров (год)', currentValue: 12, targetValue: 10, unit: '%', deadline: '31.12.2024' },
];
export const MOCK_FEEDBACK: ResidentFeedback[] = [
{ id: 'f1', buildingId: 'b-1', address: 'Тестовый пер., д.55', date: '2024-05-28', text: 'Очень довольна работой дворника, всегда чисто во дворе. Спасибо!', source: 'Опрос', rating: 10 },
{ id: 'f2', buildingId: 'b-2', address: 'ул. Ленина, д.12', date: '2024-05-27', text: 'Лифт постоянно ломается, уже неделю хожу пешком на 8 этаж. Это просто издевательство.', source: 'Приложение', rating: 1 },
];
export const MOCK_APPLICATIONS: DomaApplication[] = [
{ id: 12345, number: 'A-12345', status: 'new', description: 'Течь трубы в ванной комнате, сильный напор.', address: 'Тестовый пер., д.55', apartment: '15', clientName: 'Сергеева А.Н.', createdAt: '2024-05-30T10:00:00Z', deadlineAt: '2024-05-30T18:00:00Z' },
];
export const MOCK_OFFICE_REQUESTS: OfficeRequest[] = [
{ id: 'or1', requesterName: 'Иванова М. (HR)', category: 'stationery', itemName: 'Бумага А4 (5 коробок)', date: '2024-06-01', status: 'new', amount: 3500, priority: 'medium' },
];
export const MOCK_OFFICE_INVENTORY: OfficeInventoryItem[] = [
{ id: 'oi1', name: 'Бумага А4 (SvetoCopy)', quantity: 2, unit: 'кор.', minThreshold: 3, lastRestock: '2024-05-10' },
];
export const MOCK_OFFICE_DOCUMENTS: OfficeDocument[] = [
// FIX: Added type property to mock data to match interface and resolve errors in components
{ id: 'doc1', regNumber: 'ВХ-1234', title: 'Требование об уплате налога', correspondent: 'ИФНС №5', date: '2024-06-01', status: 'registered', type: 'incoming', assignedTo: 'Гл. Бухгалтер' },
];
export const MOCK_OFFICE_ASSETS: OfficeAsset[] = [
{ id: 'as1', name: 'MacBook Air M1', type: 'laptop', assignedTo: 'Алексей Петров', purchaseDate: '2023-01-15', condition: 'good', serialNumber: 'C02XXXXX' },
];
// LEGAL MOCK DATA
export const MOCK_LEGAL_CONTRACTS: LegalContract[] = [
{ id: 'lc1', number: '2024/05-12', type: 'Поставка', counterparty: 'ООО "СтройМаш"', amount: 1500000, status: 'active', startDate: '2024-01-01', endDate: '2024-12-31', autoProlongation: true, manager: 'Петров А.А.', hasDisagreements: false },
];
export const MOCK_LEGAL_CASES: LegalCourtCase[] = [
{ id: 'case1', caseNumber: 'А40-12345/2024', type: 'arbitration', role: 'plaintiff', subject: 'Взыскание задолженности с ООО "Ромашка"', amount: 450000, status: 'litigation', nextHearingDate: '2024-06-25', judge: 'Иванова М.С.' },
{ id: 'case2', caseNumber: '2-1234/2024', type: 'debt_recovery', role: 'plaintiff', subject: 'Взыскание за ЖКУ', debtorName: 'Козлов Е.Е.', address: 'ул. Ленина, 12, кв. 45', amount: 85000, status: 'litigation', nextHearingDate: '2024-06-12', judge: 'Петров В.В.' },
{ id: 'case3', caseNumber: '2-5566/2023', type: 'debt_recovery', role: 'plaintiff', subject: 'Взыскание за ЖКУ', debtorName: 'Сидорова А.М.', address: 'пр. Мира, 8, кв. 101', amount: 120000, recoveredAmount: 45000, amountAtBailiffs: 15000, status: 'enforcement', fsspStatus: 'Арест счетов', fsspLastActionDate: '2024-05-10', bailiffName: 'Успенский С.В.', judge: 'Михайлова Е.Н.' },
{ id: 'case4', caseNumber: 'пр-778', type: 'debt_recovery', role: 'plaintiff', subject: 'Претензия по задолженности', debtorName: 'Иванов С.С.', address: 'Заречная, 44, кв. 12', amount: 35000, status: 'pre_trial' },
];
export const MOCK_LEGAL_COUNTERPARTIES: LegalCounterparty[] = [
{ id: 'cp1', name: 'ООО "СтройМаш"', inn: '7701234567', status: 'active', riskLevel: 'low', checkedDate: '2024-05-20' },
];
// MOCK данные модуля развития удалены - теперь используются данные из БД через API
// Данные загружаются через backendApi.getDevelopmentPipeline(), getDevelopmentOSS(), и т.д.
// Helper to create elements
const createElement = (id: string, name: string) => ({
id,
name,
generalStatus: 'NOT_SELECTED' as const,
electroStatus: 'NOT_SELECTED' as const,
weldingStatus: 'NOT_SELECTED' as const,
});
const createEntranceSections = (prefix: string): EntranceSection[] => [
{
id: `${prefix}-floors`,
title: 'Этажи',
elements: [
createElement(`${prefix}-fl-1`, 'Напольное покрытие'),
createElement(`${prefix}-fl-2`, 'Освещение'),
]
}
];
const createCommonSections = (prefix: string): EntranceSection[] => [
{
id: `${prefix}-roof`,
title: 'Кровля',
elements: [
createElement(`${prefix}-roof-1`, 'Покрытие'),
]
}
];
const createEntrance = (num: number, bId: string) => ({
id: `${bId}-ent-${num}`,
number: num,
floors: 10,
liftsCount: 1,
hasBasement: 'NOT_SELECTED' as const,
hasTechFloor: 'NOT_SELECTED' as const,
hasAttic: 'NOT_SELECTED' as const,
hasParking: 'NOT_SELECTED' as const,
hasMansard: 'NOT_SELECTED' as const,
entranceGroupsCount: 1,
sections: createEntranceSections(`${bId}-ent-${num}`)
});
// Helper: Generate Readings History
const generateReadingsHistory = (baseValue: number): MeterReading[] => {
const readings: MeterReading[] = [];
let currentValue = baseValue;
const today = new Date();
for (let i = 0; i < 12; i++) {
const date = new Date(today.getFullYear(), today.getMonth() - i, 20);
const consumption = Math.floor(Math.random() * 20) + 5;
readings.push({
date: date.toISOString().split('T')[0],
value: currentValue,
consumption: consumption,
source: 'app'
});
currentValue -= consumption;
}
return readings;
};
// Helper to create mock personal accounts
const createMockAccounts = (buildingId: string, aptCount: number): PersonalAccount[] => {
const accounts: PersonalAccount[] = [];
const types: Array<'apartment' | 'parking' | 'storage' | 'office'> = ['apartment', 'parking', 'storage', 'office'];
const sentiments: Array<'negative' | 'toxic' | 'positive' | 'loyal' | 'neutral'> = ['negative', 'toxic', 'positive', 'loyal', 'neutral'];
for (let i = 1; i <= aptCount; i++) {
const areaTotal = Math.floor(40 + Math.random() * 60);
const accountType = i <= aptCount * 0.8 ? 'apartment' : types[Math.floor(Math.random() * types.length)];
const hasProfile = Math.random() > 0.3; // 70% имеют профиль
accounts.push({
id: `${buildingId}-acc-${i}`,
accountNumber: `${buildingId.replace('b-', '')}00${i}`,
apartmentNumber: i.toString(),
type: accountType,
floor: Math.ceil(i/4),
owners: [{
fullName: 'Иванов И.И.',
phone: '+7 900 000-00-00',
residentProfile: i % 3 === 0 ? {
sentiment: sentiments[Math.floor(Math.random() * sentiments.length)],
birthday: `198${Math.floor(Math.random() * 10)}-${String(Math.floor(Math.random() * 12) + 1).padStart(2, '0')}-${String(Math.floor(Math.random() * 28) + 1).padStart(2, '0')}`,
email: `owner${i}@example.com`,
preferredContactMethod: 'phone' as any,
} : undefined
}],
registered: i % 2 === 0 ? [
{ id: `reg-${i}-1`, fullName: 'Петрова А.А.', phone: '+7 900 111-11-11', email: `registered${i}@example.com` },
{ id: `reg-${i}-2`, fullName: 'Петров П.П.', phone: '+7 900 111-11-12' },
] : [],
areaTotal: areaTotal,
areaLiving: accountType === 'apartment' ? Math.floor(areaTotal * 0.7) : 0,
areaNonLiving: accountType === 'apartment' ? Math.floor(areaTotal * 0.3) : areaTotal,
meters: accountType === 'apartment' ? [
{ id: `m-${i}-1`, type: 'ХВС', make: 'Бетар', number: `BC-${i}321`, lastVerification: '2022-05-10', nextVerification: '2026-05-10', readings: generateReadingsHistory(150) },
] : [],
isMeterInstallationFeasible: accountType === 'apartment',
premiseNotes: i % 7 === 0 ? 'Требуется косметический ремонт' : undefined
});
}
return accounts;
};
const createBuilding = (id: string, districtId: string, address: string, img: string, npsScore: number): Building => ({
id,
districtId,
imageUrl: img,
nps: npsScore,
passport: {
address,
apartmentsCount: 160,
general: {
address: address,
fiasCode: '8c5b2444-70a0-4932-980c-0e78548135f3',
constructionYear: 1988,
commissionYear: 1989,
seriesType: '1-447С-37',
floors: 10,
undergroundFloors: 1,
totalArea: 5400,
livingArea: 4800,
nonLivingArea: 200,
commonArea: 400,
cadastralNumberBuild: '77:01:0001001:1000',
cadastralNumberLand: '77:01:0001001:25',
},
construction: {
foundationType: 'Ленточный',
foundationMaterial: 'Железобетон',
wallMaterial: 'Кирпич силикатный',
floorMaterial: 'Железобетонные плиты',
roofType: 'Плоская',
roofMaterial: 'Мягкая рулонная кровля',
roofArea: 850,
facadeType: 'Оштукатуренный',
facadeInsulation: false,
windowType: 'ПВХ (частично)',
},
engineering: {
heatingType: 'Центральное',
heatingWiring: 'Верхняя',
hasITP: true,
waterSupplyMaterial: 'Сталь оцинкованная',
waterSupplyType: 'Циркуляционная',
sewerMaterial: 'Чугун',
electricityEntries: 2,
hasVRU: true,
gasType: 'Нет',
ventilationType: 'Естественная',
},
meters: [
{ resource: 'Heat', hasMeter: true, model: 'ВКТ-7', number: '123456', lastVerification: '2023-09-01', nextVerification: '2027-09-01' },
{ resource: 'Water', hasMeter: true, model: 'Взлет ТСР-М', number: '987654', lastVerification: '2022-05-15', nextVerification: '2026-05-15' },
{ resource: 'Electricity', hasMeter: true, model: 'Меркурий 230', number: '555444', lastVerification: '2020-11-20', nextVerification: '2030-11-20' },
{ resource: 'Gas', hasMeter: false },
],
lifts: [
{ count: 1, type: 'Пассажирский', capacity: 400, speed: 1.0, installYear: 2015, factoryNumber: 'KMZ-1001' },
],
land: {
area: 1200,
hasPlayground: true,
hasSportsGround: false,
hasParking: true,
hasFencing: true,
hasContainerSite: true,
},
management: {
contractDate: '2020-01-01',
contractNumber: 'У-55/2020',
servicesList: ['Содержание жилья', 'Текущий ремонт', 'Управление', 'Вывоз ТБО'],
tariffMaintenance: 35.50,
serviceContracts: [
{ id: 'sc1', serviceType: 'Водоснабжение (РСО)', providerName: 'АО Водоканал', contractNumber: 'В-100/22', contractDate: '2022-01-15' },
{ id: 'sc2', serviceType: 'Тех. обслуживание лифтов', providerName: 'ООО ЛифтСервис', contractNumber: 'Л-55/23', contractDate: '2023-03-10', expiryDate: '2025-03-10' },
{ id: 'sc3', serviceType: 'Видеонаблюдение', providerName: 'Безопасный Город', contractNumber: 'ВН-12', contractDate: '2024-01-01' },
{ id: 'sc4', serviceType: 'Интернет (МОП)', providerName: 'Ростелеком', contractNumber: 'РТ-9988', contractDate: '2021-06-05' },
]
}
},
staff: [{ id: 's1', role: 'Главный инженер', company: 'ООО «Дружба»', name: 'Иванов И.И.' }],
entrances: [1, 2].map(n => createEntrance(n, id)),
commonSections: createCommonSections(id),
accounts: createMockAccounts(id, 10),
financials: {
balance: 450000,
debt: 85000,
collectionRate: 94,
topDebtors: [
{ apartment: '15', amount: 45000, months: 6, status: 'new' },
],
invoices: [
{ id: 'inv1', buildingId: id, address: address, contractorName: 'ООО "ЛифтСервис"', serviceName: 'ТО Лифтов', amount: 25000, date: '2024-05-20', status: 'approved', priority: 'high', closingDocsReceived: false },
]
},
requests: { new: 2, inProgress: 4, overdue: 0 },
inspectionHistory: [
{ id: 'act-1', number: '124-ОС', date: '2024-05-15', inspector: 'Иванов И.И.', type: 'scheduled_spring', status: 'completed', issuesCount: 2 },
],
tasks: [
{
id: 't1',
title: 'Замена лампочек',
deadline: new Date('2024-05-20').toISOString(),
status: 'new',
priority: 'medium',
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
buildingId: ''
},
],
annualPlan: [
{ id: 'p1', year: 2024, month: 'Май', workName: 'Промывка системы отопления', status: 'current', progress: 45, estimatedCost: 45000 },
],
inventory: [
{ id: 'inv-1', name: 'Перфоратор Bosch', category: 'tool', quantity: 1, unit: 'шт.', lastCheck: '2024-05-01' },
],
writeOffHistory: [],
residents: [
{ id: 'r1', name: 'Марья Ивановна', role: 'chairman', apartment: '45', mood: 'angry', lastContact: 'Вчера' },
],
reports: [
{ id: 'rep1', month: 'Ноябрь 2023', status: 'ready' },
],
isDirty: false
});
export const MOCK_BUILDINGS: Building[] = [];
export const NAV_ITEMS = [
{ id: 'dashboard', label: 'Сводка', icon: LayoutDashboard },
{ id: 'objects', label: 'Участки', icon: Map },
{ id: 'requests', label: 'Заявки', icon: Wrench },
{ id: 'office', label: 'Офис', icon: Building2 },
{ id: 'pr', label: 'PR и NPS', icon: Megaphone },
{ id: 'finance', label: 'Финансы', icon: Banknote },
{ id: 'legal', label: 'Юр. отдел', icon: Scale },
{ id: 'development', label: 'Развитие', icon: Briefcase },
{ id: 'hr', label: 'Кадры', icon: UsersRound },
{ id: 'admin', label: 'Панель управления', icon: Settings },
];