Saltar al contenido
parley.

Guía

Repartir la casa de los padres entre hermanos, cuando cada uno tiene un límite que no quiere decir en voz alta.

Tres hermanos heredan una casa. Una quiere quedársela. Otro necesita el dinero pronto. La tercera vive en ella desde hace años. Cada uno tiene una condición que no negocia, y ninguno quiere ser el primero en decirla, porque decirla es perder fuerza. La conversación se atasca ahí. Lo mismo pasa entre copropietarios de un piso o entre socios que se separan. Esta página muestra cómo Parley, una herramienta de código abierto, toma una lista de opciones que todos ven, los límites y preferencias que cada uno declara por separado, y devuelve, si existe, la opción que no cruza el límite de nadie y deja mejor al que peor queda, con un registro cuyo resultado puede recalcular, con el código abierto, quien tenga el archivo.

El caso de abajo es ilustrativo. No es una familia real y nadie ha usado Parley todavía para una herencia real. Los números salieron del motor de Parley tal cual, salvo el redondeo de las puntuaciones, ejecutado sobre el código del repositorio. La misma guía en inglés, con otro caso: a fair group decision when everyone has private limits.

1. Las opciones, a la vista de todos

La lista de opciones es lo único que todos tienen que ver igual, así que se escribe en un archivo que los tres miran juntos. La casa vale 300.000 € según una tasación independiente; a cada hermano le corresponde un tercio. Cinco opciones sobre la mesa, cada una descrita con los mismos datos:

Las cinco opciones del caso con sus datos
idquien_viveefectivo_por_hermano €meses_hasta_cobrarmeses_para_mudarsetasacion_independientecondominio_se_disuelve
vendernadie100.00099sísí
ana-compraAna100.00066sísí
ana-compra-rebajaAna75.00033nosí
clara-alquilaClara0060síno
clara-gratisClara0060nono
  • vender: se vende en el mercado y se reparte a tercios. Cobran los tres en unos nueve meses.
  • ana-compra: Ana se queda la casa y paga a los otros dos su tercio según la tasación.
  • ana-compra-rebaja: Ana se queda la casa a "precio de familia", un 25 % por debajo, sin tasación, y Clara se muda en tres meses.
  • clara-alquila: Clara sigue en la casa pagando a sus hermanos un alquiler fijado por tasación. Nadie cobra su tercio; la copropiedad se mantiene.
  • clara-gratis: Clara sigue en la casa sin pagar nada y la copropiedad se mantiene.

2. Cada uno declara sus límites por separado

Cada persona tiene una hoja privada con dos partes. Las líneas rojas son reglas que una opción tiene que cumplir. Las preferencias tienen un peso, y la puntuación de una opción es la media ponderada de cuánto cumple cada preferencia (una preferencia numérica da crédito parcial), entre 0 y 1. Frente a los demás, la hoja no sale de su dueño: lo que se publica es la respuesta a cada opción.

Hay un cuarto participante, Regla neutral. No es una persona: es una regla que los tres acordaron antes de empezar, "todo precio sale de una tasación independiente", escrita como una línea roja más. No tiene preferencias, así que puntúa todas las opciones con 0,5. Las cuatro hojas de este caso se escribieron para esta página y por eso se pueden mostrar. En un uso real cada uno ve solo la suya.

Ana (quiere quedarse la casa)
  línea roja >   condominio_se_disuelve == true
  prefiere >     quien_vive Ana                       peso 2
  prefiere >     efectivo_por_hermano más bajo        peso 1   (0 a 100000)

Bruno (necesita el dinero)
  línea roja >   efectivo_por_hermano >= 90000
  prefiere >     meses_hasta_cobrar más bajo          peso 1   (0 a 12)
  prefiere >     efectivo_por_hermano más alto        peso 1   (0 a 100000)

Clara (vive en la casa)
  línea roja >   meses_para_mudarse >= 6
  prefiere >     quien_vive Clara                     peso 2
  prefiere >     tasacion_independiente true          peso 1

Regla neutral
  línea roja >   tasacion_independiente == true
  (sin preferencias: puntúa 0,5 siempre)

Ana no acepta seguir siendo copropietaria sin fecha. Bruno no acepta menos de 90.000 €. Clara no acepta tener que mudarse en menos de seis meses. Nada de esto se lo dicen entre ellos. Todo lo demás son preferencias, y una preferencia solo ordena las opciones que han pasado las líneas rojas de todos.

3. Lo que guarda el registro, y qué gana

El motor pregunta a cada hoja por cada opción y guarda solo la respuesta (más el nombre de quien responde): si la acepta (acceptable), la puntuación (score) y la palabra ok ored-line (reason). Estas son las cinco entradas del registro de esta ejecución, con las puntuaciones redondeadas a cuatro decimales para mostrarlas (el registro guarda el valor completo y el hash se calcula sobre ese valor): 0,3333 es un tercio y 0,6667 son dos tercios.

