369 lines
31 KiB
PHP
369 lines
31 KiB
PHP
<?php
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use Illuminate\Database\Seeder;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Carbon\Carbon;
|
|
|
|
/**
|
|
* Seeder de Categorias para vida em Madrid
|
|
* Categorias comuns do dia a dia para gestão financeira pessoal
|
|
* Usuario: marco@cnxifly.com (id=2)
|
|
*/
|
|
class MadridCategoriesSeeder extends Seeder
|
|
{
|
|
private $userId = 2; // marco@cnxifly.com
|
|
private $now;
|
|
private $categoryId = 0;
|
|
|
|
public function run(): void
|
|
{
|
|
$this->now = Carbon::now();
|
|
|
|
// Limpar categorias existentes do usuário
|
|
DB::table('category_keywords')
|
|
->whereIn('category_id', function($query) {
|
|
$query->select('id')->from('categories')->where('user_id', $this->userId);
|
|
})->delete();
|
|
DB::table('categories')->where('user_id', $this->userId)->delete();
|
|
|
|
// =====================================================================
|
|
// CATEGORIAS DE DESPESA (expense)
|
|
// =====================================================================
|
|
|
|
// 🏠 MORADIA
|
|
$moradia = $this->createCategory('Moradia', 'expense', '#8B5CF6', 'bi-house-door-fill', 'Gastos relacionados à habitação');
|
|
$this->createSubcategories($moradia, [
|
|
['name' => 'Aluguel', 'icon' => 'bi-key-fill', 'keywords' => ['alquiler', 'rent', 'arrendamiento', 'mensualidad piso']],
|
|
['name' => 'Hipoteca', 'icon' => 'bi-bank2', 'keywords' => ['hipoteca', 'mortgage', 'cuota hipotecaria']],
|
|
['name' => 'Condomínio/Comunidad', 'icon' => 'bi-buildings-fill', 'keywords' => ['comunidad', 'comunidade', 'gastos comunes', 'cuota comunidad']],
|
|
['name' => 'Água', 'icon' => 'bi-droplet-fill', 'keywords' => ['agua', 'canal isabel', 'water']],
|
|
['name' => 'Eletricidade', 'icon' => 'bi-lightning-charge-fill', 'keywords' => ['luz', 'electricidad', 'iberdrola', 'endesa', 'naturgy', 'repsol luz']],
|
|
['name' => 'Gás', 'icon' => 'bi-fire', 'keywords' => ['gas natural', 'gas', 'naturgy gas', 'madrileña de gas']],
|
|
['name' => 'Internet/Telefone', 'icon' => 'bi-wifi', 'keywords' => ['movistar', 'vodafone', 'orange', 'telefonica', 'masmovil', 'yoigo', 'pepephone', 'o2', 'digi', 'finetwork', 'internet', 'fibra']],
|
|
['name' => 'Seguro Residencial', 'icon' => 'bi-shield-fill-check', 'keywords' => ['seguro hogar', 'mapfre hogar', 'axa hogar', 'seguro casa', 'seguro vivienda']],
|
|
['name' => 'Manutenção/Reparos', 'icon' => 'bi-tools', 'keywords' => ['reparacion', 'mantenimiento', 'fontanero', 'electricista', 'cerrajero', 'pintor']],
|
|
['name' => 'Móveis', 'icon' => 'bi-house-gear-fill', 'keywords' => ['ikea', 'muebles', 'sofa', 'cama', 'armario', 'leroy merlin muebles']],
|
|
['name' => 'Decoração', 'icon' => 'bi-paint-bucket', 'keywords' => ['decoracion', 'zara home', 'casa', 'maisons du monde', 'cortinas', 'alfombra']],
|
|
['name' => 'Limpeza Casa', 'icon' => 'bi-trash2-fill', 'keywords' => ['limpieza', 'servicio domestico', 'empleada hogar', 'asistenta']],
|
|
]);
|
|
|
|
// 🍽️ ALIMENTAÇÃO
|
|
$alimentacao = $this->createCategory('Alimentação', 'expense', '#22C55E', 'bi-cart4', 'Comida e bebidas');
|
|
$this->createSubcategories($alimentacao, [
|
|
['name' => 'Supermercado', 'icon' => 'bi-basket3-fill', 'keywords' => ['mercadona', 'carrefour', 'lidl', 'aldi', 'dia', 'alcampo', 'hipercor', 'eroski', 'ahoramas', 'supercor', 'bon area', 'simply', 'el corte ingles alimentacion', 'supermercado']],
|
|
['name' => 'Padaria', 'icon' => 'bi-cake2-fill', 'keywords' => ['panaderia', 'pan', 'bolleria', 'granier', 'panaria']],
|
|
['name' => 'Açougue/Carnicería', 'icon' => 'bi-egg-fried', 'keywords' => ['carniceria', 'carne', 'pollo', 'ternera']],
|
|
['name' => 'Peixaria', 'icon' => 'bi-water', 'keywords' => ['pescaderia', 'pescado', 'marisco', 'gambas']],
|
|
['name' => 'Frutas/Verduras', 'icon' => 'bi-basket-fill', 'keywords' => ['fruteria', 'verduleria', 'frutas', 'verduras', 'mercado']],
|
|
['name' => 'Bebidas', 'icon' => 'bi-cup-straw', 'keywords' => ['bebidas', 'agua mineral', 'refrescos', 'zumos', 'cerveza casa']],
|
|
['name' => 'Delivery/Comida a Domicilio', 'icon' => 'bi-box-seam-fill', 'keywords' => ['glovo', 'uber eats', 'just eat', 'deliveroo', 'telepizza domicilio']],
|
|
['name' => 'Café/Snacks', 'icon' => 'bi-cup-hot-fill', 'keywords' => ['cafe', 'starbucks', 'costa coffee', 'cafeteria', 'desayuno fuera', 'merienda']],
|
|
]);
|
|
|
|
// 🍴 RESTAURANTES E BARES
|
|
$restaurantes = $this->createCategory('Restaurantes e Bares', 'expense', '#F97316', 'bi-cup-straw', 'Comer e beber fora de casa');
|
|
$this->createSubcategories($restaurantes, [
|
|
['name' => 'Restaurante', 'icon' => 'bi-shop-window', 'keywords' => ['restaurante', 'restaurant', 'comida fuera', 'cena fuera', 'almuerzo fuera']],
|
|
['name' => 'Fast Food', 'icon' => 'bi-bag-fill', 'keywords' => ['mcdonalds', 'burger king', 'kfc', 'five guys', 'goiko', 'telepizza', 'dominos', 'papa johns', 'taco bell', 'wendys', 'subway', 'pans']],
|
|
['name' => 'Bar/Cafetería', 'icon' => 'bi-cup-hot', 'keywords' => ['bar', 'cafeteria', 'cerveza bar', 'copa', 'tapas']],
|
|
['name' => 'Discoteca/Club', 'icon' => 'bi-music-note-beamed', 'keywords' => ['discoteca', 'club', 'fabrik', 'kapital', 'opium', 'teatro barcelo', 'joy eslava', 'shoko']],
|
|
['name' => 'Tapas', 'icon' => 'bi-egg-fill', 'keywords' => ['tapas', 'raciones', 'pinchos', 'canas']],
|
|
['name' => 'Comida Asiática', 'icon' => 'bi-yin-yang', 'keywords' => ['chino', 'japones', 'sushi', 'wok', 'thai', 'vietnamita', 'udon', 'ramen']],
|
|
['name' => 'Comida Italiana', 'icon' => 'bi-circle', 'keywords' => ['italiano', 'pizza', 'pasta', 'risotto', 'la tagliatella', 'pizzeria']],
|
|
['name' => 'Comida Mexicana', 'icon' => 'bi-fire', 'keywords' => ['mexicano', 'tacos', 'burritos', 'enchiladas', 'taqueria']],
|
|
['name' => 'Kebab/Döner', 'icon' => 'bi-globe2', 'keywords' => ['kebab', 'doner', 'turco', 'shawarma', 'falafel']],
|
|
]);
|
|
|
|
// 🚗 TRANSPORTE
|
|
$transporte = $this->createCategory('Transporte', 'expense', '#3B82F6', 'bi-car-front', 'Deslocamentos e veículos');
|
|
$this->createSubcategories($transporte, [
|
|
['name' => 'Metro/Bus', 'icon' => 'bi-train-lightrail-front-fill', 'keywords' => ['metro madrid', 'emt', 'abono transporte', 'tarjeta transporte', 'cercanias', 'renfe cercanias', 'metro']],
|
|
['name' => 'Taxi/VTC', 'icon' => 'bi-taxi-front-fill', 'keywords' => ['taxi', 'cabify', 'uber', 'bolt', 'free now', 'vtc']],
|
|
['name' => 'Combustível', 'icon' => 'bi-fuel-pump-fill', 'keywords' => ['gasolina', 'diesel', 'gasoleo', 'repsol', 'cepsa', 'bp', 'shell', 'galp', 'combustible']],
|
|
['name' => 'Estacionamento', 'icon' => 'bi-p-circle-fill', 'keywords' => ['parking', 'aparcamiento', 'ser', 'zona azul', 'zona verde', 'garaje']],
|
|
['name' => 'Pedágios', 'icon' => 'bi-sign-stop-fill', 'keywords' => ['peaje', 'autopista', 'radial', 'r2', 'r3', 'r4', 'r5']],
|
|
['name' => 'Seguro Carro', 'icon' => 'bi-shield-fill-check', 'keywords' => ['seguro coche', 'seguro auto', 'mapfre auto', 'linea directa', 'mutua madrilena', 'axa coche', 'seguros coche']],
|
|
['name' => 'Manutenção Carro', 'icon' => 'bi-wrench-adjustable', 'keywords' => ['taller', 'mecanico', 'itv', 'revision', 'aceite', 'neumaticos', 'norauto', 'midas', 'feu vert', 'aurgi']],
|
|
['name' => 'Multas', 'icon' => 'bi-exclamation-triangle-fill', 'keywords' => ['multa', 'sancion', 'dgt', 'trafico']],
|
|
['name' => 'Aluguel Carro', 'icon' => 'bi-key-fill', 'keywords' => ['alquiler coche', 'rent a car', 'enterprise', 'hertz', 'avis', 'europcar', 'sixt']],
|
|
['name' => 'BiciMAD/Patinetes', 'icon' => 'bi-scooter', 'keywords' => ['bicimad', 'lime', 'voi', 'tier', 'dott', 'bird', 'patinete electrico']],
|
|
['name' => 'Carsharing', 'icon' => 'bi-ev-front-fill', 'keywords' => ['share now', 'zity', 'wible', 'emov', 'carsharing']],
|
|
['name' => 'AVE/Tren', 'icon' => 'bi-train-front-fill', 'keywords' => ['ave', 'renfe', 'tren', 'alvia', 'talgo', 'avlo', 'ouigo', 'iryo']],
|
|
['name' => 'Avião', 'icon' => 'bi-airplane-engines-fill', 'keywords' => ['vueling', 'iberia', 'ryanair', 'air europa', 'easyjet', 'avion', 'vuelo']],
|
|
['name' => 'BlaBlaCar', 'icon' => 'bi-people-fill', 'keywords' => ['blablacar', 'compartir coche', 'coche compartido']],
|
|
]);
|
|
|
|
// 🛒 COMPRAS
|
|
$compras = $this->createCategory('Compras', 'expense', '#EC4899', 'bi-bag', 'Compras diversas');
|
|
$this->createSubcategories($compras, [
|
|
['name' => 'Roupas', 'keywords' => ['zara', 'mango', 'h&m', 'primark', 'pull and bear', 'bershka', 'stradivarius', 'massimo dutti', 'uniqlo', 'c&a', 'springfield', 'cortefiel', 'ropa', 'camiseta', 'pantalon', 'vestido']],
|
|
['name' => 'Calçados', 'keywords' => ['zapatos', 'zapatillas', 'foot locker', 'jd sports', 'snipes', 'ulanka', 'marypaz', 'merkal', 'nike', 'adidas store']],
|
|
['name' => 'Acessórios', 'keywords' => ['accesorios', 'bolso', 'cinturon', 'gafas sol', 'reloj', 'joyeria', 'bijuteria']],
|
|
['name' => 'Eletrônicos', 'keywords' => ['mediamarkt', 'fnac', 'pc componentes', 'amazon', 'apple store', 'samsung', 'worten', 'movil', 'ordenador', 'tablet', 'electronica']],
|
|
['name' => 'Livros/Papelaria', 'keywords' => ['casa del libro', 'fnac libros', 'papeleria', 'libro', 'cuaderno', 'la central', 'tipos infames']],
|
|
['name' => 'Presentes', 'keywords' => ['regalo', 'gift', 'presente', 'cumpleanos', 'navidad regalo']],
|
|
['name' => 'Bazar/Casa', 'keywords' => ['tiger', 'ale hop', 'bazar', 'todo a 100', 'chino bazar', 'action']],
|
|
['name' => 'Bricolaje/Ferragens', 'keywords' => ['leroy merlin', 'bricomart', 'bricodepot', 'aki', 'ferreteria', 'herramientas']],
|
|
['name' => 'Amazon/Online', 'keywords' => ['amazon', 'aliexpress', 'shein', 'temu', 'zalando', 'asos', 'ebay', 'wallapop']],
|
|
]);
|
|
|
|
// 💊 SAÚDE
|
|
$saude = $this->createCategory('Saúde', 'expense', '#EF4444', 'bi-heart-pulse', 'Cuidados médicos e saúde');
|
|
$this->createSubcategories($saude, [
|
|
['name' => 'Farmácia', 'icon' => 'bi-capsule-pill', 'keywords' => ['farmacia', 'medicamento', 'parafarmacia', 'promofarma', 'dosfarma', 'medicina']],
|
|
['name' => 'Médico/Consulta', 'icon' => 'bi-hospital-fill', 'keywords' => ['medico', 'consulta', 'especialista', 'doctor', 'clinica']],
|
|
['name' => 'Seguro Saúde', 'icon' => 'bi-shield-heart-fill', 'keywords' => ['sanitas', 'adeslas', 'asisa', 'dkv', 'cigna', 'caser salud', 'seguro medico']],
|
|
['name' => 'Dentista', 'icon' => 'bi-emoji-smile-fill', 'keywords' => ['dentista', 'dental', 'vitaldent', 'sanitas dental', 'ortodoncista', 'implante dental']],
|
|
['name' => 'Ótica', 'icon' => 'bi-eyeglasses', 'keywords' => ['optica', 'gafas', 'lentillas', 'general optica', 'multilopticas', 'vision lab', 'oculista']],
|
|
['name' => 'Análises/Exames', 'icon' => 'bi-clipboard2-pulse-fill', 'keywords' => ['analisis', 'laboratorio', 'radiografia', 'ecografia', 'resonancia', 'tac']],
|
|
['name' => 'Psicólogo/Terapia', 'icon' => 'bi-chat-heart-fill', 'keywords' => ['psicologo', 'psiquiatra', 'terapia', 'psicoterapia', 'salud mental']],
|
|
['name' => 'Fisioterapia', 'icon' => 'bi-bandaid-fill', 'keywords' => ['fisio', 'fisioterapia', 'masaje terapeutico', 'osteopata', 'quiropractico']],
|
|
['name' => 'Hospital/Urgências', 'icon' => 'bi-hospital', 'keywords' => ['hospital', 'urgencias', 'clinica universitaria', 'ruber', 'quironsalud', 'hm hospitales']],
|
|
]);
|
|
|
|
// 💇 BELEZA E CUIDADO PESSOAL
|
|
$beleza = $this->createCategory('Beleza e Cuidado Pessoal', 'expense', '#D946EF', 'bi-scissors', 'Estética e higiene pessoal');
|
|
$this->createSubcategories($beleza, [
|
|
['name' => 'Cabeleireiro/Peluquería', 'icon' => 'bi-scissors', 'keywords' => ['peluqueria', 'corte pelo', 'tinte', 'barberia', 'cabeleireiro']],
|
|
['name' => 'Manicure/Pedicure', 'icon' => 'bi-brush-fill', 'keywords' => ['manicura', 'pedicura', 'unas', 'nail art', 'estetica unas']],
|
|
['name' => 'Cosméticos', 'icon' => 'bi-bag-heart-fill', 'keywords' => ['sephora', 'primor', 'kiko', 'maquillaje', 'cosmeticos', 'druni', 'perfumeria']],
|
|
['name' => 'Perfumaria', 'icon' => 'bi-droplet-half', 'keywords' => ['perfume', 'colonia', 'douglas', 'juteco', 'fragancia']],
|
|
['name' => 'Spa/Massagem', 'icon' => 'bi-emoji-relaxed-fill', 'keywords' => ['spa', 'masaje', 'hammam', 'wellness', 'balneario', 'termas']],
|
|
['name' => 'Depilação', 'icon' => 'bi-stars', 'keywords' => ['depilacion', 'laser', 'cera', 'centros ideal']],
|
|
['name' => 'Higiene Pessoal', 'icon' => 'bi-shop', 'keywords' => ['drogueria', 'gel', 'champu', 'desodorante', 'higiene']],
|
|
]);
|
|
|
|
// 🎓 EDUCAÇÃO
|
|
$educacao = $this->createCategory('Educação', 'expense', '#0EA5E9', 'bi-mortarboard', 'Formação e estudos');
|
|
$this->createSubcategories($educacao, [
|
|
['name' => 'Mensalidade Escolar', 'icon' => 'bi-building-fill', 'keywords' => ['colegio', 'escuela', 'matricula', 'mensualidad colegio']],
|
|
['name' => 'Universidade', 'icon' => 'bi-mortarboard-fill', 'keywords' => ['universidad', 'facultad', 'master', 'grado', 'uam', 'ucm', 'uc3m', 'upcomillas', 'upm', 'urjc']],
|
|
['name' => 'Cursos/Formação', 'icon' => 'bi-laptop', 'keywords' => ['curso', 'formacion', 'udemy', 'coursera', 'domestika', 'platzi', 'academia']],
|
|
['name' => 'Idiomas', 'icon' => 'bi-translate', 'keywords' => ['idiomas', 'ingles', 'british council', 'oxford', 'vaughan', 'academia idiomas', 'speaking']],
|
|
['name' => 'Material Escolar', 'icon' => 'bi-pencil-fill', 'keywords' => ['material escolar', 'libros texto', 'mochila', 'cuadernos']],
|
|
['name' => 'Tutoria/Aulas Particulares', 'icon' => 'bi-person-video3', 'keywords' => ['profesor particular', 'clases particulares', 'tutor', 'academia']],
|
|
]);
|
|
|
|
// 🎮 ENTRETENIMENTO
|
|
$entretenimento = $this->createCategory('Entretenimento', 'expense', '#A855F7', 'bi-controller', 'Lazer e diversão');
|
|
$this->createSubcategories($entretenimento, [
|
|
['name' => 'Streaming', 'icon' => 'bi-tv-fill', 'keywords' => ['netflix', 'hbo', 'disney+', 'amazon prime video', 'movistar+', 'dazn', 'filmin', 'atresplayer', 'apple tv', 'paramount+']],
|
|
['name' => 'Música/Spotify', 'icon' => 'bi-music-note-beamed', 'keywords' => ['spotify', 'apple music', 'youtube music', 'deezer', 'tidal']],
|
|
['name' => 'Cinema', 'icon' => 'bi-film', 'keywords' => ['cine', 'yelmo', 'cinesa', 'mk2', 'renoir', 'ideal', 'palacio de la prensa', 'callao', 'verdi']],
|
|
['name' => 'Teatro/Shows', 'icon' => 'bi-mask', 'keywords' => ['teatro', 'musical', 'el rey leon', 'espectaculo', 'gran via teatro', 'lope de vega']],
|
|
['name' => 'Museu/Exposições', 'icon' => 'bi-palette-fill', 'keywords' => ['museo', 'exposicion', 'prado', 'reina sofia', 'thyssen', 'caixaforum', 'matadero']],
|
|
['name' => 'Concertos', 'icon' => 'bi-megaphone-fill', 'keywords' => ['concierto', 'wizink center', 'la riviera', 'sala but', 'movistar arena', 'mad cool', 'festival']],
|
|
['name' => 'Jogos/Gaming', 'icon' => 'bi-controller', 'keywords' => ['playstation', 'xbox', 'nintendo', 'steam', 'videojuegos', 'game', 'ps5', 'ps plus']],
|
|
['name' => 'Parques/Zoo', 'icon' => 'bi-emoji-smile', 'keywords' => ['zoo', 'faunia', 'parque warner', 'parque atracciones', 'safari', 'aquopolis']],
|
|
['name' => 'Eventos Esportivos', 'icon' => 'bi-trophy-fill', 'keywords' => ['futbol', 'real madrid', 'atletico', 'bernabeu', 'metropolitano', 'baloncesto', 'padel', 'tenis']],
|
|
]);
|
|
|
|
// 🏋️ FITNESS E ESPORTES
|
|
$fitness = $this->createCategory('Fitness e Esportes', 'expense', '#14B8A6', 'bi-bicycle', 'Atividades físicas');
|
|
$this->createSubcategories($fitness, [
|
|
['name' => 'Academia/Gimnasio', 'icon' => 'bi-buildings-fill', 'keywords' => ['gimnasio', 'basic fit', 'mcfit', 'fitness park', 'gym', 'viva gym', 'altafit', 'dir', 'o2 centro wellness']],
|
|
['name' => 'Yoga/Pilates', 'icon' => 'bi-heart-fill', 'keywords' => ['yoga', 'pilates', 'bikram', 'hot yoga', 'urban sports club']],
|
|
['name' => 'Piscina', 'icon' => 'bi-droplet-fill', 'keywords' => ['piscina', 'natacion', 'polideportivo']],
|
|
['name' => 'Equipamento Esportivo', 'icon' => 'bi-handbag', 'keywords' => ['decathlon', 'deportes', 'sprinter', 'sport zone', 'equipamiento deportivo']],
|
|
['name' => 'Futebol/Padel', 'icon' => 'bi-trophy', 'keywords' => ['alquiler pista', 'padel', 'futbol 5', 'playtomic', 'reserva pista']],
|
|
['name' => 'Corrida/Running', 'icon' => 'bi-lightning-fill', 'keywords' => ['running', 'carrera', 'maraton', 'zapatillas running', 'garmin']],
|
|
['name' => 'Bicicleta', 'icon' => 'bi-bicycle', 'keywords' => ['bicicleta', 'ciclismo', 'decathlon bici', 'taller bici']],
|
|
]);
|
|
|
|
// ✈️ VIAGENS
|
|
$viagens = $this->createCategory('Viagens', 'expense', '#06B6D4', 'bi-airplane', 'Turismo e férias');
|
|
$this->createSubcategories($viagens, [
|
|
['name' => 'Hospedagem/Hotel', 'icon' => 'bi-building', 'keywords' => ['hotel', 'booking', 'airbnb', 'hostal', 'apartamento turistico', 'nh hoteles', 'melia', 'tryp']],
|
|
['name' => 'Passagens', 'icon' => 'bi-airplane-fill', 'keywords' => ['vuelo', 'billete avion', 'skyscanner', 'kayak', 'edreams', 'vueling', 'iberia']],
|
|
['name' => 'Passeios/Tours', 'icon' => 'bi-signpost-fill', 'keywords' => ['excursion', 'tour', 'guia turistico', 'civitatis', 'getyourguide', 'viator']],
|
|
['name' => 'Seguro Viagem', 'icon' => 'bi-shield-check', 'keywords' => ['seguro viaje', 'iati', 'chapka', 'mondo', 'seguro cancelacion']],
|
|
['name' => 'Souvenirs', 'icon' => 'bi-gift', 'keywords' => ['souvenir', 'recuerdo', 'regalo viaje']],
|
|
['name' => 'Alimentação Viagem', 'icon' => 'bi-cup-straw', 'keywords' => ['comida viaje', 'restaurante viaje', 'gastronomia local']],
|
|
]);
|
|
|
|
// 🐕 PETS/MASCOTAS
|
|
$pets = $this->createCategory('Pets/Mascotas', 'expense', '#F59E0B', 'bi-github', 'Animais de estimação');
|
|
$this->createSubcategories($pets, [
|
|
['name' => 'Ração/Comida', 'icon' => 'bi-cup-fill', 'keywords' => ['pienso', 'comida mascota', 'comida perro', 'comida gato', 'tiendanimal', 'kiwoko', 'zooplus']],
|
|
['name' => 'Veterinário', 'icon' => 'bi-heart-pulse-fill', 'keywords' => ['veterinario', 'clinica veterinaria', 'vacuna mascota', 'desparasitar']],
|
|
['name' => 'Acessórios Pet', 'icon' => 'bi-bag', 'keywords' => ['collar', 'correa', 'cama mascota', 'transportin', 'juguete mascota']],
|
|
['name' => 'Peluquería Canina', 'icon' => 'bi-scissors', 'keywords' => ['peluqueria canina', 'grooming', 'bano perro']],
|
|
['name' => 'Seguro Mascota', 'icon' => 'bi-shield-fill-plus', 'keywords' => ['seguro mascota', 'seguro perro', 'seguro gato']],
|
|
]);
|
|
|
|
// 🏦 FINANCEIRO
|
|
$financeiro = $this->createCategory('Financeiro', 'expense', '#64748B', 'bi-bank', 'Serviços bancários e financeiros');
|
|
$this->createSubcategories($financeiro, [
|
|
['name' => 'Taxas Bancárias', 'icon' => 'bi-bank2', 'keywords' => ['comision', 'mantenimiento cuenta', 'comision tarjeta', 'gastos bancarios']],
|
|
['name' => 'Juros/Intereses', 'icon' => 'bi-percent', 'keywords' => ['intereses', 'interes prestamo', 'interes credito']],
|
|
['name' => 'Transferências', 'icon' => 'bi-arrow-left-right', 'keywords' => ['transferencia', 'bizum', 'wise', 'remesa']],
|
|
['name' => 'Seguros Diversos', 'icon' => 'bi-shield-fill', 'keywords' => ['seguro vida', 'seguro accidentes', 'plan pension']],
|
|
['name' => 'Assessoria/Contabilidade', 'icon' => 'bi-calculator-fill', 'keywords' => ['gestor', 'asesoria', 'contable', 'declaracion renta', 'autonomo gestor']],
|
|
['name' => 'Impostos', 'icon' => 'bi-receipt', 'keywords' => ['hacienda', 'irpf', 'iva', 'ibi', 'impuesto', 'aeat', 'agencia tributaria']],
|
|
]);
|
|
|
|
// 👶 FAMÍLIA E FILHOS
|
|
$familia = $this->createCategory('Família e Filhos', 'expense', '#F472B6', 'bi-people', 'Gastos familiares');
|
|
$this->createSubcategories($familia, [
|
|
['name' => 'Creche/Guardería', 'icon' => 'bi-house-heart-fill', 'keywords' => ['guarderia', 'escuela infantil', 'ludoteca', 'canguro']],
|
|
['name' => 'Atividades Extracurriculares', 'icon' => 'bi-star-fill', 'keywords' => ['extraescolar', 'actividad ninos', 'futbol ninos', 'natacion ninos', 'musica ninos']],
|
|
['name' => 'Brinquedos', 'icon' => 'bi-balloon-fill', 'keywords' => ['juguete', 'toys r us', 'imaginarium', 'lego', 'playmobil', 'el corte ingles juguetes']],
|
|
['name' => 'Fraldas/Pañales', 'icon' => 'bi-heart', 'keywords' => ['panales', 'dodot', 'huggies', 'bebe']],
|
|
['name' => 'Mesada/Semanada', 'icon' => 'bi-cash-coin', 'keywords' => ['paga', 'mesada', 'dinero hijos']],
|
|
]);
|
|
|
|
// 📱 ASSINATURAS E SERVIÇOS
|
|
$assinaturas = $this->createCategory('Assinaturas e Serviços', 'expense', '#8B5CF6', 'bi-credit-card-2-front', 'Pagamentos recorrentes');
|
|
$this->createSubcategories($assinaturas, [
|
|
['name' => 'Cloud Storage', 'icon' => 'bi-cloud-fill', 'keywords' => ['icloud', 'google one', 'dropbox', 'onedrive', 'almacenamiento nube']],
|
|
['name' => 'Apps/Software', 'icon' => 'bi-phone-fill', 'keywords' => ['app store', 'google play', 'suscripcion app', 'adobe', 'microsoft 365', 'notion', 'evernote']],
|
|
['name' => 'Jornais/Revistas', 'icon' => 'bi-newspaper', 'keywords' => ['el pais', 'el mundo', 'abc', 'la razon', 'periodico', 'revista', 'prensa digital']],
|
|
['name' => 'Domínios/Hosting', 'icon' => 'bi-globe', 'keywords' => ['dominio', 'hosting', 'godaddy', 'namecheap', 'servidor web']],
|
|
['name' => 'VPN/Segurança', 'icon' => 'bi-shield-lock-fill', 'keywords' => ['vpn', 'nordvpn', 'expressvpn', 'antivirus', 'norton', 'mcafee']],
|
|
['name' => 'Coworking', 'icon' => 'bi-briefcase-fill', 'keywords' => ['coworking', 'wework', 'spaces', 'oficina compartida']],
|
|
]);
|
|
|
|
// 🎁 DOAÇÕES E CARIDADE
|
|
$doacoes = $this->createCategory('Doações', 'expense', '#10B981', 'bi-gift', 'Caridade e contribuições');
|
|
$this->createSubcategories($doacoes, [
|
|
['name' => 'ONGs', 'icon' => 'bi-heart-fill', 'keywords' => ['ong', 'unicef', 'cruz roja', 'medicos sin fronteras', 'intermon oxfam', 'caritas', 'greenpeace']],
|
|
['name' => 'Crowdfunding', 'icon' => 'bi-people-fill', 'keywords' => ['gofundme', 'kickstarter', 'patreon', 'donacion online']],
|
|
['name' => 'Igreja/Religião', 'icon' => 'bi-heart', 'keywords' => ['iglesia', 'parroquia', 'donacion religiosa', 'diezmo']],
|
|
]);
|
|
|
|
// 📦 OUTROS GASTOS
|
|
$outros = $this->createCategory('Outros Gastos', 'expense', '#94A3B8', 'bi-three-dots', 'Gastos diversos');
|
|
$this->createSubcategories($outros, [
|
|
['name' => 'Correios/Envíos', 'icon' => 'bi-box-seam', 'keywords' => ['correos', 'seur', 'mrw', 'dhl', 'ups', 'fedex', 'nacex', 'gls', 'envio paquete']],
|
|
['name' => 'Loteria/Apostas', 'icon' => 'bi-dice-5-fill', 'keywords' => ['loteria', 'primitiva', 'euromillon', 'once', 'quiniela', 'apuestas']],
|
|
['name' => 'Tabaco', 'icon' => 'bi-cloud-haze2-fill', 'keywords' => ['tabaco', 'estanco', 'cigarrillos']],
|
|
['name' => 'Fotocópias/Impressões', 'icon' => 'bi-printer-fill', 'keywords' => ['copisteria', 'fotocopia', 'impresion', 'encuadernacion']],
|
|
['name' => 'Lavanderia', 'icon' => 'bi-tsunami', 'keywords' => ['lavanderia', 'tintoreria', 'limpieza ropa']],
|
|
['name' => 'Imprevistos', 'icon' => 'bi-exclamation-circle-fill', 'keywords' => ['imprevisto', 'emergencia', 'gasto inesperado']],
|
|
]);
|
|
|
|
// =====================================================================
|
|
// CATEGORIAS DE RENDA (income)
|
|
// =====================================================================
|
|
|
|
// 💰 SALÁRIO E TRABALHO
|
|
$salario = $this->createCategory('Salário e Trabalho', 'income', '#10B981', 'bi-briefcase', 'Rendimentos de trabalho');
|
|
$this->createSubcategories($salario, [
|
|
['name' => 'Salário Líquido', 'icon' => 'bi-cash-stack', 'keywords' => ['nomina', 'salario', 'sueldo', 'pago mensual']],
|
|
['name' => 'Horas Extras', 'icon' => 'bi-clock-fill', 'keywords' => ['horas extra', 'overtime', 'complemento']],
|
|
['name' => 'Bônus/Bonus', 'icon' => 'bi-trophy-fill', 'keywords' => ['bonus', 'paga extra', 'incentivo', 'variable']],
|
|
['name' => 'Comissões', 'icon' => 'bi-percent', 'keywords' => ['comision ventas', 'comisiones', 'incentivo comercial']],
|
|
['name' => 'Dietas/Ajudas', 'icon' => 'bi-receipt', 'keywords' => ['dietas', 'kilometraje', 'gastos viaje trabajo']],
|
|
['name' => 'Freelance', 'icon' => 'bi-laptop', 'keywords' => ['freelance', 'autonomo ingreso', 'factura cliente', 'proyecto']],
|
|
]);
|
|
|
|
// 📈 INVESTIMENTOS
|
|
$investimentos = $this->createCategory('Investimentos', 'income', '#3B82F6', 'bi-graph-up-arrow', 'Rendimentos de investimentos');
|
|
$this->createSubcategories($investimentos, [
|
|
['name' => 'Dividendos', 'icon' => 'bi-currency-dollar', 'keywords' => ['dividendo', 'reparto beneficios', 'dividends']],
|
|
['name' => 'Juros Poupança', 'icon' => 'bi-piggy-bank-fill', 'keywords' => ['intereses cuenta', 'intereses deposito', 'rentabilidad']],
|
|
['name' => 'Venda de Ações', 'icon' => 'bi-graph-up', 'keywords' => ['venta acciones', 'plusvalia', 'ganancia bolsa', 'stock sale']],
|
|
['name' => 'Cripto', 'icon' => 'bi-currency-bitcoin', 'keywords' => ['bitcoin', 'ethereum', 'cripto', 'binance', 'coinbase', 'crypto']],
|
|
['name' => 'Fundos', 'icon' => 'bi-bar-chart-fill', 'keywords' => ['fondo inversion', 'etf', 'indexado', 'myinvestor', 'indexa capital']],
|
|
]);
|
|
|
|
// 🏠 RENDAS E ALUGUÉIS
|
|
$rendas = $this->createCategory('Rendas e Aluguéis', 'income', '#F59E0B', 'bi-house-door', 'Rendimentos de propriedades');
|
|
$this->createSubcategories($rendas, [
|
|
['name' => 'Aluguel Recebido', 'icon' => 'bi-house-check-fill', 'keywords' => ['alquiler cobrado', 'renta inmueble', 'inquilino pago']],
|
|
['name' => 'Aluguel Airbnb', 'icon' => 'bi-house-heart-fill', 'keywords' => ['airbnb ingreso', 'alquiler turistico', 'arrendamiento corto']],
|
|
['name' => 'Garagem/Trastero', 'icon' => 'bi-p-square-fill', 'keywords' => ['alquiler garaje', 'alquiler trastero', 'parking alquilado']],
|
|
]);
|
|
|
|
// 🎁 OUTROS RENDIMENTOS
|
|
$outrosRendimentos = $this->createCategory('Outros Rendimentos', 'income', '#8B5CF6', 'bi-cash-stack', 'Outras fontes de renda');
|
|
$this->createSubcategories($outrosRendimentos, [
|
|
['name' => 'Reembolsos', 'icon' => 'bi-arrow-return-left', 'keywords' => ['reembolso', 'devolucion', 'refund', 'cashback']],
|
|
['name' => 'Venda de Objetos', 'icon' => 'bi-bag-check-fill', 'keywords' => ['wallapop', 'vinted', 'venta segunda mano', 'ebay venta']],
|
|
['name' => 'Presentes Recebidos', 'icon' => 'bi-gift-fill', 'keywords' => ['regalo recibido', 'herencia', 'donacion recibida']],
|
|
['name' => 'Ajudas/Subsídios', 'icon' => 'bi-building', 'keywords' => ['ayuda gobierno', 'subsidio', 'beca', 'prestacion', 'erte', 'sepe']],
|
|
['name' => 'Loteria/Prêmios', 'icon' => 'bi-trophy', 'keywords' => ['premio loteria', 'sorteo', 'premio']],
|
|
]);
|
|
|
|
// =====================================================================
|
|
// CATEGORIAS MISTAS (both)
|
|
// =====================================================================
|
|
|
|
// 🔄 TRANSFERÊNCIAS
|
|
$transferencias = $this->createCategory('Transferências', 'both', '#6B7280', 'bi-arrow-left-right', 'Movimentações entre contas');
|
|
$this->createSubcategories($transferencias, [
|
|
['name' => 'Entre Contas', 'icon' => 'bi-arrow-down-up', 'keywords' => ['transferencia propia', 'traspaso', 'entre cuentas']],
|
|
['name' => 'Bizum', 'icon' => 'bi-phone-vibrate', 'keywords' => ['bizum']],
|
|
['name' => 'PayPal', 'icon' => 'bi-paypal', 'keywords' => ['paypal']],
|
|
['name' => 'Wise/Revolut', 'icon' => 'bi-globe2', 'keywords' => ['wise', 'revolut', 'n26', 'transferencia internacional']],
|
|
]);
|
|
|
|
$this->command->info("✅ {$this->categoryId} categorias e subcategorias criadas para o usuário marco@cnxifly.com!");
|
|
}
|
|
|
|
private function createCategory(string $name, string $type, string $color, string $icon, string $description = null): array
|
|
{
|
|
$this->categoryId++;
|
|
|
|
DB::table('categories')->insert([
|
|
'user_id' => $this->userId,
|
|
'parent_id' => null,
|
|
'name' => $name,
|
|
'type' => $type,
|
|
'description' => $description,
|
|
'color' => $color,
|
|
'icon' => $icon,
|
|
'order' => $this->categoryId,
|
|
'is_active' => true,
|
|
'is_system' => false,
|
|
'created_at' => $this->now,
|
|
'updated_at' => $this->now,
|
|
]);
|
|
|
|
return ['id' => DB::getPdo()->lastInsertId(), 'type' => $type];
|
|
}
|
|
|
|
private function createSubcategories(array $parent, array $subcategories): void
|
|
{
|
|
$parentId = $parent['id'];
|
|
$parentType = $parent['type'];
|
|
|
|
foreach ($subcategories as $index => $sub) {
|
|
$this->categoryId++;
|
|
|
|
DB::table('categories')->insert([
|
|
'user_id' => $this->userId,
|
|
'parent_id' => $parentId,
|
|
'name' => $sub['name'],
|
|
'type' => $parentType, // Herda do pai
|
|
'description' => null,
|
|
'color' => '#6B7280', // Cinza neutro para subcategorias
|
|
'icon' => $sub['icon'] ?? 'bi-tag', // Usa ícone personalizado se fornecido
|
|
'order' => $index + 1,
|
|
'is_active' => true,
|
|
'is_system' => false,
|
|
'created_at' => $this->now,
|
|
'updated_at' => $this->now,
|
|
]);
|
|
|
|
$subcategoryId = DB::getPdo()->lastInsertId();
|
|
|
|
// Adicionar keywords
|
|
if (!empty($sub['keywords'])) {
|
|
foreach ($sub['keywords'] as $keyword) {
|
|
DB::table('category_keywords')->insert([
|
|
'category_id' => $subcategoryId,
|
|
'keyword' => strtolower($keyword),
|
|
'is_case_sensitive' => false,
|
|
'is_active' => true,
|
|
'created_at' => $this->now,
|
|
'updated_at' => $this->now,
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|