Proposta de Produto

Loja de Recompensas
MeshStore

Uma loja independente onde colaboradores gastam seus MeshCoins acumulados pela gamificação. Três formas de pagamento, painel admin completo e integração total com o ecossistema MeshApp.

22+
Campos configuráveis
3
Formas de pagamento
5
Entidades de banco
6
Status de resgate
Visão Geral

Conceito da MeshStore

Aplicação independente onde MeshCoins são consumidos. No futuro, acessada via SSO com domínio próprio store.meshapp.com.

🌎

Aplicação Independente

Projetada como micro-frontend com deploy próprio. Fase atual: módulo interno no MeshApp. Fase futura: domínio separado com SSO via JWT compartilhado.

🔒

Autenticação SSO

JWT compartilhado com claims de user_id, account_id, roles e level. Mesma chave pública para validação em ambas as aplicações.

💰

Taxa de Conversão

Padrão: R$ 0,03 por MeshCoin (configurável pelo admin). Exemplo: 500 MC = R$ 15,00. Mínimo para pagamento misto: 100 MC.

Três Modos de Pagamento

100% MeshCoins

Pagamento integralmente em MC. Débito direto do meshcoins_balance com consumo FIFO dos mais antigos. Itens com permite_meshcoins = true.

💵

100% Real (R$) via Pagar.me

Pagamento integralmente em dinheiro via Pagar.me (cartão, Pix ou boleto). Apenas para itens com permite_real = true. Checkout transparente, sem redirect.

🔄

Misto (MC + R$)

Parte em MC, parte em R$ via Pagar.me. Slider interativo para o usuário definir a proporção. Mínimo de 100 MC. Preview em tempo real do valor final.

Admin

Cadastro de Itens (CRUD)

O admin tem controle total sobre 22+ campos organizados em 6 grupos. Além do CRUD completo de categorias.

📝 Informações Básicas
nomeVARCHAR(200) - obrigatório
descriçãoTEXT - rich text
descrição_curtaVARCHAR(300)
imagem_destaqueFILE - JPG/PNG/WebP, max 5MB
galeria_imagensFILE[] - até 5 arquivos
🏷 Categorização
categoriaSELECT (FK) - obrigatório
tagsMULTI-SELECT - max 10
💲 Precificação
preço_meshcoinsNUMBER - inteiro positivo
preço_realDECIMAL(10,2) - nullable
permite_meshcoinsBOOLEAN (default true)
permite_realBOOLEAN (default false)
permite_mistoBOOLEAN (default false)
mc_to_real_rateDECIMAL(10,4) - default 0.03
📦 Estoque e Limites
estoqueNUMBER - null = ilimitado
estoque_períodoENUM: monthly, quarterly, unlimited
limite_por_pessoaNUMBER - nullable
cooldown_diasNUMBER - default 0
🛡 Restrições e Visibilidade
nível_mínimoNUMBER 1-20, default 1
requer_aprovaçãoBOOLEAN
destaqueBOOLEAN
ordem_exibiçãoNUMBER
ativoBOOLEAN - default true
🎁 Resgate e Entrega
validade_resgate_diasNUMBER - default 30
instruções_resgateTEXT - max 2000 chars

🏷 CRUD de Categorias

O admin cria e gerencia categorias com nome, ícone (Ant Design Icons), cor hex, ordem (drag & drop) e status ativo/inativo.

Pagamento

Formas de Pagamento

Três modos flexíveis para atender diferentes perfis de colaboradores.

100% MeshCoins

  • Flag: permite_meshcoins = true
  • Débito direto do saldo
  • Consumo FIFO (mais antigos primeiro)
  • Validação: saldo >= preço
💵

100% Real (R$) via Pagar.me

  • Flag: permite_real = true
  • Preço fixo definido pelo admin
  • Cartão, Pix ou boleto (Pagar.me)
  • Checkout transparente, sem redirect
🔄

Misto (MC + R$) via Pagar.me

  • Flag: permite_misto = true
  • Mínimo 100 MC (configurável)
  • Slider interativo MC ↔ R$
  • Diferença paga via Pagar.me

🔎 Exemplo: Spotify Premium 3 meses (1.500 MC | Taxa: R$ 0,03/MC)