vender
  Ana            acceptable=true   reason="ok"        score=0.0000
  Bruno          acceptable=true   reason="ok"        score=0.6250
  Clara          acceptable=true   reason="ok"        score=0.3333
  Regla neutral  acceptable=true   reason="ok"        score=0.5000

ana-compra
  Ana            acceptable=true   reason="ok"        score=0.6667
  Bruno          acceptable=true   reason="ok"        score=0.7500
  Clara          acceptable=true   reason="ok"        score=0.3333
  Regla neutral  acceptable=true   reason="ok"        score=0.5000

ana-compra-rebaja
  Ana            acceptable=true   reason="ok"        score=0.7500
  Bruno          acceptable=false  reason="red-line"  score=0.7500
  Clara          acceptable=false  reason="red-line"  score=0.0000
  Regla neutral  acceptable=false  reason="red-line"  score=0.5000

clara-alquila
  Ana            acceptable=false  reason="red-line"  score=0.3333
  Bruno          acceptable=false  reason="red-line"  score=0.5000
  Clara          acceptable=true   reason="ok"        score=1.0000
  Regla neutral  acceptable=true   reason="ok"        score=0.5000

clara-gratis
  Ana            acceptable=false  reason="red-line"  score=0.3333
  Bruno          acceptable=false  reason="red-line"  score=0.5000
  Clara          acceptable=true   reason="ok"        score=0.6667
  Regla neutral  acceptable=false  reason="red-line"  score=0.5000

Tres opciones quedan fuera. ana-compra-rebaja, la tentadora, cruza líneas de Bruno, de Clara y de la regla neutral.clara-alquila cruza líneas de Ana y de Bruno.clara-gratis cruza líneas de Ana, de Bruno y de la regla. El registro dice red-line y no dice cuál. Sí muestra quién vetó qué, y las puntuaciones al lado.

Quedan dos. En vender la puntuación más baja es la de Ana, 0. En ana-compra la más baja es la de Clara, 0,3333. La opción que deja mejor al menos contento esana-compra, y esa es la decisión. Sumando puntuaciones,clara-alquila habría ganado con 2,3333 frente a 2,25; no gana porque cruza dos líneas rojas, y una línea roja se mira antes que cualquier suma.

El resultado y el hash del registro, tal como los devolvió el motor:

status:   agreed
decision: {"id": "ana-compra", "quien_vive": "Ana", "efectivo_por_hermano": 100000,
           "meses_hasta_cobrar": 6, "meses_para_mudarse": 6,
           "tasacion_independiente": true, "condominio_se_disuelve": true}
hash:     4645b2af861230708adf05fff11624972e5a6952e4f4367313c12d446ced6364

verify_outcome (recalculado desde los veredictos del registro):  True
verify_non_betrayal (cada hoja contra la decisión, en su lado):
  Ana True   Bruno True   Clara True   Regla neutral True

Para repetir este cálculo en su ordenador, con una copia del repositorio y Python 3.10 o superior (desde la carpeta del repositorio; si no tiene el paquete instalado, anteponga PYTHONPATH=.):

python3 -c "from parley.spec import DecisionSpec; r = DecisionSpec.load('examples/cases/herencia-hermanos.json').run(); print(r.status, r.decision['id'], r.transcript.hash())"

El hash es un SHA-256 sobre el registro en JSON canónico. Si alguien cambia después un veredicto o la decisión, el hash deja de coincidir para cualquiera que guardó el original. verify_outcome vuelve a calcular la ganadora solo con los veredictos del registro, sin ninguna hoja. La lista de participantes la escribe quien ejecuta el motor: hay que comprobar que coincide con quienes de verdad participaron.verify_non_betrayal lo ejecuta cada persona en su lado, con su propia hoja, y responde si la decisión respeta sus líneas rojas, sin enseñar la hoja a nadie.

Qué significa justo aquí

Tres reglas, cada una escrita en parley/consensus.py y no dejada al criterio de nadie:

Las tres reglas que el motor aplica a una decisión de grupo
Un límite es un vetoUna línea roja es una regla sobre un dato de la opción, por ejemplo efectivo_por_hermano >= 90000. Una opción que cruza la línea roja de cualquiera queda fuera, piensen lo que piensen los demás. Nunca se compensa con una preferencia. La declara cada persona: el motor aplica lo que se escribe y no distingue un límite real de uno táctico.
Se eleva al menos contentoEntre las opciones que nadie ha vetado, las preferencias de cada persona dan una puntuación de 0 a 1. Gana la opción cuya puntuación más baja es la más alta. En caso de empate, gana la de mayor suma. No es una votación ni una suma.
Sin opción no hay decisiónSi todas las opciones cruzan la línea roja de alguien, el resultado es un bloqueo, y así queda escrito en el registro. El motor nunca elige la opción menos mala por encima del límite de alguien.

