function servicetask99(attempt, message) {
    try {
        var validacaoItens = safeTrim(hAPI.getCardValue("validacaoItens"));

        // Só precisa consultar entrada da NFe quando o recebimento foi validado como entregue.
        if (validacaoItens !== "entregue") return;

        var dataEntrada = safeTrim(hAPI.getCardValue("dataEntradaNfeConsulta"));
        if (dataEntrada !== "") return;

        var chaveNfe = onlyDigits(hAPI.getCardValue("chaveNfe"));
        if (chaveNfe === "") {
            log.warn("[servicetask99] Chave NFe vazia. Nao foi possivel consultar entrada.");
            return;
        }

        var cKey = DatasetFactory.createConstraint("key", chaveNfe, chaveNfe, ConstraintType.MUST);
        var dsNfe = DatasetFactory.getDataset("ds_fiscal_invoice_by_keys", null, [cKey], null);

        if (!dsNfe || dsNfe.rowsCount < 1) {
            log.warn("[servicetask99] Dataset sem retorno para chave: " + chaveNfe);
            return;
        }

        var dsSuccess = safeTrim(dsNfe.getValue(0, "success")).toLowerCase() === "true";
        var dsUpdatedAt = safeTrim(dsNfe.getValue(0, "updatedAt"));

        if (dsSuccess && dsUpdatedAt !== "") {
            hAPI.setCardValue("dataEntradaNfeConsulta", dsUpdatedAt);
            log.info("[servicetask99] Data de entrada atualizada automaticamente: " + dsUpdatedAt);
            return;
        }

        var dsMessage = safeTrim(dsNfe.getValue(0, "message"));
        log.warn("[servicetask99] Consulta executada sem data de entrada. message=" + dsMessage);
    } catch (e) {
        log.error("[servicetask99] Erro na consulta automatica da NFe: " + e);
        throw e;
    }
}

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

function onlyDigits(value) {
    return String(value == null ? "" : value).replace(/\D/g, "");
}
