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

    dataset.addColumn("codigo");
    dataset.addColumn("descricao");
    dataset.addColumn("tipo");
    dataset.addColumn("medida");
    dataset.addColumn("armazem");
    dataset.addColumn("icms");
    dataset.addColumn("ipi");
    dataset.addColumn("contrato");
    dataset.addColumn("localizacao");
    dataset.addColumn("rastro");
    dataset.addColumn("bloqueado");
    dataset.addColumn("ultimo_preco");


    try {
        var clientService = fluigAPI.getAuthorizeClientService();
        var data = {
            companyId: "1",
            serviceCode: "Postprod",
            endpoint: "/rest/uf_mata010/",
            method: "get",
            timeoutService: "60000",
            params: {}
        };

        var vo = clientService.invoke(JSON.stringify(data));
        var retorno = vo.getResult();

        if (retorno) {
            var objData = JSON.parse(retorno);
            var itens = objData["produtos"];

            if (itens && itens.length > 0) {
                for (var i = 0; i < itens.length; i++) {
                    var item = itens[i];

                    // aplica filtro:
                    var codigo = (item["B1_COD"] || "").trim();
                    var bloqueado = (item["B1_MSBLQL"] || "").trim();

                    // só adiciona se o código NÃO tiver 5 dígitos OU se bloqueado != "1"
                    if (codigo.length !== 5 && bloqueado !== "1") {
                        dataset.addRow([
                            codigo,
                            item["B1_DESC"],
                            item["B1_TIPO"],
                            item["B1_UM"],
                            item["B1_LOCPAD"],
                            item["B1_PICM"],
                            item["B1_IPI"],
                            item["B1_CONTRAT"],
                            item["B1_LOCALIZ"],
                            item["B1_RASTRO"],
                            bloqueado,
                            item["B1_UPRC"]

                        ]);
                    }
                }
            } else {
                dataset.addRow(["Sem produtos retornados"]);
            }
        } else {
            dataset.addRow(["Sem resposta da API"]);
        }

    } catch (e) {
        dataset = DatasetBuilder.newDataset();
        dataset.addColumn("ERRO");
        dataset.addRow([e.message]);
    }

    return dataset;
}