Cenário 1: Usa 1.000 MC
MC debitados: 1.000 • R$ a pagar: R$ 15,00
Cenário 2: Usa 500 MC
MC debitados: 500 • R$ a pagar: R$ 30,00
Cenário 3: Usa 100 MC (mínimo)
MC debitados: 100 • R$ a pagar: R$ 42,00
Cenário 4: Usa 1.500 MC (100%)
MC debitados: 1.500 • R$ a pagar: R$ 0,00

Regras Gerais de Pagamento

💳 Gateway de Pagamento: Pagar.me

Checkout

Transparente (dentro da MeshStore, sem redirect)

Métodos

Cartão de crédito, Pix (QR code), Boleto

Segurança

PCI DSS via tokenização (cartão nunca toca nosso servidor)

Confirmação

Webhook do Pagar.me notifica quando pagamento é confirmado

🏷 Exemplos de Configuração por Item

Item MeshCoins Real (R$) Misto Por quê?
Vale iFood R$100 Não faz sentido comprar vale com dinheiro
Blusa MeshApp Produto físico, apenas R$
Spotify Premium MC puro ou completa com R$
Curso Online R$200 Máxima flexibilidade

💡 Sugestão Futura: Desconto em Folha

Como evolução futura, propõe-se uma 4ª flag (permite_desconto_folha) que permite descontar o valor em R$ diretamente do salário do colaborador. Fluxo incluiria aprovação do gestor + RH, limite mensal configurável e exportação para o sistema de folha de pagamento.

UX

Experiência do Colaborador

Interface moderna com busca, filtros, carrossel de destaques e fluxo de resgate em 7 etapas.

🏠

Home da Loja

Banner de destaques em carrossel, saldo de MC sempre visível no header, carrossel de categorias, grid responsivo (4 colunas desktop, 2 mobile), filtros por preço/nível/disponibilidade e busca full-text.

🛒

Card do Produto

Imagem destaque 16:9, nome (2 linhas), descrição curta, preço MC e R$, badge de categoria colorido, indicador de estoque (vermelho se ≤ 3), badge de nível mínimo e ícone de pagamento misto.

📄

Página de Detalhe

Galeria de imagens (até 6), descrição rich text, tags, seletor de forma de pagamento (radio buttons), slider MC↔R$ para modo misto com preview em tempo real e botão de resgate com validações.

Fluxo de Resgate — 7 Etapas

1
👉
Clique em Resgatar
Usuário seleciona forma de pagamento
2
🔎
Validações
Saldo, nível, estoque, cooldown, limite
3
📋
Confirmação
Modal com resumo completo
4
💲
Débito MC
FIFO via meshcoin_expiry
5
📋
Registro
Status PENDING ou APPROVED
6
Aprovação
Admin aprova ou rejeita
7
🎁
Entrega
Código, item físico, etc.

Status de Resgate

PENDING — Aguardando aprovação
APPROVED — Aprovado, aguardando entrega
DELIVERED — Entregue ao colaborador
REJECTED — Rejeitado (MC devolvidos)
EXPIRED — Validade expirou
CANCELLED — Cancelado pelo usuário

Regra de Rejeição / Cancelamento

Se o resgate for rejeitado ou cancelado: os MeshCoins são devolvidos ao saldo. A devolução cria novos registros em gamification_meshcoin_expiry com a data de expiração original, e uma gamification_transaction de tipo STORE_REFUND para auditoria.

Administração

Painel Admin da Loja

Dashboard com métricas em tempo real, CRUD completo de itens e fila de aprovação de resgates.

147
Resgates no mês
+23% ▲
234.500
MC gastos no mês
+15% ▲
R$ 2.840
R$ gastos no mês
+8% ▲
12
Pendentes de aprovação
Urgente!

📊 Dashboard

  • Top 5 itens mais resgatados
  • Alertas de estoque baixo (≤ 3)
  • Gráfico de resgates por semana
  • Ticket médio MC e R$
  • Taxa de aprovação

📝 CRUD de Itens

  • Tabela paginada com filtros e busca
  • Upload drag & drop com preview
  • Ativar/desativar em lote
  • Clonar item existente
  • Import/Export via CSV
  • Edição inline de preço e estoque

