docs & tools: Actualización de informes y scripts de migración DASUTEN
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user