# Lógica condicional

Muestra, oculta, requiere y ramifica según las respuestas.

## Lógica condicional

Los bloques de lógica reaccionan a lo que introduce un respondente: muestran u ocultan cualquier bloque, saltan a páginas, bloquean el envío o calculan valores. Combina reglas simples para crear ramificaciones sofisticadas sin código.

<h2 id="what-logic-can-do">Qué puede hacer la lógica</h2>

<p>
  Cada bloque de lógica tiene una o más <strong>reglas</strong>. Cada regla combina un <em>grupo de condiciones</em> (¿cuándo debe
  activarse?) con una o más <em>acciones</em> (¿qué debe ocurrir?). Hay nueve tipos de acciones disponibles:
</p>

<h2 id="adding-a-logic-block">Añadir un bloque de lógica</h2>

<p>
  Un bloque de lógica es un elemento del documento — se coloca en el lienzo entre preguntas, igual que un encabezado o una imagen. Puedes
  colocarlo en cualquier lugar: entre dos campos en la misma página, al inicio de una página o justo antes de un salto de página.
</p>

<h2 id="conditions">Condiciones</h2>

<p>
  Las condiciones son el lado <strong>When</strong> de una regla. Cada condición elige un <strong>campo</strong>, aplica un{' '}
  <strong>operador</strong> y a menudo compara con un <strong>valor</strong>. El selector de campos agrupa lo que puedes observar:{' '}
  <strong>Questions</strong>, <strong>Hidden Fields</strong>, <strong>Calculated Fields</strong> y <strong>Metadata</strong> (hoy en día, el
  idioma del respondente).
</p>

<h3 id="all-or-any">All o Any</h3>

<p>En cuanto una regla tiene dos o más condiciones, aparece un interruptor en la parte superior de la sección When:</p>

<ul>
  <li>
    <strong>All</strong> — todas las condiciones deben ser verdaderas para que la regla se active. Las filas se leen como "y".
  </li>
  <li>
    <strong>Any</strong> — basta con que una condición sea verdadera. Las filas se leen como "o".
  </li>
</ul>

<h3 id="sets-of-conditions">Conjuntos de condiciones</h3>

<p>
  <strong>Add a set of conditions</strong> anida un segundo grupo dentro del primero, un nivel de profundidad, con su propio interruptor
  All/Any. Esto cubre lógica compuesta como "plan <strong>is</strong> Pro <em>y</em> (country <strong>is</strong> Norway <em>o</em> country{' '}
  <strong>is</strong> Sweden)". Un conjunto solo contiene condiciones — no puede contener otro conjunto.
</p>

> ⚠️ **Una pregunta oculta no tiene valor**
> <p>
>     Si la lógica oculta una pregunta, la respuesta que pueda tener ya guardada no cuenta para nada — ni en condiciones, ni en cálculos, ni
>     en el importe del pago, ni en la respuesta almacenada. La respuesta solo vuelve si la pregunta se hace visible de nuevo. Lo mismo vale
>     para cada pregunta dentro de una fila, columna o grupo repetible ocultos, y para una opción elegida que la lógica oculta. Una página que
>     las reglas Set next page se saltan también cuenta como oculta: sus preguntas no son obligatorias y lo que se respondió allí se descarta.
>     Los <em>campos</em> ocultos son lo contrario: siempre conservan su valor.
>   </p>

> 💡 **Mantén la legibilidad**
> <p>
>     Si un bloque de lógica te parece demasiado complejo, considera dividir la lógica en varios bloques o reestructurar las páginas de tu
>     formulario.
>   </p>

<h2 id="operators-reference">Referencia de operadores</h2>

<p>
  La lista de operadores la decide el campo que elegiste — solo ves los que ese campo admite. Debajo, cada encabezado nombra el conjunto
  exacto.
</p>

<h3 id="text-text-input-text-area-and-text-calculated-fields">Texto (Text Input, Text Area y campos calculados de texto)</h3>

<p>
  Toda comparación de texto ignora mayúsculas y minúsculas y los espacios al principio y al final, así que <code>x@Competitor.com</code>{' '}
  termina en <code>@competitor.com</code>.
</p>

<p>Los demás campos de tipo texto ofrecen un conjunto más reducido, así que elige el tipo que se ajuste a cómo necesitas comparar:</p>

<h3 id="numeric-number-star-rating-linear-scale-numeric-hidden-and-calculated-fields">
  Numérico (Number, Star Rating, escala lineal, campos ocultos y calculados numéricos)
</h3>

<h3 id="checkboxes-and-picture-choice">Checkboxes y picture choice</h3>

<h3 id="dropdown-and-radio-buttons-single-select">Dropdown y Radio Buttons (selección única)</h3>

<h3 id="toggle-switch-and-boolean-calculated-fields">Toggle Switch (y campos calculados booleanos)</h3>

<h3 id="signature">Signature</h3>

<h3 id="file-upload">File Upload</h3>