📋 Fila de Aprovação

  • Lista ordenada por data (mais antigo primeiro)
  • Aprovar ou rejeitar com motivo
  • Aprovação em lote
  • Marcar como entregue
  • Histórico por usuário
  • Exportar relatório CSV/Excel
Banco de Dados

Schema de Dados

5 entidades TypeORM seguindo os padrões do MeshApp (UUID, timestamps, soft delete) + integração com entidades da gamificação.

🛒 store_item
idUUID (PK)
account_idUUID
nomevarchar(200)
descricaotext
descricao_curtavarchar(300)
category_idUUID (FK)
preco_meshcoinsinteger
preco_realdecimal(10,2)?
permite_meshcoinsboolean
permite_realboolean
permite_mistoboolean
mc_to_real_ratedecimal(10,4)
estoqueinteger?
estoque_periodoenum
limite_por_pessoainteger?
cooldown_diasinteger
nivel_minimointeger (1-20)
requer_aprovacaoboolean
destaqueboolean
ordem_exibicaointeger
ativoboolean
validade_resgate_diasinteger
instrucoes_resgatetext?
created_attimestamptz
deleted_attimestamptz?
🏷 store_category
idUUID (PK)
account_idUUID
nomevarchar(100) UNIQUE
iconevarchar(50)?
corvarchar(7)
ordeminteger
ativaboolean
created_attimestamptz
deleted_attimestamptz?
📷 store_item_image
idUUID (PK)
item_idUUID (FK) CASCADE
file_idUUID (FK)
is_featuredboolean
ordeminteger
created_attimestamptz
🎁 store_redemption
idUUID (PK)
account_idUUID
user_idUUID (FK)
item_idUUID (FK)
meshcoins_spentinteger
real_spentdecimal(10,2)
payment_typeenum
statusenum (6 valores)
approved_byUUID? (FK)
approved_attimestamptz?
delivered_attimestamptz?
rejected_reasontext?
notestext?
expires_attimestamptz?
created_attimestamptz
deleted_attimestamptz?
🏷 store_item_tag
idUUID (PK)
item_idUUID (FK) CASCADE
tagvarchar(50)
created_attimestamptz

Índices Críticos de Performance

PaymentType

MESHCOINS = 'meshcoins'
REAL = 'real'
MIXED = 'mixed'

RedemptionStatus

PENDINGAPPROVEDDELIVERED
REJECTEDEXPIREDCANCELLED

StockPeriod

MONTHLY = 'monthly'
QUARTERLY = 'quarterly'
UNLIMITED = 'unlimited'

Integração

Integração com Gamificação

A MeshStore não duplica dados. Ela referencia entidades existentes da gamificação via FK ou leitura direta.

Entidades da Store (Novas)
🛒
store_item
Itens da loja
🏷
store_category
Categorias
📷
store_item_image
Imagens N:1
🏷
store_item_tag
Tags N:1
🎁
store_redemption
Resgates
↓ ↓ Referências (FK / Leitura / Escrita) ↓ ↓
Entidades da Gamificação (Existentes)
👤
gamification_profile
meshcoins_balance + current_level
meshcoin_expiry
Consumo FIFO
📋
gamification_transaction
STORE_REDEMPTION / REFUND
Operação na Store Entidade da Gamificação Ação
Verificar saldo gamification_profile SELECT meshcoins_balance
Verificar nível gamification_profile SELECT current_level
Debitar MC gamification_profile UPDATE meshcoins_balance -= amount
Consumir FIFO meshcoin_expiry UPDATE remaining -= amount (ORDER BY earned_at ASC)
Registrar transação gamification_transaction INSERT type: STORE_REDEMPTION
Devolver MC (rejeição) gamification_profile UPDATE meshcoins_balance += amount
Recriar FIFO (devolução) meshcoin_expiry INSERT com expires_at original
Registrar refund gamification_transaction INSERT type: STORE_REFUND

Observações de FK

Técnico

Arquitetura Atual vs Futura

Estratégia de migração gradual: de módulo interno para aplicação independente com SSO.

💻 Fase Atual — Módulo Interno

  • Módulo dentro do MeshApp NestJS
  • Mesma sessão de autenticação
  • Mesmo banco, schema separado (store_*)
  • Rota interna /store
  • Endpoints no mesmo backend