Lo que esto no hace

  • Los límites los declara cada uno. El motor aplica lo que cada persona escribe. No distingue un límite real de uno táctico, y quien exagera una línea roja para empujar el resultado no es detectado.SECURITY.md lo deja como línea de investigación abierta.
  • Las puntuaciones quedan a la vista. El registro no guarda ninguna regla, pero sí la puntuación de cada persona para cada opción y quién vetó qué. Con pocas opciones, ese patrón permite adivinar la regla que hay detrás. Lo que queda fuera del registro son las reglas, no el orden de las preferencias.
  • No es asesoramiento legal. Parley no sustituye a un notario, a un abogado ni a un contador-partidor. No calcula valoraciones, impuestos ni cuotas: elige entre las opciones que ustedes escriben, con los números que ustedes ponen. Lo que deja es un registro de qué opciones había, qué veredicto dio cada uno y qué aceptó cada uno.
  • El recibo no lleva firma por defecto. El hash hace visible un cambio posterior a quien guardó el hash original; no dice quién aceptó. La lista de participantes la escribe el mismo proceso que escribe el registro.
  • Un teclado es un proceso. En el flujo de pasar el teclado, las cuatro hojas viven en el mismo programa en la misma máquina. La privacidad es frente a los demás hermanos y frente al registro, no frente a quien maneja esa máquina.
  • Software en fase alfa. Versión 0.2, código abierto bajo Apache-2.0. La demo de este sitio está en inglés y reproduce ejecuciones ya calculadas del mismo motor; no ejecuta nada en el navegador.

Preguntas

¿Qué tenemos que preparar para probarlo con mis hermanos?

Tres cosas. Una lista de opciones con números que todos vean igual, en un archivo JSON como examples/cases/herencia-hermanos.json, que es el caso de esta página con sus cuatro hojas. Un ordenador con Python 3.10 o superior y una copia del repositorio, que es de código abierto. Y un rato en el que cada hermano pueda escribir sus límites y preferencias sin que los demás miren la pantalla. El guion examples/real_decision.py pasa el teclado de persona en persona, ejecuta el motor y, si se le da --receipt con una ruta, escribe el recibo. Con la opción --manual no hace falta ningún modelo de lenguaje ni conexión, pero ese modo solo admite preferencias del tipo «prefiero este valor, con este peso»; las preferencias numéricas de esta página (más bajo, más alto, con rango) se cargan desde el archivo del caso.

¿Qué ve cada hermano de los demás?

Por cada opción y cada persona, el registro guarda tres cosas: si la acepta o no, una puntuación entre 0 y 1, y la palabra ok o red-line (más el nombre de quien responde y, si se usa --sign, una firma). No guarda la regla que hay detrás. Pero las puntuaciones y los vetos son visibles para todos los que lean el registro. Con cinco opciones, si Clara es la única que acepta las dos opciones en las que ella se queda en la casa, los demás pueden adivinar su regla. SECURITY.md lo reconoce como una limitación conocida.

¿Qué pasa si ninguna opción pasa los límites de todos?

El resultado es un bloqueo: el registro guarda todos los veredictos y el bloqueo, y la decisión queda vacía. El motor no elige una opción por encima del límite de nadie para evitar el bloqueo. La salida es cambiar la lista de opciones: añadir una, cambiar los números, o que alguien afloje una regla que puso, y volver a ejecutar.

¿Tiene esto que ver con la ley que obliga a negociar antes de ir a juicio?

La Ley Orgánica 1/2025, publicada en el BOE el 3 de enero de 2025 y en vigor desde el 3 de abril de 2025, exige en el orden civil, con carácter general, intentar antes un medio adecuado de solución de controversias para poder presentar una demanda, con las excepciones que enumera la propia ley. Esta página no afirma que un registro de Parley sirva para cumplir ese requisito. Si se aplica a su caso y cómo acreditarlo es una pregunta para un abogado.

Texto de la Ley Orgánica 1/2025 en el BOE. El guion del flujo con personas reales: examples/real_decision.py.

Pruébelo con su propio caso.

La demo reproduce ejecuciones ya calculadas de este mismo motor, sin necesidad de darse de alta. Si tiene un reparto real entre manos, una herencia, un piso en común o una sociedad que se separa, escríbanos sin nombres ni documentos y vemos si su caso encaja.

Volver a la página principal (en inglés) · La guía en inglés, con otro caso