Card: Gestão de Regras Condicionais (ConditionalRule)
Objetivo
Permitir a criação de regras condicionais que definem o fluxo de navegação entre blocos de um survey com base nas respostas fornecidas pelo participante.
Esse recurso possibilita a criação de questionários dinâmicos, exibindo apenas os blocos relevantes conforme as respostas selecionadas.
Contexto
As regras condicionais são responsáveis por direcionar o participante para diferentes blocos do survey de acordo com critérios previamente definidos pelo pesquisador.
Exemplo:
Pergunta:
Você possui veículo?
○ Sim
○ Não
Regra:
Se resposta = Sim
→ Ir para bloco "Informações do Veículo"
Funcionalidades
Criar Regra
Permitir associar uma regra a uma pergunta.
Listar Regras
Permitir visualizar todas as regras configuradas para uma pergunta.
Consultar Regra
Permitir visualizar os detalhes de uma regra específica.
Atualizar Regra
Permitir alterar:
- Operador
- Valor de comparação
- Bloco de destino
Remover Regra
Permitir excluir uma regra condicional.
Schema Existente
model ConditionalRule {
id String @id @default(uuid())
questionId String
question Question @relation(
fields: [questionId],
references: [id],
onDelete: Cascade
)
operator RuleOperator
matchValue String
targetBlockId String
targetBlock Block @relation(
"TargetBlock",
fields: [targetBlockId],
references: [id],
onDelete: Cascade
)
}
enum RuleOperator {
EQUALS
NOT_EQUALS
GREATER_THAN
LESS_THAN
}
Endpoints
Criar Regra
POST /questions/:questionId/rules
Listar Regras
GET /questions/:questionId/rules
Consultar Regra
Atualizar Regra
Excluir Regra
Regras de Negócio
RN01
A pergunta deve existir.
RN02
O bloco de destino deve existir.
RN03
O bloco de destino deve pertencer ao mesmo survey da pergunta.
Não permitir direcionamento entre surveys diferentes.
RN04
Não permitir criar regras apontando para o próprio bloco da pergunta.
Exemplo inválido:
Bloco A
↓
Pergunta
↓
Regra
↓
Bloco A
RN05
Não permitir criar ciclos de navegação.
Exemplo inválido:
Bloco A
↓
Bloco B
↓
Bloco C
↓
Bloco A
RN06
A pergunta deve ser compatível com regras condicionais.
Tipos suportados:
SINGLE_CHOICE
MULTIPLE_CHOICE
LIKERT
SLIDER
Tipos não suportados:
RN07
O valor informado em matchValue deve ser compatível com o tipo da pergunta.
Exemplos:
RN08
Não permitir regras duplicadas para a mesma condição.
Exemplo inválido:
Pergunta X
Resposta = "SIM"
↓
Bloco A
Resposta = "SIM"
↓
Bloco B
RN09
Não permitir criação, alteração ou exclusão de regras em surveys arquivados.
Validação:
survey.status === 'ARCHIVED'
RN10
Não permitir alterações estruturais após o survey possuir respostas coletadas.
Validação:
survey.responses.length > 0
Segurança
Todas as rotas devem exigir autenticação JWT.
Validar ownership através da cadeia:
ConditionalRule
→ Question
→ Block
→ Survey
→ Researcher
Validação:
survey.researcherId === request.user.sub
Retornar:
quando o usuário não for proprietário.
Critérios de Aceite
Dependências
- Autenticação
- Gestão de Surveys
- Gestão de Blocos
- Gestão de Perguntas
- Gestão de Opções de Resposta
Estimativa
5 Story Points
Complexidade: Média/Alta
Resultado Esperado
O pesquisador poderá construir fluxos dinâmicos dentro do survey, direcionando participantes para blocos específicos com base em suas respostas, permitindo pesquisas adaptativas e experiências personalizadas.
Card: Gestão de Regras Condicionais (ConditionalRule)
Objetivo
Permitir a criação de regras condicionais que definem o fluxo de navegação entre blocos de um survey com base nas respostas fornecidas pelo participante.
Esse recurso possibilita a criação de questionários dinâmicos, exibindo apenas os blocos relevantes conforme as respostas selecionadas.
Contexto
As regras condicionais são responsáveis por direcionar o participante para diferentes blocos do survey de acordo com critérios previamente definidos pelo pesquisador.
Exemplo:
Funcionalidades
Criar Regra
Permitir associar uma regra a uma pergunta.
Listar Regras
Permitir visualizar todas as regras configuradas para uma pergunta.
Consultar Regra
Permitir visualizar os detalhes de uma regra específica.
Atualizar Regra
Permitir alterar:
Remover Regra
Permitir excluir uma regra condicional.
Schema Existente
Endpoints
Criar Regra
Listar Regras
Consultar Regra
Atualizar Regra
Excluir Regra
Regras de Negócio
RN01
A pergunta deve existir.
RN02
O bloco de destino deve existir.
RN03
O bloco de destino deve pertencer ao mesmo survey da pergunta.
Não permitir direcionamento entre surveys diferentes.
RN04
Não permitir criar regras apontando para o próprio bloco da pergunta.
Exemplo inválido:
RN05
Não permitir criar ciclos de navegação.
Exemplo inválido:
RN06
A pergunta deve ser compatível com regras condicionais.
Tipos suportados:
Tipos não suportados:
RN07
O valor informado em
matchValuedeve ser compatível com o tipo da pergunta.Exemplos:
RN08
Não permitir regras duplicadas para a mesma condição.
Exemplo inválido:
RN09
Não permitir criação, alteração ou exclusão de regras em surveys arquivados.
Validação:
RN10
Não permitir alterações estruturais após o survey possuir respostas coletadas.
Validação:
Segurança
Todas as rotas devem exigir autenticação JWT.
Validar ownership através da cadeia:
Validação:
Retornar:
403 Forbiddenquando o usuário não for proprietário.
Critérios de Aceite
Dependências
Estimativa
5 Story Points
Complexidade: Média/Alta
Resultado Esperado
O pesquisador poderá construir fluxos dinâmicos dentro do survey, direcionando participantes para blocos específicos com base em suas respostas, permitindo pesquisas adaptativas e experiências personalizadas.