leonardo il y a 2 semaines
Parent
commit
4eb6f2ae02

+ 2 - 5
.gitignore

@@ -5,8 +5,5 @@ yarn.lock
 /data/*
 .env
 .DS_Store
-training/.venv/
-training/adapters/
-training/*.log
-training/**/*.safetensors
-scripts/logs/
+training/
+scripts/

+ 11 - 0
db/migrations/20260904120000_add_index_abertura_atendimentos.cjs

@@ -0,0 +1,11 @@
+exports.up = function (knex) {
+  return knex.schema.alterTable("atendimentos", (t) => {
+    t.index(["Abertura"], "atendimentos_abertura_index");
+  });
+};
+
+exports.down = function (knex) {
+  return knex.schema.alterTable("atendimentos", (t) => {
+    t.dropIndex(["Abertura"], "atendimentos_abertura_index");
+  });
+};

+ 25 - 7
scripts/compararGoldenSet.js

@@ -11,9 +11,6 @@ const SETOR = setorIdx > -1 ? process.argv[setorIdx + 1] : null;
 
 const CAMPOS_CATEGORICOS = ["Resolvido", "Sentimento", "StatusCancelamento", "HorarioVisitaInformado", "VisitaAgendada"];
 
-// usa o snapshot da IA congelado em atendimento_golden_labels (Ia*) no momento em que
-// cada item foi rotulado — não junta com atendimento_avaliacoes ao vivo de propósito,
-// pra comparação nunca ser afetada por reavaliações posteriores do mesmo atendimento
 async function buscarPares() {
   let query = AtendimentoGoldenLabel.query()
     .where("atendimento_golden_labels.Status", "rotulado")
@@ -26,7 +23,22 @@ async function buscarPares() {
   return query;
 }
 
-// Jaccard entre dois conjuntos de strings (comparação textual simples, não crítica)
+async function buscarConcordanciaDireta() {
+  let query = AtendimentoGoldenLabel.query()
+    .whereIn("atendimento_golden_labels.Status", ["rotulado", "aceito"])
+    .join("atendimentos as a", "a.Id", "atendimento_golden_labels.AtendimentoId")
+    .select("atendimento_golden_labels.Status as Status");
+
+  if (SETOR) query = query.where("a.Setor", SETOR);
+
+  const linhas = await query;
+  const aceito = linhas.filter((l) => l.Status === "aceito").length;
+  const rotulado = linhas.filter((l) => l.Status === "rotulado").length;
+  const total = aceito + rotulado;
+  return { aceito, rotulado, total, percentAceito: total ? Number(((aceito / total) * 100).toFixed(1)) : null };
+}
+
+
 function jaccard(a, b) {
   const setA = new Set((a ?? []).map((s) => s.toLowerCase().trim()));
   const setB = new Set((b ?? []).map((s) => s.toLowerCase().trim()));
@@ -109,11 +121,17 @@ function metricasListas(pares) {
 }
 
 async function main() {
+  const concordancia = await buscarConcordanciaDireta();
+  console.log(
+    `[comparar-golden-set] concordância direta (aceitos sem correção / total revisado)${SETOR ? ` no setor ${SETOR}` : ""}: ` +
+      `${concordancia.aceito}/${concordancia.total} (${concordancia.percentAceito}%)`
+  );
+
   const pares = await buscarPares();
-  console.log(`[comparar-golden-set] ${pares.length} atendimentos rotulados${SETOR ? ` no setor ${SETOR}` : ""} comparados contra a avaliação da IA.`);
+  console.log(`[comparar-golden-set] ${pares.length} atendimentos rotulados à mão${SETOR ? ` no setor ${SETOR}` : ""} comparados contra a avaliação da IA (aceitos não entram nessa parte).`);
 
   if (pares.length === 0) {
-    console.log("[comparar-golden-set] nada para comparar ainda — rotule alguns atendimentos no golden set primeiro.");
+    console.log("[comparar-golden-set] nada para comparar na acurácia fina ainda — rotule alguns atendimentos à mão no golden set primeiro.");
     process.exit(0);
   }
 
@@ -146,7 +164,7 @@ async function main() {
     JSON.stringify(
       {
         config: { setor: SETOR },
-        resumo: { score, categoricas, listas },
+        resumo: { concordancia, score, categoricas, listas },
         detalhes: pares.map((p) => ({
           atendimentoId: p.AtendimentoId,
           codigo: p.Codigo,

+ 96 - 14
scripts/gerarAmostraGoldenSet.js

@@ -3,11 +3,12 @@ import path from "node:path";
 import { fileURLToPath } from "node:url";
 import { AtendimentoAvaliacao } from "../src/models/AtendimentoAvaliacao.model.js";
 import { AtendimentoGoldenLabel } from "../src/models/AtendimentoGoldenLabel.model.js";
-import { SETOR_NOMES } from "../src/config/setores.js";
+import { SETOR_NOMES, setorAvaliavel } from "../src/config/setores.js";
 
 const __dirname = path.dirname(fileURLToPath(import.meta.url));
 
 const APLICAR = process.argv.includes("--apply");
+const RESET = process.argv.includes("--reset");
 
 const tamanhoIdx = process.argv.indexOf("--tamanho");
 const TAMANHO = tamanhoIdx > -1 ? Number(process.argv[tamanhoIdx + 1]) : 40;
@@ -18,7 +19,37 @@ const MINIMO = minimoIdx > -1 ? Number(process.argv[minimoIdx + 1]) : 3;
 const expectIdx = process.argv.indexOf("--expect-count");
 const EXPECT_COUNT = expectIdx > -1 ? Number(process.argv[expectIdx + 1]) : null;
 
-const SETORES = Object.keys(SETOR_NOMES);
+const SETORES = Object.keys(SETOR_NOMES).filter(setorAvaliavel);
+
+const FAIXAS_SCORE = [
+  { nome: "baixa", min: 1, max: 4 },
+  { nome: "media", min: 5, max: 7 },
+  { nome: "alta", min: 8, max: 10 }
+];
+
+function distribuirComLimite(quantidade, chaves, limitePorChave) {
+  const alocacao = Object.fromEntries(chaves.map((c) => [c, 0]));
+  let restante = quantidade;
+  let pendentes = chaves.filter((c) => limitePorChave[c] > 0);
+
+  while (restante > 0 && pendentes.length > 0) {
+    const fatia = Math.max(1, Math.floor(restante / pendentes.length));
+    const proximaRodada = [];
+    for (const c of pendentes) {
+      if (restante <= 0) break;
+      const espaco = limitePorChave[c] - alocacao[c];
+      if (espaco <= 0) continue;
+      const add = Math.min(fatia, espaco, restante);
+      alocacao[c] += add;
+      restante -= add;
+      if (alocacao[c] < limitePorChave[c]) proximaRodada.push(c);
+    }
+    if (proximaRodada.length === pendentes.length && proximaRodada.every((c) => limitePorChave[c] - alocacao[c] < 1)) break;
+    pendentes = proximaRodada;
+  }
+
+  return alocacao;
+}
 
 async function volumePorSetor() {
   const linhas = await AtendimentoAvaliacao.query()
@@ -47,8 +78,7 @@ async function jaAmostradoPorSetor() {
   return jaAmostrado;
 }
 
-// aloca MINIMO fixo por setor, distribui o restante proporcionalmente ao volume
-// (método do maior resto), sem nunca alocar mais que o volume disponível no setor
+
 function calcularAlocacao(volume) {
   const alocacao = Object.fromEntries(SETORES.map((s) => [s, Math.min(MINIMO, volume[s])]));
   let restante = TAMANHO - Object.values(alocacao).reduce((a, b) => a + b, 0);
@@ -78,24 +108,76 @@ function calcularAlocacao(volume) {
   return alocacao;
 }
 
-async function sortearPorSetor(setor, quantidade) {
-  if (quantidade <= 0) return [];
-
+function baseQuery(setor, faixa) {
   const jaNaAmostra = AtendimentoGoldenLabel.query().select("AtendimentoId");
-
-  return AtendimentoAvaliacao.query()
+  let query = AtendimentoAvaliacao.query()
     .where("Avaliavel", true)
     .join("atendimentos as a", "a.Id", "atendimento_avaliacoes.AtendimentoId")
     .where("a.Setor", setor)
-    .whereNotIn("atendimento_avaliacoes.AtendimentoId", jaNaAmostra)
-    .orderByRaw("RAND()")
-    .limit(quantidade)
-    .select("atendimento_avaliacoes.AtendimentoId as AtendimentoId", "a.Codigo as Codigo", "a.Setor as Setor");
+    .whereNotIn("atendimento_avaliacoes.AtendimentoId", jaNaAmostra);
+  if (faixa) query = query.whereBetween("atendimento_avaliacoes.ScoreAtendente", [faixa.min, faixa.max]);
+  return query;
+}
+
+async function volumePorFaixa(setor) {
+  const volume = {};
+  for (const f of FAIXAS_SCORE) {
+    const { c } = await baseQuery(setor, f).count("* as c").first();
+    volume[f.nome] = Number(c);
+  }
+  return volume;
+}
+
+async function sortearPorSetor(setor, quantidade) {
+  if (quantidade <= 0) return [];
+
+  const volumeFaixas = await volumePorFaixa(setor);
+  const alocacaoFaixas = distribuirComLimite(
+    quantidade,
+    FAIXAS_SCORE.map((f) => f.nome),
+    volumeFaixas
+  );
+
+  const resultado = [];
+  for (const f of FAIXAS_SCORE) {
+    const qtd = alocacaoFaixas[f.nome];
+    if (qtd <= 0) continue;
+    let query = baseQuery(setor, f)
+      .orderByRaw("RAND()")
+      .limit(qtd)
+      .select(
+        "atendimento_avaliacoes.AtendimentoId as AtendimentoId",
+        "a.Codigo as Codigo",
+        "a.Setor as Setor",
+        "atendimento_avaliacoes.ScoreAtendente as ScoreAtendente"
+      );
+    if (resultado.length) query = query.whereNotIn("atendimento_avaliacoes.AtendimentoId", resultado.map((r) => r.AtendimentoId));
+    resultado.push(...(await query));
+  }
+  return resultado;
+}
+
+async function resetarAmostra() {
+  const existentes = await AtendimentoGoldenLabel.query();
+  console.log(`[gerar-amostra-golden-set] --reset: descartando ${existentes.length} linhas existentes (backup antes de apagar).`);
+
+  const backupDir = path.resolve(__dirname, "logs");
+  fs.mkdirSync(backupDir, { recursive: true });
+  const backupPath = path.join(backupDir, `reset-golden-set-${new Date().toISOString().replace(/[:.]/g, "-")}.json`);
+  fs.writeFileSync(backupPath, JSON.stringify(existentes, null, 2));
+  console.log(`[gerar-amostra-golden-set] backup da amostra descartada salvo em ${backupPath}`);
+
+  if (APLICAR && existentes.length > 0) {
+    await AtendimentoGoldenLabel.query().delete();
+    console.log("[gerar-amostra-golden-set] linhas apagadas.");
+  }
 }
 
 async function main() {
+  if (RESET) await resetarAmostra();
+
   const volume = await volumePorSetor();
-  const jaAmostrado = await jaAmostradoPorSetor();
+  const jaAmostrado = RESET ? Object.fromEntries(SETORES.map((s) => [s, 0])) : await jaAmostradoPorSetor();
   const alocacao = calcularAlocacao(volume);
 
   console.log(`[gerar-amostra-golden-set] alvo total: ${TAMANHO} | mínimo por setor: ${MINIMO}`);

+ 10 - 0
src/config/nomesInvalidosAtendente.js

@@ -0,0 +1,10 @@
+
+// nomes que a extração por IA já produziu e que não são um atendente de verdade
+// (placeholder genérico, pergunta capturada por engano, emoji) — ver auditoria de
+// 2026-09-03 do ranking de atendentes. Comparação case-insensitive.
+const NOMES_INVALIDOS = ["atendente", "atendente inicial", "💫"].map((n) => n.toLowerCase());
+
+export function nomeAtendenteValido(nome) {
+  const normalizado = String(nome ?? "").trim().toLowerCase();
+  return normalizado.length > 0 && !NOMES_INVALIDOS.includes(normalizado);
+}

+ 7 - 0
src/config/setores.js

@@ -18,3 +18,10 @@ export function nomeSetor(sigla) {
   const nome = SETOR_NOMES[sigla];
   return nome ? capitalizar(nome) : sigla;
 }
+
+
+export const SETORES_EXCLUIDOS_AVALIACAO = ["SUI"];
+
+export function setorAvaliavel(sigla) {
+  return !SETORES_EXCLUIDOS_AVALIACAO.includes(sigla);
+}

+ 15 - 0
src/config/tecnicosSuporte.js

@@ -0,0 +1,15 @@
+
+export const TECNICOS_SUPORTE_INTERNO = [
+  "Nicolas",
+  "Nicholas",
+  "Andrei",
+  "Vinicius",
+  "Gabriel",
+  "Eduardo",
+  "Jake",
+  "Lucas"
+];
+
+export function ehTecnicoSuporteInterno(nome) {
+  return TECNICOS_SUPORTE_INTERNO.includes(nome);
+}

+ 38 - 2
src/controllers/Atendimentos.Controller.js

@@ -13,10 +13,12 @@ import {
   avaliarPendentes,
   listarAvaliacoes,
   estatisticasAvaliacoes,
-  listarSetores
+  listarSetores,
+  rankingAtendentes
 } from "../services/atendimentoAvaliacaoService.js";
 import { gerarRelatorioNaoResolvidosPdf } from "../services/relatorioNaoResolvidosPdfService.js";
-import { listarGoldenSet, salvarGoldenLabel } from "../services/atendimentoGoldenLabelService.js";
+import { gerarRankingAtendentesPdf } from "../services/rankingAtendentesPdfService.js";
+import { listarGoldenSet, salvarGoldenLabel, aceitarGoldenLabelComoIa } from "../services/atendimentoGoldenLabelService.js";
 import { estruturarMensagem, montarUrlMidia } from "../utils/atendimentoFormat.js";
 import { parseFiltrosAvaliacoes } from "../utils/atendimentoAvaliacaoFiltros.js";
 import { config } from "../config/index.js";
@@ -170,6 +172,31 @@ export const AtendimentosController = {
     }
   },
 
+  RankingAtendentesAvaliacoes: async function (req, res, next) {
+    try {
+      const { setor, dataInicio, dataFim } = parseFiltrosAvaliacoes(req.query);
+      const { resultados, metadados } = await rankingAtendentes({ setor, dataInicio, dataFim });
+      res.json({ results: resultados, metadados });
+    } catch (err) {
+      next(err);
+    }
+  },
+
+  GerarRelatorioRankingAtendentes: async function (req, res, next) {
+    try {
+      const { setor, dataInicio, dataFim } = parseFiltrosAvaliacoes(req.query);
+      const { buffer } = await gerarRankingAtendentesPdf({ setor, dataInicio, dataFim });
+
+      const dataArquivo = new Date().toISOString().slice(0, 10);
+      res.setHeader("Content-Type", "application/pdf");
+      res.setHeader("Content-Disposition", `attachment; filename="ranking-atendentes-${dataArquivo}.pdf"`);
+      res.setHeader("Content-Length", buffer.length);
+      res.send(buffer);
+    } catch (err) {
+      next(err);
+    }
+  },
+
   GerarRelatorioNaoResolvidos: async function (req, res, next) {
     try {
       const filtros = parseFiltrosAvaliacoes(req.query);
@@ -203,6 +230,15 @@ export const AtendimentosController = {
     } catch (err) {
       next(err);
     }
+  },
+
+  AceitarGoldenLabel: async function (req, res, next) {
+    try {
+      const result = await aceitarGoldenLabelComoIa(req.params.id);
+      res.json(result);
+    } catch (err) {
+      next(err);
+    }
   }
 };
 

+ 6 - 0
src/middleware/schemas/Atendimento.Schema.js

@@ -82,6 +82,12 @@ export const atendimentoAvaliarSchema = z.object({
   limite: z.number().int().positive().max(200).optional()
 });
 
+export const rankingAtendentesQuerySchema = z.object({
+  setor: z.string().trim().min(1).max(10).optional(),
+  dataInicio: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
+  dataFim: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional()
+});
+
 export const goldenLabelSchema = z.object({
   ScoreAtendente: z.number().int().min(1).max(10).nullable().optional(),
   JustificativaScore: z.string().max(2000).nullable().optional(),

+ 4 - 1
src/routes/Atendimentos.Rotas.js

@@ -4,7 +4,7 @@ import { requireUser } from "../middleware/RequireUser.js";
 import { requireAdmin } from "../middleware/RequireAdmin.js";
 import { parseId } from "../middleware/ParseId.js";
 import { validate } from "../middleware/Validate.js";
-import { atendimentoBodySchema, atendimentoUrlSchema, atendimentoSyncSchema, atendimentoSyncAllSchema, atendimentoAvaliarSchema, goldenLabelSchema } from "../middleware/schemas/Atendimento.Schema.js";
+import { atendimentoBodySchema, atendimentoUrlSchema, atendimentoSyncSchema, atendimentoSyncAllSchema, atendimentoAvaliarSchema, goldenLabelSchema, rankingAtendentesQuerySchema } from "../middleware/schemas/Atendimento.Schema.js";
 
 export const atendimentosRouter = Router();
 
@@ -17,9 +17,12 @@ atendimentosRouter.get("/avaliacoes/relatorio", requireUser, requireAdmin, Atend
 atendimentosRouter.get("/avaliacoes", requireUser, requireAdmin, AtendimentosController.ListarAvaliacoes);
 atendimentosRouter.get("/avaliacoes/estatisticas", requireUser, requireAdmin, AtendimentosController.EstatisticasAvaliacoes);
 atendimentosRouter.get("/avaliacoes/setores", requireUser, requireAdmin, AtendimentosController.ListarSetoresAvaliacoes);
+atendimentosRouter.get("/avaliacoes/ranking-atendentes", requireUser, requireAdmin, validate({ query: rankingAtendentesQuerySchema }), AtendimentosController.RankingAtendentesAvaliacoes);
+atendimentosRouter.get("/avaliacoes/ranking-atendentes/relatorio", requireUser, requireAdmin, validate({ query: rankingAtendentesQuerySchema }), AtendimentosController.GerarRelatorioRankingAtendentes);
 atendimentosRouter.get("/golden-set", requireUser, requireAdmin, AtendimentosController.ListarGoldenSet);
 atendimentosRouter.get("/", requireUser, AtendimentosController.Listar);
 atendimentosRouter.get("/:id", requireUser, parseId, AtendimentosController.Obter);
 atendimentosRouter.post("/:id/avaliar", requireUser, requireAdmin, parseId, AtendimentosController.AvaliarUm);
 atendimentosRouter.post("/:id/sync", requireUser, requireAdmin, parseId, AtendimentosController.SincronizarUm);
 atendimentosRouter.patch("/:id/golden-label", requireUser, requireAdmin, parseId, validate({ body: goldenLabelSchema }), AtendimentosController.SalvarGoldenLabel);
+atendimentosRouter.post("/:id/golden-label/aceitar", requireUser, requireAdmin, parseId, AtendimentosController.AceitarGoldenLabel);

+ 152 - 2
src/services/atendimentoAvaliacaoService.js

@@ -8,6 +8,8 @@ import { AtendimentoAvaliacao } from "../models/AtendimentoAvaliacao.model.js";
 import { AtendimentoMensagem } from "../models/AtendimentoMensagem.model.js";
 import { NotFoundError, UnprocessableEntityError } from "../shared/errors/index.js";
 import { nomeSetor, setorAvaliavel, SETORES_EXCLUIDOS_AVALIACAO } from "../config/setores.js";
+import { ehTecnicoSuporteInterno } from "../config/tecnicosSuporte.js";
+import { nomeAtendenteValido } from "../config/nomesInvalidosAtendente.js";
 
 const LIMITE_RELATORIO_PADRAO = 150;
 
@@ -69,6 +71,15 @@ const AVALIACAO_SYSTEM_PROMPT = [
   "acompanhar ou sem dar encaminhamento efetivo, ou simplesmente não respondeu. Ou seja: o cliente sumir",
   "só protege a nota se a atuação do atendente até ali foi realmente boa — nunca use isso para justificar",
   "nota alta em um atendimento onde o atendente também falhou.",
+  "Caso particular dessa exceção, muito comum e frequentemente avaliado errado: o cliente abre o",
+  "atendimento sem dizer qual é o problema (ex.: manda só um número de menu, um \"oi\" ou um emoji), o",
+  "atendente cumprimenta e pergunta o que ele precisa, e o cliente NUNCA MAIS RESPONDE — o atendimento",
+  "é encerrado tempos depois. Aqui não havia problema nenhum a resolver: o atendente fez exatamente o",
+  "que cabia (perguntar) e ficou sem resposta. Uma conversa CURTA não é sinônimo de atendente",
+  "negligente — não use \"atendimento muito curto e sem solução\" como justificativa de nota baixa. Se a",
+  "pergunta do atendente veio em tempo razoável e de forma cordial, o score fica na faixa 7-8 (não",
+  "1-4), sentimento_cliente_final=\"indefinido\" (o cliente não chegou a se manifestar, então NÃO é",
+  '"negativo") e resolvido="nao"/"indefinido" sem que isso pese contra o atendente.',
   "",
   "Primeiro escreva a justificativa_score (1 a 2 frases analisando a atuação do atendente) e só então",
   "dê o score_atendente (1 a 10), que deve ser coerente com a justificativa e com o desfecho:",
@@ -333,7 +344,20 @@ const AVALIACAO_SYSTEM_PROMPT = [
   "  (6) se",
   "  o motivo de não ter concluído foi o CLIENTE não responder a um contato/retorno do atendente, diga",
   "  isso explicitamente (é a causa real do desfecho em aberto) em vez de atribuir a pendência de forma",
-  "  vaga ao processo/atendimento. (7) use os nomes dos atendentes quando a conversa tiver mais de um",
+  "  vaga ao processo/atendimento. Isso vale principalmente para o caso em que o cliente abre o",
+  '  atendimento SEM DIZER qual é o problema (ex.: manda só um número de menu, um "oi" ou um emoji), o',
+  "  atendente pergunta o que ele precisa e o cliente não responde mais: o resumo tem que dizer as duas",
+  "  coisas — que o cliente nunca chegou a explicar o que queria e que ele não respondeu à pergunta do",
+  '  atendente. Não escreva que o cliente "solicitou ajuda"/"relatou um problema" (ele não relatou nada)',
+  '  nem que o atendimento "foi encerrado sem solução" como se algo tivesse ficado pendente por falha do',
+  "  atendimento — não havia problema declarado para resolver.",
+  '  Exemplo ruim: "O cliente Mirian entrou em contato solicitando ajuda, mas o atendimento foi',
+  '  encerrado sem solução."',
+  '  Exemplo bom: "A cliente Mirian iniciou o atendimento enviando apenas uma opção de menu, sem',
+  '  descrever o que precisava. A atendente Bruna cumprimentou e perguntou como poderia ajudar, mas a',
+  '  cliente não respondeu mais, e o atendimento foi encerrado no dia seguinte sem que o motivo do',
+  '  contato chegasse a ser informado."',
+  "  (7) use os nomes dos atendentes quando a conversa tiver mais de um",
   "  e a ação de cada um for relevante para entender o desfecho (quem transferiu, quem tentou contato).",
   '  Exemplo ruim: "Gaby procurou atendimento por problemas de internet, mas o atendimento foi',
   '  transferido para o setor financeiro sem solução encontrada."',
@@ -441,7 +465,28 @@ const AVALIACAO_SYSTEM_PROMPT = [
   '  Exemplo bom: "O atendente Carla transferiu o caso para o setor de suporte. O técnico que assumiu',
   '  informou que a equipe já estava em contato com a titular sobre o mesmo caso, sinalizando que a',
   '  situação já era conhecida antes desse atendimento."',
-  "- sugestoes_melhoria: 0 a 5 itens curtos e acionáveis para o atendente/equipe melhorar; lista vazia se exemplar.",
+  '  (15) NUNCA use no resumo advérbios de tempo relativos ao momento da conversa — "ontem", "hoje",',
+  '  "amanhã", "ontem à noite", "hoje pela manhã", "hoje mais tarde" — mesmo quando o atendente ou o',
+  "  cliente tiver falado exatamente assim na conversa. O resumo é lido meses depois, longe da data do",
+  '  atendimento, e nesse contexto "ontem"/"hoje" não significam nada para quem lê. Reescreva sempre',
+  '  ancorando no próprio atendimento: "na noite anterior", "no dia anterior", "na manhã do mesmo dia",',
+  '  "na manhã seguinte", "no dia do contato", "no dia seguinte ao contato". Quando a conversa citar uma',
+  '  data/horário concreto (ex.: "23/12 às 16h30"), prefira a data concreta ao advérbio (ver regra 10).',
+  "  Não invente uma data absoluta que não está na conversa: se houver apenas o advérbio relativo,",
+  "  traduza para a forma ancorada acima, nunca para um dia do calendário deduzido por você.",
+  '  Exemplo ruim: "O cliente Gabriel entrou em contato devido à falta de internet no seu sítio. O',
+  '  atendimento foi transferido para o setor Suporte, onde Nicolas explicou que houve um rompimento na',
+  '  região das Campinas ontem à noite e foi resolvido pela manhã." (copia "ontem"/"hoje" da fala do',
+  '  atendente; quem lê o resumo depois não sabe qual dia é esse "ontem")',
+  '  Exemplo bom: "O cliente Gabriel entrou em contato devido à falta de internet no seu sítio. A',
+  '  atendente Carla transferiu o caso para o Suporte, onde o atendente Nicolas explicou que houve um',
+  '  rompimento na região das Campinas na noite anterior, já resolvido na manhã do mesmo dia."',
+  "- sugestoes_melhoria: 0 a 5 itens curtos e acionáveis para o atendente/equipe melhorar; lista vazia se",
+  "  exemplar. NUNCA sugira algo que o atendente JÁ FEZ na conversa — antes de escrever cada sugestão,",
+  "  confira se aquela ação não está literalmente nas mensagens dele (ex.: não sugira \"poderia ter",
+  '  perguntado qual era o problema do cliente" quando o atendente perguntou "como posso te ajudar?" e',
+  "  foi o cliente que não respondeu). Quando o desfecho dependia só do cliente e o atendente fez o que",
+  "  cabia, prefira lista vazia a inventar uma crítica.",
   "- atendentes: nomes dos atendentes humanos que participaram (como aparecem na conversa).",
   "- visita_agendada: true se ficou combinada visita técnica presencial na conversa.",
   '- horario_visita_informado: "sim" se o atendente informou data/horário (mesmo aproximado) da visita;',
@@ -1053,6 +1098,111 @@ export async function agregarQualidade({ setor, status, dataInicio, dataFim } =
   return { porSetorMedia, porSetorCount, porResolvido, malAvaliados, totalComNota, filtros: { setor, status, dataInicio, dataFim } };
 }
 
+// ranking de atendentes por desempenho nas avaliações: como `Atendentes` é uma coluna
+// JSON (pode ter múltiplos nomes por linha), não dá pra fazer GROUP BY nela via SQL —
+// trazemos as linhas filtradas (setor/período) e explodimos o array em Node. Volume real
+// (~7 mil avaliações) é pequeno o suficiente pra isso ser trivial e rápido. Quando uma
+// avaliação tem múltiplos atendentes, ela conta igualmente para cada um. `apenasTecnicos`
+// aplica a allowlist de Suporte Interno (só usada pela tela de ranking); outras leituras de
+// `Atendentes` (listagem, relatório de não resolvidos) não devem passar por essa allowlist.
+export async function rankingAtendentes({ setor, dataInicio, dataFim, apenasTecnicos = true } = {}) {
+  const rows = await AtendimentoAvaliacao.query()
+    .join("atendimentos as a", "a.Id", "atendimento_avaliacoes.AtendimentoId")
+    .where("atendimento_avaliacoes.Avaliavel", true)
+    .modify((q) => {
+      if (setor) q.where("a.Setor", setor);
+      if (dataInicio) q.where("a.Abertura", ">=", dataInicio);
+      if (dataFim) q.where("a.Abertura", "<=", `${dataFim} 23:59:59`);
+    })
+    .select(
+      "atendimento_avaliacoes.Atendentes",
+      "atendimento_avaliacoes.ScoreAtendente",
+      "atendimento_avaliacoes.Resolvido",
+      "atendimento_avaliacoes.Sentimento",
+      "atendimento_avaliacoes.StatusCancelamento"
+    );
+
+  const porAtendente = new Map();
+  let descartadasSemAtendente = 0;
+  let descartadasNomeInvalido = 0;
+  let descartadasForaDaEquipe = 0;
+
+  for (const row of rows) {
+    const nomes = Array.isArray(row.Atendentes) ? row.Atendentes : [];
+    // dedup dentro da própria linha: evita contar 2x se a IA repetir o nome no array
+    const nomesUnicos = [...new Set(nomes.map((n) => String(n ?? "").trim()).filter(Boolean))];
+
+    if (nomesUnicos.length === 0) {
+      descartadasSemAtendente += 1;
+      continue;
+    }
+
+    for (const nome of nomesUnicos) {
+      if (!nomeAtendenteValido(nome)) {
+        descartadasNomeInvalido += 1;
+        continue;
+      }
+      if (apenasTecnicos && !ehTecnicoSuporteInterno(nome)) {
+        descartadasForaDaEquipe += 1;
+        continue;
+      }
+
+      if (!porAtendente.has(nome)) {
+        porAtendente.set(nome, {
+          atendente: nome,
+          totalAvaliacoes: 0,
+          somaScore: 0,
+          comScore: 0,
+          resolvidoCount: { sim: 0, parcial: 0, nao: 0, indefinido: 0 },
+          sentimentoCount: { positivo: 0, neutro: 0, negativo: 0, indefinido: 0 },
+          cancelamentoCount: { nao: 0, ameacou: 0, cancelou: 0, indefinido: 0 }
+        });
+      }
+      const acc = porAtendente.get(nome);
+      acc.totalAvaliacoes += 1;
+      if (row.ScoreAtendente !== null && row.ScoreAtendente !== undefined) {
+        acc.somaScore += row.ScoreAtendente;
+        acc.comScore += 1;
+      }
+      const resolvido = row.Resolvido ?? "indefinido";
+      const sentimento = row.Sentimento ?? "indefinido";
+      const cancelamento = row.StatusCancelamento ?? "indefinido";
+      if (resolvido in acc.resolvidoCount) acc.resolvidoCount[resolvido] += 1;
+      if (sentimento in acc.sentimentoCount) acc.sentimentoCount[sentimento] += 1;
+      if (cancelamento in acc.cancelamentoCount) acc.cancelamentoCount[cancelamento] += 1;
+    }
+  }
+
+  const resultados = [...porAtendente.values()]
+    .map((a) => ({
+      atendente: a.atendente,
+      mediaScore: a.comScore ? Number((a.somaScore / a.comScore).toFixed(2)) : null,
+      totalAvaliacoes: a.totalAvaliacoes,
+      percentualResolvido: a.totalAvaliacoes ? Number(((a.resolvidoCount.sim / a.totalAvaliacoes) * 100).toFixed(1)) : 0,
+      resolvido: a.resolvidoCount,
+      sentimento: a.sentimentoCount,
+      cancelamento: a.cancelamentoCount
+    }))
+    // atendente sem nenhum score vai pro fim; empate em mediaScore desempata por volume
+    .sort((x, y) => {
+      if (x.mediaScore === null && y.mediaScore === null) return y.totalAvaliacoes - x.totalAvaliacoes;
+      if (x.mediaScore === null) return 1;
+      if (y.mediaScore === null) return -1;
+      if (y.mediaScore !== x.mediaScore) return y.mediaScore - x.mediaScore;
+      return y.totalAvaliacoes - x.totalAvaliacoes;
+    });
+
+  return {
+    resultados,
+    metadados: {
+      totalAvaliacoesElegiveis: rows.length,
+      descartadasSemAtendente,
+      descartadasNomeInvalido,
+      descartadasForaDaEquipe
+    }
+  };
+}
+
 // amostra recente de avaliações com sugestões de melhoria registradas, usada pelo chat de
 // atendimentos para perguntas sobre padrões/lições aprendidas (sem chamada LLM auxiliar —
 // o LLM final do modo atendimentos já sintetiza o CONTEXTO bruto).

+ 19 - 0
src/services/atendimentoGoldenLabelService.js

@@ -80,3 +80,22 @@ export async function salvarGoldenLabel(atendimentoId, dados) {
 
   return AtendimentoGoldenLabel.query().patchAndFetchById(atendimentoId, patch);
 }
+
+
+export async function aceitarGoldenLabelComoIa(atendimentoId) {
+  const atual = await AtendimentoGoldenLabel.query().findById(atendimentoId);
+  if (!atual) throw new NotFoundError("atendimento_fora_da_amostra_golden");
+
+  const ia = await AtendimentoAvaliacao.query().findById(atendimentoId);
+  if (!ia) throw new NotFoundError("avaliacao_ia_nao_encontrada");
+
+  const patch = { Status: "aceito", UpdatedAt: new Date() };
+  for (const campo of CAMPOS_SNAPSHOT_IA) {
+    patch[campo] = ia[campo] ?? null;
+    patch[`Ia${campo}`] = ia[campo] ?? null;
+  }
+  if (!atual.LabeledAt) patch.LabeledAt = new Date();
+  if (!atual.IaSnapshotEm) patch.IaSnapshotEm = new Date();
+
+  return AtendimentoGoldenLabel.query().patchAndFetchById(atendimentoId, patch);
+}

+ 24 - 10
src/services/atendimentoIxcContextoService.js

@@ -1,7 +1,19 @@
 import { buscarAtendimentoOsPorId, buscarContratosCliente, buscarOsAvancado } from "./ixcIntegradorService.js";
 
-// status: "ok" | "sem_erp_protocolo" | "sem_ticket" | "erro"
-// contexto só é preenchido quando status === "ok"; erro só quando status === "erro"
+
+const JANELA_DIAS_ANTES_OS_TECNICA = 3;
+const JANELA_DIAS_DEPOIS_OS_TECNICA = 10;
+
+function dentroDaJanela(dataOs, dataAtendimento) {
+  if (!dataOs || !dataAtendimento) return false;
+  const os = new Date(dataOs).getTime();
+  const atendimento = new Date(dataAtendimento).getTime();
+  if (Number.isNaN(os) || Number.isNaN(atendimento)) return false;
+  const diffDias = (os - atendimento) / 86400000;
+  return diffDias >= -JANELA_DIAS_ANTES_OS_TECNICA && diffDias <= JANELA_DIAS_DEPOIS_OS_TECNICA;
+}
+
+
 export async function buscarContextoIxc(atendimento) {
   const cliente = atendimento?.cliente;
   if (!cliente?.ErpProtocolo) return { status: "sem_erp_protocolo", contexto: null, erro: null };
@@ -18,14 +30,16 @@ export async function buscarContextoIxc(atendimento) {
   const ticket = Array.isArray(tickets) ? tickets[0] : null;
   if (!ticket) return { status: "sem_ticket", contexto: null, erro: null };
 
-  const osList = (ticket.os ?? []).map((os) => ({
-    status: os.status ?? null,
-    assunto: os.assunto?.assunto ?? null,
-    tecnico: os.id_atendente ?? null,
-    dataAbertura: os.data_abertura ?? null,
-    dataFechamento: os.data_fechamento ?? null,
-    mensagemResposta: os.mensagem_resposta ?? null
-  }));
+  const osList = (ticket.os ?? [])
+    .filter((os) => dentroDaJanela(os.data_abertura, atendimento?.Abertura))
+    .map((os) => ({
+      status: os.status ?? null,
+      assunto: os.assunto?.assunto ?? null,
+      tecnico: os.id_atendente ?? null,
+      dataAbertura: os.data_abertura ?? null,
+      dataFechamento: os.data_fechamento ?? null,
+      mensagemResposta: os.mensagem_resposta ?? null
+    }));
 
   return {
     status: "ok",

+ 110 - 0
src/services/rankingAtendentesPdfService.js

@@ -0,0 +1,110 @@
+import PDFDocument from "pdfkit";
+import { rankingAtendentes } from "./atendimentoAvaliacaoService.js";
+import { nomeSetor } from "../config/setores.js";
+
+const COLUNAS = [
+  { titulo: "#", x: 40, largura: 20 },
+  { titulo: "Atendente", x: 65, largura: 130 },
+  { titulo: "Média", x: 200, largura: 55 },
+  { titulo: "Avaliações", x: 260, largura: 70 },
+  { titulo: "% Resolvido", x: 335, largura: 75 },
+  { titulo: "Sent. neg.", x: 415, largura: 100 }
+];
+
+function formatData(value) {
+  if (!value) return "—";
+  const d = new Date(value);
+  if (Number.isNaN(d.getTime())) return "—";
+  return d.toLocaleDateString("pt-BR", { day: "2-digit", month: "2-digit", year: "numeric" });
+}
+
+function formatDataHora(value) {
+  const d = new Date(value);
+  return `${d.toLocaleDateString("pt-BR")} ${d.toLocaleTimeString("pt-BR", { hour: "2-digit", minute: "2-digit" })}`;
+}
+
+function descreverFiltros({ setor, dataInicio, dataFim }) {
+  const partes = [];
+  partes.push(`Período: ${dataInicio ? formatData(dataInicio) : "início"} a ${dataFim ? formatData(dataFim) : "hoje"}`);
+  if (setor) partes.push(`Setor: ${nomeSetor(setor)}`);
+  return partes.join(" · ");
+}
+
+function percentual(count, total) {
+  return total ? Number(((count / total) * 100).toFixed(1)) : 0;
+}
+
+function renderizarCabecalhoTabela(doc) {
+  const y = doc.y;
+  doc.fontSize(9).fillColor("#000");
+  COLUNAS.forEach((col) => doc.text(col.titulo, col.x, y, { width: col.largura, lineBreak: false }));
+  doc.x = 40;
+  doc.y = y + 14;
+  doc.moveTo(40, doc.y).lineTo(555, doc.y).strokeColor("#ccc").stroke();
+  doc.moveDown(0.3);
+}
+
+function renderizarLinha(doc, item, posicao) {
+  const y = doc.y;
+  const valores = [
+    String(posicao),
+    item.atendente,
+    item.mediaScore !== null ? String(item.mediaScore) : "sem nota",
+    String(item.totalAvaliacoes),
+    `${item.percentualResolvido}%`,
+    `${percentual(item.sentimento.negativo, item.totalAvaliacoes)}%`
+  ];
+  doc.fontSize(9).fillColor("#000");
+  COLUNAS.forEach((col, idx) => doc.text(valores[idx], col.x, y, { width: col.largura, lineBreak: false }));
+  doc.x = 40;
+  doc.y = y + 14;
+  if (doc.y > 760) {
+    doc.addPage();
+    renderizarCabecalhoTabela(doc);
+  }
+}
+
+function renderizarRodapeMetadados(doc, metadados) {
+  const descartadas = metadados.descartadasSemAtendente + metadados.descartadasNomeInvalido + metadados.descartadasForaDaEquipe;
+  doc.moveDown(1);
+  doc.fontSize(8).fillColor("#666").text(
+    `${metadados.totalAvaliacoesElegiveis} avaliações consideradas no período/setor · ${descartadas} descartadas ` +
+      "(sem atendente identificado, nome inválido ou fora da equipe)."
+  );
+}
+
+function renderizarPdfRanking({ resultados, metadados, filtros }) {
+  return new Promise((resolve, reject) => {
+    const doc = new PDFDocument({ margin: 40, size: "A4", bufferPages: true });
+    const chunks = [];
+    doc.on("data", (chunk) => chunks.push(chunk));
+    doc.on("end", () => resolve(Buffer.concat(chunks)));
+    doc.on("error", reject);
+
+    doc.fontSize(16).fillColor("#000").text("Ranking de Atendentes — Suporte Interno");
+    doc.fontSize(9).fillColor("#666")
+      .text(`Gerado em ${formatDataHora(new Date())}`)
+      .text(descreverFiltros(filtros))
+      .text(`Total de atendentes: ${resultados.length}`);
+    doc.moveDown(1);
+
+    if (resultados.length === 0) {
+      doc.fontSize(10).fillColor("#666").text("Nenhum atendente encontrado para os filtros selecionados.");
+    } else {
+      renderizarCabecalhoTabela(doc);
+      resultados.forEach((item, idx) => renderizarLinha(doc, item, idx + 1));
+    }
+
+    renderizarRodapeMetadados(doc, metadados);
+    doc.end();
+  });
+}
+
+// sem limite de segurança de itens (ao contrário do relatório de não resolvidos): o volume
+// aqui é de dezenas de atendentes, não milhares de atendimentos, então não há risco real de
+// um PDF gigante.
+export async function gerarRankingAtendentesPdf({ setor, dataInicio, dataFim } = {}) {
+  const { resultados, metadados } = await rankingAtendentes({ setor, dataInicio, dataFim });
+  const buffer = await renderizarPdfRanking({ resultados, metadados, filtros: { setor, dataInicio, dataFim } });
+  return { buffer, totalItens: resultados.length };
+}

+ 4 - 1
src/utils/atendimentoFormat.js

@@ -10,6 +10,8 @@ const TRANSCRICAO_SENTINELS = new Set(["__processando__", "__erro__"]);
 export const AUDIO_MEDIA_TYPES = new Set(["mpga", "mp3", "audio", "oga"]);
 const PLACEHOLDER_AUDIO_SEM_TRANSCRICAO = "[áudio sem transcrição disponível]";
 
+const SLA_AGUARDANDO_RESPOSTA_RE = /cliente\s+aguardando\s+resposta\s+h[aá]\s+mais\s+de/i;
+
 function decodeHtmlEntities(str) {
   return str
     .replace(/&nbsp;/g, " ")
@@ -71,9 +73,10 @@ export function estruturarMensagem(m) {
     papel = "cliente";
     texto = stripHtml(m.Body);
   } else if (m.Resposta === 9 || m.Tipodemidia === "ifstatus") {
-    
+
     papel = "sistema";
     texto = stripHtml(m.Body);
+    if (SLA_AGUARDANDO_RESPOSTA_RE.test(texto)) texto = "";
   } else {
     papel = "desconhecido";
     texto = stripHtml(m.Body);

+ 0 - 40
training/adapters_run1_dados_com_bug/adapter_config.json

@@ -1,40 +0,0 @@
-{
-    "adapter_path": "adapters",
-    "batch_size": 1,
-    "config": null,
-    "data": "data",
-    "fine_tune_type": "lora",
-    "grad_accumulation_steps": 1,
-    "grad_checkpoint": true,
-    "iters": 2026,
-    "learning_rate": 1e-05,
-    "lora_parameters": {
-        "rank": 8,
-        "dropout": 0.0,
-        "scale": 20.0
-    },
-    "lr_schedule": null,
-    "mask_prompt": false,
-    "max_seq_length": 4096,
-    "model": "mlx-community/Meta-Llama-3.1-8B-Instruct-4bit",
-    "num_layers": 16,
-    "optimizer": "adam",
-    "optimizer_config": {
-        "adam": {},
-        "adamw": {},
-        "muon": {},
-        "sgd": {},
-        "adafactor": {}
-    },
-    "project_name": null,
-    "report_to": null,
-    "resume_adapter_file": "adapters/adapters.safetensors",
-    "save_every": 100,
-    "seed": 0,
-    "steps_per_eval": 100,
-    "steps_per_report": 10,
-    "test": false,
-    "test_batches": 500,
-    "train": true,
-    "val_batches": 25
-}

BIN
training/adapters_run1_dados_com_bug/adapters.safetensors


+ 1405 - 1003
training/data/manifest.json

@@ -1,5 +1,5 @@
 {
-  "geradoEm": "2026-07-28T14:25:55.345Z",
+  "geradoEm": "2026-08-04T17:03:13.194Z",
   "filtro": {
     "scoreMin": 8,
     "resolvidos": [
@@ -8,1060 +8,1462 @@
     "sentimentoExcluido": "negativo",
     "maxChars": 16000
   },
-  "train": 947,
-  "valid": 105,
+  "train": 1309,
+  "valid": 145,
   "protocolos": [
-    "FIN0000007526/2026",
-    "FIN0000007288/2026",
-    "ATE0000008623/2026",
-    "PLA0000001057/2026",
+    "FIN0000007607/2026",
+    "SUP0000016417/2026",
+    "FIN0000006852/2026",
+    "SUP0000015394/2026",
+    "ATE0000008536/2026",
+    "ATE0000008446/2026",
+    "FIN0000007603/2026",
+    "SUP0000014624/2026",
+    "SUP0000014499/2026",
+    "SUP0000015051/2026",
+    "FIN0000007602/2026",
+    "SUP0000016483/2026",
+    "FIN0000007366/2026",
+    "FIN0000006615/2025",
+    "SUP0000016387/2026",
+    "FIN0000007580/2026",
+    "ATE0000008959/2026",
     "SUP0000014833/2026",
-    "SUP0000015484/2026",
-    "VEN0000003230/2026",
-    "SUP0000014661/2026",
-    "VEN0000003059/2026",
-    "FIN0000007651/2026",
-    "FIN0000006853/2026",
-    "VEN0000003152/2026",
-    "FIN0000007046/2026",
-    "SUP0000015558/2026",
-    "FIN0000006861/2026",
-    "PLA0000001059/2026",
-    "SUP0000015941/2026",
-    "FIN0000007781/2026",
-    "FIN0000007285/2026",
-    "FIN0000006935/2026",
-    "SUP0000014435/2026",
-    "ATE0000008036/2026",
-    "ATE0000008450/2026",
-    "SUP0000014926/2026",
-    "SUP0000015236/2026",
-    "FIN0000007720/2026",
-    "ATE0000008264/2026",
-    "FIN0000007605/2026",
-    "SUP0000015510/2026",
-    "FIN0000007284/2026",
-    "SUP0000014893/2026",
-    "VEN0000003290/2026",
-    "SUP0000015330/2026",
-    "ATE0000008630/2026",
-    "SUP0000014307/2026",
-    "ATE0000008545/2026",
-    "POS0000006337/2026",
-    "FIN0000007098/2026",
-    "ATE0000008499/2026",
+    "SUP0000016033/2026",
+    "ATE0000007881/2026",
+    "SUP0000014727/2026",
+    "SUP0000015842/2026",
+    "SUP0000015362/2026",
+    "SUI0000000642/2026",
+    "SUP0000014739/2026",
+    "SUP0000015920/2026",
+    "POS0000006198/2026",
+    "POS0000006329/2026",
+    "ATE0000008208/2026",
+    "FIN0000007762/2026",
+    "VEN0000003092/2026",
+    "SUP0000015929/2026",
+    "VEN0000003318/2026",
+    "ATE0000008424/2026",
+    "FIN0000006973/2026",
+    "ATE0000008792/2026",
+    "SUP0000014404/2026",
     "FIN0000007229/2026",
-    "SUP0000015296/2026",
+    "ATE0000008605/2026",
+    "FIN0000007449/2026",
+    "SUP0000016574/2026",
+    "FIN0000007402/2026",
+    "SUP0000016103/2026",
+    "SUP0000016430/2026",
+    "VEN0000003116/2026",
+    "VEN0000003233/2026",
+    "PLA0000001135/2026",
+    "SUP0000016205/2026",
+    "ATE0000008232/2026",
+    "SUP0000004376/2025",
+    "SUP0000024891/2025",
+    "SUP0000015120/2026",
+    "FIN0000007414/2026",
+    "SUP0000011083/2026",
+    "ATE0000008007/2026",
+    "FIN0000007746/2026",
+    "FIN0000007660/2026",
+    "ATE0000008353/2026",
+    "SUP0000014896/2026",
+    "ATE0000008708/2026",
+    "VEN0000003277/2026",
+    "ATE0000008288/2026",
+    "VEN0000003381/2026",
     "VEN0000003128/2026",
-    "FIN0000007396/2026",
-    "SUP0000016107/2026",
-    "ATE0000008040/2026",
-    "SUP0000014404/2026",
-    "SUP0000015325/2026",
-    "SUP0000011731/2024",
+    "FIN0000008134/2026",
+    "SUP0000015501/2026",
+    "FIN0000008009/2026",
+    "ATE0000008461/2026",
+    "SUP0000015958/2026",
+    "FIN0000007900/2026",
+    "ATE0000008060/2026",
+    "ATE0000008837/2026",
+    "SUP0000015889/2026",
+    "SUP0000015655/2026",
+    "ATE0000009007/2026",
+    "SUP0000014755/2026",
+    "FIN0000007313/2026",
+    "ATE0000008114/2026",
+    "FIN0000007907/2026",
+    "POS0000014841/2025",
+    "ATE0000008113/2026",
+    "FIN0000007207/2026",
+    "FIN0000007008/2026",
+    "FIN0000007319/2026",
+    "FIN0000007152/2026",
+    "SUP0000015385/2026",
+    "SUP0000014775/2026",
+    "SUP0000015919/2026",
+    "ATE0000008186/2026",
+    "FIN0000008047/2026",
+    "FIN0000007720/2026",
+    "ATE0000009013/2026",
+    "SUP0000015122/2026",
+    "FIN0000007340/2026",
+    "ATE0000008518/2026",
+    "ATE0000008623/2026",
+    "FIN0000007312/2026",
+    "ATE0000008698/2026",
+    "SUP0000015365/2026",
+    "FIN0000007691/2026",
+    "SUP0000015347/2026",
+    "PLA0000001136/2026",
+    "FIN0000007882/2026",
     "ATE0000008591/2026",
-    "SUP0000015815/2026",
-    "SUP0000014872/2026",
-    "ATE0000008671/2026",
-    "SUP0000014933/2026",
-    "SUP0000016075/2026",
-    "ATE0000008536/2026",
-    "VEN0000003201/2026",
-    "FIN0000007037/2026",
-    "FIN0000006887/2026",
-    "ATE0000007952/2026",
-    "SUP0000015313/2026",
-    "FIN0000006899/2026",
+    "FIN0000007937/2026",
+    "SUP0000014906/2026",
+    "SUP0000014866/2026",
+    "ATE0000007946/2026",
+    "VEN0000003358/2026",
+    "FIN0000007323/2026",
+    "FIN0000007946/2026",
+    "SUP0000015055/2026",
+    "FIN0000007377/2026",
+    "POS0000006387/2026",
+    "FIN0000007758/2026",
+    "SUP0000015938/2026",
+    "FIN0000007678/2026",
+    "FIN0000007361/2026",
+    "VEN0000003224/2026",
+    "ATE0000008904/2026",
+    "VEN0000003062/2026",
+    "SUP0000015074/2026",
+    "ATE0000007799/2026",
+    "FIN0000007426/2026",
+    "FIN0000007700/2026",
+    "FIN0000007370/2026",
+    "ATE0000007913/2026",
+    "SUP0000014673/2026",
+    "SUP0000015799/2026",
+    "ATE0000008876/2026",
+    "SUP0000015450/2026",
+    "SUP0000015151/2026",
+    "ATE0000008003/2026",
     "FIN0000007557/2026",
-    "FIN0000007008/2026",
-    "FIN0000007274/2026",
-    "SUP0000014601/2026",
-    "SUP0000014573/2026",
-    "FIN0000007564/2026",
-    "SUP0000015846/2026",
-    "SUP0000015889/2026",
-    "SUP0000015976/2026",
-    "SUP0000014956/2026",
-    "ATE0000008257/2026",
-    "FIN0000007628/2026",
-    "SUP0000015033/2026",
-    "VEN0000003223/2026",
-    "VEN0000003133/2026",
-    "SUP0000014987/2026",
-    "FIN0000007342/2026",
-    "FIN0000007308/2026",
-    "ATE0000008589/2026",
-    "SUP0000015051/2026",
+    "SUP0000015045/2026",
+    "SUP0000015157/2026",
+    "FIN0000007820/2026",
+    "ATE0000008157/2026",
+    "ATE0000008872/2026",
+    "SUP0000014556/2026",
+    "SUP0000010904/2026",
+    "FIN0000007933/2026",
+    "ATE0000008036/2026",
+    "ATE0000008788/2026",
+    "FIN0000007960/2026",
+    "ATE0000008275/2026",
+    "VEN0000003385/2026",
+    "SUP0000014712/2026",
+    "ATE0000008406/2026",
+    "SUP0000015679/2026",
+    "FIN0000007976/2026",
+    "SUP0000016012/2026",
+    "ATE0000009020/2026",
+    "SUP0000016424/2026",
+    "ATE0000008004/2026",
+    "FIN0000007302/2026",
+    "SUP0000015578/2026",
+    "SUP0000016531/2026",
+    "SUP0000014996/2026",
+    "ATE0000008363/2026",
+    "FIN0000007427/2026",
+    "ATE0000008349/2026",
+    "VEN0000003114/2026",
+    "SUP0000016571/2026",
+    "ATE0000008970/2026",
+    "SUP0000014822/2026",
+    "VEN0000003274/2026",
+    "SUP0000015683/2026",
+    "ATE0000008043/2026",
+    "VEN0000003401/2026",
+    "SUP0000016336/2026",
+    "PLA0000001112/2026",
     "SUP0000015373/2026",
-    "SUP0000015780/2026",
-    "VEN0000003277/2026",
+    "SUP0000014601/2026",
+    "ATE0000008434/2026",
+    "SUP0000016051/2026",
+    "SUP0000025823/2025",
+    "FIN0000007889/2026",
+    "ATE0000008513/2026",
+    "SUP0000014551/2026",
+    "SUP0000016108/2026",
+    "FIN0000008054/2026",
+    "SUP0000015939/2026",
+    "PLA0000001063/2026",
+    "ATE0000008598/2026",
+    "ATE0000008700/2026",
+    "PLA0000001068/2026",
+    "ATE0000008817/2026",
+    "SUP0000015378/2026",
+    "SUP0000015309/2026",
+    "VEN0000003140/2026",
+    "FIN0000008097/2026",
+    "PLA0000001106/2026",
+    "SUP0000016606/2026",
+    "ATE0000008878/2026",
+    "ATE0000008122/2026",
+    "FIN0000008093/2026",
+    "ATE0000008672/2026",
+    "SUP0000015465/2026",
+    "ATE0000008659/2026",
+    "FIN0000007781/2026",
+    "ATE0000008789/2026",
+    "VEN0000003179/2026",
+    "ATE0000008402/2026",
+    "ATE0000008727/2026",
+    "FIN0000007242/2026",
+    "FIN0000006935/2026",
+    "ATE0000008683/2026",
+    "ATE0000008631/2026",
+    "SUP0000015511/2026",
+    "FIN0000007869/2026",
+    "SUP0000016400/2026",
+    "ATE0000008029/2026",
+    "SUP0000014808/2026",
+    "SUP0000015372/2026",
+    "VEN0000003212/2026",
+    "SUP0000016396/2026",
+    "FIN0000008030/2026",
     "VEN0000003247/2026",
-    "ATE0000007988/2026",
-    "SUP0000014039/2026",
-    "SUP0000015832/2026",
-    "SUP0000015519/2026",
-    "ATE0000008256/2026",
-    "FIN0000007435/2026",
-    "ATE0000007971/2026",
-    "ATE0000008433/2026",
-    "SUP0000015003/2026",
-    "SUP0000014854/2026",
-    "FIN0000006904/2025",
-    "VEN0000003224/2026",
-    "ATE0000008050/2026",
-    "SUP0000016014/2026",
-    "FIN0000007588/2026",
-    "SUI0000000624/2026",
-    "ATE0000008207/2026",
-    "ATE0000007831/2026",
-    "SUP0000015988/2026",
-    "VEN0000003126/2026",
-    "FIN0000006790/2025",
-    "FIN0000007414/2026",
-    "FIN0000007220/2026",
-    "SUP0000014214/2026",
-    "ATE0000008497/2026",
-    "FIN0000007696/2026",
-    "SUP0000015828/2026",
-    "FIN0000007536/2026",
-    "ATE0000008157/2026",
-    "SUP0000015487/2026",
-    "SUP0000014535/2026",
-    "FIN0000007061/2026",
-    "ATE0000008186/2026",
-    "FIN0000007323/2026",
-    "SUP0000015711/2026",
-    "FIN0000007715/2026",
-    "FIN0000007612/2026",
-    "SUP0000015955/2026",
-    "SUP0000014729/2026",
-    "ATE0000008116/2026",
-    "SUP0000014731/2026",
-    "FIN0000006866/2026",
-    "SUP0000015919/2026",
-    "SUP0000016092/2026",
-    "FIN0000007556/2026",
-    "SUP0000014741/2026",
-    "FIN0000007699/2026",
-    "FIN0000007411/2026",
+    "SUP0000015124/2026",
+    "FIN0000008102/2026",
+    "ATE0000008301/2026",
+    "FIN0000007595/2026",
+    "SUP0000015948/2026",
+    "ATE0000008902/2026",
+    "SUP0000016615/2026",
+    "SUP0000015620/2026",
+    "ATE0000008183/2026",
+    "ATE0000008152/2026",
+    "ATE0000007649/2026",
+    "FIN0000007415/2026",
+    "SUP0000013777/2026",
+    "VEN0000003316/2026",
+    "FIN0000007475/2026",
+    "FIN0000007196/2026",
+    "ATE0000008498/2026",
+    "FIN0000008110/2026",
+    "SUP0000015141/2026",
+    "SUP0000016227/2026",
+    "ATE0000008634/2026",
+    "FIN0000007168/2026",
+    "SUP0000015002/2026",
+    "SUP0000015304/2026",
+    "SUP0000015277/2026",
+    "ATE0000008260/2026",
+    "SUP0000016346/2026",
+    "FIN0000007983/2026",
+    "FIN0000007213/2026",
+    "ATE0000008681/2026",
+    "ATE0000008462/2026",
+    "FIN0000006902/2026",
+    "SUP0000016232/2026",
+    "ATE0000008395/2026",
     "FIN0000007640/2026",
-    "VEN0000003140/2026",
-    "SUP0000015339/2026",
-    "FIN0000007419/2026",
-    "ATE0000008022/2026",
-    "FIN0000007778/2026",
-    "FIN0000007587/2026",
-    "ATE0000008041/2026",
-    "SUP0000014981/2026",
-    "ATE0000007891/2026",
-    "SUP0000011083/2026",
-    "FIN0000007560/2026",
-    "SUP0000014886/2026",
-    "FIN0000007314/2026",
-    "SUP0000016051/2026",
-    "SUP0000015950/2026",
+    "SUP0000016553/2026",
+    "VEN0000003145/2026",
+    "ATE0000008202/2026",
+    "VEN0000003125/2026",
+    "ATE0000007981/2026",
+    "ATE0000008960/2026",
+    "SUP0000015978/2026",
+    "FIN0000007861/2026",
+    "FIN0000007797/2026",
+    "SUP0000015746/2026",
+    "SUP0000016536/2026",
+    "SUP0000015663/2026",
+    "SUP0000016489/2026",
+    "FIN0000007490/2026",
+    "SUP0000015711/2026",
+    "SUP0000015794/2026",
+    "SUP0000015676/2026",
+    "VEN0000003341/2026",
+    "VEN0000003119/2026",
+    "SUP0000015996/2026",
     "FIN0000007349/2026",
-    "ATE0000008588/2026",
-    "SUP0000015581/2026",
-    "FIN0000007174/2026",
-    "ATE0000008700/2026",
-    "ATE0000008199/2026",
-    "ATE0000008719/2026",
-    "ATE0000008720/2026",
-    "SUP0000015816/2026",
-    "ATE0000008132/2026",
-    "ATE0000006660/2026",
-    "SUP0000015694/2026",
-    "SUP0000015131/2026",
-    "FIN0000006852/2026",
-    "SUP0000014233/2026",
-    "FIN0000007114/2026",
-    "POS0000005663/2026",
-    "PLA0000001100/2026",
-    "SUP0000015305/2026",
-    "ATE0000008152/2026",
-    "POS0000006347/2026",
-    "SUP0000014759/2026",
-    "ATE0000008406/2026",
-    "FIN0000007501/2026",
-    "SUP0000015157/2026",
-    "PLA0000001096/2026",
-    "ATE0000008295/2026",
-    "SUP0000015034/2026",
+    "SUP0000015026/2026",
+    "SUP0000014814/2026",
+    "ATE0000008433/2026",
+    "SUP0000015463/2026",
     "SUP0000014934/2026",
-    "FIN0000007706/2026",
-    "SUP0000015042/2026",
-    "POS0000006198/2026",
-    "FIN0000007653/2026",
-    "SUP0000014086/2026",
-    "SUP0000014808/2026",
-    "ATE0000008122/2026",
-    "ATE0000007881/2026",
-    "SUP0000011286/2026",
-    "ATE0000008704/2026",
-    "SUP0000015501/2026",
-    "SUP0000015123/2026",
-    "FIN0000007307/2026",
-    "ATE0000008209/2026",
-    "ATE0000008103/2026",
-    "SUP0000015392/2026",
-    "SUP0000015031/2026",
-    "SUP0000015415/2026",
-    "SUP0000015328/2026",
-    "VEN0000003180/2026",
-    "ATE0000008404/2026",
-    "SUP0000015316/2026",
-    "FIN0000007748/2026",
-    "ATE0000008051/2026",
-    "PLA0000001051/2026",
-    "FIN0000007603/2026",
-    "ATE0000008611/2026",
-    "SUP0000014499/2026",
+    "VEN0000003052/2026",
+    "ATE0000008747/2026",
+    "VEN0000003439/2026",
+    "FIN0000008043/2026",
+    "FIN0000007926/2026",
+    "ATE0000008214/2026",
     "FIN0000007452/2026",
-    "SUP0000014726/2026",
-    "ATE0000008158/2026",
-    "FIN0000007412/2026",
-    "SUP0000014899/2026",
-    "SUP0000015672/2026",
-    "ATE0000008424/2026",
-    "SUP0000015474/2026",
-    "SUP0000015463/2026",
-    "VEN0000003062/2026",
-    "FIN0000007551/2026",
-    "ATE0000008237/2026",
-    "SUP0000014927/2026",
-    "SUP0000014885/2026",
-    "FIN0000007215/2026",
-    "FIN0000007785/2026",
-    "FIN0000007562/2026",
-    "VEN0000003182/2026",
-    "ATE0000007649/2026",
-    "SUP0000014883/2026",
-    "SUP0000015611/2026",
-    "PLA0000001071/2026",
-    "FIN0000006885/2026",
-    "VEN0000003056/2026",
-    "FIN0000007203/2026",
-    "ATE0000008417/2026",
-    "FIN0000007745/2026",
-    "FIN0000007533/2026",
-    "ATE0000008023/2026",
-    "FIN0000007310/2026",
-    "FIN0000007150/2026",
-    "ATE0000008029/2026",
-    "ATE0000008509/2026",
-    "PLA0000000991/2026",
-    "SUP0000015663/2026",
-    "FIN0000007047/2026",
-    "FIN0000007664/2026",
-    "FIN0000007179/2026",
-    "SUP0000015939/2026",
-    "ATE0000008710/2026",
-    "ATE0000008669/2026",
-    "VEN0000003106/2026",
-    "FIN0000007537/2026",
-    "SUP0000014391/2026",
-    "SUP0000024891/2025",
-    "SUP0000014447/2026",
-    "ATE0000008529/2026",
-    "SUP0000015727/2026",
-    "POS0000006339/2026",
-    "FIN0000007189/2026",
-    "ATE0000008680/2026",
-    "VEN0000003132/2026",
-    "ATE0000008337/2026",
-    "ATE0000008576/2026",
-    "SUP0000015993/2026",
-    "SUP0000015969/2026",
-    "FIN0000007152/2026",
-    "SUP0000015146/2026",
-    "ATE0000008173/2026",
-    "ATE0000008405/2026",
-    "SUP0000014980/2026",
-    "ATE0000008518/2026",
-    "SUP0000014907/2026",
-    "ATE0000008498/2026",
-    "FIN0000007508/2026",
-    "ATE0000007997/2026",
-    "FIN0000007119/2026",
-    "FIN0000007148/2026",
-    "FIN0000007433/2026",
-    "FIN0000007369/2026",
-    "FIN0000007058/2026",
-    "SUP0000015683/2026",
-    "ATE0000008338/2026",
-    "FIN0000007632/2026",
-    "PLA0000000965/2026",
-    "SUP0000014766/2026",
+    "FIN0000007278/2026",
+    "FIN0000008026/2026",
     "ATE0000008563/2026",
+    "SUP0000015287/2026",
+    "FIN0000007505/2026",
+    "PLA0000001129/2026",
+    "SUP0000014817/2026",
+    "SUP0000016246/2026",
+    "VEN0000003195/2026",
+    "FIN0000008095/2026",
+    "SUP0000015353/2026",
     "SUP0000015956/2026",
-    "SUP0000016025/2026",
-    "VEN0000003083/2026",
-    "SUP0000014935/2026",
-    "FIN0000006815/2025",
-    "SUP0000015380/2026",
+    "SUP0000013994/2026",
+    "FIN0000007854/2026",
+    "SUP0000016512/2026",
+    "FIN0000007891/2026",
     "FIN0000007422/2026",
-    "FIN0000007192/2026",
-    "SUP0000015188/2026",
-    "SUP0000015377/2026",
-    "SUP0000015205/2026",
-    "FIN0000007432/2026",
+    "SUP0000014735/2026",
+    "FIN0000006815/2025",
+    "FIN0000007785/2026",
+    "VEN0000003295/2026",
+    "VEN0000003350/2026",
+    "ATE0000008123/2026",
+    "SUP0000016533/2026",
+    "SUP0000016614/2026",
+    "ATE0000008944/2026",
+    "FIN0000006866/2026",
+    "FIN0000007282/2026",
+    "ATE0000008795/2026",
+    "FIN0000007539/2026",
+    "SUP0000015487/2026",
+    "SUP0000014821/2026",
+    "SUP0000016420/2026",
+    "VEN0000003307/2026",
+    "SUP0000016229/2026",
+    "ATE0000008034/2026",
+    "VEN0000003090/2026",
+    "VEN0000003424/2026",
+    "ATE0000008614/2026",
+    "FIN0000007924/2026",
+    "ATE0000008589/2026",
+    "SUP0000015231/2026",
+    "PLA0000000991/2026",
+    "VEN0000003206/2026",
+    "POS0000006180/2026",
+    "SUP0000015975/2026",
     "ATE0000008656/2026",
-    "ATE0000008214/2026",
-    "ATE0000008428/2026",
-    "ATE0000008208/2026",
-    "ATE0000008631/2026",
-    "ATE0000011406/2025",
-    "FIN0000007345/2026",
-    "ATE0000008288/2026",
-    "SUP0000015655/2026",
-    "FIN0000007700/2026",
-    "ATE0000008395/2026",
+    "FIN0000008012/2026",
+    "ATE0000008866/2026",
+    "SUP0000014871/2026",
+    "ATE0000007955/2026",
+    "ATE0000008135/2026",
+    "SUP0000015993/2026",
+    "VEN0000003173/2026",
+    "SUP0000014391/2026",
+    "SUP0000015449/2026",
+    "SUP0000014607/2026",
+    "VEN0000003355/2026",
+    "ATE0000008413/2026",
+    "ATE0000008141/2026",
+    "ATE0000008262/2026",
+    "FIN0000007809/2026",
+    "ATE0000007312/2026",
+    "ATE0000008022/2026",
+    "FIN0000007497/2026",
+    "ATE0000007993/2026",
+    "SUP0000016634/2026",
+    "ATE0000008327/2026",
+    "FIN0000007501/2026",
+    "ATE0000008762/2026",
+    "SUP0000015133/2026",
+    "SUP0000015229/2026",
+    "FIN0000007485/2026",
+    "VEN0000003372/2026",
+    "PLA0000001071/2026",
+    "SUP0000014885/2026",
+    "ATE0000008950/2026",
+    "ATE0000007831/2026",
+    "FIN0000007256/2026",
+    "SUP0000015721/2026",
+    "SUP0000015300/2026",
+    "FIN0000007873/2026",
+    "ATE0000008182/2026",
+    "SUP0000015333/2026",
+    "SUP0000014895/2026",
+    "ATE0000007967/2026",
+    "POS0000006202/2026",
+    "FIN0000007870/2026",
+    "SUP0000011400/2026",
+    "SUP0000015202/2026",
+    "SUP0000015665/2026",
+    "ATE0000008505/2026",
+    "SUP0000016469/2026",
+    "FIN0000007201/2026",
+    "SUP0000016464/2026",
+    "POS0000006159/2026",
+    "SUP0000014115/2026",
+    "FIN0000007663/2026",
+    "ATE0000008418/2026",
+    "FIN0000007963/2026",
+    "SUP0000016327/2026",
+    "ATE0000008943/2026",
+    "SUP0000014680/2026",
+    "ATE0000008922/2026",
+    "SUP0000016196/2026",
+    "SUP0000016594/2026",
+    "ATE0000008813/2026",
+    "SUP0000016573/2026",
+    "SUP0000015371/2026",
+    "FIN0000008034/2026",
+    "ATE0000008317/2026",
+    "SUP0000015321/2026",
+    "ATE0000007841/2026",
+    "SUP0000015289/2026",
+    "SUP0000016183/2026",
+    "SUP0000016484/2026",
+    "POS0000006278/2026",
+    "SUP0000014927/2026",
+    "FIN0000007741/2026",
+    "VEN0000003290/2026",
     "SUP0000015259/2026",
-    "ATE0000008307/2026",
-    "ATE0000008578/2026",
-    "SUP0000015169/2026",
-    "ATE0000008727/2026",
-    "VEN0000003194/2026",
-    "SUP0000014799/2026",
-    "SUP0000014642/2026",
-    "VEN0000003279/2026",
-    "FIN0000006990/2026",
-    "SUP0000014832/2026",
+    "ATE0000008671/2026",
+    "FIN0000007628/2026",
+    "SUI0000000624/2026",
+    "FIN0000007845/2026",
+    "SUP0000016129/2026",
+    "SUP0000014579/2026",
+    "ATE0000008676/2026",
+    "FIN0000007264/2026",
+    "FIN0000007203/2026",
+    "VEN0000003436/2026",
+    "SUP0000016496/2026",
+    "SUP0000015992/2026",
+    "ATE0000008237/2026",
+    "SUP0000016360/2026",
+    "ATE0000008988/2026",
+    "FIN0000008017/2026",
+    "VEN0000003387/2026",
+    "SUP0000015954/2026",
+    "FIN0000007632/2026",
+    "FIN0000007743/2026",
+    "SUP0000016145/2026",
+    "ATE0000008199/2026",
     "SUP0000015195/2026",
-    "VEN0000003315/2026",
-    "ATE0000008319/2026",
-    "ATE0000008678/2026",
-    "ATE0000008205/2026",
+    "ATE0000009012/2026",
+    "SUP0000014039/2026",
+    "FIN0000007748/2026",
+    "ATE0000008682/2026",
+    "SUP0000014873/2026",
+    "FIN0000007997/2026",
+    "ATE0000008069/2026",
+    "SUP0000016661/2026",
+    "SUP0000016240/2026",
+    "FIN0000007769/2026",
+    "SUP0000015484/2026",
+    "FIN0000007805/2026",
+    "SUP0000016287/2026",
+    "SUP0000016428/2026",
+    "FIN0000007508/2026",
+    "FIN0000007761/2026",
+    "ATE0000008343/2026",
+    "ATE0000007645/2026",
+    "SUP0000011731/2024",
+    "ATE0000008769/2026",
+    "FIN0000007859/2026",
+    "SUP0000015188/2026",
+    "FIN0000007612/2026",
+    "FIN0000007493/2026",
+    "SUP0000016556/2026",
+    "FIN0000006987/2026",
+    "SUP0000016238/2026",
+    "FIN0000008046/2026",
+    "SUP0000016448/2026",
+    "SUP0000016546/2026",
+    "ATE0000008895/2026",
+    "SUP0000016401/2026",
+    "VEN0000003228/2026",
+    "SUP0000015404/2026",
+    "ATE0000008630/2026",
+    "SUP0000014872/2026",
+    "SUP0000016107/2026",
     "FIN0000007532/2026",
-    "FIN0000007606/2026",
-    "FIN0000007132/2026",
-    "ATE0000008587/2026",
-    "SUP0000014995/2026",
-    "FIN0000006843/2025",
-    "SUP0000014897/2026",
-    "SUP0000015250/2026",
-    "SUP0000015055/2026",
-    "SUP0000014712/2026",
-    "VEN0000003052/2026",
-    "SUP0000015713/2026",
-    "ATE0000006776/2026",
-    "FIN0000006897/2025",
-    "FIN0000006845/2026",
-    "SUP0000014895/2026",
-    "SUP0000015460/2026",
-    "SUP0000013994/2026",
-    "SUP0000014822/2026",
-    "SUP0000015934/2026",
-    "SUP0000014666/2026",
-    "SUP0000015023/2026",
+    "SUP0000015198/2026",
+    "VEN0000003314/2026",
+    "FIN0000007827/2026",
+    "FIN0000007028/2026",
+    "FIN0000007779/2026",
+    "FIN0000007961/2026",
+    "ATE0000008497/2026",
+    "SUP0000014575/2026",
+    "ATE0000008465/2026",
+    "SUP0000015926/2026",
+    "FIN0000007846/2026",
     "VEN0000003270/2026",
-    "SUP0000015166/2026",
-    "SUP0000014164/2026",
-    "ATE0000008104/2026",
-    "VEN0000003206/2026",
-    "SUP0000015703/2026",
-    "ATE0000008289/2026",
-    "ATE0000007946/2026",
-    "ATE0000008571/2026",
-    "FIN0000007019/2026",
-    "FIN0000007527/2026",
-    "FIN0000007361/2026",
-    "ATE0000008513/2026",
-    "ATE0000008705/2026",
-    "FIN0000007600/2026",
-    "FIN0000007126/2026",
-    "VEN0000003328/2026",
-    "FIN0000007797/2026",
-    "SUP0000015920/2026",
-    "ATE0000007751/2026",
-    "FIN0000007787/2026",
-    "VEN0000003116/2026",
-    "FIN0000007503/2026",
-    "SUP0000015141/2026",
-    "FIN0000007480/2026",
-    "ATE0000008232/2026",
-    "SUP0000014431/2026",
+    "SUP0000015033/2026",
+    "SUP0000016363/2026",
+    "FIN0000007047/2026",
+    "SUP0000025912/2025",
+    "ATE0000007988/2026",
+    "ATE0000006660/2026",
+    "POS0000014846/2025",
+    "SUP0000014878/2026",
+    "POS0000006336/2026",
+    "SUP0000016635/2026",
+    "SUP0000015761/2026",
+    "SUP0000016176/2026",
+    "SUP0000011286/2026",
+    "VEN0000003275/2026",
+    "SUP0000015023/2026",
+    "VEN0000003380/2026",
+    "FIN0000007064/2026",
+    "SUP0000015042/2026",
+    "ATE0000008831/2026",
+    "VEN0000003279/2026",
+    "SUP0000016309/2026",
+    "ATE0000007958/2026",
+    "VEN0000003262/2026",
+    "FIN0000007411/2026",
+    "SUP0000014886/2026",
+    "VEN0000003168/2026",
+    "FIN0000006885/2026",
+    "ATE0000008257/2026",
+    "FIN0000007737/2026",
+    "ATE0000008491/2026",
     "SUP0000016060/2026",
-    "FIN0000007794/2026",
-    "SUP0000015002/2026",
-    "FIN0000007266/2026",
-    "VEN0000003120/2026",
-    "FIN0000007488/2026",
-    "ATE0000008493/2026",
-    "PLA0000001101/2026",
-    "FIN0000006952/2026",
-    "SUP0000014678/2026",
-    "SUP0000014803/2026",
-    "FIN0000007768/2026",
-    "ATE0000008262/2026",
-    "FIN0000007714/2026",
-    "ATE0000008148/2026",
-    "PLA0000000898/2026",
-    "ATE0000007967/2026",
-    "SUP0000015045/2026",
-    "ATE0000008413/2026",
-    "SUP0000015309/2026",
-    "SUP0000014908/2026",
-    "SUP0000015975/2026",
-    "SUP0000015164/2026",
-    "ATE0000008521/2026",
-    "ATE0000008466/2026",
-    "VEN0000003061/2026",
-    "FIN0000007474/2026",
-    "ATE0000007841/2026",
-    "ATE0000008260/2026",
-    "FIN0000007678/2026",
-    "VEN0000003307/2026",
-    "VEN0000003211/2026",
-    "ATE0000011401/2025",
-    "FIN0000007322/2026",
-    "FIN0000007758/2026",
-    "SUP0000016103/2026",
-    "SUP0000015987/2026",
-    "VEN0000003179/2026",
-    "SUP0000014881/2026",
-    "FIN0000007415/2026",
+    "ATE0000008023/2026",
+    "SUP0000015064/2026",
+    "SUP0000016110/2026",
+    "POS0000006082/2026",
+    "SUP0000016494/2026",
     "PLA0000000972/2026",
-    "ATE0000008146/2026",
-    "FIN0000007402/2026",
-    "SUP0000014343/2026",
-    "SUP0000015679/2026",
-    "ATE0000008215/2026",
-    "VEN0000003119/2026",
-    "PLA0000001091/2026",
-    "FIN0000006615/2025",
-    "SUP0000015926/2026",
-    "SUI0000000605/2026",
-    "VEN0000003063/2026",
-    "ATE0000008147/2026",
-    "VEN0000003286/2026",
-    "VEN0000003153/2026",
-    "PLA0000001063/2026",
-    "ATE0000007913/2026",
-    "ATE0000008422/2026",
-    "SUP0000015620/2026",
-    "ATE0000008119/2026",
-    "SUP0000014736/2026",
-    "SUP0000015496/2026",
-    "ATE0000007645/2026",
-    "ATE0000008275/2026",
-    "FIN0000006872/2026",
-    "ATE0000007692/2026",
-    "ATE0000008007/2026",
-    "VEN0000003112/2026",
-    "FIN0000007207/2026",
-    "SUP0000015397/2026",
-    "SUP0000015465/2026",
-    "ATE0000007958/2026",
-    "SUP0000015642/2026",
-    "ATE0000008001/2026",
-    "SUP0000014578/2026",
-    "ATE0000008120/2026",
-    "ATE0000008469/2026",
-    "ATE0000008434/2026",
-    "SUP0000014840/2026",
-    "VEN0000003125/2026",
-    "VEN0000003327/2026",
-    "SUP0000015125/2026",
-    "ATE0000008393/2026",
-    "ATE0000008541/2026",
-    "VEN0000003175/2026",
-    "PLA0000000941/2026",
-    "PLA0000000923/2026",
-    "SUP0000015378/2026",
-    "SUP0000011400/2026",
-    "SUP0000015508/2026",
-    "SUI0000000642/2026",
-    "FIN0000007028/2026",
-    "SUP0000014779/2026",
-    "SUP0000016047/2026",
-    "FIN0000007045/2026",
-    "VEN0000003050/2026",
-    "SUP0000014749/2026",
-    "FIN0000007593/2026",
-    "FIN0000007228/2026",
-    "ATE0000007928/2026",
-    "SUP0000015026/2026",
-    "SUP0000014878/2026",
-    "FIN0000007592/2026",
-    "FIN0000007429/2026",
-    "VEN0000003098/2026",
-    "SUP0000014996/2026",
-    "SUI0000000633/2026",
-    "FIN0000007743/2026",
-    "VEN0000003166/2026",
-    "SUI0000000594/2026",
-    "VEN0000003149/2026",
-    "ATE0000008031/2026",
-    "SUP0000015362/2026",
-    "POS0000006202/2026",
+    "SUP0000014323/2026",
+    "FIN0000007119/2026",
+    "VEN0000003378/2026",
+    "SUP0000015713/2026",
+    "POS0000006270/2026",
+    "VEN0000003213/2026",
+    "FIN0000007884/2026",
+    "ATE0000008737/2026",
+    "ATE0000008909/2026",
+    "SUP0000016179/2026",
+    "FIN0000007218/2026",
+    "ATE0000008879/2026",
+    "SUP0000016015/2026",
+    "SUP0000015121/2026",
     "ATE0000008398/2026",
-    "SUP0000015053/2026",
-    "FIN0000006881/2026",
-    "FIN0000007490/2026",
-    "FIN0000007168/2026",
+    "ATE0000008165/2026",
+    "FIN0000007124/2026",
+    "SUP0000015316/2026",
+    "FIN0000008085/2026",
+    "FIN0000007969/2026",
+    "SUP0000016499/2026",
+    "SUP0000016598/2026",
+    "ATE0000008001/2026",
+    "FIN0000007435/2026",
+    "ATE0000008065/2026",
+    "FIN0000007480/2026",
+    "FIN0000007588/2026",
+    "FIN0000007560/2026",
+    "FIN0000007974/2026",
+    "FIN0000007677/2026",
+    "FIN0000008133/2026",
+    "FIN0000008096/2026",
+    "FIN0000007768/2026",
+    "FIN0000007058/2026",
+    "FIN0000007681/2026",
+    "SUP0000016486/2026",
+    "ATE0000008571/2026",
+    "FIN0000007583/2026",
+    "VEN0000003399/2026",
+    "FIN0000007684/2026",
     "SUP0000015664/2026",
-    "ATE0000008151/2026",
-    "SUP0000015746/2026",
-    "FIN0000007027/2026",
-    "ATE0000008464/2026",
-    "SUP0000014456/2026",
-    "SUP0000015349/2026",
-    "FIN0000007625/2026",
-    "SUP0000015436/2026",
-    "ATE0000008335/2026",
+    "SUP0000015642/2026",
+    "ATE0000007728/2026",
+    "SUP0000016356/2026",
+    "ATE0000008662/2026",
+    "FIN0000006899/2026",
+    "SUP0000014759/2026",
+    "SUP0000014874/2026",
+    "ATE0000008305/2026",
+    "VEN0000003353/2026",
+    "PLA0000000985/2026",
+    "SUP0000014832/2026",
+    "VEN0000003294/2026",
+    "FIN0000007637/2026",
+    "SUP0000014179/2026",
+    "VEN0000003395/2026",
+    "ATE0000007685/2026",
     "ATE0000008457/2026",
-    "SUP0000025560/2025",
-    "SUP0000014936/2026",
-    "VEN0000003316/2026",
-    "ATE0000008676/2026",
-    "SUP0000015588/2026",
-    "SUP0000015676/2026",
-    "VEN0000003272/2026",
-    "FIN0000007218/2026",
-    "SUP0000015255/2026",
-    "POS0000006155/2026",
-    "FIN0000007256/2026",
-    "ATE0000007764/2026",
-    "SUP0000015300/2026",
-    "SUP0000015202/2026",
-    "VEN0000003139/2026",
-    "SUP0000015855/2026",
-    "VEN0000003195/2026",
+    "ATE0000008271/2026",
+    "SUP0000015941/2026",
+    "SUP0000014642/2026",
+    "FIN0000007673/2026",
+    "FIN0000007908/2026",
+    "SUP0000014799/2026",
+    "FIN0000008045/2026",
+    "FIN0000007037/2026",
+    "SUP0000015474/2026",
+    "ATE0000011406/2025",
+    "SUP0000016040/2026",
+    "ATE0000008205/2026",
+    "SUP0000014456/2026",
+    "SUP0000015613/2026",
+    "SUP0000015325/2026",
+    "SUP0000014661/2026",
+    "ATE0000007875/2026",
+    "ATE0000008404/2026",
+    "FIN0000007337/2026",
+    "FIN0000007978/2026",
+    "SUP0000015988/2026",
+    "SUP0000016247/2026",
+    "FIN0000008120/2026",
+    "FIN0000007235/2026",
+    "SUP0000015248/2026",
+    "ATE0000008673/2026",
+    "ATE0000008215/2026",
+    "FIN0000007653/2026",
+    "ATE0000008422/2026",
+    "ATE0000008428/2026",
+    "FIN0000007915/2026",
+    "SUI0000000632/2026",
+    "ATE0000008268/2026",
+    "FIN0000007433/2026",
+    "SUP0000016528/2026",
+    "SUP0000016490/2026",
+    "FIN0000007284/2026",
+    "SUP0000016418/2026",
+    "SUP0000015328/2026",
+    "ATE0000008393/2026",
+    "VEN0000003197/2026",
     "SUP0000015524/2026",
-    "VEN0000003123/2026",
-    "SUP0000015813/2026",
-    "SUP0000014906/2026",
-    "ATE0000008737/2026",
-    "FIN0000007769/2026",
-    "VEN0000003324/2026",
-    "SUP0000015064/2026",
-    "ATE0000008165/2026",
-    "SUP0000015178/2026",
-    "FIN0000007761/2026",
-    "SUP0000015366/2026",
-    "SUP0000015603/2026",
-    "ATE0000008064/2026",
+    "SUP0000016086/2026",
+    "SUP0000014431/2026",
+    "SUP0000016235/2026",
+    "FIN0000007592/2026",
+    "FIN0000008051/2026",
     "SUP0000015744/2026",
-    "ATE0000008494/2026",
-    "SUP0000014750/2026",
-    "ATE0000008171/2026",
-    "FIN0000007475/2026",
-    "SUP0000015680/2026",
-    "SUP0000014334/2026",
-    "ATE0000008583/2026",
-    "FIN0000007302/2026",
-    "SUP0000015117/2026",
-    "SUP0000015646/2026",
-    "VEN0000003130/2026",
-    "FIN0000007741/2026",
-    "VEN0000003092/2026",
-    "SUP0000025566/2025",
-    "SUP0000015347/2026",
-    "ATE0000007752/2026",
-    "ATE0000008273/2026",
-    "SUP0000015277/2026",
-    "SUP0000014323/2026",
-    "FIN0000007085/2026",
-    "POS0000006082/2026",
-    "ATE0000008402/2026",
-    "SUP0000015182/2026",
-    "SUP0000015229/2026",
-    "ATE0000008365/2026",
-    "ATE0000008597/2026",
-    "ATE0000008063/2026",
+    "ATE0000008900/2026",
+    "SUP0000025560/2025",
+    "SUP0000015952/2026",
+    "SUP0000016555/2026",
+    "SUP0000016047/2026",
+    "FIN0000007573/2026",
+    "SUP0000015825/2026",
+    "FIN0000007975/2026",
+    "SUP0000016357/2026",
+    "SUP0000015415/2026",
+    "VEN0000003211/2026",
+    "ATE0000008151/2026",
+    "SUP0000016062/2026",
+    "SUP0000016411/2026",
+    "VEN0000003166/2026",
+    "FIN0000008024/2026",
+    "POS0000014808/2025",
+    "SUP0000014926/2026",
+    "ATE0000008333/2026",
     "FIN0000007281/2026",
-    "ATE0000008068/2026",
-    "FIN0000007337/2026",
-    "FIN0000007681/2026",
-    "FIN0000007483/2026",
-    "SUP0000014579/2026",
-    "SUP0000015126/2026",
-    "FIN0000007746/2026",
-    "SUP0000015385/2026",
-    "SUP0000015665/2026",
-    "SUP0000015404/2026",
-    "SUP0000015553/2026",
-    "SUP0000014551/2026",
-    "SUP0000004376/2025",
-    "VEN0000003213/2026",
-    "SUP0000014468/2026",
-    "FIN0000006844/2026",
-    "VEN0000003293/2026",
-    "ATE0000008617/2026",
-    "POS0000006348/2026",
+    "SUP0000016629/2026",
     "FIN0000007456/2026",
-    "FIN0000007602/2026",
-    "SUP0000014855/2026",
-    "ATE0000008605/2026",
-    "SUP0000013777/2026",
-    "SUP0000015932/2026",
-    "ATE0000008652/2026",
-    "VEN0000003216/2026",
-    "FIN0000007379/2026",
-    "FIN0000007235/2026",
-    "ATE0000008642/2026",
-    "FIN0000007779/2026",
-    "ATE0000008673/2026",
-    "SUP0000015948/2026",
-    "SUP0000015343/2026",
-    "FIN0000007522/2026",
-    "ATE0000008028/2026",
-    "SUP0000014680/2026",
-    "ATE0000008399/2026",
-    "ATE0000008641/2026",
-    "VEN0000003292/2026",
-    "ATE0000008066/2026",
-    "VEN0000003233/2026",
-    "VEN0000003318/2026",
-    "VEN0000003285/2026",
-    "ATE0000008694/2026",
-    "SUP0000015684/2026",
-    "SUP0000015248/2026",
-    "SUP0000015610/2026",
-    "SUP0000015504/2026",
-    "SUP0000014817/2026",
-    "ATE0000008446/2026",
-    "ATE0000008201/2026",
-    "ATE0000008135/2026",
-    "SUP0000015632/2026",
-    "SUP0000014763/2026",
-    "ATE0000008632/2026",
-    "SUP0000014755/2026",
-    "SUP0000015721/2026",
-    "ATE0000008340/2026",
-    "ATE0000008596/2026",
-    "FIN0000007582/2026",
-    "SUP0000014727/2026",
-    "ATE0000008004/2026",
-    "SUP0000015936/2026",
-    "SUP0000015520/2026",
-    "SUP0000015827/2026",
-    "FIN0000007458/2026",
-    "FIN0000007662/2026",
-    "SUP0000015728/2026",
-    "ATE0000008462/2026",
-    "ATE0000008306/2026",
-    "VEN0000003274/2026",
-    "ATE0000008033/2026",
-    "FIN0000006892/2026",
-    "ATE0000008305/2026",
-    "FIN0000007371/2026",
-    "SUP0000015133/2026",
-    "VEN0000003093/2026",
-    "VEN0000003158/2026",
-    "SUP0000015074/2026",
-    "POS0000014163/2025",
-    "FIN0000007213/2026",
-    "VEN0000003104/2026",
-    "VEN0000003105/2026",
-    "ATE0000008585/2026",
-    "VEN0000003058/2026",
-    "VEN0000003173/2026",
-    "ATE0000008363/2026",
-    "POS0000006301/2026",
+    "FIN0000007179/2026",
+    "SUP0000015780/2026",
+    "PLA0000001138/2026",
+    "POS0000014670/2025",
+    "ATE0000008392/2026",
+    "SUP0000016133/2026",
+    "SUP0000025566/2025",
+    "SUP0000015828/2026",
+    "SUP0000016114/2026",
+    "FIN0000007056/2026",
+    "FIN0000007605/2026",
+    "ATE0000008347/2026",
+    "FIN0000006861/2026",
+    "VEN0000003324/2026",
+    "SUP0000016026/2026",
     "FIN0000006763/2025",
-    "SUP0000015799/2026",
-    "SUP0000015977/2026",
-    "VEN0000003197/2026",
-    "ATE0000008584/2026",
-    "ATE0000008427/2026",
-    "SUP0000015697/2026",
-    "FIN0000007657/2026",
+    "SUP0000014535/2026",
+    "ATE0000008104/2026",
+    "ATE0000008907/2026",
+    "FIN0000007533/2026",
+    "VEN0000003394/2026",
+    "ATE0000008660/2026",
+    "SUP0000015815/2026",
+    "ATE0000007971/2026",
+    "FIN0000008040/2026",
+    "FIN0000007993/2026",
+    "SUP0000014726/2026",
+    "VEN0000003240/2026",
+    "FIN0000007322/2026",
+    "FIN0000007342/2026",
+    "SUP0000016474/2026",
+    "FIN0000007808/2026",
+    "ATE0000008105/2026",
     "SUP0000015797/2026",
-    "SUP0000015597/2026",
-    "ATE0000007981/2026",
-    "VEN0000003295/2026",
-    "SUI0000000604/2026",
-    "FIN0000007449/2026",
-    "SUP0000014958/2026",
-    "SUP0000015494/2026",
-    "FIN0000007671/2026",
-    "PLA0000001095/2026",
-    "ATE0000008322/2026",
-    "SUP0000015268/2026",
-    "SUP0000015121/2026",
-    "FIN0000007539/2026",
-    "FIN0000007382/2026",
-    "SUP0000015777/2026",
-    "ATE0000007991/2026",
-    "FIN0000007312/2026",
-    "PLA0000001099/2026",
-    "ATE0000008301/2026",
-    "ATE0000008608/2026",
-    "SUP0000015996/2026",
-    "ATE0000008069/2026",
-    "FIN0000007196/2026",
-    "ATE0000008629/2026",
-    "SUP0000015067/2026",
-    "VEN0000003156/2026",
-    "ATE0000008706/2026",
-    "ATE0000008418/2026",
-    "FIN0000006865/2026",
-    "FIN0000007673/2026",
-    "ATE0000008435/2026",
-    "FIN0000007022/2026",
-    "SUP0000015992/2026",
-    "SUP0000015353/2026",
-    "FIN0000006774/2025",
-    "FIN0000007680/2026",
-    "POS0000006270/2026",
+    "ATE0000008432/2026",
+    "FIN0000007715/2026",
+    "FIN0000007526/2026",
+    "VEN0000003180/2026",
+    "VEN0000003391/2026",
+    "ATE0000008544/2026",
+    "ATE0000008856/2026",
+    "PLA0000001087/2026",
+    "ATE0000008244/2026",
+    "SUP0000011405/2026",
+    "ATE0000008340/2026",
+    "SUP0000014468/2026",
+    "FIN0000007429/2026",
+    "FIN0000007408/2026",
+    "ATE0000008486/2026",
+    "FIN0000007564/2026",
+    "FIN0000007369/2026",
+    "SUP0000016253/2026",
+    "FIN0000007390/2026",
+    "FIN0000007893/2026",
+    "ATE0000008940/2026",
+    "FIN0000006872/2026",
+    "FIN0000006845/2026",
+    "SUP0000015594/2026",
+    "FIN0000007860/2026",
+    "ATE0000008694/2026",
+    "SUP0000014041/2026",
+    "FIN0000008038/2026",
+    "VEN0000003093/2026",
+    "ATE0000008052/2026",
+    "SUP0000014578/2026",
+    "ATE0000008319/2026",
+    "VEN0000003339/2026",
+    "VEN0000003374/2026",
+    "FIN0000007979/2026",
+    "FIN0000007839/2026",
+    "PLA0000001057/2026",
+    "FIN0000008048/2026",
     "ATE0000008655/2026",
+    "ATE0000008842/2026",
+    "ATE0000007987/2026",
+    "SUP0000016147/2026",
+    "FIN0000008124/2026",
     "FIN0000007623/2026",
-    "ATE0000008649/2026",
-    "FIN0000007580/2026",
-    "SUP0000015954/2026",
-    "FIN0000007201/2026",
-    "SUP0000015151/2026",
-    "FIN0000007462/2026",
-    "VEN0000003329/2026",
-    "SUP0000014699/2026",
-    "SUP0000015532/2026",
-    "SUP0000016031/2026",
-    "SUP0000014552/2026",
-    "SUP0000015394/2026",
-    "SUP0000015913/2026",
-    "VEN0000003262/2026",
-    "SUP0000015942/2026",
-    "SUP0000015653/2026",
-    "VEN0000003229/2026",
-    "FIN0000007601/2026",
-    "ATE0000008284/2026",
-    "VEN0000003275/2026",
-    "ATE0000008060/2026",
+    "SUP0000016543/2026",
+    "FIN0000007214/2026",
+    "FIN0000007587/2026",
+    "FIN0000006782/2026",
+    "FIN0000007114/2026",
     "SUP0000012292/2026",
-    "SUP0000014785/2026",
-    "SUP0000016086/2026",
-    "FIN0000007679/2026",
-    "VEN0000003090/2026",
-    "ATE0000008729/2026",
-    "ATE0000008423/2026",
-    "FIN0000007313/2026",
-    "SUP0000014775/2026",
-    "SUP0000025823/2025",
-    "ATE0000007963/2026",
-    "FIN0000007595/2026",
-    "SUP0000015471/2026",
-    "FIN0000006973/2026",
+    "SUP0000015520/2026",
+    "FIN0000007190/2026",
+    "SUP0000015359/2026",
+    "ATE0000008185/2026",
+    "ATE0000008954/2026",
+    "VEN0000003404/2026",
+    "SUP0000014233/2026",
+    "SUP0000014086/2026",
     "SUP0000016089/2026",
-    "ATE0000007853/2026",
+    "ATE0000008771/2026",
+    "SUP0000015343/2026",
+    "SUP0000014435/2026",
+    "SUP0000015313/2026",
+    "SUP0000015182/2026",
+    "FIN0000007923/2026",
+    "ATE0000008322/2026",
+    "FIN0000008002/2026",
+    "ATE0000008041/2026",
+    "ATE0000008768/2026",
+    "FIN0000007971/2026",
+    "ATE0000008028/2026",
+    "FIN0000007655/2026",
+    "FIN0000007487/2026",
+    "SUP0000015003/2026",
+    "ATE0000008652/2026",
+    "ATE0000008033/2026",
+    "FIN0000007556/2026",
+    "ATE0000008435/2026",
+    "FIN0000007094/2026",
+    "SUP0000014897/2026",
+    "SUP0000014214/2026",
+    "ATE0000008120/2026",
+    "SUP0000016193/2026",
+    "VEN0000003120/2026",
+    "SUP0000015178/2026",
+    "SUP0000014736/2026",
+    "SUP0000015936/2026",
+    "SUP0000015553/2026",
+    "FIN0000007789/2026",
+    "ATE0000008297/2026",
     "ATE0000008550/2026",
-    "FIN0000006987/2026",
-    "SUP0000015593/2026",
-    "FIN0000007497/2026",
-    "SUP0000015321/2026",
-    "ATE0000008659/2026",
-    "SUP0000015184/2026",
-    "FIN0000007340/2026",
-    "FIN0000007573/2026",
-    "PLA0000001085/2026",
-    "SUP0000014607/2026",
-    "ATE0000008185/2026",
-    "FIN0000007386/2026",
-    "FIN0000007317/2026",
-    "SUP0000015264/2026",
-    "SUP0000014735/2026",
-    "ATE0000008726/2026",
-    "SUP0000014173/2026",
-    "FIN0000007660/2026",
-    "VEN0000003008/2026",
-    "POS0000014849/2025",
-    "FIN0000007554/2026",
-    "FIN0000007370/2026",
-    "VEN0000003300/2026",
-    "SUP0000015206/2026",
-    "SUP0000015473/2026",
-    "ATE0000008463/2026",
-    "VEN0000003114/2026",
-    "ATE0000008271/2026",
-    "VEN0000003066/2026",
-    "ATE0000008491/2026",
-    "SUP0000015241/2026",
-    "ATE0000008582/2026",
-    "SUI0000000663/2026",
-    "ATE0000008683/2026",
-    "FIN0000007387/2026",
-    "ATE0000008660/2026",
-    "SUP0000015511/2026",
-    "FIN0000007493/2026",
-    "SUP0000011405/2026",
-    "ATE0000008391/2026",
-    "SUP0000015794/2026",
-    "ATE0000008268/2026",
-    "ATE0000008682/2026",
-    "SUP0000015771/2026",
-    "FIN0000007282/2026",
-    "POS0000006159/2026",
-    "FIN0000007637/2026",
-    "ATE0000008202/2026",
-    "ATE0000007980/2026",
-    "SUP0000016026/2026",
-    "ATE0000008698/2026",
-    "ATE0000007903/2026",
-    "FIN0000007214/2026",
-    "FIN0000007190/2026",
-    "SUP0000015120/2026",
-    "FIN0000006798/2026",
-    "FIN0000006813/2026",
-    "ATE0000008505/2026",
-    "FIN0000007693/2026",
-    "FIN0000007352/2026",
-    "SUP0000014821/2026",
-    "ATE0000008334/2026",
-    "ATE0000008183/2026",
-    "POS0000006329/2026",
-    "ATE0000007695/2026",
-    "FIN0000007594/2026",
-    "FIN0000006977/2026",
-    "ATE0000008455/2026",
-    "ATE0000008123/2026",
-    "FIN0000007661/2026",
-    "SUP0000015292/2026",
-    "SUP0000014553/2026",
-    "SUP0000015375/2026",
-    "FIN0000007783/2026",
-    "ATE0000008003/2026",
-    "FIN0000006902/2026",
-    "FIN0000007667/2026",
-    "POS0000006278/2026",
-    "ATE0000008349/2026",
-    "FIN0000007607/2026",
-    "SUP0000015122/2026",
-    "VEN0000003291/2026",
-    "ATE0000001738/2026",
-    "SUP0000011339/2026",
-    "FIN0000003317/2025",
-    "SUI0000000632/2026",
-    "ATE0000008297/2026",
-    "ATE0000008425/2026",
-    "SUP0000015289/2026",
-    "FIN0000007677/2026",
-    "SUP0000015365/2026",
-    "SUP0000014914/2026",
-    "FIN0000007784/2026",
-    "SUP0000015450/2026",
-    "SUP0000015578/2026",
-    "FIN0000007011/2026",
-    "POS0000008459/2025",
-    "SUP0000014575/2026",
-    "FIN0000007789/2026",
-    "VEN0000003199/2026",
-    "SUP0000014556/2026",
-    "ATE0000008598/2026",
-    "ATE0000008333/2026",
-    "SUP0000014624/2026",
-    "FIN0000006814/2025",
-    "ATE0000007875/2026",
-    "FIN0000007056/2026",
-    "ATE0000008030/2026",
-    "FIN0000007357/2026",
-    "FIN0000007518/2026",
+    "FIN0000008094/2026",
+    "VEN0000003073/2026",
+    "PLA0000001101/2026",
+    "SUP0000014447/2026",
+    "FIN0000008128/2026",
+    "SUP0000015603/2026",
+    "SUP0000016520/2026",
+    "FIN0000007783/2026",
+    "ATE0000008031/2026",
+    "VEN0000003334/2026",
+    "POS0000006402/2026",
+    "SUP0000014995/2026",
+    "SUP0000015236/2026",
+    "SUP0000016269/2026",
+    "FIN0000008059/2026",
+    "SUP0000014573/2026",
+    "FIN0000008109/2026",
+    "SUP0000014343/2026",
+    "FIN0000007308/2026",
+    "SUP0000015380/2026",
+    "SUP0000014750/2026",
+    "VEN0000003132/2026",
+    "SUP0000016377/2026",
+    "FIN0000007488/2026",
+    "SUP0000016189/2026",
+    "SUP0000015813/2026",
+    "FIN0000007657/2026",
+    "SUP0000015031/2026",
+    "ATE0000008937/2026",
+    "SUP0000016645/2026",
+    "FIN0000007606/2026",
     "SUP0000025868/2025",
-    "ATE0000008658/2026",
-    "PLA0000001097/2026",
+    "SUP0000015934/2026",
+    "SUP0000015987/2026",
+    "VEN0000003370/2026",
     "ATE0000008593/2026",
-    "ATE0000008283/2026",
-    "SUP0000015371/2026",
-    "PLA0000001087/2026",
-    "SUP0000010904/2026",
-    "FIN0000007264/2026",
-    "VEN0000003122/2026",
-    "ATE0000007312/2026",
-    "ATE0000008486/2026",
-    "ATE0000008461/2026",
-    "SUP0000015594/2026",
-    "ATE0000008621/2026",
-    "SUP0000015929/2026",
-    "ATE0000008244/2026",
+    "ATE0000008306/2026",
+    "FIN0000006904/2025",
+    "SUP0000016456/2026",
+    "FIN0000008021/2026",
+    "ATE0000008307/2026",
+    "SUP0000014766/2026",
+    "SUP0000016460/2026",
+    "ATE0000008710/2026",
+    "SUP0000015519/2026",
+    "ATE0000007963/2026",
+    "ATE0000008649/2026",
+    "VEN0000003063/2026",
+    "SUP0000015496/2026",
+    "ATE0000008993/2026",
+    "SUP0000016461/2026",
+    "ATE0000008980/2026",
+    "VEN0000003366/2026",
+    "FIN0000008010/2026",
+    "ATE0000008476/2026",
+    "FIN0000007345/2026",
+    "ATE0000008958/2026",
+    "FIN0000006990/2026",
+    "VEN0000003106/2026",
+    "FIN0000006813/2026",
+    "SUP0000015349/2026",
+    "ATE0000008754/2026",
+    "FIN0000007307/2026",
+    "SUP0000016482/2026",
+    "SUP0000014518/2026",
+    "SUP0000016312/2026",
+    "ATE0000007853/2026",
+    "ATE0000008669/2026",
+    "FIN0000007991/2026",
+    "PLA0000001059/2026",
+    "FIN0000007379/2026",
+    "VEN0000003201/2026",
+    "FIN0000007714/2026",
+    "FIN0000007842/2026",
+    "SUP0000015694/2026",
+    "ATE0000008709/2026",
+    "SUP0000014881/2026",
+    "SUP0000016316/2026",
+    "SUP0000014987/2026",
+    "VEN0000003085/2026",
+    "SUP0000015232/2026",
+    "SUP0000015508/2026",
+    "SUP0000016427/2026",
+    "SUI0000000663/2026",
+    "ATE0000008158/2026",
+    "ATE0000008529/2026",
+    "VEN0000003216/2026",
+    "ATE0000007903/2026",
+    "SUP0000014307/2026",
+    "FIN0000008037/2026",
+    "SUP0000016248/2026",
+    "ATE0000008173/2026",
+    "PLA0000001095/2026",
+    "FIN0000007192/2026",
+    "ATE0000009017/2026",
+    "VEN0000003229/2026",
+    "SUI0000000677/2026",
+    "SUP0000014933/2026",
+    "ATE0000008148/2026",
+    "FIN0000007829/2026",
+    "ATE0000008295/2026",
+    "VEN0000003105/2026",
+    "FIN0000007527/2026",
+    "FIN0000007396/2026",
+    "SUP0000015268/2026",
+    "SUP0000015164/2026",
+    "FIN0000008049/2026",
+    "SUP0000015504/2026",
+    "SUP0000016552/2026",
+    "SUP0000015392/2026",
+    "FIN0000007045/2026",
+    "FIN0000006956/2026",
+    "SUP0000015733/2026",
+    "FIN0000007357/2026",
+    "ATE0000008531/2026",
+    "FIN0000007412/2026",
+    "VEN0000003194/2026",
+    "SUP0000015629/2026",
+    "SUP0000014553/2026",
+    "VEN0000003066/2026",
+    "SUP0000016620/2026",
+    "ATE0000008841/2026",
+    "SUP0000015581/2026",
+    "SUP0000015146/2026",
+    "VEN0000003083/2026",
+    "ATE0000008171/2026",
+    "SUP0000016307/2026",
+    "SUP0000015342/2026",
+    "ATE0000008608/2026",
+    "ATE0000008146/2026",
+    "PLA0000001099/2026",
+    "POS0000006155/2026",
+    "FIN0000007679/2026",
+    "SUP0000015950/2026",
+    "SUP0000014893/2026",
+    "VEN0000003431/2026",
+    "SUP0000014935/2026",
+    "FIN0000006948/2026",
+    "FIN0000007794/2026",
+    "FIN0000007868/2026",
+    "FIN0000007651/2026",
+    "POS0000006347/2026",
+    "SUP0000015375/2026",
+    "ATE0000007952/2026",
     "SUP0000015696/2026",
-    "ATE0000008618/2026",
+    "VEN0000003293/2026",
+    "ATE0000008469/2026",
+    "SUP0000015597/2026",
+    "ATE0000008621/2026",
     "FIN0000007782/2026",
-    "ATE0000008105/2026",
-    "SUP0000015733/2026",
-    "ATE0000008432/2026",
-    "FIN0000007408/2026",
-    "SUP0000014871/2026",
-    "FIN0000007278/2026",
-    "SUP0000016033/2026",
-    "SUP0000015476/2026",
-    "VEN0000003212/2026",
-    "ATE0000008141/2026",
-    "FIN0000007366/2026",
-    "SUP0000014968/2026",
-    "FIN0000007216/2026",
-    "FIN0000007505/2026",
-    "SUP0000014673/2026",
-    "SUP0000015449/2026",
-    "SUP0000015959/2026",
-    "ATE0000008522/2026",
+    "SUP0000015397/2026",
+    "FIN0000007483/2026",
+    "SUP0000015339/2026",
+    "ATE0000008201/2026",
+    "ATE0000008256/2026",
+    "SUP0000015680/2026",
+    "SUP0000016624/2026",
+    "ATE0000008901/2026",
+    "SUP0000016167/2026",
     "VEN0000005381/2025",
-    "FIN0000007540/2026",
-    "SUP0000011851/2026",
-    "SUP0000015938/2026",
-    "ATE0000007955/2026",
-    "SUP0000014041/2026",
-    "FIN0000007663/2026",
-    "VEN0000003240/2026",
-    "VEN0000003073/2026",
-    "VEN0000003319/2026",
+    "FIN0000007615/2026",
+    "SUP0000014956/2026",
+    "SUP0000015307/2026",
+    "VEN0000003423/2026",
+    "ATE0000008611/2026",
+    "SUP0000016165/2026",
+    "SUP0000016315/2026",
+    "FIN0000007948/2026",
+    "ATE0000008828/2026",
     "FIN0000007116/2026",
-    "ATE0000008634/2026",
-    "POS0000014846/2025",
-    "FIN0000007094/2026",
-    "PLA0000001106/2026",
-    "ATE0000008431/2026",
-    "ATE0000008681/2026",
-    "PLA0000001089/2026",
-    "FIN0000007511/2026",
-    "FIN0000007377/2026",
-    "FIN0000006851/2026",
-    "ATE0000008009/2026",
-    "SUP0000015763/2026",
-    "VEN0000003228/2026",
+    "SUP0000011339/2026",
+    "SUP0000015510/2026",
+    "SUP0000015611/2026",
+    "ATE0000008545/2026",
+    "ATE0000008399/2026",
+    "VEN0000003061/2026",
+    "SUP0000015139/2026",
+    "SUP0000016432/2026",
+    "SUP0000015292/2026",
+    "FIN0000007132/2026",
+    "FIN0000007706/2026",
+    "ATE0000008618/2026",
+    "FIN0000007098/2026",
     "SUP0000014863/2026",
-    "ATE0000008392/2026",
-    "SUP0000014764/2026",
-    "SUP0000015372/2026",
-    "VEN0000003314/2026",
-    "ATE0000008065/2026",
-    "FIN0000006948/2026",
-    "SUP0000014739/2026",
-    "ATE0000007987/2026",
-    "SUP0000015232/2026",
-    "VEN0000003145/2026",
-    "FIN0000007364/2026",
-    "ATE0000008317/2026",
-    "ATE0000008709/2026",
-    "FIN0000007762/2026",
-    "ATE0000008614/2026",
-    "POS0000014841/2025",
-    "FIN0000007644/2026",
-    "ATE0000008181/2026",
+    "FIN0000007148/2026",
+    "VEN0000003098/2026",
+    "SUP0000015727/2026",
+    "POS0000006337/2026",
+    "ATE0000008466/2026",
+    "ATE0000008587/2026",
+    "VEN0000003175/2026",
+    "SUP0000015460/2026",
+    "SUP0000015305/2026",
+    "FIN0000007551/2026",
+    "SUP0000015763/2026",
+    "SUP0000015913/2026",
+    "SUP0000014855/2026",
+    "ATE0000008957/2026",
+    "FIN0000007877/2026",
+    "VEN0000003152/2026",
+    "POS0000006339/2026",
+    "FIN0000007324/2026",
+    "FIN0000007968/2026",
+    "SUP0000014779/2026",
+    "FIN0000000952/2025",
+    "VEN0000003291/2026",
+    "VEN0000003059/2026",
+    "ATE0000007751/2026",
+    "VEN0000003373/2026",
+    "VEN0000003104/2026",
+    "FIN0000008079/2026",
+    "VEN0000003058/2026",
+    "ATE0000007891/2026",
+    "SUP0000015125/2026",
+    "ATE0000008801/2026",
+    "FIN0000006892/2026",
+    "SUP0000016538/2026",
+    "SUP0000014741/2026",
+    "VEN0000003126/2026",
+    "SUP0000016390/2026",
+    "SUP0000015296/2026",
+    "SUP0000015126/2026",
+    "SUP0000015436/2026",
+    "FIN0000007511/2026",
+    "SUP0000015976/2026",
+    "POS0000006348/2026",
+    "ATE0000008051/2026",
+    "FIN0000007941/2026",
+    "SUP0000016265/2026",
+    "SUP0000016198/2026",
+    "SUP0000016542/2026",
+    "VEN0000003056/2026",
+    "FIN0000007387/2026",
+    "SUP0000015123/2026",
+    "VEN0000003199/2026",
+    "VEN0000003300/2026",
+    "ATE0000008920/2026",
+    "SUP0000014936/2026",
+    "SUP0000016548/2026",
+    "PLA0000001097/2026",
+    "SUP0000016126/2026",
+    "SUP0000015053/2026",
+    "SUP0000016291/2026",
+    "FIN0000007901/2026",
+    "FIN0000007841/2026",
+    "VEN0000003430/2026",
+    "SUP0000016173/2026",
+    "SUP0000014854/2026",
+    "SUP0000016124/2026",
+    "VEN0000003330/2026",
+    "SUP0000016014/2026",
+    "SUP0000016075/2026",
+    "ATE0000008658/2026",
+    "FIN0000007249/2026",
+    "ATE0000008973/2026",
+    "ATE0000007764/2026",
+    "SUP0000015558/2026",
+    "FIN0000007625/2026",
+    "FIN0000007753/2026",
+    "FIN0000007680/2026",
+    "FIN0000006952/2026",
+    "PLA0000001123/2026",
+    "ATE0000008642/2026",
+    "ATE0000008335/2026",
+    "ATE0000008191/2026",
+    "FIN0000007019/2026",
+    "SUP0000015931/2026",
+    "ATE0000008541/2026",
+    "SUP0000015593/2026",
+    "SUP0000015117/2026",
+    "ATE0000008493/2026",
+    "POS0000006301/2026",
+    "FIN0000006773/2025",
+    "PLA0000001118/2026",
+    "SUP0000015241/2026",
+    "SUP0000016188/2026",
+    "FIN0000007667/2026",
+    "ATE0000008064/2026",
+    "PLA0000001130/2026",
+    "FIN0000007987/2026",
+    "ATE0000008119/2026",
+    "FIN0000006790/2025",
+    "FIN0000007671/2026",
+    "SUP0000016503/2026",
+    "PLA0000001096/2026",
+    "FIN0000007938/2026",
     "ATE0000008267/2026",
-    "FIN0000006936/2026",
-    "SUP0000015962/2026",
-    "SUP0000015231/2026",
+    "FIN0000008107/2026",
+    "ATE0000007695/2026",
+    "SUP0000015067/2026",
+    "FIN0000007266/2026",
+    "SUP0000016259/2026",
+    "FIN0000006798/2026",
+    "VEN0000003050/2026",
+    "FIN0000008018/2026",
+    "VEN0000003182/2026",
+    "FIN0000007803/2026",
+    "SUP0000015991/2026",
+    "ATE0000008427/2026",
+    "PLA0000001100/2026",
+    "SUP0000015777/2026",
+    "ATE0000008423/2026",
+    "ATE0000008847/2026",
+    "SUP0000015771/2026",
+    "SUP0000014764/2026",
+    "FIN0000007274/2026",
+    "SUP0000015471/2026",
+    "ATE0000009010/2026",
+    "ATE0000008865/2026",
     "SUP0000016032/2026",
-    "VEN0000003108/2026",
-    "FIN0000007615/2026",
+    "FIN0000007061/2026",
+    "FIN0000008056/2026",
+    "ATE0000008803/2026",
+    "FIN0000007288/2026",
+    "SUI0000000673/2026",
+    "ATE0000008450/2026",
+    "VEN0000003130/2026",
+    "FIN0000007815/2026",
+    "VEN0000003368/2026",
+    "FIN0000007696/2026",
+    "FIN0000007662/2026",
+    "FIN0000007935/2026",
+    "FIN0000007927/2026",
+    "FIN0000007661/2026",
+    "FIN0000006843/2025",
+    "VEN0000003223/2026",
+    "ATE0000008583/2026",
+    "FIN0000007070/2026",
+    "FIN0000007562/2026",
+    "ATE0000008040/2026",
+    "SUP0000016112/2026",
+    "ATE0000008405/2026",
+    "FIN0000008117/2026",
+    "FIN0000007522/2026",
+    "FIN0000007693/2026",
+    "ATE0000008883/2026",
+    "ATE0000008050/2026",
+    "SUP0000016162/2026",
+    "FIN0000007216/2026",
+    "FIN0000007853/2026",
+    "VEN0000003315/2026",
+    "FIN0000007215/2026",
+    "FIN0000007896/2026",
+    "ATE0000008103/2026",
+    "SUP0000016487/2026",
+    "VEN0000003328/2026",
+    "FIN0000007858/2026",
+    "VEN0000003289/2026",
+    "FIN0000007228/2026",
+    "SUP0000015184/2026",
+    "SUP0000014164/2026",
+    "ATE0000008115/2026",
+    "SUP0000015200/2026",
+    "ATE0000008116/2026",
+    "FIN0000007310/2026",
+    "FIN0000007285/2026",
+    "SUP0000016116/2026",
+    "SUP0000016518/2026",
+    "SUP0000014981/2026",
+    "SUP0000016439/2026",
+    "FIN0000007220/2026",
+    "SUP0000015169/2026",
+    "ATE0000008680/2026",
+    "FIN0000007096/2026",
+    "VEN0000003357/2026",
+    "ATE0000007980/2026",
+    "ATE0000008751/2026",
+    "SUP0000014637/2026",
+    "SUP0000016200/2026",
+    "VEN0000003379/2026",
+    "ATE0000008576/2026",
+    "VEN0000003397/2026",
+    "ATE0000008458/2026",
+    "ATE0000008417/2026",
+    "FIN0000007540/2026",
+    "ATE0000008871/2026",
+    "ATE0000008008/2026",
+    "VEN0000003230/2026",
+    "FIN0000007582/2026",
+    "SUP0000015412/2026",
+    "SUP0000015684/2026",
+    "SUP0000016566/2026",
+    "SUP0000016150/2026",
+    "SUI0000000604/2026",
+    "FIN0000007554/2026",
+    "SUP0000014699/2026",
+    "PLA0000000923/2026",
+    "SUP0000016270/2026",
+    "SUP0000015653/2026",
+    "ATE0000009019/2026",
+    "ATE0000008463/2026",
+    "FIN0000007699/2026",
+    "SUP0000016221/2026",
+    "FIN0000007895/2026",
+    "ATE0000008522/2026",
+    "ATE0000008063/2026",
+    "FIN0000007855/2026",
+    "SUP0000015624/2026",
+    "SUP0000016123/2026",
+    "VEN0000003008/2026",
+    "FIN0000007352/2026",
+    "SUP0000015703/2026",
+    "SUP0000015835/2026",
+    "SUP0000016048/2026",
+    "SUP0000016044/2026",
+    "FIN0000006853/2026",
+    "ATE0000008678/2026",
+    "SUP0000016540/2026",
+    "ATE0000008509/2026",
+    "FIN0000007027/2026",
+    "SUP0000015330/2026",
+    "FIN0000007419/2026",
+    "SUP0000014883/2026",
+    "SUP0000016453/2026",
+    "FIN0000007503/2026",
+    "SUP0000014907/2026",
+    "SUP0000016433/2026",
+    "SUP0000015646/2026",
+    "ATE0000008009/2026",
+    "SUP0000015087/2026",
+    "SUI0000000633/2026",
+    "ATE0000008391/2026",
+    "SUP0000016627/2026",
+    "PLA0000000941/2026",
+    "FIN0000008100/2026",
+    "ATE0000008584/2026",
+    "SUP0000015559/2026",
+    "ATE0000008132/2026",
+    "ATE0000008632/2026",
+    "SUP0000015476/2026",
+    "FIN0000007879/2026",
+    "SUP0000016507/2026",
+    "ATE0000008582/2026",
+    "SUP0000016639/2026",
+    "FIN0000007811/2026",
+    "ATE0000008289/2026",
+    "ATE0000008726/2026",
+    "VEN0000003272/2026",
+    "SUP0000014731/2026",
+    "FIN0000007638/2026",
+    "ATE0000008273/2026",
+    "SUP0000016592/2026",
+    "PLA0000000965/2026",
+    "PLA0000001051/2026",
+    "PLA0000001085/2026",
+    "SUP0000015942/2026",
+    "FIN0000007174/2026",
+    "FIN0000007474/2026",
+    "SUP0000015131/2026",
+    "PLA0000000898/2026",
+    "FIN0000006844/2026",
+    "POS0000014163/2025",
+    "FIN0000007382/2026",
+    "ATE0000008982/2026",
+    "VEN0000003329/2026",
+    "SUP0000015697/2026",
+    "SUP0000015206/2026",
+    "ATE0000008891/2026",
+    "SUP0000015205/2026",
+    "VEN0000003149/2026",
+    "SUP0000016467/2026",
+    "SUP0000016100/2026",
+    "FIN0000007150/2026",
+    "FIN0000003317/2025",
+    "ATE0000008987/2026",
+    "ATE0000007928/2026",
+    "SUP0000016447/2026",
+    "SUP0000016434/2026",
+    "ATE0000007752/2026",
+    "ATE0000008617/2026",
+    "SUP0000014803/2026",
+    "ATE0000011401/2025",
+    "SUP0000014763/2026",
+    "FIN0000008057/2026",
+    "SUP0000016626/2026",
+    "FIN0000007973/2026",
+    "ATE0000008984/2026",
+    "POS0000014849/2025",
+    "VEN0000003292/2026",
+    "ATE0000008585/2026",
+    "SUP0000016121/2026",
+    "VEN0000003396/2026",
+    "ATE0000008588/2026",
+    "ATE0000008337/2026",
+    "SUP0000013963/2026",
+    "FIN0000007386/2026",
+    "SUP0000015264/2026",
     "FIN0000006859/2026",
-    "SUP0000015124/2026",
-    "SUP0000014518/2026",
-    "ATE0000008076/2026",
-    "POS0000006336/2026",
-    "FIN0000007804/2026",
-    "SUP0000015991/2026",
-    "SUP0000015139/2026",
-    "PLA0000001068/2026",
-    "ATE0000008662/2026",
-    "FIN0000006956/2026",
-    "SUP0000016048/2026",
-    "FIN0000007427/2026",
-    "SUP0000015342/2026",
-    "SUP0000015931/2026",
+    "ATE0000008999/2026",
+    "VEN0000003337/2026",
+    "SUP0000016099/2026",
+    "SUP0000016289/2026",
+    "FIN0000008042/2026",
+    "ATE0000008455/2026",
+    "SUP0000016568/2026",
+    "FIN0000007989/2026",
+    "SUP0000014173/2026",
+    "ATE0000008264/2026",
+    "FIN0000007866/2026",
+    "VEN0000003327/2026",
+    "ATE0000008521/2026",
+    "FIN0000007317/2026",
+    "FIN0000008050/2026",
+    "ATE0000008596/2026",
+    "SUP0000015959/2026",
+    "ATE0000008629/2026",
+    "FIN0000007417/2026",
+    "SUP0000015588/2026",
+    "FIN0000007371/2026",
+    "SUP0000016605/2026",
+    "VEN0000003440/2026",
+    "SUP0000014840/2026",
+    "SUP0000015932/2026",
     "SUP0000014345/2026",
-    "SUP0000015359/2026",
-    "ATE0000008531/2026",
-    "VEN0000003312/2026",
-    "ATE0000008043/2026",
-    "SUP0000016040/2026",
-    "FIN0000007242/2026",
-    "FIN0000006773/2025",
-    "POS0000006180/2026",
-    "FIN0000007319/2026",
-    "SUP0000015200/2026",
-    "ATE0000008347/2026",
-    "SUP0000015629/2026",
-    "FIN0000007390/2026",
-    "FIN0000007485/2026",
-    "FIN0000007124/2026",
-    "SUP0000015761/2026",
-    "ATE0000008182/2026",
-    "VEN0000003334/2026",
-    "POS0000014808/2025",
-    "SUP0000015056/2026",
-    "SUP0000016015/2026",
-    "ATE0000008113/2026",
-    "SUP0000015021/2026",
-    "FIN0000007324/2026",
-    "ATE0000008672/2026",
-    "SUP0000015307/2026",
-    "ATE0000008115/2026",
-    "FIN0000007070/2026",
-    "FIN0000007753/2026",
-    "SUP0000014179/2026",
-    "SUP0000015087/2026",
-    "ATE0000007993/2026",
-    "FIN0000007737/2026",
+    "ATE0000008802/2026",
+    "FIN0000006774/2025",
+    "SUP0000016119/2026",
+    "FIN0000006851/2026",
+    "VEN0000003156/2026",
+    "ATE0000008030/2026",
+    "FIN0000006887/2026",
+    "SUP0000014980/2026",
+    "SUP0000016025/2026",
+    "SUP0000014908/2026",
+    "POS0000006288/2026",
     "SUP0000014806/2026",
-    "FIN0000007691/2026",
-    "FIN0000007655/2026",
-    "ATE0000007685/2026",
-    "SUP0000014866/2026",
-    "ATE0000007728/2026",
-    "SUP0000015412/2026",
-    "ATE0000008343/2026",
-    "ATE0000008544/2026",
-    "ATE0000008327/2026",
-    "SUP0000015613/2026",
-    "ATE0000008353/2026",
-    "FIN0000007249/2026",
-    "SUP0000014814/2026",
+    "ATE0000008076/2026",
+    "POS0000005663/2026",
+    "SUP0000014785/2026",
+    "SUI0000000676/2026",
+    "ATE0000008705/2026",
+    "SUP0000014914/2026",
+    "SUP0000015816/2026",
+    "SUP0000016031/2026",
+    "FIN0000007536/2026",
+    "FIN0000006936/2026",
+    "VEN0000003122/2026",
+    "VEN0000003371/2026",
     "SUP0000015964/2026",
-    "FIN0000007096/2026",
-    "SUP0000025912/2025",
-    "VEN0000003168/2026",
-    "POS0000014670/2025",
+    "ATE0000008147/2026",
+    "FIN0000008104/2026",
+    "ATE0000008066/2026",
+    "ATE0000008578/2026",
+    "SUP0000016493/2026",
+    "VEN0000003153/2026",
+    "FIN0000008072/2026",
     "SUP0000014887/2026",
-    "SUP0000015825/2026",
-    "FIN0000007064/2026",
-    "SUP0000015952/2026",
-    "ATE0000008191/2026",
-    "VEN0000003294/2026",
-    "ATE0000008008/2026",
-    "VEN0000003289/2026",
-    "VEN0000003299/2026",
-    "ATE0000008458/2026",
-    "FIN0000007487/2026",
-    "FIN0000007426/2026",
-    "POS0000006288/2026",
-    "FIN0000000952/2025",
-    "SUP0000015304/2026",
-    "SUP0000014874/2026",
-    "FIN0000007583/2026",
-    "SUP0000015287/2026",
-    "SUP0000014873/2026",
-    "SUP0000014115/2026",
-    "SUP0000015507/2026",
-    "ATE0000008114/2026",
-    "PLA0000000985/2026",
+    "ATE0000008068/2026",
+    "SUP0000015532/2026",
+    "FIN0000007462/2026",
+    "FIN0000007518/2026",
     "ATE0000008574/2026",
-    "SUP0000016012/2026",
-    "FIN0000007584/2026",
-    "SUP0000013963/2026",
-    "SUP0000015835/2026",
-    "ATE0000008052/2026",
-    "SUP0000015198/2026",
-    "SUP0000015842/2026",
-    "FIN0000007638/2026",
-    "SUP0000015961/2026",
-    "ATE0000007799/2026",
-    "ATE0000008034/2026",
+    "VEN0000003286/2026",
+    "ATE0000008888/2026",
+    "SUP0000016455/2026",
+    "SUP0000011851/2026",
+    "FIN0000007970/2026",
+    "ATE0000008338/2026",
+    "FIN0000007537/2026",
+    "FIN0000007011/2026",
+    "ATE0000008947/2026",
+    "ATE0000008425/2026",
+    "SUP0000015977/2026",
+    "VEN0000003158/2026",
+    "FIN0000007934/2026",
+    "SUP0000014334/2026",
+    "SUP0000015406/2026",
+    "SUP0000014678/2026",
+    "ATE0000008207/2026",
+    "SUP0000016350/2026",
+    "FIN0000008073/2026",
+    "SUP0000016111/2026",
+    "SUP0000015473/2026",
+    "ATE0000008641/2026",
+    "SUP0000016261/2026",
+    "SUP0000014552/2026",
+    "SUP0000014666/2026",
+    "VEN0000003285/2026",
+    "SUP0000015728/2026",
+    "SUP0000016471/2026",
+    "FIN0000007046/2026",
+    "FIN0000007593/2026",
+    "ATE0000008797/2026",
+    "ATE0000008948/2026",
+    "FIN0000007314/2026",
+    "SUP0000016617/2026",
+    "SUP0000015166/2026",
+    "FIN0000006814/2025",
+    "VEN0000003108/2026",
+    "SUP0000015366/2026",
+    "SUP0000015507/2026",
+    "ATE0000008597/2026",
+    "FIN0000007804/2026",
+    "SUP0000015610/2026",
+    "VEN0000003312/2026",
+    "FIN0000007189/2026",
+    "ATE0000008807/2026",
+    "ATE0000008334/2026",
+    "SUP0000016092/2026",
+    "ATE0000001738/2026",
+    "FIN0000007432/2026",
+    "SUP0000015855/2026",
+    "SUP0000015250/2026",
+    "ATE0000008284/2026",
+    "FIN0000008063/2026",
+    "SUP0000016557/2026",
+    "ATE0000008494/2026",
+    "SUP0000015255/2026",
+    "SUP0000014749/2026",
+    "FIN0000008088/2026",
+    "FIN0000006977/2026",
+    "SUP0000015377/2026",
+    "SUP0000014899/2026",
+    "FIN0000007840/2026",
+    "SUP0000014968/2026",
+    "ATE0000008956/2026",
+    "FIN0000007965/2026",
+    "SUI0000000605/2026",
     "FIN0000007292/2026",
-    "SUP0000015559/2026",
-    "ATE0000008476/2026",
-    "VEN0000003330/2026",
-    "SUP0000014896/2026",
-    "VEN0000003085/2026",
-    "FIN0000006782/2026",
-    "SUP0000014637/2026",
-    "SUP0000015333/2026",
-    "ATE0000008465/2026",
+    "FIN0000007022/2026",
+    "SUP0000015846/2026",
+    "FIN0000008140/2026",
+    "VEN0000003362/2026",
+    "FIN0000007600/2026",
+    "ATE0000008720/2026",
+    "VEN0000003299/2026",
+    "ATE0000008209/2026",
+    "VEN0000003123/2026",
+    "SUP0000016502/2026",
+    "ATE0000007991/2026",
+    "ATE0000006776/2026",
+    "ATE0000008431/2026",
+    "FIN0000006897/2025",
+    "VEN0000003139/2026",
+    "FIN0000007903/2026",
+    "SUP0000014729/2026",
+    "FIN0000008121/2026",
+    "FIN0000007458/2026",
+    "FIN0000007890/2026",
+    "VEN0000003112/2026",
+    "VEN0000003367/2026",
+    "FIN0000007931/2026",
+    "ATE0000008704/2026",
+    "SUP0000015961/2026",
     "SUP0000015720/2026",
-    "SUP0000015624/2026",
-    "FIN0000007684/2026",
-    "FIN0000007417/2026",
-    "SUP0000015406/2026"
+    "FIN0000007601/2026",
+    "POS0000008459/2025",
+    "SUP0000015632/2026",
+    "VEN0000003133/2026",
+    "SUP0000016652/2026",
+    "ATE0000008464/2026",
+    "SUP0000015034/2026",
+    "ATE0000007692/2026",
+    "SUP0000015962/2026",
+    "FIN0000007364/2026",
+    "FIN0000007126/2026",
+    "ATE0000008816/2026",
+    "FIN0000008053/2026",
+    "SUP0000016209/2026",
+    "FIN0000006865/2026",
+    "SUP0000016638/2026",
+    "SUP0000015056/2026",
+    "SUP0000015494/2026",
+    "ATE0000008862/2026",
+    "ATE0000008873/2026",
+    "FIN0000007995/2026",
+    "FIN0000007085/2026",
+    "SUP0000015021/2026",
+    "ATE0000008283/2026",
+    "FIN0000007708/2026",
+    "FIN0000007787/2026",
+    "ATE0000009011/2026",
+    "ATE0000008181/2026",
+    "SUP0000014958/2026",
+    "FIN0000006881/2026",
+    "ATE0000007997/2026",
+    "ATE0000008499/2026",
+    "ATE0000008706/2026",
+    "SUP0000016199/2026",
+    "FIN0000007778/2026",
+    "VEN0000003414/2026",
+    "SUP0000015672/2026",
+    "SUP0000015827/2026"
   ]
 }

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 2
training/data/train.jsonl


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 4
training/data/valid.jsonl


+ 3 - 2
training/treinar_lora_mlx.sh

@@ -37,10 +37,11 @@ mlx_lm.lora \
   --batch-size 1 \
   --num-layers 16 \
   --iters "$ITERS" \
-  --max-seq-length 4096 \
+  --max-seq-length 2048 \
   --grad-checkpoint \
   --save-every 100 \
-  --steps-per-eval 100
+  --steps-per-eval 100 \
+  --val-batches 10
 
 echo
 echo "Adapter salvo em $ADAPTER_DIR/. Teste rápido:"

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff