Skip to content

feat(frontend): evento Compra aprovada no manifesto de eventos (CRM-316) - #369

Merged
gomessguii merged 3 commits into
developfrom
feat/CRM-316-evento-compra-aprovada
Sep 4, 2026
Merged

feat(frontend): evento Compra aprovada no manifesto de eventos (CRM-316)#369
gomessguii merged 3 commits into
developfrom
feat/CRM-316-evento-compra-aprovada

Conversation

@nickoliveira23

@nickoliveira23 nickoliveira23 commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Espelho do catálogo de eventos do evo-flow ganha purchase.approved na categoria nova purchase ("Compra aprovada" / "Purchase approved"), com o mesmo schema do backend.
  • Categoria aparece no seletor de evento do gatilho de jornada (ícone de carrinho) e no editor de condição de segmento ("Eventos de Compra"), com a chave categories.purchase nos 6 locales.
  • catalog.spec.ts entra na lane Vitest (lista fechada).

Security

  • Só manifesto, rótulos e i18n. Sem chamada nova, sem dado sensível.

Test plan

  • npx vitest run src/lib/events-manifest/catalog.spec.ts src/i18n/locales/i18n-parity.spec.ts
  • npx tsc --noEmit
  • Camada conta: Jornadas → nova jornada → gatilho por evento mostra "Eventos de Compra → Compra aprovada"; Segmentos → condição por evento idem.

Nota

  • O manifesto do front já não trazia pipeline.stage_changed (23 eventos contra 24 do backend). Drift pré-existente, fora do escopo.
  • A tela do gatilho por evento hoje pede os campos required do catálogo como inputs obrigatórios (ids de compra/card). Defeito anterior a esta PR, tratado em card próprio.

Changed Files

  • src/lib/events-manifest/event-names.ts
  • src/lib/events-manifest/types.ts
  • src/lib/events-manifest/catalog.ts
  • src/lib/events-manifest/catalog.spec.ts
  • src/components/journey/shared/EventSelector/EventSelector.tsx
  • src/components/segments/SegmentConditionEditor.tsx
  • src/i18n/locales/{pt,pt-BR,en,es,fr,it}/events.json
  • .github/workflows/test.yml

Related PRs

Linked Issue

  • CRM-316

🤖 Generated with Claude Code

https://claude.ai/code/session_01JxYjUwr2vV69kYddiXJHRo

Summary by Sourcery

Add support for approved purchase events across the frontend event manifest, journey triggers, and segment conditions.

New Features:

  • Add the purchase.approved event to the frontend event manifest under a new Purchase category, including its localized labels and schema.
  • Expose Purchase events in journey event triggers and segment event conditions with localized category labels.

Enhancements:

  • Update manifest validation to account for the expanded backend event set while explicitly excluding the pre-existing pipeline stage event from the frontend mirror.

CI:

  • Include the event manifest catalog test in the Vitest CI lane.

Tests:

  • Extend catalog coverage to validate the new Purchase category and purchase.approved event.

nickoliveira23 and others added 2 commits September 4, 2026 13:23
…oria própria (CRM-316)

purchase.approved fica selecionável como gatilho de jornada (com filtros de
produto e valor) e como condição de segmento, no grupo "Eventos de Compra"
(6 idiomas). Espelho do contrato do evo-flow e do CRM.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JxYjUwr2vV69kYddiXJHRo
…de CI (CRM-316)

Espelha a descrição do amount (unidade maior da moeda, nunca centavos)
e lista o spec do manifesto de eventos na lane Vitest, que é lista
fechada.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JxYjUwr2vV69kYddiXJHRo
@sourcery-ai

sourcery-ai Bot commented Sep 4, 2026

Copy link
Copy Markdown

🧙 Sourcery has finished reviewing your pull request!


Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've found 1 issue

Prompt for AI Agents
Please address the comments from this code review:

## Individual Comments

### Comment 1
<location path="src/components/segments/SegmentConditionEditor.tsx" line_range="59" />
<code_context>
   conversation: 'Eventos de Conversa',
   message: 'Eventos de Mensagem',
   campaign: 'Eventos de Campanha',
+  purchase: 'Eventos de Compra',
   custom: 'Personalizado',
 };
