Regras de negócio
Índice das regras de negócio do onion-backend. Cada regra vive em rules/<escopo>/ e é expressa em Given/When/Then. R-XXX é sequencial por projeto.
| ID | Título | Escopo | Certainty | Arquivo |
|---|---|---|---|---|
| R-001 | Progresso de aula persiste direto e de forma síncrona | engagements | high | rules/engagements/lesson_progress_direct_synchronous_persist.md |
| R-002 | Novo usuário percorre a sequência da jornada | audios | high | rules/audios/journey_sequence_for_new_user.md |
| R-003 | Trava por progresso insuficiente na jornada de áudios | audios | high | rules/audios/journey_locked_below_ninety_percent.md |
| R-004 | Avanço na jornada por conclusão, no dia seguinte | audios | high | rules/audios/journey_advances_next_day_after_completion.md |
| R-005 | Re-escuta após conclusão não retrocede o usuário na jornada | audios | high | rules/audios/journey_relisten_does_not_regress.md |
| R-006 | Transição após o último áudio da jornada | audios | high | rules/audios/journey_transition_after_last_audio.md |
| R-007 | Usuário fora da jornada recebe sempre o áudio atual fora da jornada | audios | high | rules/audios/daily_audio_outside_journey.md |
| R-008 | Áudio fora da jornada é conteúdo diário livre | audios | high | rules/audios/audio_outside_journey_is_free_daily_content.md |
| R-009 | Endpoint retorna a posição atual na jornada de áudio | audios | high | rules/audios/journey_position_endpoint.md |
| R-010 | Model Notification é reservado a envios pontuais | notifications | high | rules/notifications/notification_model_point_in_time_only.md |
| R-011 | Gate de notificação de hábito libera as ondas de lembrete | notifications | high | rules/notifications/habit_notification_gate.md |
| R-012 | UserTrial marca converted_at quando checkout IBFT é aprovado | trials | high | rules/trials/user_trial_converted_at_on_checkout_approval.md |
| R-012 | Campanha inválida ou expirada bloqueia cadastro de trial | trials | high | rules/trials/user_trial_register.md |
| R-013 | Campanha sem trial vinculado bloqueia cadastro | trials | high | rules/trials/user_trial_register.md |
| R-014 | Conta existente ou trial anterior bloqueia sem revelar o motivo | trials | high | rules/trials/user_trial_register.md |
| R-015 | Estado do trial exposto no sign-in e no perfil | trials | high | rules/trials/trial_state_in_auth_endpoints.md |
| R-016 | Desbloqueio de aulas para usuário em trial | trials | high | rules/trials/trial_lesson_unlock.md |
| R-017 | Desbloqueio de cursos para usuário em trial | trials | high | rules/trials/trial_course_unlock.md |
| R-018 | Janela do trial é imutável após a criação | trials | high | rules/trials/user_trial_dates_immutable_in_admin.md |
| R-019 | Limite de áudios do trial é sempre igual à duração em dias | trials | high | rules/trials/audio_limit_synced_to_duration.md |
| R-020 | Trial da campanha é travado quando há usuários cadastrados | campaigns | high | rules/campaigns/campaign_trial_locked_with_user_trials.md |
| R-021 | Régua de emails de trial por percentual consumido | trials | high | rules/trials/trial_journey_emails.md |
| R-022 | Troca de e-mail unifica as contas quando o destino já existe | accounts | high | rules/accounts/email_change_merges_existing_account.md |
Notas de migração
- R-001 preserva o ID que já existia no
docs/RULES.mdanterior. Seu conteúdo foi atualizado para a persistência síncrona introduzida emef6bc92, que removeu o rate limit e o buffer no Redis para aulas. - R-002 a R-009 vêm das regras
RN01–RN08que eram indexadas emdocs/audio/audio_journey/RULES.mde descritas dentro dedaily-audio-journey.md. Cada uma virou um arquivo próprio; o corpo descritivo (models, state machine, configuração) ficou em reference/audios/daily_audio_journey.md. - R-010 e R-011 foram extraídas das seções de prosa que viviam no
docs/RULES.mdanterior, sob o heading “Notifications”.