🏠 HOME (EMAF205) / AI POLICY BUILDER

AI Policy Builder.

La tua policy AI.
In pochi passaggi.

RISULTATO / ESEMPIO

Questo è ciò che ottieni.

01Scopo e ambito
07Dati e riservatezza
14Checklist finale

Bozza strutturata · modificabile · esportabile · da validare

`;} $('saveHtml').addEventListener('click',()=>download(base()+'.html',printable(),'text/html;charset=utf-8')); $('printPdf').addEventListener('click',()=>{tab('preview');$('printArea').innerHTML=render(getDoc());status('Nella finestra di stampa scegli «Salva come PDF».');window.print();}); function utf8b64(s){const b=new TextEncoder().encode(s);let binary='';for(let i=0;i{const body=plain(getDoc()).replace(/\r?\n/g,'\r\n');const sub='Bozza policy aziendale AI — '+txt('company');const b64=utf8b64(body);const eml='To: \r\nSubject: =?UTF-8?B?'+utf8b64(sub)+'?=\r\nMIME-Version: 1.0\r\nContent-Type: text/plain; charset=UTF-8\r\nContent-Transfer-Encoding: base64\r\nX-Unsent: 1\r\n\r\n'+(b64.match(/.{1,76}/g)||[]).join('\r\n')+'\r\n';download(base()+'.eml',eml,'message/rfc822');status('Email preparata: apri il file .eml, controlla e invia.');}); // Produce a genuine OOXML .docx without a network dependency. const xml=s=>String(s).replace(/&/g,'&').replace(//g,'>').replace(/"/g,'"').replace(/'/g,'''); function docxParagraph(raw,style){let s=raw.replace(/\[([^\]]+)\]\(https?:\/\/[^)]+\)/g,'$1');let chunks=s.split(/(\*\*[^*]+\*\*)/g).filter(Boolean);let runs=chunks.map(part=>{let bold=/^\*\*/.test(part);let value=(bold?part.slice(2,-2):part).replace(/\*([^*]+)\*/g,'$1');return ''+(bold?'':'')+''+xml(value)+'';}).join('');return ''+(style?'':'')+runs+'';} function docxContent(md){let paragraphs=[docxParagraph('BOZZA NON APPROVATA — DA VALIDARE PRIMA DELL’ADOZIONE','Draft')];for(const row of md.split(/\r?\n/)){let s=row.trim();if(!s){paragraphs.push('');continue;}if(s==='---')continue;const h=/^(#{1,3})\s+(.+)/.exec(s);if(h){paragraphs.push(docxParagraph(h[2],h[1].length===1?'Title':'Heading'+Math.min(h[1].length,2)));continue;}if(/^(- |\d+\. )/.test(s)){paragraphs.push(docxParagraph('• '+s.replace(/^(- |\d+\. )/,''),'ListParagraph'));continue;}paragraphs.push(docxParagraph(s));}return paragraphs.join('');} function crc32(bytes){let c=0xffffffff;for(let i=0;i>>1)^((c&1)?0xedb88320:0);}return (c^0xffffffff)>>>0;} function zipStore(files){const enc=new TextEncoder(),locals=[],centrals=[];let off=0;for(const [name,content] of files){const fn=enc.encode(name),data=enc.encode(content),crc=crc32(data),loc=new Uint8Array(30+fn.length+data.length),v=new DataView(loc.buffer);v.setUint32(0,0x04034b50,true);v.setUint16(4,20,true);v.setUint16(6,0x0800,true);v.setUint16(8,0,true);v.setUint32(14,crc,true);v.setUint32(18,data.length,true);v.setUint32(22,data.length,true);v.setUint16(26,fn.length,true);loc.set(fn,30);loc.set(data,30+fn.length);locals.push(loc);const cen=new Uint8Array(46+fn.length),w=new DataView(cen.buffer);w.setUint32(0,0x02014b50,true);w.setUint16(4,20,true);w.setUint16(6,20,true);w.setUint16(8,0x0800,true);w.setUint32(16,crc,true);w.setUint32(20,data.length,true);w.setUint32(24,data.length,true);w.setUint16(28,fn.length,true);w.setUint32(42,off,true);cen.set(fn,46);centrals.push(cen);off+=loc.length;}const centlen=centrals.reduce((n,x)=>n+x.length,0),end=new Uint8Array(22),e=new DataView(end.buffer);e.setUint32(0,0x06054b50,true);e.setUint16(8,files.length,true);e.setUint16(10,files.length,true);e.setUint32(12,centlen,true);e.setUint32(16,off,true);return new Blob([...locals,...centrals,end],{type:'application/vnd.openxmlformats-officedocument.wordprocessingml.document'});} function docxBlob(md){const doc=''+docxContent(md)+'';const styles='';const types='';const rels='';const drels='';const core='Bozza policy AI aziendaleDocumento non approvato';return zipStore([['[Content_Types].xml',types],['_rels/.rels',rels],['docProps/core.xml',core],['word/document.xml',doc],['word/styles.xml',styles],['word/_rels/document.xml.rels',drels]]);} $('saveDocx').addEventListener('click',()=>download(base()+'.docx',docxBlob(getDoc()))); const shareTitle='AI Policy Builder — crea una bozza di policy aziendale in pochi passaggi',shareText='Questo strumento gratuito genera una prima bozza di policy aziendale per l’uso dell’AI, da validare.'; function copyLink(){if(navigator.clipboard?.writeText){navigator.clipboard.writeText(APP_URL).then(()=>status('Link al tool copiato.')).catch(()=>window.prompt('Copia il link:',APP_URL));}else window.prompt('Copia il link:',APP_URL);} function openShare(url){window.open(url,'_blank','noopener,noreferrer');} $('shareNative').addEventListener('click',async()=>{if(navigator.share){try{await navigator.share({title:shareTitle,text:shareText,url:APP_URL});}catch(e){if(e.name!=='AbortError')copyLink();}}else copyLink();});$('shareCopy').addEventListener('click',copyLink);$('shareLinkedin').addEventListener('click',()=>openShare('https://www.linkedin.com/sharing/share-offsite/?url='+encodeURIComponent(APP_URL)));$('shareWhatsapp').addEventListener('click',()=>openShare('https://wa.me/?text='+encodeURIComponent(shareText+' '+APP_URL)));$('shareMail').addEventListener('click',()=>{location.href='mailto:?subject='+encodeURIComponent(shareTitle)+'&body='+encodeURIComponent(shareText+'\n'+APP_URL);}); })();