</code_context>
<issue_to_address>
**issue:** The segment event picker renders the new purchase category with the hardcoded Portuguese string `Eventos de Compra`, so English, Spanish, French, and Italian users see a Portuguese category heading even though `categories.purchase` was added to all locale files.

**Triggers:** When a non-Portuguese user opens the Performed or LastPerformed event selector.

**Suggested fix:** Use the events i18n namespace and render `t('categories.purchase')` (and the existing category labels) instead of hardcoded Portuguese strings.
</issue_to_address>

Sourcery assessment

Approval pending. 1 finding to address first.

Blocking findings: src/components/segments/SegmentConditionEditor.tsx:59


Sourcery is free for open source - if you like our reviews please consider sharing them ✨

conversation: 'Eventos de Conversa',
message: 'Eventos de Mensagem',
campaign: 'Eventos de Campanha',
purchase: 'Eventos de Compra',

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue: The segment event picker renders the new purchase category with the hardcoded Portuguese string Eventos de Compra, so English, Spanish, French, and Italian users see a Portuguese category heading even though categories.purchase was added to all locale files.

Triggers: When a non-Portuguese user opens the Performed or LastPerformed event selector.

Suggested fix: Use the events i18n namespace and render t('categories.purchase') (and the existing category labels) instead of hardcoded Portuguese strings.

…ackend (CRM-316)

O teste se chamava "mirrors the backend count exactly (23)" com o backend em 24.
A conta passa a ser BACKEND_COUNT menos a lista do que é deliberadamente ausente,
então o próximo evento no backend bumpa um número que ainda significa alguma coisa.
@gomessguii
gomessguii merged commit 97827f5 into develop Sep 4, 2026
7 checks passed
@gomessguii
gomessguii deleted the feat/CRM-316-evento-compra-aprovada branch September 4, 2026 17:57
nickoliveira23 added a commit that referenced this pull request Sep 5, 2026
…ados e acabamento do review (CRM-519)

Rodada 2 do review. A branch foi rebaseada no develop, que trouxe o
purchase.approved (PR #369) depois de a rodada 1 nascer:

- events.purchase_approved.description nos 6 locales e `options` em
  `outcome` (created | already_in_pipeline) com rótulos, para a guarda
  de contrato ficar verde com o catálogo atual.
- Specs cobrindo purchase.approved: ids da compra e do card fora do
  picker, product em texto livre e amount numérico, outcome como select.
- Lookups pedem o mesmo tamanho de página que os filtros do CRM já usam
  (etiquetas e canais 200, agentes 100, templates -1); o index de canais
  pagina, então InboxesService.list ganha o parâmetro opcional.
- Comentários que o diff anterior tornou falsos corrigidos (diálogo de
  troca de evento e campos obrigatórios não existem mais); justificativa
  verdadeira no eslint-disable; fragmento vazio removido; ajuda do tipo
  de canal e rótulo de "Atribuído por" condizentes com selects.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JxYjUwr2vV69kYddiXJHRo
gomessguii pushed a commit that referenced this pull request Sep 6, 2026
…ados e acabamento do review (CRM-519)

Rodada 2 do review. A branch foi rebaseada no develop, que trouxe o
purchase.approved (PR #369) depois de a rodada 1 nascer:

- events.purchase_approved.description nos 6 locales e `options` em
  `outcome` (created | already_in_pipeline) com rótulos, para a guarda
  de contrato ficar verde com o catálogo atual.
- Specs cobrindo purchase.approved: ids da compra e do card fora do
  picker, product em texto livre e amount numérico, outcome como select.
- Lookups pedem o mesmo tamanho de página que os filtros do CRM já usam
  (etiquetas e canais 200, agentes 100, templates -1); o index de canais
  pagina, então InboxesService.list ganha o parâmetro opcional.
- Comentários que o diff anterior tornou falsos corrigidos (diálogo de
  troca de evento e campos obrigatórios não existem mais); justificativa
  verdadeira no eslint-disable; fragmento vazio removido; ajuda do tipo
  de canal e rótulo de "Atribuído por" condizentes com selects.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JxYjUwr2vV69kYddiXJHRo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants