If you want them collected and don't care which Persona_Contracto is associated with which Datos.
MATCH (f:Formulario{Nombre:'PS2115'})-[:Datos]->(c)
OPTIONAL MATCH(c)-[:Contacto]->(d)
WITH f, collect(properties(c)) as datos, collect(properties(d)) as persona_contacto
RETURN{Proyecto: properties(f), Datos: datos, Persona_Contacto: persona_contacto}
If you want to the persona_contacto associated with its dates (query assumes zero or one d nodes per c node, and I didn't know what to call label XX):
MATCH (f:Formulario{Nombre:'PS2115'})-[:Datos]->(c)
CALL {
WITH c
OPTIONAL MATCH(c)-[:Contacto]->(d)
RETURN {datos: properties(c), persona_contacto: properties(d)} as datos
}
RETURN{Proyecto: properties(f), XX: collect(datos)}