function createDataset(fields, constraints, sortFields) {
    var dataset = DatasetBuilder.newDataset();
    criarEstrutura(dataset);

    try {
        log.info("🚀 Iniciando dsPostPedidoCompra");

        // Captura os parâmetros via constraints
        var estabelecimento = trim(getParametro(constraints, "estabelecimento"));
        var numeroPedido    = trim(getParametro(constraints, "numeroPedido"));
        var dataAbertura    = trim(getParametro(constraints, "dataAbertura"));
        var fornecedor      = trim(getParametro(constraints, "fornecedor"));
        var condPagamento   = trim(getParametro(constraints, "condPagamentoIndica"));
        var userCompras     = trim(getParametro(constraints, "userValidacaoCompras"));

        // Monta o payload
        var payload = {
            "C7_FILIAL": estabelecimento,
            "C7_NUM": numeroPedido,
            "C7_EMISSAO": dataAbertura,
            "C7_FORNECE": fornecedor,
            "C7_LOJA": "01",
            "C7_COND": condPagamento,
            "C7_CONTATO": userCompras,
            "C7_FILENT": estabelecimento,
            "C7_TPFRETE": "C",
            "C7_FRETE": "0",
            "C7_ITENS": [fornecedor] // você pode ajustar isso para ser um array com objetos, se necessário
        };

        log.info("📤 Payload: " + JSON.stringify(payload));

        // Monta a chamada para o serviço
        var data = {
            companyId: "01",
            serviceCode: "Integrador Pedido de compra",
            endpoint: "/REST/PEDIDO/",
            method: "post",
            timeoutService: "100",
            params: payload,
            headers: {
                'Content-Type': 'application/json'
            }
        };

        var clientService = fluigAPI.getAuthorizeClientService();
        var response = clientService.invoke(JSON.stringify(data));
        var result = response.getResult();

        log.info("✅ Retorno da API: " + result);

        if (!result || result.indexOf("ERRO") !== -1) {
            throw result || "Erro desconhecido na integração.";
        }

        dataset.addRow(["SUCESSO", result]);

    } catch (e) {
        var erro = "❌ Erro: " + e.message;
        log.error("[dsPostPedidoCompra] " + erro);
        dataset.addRow(["FALHA", erro]);
    }

    return dataset;
}

function criarEstrutura(dataset) {
    dataset.addColumn("STATUS");
    dataset.addColumn("RETORNO");
}

function getParametro(constraints, campo) {
    if (!constraints) return "";
    var campoUpper = String(campo || "").trim().toUpperCase();
    for (var i = 0; i < constraints.length; i++) {
        var c = constraints[i];
        if (String(c.fieldName || "").trim().toUpperCase() === campoUpper) {
            return String(c.initialValue || "");
        }
    }
    return "";
}

function trim(valor) {
    return String(valor == null ? "" : valor).trim();
}