<h3 id="date-picker-and-time-picker">Date Picker y Time Picker</h3>

<h3 id="ranking">Ranking</h3>

<h3 id="matrix--grid">Matrix / Grid</h3>

<h3 id="payment">Payment</h3>

<h3 id="fields-you-cannot-watch">Campos que no puedes observar</h3>

<p>
  <strong>Schedule appointment</strong> y <strong>Documents</strong> pueden ser destinos de visibilidad pero nunca fuentes de condición. Una
  reserva se adjunta a la respuesta en lugar de almacenarse como una respuesta ordinaria, y un bloque Documents no recoge ninguna respuesta.
  Usa respuestas de calificación anteriores para mostrar u ocultar cualquiera de los dos. Toda pregunta Schedule appointment visible debe
  reservarse antes del envío; una oculta no lo bloquea. Consulta{' '}
  <a href="/es/integrations/cal-com#logic">Programación de Cal.com con lógica</a>.
</p>

<h2 id="targeting">Destino</h2>

<p>
  Cada acción necesita un <strong>destino</strong> — el elemento sobre el que actúa. El destino depende del tipo de acción:
</p>

<p>
  Show y Hide van más allá de las preguntas. Apunta a cualquier bloque del lienzo — un párrafo, encabezado, imagen o contenedor de diseño —
  para mostrar una nota que estaba oculta por defecto u ocultar contenido cuando deja de ser relevante. También pueden apuntar a opciones
  individuales dentro de un campo de selección, no solo a la pregunta completa. Primero oculta un bloque desde el menú del bloque y luego
  escribe una regla para mostrarlo.
</p>

<h2 id="how-rules-combine">Cómo se combinan varias reglas</h2>

<p>
  Cada regla es independiente, y todas se evalúan a la vez. Las reglas se leen de arriba abajo, a través de los bloques de lógica, en el
  orden del documento. Cómo se combinan varias reglas sobre un mismo destino depende de la acción.
</p>

<p>
  Así puedes apuntar varias reglas a un mismo bloque sin que se peleen entre ellas. Un formulario de comentarios tiene una pregunta de Radio
  Buttons — "¿En qué podemos ayudarte?" — con cuatro opciones, y un campo de email "¿Podemos contactarte?" oculto por defecto. Cuatro reglas
  muestran con <strong>Show</strong> ese mismo campo de email (además de su propia pregunta de seguimiento) según su opción. El campo de
  email aparece sin importar qué opción se elija, y permanece oculto solo si ninguna coincide.
</p>

> 💡 **A menudo basta una sola regla**
> <p>
>     Para mostrar un bloque ante varias respuestas, una regla con <strong>Any</strong> y una condición por respuesta — o una única condición{' '}
>     <strong>is not empty</strong> para cubrirlas todas — es más fácil de leer que cuatro reglas. Recurre a varias reglas cuando cada opción
>     también necesite su propio seguimiento distinto.
>   </p>

<h3 id="conflicting-rules">Reglas en conflicto</h3>

<p>
  Cuando dos reglas discrepan sobre el mismo destino — una hace <strong>Show</strong> en un bloque mientras otra hace <strong>Hide</strong>,
  o una hace un campo obligatorio mientras otra lo hace opcional — y ambas condiciones coinciden a la vez,{' '}
  <strong>gana la primera regla</strong>. La regla posterior que pierde se marca en el editor: "This action never applies — an earlier rule
  already controls its target. Rule order decides: the first rule wins."
</p>

<p>
  Una excepción de orden: una regla cuya condición lee un campo calculado se ejecuta después de la regla que lo escribe, sea cual sea el
  orden del documento, así que una puntuación siempre se calcula antes de que algo se ramifique según ella. Las reglas que se escriben unas
  a otras en bucle en sus campos calculados generan una advertencia de publicación que nombra la cadena — rompe el bucle para que los
  valores se resuelvan de forma predecible.
</p>

<h3 id="hidden-and-required">Oculto gana a obligatorio</h3>

<p>
  Una pregunta que termina oculta nunca es obligatoria, ya sea porque una regla la ocultó o porque se ocultó desde el menú del bloque sin
  ninguna regla que la revele. El asterisco desaparece y el envío no se bloquea — de lo contrario, un respondente podría quedarse bloqueado
  fuera de un formulario por un campo que no puede ver.
</p>

<h2 id="common-patterns">Patrones comunes</h2>

<h3 id="show-a-follow-up-question-based-on-a-previous-answer">Mostrar una pregunta de seguimiento basada en una respuesta anterior</h3>

<p>
  Una encuesta de satisfacción pregunta "¿Cómo valorarías tu experiencia?" con un Star Rating del 1 al 5. Un bloque de lógica debajo usa la
  condición "rating is less than or equal to 3" con la acción <strong>Show</strong> apuntando a un campo Text Area que pregunta "¿Qué
  podríamos mejorar?" Los respondentes que puntúan 4 o 5 nunca ven la pregunta de seguimiento.
