Closed pablodanielrey closed 2 years ago
hago un endpoint específico para las estadísticas asi implemento dentro de ese endpoint.
Lv-E23 - verbo - El empleado accede al reporte de cantidad de estudios Noción: El empleado accede a la funcionalidad de reporte donde se muestran la cantidad de estudios por tipo. Impactos: El empleado accede a la funcionalidad de reportes del sistema El empleado accede a la cantidad de estudios por tipo El sistema procesa el reporte El sistema muestra el reporte
Lv-E25 - verbo - El empleado accede al reporte de cantidad de estudios por mes del año Noción: El empleado accede a la funcionalidad de reporte donde se muestran la cantidad de estudios realizados por mes del año en curso. Impactos: El empleado accede a la funcionalidad de reportes del sistema El empleado accede a la cantidad de estudios por mes. El sistema procesa el reporte El sistema muestra el reporte
Lv-E27 - verbo - El empleado accede al reporte de tiempo de demora de estudio desde toma de muestra hasta entrega de médico derivante. Noción: El empleado accede a la funcionalidad de reporte donde se muestra el tiempo que demoran los estudios en promedio cada mes, desde que se toma la muestra hasta que se entrega el informe al médico derivante. Impactos: El empleado accede a la funcionalidad de reportes del sistema El empleado accede al reporte de tiempo El sistema procesa el reporte El sistema muestra el reporte.
esos verbos son necesarios implementarlos.
implemente un modelo básico que calcula los reportes. despues se debe incrementar los datos y la complejidad.
` class Reportes:
"""
LV-E23
"""
def cantidad_de_estudios_por_tipo(self):
estudios = models.Estudio.objects.all()
reporte = {}
for e in estudios:
tipo = e.tipo.nombre
if tipo not in reporte:
reporte[tipo] = 0
reporte[tipo] += 1
return reporte
"""
LV-E25
"""
def cantidad_de_estudios_por_mes(self):
estudios = models.Estudio.objects.all()
reporte = {}
for e in estudios:
mes = e.fecha_alta.month
if mes not in reporte:
reporte[mes] = 0
reporte[mes] += 1
return reporte
"""
LV-E27
"""
def demora_de_procesamiento_de_estudios(self):
estudios = models.Estudio.objects.all()
reporte = {}
for e in estudios:
fecha_muestra = None
fecha_entrega = None
for estado in e.estados.order_by('fecha'):
if isinstance(estado, models.EsperandoTomaDeMuestra):
fecha_muestra = estado.fecha_muestra
elif isinstance(estado, models.EsperandoEntregaAMedicoDerivante):
fecha_entrega = estado.fecha_entrega
if fecha_muestra and fecha_entrega:
break
else:
continue
tardanza = (fecha_entrega - fecha_muestra).seconds
mes = e.fecha_alta.month
if mes not in reporte:
reporte[mes] = {
'procesados': 0,
'tardanza': 0
}
reporte[mes]['tardanza'] += tardanza
reporte[mes]['procesados'] += 1
return reporte
`
también genere una api específica para los reportes.
urlpatterns = [
path('estudios_por_tipo/', views.Lve23ReporteCantidadDeEstudiosPorTipo.as_view()),
path('estudios_por_mes/', views.Lve25ReporteCantidadDeEstudiosPorMesAno.as_view()),
path('demora_promedio_procesamiento/', views.Lve27ReporteDemoraDeEstudios.as_view())
]
a saber: http://localhost:8000/reportes_api/demora_promedio_procesamiento http://localhost:8000/reportes_api/estudios_por_mes http://localhost:8000/reportes_api/estudios_por_tipo
ahora solo falta cambiar la vista para que obtenga los datos de esas apis. se lo transfiero a nico.
@pablodanielrey modifique endpoint asi traer mas facil los datos para resolver con la libreria vue-chartjs, el http://localhost:8000/reportes_api/demora_promedio_procesamiento , me esta trayendo
``{data: {datos: {12: procesados: 1 tardanza_segundos: 0}
}}reporte: fecha_de_reporte: "2021-12-19T04:04:30.376687-03:00" } No seria mejor pasarlos array y en vez de 12 que traiga la posicion y dentro del array el mes 12, ejemplo datos :{ datos: 0:{ procesados: 1, tardanza_segundos: 0. mes:12} 1:{procesados:5, tardanza_segundos:2 mes:8} En formato array o json, simplificariamos mucho desde el front pero lo vemos
ya hice el refactor que necesitaba nico desde el front. el reporte: localhost:8000/reportes_api/demora_promedio_procesamiento/
lo reemplace al formato:
{ "reporte": { "fecha_de_reporte": "2021-12-20T22:56:26.702083-03:00" }, "datos": [ { "mes": 12, "tadanza_segundos": 0, "procesados": 2 } ] }
falta implemntar completo