# 09 - ARQUITETURA REVISADA

## PROBLEMA IDENTIFICADO
O core de cadastros, services, admin, seller center e integrações estava todo no MKT.
O MKT deve ser APENAS a vitrine de vendas. O ERP gerencia e distribui tudo.

---

## NOVA ARQUITETURA

```
 CLIENTE (Browser/Mobile)
       |
       +---- mkt.uppi.app.br ----+---- api.uppi.app.br
       |     (VITRINE)           |     (REST para Mobile)
       |     Catalogo            |
       |     Produto             |
       |     Carrinho            |
       |     Checkout -----+     |
       |     Meus Pedidos   |    |
       |                    |    |
       |                    v    |
       |          hub.uppi.app.br (PAGAMENTOS)
       |          MercadoPago, Getnet
       |          Webhooks, Split
       |                    |
       +--------------------+----+
                            |
                     erp.uppi.app.br (GESTAO CENTRAL)
                     |
                     +-- Services/ (OrderService, StockService, LedgerService, etc.)
                     +-- Seller Center (Adianti)
                     +-- Admin (Adianti)
                     +-- Finance (DRE, Repasses, Ledger)
                     +-- Fiscal (NF-e, SEFAZ)
                     +-- Logistica (WMS, TMS, Rotas)
                     +-- Motor de Regras
                     +-- Config Sistema
                     +-- Workers (Redis + Supervisor)
                     |
                     +-- cd01.uppi.app.br (WMS/TMS local)
```

---

## 1. MKT.UPPI.APP.BR — SO VITRINE

### O que FICA no MKT
- **Core MVC** (Router, Request, Response, Controller, View, Session)
- **Home, Catalogo, Produto** (listagem, busca, filtros, SEO)
- **Carrinho** (add, update, remove — dados locais na session/banco)
- **Checkout** (wizard 5 steps — chama Hub Pagamentos + ERP Services)
- **Meus Pedidos** (lista, detalhe, cancelar — consulta banco via read-only)
- **Login/Registro** (auth basico)
- **Layout master, Vue.js, CSS** (frontend completo)
- **Componentes PHP** (navbar, footer, product-card, pagination, etc.)

### O que SAI do MKT (vai pro ERP)
- ❌ Todos os Services (Order, Payment, Stock, Ledger, Settlement, Fiscal, Return, Ads, TMS, CdSync, Rules)
- ❌ Seller Center (controllers + views)
- ❌ Admin (controllers + views)
- ❌ Workers (todos)
- ❌ Gateways de pagamento (vai pro Hub)
- ❌ Shared (StateMachine, EventDispatcher, IdempotencyGuard)

### Como o MKT consome o ERP
- **Direto no banco** (db_erp) para leitura (catalogo, pedidos do cliente)
- **Via include** dos Services do ERP para operações de escrita (criar pedido, cancelar)
- O MKT **não tem regra de negócio** — só apresentação

---

## 2. ERP.UPPI.APP.BR — GESTAO CENTRAL

### Estrutura

```
/var/www/erp.uppi.app.br/
|-- app/
|   |-- config/
|   |   |-- dberp.php               # db_erp (banco unico)
|   |   |-- dbcd01.php              # db_erp_cd01
|   |
|   |-- service/
|   |   |-- marketplace/            # TODOS os Services de negocio
|   |   |   |-- OrderService.php
|   |   |   |-- StockService.php
|   |   |   |-- LedgerService.php
|   |   |   |-- SettlementService.php
|   |   |   |-- FiscalService.php
|   |   |   |-- ReturnService.php
|   |   |   |-- AdsService.php
|   |   |   |-- TmsService.php
|   |   |   |-- CdSyncService.php
|   |   |   |-- RulesEngineService.php
|   |   |   |-- CatalogService.php
|   |   |   |-- AuthService.php
|   |   |-- shared/
|   |   |   |-- StateMachine.php
|   |   |   |-- EventDispatcher.php
|   |   |   |-- IdempotencyGuard.php
|   |   |   |-- OrderStateMachine.php
|   |   |-- MarketplaceBridge.php   # Ponte para telas Adianti
|   |
|   |-- control/
|   |   |-- marketplace/            # Admin marketplace (Adianti)
|   |   |   |-- SellerManagement.php
|   |   |   |-- OrderManagement.php
|   |   |   |-- ProductModeration.php
|   |   |   |-- DisputeManagement.php
|   |   |   |-- CouponManagement.php
|   |   |   |-- MarketplaceDashboard.php
|   |   |-- seller/                 # Seller Center (Adianti)
|   |   |   |-- SellerDashboard.php
|   |   |   |-- SellerProducts.php
|   |   |   |-- SellerOrders.php
|   |   |   |-- SellerFinance.php
|   |   |   |-- SellerAds.php
|   |   |-- finance/
|   |   |   |-- FinanceDashboard.php
|   |   |   |-- SettlementManagement.php
|   |   |   |-- LedgerReport.php
|   |   |   |-- DREReport.php
|   |   |   |-- ReconciliationReport.php
|   |   |-- logistics/
|   |   |   |-- WarehouseManagement.php
|   |   |   |-- StockOverview.php
|   |   |   |-- RouteManagement.php
|   |   |-- fiscal/
|   |   |   |-- FiscalDashboard.php
|   |   |   |-- CertificateManagement.php
|   |   |-- config/
|   |   |   |-- SystemSettings.php
|   |   |   |-- RulesManagement.php
|   |   |   |-- CategoryManagement.php
|   |   |   |-- CarrierManagement.php
|   |
|   |-- model/marketplace/          # Models TRecord
|   |
|   |-- workers/                    # TODOS os workers
|   |   |-- QueueManager.php
|   |   |-- BaseWorker.php
|   |   |-- OmsWorker.php
|   |   |-- PaymentWorker.php
|   |   |-- StockWorker.php
|   |   |-- FulfillmentWorker.php
|   |   |-- FiscalWorker.php
|   |   |-- SettlementWorker.php
|   |   |-- NotificationWorker.php
|   |   |-- AdsWorker.php
|   |   |-- ReturnWorker.php
|   |   |-- CdSyncWorker.php
|   |   |-- SchedulerWorker.php
|   |
|   |-- bin/
|   |   |-- worker.php
```