</p>

<h3 id="reveal-a-message-when-an-option-is-picked">Mostrar un mensaje cuando se elige una opción</h3>

<p>
  Un formulario de registro tiene una pregunta de Radio Buttons: "¿Qué plan se adapta mejor a ti?" Debajo hay un párrafo — "¡Buena elección!
  Nuestro plan Pro incluye soporte prioritario." — oculto por defecto con <strong>Hide</strong> del menú del bloque. Un bloque de lógica lo
  muestra: si plan <strong>is</strong> "Pro", <strong>Show</strong> el párrafo. La nota de ánimo aparece solo para quienes eligen Pro y
  permanece oculta para los demás.
</p>

<h3 id="branch-to-different-pages-based-on-a-selection">Ramificar a diferentes páginas según una selección</h3>

<p>
  Un formulario de registro para un evento tiene una pregunta de Radio Buttons: "¿Asistes en persona o de forma remota?" Siguen dos bloques
  de lógica:
</p>

<ul>
  <li>
    <strong>Regla 1</strong> — condición: attendance <strong>is</strong> "In person", acción: <strong>Set next page</strong> "Venue
    details".
  </li>
  <li>
    <strong>Regla 2</strong> — condición: attendance <strong>is</strong> "Remote", acción: <strong>Set next page</strong> "Streaming setup".
  </li>
  <li>
    <strong>Regla 3</strong> — condición: arrival time <strong>is not empty</strong>, acción: <strong>Set next page</strong> "Confirmation".
    Arrival time es una pregunta obligatoria en "Venue details".
  </li>
</ul>

<p>
  Las reglas 1 y 2 leen la pregunta attendance, así que actúan cuando el respondente sale de su página. Después, Siguiente continúa en el
  orden de las páginas. La regla 3 lee una pregunta en "Venue details", así que actúa cuando el respondente sale de esa página. Quienes
  asisten en persona se saltan entonces "Streaming setup". Cada ruta recoge solo la información relevante, y ambas convergen en una página
  compartida de "Confirmation".
</p>

<h3 id="calculate-a-score-and-branch-on-it">Calcular una puntuación y ramificar según ella</h3>

<p>
  Un formulario de calificación de leads tiene tres preguntas de Star Rating: presupuesto, plazo y autoridad. Un campo calculado llamado
  "Lead score" usa un bloque de lógica con la acción <strong>Calculate value</strong> para sumar el valor de cada valoración. Un segundo
  bloque de lógica lee el campo calculado: si Lead score <strong>is greater than 12</strong>, <strong>Set next page</strong> "Priority
  follow-up"; de lo contrario, salta a la página de confirmación estándar.
</p>

<h3 id="react-to-a-hidden-field-value">Reaccionar al valor de un campo oculto</h3>

<p>
  La URL rellena un campo oculto llamado <strong>plan</strong> (p. ej. <code>?plan=enterprise</code>). Un bloque de lógica comprueba: si
  plan <strong>is</strong> "enterprise", <strong>Show</strong> la pregunta "Dedicated account manager" y <strong>Make required</strong> el
  campo "Company size". Los respondentes del nivel gratuito nunca ven estas preguntas.
</p>

<h3 id="gate-submission-on-a-calculated-total">Bloquear el envío según un total calculado</h3>

<p>
  Un formulario de pedido calcula un total acumulado. Un bloque de lógica usa la condición: si Order total <strong>is less than 10</strong>,{' '}
  <strong>Prevent submit form</strong>. El respondente no puede enviar el formulario hasta que se alcance el umbral mínimo del pedido.
</p>

<p>
  Mientras una regla de prevención está activa, el botón se muestra como no disponible y se le dice al respondente por qué. Escribe el
  motivo en <strong>Message shown to respondent</strong> en la fila de la acción — "Your order must total at least 10" — para que sepa qué
  respuesta cambiar. Déjalo vacío y el formulario recurre a "This form cannot be submitted with the current answers." (o "You cannot
  continue to the next page with the current answers." para un bloque de navegación). Cuando varias reglas de prevención se activan a la
  vez, la primera que lleva un mensaje aporta el texto.
</p>

> 💡 **Prueba la lógica con Preview**
> <p>
>     Después de configurar tus reglas, cambia a <strong>Preview</strong> en la barra de herramientas superior y rellena el formulario como lo
>     haría un respondente. La lógica se activa en tiempo real en Preview, así puedes verificar cada rama, campo oculto y validación de
>     bloqueo antes de publicar.
>   </p>

<h2 id="next-steps">Próximos pasos</h2>
<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [Campos ocultos](/es/building-forms/hidden-fields) — Captura parámetros de URL y úsalos en la lógica
  - [Campos calculados](/es/building-forms/calculated-fields) — Calcula puntuaciones y totales con operaciones de lógica
  - [Inserción de respuestas](/es/building-forms/answer-piping) — Referencia cualquier respuesta en otro punto del formulario
</div>
