4 Commits

Author SHA1 Message Date
84291efbaf ci: touch workflow to retrigger Actions
All checks were successful
Deploy Cloudflare / deploy (push) Successful in 2m43s
2026-08-07 23:08:09 +02:00
8297d86da3 ci: re-trigger deploy after runner network fix
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-07 23:07:02 +02:00
d34b126b0b ci: allow gitea-actions branch for deploy verification
Some checks failed
Deploy Cloudflare / deploy (push) Failing after 2m38s
2026-08-07 22:58:16 +02:00
a34090a33d ci: add Gitea Actions Cloudflare deploy workflow 2026-08-07 22:55:42 +02:00
4 changed files with 39 additions and 483 deletions

View File

@ -0,0 +1,33 @@
# Deploy NexStudio Worker to Cloudflare via Gitea Actions.
# Primary CI/CD after GitHub -> Gitea cutover. Requires secrets:
# CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID
name: Deploy Cloudflare
on:
push:
branches: [main, gitea-actions]
paths-ignore:
- "**.md"
- ".cursor/**"
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "22"
cache: npm
- name: Install dependencies
run: npm ci
- name: Build and deploy
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
run: npm run deploy:cf
# retrigger 2026-08-07T21:08:09Z

View File

@ -37,7 +37,7 @@ const allegatiByLocale: Record<SupportedLocale, AllegatiLocale> = {
it: {
page: {
title: 'Allegati al Codice Etico — NexStudio',
description: 'Template operativi allegati al Codice Etico NexStudio: adesione, NDA, checklist, DPIA, privacy, SBOM, retention, AI impact, piano formazione, responsible disclosure, registri operativi.',
description: 'Template operativi allegati al Codice Etico NexStudio: adesione, NDA, checklist, DPIA, privacy, SBOM, retention, AI impact, piano formazione, responsible disclosure.',
heading: 'Allegati e moduli operativi',
lead: 'Documenti complementari al Codice Etico. Ciascun allegato è un template da personalizzare e adottare secondo le esigenze operative.',
backLabel: '← Torna al Codice Etico',
@ -690,166 +690,12 @@ const allegatiByLocale: Record<SupportedLocale, AllegatiLocale> = {
],
footer: 'Approvazione policy: CISO _______ · CTO _______ · Legal _______ · Data _______',
},
{
id: 'registri-operativi',
heading: 'Registri operativi — template di riga',
description: 'Schemi minimi per registro trattamenti, incidenti/breach, inventario SBOM operativo e log di retention/cancellazione.',
intro:
'Documento collegato alla sezione 17 del Codice Etico. Ogni registro può vivere in foglio condiviso, HRIS o ticket system; i campi sotto sono obbligatori per audit. Complementare a: modello DPIA, template SBOM, policy retention, flowchart incidenti.',
sections: [
{
title: '1. Principi comuni',
content: [
'Owner del registro: ruolo nominato (DPO, CISO, CTO o Legal) con backup.',
'Aggiornamento: a ogni nuovo trattamento / incidente / release / cancellazione rilevante; revisione periodica almeno trimestrale.',
'Conservazione: allineata alla policy di retention; export disponibile per autorità e audit.',
'Formato: una riga = un record; ID univoco; data ultimo aggiornamento obbligatoria.',
],
},
{
title: '2. Registro dei trattamenti (RoPA / art. 30 GDPR / PDPA)',
content: [
{
label: 'Campi riga',
fields: [
'ID trattamento (es. TRT-001)',
'Nome / descrizione',
'Perimetro (piattaforma / LexAura / MediAura)',
'Titolare',
'Responsabile / sub-responsabili',
'Categorie interessati',
'Categorie dati (comuni / particolari)',
'Finalità',
'Base giuridica',
'Trasferimenti extra-TH/UE (Sì/No + strumento)',
'Misure di sicurezza (rif.)',
'Retention (rif. policy)',
'DPIA (Sì/No + link)',
'Owner',
'Ultimo aggiornamento',
],
},
],
note: 'Per trattamenti ad alto rischio: collegare ID DPIA dallallegato modello DPIA. Non inserire dati personali degli interessati nel registro.',
},
{
title: '3. Registro incidenti e violazioni dei dati',
content: [
{
label: 'Campi riga',
fields: [
'ID incidente (INC-YYYY-NNN)',
'Data/ora rilevazione',
'Data/ora contenimento',
'Severità',
'Tipo (breach dati / accesso non auth / malware / altro)',
'Perimetro',
'Sistemi coinvolti',
'Categorie dati / n. interessati stimato',
'Notifica autorità (Sì/No/N.A. + data)',
'Notifica interessati (Sì/No/N.A. + data)',
'Stato (aperto / in corso / chiuso)',
'Root cause (sintesi)',
'Azioni correttive',
'Owner',
'Link post-mortem',
],
},
],
note: 'Usare il template di notifica dellallegato gestione incidenti come allegato al record. SLA ack esterni: allineati a PDPA/GDPR e policy disclosure.',
},
{
title: '4. Registro SBOM / inventario componenti (operativo)',
content: [
{
label: 'Campi riga (per release o componente critico)',
fields: [
'ID release / commit',
'Prodotto (piattaforma / LexAura / MediAura)',
'Data generazione SBOM',
'Formato (CycloneDX / SPDX)',
'Link artefatto SBOM',
'N. componenti',
'N. vulnerabilità aperte (CVSS ≥ 7)',
'N. licenze copyleft / review IP',
'Owner tecnico',
'Esito gate pre-release (OK / blocco)',
'Note',
],
},
],
note: 'Il dettaglio componente resta nel file SBOM; questo registro traccia le generazioni e i gate. Allineare alla checklist pre-release.',
},
{
title: '5. Registro retention e cancellazioni',
content: [
{
label: 'Campi riga',
fields: [
'ID job (RET-001)',
'Categoria dati (rif. policy retention)',
'Sistema / datastore',
'Periodo di retention applicato',
'Trigger (scadenza / richiesta interessato / fine contratto)',
'Azione (anonimizzazione / cancellazione logica / fisica)',
'Data esecuzione',
'Evidenza (log / ticket / certificato)',
'N. record coinvolti (aggregato)',
'Esecutore',
'Verifica DPO/CISO (data)',
],
},
],
note: 'Non elencare identificativi degli interessati; solo aggregati e riferimenti tecnici. Allineare alla policy di retention allegata.',
},
{
title: '6. Registro contratti fornitori e sub-processori (minimo)',
content: [
{
label: 'Campi riga',
fields: [
'ID fornitore',
'Nome / servizio',
'Ruolo (sub-processore / vendor)',
'Dati trattati (categorie)',
'Sede / trasferimenti',
'DPA / NDA (link + data firma)',
'Misure sicurezza equivalenti (Sì/No)',
'Data revisione',
'Owner Legal',
'Stato (attivo / in uscita / terminato)',
],
},
],
},
{
title: '7. Owner e KPI',
content: [
{ label: 'Registro trattamenti + DPIA', fields: ['DPO (backup: Legal)'] },
{ label: 'Registro incidenti', fields: ['CISO (backup: CTO)'] },
{ label: 'Registro SBOM', fields: ['CTO / engineering lead'] },
{ label: 'Registro retention', fields: ['DPO + engineering'] },
{ label: 'Registro sub-processori', fields: ['Legal (backup: DPO)'] },
{
label: 'KPI esempio',
fields: [
'% trattamenti con owner e data aggiornamento < 90 gg',
'Incidenti aperti > SLA',
'Release senza SBOM allegato = 0',
'Job retention eseguiti vs pianificati',
],
},
],
},
],
footer: 'Approvazione registri: DPO _______ · CISO _______ · Legal _______ · Data _______',
},
],
},
en: {
page: {
title: 'Code of Ethics Annexes — NexStudio',
description: 'Operational templates annexed to the NexStudio Code of Ethics: adhesion, NDA, checklist, DPIA, privacy, SBOM, retention, AI impact, training plan, responsible disclosure, operational registers.',
description: 'Operational templates annexed to the NexStudio Code of Ethics: adhesion, NDA, checklist, DPIA, privacy, SBOM, retention, AI impact, training plan, responsible disclosure.',
heading: 'Annexes and operational forms',
lead: 'Complementary documents to the Code of Ethics. Each annex is a template to be customized and adopted according to operational needs.',
backLabel: '← Back to Code of Ethics',
@ -1502,166 +1348,12 @@ const allegatiByLocale: Record<SupportedLocale, AllegatiLocale> = {
],
footer: 'Policy approval: CISO _______ · CTO _______ · Legal _______ · Date _______',
},
{
id: 'registri-operativi',
heading: 'Operational registers — row templates',
description: 'Minimum schemas for records of processing, incidents/breaches, operational SBOM inventory and retention/deletion log.',
intro:
'Document linked to section 17 of the Code of Ethics. Each register may live in a shared sheet, HRIS or ticket system; fields below are mandatory for audit. Complementary to: DPIA model, SBOM template, retention policy, incident flowchart.',
sections: [
{
title: '1. Common principles',
content: [
'Register owner: named role (DPO, CISO, CTO or Legal) with a backup.',
'Updates: on every new processing / incident / release / material deletion; periodic review at least quarterly.',
'Retention: aligned with the retention policy; export available for authorities and audits.',
'Format: one row = one record; unique ID; last-updated date mandatory.',
],
},
{
title: '2. Records of processing (RoPA / GDPR Art. 30 / PDPA)',
content: [
{
label: 'Row fields',
fields: [
'Processing ID (e.g. TRT-001)',
'Name / description',
'Perimeter (platform / LexAura / MediAura)',
'Controller',
'Processor / sub-processors',
'Data subject categories',
'Data categories (regular / special)',
'Purposes',
'Legal basis',
'Transfers outside TH/EU (Yes/No + tool)',
'Security measures (ref.)',
'Retention (policy ref.)',
'DPIA (Yes/No + link)',
'Owner',
'Last update',
],
},
],
note: 'For high-risk processing: link DPIA ID from the DPIA model annex. Do not put data subjects personal data in the register.',
},
{
title: '3. Incident and data-breach register',
content: [
{
label: 'Row fields',
fields: [
'Incident ID (INC-YYYY-NNN)',
'Detection date/time',
'Containment date/time',
'Severity',
'Type (data breach / unauthorized access / malware / other)',
'Perimeter',
'Systems involved',
'Data categories / estimated data subjects',
'Authority notification (Yes/No/N.A. + date)',
'Data subject notification (Yes/No/N.A. + date)',
'Status (open / in progress / closed)',
'Root cause (summary)',
'Corrective actions',
'Owner',
'Post-mortem link',
],
},
],
note: 'Use the incident notification template from the incident-management annex as an attachment to the record.',
},
{
title: '4. SBOM / component inventory register (operational)',
content: [
{
label: 'Row fields (per release or critical component set)',
fields: [
'Release ID / commit',
'Product (platform / LexAura / MediAura)',
'SBOM generation date',
'Format (CycloneDX / SPDX)',
'SBOM artifact link',
'Component count',
'Open vulns (CVSS ≥ 7)',
'Copyleft licenses / IP review',
'Technical owner',
'Pre-release gate result (OK / blocked)',
'Notes',
],
},
],
note: 'Component detail stays in the SBOM file; this register tracks generations and gates. Align with the pre-release checklist.',
},
{
title: '5. Retention and deletion register',
content: [
{
label: 'Row fields',
fields: [
'Job ID (RET-001)',
'Data category (retention policy ref.)',
'System / datastore',
'Retention period applied',
'Trigger (expiry / data subject request / end of contract)',
'Action (anonymization / logical / physical deletion)',
'Execution date',
'Evidence (log / ticket / certificate)',
'Records affected (aggregate)',
'Executor',
'DPO/CISO verification (date)',
],
},
],
note: 'Do not list data subject identifiers; aggregates and technical refs only. Align with the retention policy annex.',
},
{
title: '6. Vendor and sub-processor register (minimum)',
content: [
{
label: 'Row fields',
fields: [
'Vendor ID',
'Name / service',
'Role (sub-processor / vendor)',
'Data processed (categories)',
'Location / transfers',
'DPA / NDA (link + signature date)',
'Equivalent security measures (Yes/No)',
'Review date',
'Legal owner',
'Status (active / exiting / terminated)',
],
},
],
},
{
title: '7. Owners and KPIs',
content: [
{ label: 'Processing + DPIA register', fields: ['DPO (backup: Legal)'] },
{ label: 'Incident register', fields: ['CISO (backup: CTO)'] },
{ label: 'SBOM register', fields: ['CTO / engineering lead'] },
{ label: 'Retention register', fields: ['DPO + engineering'] },
{ label: 'Sub-processor register', fields: ['Legal (backup: DPO)'] },
{
label: 'Sample KPIs',
fields: [
'% processings with owner and update < 90 days',
'Open incidents past SLA',
'Releases without SBOM = 0',
'Retention jobs run vs planned',
],
},
],
},
],
footer: 'Registers approval: DPO _______ · CISO _______ · Legal _______ · Date _______',
},
],
},
th: {
page: {
title: 'ภาคผนวกประมวลจริยธรรม — NexStudio',
description: 'เทมเพลตปฏิบัติการแนบท้ายประมวลจริยธรรม NexStudio: การยอมรับ, NDA, เช็กลิสต์, DPIA, ความเป็นส่วนตัว, SBOM, การเก็บรักษา, AI impact, แผนการฝึกอบรม, responsible disclosure, ทะเบียนปฏิบัติการ',
description: 'เทมเพลตปฏิบัติการแนบท้ายประมวลจริยธรรม NexStudio: การยอมรับ, NDA, เช็กลิสต์, DPIA, ความเป็นส่วนตัว, SBOM, การเก็บรักษา, AI impact, แผนการฝึกอบรม, responsible disclosure',
heading: 'ภาคผนวกและแบบฟอร์มปฏิบัติการ',
lead: 'เอกสารเสริมประมวลจริยธรรม แต่ละภาคผนวกเป็นเทมเพลตที่ต้องปรับแต่งและนำไปใช้ตามความต้องการเชิงปฏิบัติการ',
backLabel: '← กลับไปประมวลจริยธรรม',
@ -2312,160 +2004,6 @@ const allegatiByLocale: Record<SupportedLocale, AllegatiLocale> = {
],
footer: 'การอนุมัตินโยบาย: CISO _______ · CTO _______ · Legal _______ · วันที่ _______',
},
{
id: 'registri-operativi',
heading: 'ทะเบียนปฏิบัติการ — เทมเพลตแถว',
description: 'โครงขั้นต่ำสำหรับทะเบียนการประมวลผล เหตุการณ์/breach บัญชี SBOM ปฏิบัติการ และบันทึก retention/การลบ',
intro:
'เอกสารเชื่อมกับหมวด 17 ของประมวลจริยธรรม แต่ละทะเบียนอาจอยู่ในชีตแชร์ HRIS หรือระบบตั๋ว; ฟิลด์ด้านล่างจำเป็นสำหรับ audit เสริมกับ: แบบ DPIA เทมเพลต SBOM นโยบาย retention แผนภูมิเหตุการณ์',
sections: [
{
title: '1. หลักการร่วม',
content: [
'เจ้าของทะเบียน: บทบาทที่ระบุชื่อ (DPO CISO CTO หรือ Legal) พร้อมตัวสำรอง',
'การอัปเดต: ทุกครั้งที่มีการประมวลผลใหม่ / เหตุการณ์ / การปล่อย / การลบสำคัญ; ทบทวนอย่างน้อยรายไตรมาส',
'การเก็บรักษา: ตามนโยบาย retention; export ได้สำหรับหน่วยงานและ audit',
'รูปแบบ: หนึ่งแถว = หนึ่งรายการ; ID ไม่ซ้ำ; วันที่อัปเดตล่าสุดบังคับ',
],
},
{
title: '2. ทะเบียนการประมวลผล (RoPA / GDPR ม.30 / PDPA)',
content: [
{
label: 'ฟิลด์แถว',
fields: [
'รหัสการประมวลผล (เช่น TRT-001)',
'ชื่อ / คำอธิบาย',
'ขอบเขต (แพลตฟอร์ม / LexAura / MediAura)',
'ผู้ควบคุม',
'ผู้ประมวลผล / ผู้ประมวลผลช่วง',
'หมวดหมู่เจ้าของข้อมูล',
'หมวดหมู่ข้อมูล (ทั่วไป / พิเศษ)',
'วัตถุประสงค์',
'ฐานทางกฎหมาย',
'การโอนนอก TH/EU (ใช่/ไม่ + เครื่องมือ)',
'มาตรการความปลอดภัย (อ้างอิง)',
'Retention (อ้างอิงนโยบาย)',
'DPIA (ใช่/ไม่ + ลิงก์)',
'เจ้าของ',
'อัปเดตล่าสุด',
],
},
],
note: 'สำหรับการประมวลผลความเสี่ยงสูง: เชื่อมรหัส DPIA จากภาคผนวกแบบ DPIA อย่าใส่ข้อมูลส่วนบุคคลของเจ้าของข้อมูลในทะเบียน',
},
{
title: '3. ทะเบียนเหตุการณ์และการละเมิดข้อมูล',
content: [
{
label: 'ฟิลด์แถว',
fields: [
'รหัสเหตุการณ์ (INC-YYYY-NNN)',
'วันเวลาที่ตรวจพบ',
'วันเวลาที่กักกัน',
'ความรุนแรง',
'ประเภท (breach / เข้าถึงโดยไม่ได้รับอนุญาต / มัลแวร์ / อื่นๆ)',
'ขอบเขต',
'ระบบที่เกี่ยวข้อง',
'หมวดหมู่ข้อมูล / จำนวนเจ้าของข้อมูลโดยประมาณ',
'แจ้งหน่วยงาน (ใช่/ไม่/N.A. + วันที่)',
'แจ้งเจ้าของข้อมูล (ใช่/ไม่/N.A. + วันที่)',
'สถานะ (เปิด / กำลังดำเนินการ / ปิด)',
'สาเหตุต้นตอ (สรุป)',
'การแก้ไข',
'เจ้าของ',
'ลิงก์ post-mortem',
],
},
],
note: 'ใช้เทมเพลตการแจ้งจากภาคผนวกจัดการเหตุการณ์แนบกับรายการ',
},
{
title: '4. ทะเบียน SBOM / บัญชีส่วนประกอบ (ปฏิบัติการ)',
content: [
{
label: 'ฟิลด์แถว (ต่อ release หรือชุดส่วนประกอบวิกฤต)',
fields: [
'รหัส release / commit',
'ผลิตภัณฑ์ (แพลตฟอร์ม / LexAura / MediAura)',
'วันที่สร้าง SBOM',
'รูปแบบ (CycloneDX / SPDX)',
'ลิงก์ไฟล์ SBOM',
'จำนวนส่วนประกอบ',
'ช่องโหว่เปิด (CVSS ≥ 7)',
'ใบอนุญาต copyleft / ทบทวน IP',
'เจ้าของเทคนิค',
'ผล gate ก่อนปล่อย (OK / บล็อก)',
'หมายเหตุ',
],
},
],
note: 'รายละเอียดส่วนประกอบอยู่ในไฟล์ SBOM; ทะเบียนนี้ติดตามการสร้างและ gate ให้สอดคล้องกับเช็กลิสต์ก่อนปล่อย',
},
{
title: '5. ทะเบียน retention และการลบ',
content: [
{
label: 'ฟิลด์แถว',
fields: [
'รหัสงาน (RET-001)',
'หมวดหมู่ข้อมูล (อ้างอิงนโยบาย retention)',
'ระบบ / datastore',
'ระยะเวลา retention ที่ใช้',
'ตัวกระตุ้น (ครบกำหนด / คำขอเจ้าของข้อมูล / สิ้นสุดสัญญา)',
'การดำเนินการ (ทำให้ไม่ระบุตัวตน / ลบตรรกะ / ลบกายภาพ)',
'วันที่ดำเนินการ',
'หลักฐาน (บันทึก / ตั๋ว / ใบรับรอง)',
'จำนวน record (รวม)',
'ผู้ดำเนินการ',
'การตรวจสอบ DPO/CISO (วันที่)',
],
},
],
note: 'อย่าระบุตัวตนเจ้าของข้อมูล; ใช้เฉพาะค่าสรุปและอ้างอิงทางเทคนิค ให้สอดคล้องกับนโยบาย retention',
},
{
title: '6. ทะเบียนผู้ให้บริการและผู้ประมวลผลช่วง (ขั้นต่ำ)',
content: [
{
label: 'ฟิลด์แถว',
fields: [
'รหัสผู้ให้บริการ',
'ชื่อ / บริการ',
'บทบาท (ผู้ประมวลผลช่วง / vendor)',
'ข้อมูลที่ประมวลผล (หมวดหมู่)',
'ที่ตั้ง / การโอน',
'DPA / NDA (ลิงก์ + วันที่ลงนาม)',
'มาตรการความปลอดภัยเทียบเท่า (ใช่/ไม่)',
'วันที่ทบทวน',
'เจ้าของ Legal',
'สถานะ (ใช้งาน / กำลังออก / สิ้นสุด)',
],
},
],
},
{
title: '7. เจ้าของและ KPI',
content: [
{ label: 'ทะเบียนการประมวลผล + DPIA', fields: ['DPO (สำรอง: Legal)'] },
{ label: 'ทะเบียนเหตุการณ์', fields: ['CISO (สำรอง: CTO)'] },
{ label: 'ทะเบียน SBOM', fields: ['CTO / engineering lead'] },
{ label: 'ทะเบียน retention', fields: ['DPO + engineering'] },
{ label: 'ทะเบียนผู้ประมวลผลช่วง', fields: ['Legal (สำรอง: DPO)'] },
{
label: 'KPI ตัวอย่าง',
fields: [
'% การประมวลผลที่มีเจ้าของและอัปเดต < 90 วัน',
'เหตุการณ์เปิดเกิน SLA',
'release ที่ไม่มี SBOM = 0',
'งาน retention ที่ทำ vs ที่วางแผน',
],
},
],
},
],
footer: 'การอนุมัติทะเบียน: DPO _______ · CISO _______ · Legal _______ · วันที่ _______',
},
],
},
};

