['table' => 'sat_forma_pago', 'columns' => ['c_forma_pago', 'descripcion', 'fecha_inicio_vigencia', 'fecha_fin_vigencia']], 'c_moneda' => ['table' => 'sat_moneda', 'columns' => ['c_moneda', 'descripcion', 'decimales', 'porcentaje_variacion', 'fecha_inicio_vigencia', 'fecha_fin_vigencia']], 'c_codigopostal' => ['table' => 'sat_codigo_postal', 'columns' => ['c_codigo_postal', 'c_estado', 'c_municipio', 'c_localidad', 'estimulo_franja_fronteriza', 'fecha_inicio_vigencia', 'fecha_fin_vigencia']], 'c_pais' => ['table' => 'sat_pais', 'columns' => ['c_pais', 'descripcion', 'formato_de_codigo_postal', 'formato_de_registro_de_identidad_tributaria', 'validacion_del_registro_de_identidad_tributaria', 'agrupaciones']], 'c_estado' => ['table' => 'sat_estado', 'columns' => ['c_estado', 'c_pais', 'nombre_del_estado', 'fecha_inicio_vigencia', 'fecha_fin_vigencia']], 'c_municipio' => ['table' => 'sat_municipio', 'columns' => ['c_municipio', 'c_estado', 'descripcion', 'fecha_inicio_vigencia', 'fecha_fin_vigencia']], 'c_localidad' => ['table' => 'sat_localidad', 'columns' => ['c_localidad', 'c_estado', 'descripcion', 'fecha_inicio_vigencia', 'fecha_fin_vigencia']], 'c_colonia' => ['table' => 'sat_colonia', 'columns' => ['c_colonia', 'c_codigo_postal', 'nombre_del_asentamiento']], 'c_regimenfiscal' => ['table' => 'sat_regimen_fiscal', 'columns' => ['c_regimen_fiscal', 'descripcion', 'fisica', 'moral', 'fecha_inicio_vigencia', 'fecha_fin_vigencia']], 'c_usocfdi' => ['table' => 'sat_uso_cfdi', 'columns' => ['c_uso_cfdi', 'descripcion', 'aplica_para_tipo_persona_fisica', 'aplica_para_tipo_persona_moral', 'fecha_inicio_vigencia', 'fecha_fin_vigencia', 'regimen_fiscal_receptor']], 'c_claveprodserv' => ['table' => 'sat_clave_prod_serv', 'columns' => ['c_clave_prod_serv', 'descripcion', 'incluir_iva_trasladado', 'incluir_ieps_trasladado', 'complemento_que_debe_incluir', 'fecha_inicio_vigencia', 'fecha_fin_vigencia', 'estimulo_franja_fronteriza', 'palabras_similares']], 'c_claveunidad' => ['table' => 'sat_clave_unidad', 'columns' => ['c_clave_unidad', 'nombre', 'descripcion', 'nota', 'fecha_inicio_vigencia', 'fecha_fin_vigencia', 'simbolo']], 'c_aduana' => ['table' => 'sat_aduana', 'columns' => ['c_aduana', 'descripcion', 'fecha_inicio_vigencia', 'fecha_fin_vigencia']], 'c_banco' => ['table' => 'sat_banco', 'columns' => ['c_banco', 'descripcion', 'razon_social', 'rfc', 'status']], 'c_deduccion' => ['table' => 'sat_deduccion', 'columns' => ['c_deduccion', 'descripcion']], 'c_percepcion' => ['table' => 'sat_percepcion', 'columns' => ['c_percepcion', 'descripcion', 'gravado_exento']], 'c_regimen_contratacion' => ['table' => 'sat_regimen_contratacion', 'columns' => ['c_tipo_regimen', 'descripcion']], ]; public function handle() { $csvPath = database_path('seeders/sat_cache/'); $updateExisting = $this->option('update'); if (!is_dir($csvPath)) { $this->error("⚠️ No se encontró la carpeta: {$csvPath}"); return; } $totalFiles = count($this->csvMappings); $this->info("📌 Iniciando importación de {$totalFiles} archivos CSV...\n"); foreach ($this->csvMappings as $csvFile => $mapping) { $fullPath = "{$csvPath}{$csvFile}.csv"; if (!file_exists($fullPath)) { $this->warn("⚠️ Archivo CSV no encontrado: {$fullPath}"); continue; } $this->info("📂 Importando: {$csvFile}.csv → {$mapping['table']}"); $result = CsvDatabaseService::importCsvToTable($fullPath, $mapping['table'], $mapping['columns'], $updateExisting); if (isset($result['error'])) { $this->error("❌ Error en {$csvFile}: {$result['error']}"); } else { $inserted = $result['inserted'] ?? 0; $this->info("✅ Importación completa: {$csvFile} ({$inserted} insertados)\n"); } } $this->info("✅ Todos los archivos CSV han sido importados correctamente."); } }