docs & tools: Actualización de informes y scripts de migración DASUTEN

This commit is contained in:
Ricardo Monla
2026-04-20 16:25:51 -03:00
parent faf46be84b
commit 65dd92b769
44 changed files with 3822 additions and 568 deletions
@@ -0,0 +1,205 @@
#!/usr/bin/env ruby
# frozen_string_literal: true
# ==========================================================
# Verificación Final Comparativa - FENIX vs DASU-SQL4
# ==========================================================
require 'tiny_tds'
require_relative 'drones/lib/dasu_executor'
puts "" * 70
puts " VERIFICACIÓN FINAL - FENIX (PRODUCCIÓN) vs DASU-SQL4"
puts " Fecha: #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}"
puts "" * 70
# ==========================================
# 1. FENIX - Obtener datos
# ==========================================
puts "\n[1] Conectando a FENIX (PRODUCCIÓN)..."
begin
pass_cmd = `ruby adn/tools/candados/candados.rb get utnlarioja.intranet:monlaricardo 2>/dev/null`.strip
sql_user = 'UTNlarioja\\monlaricardo'
sql_host = '10.0.10.200'
client_fenix = TinyTds::Client.new(
username: sql_user,
password: pass_cmd,
host: sql_host,
timeout: 600,
database: 'sysdasuten'
)
puts "[+] Conectado a FENIX"
# Consultas a FENIX
puts "\n[2] Obteniendo datos de FENIX..."
fenix_data = {}
# Total BonosAfiliado
result = client_fenix.execute("SELECT COUNT(*) as c FROM BonosAfiliado")
fenix_data[:total_bonos] = result.first['c']
# Registros por día (últimos 5 días)
result = client_fenix.execute("
SELECT TOP 5
CAST(fecha AS DATE) as dia,
COUNT(*) as c
FROM BonosAfiliado
GROUP BY CAST(fecha AS DATE)
ORDER BY dia DESC
")
fenix_data[:por_dia] = {}
result.each { |r| fenix_data[:por_dia][r['dia']] = r['c'] }
# Última fecha
result = client_fenix.execute("SELECT MAX(fecha) as ultima FROM BonosAfiliado")
fenix_data[:ultima_fecha] = result.first['ultima']
# MAX(idsolicitud)
result = client_fenix.execute("SELECT MAX(idsolicitud) as max_id FROM BonosAfiliado")
fenix_data[:max_idsolicitud] = result.first['max_id']
# AutorizacionBonosExcepcion
result = client_fenix.execute("SELECT COUNT(*) as c FROM AutorizacionBonosExcepcion")
fenix_data[:total_aut] = result.first['c']
result = client_fenix.execute("SELECT MAX(fechasolicitud) as ultima FROM AutorizacionBonosExcepcion")
fenix_data[:ultima_fecha_aut] = result.first['ultima']
client_fenix.close
puts " Total BonosAfiliado: #{fenix_data[:total_bonos]}"
puts " Última fecha: #{fenix_data[:ultima_fecha]}"
puts " MAX(idsolicitud): #{fenix_data[:max_idsolicitud]}"
puts " Total AutorizacionBonosExcepcion: #{fenix_data[:total_aut]}"
rescue => e
puts "[!] Error conectando a FENIX: #{e.message}"
fenix_data = {}
end
# ==========================================
# 2. DASU-SQL4 - Obtener datos
# ==========================================
puts "\n[3] Conectando a DASU-SQL4..."
ps_script = <<~PSCMD.strip
$ErrorActionPreference = "Stop"
$JSON_PATH = "C:\\temp\\verificacion_final_output.json"
$connString = "Server=localhost;Database=sysdasuten;Integrated Security=true;TrustServerCertificate=yes;"
$conn = New-Object System.Data.SqlClient.SqlConnection($connString)
$conn.Open()
$data = @{}
# Total BonosAfiliado
$cmd = New-Object System.Data.SqlClient.SqlCommand("SELECT COUNT(*) as c FROM BonosAfiliado", $conn)
$data.total_bonos = $cmd.ExecuteScalar()
# Por día
$cmd = New-Object System.Data.SqlClient.SqlCommand("
SELECT TOP 5
CONVERT(varchar, CAST(fecha AS DATE), 120) as dia,
COUNT(*) as c
FROM BonosAfiliado
GROUP BY CAST(fecha AS DATE)
ORDER BY dia DESC
", $conn)
$adapter = New-Object System.Data.SqlClient.SqlDataAdapter($cmd)
$ds = New-Object System.Data.DataSet
$adapter.Fill($ds)
$por_dia = @{}
$ds.Tables[0].Rows | ForEach-Object { $por_dia[$($_.dia)] = $($_.c) }
$data.por_dia = $por_dia
# Última fecha
$cmd = New-Object System.Data.SqlClient.SqlCommand("SELECT MAX(fecha) as ultima FROM BonosAfiliado", $conn)
$data.ultima_fecha = $cmd.ExecuteScalar()
# MAX(idsolicitud)
$cmd = New-Object System.Data.SqlClient.SqlCommand("SELECT MAX(idsolicitud) as max_id FROM BonosAfiliado", $conn)
$data.max_idsolicitud = $cmd.ExecuteScalar()
# AutorizacionBonosExcepcion
$cmd = New-Object System.Data.SqlClient.SqlCommand("SELECT COUNT(*) as c FROM AutorizacionBonosExcepcion", $conn)
$data.total_aut = $cmd.ExecuteScalar()
$cmd = New-Object System.Data.SqlClient.SqlCommand("SELECT MAX(fechasolicitud) as ultima FROM AutorizacionBonosExcepcion", $conn)
$data.ultima_fecha_aut = $cmd.ExecuteScalar()
$conn.Close()
$data | ConvertTo-Json -Depth 5 | Out-File -FilePath $JSON_PATH -Encoding utf8
PSCMD
begin
DasuExecutor.execute_ps_on_dasu(ps_script, output_path: 'C:\temp\verificacion_final_output.json')
dasu_data = DasuExecutor.read_json_from_dasu('C:\temp\verificacion_final_output.json')
puts "[+] Conectado a DASU-SQL4"
puts " Total BonosAfiliado: #{dasu_data['total_bonos']}"
puts " Última fecha: #{dasu_data['ultima_fecha']}"
puts " MAX(idsolicitud): #{dasu_data['max_idsolicitud']}"
puts " Total AutorizacionBonosExcepcion: #{dasu_data['total_aut']}"
rescue => e
puts "[!] Error consultando DASU-SQL4: #{e.message}"
dasu_data = {}
end
# ==========================================
# 3. COMPARAR
# ==========================================
puts "\n" + "" * 70
puts " COMPARACIÓN"
puts "" * 70
def comparar(nombre, fenix, dasu, formato = nil)
fenix_val = fenix.nil? ? "N/A" : (formato ? formato.call(fenix) : fenix.to_s)
dasu_val = dasu.nil? ? "N/A" : (formato ? formato.call(dasu) : dasu.to_s)
coincide = fenix.to_s == dasu.to_s
estado = coincide ? "" : "⚠️"
puts " #{estado} #{nombre}:"
puts " FENIX: #{fenix_val}"
puts " DASU: #{dasu_val}"
coincide
end
todos_coinciden = true
# Comparar totales
todos_coinciden &= comparar("Total BonosAfiliado", fenix_data[:total_bonos], dasu_data['total_bonos'])
# Comparar última fecha
todos_coinciden &= comparar("Última fecha", fenix_data[:ultima_fecha], dasu_data['ultima_fecha'])
# Comparar MAX(idsolicitud)
todos_coinciden &= comparar("MAX(idsolicitud)", fenix_data[:max_idsolicitud], dasu_data['max_idsolicitud'])
# Comparar total autorizaciones
todos_coinciden &= comparar("Total AutorizacionBonosExcepcion", fenix_data[:total_aut], dasu_data['total_aut'])
# Comparar por día
puts "\n Registros por día (últimos 5 días):"
if fenix_data[:por_dia] && dasu_data['por_dia']
fenix_data[:por_dia].each do |dia, count|
dasu_count = dasu_data['por_dia'][dia.to_s]
coincide = count == dasu_count
estado = coincide ? "" : "⚠️"
puts " #{estado} #{dia}: FENIX=#{count} | DASU=#{dasu_count}"
todos_coinciden = false unless coincide
end
end
puts "\n" + "" * 70
if todos_coinciden
puts " ✅ TODOS LOS DATOS COINCIDEN - EL SISTEMA ESTÁ ACTUALIZADO"
else
puts " ⚠️ HAY DIFERENCIAS - REVISAR"
end
puts "" * 70