TransWar File Browser

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";
}