Professional Documents
Culture Documents
APLICADAS
INGENIERÍA DE SISTEMAS - EPE
ESTRUCTURA DE DATOS
Y ALGORITMOS
PROFESOR:
LUCAS FAJARDO MONTES
CICLO: 2018-01-B
TEMA:
DESARROLLO DE UNA TICKETERA DIGITAL
TRABAJO FINAL
INTEGRANTE:
ÍNDICE
I. PRESENTACIÓN .......................................................................................................................... 3
II. OBJETIVOS DEL TRABAJO .................................................................................................... 3
III. DESCRIPCIÓN DE LA EMPRESA.......................................................................................... 4
3.1. RAZÓN SOCIAL ................................................................................................................... 4
3.2. ACTIVIDAD............................................................................................................................ 4
3.3. PRODUCTOS Y SERVICIOS ............................................................................................. 4
3.4. CANTIDAD DE TRABAJADORES ..................................................................................... 5
3.5. UBICACIÓN ........................................................................................................................... 6
4.6. ESTRUCTURA ORGANIZACIONAL ................................................................................. 6
IV. DESCRIPCIÓN DEL PROBLEMA .......................................................................................... 7
V. DESCRIPCIÓN DE LA SOLUCIÓN PLANTEADA ............................................................... 7
5.1. ANÁLISIS DEL PROBLEMA ............................................................................................... 7
5.1.2. PROPUESTA DE SOLUCIÓN 1 ..................................................................................... 7
5.1.3. PROPUESTA DE SOLUCIÓN 2 ..................................................................................... 8
5.1.4. CONCLUSIONES SOBRE LAS DOS PROPUESTAS ................................................ 9
5.2. DESCRIPCIÓN DE LA SOLUCIÓN A IMPLEMENTAR ................................................. 9
5.2.1. ALCANCE ........................................................................................................................... 9
5.2.2. REQUISITOS FUNCIONALES...................................................................................... 10
5.2.3. ESTRUCTURA DE DATOS ........................................................................................... 12
VI. CÓDIGO FUENTE DE LA SOLUCIÓN ................................................................................ 14
6.1. PROGRAMA “SERVICIO DE TICKETERA DIGITAL” .................................................. 14
6.2. PROGRAMA “TEST DEL SERVICIO” ............................................................................. 24
VII. PANTALLAS PRINCIPALES DE LA SOLUCIÓN ............................................................ 28
7.1. PROGRAMA “SERVICIO DE TICKETERA DIGITAL” .................................................. 28
7.2. PROGRAMA “TEST DEL SERVICIO” ............................................................................. 29
VIII. CONCLUSIONES Y RECOMENDACIONES .................................................................... 33
8.1. CONCLUSIONES ............................................................................................................... 33
8.2. RECOMENDACIONES ...................................................................................................... 33
IX. REFERENCIAS Y BIBLIOGRAFÍA....................................................................................... 35
2
I. PRESENTACIÓN
Para el desarrollo del presente trabajo se basarán en los objetivos planteados por el curso.
3
III. DESCRIPCIÓN DE LA EMPRESA
3.2. ACTIVIDAD
La actividad que desarrolla la empresa es Financiera.
Créditos
Efectivo (Efectivo BCP, Efectivo con Garantía Liquida, Efectivo con Garantía
Hipotecaria, Efectivo con Garantía Hipotecaria Compartido).
Hipotecario (Hipotecario BCP, Mi Vivienda BCP, Emprendedor BCP, Compartido,
Compra de Deuda).
Vehiculares (Vehicular, Vehicular Compartido, Compra Inteligente).
Otros Créditos (Estudios, Compra de Deuda, Adelanta tu Sueldo).
Seguros
Tarjetas
VISA Latam Pass (Visa Clásica, Visa Oro, Visa Platinum, Visa Signature).
4
AMEX Latam Pass (American Express Clásica, American Express Oro, American
Express Platinum)
Millas Travel (Visa Oro, Visa Platinum)
Otras (Visa Light, Visa Clásica)
Débito (Visa Clásica BCP, Visa Oro BCP, Visa Clásica BCP con diseño, Visa
Clásica BCP Latam Pass).
Cuentas
Inversiones
Otros
5
3.5. UBICACIÓN
La dirección fiscal de la empresa es Calle Centenario Nro. 156 Urb. Las Laderas de
Melgarejo Lima – Lima - La Molina sin embargo cuenta adicionalmente con las siguientes
sedes:
Sede OP Lima
Sede Chorrillos
Sede San Isidro
Necesidad de
Plataforma de
Administración de
Citas para Oficinas
6
IV. DESCRIPCIÓN DEL PROBLEMA
Los registros de las solicitudes se realizarán a través de un nuevo sistema que permitirá
controlar las reservas en base a la agencia seleccionada, cantidad de servidores de
atención y clientes que pueden ser atendidos de acuerdo con el orden de llegada y
capacidad de atención de cada agencia.
La solución contará con diversos servicios tanto para el registro y gestión de las
citas, por ejemplo, expondrá funcionalidad de registro de citas, cancelación de citas,
listado de agencias que cuentan con este servicio, listado de citas creadas, reporte
de estado de atención de citas en plataforma por agencia.
7
que muestra el turno asignado de acuerdo con el orden de llegada. La cita se
considerará como una llegada adicional sin necesidad de que el cliente pase su
tarjeta.
Ventajas:
Centralizado, conectado.
Lógica de negocio encapsulada, menor esfuerzo de implementación por los
canales dígales.
No requiere de instalaciones de software local.
Desventajas:
Ventajas:
Desconectado.
Desventajas:
8
5.1.4. CONCLUSIONES SOBRE LAS DOS PROPUESTAS
5.2.1. ALCANCE
Las citas serán creadas por los clientes a través de las diversas aplicaciones
digitales que expongan esta funcionalidad. Las aplicaciones deberán consumir las
funciones desarrollados por este requerimiento, no forma parte del alcance realizar
las modificaciones en las aplicaciones consumidoras y tampoco en la ticketera física.
9
A continuación, se muestra un diagrama general de la solución:
AGENCIA 1
Ticketera
Virtual
Banca Movil
Servidor Local
Ticketera
Física Homebanking
10
5.4.2.2. Requisito Funcional 2: Disponibilidad del Servicio
Las agencias que están registradas en el servicio son las que el cliente podrá
realizar una reserva de una cita. En caso la agencia no esté registrada el
servicio mostrará un mensaje que la agencia no está disponible este servicio.
Dicho mensaje será enviado a la aplicación digital que haya invocado el
servicio de gestión de citas.
El servicio contará con una función que permitirá obtener la lista de agencias
disponibles para que pueda ser mostrada por el canal.
El servicio contará con una función que permitirá obtener la lista de Motivos
de Cita disponibles para que pueda ser mostrada por el canal.
11
El cliente solo podrá realizar reservas para el día en curso, no se permitirá
reservas para días futuros. Esta condición será paramétrica y se podrá
modificar sin necesidad de cambiar el programa.
Para la implementación del servicio se utilizarán listas enlazadas las cuales cargarán
la información de los datos maestros como clientes, agencias, motivo y evaluación.
De igual manera la cita generada será almacenada en listas enlazadas ya que la
cantidad de elementos ira variando de acuerdo con la cantidad de solicitudes
generadas.
12
A continuación, se describen las principales entidades que formaran el modelo de
datos para la solución:
13
VI. CÓDIGO FUENTE DE LA SOLUCIÓN
Para la solución planteada se han elaborado 2 programas Ruby. Uno de ellos funciona
como servicio que provee las funciones de generación de los tickets y el otro programa
permite crear nuevos tickets a través de una interfase de ingreso de datos.
Para realizar las pruebas del servicio se implementa un programa que permitirá la
generación de creación de citas.
AppServicio-v2.rb
Librerías utilizadas:
require 'nokogiri'
require 'securerandom'
require 'fileutils'
14
cargar_Calificaciones() Implementa la carga de calificaciones a través de un
archivo CALIFICA.TXT que es enviado desde la
aplicación Legacy.
validar_Cliente() Implementa la validación si un código de cliente esta
creado en el servicio.
validar_Agencia() Implementa la validación si un código de agencia esta
creado en el servicio.
validar_Motivo() Implementa la validación si un código de motivo esta
creado en el servicio.
validar_Cita() Implementa la validación si un código de cita esta creado
en el servicio.
validar_exiteXML() Implementa la validación un mensaje XML ya ha sido
procesado anteriormente.
crear_Solicitud() Implementa la funcionalidad de creación de tickets.
cancelar_Solicitud() Implementa la funcionalidad de cancelación de tickets.
crear_TicketAgencia() Implementa la funcionalidad de generación en envío de
información de los tickets generados en la ticketera
virtual hacia una agencia a través de un archivo TXT.
calificar_Cita() Implementa la funcionalidad de calificación de citas.
listar_Solicitudes() Implementa la funcionalidad de listado de citas por
diversos criterios de selección.
armar_LineaReporte() Implementa la funcionalidad de concatenar la información
para ser mostrada en el reporte.
completar_Campo() Implementa la funcionalidad de completar con espacios
en blancos los campos para que se muestren
correctamente en el reporte.
escribir_Archivo() Implementa la funcionalidad de escribir una cadena de
texto en un archivo TXT.
leer_mensajesXML() Implementa la funcionalidad de leer los mensajes XML
que han sido enviados al servicio para la creación de
nuevas citas a través de los canales digitales.
15
iniciar_Servicio() Implementa la función principal del programa y que
inicializa los valores, así como gestiona las solicitudes de
nuevas citas.
# PROGRAMA EPE
# CURSO : ESTRUCTURA DE DATOS Y LGORITMOS
# PROFESOR : LUCAS FAJARDO
# CICLO : 2018-I
# ALUMNO : MOISES DANIEL CHANG ARMAS
# CODIGO : U201514128
# SISTEMA : GESTION DE CITAS – SERVICIO
###############################################################################
#encoding: utf-8
require 'nokogiri'
require 'securerandom'
require 'fileutils'
@clientes = []
@agencias = []
@motivos = []
@calificaciones = []
@solicitudes = []
@tiempo_atencion
@ultimaCita=0
@ultimoTicket=0
def parametrizar_Servicio(tiempo)
print "Cargando parametros del servicio"
File.open('parametros.txt','r') do |fichero1|
while linea = fichero1.gets
#puts "linea: #{linea}"
end
end
@tiempo_atencion = tiempo
puts ".........OK!"
end
def cargar_Clientes()
print "Cargando información de clientes"
@clientes.insert(@clientes.size,["C001","Daniel"])
@clientes.insert(@clientes.size,["C002","Juan"])
@clientes.insert(@clientes.size,["C003","Alberto"])
@clientes.insert(@clientes.size,["C004","Claudio"])
@clientes.insert(@clientes.size,["C005","Jose"])
16
@clientes.insert(@clientes.size,["C006","Antonio"])
puts ".........OK!"
end
def cargar_Agencias()
print "Cargando información de agencias"
@agencias.insert(@agencias.size,["AG-1","Agencia Chorrillos",1])
@agencias.insert(@agencias.size,["AG-2","Agencia Miraflores",1])
@agencias.insert(@agencias.size,["AG-3","Agencia La Molina",2])
puts ".........OK!"
end
def cargar_Motivos()
print "Cargando información de motivos"
@motivos.insert(@motivos.size,["MT-1","Producto Nuevo"])
@motivos.insert(@motivos.size,["MT-2","Solicitud de Prestamo"])
@motivos.insert(@motivos.size,["MT-3","Reclamo"])
@motivos.insert(@motivos.size,["MT-4","Consulta"])
@motivos.insert(@motivos.size,["MT-5","Otros"])
puts "..........OK!"
end
def cargar_Calificaciones()
print "Cargando información de calificaciones"
@calificaciones.insert(@calificaciones.size,["EV-0","Sin Calificar"])
@calificaciones.insert(@calificaciones.size,["EV-1","Excelente"])
@calificaciones.insert(@calificaciones.size,["EV-2","Muy buena"])
@calificaciones.insert(@calificaciones.size,["EV-3","Buena"])
@calificaciones.insert(@calificaciones.size,["EV-4","Regular"])
@calificaciones.insert(@calificaciones.size,["EV-5","Mala"])
puts "...OK!"
end
def validar_Cliente(cliente)
encontrado = false
if @clientes.size > -1
for i in 0..@clientes.size-1
if @clientes[i][0] == cliente
encontrado = true
end
end
end
return encontrado
end
def validar_Agencia(agencia)
encontrado = false
if @agencias.size > -1
for i in 0..@agencias.size-1
if @agencias[i][0] == agencia
encontrado = true
end
end
end
return encontrado
end
17
def validar_Motivo(motivo)
encontrado = false
if @motivos.size > -1
for i in 0..@motivos.size-1
if @motivos[i][0] == motivo
encontrado = true
end
end
end
return encontrado
end
def validar_exiteXML(mensaje)
encontrado = false
if @solicitudes.size > -1
for i in 0..@solicitudes.size-1
if @solicitudes[i][12] == mensaje
encontrado = true
end
end
end
return encontrado
end
@ultimaCita = @ultimaCita + 1
cita = "CT-#{@ultimaCita}"
@solicitudes.insert(@solicitudes.size,[cita,cliente,agencia,Time.now.strftime("%Y-%m-
%d"),Time.now.strftime("%R"),motivo,canal,"TK-S/N ",fechaCita,horaCita,estado, "EV-0",
mensajeXML])
if estado == "PENDIENTE"
return "-> Cita #{cita} creada con éxito ... OK!"
else
18
return "-> No se pudo crear la cita........ NOK!"
end
end
def crear_TicketAgencia(agencia)
contador = 0
if @solicitudes.size > -1
fechaCreacion = Time.now.strftime("%Y-%m-%d")
horaCreacion = Time.now.strftime("%T")
cadena = ""
cadena = cadena + "-----------------------------------------------------------------------------------
----------------------------------------------------------------"+"\n"
cadena = cadena + "Fecha: #{fechaCreacion} Hora #{horaCreacion}"+"\n"
cadena = cadena + "-----------------------------------------------------------------------------------
----------------------------------------------------------------"+"\n\n"
cadena = cadena + "CITA CLIENTE AGENCIA FECHA REG. HORAREG
MOTIVO CANAL TICKET FECHA CITA HORA CITA CALIFICA ESTADO MENSAJE
"+"\n"
cadena = cadena + "------ ------- ------- ---------- ------- ------ ----- ---------- ---------- --------
- -------- ---------- ----------------------------------------"+"\n"
for i in 0..@solicitudes.size-1
if @solicitudes[i][2] == agencia and @solicitudes[i][10] != "CANCELADA"
and @solicitudes[i][10] != "GENERADA" and @solicitudes[i][10] != "CERRADA" and
@solicitudes[i][10] != "RECHAZADA"
@ultimoTicket = @ultimoTicket + 1
@solicitudes[i][7] = "TK-"+agencia+"-0"+@ultimoTicket.to_s
@solicitudes[i][10] = "GENERADA"
cadena = cadena + armar_LineaReporte(i)+"\n"
contador = contador + 1
end
end
cadena = cadena + "\n"
#Generando el mensaje para la creación de ticket en ticketera fisica
if contador > 0
fechaCreacion = Time.now.strftime("%Y-%m-%d")
horaCreacion = Time.now.strftime("%R")
nombreArchivo = fechaCreacion+"_"+agencia+"_CITAS"+".TXT"
puts escribir_Archivo(nombreArchivo, cadena)
return "-> Citas generadas Agencia #{agencia}.. OK!"
end
end
return "-> No hay citas para generar........... OK!"
19
end
cadena = ""
cadena = cadena + "-----------------------------------------------------------------------------------
----------------------------------------------------------------"+"\n"
cadena = cadena + "Fecha: #{fechaCreacion} Hora #{horaCreacion}"+"\n"
cadena = cadena + "-----------------------------------------------------------------------------------
----------------------------------------------------------------"+"\n\n"
cadena = cadena + "CITA CLIENTE AGENCIA FECHA REG. HORAREG
MOTIVO CANAL TICKET FECHA CITA HORA CITA CALIFICA ESTADO MENSAJE
"+"\n"
cadena = cadena + "------ ------- ------- ---------- ------- ------ ----- ---------- ---------- --------
- -------- ---------- ----------------------------------------"+"\n"
for i in 0..@solicitudes.size-1
if cliente == "" and agencia == "" and fecha == "" and canal == "" and
estado == ""
cadena = cadena + armar_LineaReporte(i)+"\n"
elsif estado == ""
if cliente == @solicitudes[i][1] and agencia == @solicitudes[i][2] and
fecha == @solicitudes[i][8] and canal == @solicitudes[i][6]
cadena = cadena + armar_LineaReporte(i)+"\n"
elsif cliente == @solicitudes[i][1] and fecha == @solicitudes[i][8]
cadena = cadena + armar_LineaReporte(i)+"\n"
elsif cliente == @solicitudes[i][1]
cadena = cadena + armar_LineaReporte(i)+"\n"
elsif agencia == @solicitudes[i][2]
cadena = cadena + armar_LineaReporte(i)+"\n"
elsif agencia == @solicitudes[i][2] and fecha == @solicitudes[i][8]
cadena = cadena + armar_LineaReporte(i)+"\n"
elsif fecha == @solicitudes[i][8]
cadena = cadena + armar_LineaReporte(i)+"\n"
elsif canal == @solicitudes[i][6]
20
cadena = cadena + armar_LineaReporte(i)+"\n"
elsif canal == @solicitudes[i][6] and cliente == @solicitudes[i][1]
cadena = cadena + armar_LineaReporte(i)+"\n"
elsif canal == @solicitudes[i][6] and cliente == @solicitudes[i][1]
and fecha == @solicitudes[i][8]
cadena = cadena + armar_LineaReporte(i)+"\n"
elsif canal == @solicitudes[i][6] and cliente == @solicitudes[i][1]
and fecha == @solicitudes[i][8] and agencia == @solicitudes[i][2]
cadena = cadena + armar_LineaReporte(i)+"\n"
else
#puts "Aqui"
end
else
if estado == @solicitudes[i][10]
cadena = cadena + armar_LineaReporte(i)+"\n"
end
end
end
cadena = cadena+"\n"
#puts cadena
if archivo == true
if nombreArchivo == ""
nombreArchivo = fechaCreacion+"_OPER_CITAS.TXT"
end
puts escribir_Archivo(nombreArchivo, cadena)
end
else
return "-> No existen Citas creadas...... OK!"
end
return "-> Listado de citas.............. OK!"
end
def armar_LineaReporte(indice)
cadena = ""
cadena = cadena + completar_Campo(@solicitudes[indice][0],6) + " "
cadena = cadena + completar_Campo(@solicitudes[indice][1],7) + " "
cadena = cadena + completar_Campo(@solicitudes[indice][2],7) + " "
cadena = cadena + completar_Campo(@solicitudes[indice][3],10) + " "
cadena = cadena + completar_Campo(@solicitudes[indice][4],7) + " "
cadena = cadena + completar_Campo(@solicitudes[indice][5],6) + " "
cadena = cadena + completar_Campo(@solicitudes[indice][6],5) + " "
cadena = cadena + completar_Campo(@solicitudes[indice][7],10) + " "
cadena = cadena + completar_Campo(@solicitudes[indice][8],10) + " "
cadena = cadena + completar_Campo(@solicitudes[indice][9],9) + " "
cadena = cadena + completar_Campo(@solicitudes[indice][11],8) + " "
cadena = cadena + completar_Campo(@solicitudes[indice][10],10)+ " "
cadena = cadena + @solicitudes[indice][12]
return cadena
end
21
end
return cadena
end
def leer_Archivo(archivo)
#contador = 0
#cliente = agencia = motivo = canal = fechaCita = horaCita = ""
#File.open(archivo,"r") do |fichero2|
# while linea = fichero2.gets
# contador = contador + 1
# linea = linea.chomp()
# #puts "#{linea}"
# if contador == 2
# cliente = linea
# elsif contador == 3
# agencia = linea
# elsif contador == 4
# motivo = linea
# elsif contador == 5
# canal = linea
# elsif contador ==6
# fechaCita = linea
# elsif contador == 7
# horaCita = linea
# end
# end
#end
#puts crear_Solicitud(cliente,agencia,motivo,canal,fechaCita,horaCita)
#return "-> #{archivo} procesado con éxito... OK!"
end
def leer_mensajesXML()
contador = 0
nombreArchivo = ""
buscado = ".xml"
mensaje = ""
Dir.glob('*').each do |archivo|
nombreArchivo = archivo.chomp
resp = /#{buscado}/.match(nombreArchivo)
if resp != nil and nombreArchivo.size >= 40 and validar_exiteXML(nombreArchivo) == false
puts nombreArchivo+"\n"
#puts leer_Archivo(nombreArchivo)
name_xml_file = nombreArchivo
f = File.open(name_xml_file)
xml = Nokogiri::XML(f)
body = xml.xpath("//s0:Cita")
cliente = body.xpath("//s0:cliente").text
22
agencia = body.xpath("//s0:agencia").text
motivo = body.xpath("//s0:motivo").text
canal = body.xpath("//s0:canal").text
fechaCita = body.xpath("//s0:fecha").text
horaCita = body.xpath("//s0:hora").text
mensaje = nombreArchivo
puts
crear_Solicitud(cliente,agencia,motivo,canal,fechaCita,horaCita,mensaje)
mensaje = mensaje + "-> #{archivo} procesado con éxito... OK!"+"\n"
def iniciar_Servicio(tiempo)
system("cls")
tiempoInicial = Time.now()
tiempoFinal = Time.now() + tiempo
puts listar_Solicitudes("","","","","",true)
23
puts "FILTRANDO CITAS POR CRITERIOS DE SELECCION..."
puts listar_Solicitudes("C001","","","","",true,"LISTADO_CITAS-01.TXT")
puts listar_Solicitudes("","AG-1","","","",true,"LISTADO_CITAS-01.TXT")
puts listar_Solicitudes("","","2018-07-12","","",true,"LISTADO_CITAS-01.TXT")
puts listar_Solicitudes("","","2018-07-11","","",true,"LISTADO_CITAS-01.TXT")
puts listar_Solicitudes("","","","NHBK","",true,"LISTADO_CITAS-01.TXT")
puts listar_Solicitudes("","","","KIOS","",true,"LISTADO_CITAS-01.TXT")
puts listar_Solicitudes("","","","","CANCELADA",true,"LISTADO_CITAS-01.TXT")
puts listar_Solicitudes("","","","NHBK","PENDIENTE",true,"LISTADO_CITAS-01.TXT")
puts listar_Solicitudes("","","","","",true,"LISTADO_CITAS-01.TXT")
#INICIANDO SERVICIO
#Inicializamos el servicio en 5 minutos
puts iniciar_Servicio(60*5)
###############################################################################
Para realizar las pruebas del servicio se implementa un programa que permitirá la
generación de creación de citas.
Programa: AppTest-v2.rb
Librerías utilizadas:
require 'securerandom'
24
Main() Implementa la función principal del programa donde se
presentan las opciones de crear una nueva cita y salir del
programa.
require 'securerandom'
def escribir_XML(cadena)
archivo = SecureRandom.hex(16)
archivo = archivo.upcase
archivo = archivo + ".xml"
archivo = archivo[0..7]+"-"+archivo[8..11]+"-"+archivo[12..15]+"-"+archivo[16..19]+"-
"+archivo[20..37]
File.open(archivo,"a") do |fichero1|
fichero1.puts cadena
end
return "-> Archivo: #{archivo} "+"\n"+"-> (A) generado con éxito........ OK!"
end
25
cadena = cadena + " </senv:Body>"+"\n"
cadena = cadena + "</senv:Envelope>"+"\n"
return cadena
end
def main()
@respuesta = "Y"
while @respuesta == "Y"
system("cls")
puts ""
puts "PROGRAMA DE PRUEBAS DEL SERVICIO DE TICKETERA DIGITAL"
puts "-----------------------------------------------------"
puts ""
puts "Indique que operación desea realizar"
puts ""
puts "-> 1. (N)ueva cita, presione la letra.................... 'N'"
puts "-> 2. (E)xit, presione la letra...........................'E'"
puts ""
puts "Seleccione una opción:"
@respuesta = gets.chomp().upcase
if @respuesta == "N"
system("cls")
puts "PROGRAMA DE PRUEBAS DEL SERVICIO DE TICKETERA
DIGITAL - CREAR CITA"
puts "------------------------------------------------------------------"
puts ""
puts "Ingrese un cliente: (C001, C002, C003, C004, C005, C006)"
cliente = gets.chomp().upcase
puts "Ingrese la agencia: (AG-1, AG2, AG3)"
agencia = gets.chomp().upcase
puts "Ingrese el motivo de visita: (MT-1, MT-2, MT-3, MT-4, MT-5)"
motivo = gets.chomp().upcase
puts "Ingrese un canal: (NHBK, KIOS, BMOV)"
canal = gets.chomp().upcase
puts "Ingrese la feha de Cita: (YYYY-MM-DD)"
fecha = gets.chomp()
puts "Ingrese la hora de la cita: (HH:MM)"
hora = gets.chomp()
if cliente != "" and agencia != "" and motivo != "" and canal != "" and fecha !=
"" and hora != ""
cadena = armar_mensajeXML(cliente, agencia, motivo, canal,
fecha, hora)
puts escribir_XML(cadena)
else
puts "No se han completado todos los datos. No se puede crear el
mensaje!"
26
end
puts ""
puts "Desea registrar otra operación (Y / N)"
@respuesta = gets.chomp().upcase
main()
###############################################################################
27
VII. PANTALLAS PRINCIPALES DE LA SOLUCIÓN
Para iniciar el programa test, se debe ingresar a la ruta del programa y ejecutar la
sentencia:
28
En la pantalla anterior se puede visualizar la inicialización del servicio, en la cual se realiza
la carga de información de los maestros: Clientes, Agencias, Motivos de Cita, Calificaciones
y se inicializa una cadena de arreglos vacía que será utilizada para la gestión de citas.
En la pantalla anterior podemos apreciar un log generado en la consola del CMD donde
indica los mensajes que han sido procesados y cuales han sido rechazados.
29
Al ejecutar el programa se muestra la siguiente pantalla:
Al seleccionar la opción de nuevo ingreso, el sistema solicitará los datos necesarios para la
creación de la cita. Una vez ingresado los datos muestra un mensaje de confirmación de la
creación del mensaje.
30
A continuación, se muestra la estructura del archivo XML que permite la creación de una
cita por un canal digital.
31
Al terminar el flujo de creación de una cita, se genera un archivo XML que luego es
interpretado por el servicio.
32
VIII. CONCLUSIONES Y RECOMENDACIONES
8.1. CONCLUSIONES
8.2. RECOMENDACIONES
Implementar la solución con Ruby Rails para poder generar un Web Service y
publicar el servicio en un servidor y desarrollar una web de pruebas que permita
fácilmente realizar pruebas de las funcionalidades.
Agregar esquemas de seguridad para garantizar que los mensajes sean seguros y
evitar cualquier tipo de vulnerabilidades.
33
Implementar la persistencia de los datos generados por las operaciones del servicio
en una base de datos.
34
IX. REFERENCIAS Y BIBLIOGRAFÍA
https://www.viabcp.com/wps/portal/Home/personas/!ut/p/z1/04_Sj9CPykssy0xPLMnMz0v
MAfIjo8ziDQzMTDyNgw18_YOdTQwcg3x9DEMMTQwMDE30wwkpiAJLYweOBkD9UViU
OBo4BRk5GRsYuPsbYVWAYkZBboRBpqOiIgDSDY44/dz/d5/L2dBISEvZ0FBIS9nQSEh/
http://rubytutorial.wikidot.com/lectura-escritura
https://code-examples.net/es/q/110d90
https://ruby-doc.org/core-2.2.0/Array.html
http://www.forosdelweb.com/f105/compilar-programa-ruby-926839/
https://www.comunycarse.com/es/teoria-colas-los-modelos-formulas-problemas-resueltos/
35