GraphGists

Un día en el hospital

GraphGist creado para el trabajo en grupo sobre Neo4J de la asignatura Repositorios de Información. Representa las consultas médicas realizadas por médicos durante un día en el hospital.

Autores:

  • Pablo Álvarez Álvarez

  • Jesus Fdez. Velasco

  • Joaquín Ceballos Gómez

grafo

Un día en el hospital

Elementos del dominio y sus relaciones

Médico

Atiende a pacientes a una hora en concreto, además puede ser financiado por una farmacéutica.

Paciente

Padece enfermedades, es atendido por médicos.

Enfermedad

Es curada por una medicina en concreto.

Medicina

Es fabricada por farmacéuticas, cura enfermedades, además puede ser incompatible con otras medicinas.

Farmacéutica

Fabrica medicinal, eventualmente puede financiar trabajos de algún médico opr un importe determinado.

Creación del grafo

Consultas

Consulta 1

Listar todos los médicos Cuyo nombre comience por una subcadena dada

pongamos por ejemplo Fe

match (n:medico) where n.nombre starts with "Fe" return n.nombre, n.apellido

Consulta 2

Número de pacientes atendidos por el médico introducido

pongamos el médico de nombre Federica y apellidos SANZ SANZ

match (n:medico)-[r:ATIENDE_A]->(p:paciente) where n.nombre = "Federica" and n.apellido = "SANZ SANZ" return count(r)

Consulta 3

Listar todos los médicos que hayan atendido a un número mínimo de pacientes

digamos 5 pacientes

match (n:medico)-[r:ATIENDE_A]->(p:paciente)
with n.nombre as nombre, n.apellido as apellido, count(r) as numero
where numero >= 5
return nombre, apellido, numero

Consulta 4

Listar todos los paciente que padecen dos enfermedades las cuales son curadas por medicinas que son incompatibles entre si. Listar las enfermedades y medicinas.

match (p:paciente)-[:PADECE]->(e:enfermedad), (p)-[:PADECE]->(n:enfermedad),
(e)-[:CURADA_POR]->(m:medicina), (n)-[:CURADA_POR]->(k:medicina),
(m)<-[:INCOMPATIBLE_CON]->(k)
return DISTINCT p.nombre as nombre, p.apellido as apellido, e.nombre as enfermedad, m.nombre as medicina

Consulta 5

Listar todas las personas en riesgo de contraer Ébola.Nivel máximo de profundidad = 5, siendo el nivel 0 los pacientes enfermos de ébola

Una persona está en riesgo cuando ha estado en contacto con un enfermo, o con una persona que ha estado en contacto con una persona en riesgo.

MATCH (p:paciente)-[:PADECE]-(e:enfermedad)
WHERE e.nombre = 'Ebola'
WITH p AS enRiesgo
MATCH (enRiesgo)-[:ATIENDE_A*0..5]-(otro)
WHERE otro:paciente or otro:medico
RETURN DISTINCT labels(otro) AS tipo, otro.nombre AS nombre, otro.apellido AS apellido

Consulta 6

Listar medicos que atienden a pacientes cuya enfermedad es curada por la medicina fabricada por la farmaceutica que financia al medico, siempre que el importe de la financiación sea superior a la media de financiaciones de la farmaceutica.

match (f:farmaceutica)-[r:FINANCIA_A]->()
with avg(r.importe) as media, f as farma
MATCH (m:medico)-[:ATIENDE_A]->(:paciente)-[:PADECE]->(:enfermedad)-[:CURADA_POR]-(:medicina)-[:FABRICADA_POR]->(farma)-[r:FINANCIA_A]->(m)
where r.importe > media
RETURN DISTINCT m.nombre as nombre, m.apellido as apellido, farma.nombre as farmaceutica, r.importe as importe, media as media

Es tu turno!

Realiza las consultas al grafo que consideres interesantes