Praktika · Auditas, sauga, DI (P21–P24)

P21 · „Automation user“ audite

// CRON / scheduler — auditas fiksuoja sistemos naudotoją; paaiškinkite klientui
await log.info("CRON paleidimas: užduotis " + initial?.cronJobCode);
output = { message: "Vykdytas pagal grafiką — žr. auditą (automation user)" };

P22 · Naktiniai likučiai — atsekamumas

const correlationId = initial?.correlationId ?? ("nightly-" + Date.now());
await log.info("[" + correlationId + "] Pradžia");

const res = await rql(`SELECT id, qtyBase FROM inventoryStocks WITH companyId = ${companyId} size = 1000`);
await log.info("[" + correlationId + "] Eilučių: " + (res?.content?.length ?? 0));

output = { message: "Baigta", correlationId };

P23 · DI ir slaptų duomenų apsauga

// Scenarijuje NIEKADA nekoduokite tokenų tiesiai į tekstą; DI promptuose — tik anonimizuoti pavyzdžiai
const safeSample = { code: "DEMO-001", amount: 100 };
await log.debug("Anoniminis pavyzdys: " + JSON.stringify(safeSample));
output = { message: "Politika: be gamybinių duomenų DI" };

P24 · DI sugeneruota funkcija — checklist

async function assertApiExists() {
  const allowed = ["mutate", "rql", "log.info", "fetchData", "getDataExportSchemas"];
  // Tikrinimas: ar kvietimas dokumentuotas rivile-erp-automatizavimo-api.html
  await log.info("Prieš merge: patikrinkite mutate pavadinimus pagal GraphQL SDL");
}
await assertApiExists();
output = { message: "Checklist įvykdytas", executionStatus: "SUCCESS" };