Path: C:\
<?php
/**
* Script de Validação e Testes Automatizados - Engine Saldo de Estoque & Multi-Cliente JSON
*/
require_once __DIR__ . '/includes/functions.php';
echo "=========================================================\n";
echo " TESTES SALDO DE ESTOQUE: FECHAMENTO DE ARMAZENAGEM \n";
echo "=========================================================\n\n";
$passedCount = 0;
$failedCount = 0;
function assertTest(string $name, bool $condition, string $msg = '') {
global $passedCount, $failedCount;
if ($condition) {
echo " [OK] {$name}\n";
$passedCount++;
} else {
echo " [FALHA] {$name}: {$msg}\n";
$failedCount++;
}
}
// 1. Inicialização
ensure_data_files();
assertTest("Inicialização dos arquivos JSON", file_exists(DATA_DIR . '/produtos.json') && file_exists(DATA_DIR . '/movimentacoes.json'));
// 2. Setup Produtos de Teste
$testProd = [
['cliente_documento' => '11111111000111', 'codigo' => 'SKU-01', 'nome' => 'PRODUTO ESTOQUE A', 'fator_palete' => 10.0],
['cliente_documento' => '11111111000111', 'codigo' => 'SKU-02', 'nome' => 'PRODUTO ESTOQUE B', 'fator_palete' => 5.0]
];
save_json('produtos.json', $testProd);
// 3. Setup Movimentações (Entrada 50 pçs SKU-01, Saída 30 pçs SKU-01 => Saldo 20 pçs; Saída 10 pçs SKU-02 sem Entrada => Saldo -10 pçs)
$testMov = [
[
'chave_nfe' => '10000000000000000000000000000000000000000001',
'numero_nfe' => '101',
'data_emissao' => '2026-09-01',
'tipo' => 'ENTRADA',
'destinatario_documento' => '11111111000111',
'destinatario_nome' => 'CLIENTE TESTE ESTOQUE',
'valor_nfe' => 1000.00,
'itens' => [
['codigo' => 'SKU-01', 'nome' => 'PRODUTO ESTOQUE A', 'quantidade' => 50.0, 'valor_total' => 1000.00]
]
],
[
'chave_nfe' => '10000000000000000000000000000000000000000002',
'numero_nfe' => '102',
'data_emissao' => '2026-09-01',
'tipo' => 'SAIDA',
'destinatario_documento' => '11111111000111',
'destinatario_nome' => 'CLIENTE TESTE ESTOQUE',
'valor_nfe' => 600.00,
'itens' => [
['codigo' => 'SKU-01', 'nome' => 'PRODUTO ESTOQUE A', 'quantidade' => 30.0, 'valor_total' => 600.00],
['codigo' => 'SKU-02', 'nome' => 'PRODUTO ESTOQUE B', 'quantidade' => 10.0, 'valor_total' => 200.00]
]
]
];
save_json('movimentacoes.json', $testMov);
// 4. Teste da Função get_estoque_consolidado()
$estoque = get_estoque_consolidado('11111111000111');
$sku1 = null;
$sku2 = null;
foreach ($estoque as $e) {
if ($e['codigo'] === 'SKU-01') $sku1 = $e;
if ($e['codigo'] === 'SKU-02') $sku2 = $e;
}
assertTest("Saldo de Estoque SKU-01 (50 Entradas - 30 Saídas = 20 Saldo)", $sku1 && $sku1['saldo_pecas'] === 20.0);
assertTest("Paletes Exatos SKU-01 (20 / 10 => 2.0)", $sku1 && $sku1['paletes_exato'] === 2.0);
assertTest("Posições Ceil SKU-01 (20 / 10 => 2)", $sku1 && $sku1['paletes_ceil'] === 2);
assertTest("Estoque Negativo SKU-02 (0 Entradas - 10 Saídas = -10 Saldo)", $sku2 && $sku2['saldo_pecas'] === -10.0);
echo "\n---------------------------------------------------------\n";
echo " RESULTADO DOS TESTES: {$passedCount} Passaram | {$failedCount} Falharam\n";
echo "---------------------------------------------------------\n\n";
if ($failedCount === 0) {
echo ">>> TODOS OS TESTES DE SALDO DE ESTOQUE PASSARAM COM SUCESSO! <<<\n";
} else {
echo ">>> ALGUNS TESTES FALHARAM. VERIFIQUE ACIMA. <<<\n";
}