View File

@ -177,7 +177,6 @@ type CodiceEticoLocale = {
title: string;
intro: string;
items: readonly string[];
registersLinkLabel: string;
};
allegati: { title: string; items: readonly string[]; linkLabel: string };
approvazione: {
@ -609,7 +608,6 @@ const codiceEticoByLocale: Record<SupportedLocale, CodiceEticoLocale> = {
'contratti con fornitori e sub-processori;',
'record di formazione e dichiarazioni di adesione al Codice.',
],
registersLinkLabel: 'Apri i template dei registri operativi →',
},
allegati: {
title: '18. Allegati e moduli (inclusi)',
@ -626,7 +624,6 @@ const codiceEticoByLocale: Record<SupportedLocale, CodiceEticoLocale> = {
'Template per valutazione dimpatto AI/ML.',
'Piano di formazione — onboarding 90 giorni e formazione annuale.',
'Policy di responsible disclosure e segnalazione vulnerabilità.',
'Registri operativi — template di riga (trattamenti, incidenti, SBOM, retention, sub-processori).',
],
},
approvazione: {
@ -668,7 +665,7 @@ const codiceEticoByLocale: Record<SupportedLocale, CodiceEticoLocale> = {
items: [
'Personalizzare il documento con il nome ufficiale della società (se diverso dal marchio operativo), firme e riferimenti legali locali a Bangkok.',
'Implementare i canali tecnici per segnalazioni etiche (piattaforma anonima); la policy di responsible disclosure (security@) è già in allegato.',
'Applicare Piano di formazione e popolare i registri operativi (allegati): trattamenti, incidenti, SBOM, retention, sub-processori.',
'Applicare il Piano di formazione (allegato operativo): onboarding 90 giorni e refresh annuale; HR tiene il registro di completamento.',
],
},
notePraticheDPIA: [
@ -1106,7 +1103,6 @@ const codiceEticoByLocale: Record<SupportedLocale, CodiceEticoLocale> = {
'contracts with vendors and sub-processors;',
'training records and Code adhesion declarations.',
],
registersLinkLabel: 'Open the operational registers templates →',
},
allegati: {
title: '18. Annexes and forms (included)',
@ -1123,7 +1119,6 @@ const codiceEticoByLocale: Record<SupportedLocale, CodiceEticoLocale> = {
'AI/ML impact assessment template.',
'Training plan — 90-day onboarding and annual refresh.',
'Responsible disclosure and vulnerability reporting policy.',
'Operational registers — row templates (processing, incidents, SBOM, retention, sub-processors).',
],
},
approvazione: {
@ -1165,7 +1160,7 @@ const codiceEticoByLocale: Record<SupportedLocale, CodiceEticoLocale> = {
items: [
'Customize the document with the official company name (if different from the operating brand), signatures and local legal references in Bangkok.',
'Implement technical channels for ethics reporting (anonymous platform); the responsible disclosure policy (security@) is already in the annexes.',
'Apply the Training plan and populate the operational registers (annexes): processing, incidents, SBOM, retention, sub-processors.',
'Apply the Training plan (operational annex): 90-day onboarding and annual refresh; HR keeps the completion register.',
],
},
notePraticheDPIA: [
@ -1603,7 +1598,6 @@ const codiceEticoByLocale: Record<SupportedLocale, CodiceEticoLocale> = {
'สัญญากับผู้ให้บริการและผู้ประมวลผลช่วง;',
'บันทึกการฝึกอบรมและการประกาศยอมรับประมวล',
],
registersLinkLabel: 'เปิดเทมเพลตทะเบียนปฏิบัติการ →',
},
allegati: {
title: '18. ภาคผนวกและแบบฟอร์ม (รวมอยู่)',
@ -1620,7 +1614,6 @@ const codiceEticoByLocale: Record<SupportedLocale, CodiceEticoLocale> = {
'เทมเพลตการประเมินผลกระทบ AI/ML',
'แผนการฝึกอบรม — ปฐมนิเทศ 90 วัน และการทบทวนประจำปี',
'นโยบาย responsible disclosure และการรายงานช่องโหว่',
'ทะเบียนปฏิบัติการ — เทมเพลตแถว (การประมวลผล เหตุการณ์ SBOM retention ผู้ประมวลผลช่วง)',
],
},
approvazione: {
@ -1662,7 +1655,7 @@ const codiceEticoByLocale: Record<SupportedLocale, CodiceEticoLocale> = {
items: [
'ปรับแต่งเอกสารด้วยชื่อบริษัทอย่างเป็นทางการ (หากต่างจากแบรนด์ปฏิบัติการ) ลายเซ็น และการอ้างอิงทางกฎหมายท้องถิ่นในกรุงเทพฯ',
'จัดทำช่องทางเทคนิคสำหรับการรายงานจริยธรรม (แพลตฟอร์มนิรนาม); นโยบาย responsible disclosure (security@) อยู่ในภาคผนวกแล้ว',
'ใช้แผนการฝึกอบรมและกรอกทะเบียนปฏิบัติการ (ภาคผนวก): การประมวลผล เหตุการณ์ SBOM retention ผู้ประมวลผลช่วง',
'ใช้แผนการฝึกอบรม (ภาคผนวกปฏิบัติการ): ปฐมนิเทศ 90 วัน และการทบทวนประจำปี; HR รักษาทะเบียนการสำเร็จ',
],
},
notePraticheDPIA: [

View File

@ -284,14 +284,6 @@ const isLabeled = (item: string | { label: string; text: string }): item is { la
<ul>
{c.documentazione.items.map((item) => <li>{item}</li>)}
</ul>
<p class="mt-3 text-sm">
<a
class={link}
href={`/${currentLocale === 'it' ? '' : currentLocale + '/'}allegati#registri-operativi`}
>
{c.documentazione.registersLinkLabel}
</a>
</p>
<h2 id="allegati">{c.allegati.title}</h2>
<p class="mb-4 text-sm">