🌐 Fase Futura — Independente

  • Aplicação independente (micro-frontend)
  • SSO via JWT compartilhado
  • Banco próprio via API
  • Domínio store.meshapp.com
  • API Gateway + serviço independente
Arquitetura Futura com SSO
💻
Navegador
Usuário
🔒
Auth Service
SSO / JWT
🔌
API Gateway
Valida JWT
↓ JWT Compartilhado ↓
🏠
MeshApp (Principal)
app.meshapp.com
Gamificação gera MC
↔ API Interna ↔
🛒
MeshStore (Independente)
store.meshapp.com
Loja de Recompensas

Estratégia de Migração (5 fases)

Fluxo SSO

1. Usuário acessa store.meshapp.com
2. MeshStore verifica JWT no cookie/header
3. Se não: redireciona para app.meshapp.com/auth/sso?redirect=store.meshapp.com
4. MeshApp autentica e gera JWT com claims: sub, account_id, roles, level, aud: ["meshapp","meshstore"]
5. Redireciona de volta — MeshStore valida com mesma chave pública
6. Sessão estabelecida

Roadmap

Cronograma de Implementação

6 fases, estimativa de 10-14 semanas com 2 devs (1 back + 1 front).

🗃

Fase 1 — Backend: Entidades e CRUD Básico

2-3 semanas
Fundação do banco de dados e operações básicas.
  • Criar 5 entidades TypeORM + 3 enums + migrations
  • DTOs de validação (create, update, list query)
  • StoreCategoryService (CRUD completo)
  • StoreItemService (CRUD, listagem, filtros, busca full-text)
  • Upload de imagens (integração com FileModule)
  • Testes unitários dos services
💲

Fase 2 — Backend: Checkout e Gamificação

2 semanas
Lógica de resgate com integração completa com a gamificação.
  • StoreCheckoutService (validações, débito MC, FIFO)
  • Lógica para 3 formas de pagamento (MC, R$, Misto)
  • Integração com gamification_profile e meshcoin_expiry
  • Lógica de devolução MC (rejeição/cancelamento)
  • Testes unitários e de integração
📊

Fase 3 — Backend: Admin e Relatórios

1-2 semanas
Painel administrativo, aprovações e exportação.
  • StoreAdminService (dashboard, métricas)
  • Endpoints de aprovação/rejeição (individual e lote)
  • Export CSV/Excel de resgates e Import CSV de itens
  • Clone de item e configuração de taxa MC→R$
🛒

Fase 4 — Frontend: Loja do Colaborador

2-3 semanas
Interface completa da loja para o colaborador.
  • StorePage (home, banner, categorias, grid, filtros, busca)
  • ProductCard + ProductDetailPage (galeria, descrição)
  • PaymentSelector + MeshCoinSlider + PaymentPreview
  • RedeemConfirmModal + fluxo completo de resgate
  • RedemptionHistoryPage + responsividade
🔧

Fase 5 — Frontend: Painel Admin

2 semanas
Dashboard e ferramentas de gerenciamento para o admin.
  • StoreAdminDashboard (métricas, gráficos, alertas)
  • ItemListPage + ItemForm (upload drag & drop, preview)
  • CategoryManagerPage (CRUD, reordenação drag & drop)
  • RedemptionQueuePage (fila, aprovação, lote)
  • RedemptionReportPage + StoreConfigPage
🛡

Fase 6 — QA, Ajustes e Lançamento

1-2 semanas
Testes, revisão de segurança e deploy.
  • Testes end-to-end (fluxo completo de resgate)
  • Testes de concorrência (débito duplo, estoque)
  • Revisão de segurança (autorização, validações)
  • Ajustes de UX + seed de dados iniciais
  • Deploy em staging + produção

Estimativa por Tamanho de Equipe

10-14 sem
2 devs (1 back + 1 front)
7-10 sem
3 devs
14-20 sem
1 full-stack solo

Pronto para transformar MeshCoins em recompensas reais?

A gamificação já gera MeshCoins. Só falta dar destino a eles. A MeshStore fecha o ciclo motivacional.

5
Entidades de banco
3
Formas de pagamento
22+
Campos configuráveis
0
Dependências novas