def crear_cursos(borrar=True): print("Creando cursos") if borrar: Curso.objects.all().delete() pr = Curso() pr.nombre = "Hospitalización 1" pr.nombre_interno = "Hospitalización 1 v202020" pr.codigo = "PEDI-5101" pr.semestre = "2020-20" pr.programa = Programa.buscar_por_codigo("PEDI") pr.descripcion = "Las rotaciones clínicas permiten que el residente tenga contacto y bajo supervisión atienda pacientes con las patologías frecuentes de un área o subespecialidad específica, aprenda a usar las pruebas, los procedimientos diagnósticos, el tratamiento integral de estas patologías o situaciones clínicas." pr.save() # Poniéndole APEs al curso pr.apes.add(APE.buscar_por_sigla("APE1")) pr.apes.add(APE.buscar_por_sigla("APE2")) pr.apes.add(APE.buscar_por_sigla("APE3")) pr.apes.add(APE.buscar_por_sigla("APE4")) pr.apes.add(APE.buscar_por_sigla("APE9")) pr.apes.add(APE.buscar_por_sigla("APE11")) pr.apes.add(APE.buscar_por_sigla("APE12")) pr.save() # Poniéndole Competencias al curso pr.competencias.add(Competencia.buscar_por_sigla("HC1")) pr.competencias.add(Competencia.buscar_por_sigla("HC3")) pr.save()
def crear_programa(borrar=True): print("Creando programa") if borrar: Programa.objects.all().delete() pr = Programa() pr.nombre = "Pediatría" pr.codigo = "PEDI" pr.save() # Poniéndole APEs al programa pr.apes.add(APE.buscar_por_sigla("APE1")) pr.apes.add(APE.buscar_por_sigla("APE2")) pr.apes.add(APE.buscar_por_sigla("APE3")) pr.apes.add(APE.buscar_por_sigla("APE4")) pr.apes.add(APE.buscar_por_sigla("APE5")) pr.apes.add(APE.buscar_por_sigla("APE6")) pr.apes.add(APE.buscar_por_sigla("APE7")) pr.apes.add(APE.buscar_por_sigla("APE8")) pr.apes.add(APE.buscar_por_sigla("APE9")) pr.apes.add(APE.buscar_por_sigla("APE10")) pr.apes.add(APE.buscar_por_sigla("APE11")) pr.apes.add(APE.buscar_por_sigla("APE12")) pr.save() # Poniéndole Competencias al programa pr.competencias.add(Competencia.buscar_por_sigla("HC1")) pr.competencias.add(Competencia.buscar_por_sigla("HC2")) pr.competencias.add(Competencia.buscar_por_sigla("HC3")) pr.save()
def test_buscar_por_programa(self): """buscar_por_programa encuentra los grupos de competencias correctos""" grupo1 = GrupoCompetencia.objects.get(sigla="gc") cp1 = Competencia.objects.create(grupo=grupo1, nombre="n1", sigla="cp1", descripcion="d1") cp2 = Competencia.objects.create(grupo=grupo1, nombre="n2", sigla="cp2", descripcion="d2") cp3 = Competencia.objects.create(grupo=grupo1, nombre="n3", sigla="cp3", descripcion="d3") grupo2 = GrupoCompetencia.objects.get(sigla="gc") cp4 = Competencia.objects.create(grupo=grupo2, nombre="n4", sigla="cp4", descripcion="d4") pr1 = Programa.objects.create(nombre="Programa1", codigo="PRO1") pr1.agregar_competencia(cp1) pr1.agregar_competencia(cp2) grupos_1 = Competencia.buscar_por_programa(pr1) self.assertIsNotNone(grupos_1) self.assertIn(grupo1, grupos_1) self.assertNotIn(grupo2, grupos_1) pr2 = Programa.objects.create(nombre="Programa2", codigo="PRO2") pr2.agregar_competencia(cp4) grupos_2 = Competencia.buscar_por_programa(pr1) self.assertIsNotNone(grupos_2) self.assertNotIn(grupo1, grupos_2) self.assertIn(grupo2, grupos_2) pr3 = Programa.objects.create(nombre="Programa3", codigo="PRO3") pr3.agregar_competencia(cp1) pr3.agregar_competencia(cp4) grupos_3 = Competencia.buscar_por_programa(pr1) self.assertIsNotNone(grupos_3) self.assertIn(grupo1, grupos_3) self.assertIn(grupo2, grupos_3)
def crear_competencia_detalles(sigla_grupo, sigla, descripcion): c1 = Competencia() c1.sigla = sigla c1.nombre = descripcion[:min(120, len(descripcion))] c1.descripcion = descripcion c1.grupo = GrupoCompetencia.buscar_por_sigla(sigla_grupo) c1.save()
def test_competencia_curso_detalle_correcto(self): """El llamado a competencia_curso muestra la información correcta de la competencia""" c = Client() response = self.do_login_profesor(c) comp = Competencia.buscar_por_sigla("HC1") id_comp = comp.id id_curso = Curso.buscar_por_codigo_semestre("PEDI-5101", "2020-20").id response = c.get(reverse("competencia_curso", args=[id_comp, id_curso])) self.assertResponseCode(response, 200, "competencia_curso") self.assertTemplateUsed(response, "rubricas/competencias/detalle_competencia.html") self.assertWellFormedHTML(response) # Revisar que aparezca la información de la competencia self.assertContains(response, comp.sigla) self.assertContains(response, comp.nombre) self.assertContains(response, comp.descripcion) # Revisar que aparezca la información del grupo al que peternece la competencia self.assertContains(response, comp.grupo.sigla) self.assertContains(response, comp.grupo.nombre_corto) # Revisar que aparezcan los nombres de las rúbricas de curso # relacionadas con esta competencia rubricas = comp.buscar_rubricas_competencia_curso(id_curso) for rub in rubricas: self.assertContains(response, rub.nombre)
def test_buscar_por_programa(self): """buscar_por_programa encuentra las competencias correctas""" gr = self.crearGrupoCompetencia("gg") cp1 = Competencia.objects.create(grupo=gr, nombre="n1", sigla="cp1", descripcion="d1") cp2 = Competencia.objects.create(grupo=gr, nombre="n2", sigla="cp2", descripcion="d2") cp3 = Competencia.objects.create(grupo=gr, nombre="n3", sigla="cp3", descripcion="d3") pr = Programa.objects.create(nombre="Pediatria", codigo="PEDI") pr.agregar_competencia(cp1) pr.agregar_competencia(cp2) competencias = Competencia.buscar_por_programa(pr) self.assertIsNotNone(competencias) self.assertIn(cp1, competencias) self.assertIn(cp2, competencias) self.assertNotIn(cp3, competencias)
def test_competencia_programa_con_programa_incorrecto(self): """El llamado a competencia_programa genera un error cuando el programa no existe""" c = Client() response = self.do_login_profesor(c) comp = Competencia.buscar_por_sigla("HC1") id_comp = comp.id id_programa = 9999 response = c.get(reverse("competencia_programa", args=[id_comp, id_programa])) self.assertResponseCode(response, 404, "competencia_programa: programa inexistente")
def test_buscar_por_sigla(self): """Si se busca una competencia por sigla, se encuentra""" cp1 = Competencia.objects.get(sigla="cp") cp2 = Competencia.buscar_por_sigla("cp") self.assertIsNotNone( cp1, "La competencia encontrada con GET no debería ser None") self.assertIsNotNone( cp2, "La competencia encontrada con buscar_por_sigla no debería ser None" ) self.assertEqual(cp1.sigla, cp1.sigla, "Las siglas no son las mismas") self.assertEqual(cp2.id, cp2.id, "Los objetos no tienen los mismos ids")
def crear_rubricas(borrar=True): print("Creando rúbricas") if borrar: RubricaSeccion.objects.all().delete() r = RubricaSeccion() r.nombre = "Rúbrica de Enfermería Piso" r.nombre_interno = r.nombre r.descripcion = "Desempeño del residente en rotación según el/la jefe de enfermería del piso" r.comentarios = "Rúbrica de prueba" r.debe_tener_procedimientos = True r.debe_tener_patologias = True r.save() r.programa = Programa.buscar_por_codigo("PEDI") curso = Curso.buscar_por_codigo_semestre("PEDI-5101", "2020-20") r.seccion = Seccion.buscar_por_numero(curso, "1") r.patologias.add(Patologia.buscar_por_codigo("A001")) r.patologias.add(Patologia.buscar_por_codigo("A009")) r.procedimientos.add(Procedimiento.buscar_por_codigo("01.0")) r.procedimientos.add(Procedimiento.buscar_por_codigo("01.0.9")) r.save() icc = ItemCalificacionCurso() icc.nombre = r.nombre + " - Semana 1" icc.peso = 10 icc.rubrica = r icc.curso = curso icc.save() icc = ItemCalificacionCurso() icc.nombre = r.nombre + " - Semana 2" icc.peso = 10 icc.rubrica = r icc.curso = curso icc.save() icc = ItemCalificacionCurso() icc.nombre = r.nombre + " - Semana 3" icc.peso = 10 icc.rubrica = r icc.curso = curso icc.save() ics = ItemCalificacionSeccion() ics.nombre = r.nombre + " - Semana 1" ics.peso = 10 ics.rubrica = r ics.seccion = Seccion.buscar_por_numero(curso, "1") ics.save() ics = ItemCalificacionSeccion() ics.nombre = r.nombre + " - Semana 2" ics.peso = 10 ics.rubrica = r ics.seccion = Seccion.buscar_por_numero(curso, "1") ics.save() ics = ItemCalificacionSeccion() ics.nombre = r.nombre + " - Semana 3" ics.peso = 10 ics.rubrica = r ics.seccion = Seccion.buscar_por_numero(curso, "1") ics.save() print("Creando criterios") Criterio.objects.all().delete() cr1 = Criterio() cr1.nombre_interno = "Historia clínica" cr1.descripcion = "Hace una historia clínica completa y detallada del paciente pediátrico. Identifica y prioriza los diagnósticos diferenciales, conoce y usa adecuadamente las pruebas diagnosticas indicadas." cr1.rubrica = r cr1.numero = 1 cr1.save() cr1.apes.add(APE.buscar_por_sigla("APE1")) cr1.apes.add(APE.buscar_por_sigla("APE2")) cr1.apes.add(APE.buscar_por_sigla("APE3")) cr1.competencias.add(Competencia.buscar_por_sigla("HC1")) cr1.competencias.add(Competencia.buscar_por_sigla("HC3")) cr1.save() n1 = NivelCriterio() n1.nombre = "No está preparado" n1.descripcion = "Información es insuficiente o exhaustiva. A veces omite datos relevantes o se desvía del problema principal. El examen físico es incompleto u omite detalles relevantes para el problema principal. " n1.puntos = 0 n1.numero = 1 n1.criterio = cr1 n1.save() n2 = NivelCriterio() n2.nombre = "Aceptable" n2.descripcion = "La información es completa, cronológica y estructurada, describe el estado del paciente y los hallazgos principales. Conoce e interpreta las pruebas diagnosticas esenciales. Tiene en cuenta riesgos, beneficios y las preferencias del paciente." n2.puntos = 0 n2.numero = 2 n2.criterio = cr1 n2.save() n3 = NivelCriterio() n3.nombre = "Lo hace bien" n3.descripcion = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book." n3.puntos = 8 n3.numero = 3 n3.criterio = cr1 n3.save() n4 = NivelCriterio() n4.nombre = "Ejemplar" n4.descripcion = "La información es completa, cronológica y estructurada, describe el estado del paciente y los hallazgos principales, hace un plan de estudio razonado, coherente. Conoce, prioriza e interpreta las pruebas diagnosticas, las usa para el diagnostico, gravedad y seguimiento. Tiene en cuenta riesgos, beneficios y las preferencias del paciente." n4.puntos = 10 n4.numero = 4 n4.criterio = cr1 n4.save() cr2 = Criterio() cr2.nombre_interno = "Registro valores" cr2.descripcion = "Toma valores antropométricos, analiza percentil; valora el estado nutricional, la alimentación, salud bucal los hábitos y practica, hace evaluación ocular, auditiva, identificación sexual." cr2.rubrica = r cr2.numero = 2 cr2.save() cr2.apes.add(APE.buscar_por_sigla("APE1")) cr2.apes.add(APE.buscar_por_sigla("APE2")) cr2.apes.add(APE.buscar_por_sigla("APE3")) cr2.apes.add(APE.buscar_por_sigla("APE4")) cr2.apes.add(APE.buscar_por_sigla("APE7")) cr2.competencias.add(Competencia.buscar_por_sigla("HC1")) cr2.competencias.add(Competencia.buscar_por_sigla("HC2")) cr2.save() n1 = NivelCriterio() n1.nombre = "No está preparado" n1.descripcion = "Falla en la evaluación de valores antropométricos y percentil. No tiene en cuenta o es incompleta la valoración del estado nutricional, la alimentación, salud bucal, ocular, auditiva, identificación sexual." n1.puntos = 0 n1.numero = 1 n1.criterio = cr2 n1.save() n2 = NivelCriterio() n2.nombre = "Aceptable" n2.descripcion = "Tiene en cuenta valores antropométricos, analiza percentil; hace una valoración aceptable del estado nutricional, la alimentación, salud boca, ocular, auditiva, identificación sexual." n2.puntos = 0 n2.numero = 2 n2.criterio = cr2 n2.save() n3 = NivelCriterio() n3.nombre = "Lo hace bien" n3.descripcion = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book." n3.puntos = 8 n3.numero = 3 n3.criterio = cr2 n3.save() n4 = NivelCriterio() n4.nombre = "Ejemplar" n4.descripcion = "Toma valores antropométricos, analiza percentil; valora el estado de salud: nutricional, la alimentación, salud bucal los hábitos y practica, hace evaluación ocular (movimiento, fijación, etc.), auditiva, identificación sexual." n4.puntos = 10 n4.numero = 4 n4.criterio = cr2 n4.save()
def test_buscar_por_programa_sin_competencias(self): """buscar_por_programa retorna una lista vacía si el programa no tiene competencias""" pr = Programa.objects.create(nombre="Pediatria", codigo="PEDI") competencias = Competencia.buscar_por_programa(pr) self.assertIsNotNone(competencias) self.assertEquals(0, len(competencias))
def test_buscar_por_sigla_inexistente(self): """Si se busca un APE usando una sigla que no existe, retorna None""" cc = Competencia.buscar_por_sigla("CC") self.assertIsNone(cc, "La competencia retornada debería ser None")
def crear_estructura_muestra(borrar=True): print("Creando programa muestra (DEMO)") if borrar: viejo = Programa.buscar_por_codigo("DEMO") if viejo is not None: cursos = viejo.consultar_cursos_programa() for curso in cursos: curso.delete() viejo.delete() pr = Programa() pr.nombre = "Programa muestra" pr.codigo = "DEMO" pr.save() # Poniéndole APEs al programa pr.apes.add(APE.buscar_por_sigla("APE1")) pr.apes.add(APE.buscar_por_sigla("APE2")) pr.apes.add(APE.buscar_por_sigla("APE3")) pr.apes.add(APE.buscar_por_sigla("APE4")) pr.save() # Poniéndole Competencias al programa pr.competencias.add(Competencia.buscar_por_sigla("CPP1")) pr.competencias.add(Competencia.buscar_por_sigla("CPP1")) pr.competencias.add(Competencia.buscar_por_sigla("CPP4")) pr.competencias.add(Competencia.buscar_por_sigla("HC1")) pr.competencias.add(Competencia.buscar_por_sigla("HC2")) pr.competencias.add(Competencia.buscar_por_sigla("HC3")) pr.competencias.add(Competencia.buscar_por_sigla("ABP1")) pr.competencias.add(Competencia.buscar_por_sigla("ABP2")) pr.competencias.add(Competencia.buscar_por_sigla("ABP3")) pr.competencias.add(Competencia.buscar_por_sigla("ABP4")) pr.competencias.add(Competencia.buscar_por_sigla("ABP5")) pr.competencias.add(Competencia.buscar_por_sigla("ABP6")) pr.competencias.add(Competencia.buscar_por_sigla("C1")) pr.competencias.add(Competencia.buscar_por_sigla("C2")) pr.competencias.add(Competencia.buscar_por_sigla("C4")) pr.competencias.add(Competencia.buscar_por_sigla("C6")) pr.competencias.add(Competencia.buscar_por_sigla("C7")) pr.save() print("Creando cursos para DEMO") c1 = crear_curso_programa("DEMO-0001", "Curso Muestra I", "2020-20", "DEMO", pr.consultar_apes(), pr.consultar_competencias()) c2 = crear_curso_programa("DEMO-0002", "Curso Muestra II", "2020-20", "DEMO", pr.consultar_apes(), pr.consultar_competencias()) c3 = crear_curso_programa("DEMO-0003", "Curso Muestra III", "2020-20", "DEMO", pr.consultar_apes(), pr.consultar_competencias()) c4 = crear_curso_programa("DEMO-0004", "Curso Muestra IV", "2020-20", "DEMO", pr.consultar_apes(), pr.consultar_competencias())