Сид подразделений: полный список РВС — РЦУ РЧС → 6 ОУМЧС → 135 РОЧС/ГОЧС/ГРОЧС

Названия областей в краткой форме РВС (Минское ОУМЧС и т.д.). Старые
демо-записи с длинными названиями областей подлежат разовой чистке на стенде.
This commit is contained in:
2026-09-09 22:30:14 +03:00
parent cbdce9625b
commit 4d941b7310
+158 -27
View File
@@ -1,5 +1,6 @@
"""E2-сид: справочник подразделений МЧС (иерархия РЦУ РЧС → ОУМЧС → Г(Р)ОЧС).
"""E2-сид: справочник подразделений МЧС — полный список из РВС.
РЦУ РЧС → 6 ОУМЧС → Г(Р)ОЧС (РОЧС/ГОЧС/ГРОЧС, 135 шт. из podr.json РВС).
Идемпотентный: существующие названия не дублируются.
Запуск: docker exec vector-backend sh -c 'cd /app && python backend/seed_units.py'
"""
@@ -13,21 +14,155 @@ sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from backend.database import SessionLocal # noqa: E402
from backend.models import MchsUnit # noqa: E402
OBLASTS = [
('Минское областное управление МЧС', 'oblast'),
('Брестское областное управление МЧС', 'oblast'),
('Витебское областное управление МЧС', 'oblast'),
('Гомельское областное управление МЧС', 'oblast'),
('Гродненское областное управление МЧС', 'oblast'),
('Могилёвское областное управление МЧС', 'oblast'),
]
# Демо-набор Г(Р)ОЧС по одной области (Минская) — реальный справочник наполняется
# региональными админами через админку/скрипт при развёртывании.
MINSK_RAYONS = [
'Борисовский ГРОЧС', 'Жодинский ГРОЧС', 'Слуцкий ГРОЧС',
'Молодечненский ГРОЧС', 'Столбцовский ГРОЧС',
]
UNITS = {
'Брестское ОУМЧС': [
'Барановичский ГРОЧС',
'Березовский РОЧС',
'Брестский ГОЧС',
'Брестский ПАСО',
'Брестский РОЧС',
'Ганцевичский РОЧС',
'Дрогичинский РОЧС',
'Жабинковский РОЧС',
'Ивановский РОЧС',
'Ивацевичский РОЧС',
'Каменецкий РОЧС',
'Кобринский РОЧС',
'Лунинецкий РОЧС',
'Ляховичский РОЧС',
'Малоритский РОЧС',
'Пинский ГРОЧС',
'Пружанский РОЧС',
'Столинский РОЧС',
],
'Витебское ОУМЧС': [
'Бешенковичский РОЧС',
'Браславский РОЧС',
'Верхнедвинский РОЧС',
'Витебский ГОЧС',
'Витебский ПАСО',
'Витебский РОЧС',
'Глубокский РОЧС',
'Городокский РОЧС',
'Докшицкий РОЧС',
'Дубровенский РОЧС',
'Лепельский РОЧС',
'Лиозненский РОЧС',
'Миорский РОЧС',
'Новополоцкий ГОЧС',
'Новополоцкий ПАСО',
'Оршанский ГРОЧС',
'Полоцкий ГРОЧС',
'Поставский РОЧС',
'Россонский РОЧС',
'Сенненский РОЧС',
'Толочинский РОЧС',
'Ушачский РОЧС',
'Чашникский РОЧС',
'Шарковщинский РОЧС',
'Шумилинский РОЧС',
],
'Гомельское ОУМЧС': [
'Брагинский РОЧС',
'Буда-Кошелевский РОЧС',
'Ветковский РОЧС',
'Гомельский ГОЧС',
'Гомельский ПАСО',
'Гомельский РОЧС',
'Добрушский РОЧС',
'Ельский РОЧС',
'Житковичский РОЧС',
'Жлобинский РОЧС',
'Калинковичский РОЧС',
'Кормянский РОЧС',
'Лельчицкий РОЧС',
'Лоевский РОЧС',
'Мозырский ГРОЧС',
'Мозырский ПАСО',
'Наровлянский РОЧС',
'Октябрьский РОЧС',
'Петриковский РОЧС',
'Речицкий ПАСО',
'Речицкий РОЧС',
'Рогачевский РОЧС',
'Светлогорский РОЧС',
'Хойникский РОЧС',
'Чечерский РОЧС',
],
'Гродненское ОУМЧС': [
'Берестовицкий РОЧС',
'Волковысский РОЧС',
'Вороновский РОЧС',
'Гродненский ГОЧС',
'Гродненский ПАСО',
'Гродненский РОЧС',
'Дятловский РОЧС',
'Зельвенский РОЧС',
'Ивьевский РОЧС',
'Кореличский РОЧС',
'Лидский РОЧС',
'Мостовский РОЧС',
'Новогрудский РОЧС',
'Островецкий РОЧС',
'Ошмянский РОЧС',
'Свислочский РОЧС',
'Слонимский РОЧС',
'Сморгонский РОЧС',
'Щучинский РОЧС',
],
'Минское ОУМЧС': [
'Березинский РОЧС',
'Борисовский ГРОЧС',
'Вилейский РОЧС',
'Воложинский РОЧС',
'Дзержинский РОЧС',
'Жодинский ГОЧС',
'Клецкий РОЧС',
'Копыльский РОЧС',
'Крупский РОЧС',
'Логойский РОЧС',
'Любанский РОЧС',
'Минский ПАСО',
'Минский РОЧС',
'Молодечненский ГРОЧС',
'Мядельский РОЧС',
'Несвижский РОЧС',
'Пуховичский РОЧС',
'Слуцкий РОЧС',
'Смолевичский РОЧС',
'Солигорский ГРОЧС',
'Стародорожский РОЧС',
'Столбцовский РОЧС',
'Узденский РОЧС',
'Червенский РОЧС',
],
'Могилевское ОУМЧС': [
'Белыничский РОЧС',
'Бобруйский ГРОЧС',
'Бобруйский ПАСО',
'Быховский РОЧС',
'Глусский РОЧС',
'Горецкий РОЧС',
'Дрибинский РОЧС',
'Кировский РОЧС',
'Климовичский РОЧС',
'Кличевский РОЧС',
'Костюковичский РОЧС',
'Краснопольский РОЧС',
'Кричевский РОЧС',
'Круглянский РОЧС',
'Могилевский ГОЧС',
'Могилевский ПАСО',
'Могилевский РОЧС',
'Мстиславский РОЧС',
'Осиповичский РОЧС',
'Славгородский РОЧС',
'Хотимский РОЧС',
'Чаусский РОЧС',
'Чериковский РОЧС',
'Шкловский РОЧС',
],
}
def get_or_create(db, name, kind, parent_id=None):
@@ -45,17 +180,13 @@ def main():
try:
rcu = get_or_create(db, 'РЦУ РЧС', 'rcu')
created = 0
for name, kind in OBLASTS:
before = db.query(MchsUnit).filter_by(name=name).count()
oblast = get_or_create(db, name, kind, rcu.id)
if not before:
created += 1
minsk = db.query(MchsUnit).filter_by(name=OBLASTS[0][0]).first()
for name in MINSK_RAYONS:
before = db.query(MchsUnit).filter_by(name=name).count()
get_or_create(db, name, 'gor_rayon', minsk.id)
if not before:
created += 1
for oblast_name, grochs_list in UNITS.items():
oblast = get_or_create(db, oblast_name, 'oblast', rcu.id)
for g in grochs_list:
before = db.query(MchsUnit).filter_by(name=g).count()
get_or_create(db, g, 'gor_rayon', oblast.id)
if not before:
created += 1
db.commit()
total = db.query(MchsUnit).count()
print(f'сид подразделений: создано {created}, всего {total}')