---

## 3. HUB.UPPI.APP.BR — HUB DE PAGAMENTOS

### Estrutura

```
/var/www/hub.uppi.app.br/
|-- src/
|   |-- PaymentHub.php              # Facade principal
|   |-- Gateway/
|   |   |-- GatewayInterface.php
|   |   |-- MercadoPagoGateway.php
|   |   |-- GetnetGateway.php
|   |   |-- StripeGateway.php       # Futuro
|   |-- Webhook/
|   |   |-- WebhookProcessor.php    # Recebe e processa webhooks
|   |   |-- SignatureValidator.php  # Valida assinatura por gateway
|   |-- Split/
|   |   |-- PaymentSplitter.php    # Calcula splits por seller
|   |-- Config/
|   |   |-- gateways.php           # Credenciais e config por gateway
|-- public/
|   |-- webhook.php                # Entry point para webhooks
```

### Como funciona
1. **Checkout (MKT)** chama `PaymentHub::charge($params)`
2. Hub seleciona gateway (via RulesEngine do ERP)
3. Hub processa pagamento e retorna resultado (QR, boleto, etc.)
4. **Webhook** chega no Hub, valida assinatura, processa, dispara evento no ERP
5. Hub **não tem regra de negócio** de pedido — só pagamento

### API do Hub

```php
// Cobrar
PaymentHub::charge([
    'order_id' => 123,
    'amount' => 299.90,
    'payment_type' => 'pix',
    'gateway' => 'mercado_pago',  // ou auto via RulesEngine
    'splits' => [
        ['seller_id' => 1, 'amount' => 269.91],
        ['marketplace_fee' => 29.99],
    ],
]);

// Estornar
PaymentHub::refund($transactionId, $amount, $reason);

// Capturar (cartao pre-autorizado)
PaymentHub::capture($transactionId, $amount);
```

---

## 4. FLUXO DE CHECKOUT REVISADO

```
1. Cliente finaliza compra no MKT
2. MKT chama OrderService (do ERP) para criar pedido
3. MKT chama PaymentHub::charge() com dados do pedido
4. Hub processa com gateway selecionado
5. Hub retorna resultado (PIX QR, boleto URL, etc.)
6. MKT mostra resultado ao cliente
7. Gateway envia webhook para Hub
8. Hub valida e dispara evento payment.paid no ERP
9. ERP Workers processam (confirmar pedido, NF-e, estoque, etc.)
```

---

## 5. COMO O MKT ACESSA OS SERVICES DO ERP

```php
// No MKT, carrega services do ERP via require
define('ERP_PATH', '/var/www/erp.uppi.app.br');

// Autoload dos services do ERP
require_once ERP_PATH . '/app/service/marketplace/OrderService.php';
require_once ERP_PATH . '/app/service/shared/EventDispatcher.php';

// Usa diretamente (mesmo banco db_erp)
$order = OrderService::createFromCheckout($params);
```

Ou via **symlink**:
```bash
ln -s /var/www/erp.uppi.app.br/app/service /var/www/mkt.uppi.app.br/app/ErpServices
```

---

## 6. RESUMO DA MUDANCA

| Componente | ANTES (errado) | DEPOIS (correto) |
|-----------|---------------|-----------------|
| Services (14) | mkt | **erp** |
| Seller Center | mkt (PHP MVC) | **erp** (Adianti) |
| Admin | mkt (PHP MVC) | **erp** (Adianti) |
| Workers (10+) | mkt | **erp** |
| Gateways | mkt | **hub** (separado) |
| StateMachine/Events | mkt | **erp** |
| Catálogo/Vitrine | mkt | mkt (mantém) |
| Carrinho/Checkout | mkt | mkt (mantém, chama ERP+Hub) |
| Login/Conta | mkt | mkt (mantém) |
| API REST | api | api (mantém, chama ERP services) |

---

## 7. ORDEM DE REESTRUTURACAO

1. Criar estrutura de services no ERP (`app/service/marketplace/`, `app/service/shared/`)
2. Mover Services do MKT para ERP (adaptar namespace -> sem namespace, estilo Adianti)
3. Criar Hub de Pagamentos (`/var/www/hub.uppi.app.br/`)
4. Refatorar checkout do MKT para usar Hub
5. Mover Workers para ERP
6. Criar Seller Center no ERP (telas Adianti em vez de PHP MVC)
7. Limpar MKT (remover services, admin, seller, workers)
8. Ajustar API para consumir services do ERP
9. Testes de integração
