Documento de Requisitos — Feature flag upsell no zzapp
Tarefa: #193232 Contexto: Spike #193127 — Upsell no fluxo de vendas
Visão Geral
Adicionar duas novas chaves no Firebase Remote Config do zzapp para controlar a disponibilidade da funcionalidade de recomendação upsell. As flags seguem o padrão existente no projeto: snake_case no Firebase, enum em FirebaseRemoteConfigKeysEnum, mapping no extension FirebaseRemoteConfigKeysEnumExtension.key e getter tipado em FirebaseRemoteConfigServiceDictionary.
Não faz parte do escopo o consumo destas flags em telas, controllers ou fluxos — apenas a criação da infraestrutura de configuração remota.
Papéis Envolvidos
- Administrador do sistema (produto/operações): define no console do Firebase quais lojas têm a funcionalidade ativa.
- Sistema (Firebase Remote Config): armazena e distribui os valores das flags para as instâncias do zzapp.
- Desenvolvedor (futuro): consome as flags para exibir ou ocultar a etapa de recomendação upsell no fluxo de vendas.
Requisitos Funcionais
RF-01 — Flag enable_upsell_recommendation
História de Usuário: Como administrador do sistema, quero ativar ou desativar globalmente a funcionalidade de upsell via Remote Config, para que eu possa controlar a liberação da feature sem precisar publicar uma nova versão do aplicativo.
Critérios de Aceitação:
-
DEVE existir o valor
enableUpsellRecommendationno enumFirebaseRemoteConfigKeysEnum. -
DEVE existir o mapeamento
enable_upsell_recommendationno extensionFirebaseRemoteConfigKeysEnumExtension.key. -
DEVE existir o getter
bool get enableUpsellRecommendationemFirebaseRemoteConfigServiceDictionary, implementado via_getBoolProperty. -
QUANDO a chave
enable_upsell_recommendationnão existir no Firebase Remote Config (primeira execução ou chave não cadastrada) ENTÃO o getter DEVE retornarfalse.
Casos de Borda:
- Se a chave não existir no Firebase,
FirebaseRemoteConfig.instance.getBool(key)retornafalsepor padrão — comportamento desejado.
RF-02 — Flag enable_upsell_recommendation_by_code_store
História de Usuário: Como administrador do sistema, quero liberar a funcionalidade de upsell gradualmente por loja, para que eu possa fazer um rollout controlado antes de ativar globalmente.
Critérios de Aceitação:
-
DEVE existir o valor
enableUpsellRecommendationByCodeStoreno enumFirebaseRemoteConfigKeysEnum. -
DEVE existir o mapeamento
enable_upsell_recommendation_by_code_storeno extensionFirebaseRemoteConfigKeysEnumExtension.key. -
DEVE existir o getter
List<String> get enableUpsellRecommendationByCodeStoreemFirebaseRemoteConfigServiceDictionary, implementado via_getStringList(). -
O formato DEVE seguir o padrão existente: string no Firebase com códigos de loja separados por
;, ex:"LOJA001;LOJA002;LOJA003". -
QUANDO a chave não existir no Firebase OU o valor for string vazia ENTÃO o getter DEVE retornar uma lista vazia (
[]).
Casos de Borda:
- A string no Firebase não deve conter espaços em branco — o método
_getStringList()já remove espaços comreplaceAll(' ', '').
Fora de Escopo
- Consumo das flags em telas, controllers, providers ou fluxos do zzapp.
- Criação de qualquer interface de usuário relacionada ao upsell.
- Alterações no backend (checkout service, cart API, etc.).
- Cadastro das chaves no console do Firebase — responsabilidade da operação após o deploy.
Dependências
| Dependência | Descrição | Status |
|---|---|---|
FirebaseRemoteConfig configurado no zzapp | Já existe e é inicializado em main.dart:85 | Existente |
FirebaseRemoteConfigService | Serviço singleton já implementado e em produção | Existente |
| Acesso ao console Firebase | Necessário para cadastrar as chaves enable_upsell_recommendation e enable_upsell_recommendation_by_code_store com seus valores padrão | Operacional |
Questões em Aberto
- Nenhuma questão em aberto identificada até o momento.