import os import django import sys # Set up Django environment sys.path.append(os.path.dirname(os.path.abspath(__file__))) os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') django.setup() from expenses.models import Category def run_seed(): print("Clearing existing categories to ensure clean state...") Category.objects.all().delete() print("Seeding professional CBS categories...") # Define the structure cbs_structure = { "1000": { "name": "Recursos Humanos y Especialidades", "children": { "1100": "Personal Staff Core (Fijo / Sueldos Base)", "1201": "Electricidad de Potencia e Infraestructura", "1202": "Automatización y Control Industrial", "1203": "Domótica e Inmótica (BMS & Climatización)", "1204": "Electrónica y Sistemas de Hardware (PCB / Firmware)", "1205": "Redes, Conectividad e Informática (TI & Ciberseguridad)", "1206": "Tecnologías Inmersivas y Gemelos Digitales (VR/AR/LiDAR)", "1207": "Gestión Administrativa, Dir. de Proyectos (PMP/Agile)" } }, "2000": { "name": "Materiales e Insumos", "children": { "2100": "Componentes Electrónicos Prototipado", "2200": "Equipamiento Industrial de Campo", "2300": "Materiales Eléctricos y de Montaje", "2400": "Insumos de Oficina, Aseo, Cafetería y Papelería" } }, "3000": { "name": "Logística y Desplazamiento Terreno", "children": { "3101": "Combustibles / Bencina", "3102": "Arriendo Vehículos 4x4", "3103": "Pasajes de Bus Interurbano", "3104": "Pasajes de Micro / Urbano", "3105": "Pasajes de Colectivos / Taxis", "3106": "Uber / Cabify / Didi", "3107": "Peajes & Tag Nacionales", "3108": "Reembolso Kilometraje Particular", "3200": "Viáticos Alimentación y Alojamiento Terreno" } }, "4000": { "name": "Software y Herramientas Digitales", "children": { "4100": "Licencias de Ingeniería & Diseño (Altium/Unity/Unreal)", "4200": "Infraestructura y Servidores Cloud (AWS/Azure)", "4300": "Herramientas de Gestión de Proyectos / Software General" } } } # Create Parents and Children for p_code, p_data in cbs_structure.items(): parent_cat, _ = Category.objects.get_or_create( code=p_code, defaults={'name': p_data['name'], 'description': 'Partida Principal (Macro-categoría)'} ) print(f"Created Parent: {parent_cat.code} - {parent_cat.name}") for c_code, c_name in p_data['children'].items(): child_cat, _ = Category.objects.get_or_create( code=c_code, defaults={'name': c_name, 'parent': parent_cat} ) print(f" Created Child: {child_cat.code} - {child_cat.name}") print("✅ CBS Seeding completed successfully.") if __name__ == "__main__": run_seed()