Pular para o conteúdo principal

E01 - Plataforma de Inteligência Artificial

Critérios de Aceite e Plano de Testes

Versão: 2.0 | Data: 05/01/2026 | API Base: ConectEnvios API V1


1. Critérios de Aceite

1.1 Rastreamento (RF-E01-003)

IDCritério de AceiteTipo
CA-003-01Package ID é extraído corretamente do contextoUnitário
CA-003-02GET /package/track/:id retorna array de TrackingEventIntegração
CA-003-03Status retornado em menos de 3 segundosPerformance
CA-003-04Cache Redis utilizado (key: tracking:{package_id})Integração
CA-003-05Mensagem formatada com city/state e descriptionFuncional
CA-003-06ID inválido retorna mensagem de erro amigávelNegativo

1.2 Cotação (RF-E01-004)

IDCritério de AceiteTipo
CA-004-01CEP validado via GET /cep/addressIntegração
CA-004-02POST /package/shipping retorna array multi-transportadoraIntegração
CA-004-03Cotação calculada em menos de 5 segundosPerformance
CA-004-04Quote_id gerado com options[] da APIFuncional
CA-004-05Slot filling funciona (CEP → CEP → peso)E2E
CA-004-06CEP inválido (error: true) tratado com mensagemNegativo

2. Plano de Testes

2.1 Pirâmide de Testes

                    /\
/ \
/ E2E\ 5%
/──────\
/ \
/ Integração\ 15%
/──────────────\
/ \
/ Unitários \ 80%
/────────────────────\

2.2 Cobertura Mínima

TipoMínimoMeta
Linhas70%85%
Branches60%75%
Functions80%90%

3. Casos de Teste

3.1 TC-005: Rastreamento (Integração)

// tests/integration/tracking-flow.test.ts
import { mockConectEnviosAPI } from '@/mocks/conectenvios';

describe('Tracking Flow - ConectEnvios API', () => {
it('should process tracking via GET /package/track/:id', async () => {
const packageId = 12345;

mockConectEnviosAPI.setTrackingResponse(packageId, {
error: false,
data: [
{
city_id: 5564,
city: 'Brasília',
state: 'DF',
correios_date: '2026-01-05T14:30:00Z',
correios_type: 'RO',
description: 'Objeto em trânsito'
}
]
});

const webhookPayload = createWebhookPayload({
from: '5561999999999',
text: `Rastrear envio ${packageId}`
});

const response = await app.inject({
method: 'POST',
url: '/webhook/whatsapp',
payload: webhookPayload
});

expect(response.statusCode).toBe(200);

const outbound = await app.getLastOutboundMessage('5561999999999');
expect(outbound.content.body).toContain('Brasília/DF');
expect(outbound.content.body).toContain('em trânsito');
});
});

3.2 TC-006: Cotação (Integração)

// tests/integration/quote-flow.test.ts
describe('Quote Flow - ConectEnvios API', () => {
beforeAll(() => {
// Mock GET /cep/address
mockConectEnviosAPI.setCEPResponse('70000000', {
error: false,
data: {
city_id: 5564,
city_title: 'Brasília',
state_abbreviation: 'DF'
}
});

// Mock POST /package/shipping
mockConectEnviosAPI.setShippingResponse({
error: false,
data: [
{
postal_company_id: 1,
company_name: 'Correios',
name: 'SEDEX',
price_discounted: 70.04,
deadline: 1
},
{
postal_company_id: 2,
company_name: 'Jadlog',
name: 'PACKAGE',
price_discounted: 25.50,
deadline: 4
}
]
});
});

it('should complete quote with slot filling', async () => {
const phone = '5561888888888';

await sendMessage(app, phone, 'Quero uma cotação');
let response = await app.getLastOutboundMessage(phone);
expect(response.content.body).toContain('CEP de origem');

await sendMessage(app, phone, '70000-000');
response = await app.getLastOutboundMessage(phone);
expect(response.content.body).toContain('Brasília/DF');

await sendMessage(app, phone, '01310-100');
await sendMessage(app, phone, '2kg');

response = await app.getLastOutboundMessage(phone);
expect(response.content.body).toContain('SEDEX');
expect(response.content.body).toContain('Jadlog');
});
});

4. SLAs de Performance

MétricaObjetivoCrítico
Tempo resposta (p50)< 200ms> 500ms
Tempo resposta (p95)< 1s> 3s
Disponibilidade99.5%< 99%
Taxa de erro< 1%> 5%
Tempo resposta bot< 3s> 10s

5. Definition of Done

  • Código implementado e revisado
  • Testes unitários passando (cobertura > 70%)
  • Testes de integração passando
  • Documentação atualizada
  • Performance dentro dos SLAs
  • Deploy em staging bem-sucedido

6. Histórico de Revisões

VersãoDataDescrição
1.005/01/2026Versão inicial
2.005/01/2026Testes com API ConectEnvios V1

Modelo de Dados | Início →