Export Compliance Plan Document

Export Compliance Plan Document Generator

1. Policy Statement & Commitment
2. Restricted Party Screening & Documentation
3. Training & Auditing

1. Export Control Classifications

Define the key ECCNs (Export Control Classification Numbers) or USML (U.S. Munitions List) Categories for your products/technology.

Add/Edit Classification
List Code Item Description Control Reason Actions

2. Restricted Party Screening Steps

Define the exact procedural steps for screening a transaction.

# Procedure Step Action

Export Compliance Plan Document Draft

Go to the Plan Builder and Control Definitions tabs to define the content.

Please define at least one Classification and one Screening Step in the Control Definitions tab.

'; pdfDownloadBtn.disabled = true; return; } let classTableHTML = `
`; classifications.forEach(c => { classTableHTML += ``; }); classTableHTML += `
ListCodeItem DescriptionControl Reason
${c.type}${c.code}${c.item}${c.reason}
`; let screeningListHTML = `
    `; screeningSteps.forEach(s => { screeningListHTML += `
  1. ${s.step}
  2. `; }); screeningListHTML += `
`; // --- 1. Metadata --- let html = `

EXPORT COMPLIANCE PLAN

${data.company_name} | Version ${data.version_number} | Effective: ${data.policy_date}

1. Executive Summary & Policy Statement

**Management Commitment:**

${data.policy_commitment || 'N/A'}

Compliance Officer: ${data.policy_owner || 'N/A'}

2. Export Control Classifications (ECCN / USML)

This table lists the official export control classifications for our primary products and technology:

${classTableHTML}

3. Restricted Party Screening Procedures

Policy: ${data.screening_policy || 'N/A'}

Mandatory Screening Steps:

${screeningListHTML}

4. Documentation & Training

Documentation Policy: ${data.documentation_policy || 'N/A'}

Training Policy: ${data.training_policy || 'N/A'}

Internal Audit Policy: ${data.audit_policy || 'N/A'}

WARNING: This is a document template and must be reviewed by legal counsel.

`; reviewContent.innerHTML = html; pdfDownloadBtn.disabled = false; switchTab(2); // Switch to review tab }; /** * PDF Generation Function */ const downloadPDF = () => { const data = getMetaFormData(); const jsPDF = window.jspdf.jsPDF; const doc = new jsPDF('p', 'pt', 'a4'); let currentY = 40; const margin = 40; const pageWidth = doc.internal.pageSize.width; const maxWidth = pageWidth - (margin * 2); const checkPageBreak = (spaceNeeded) => { if (currentY + spaceNeeded > doc.internal.pageSize.height - margin) { doc.addPage(); currentY = margin; } }; const addSectionHeader = (title, color = [0, 0, 0]) => { checkPageBreak(30); doc.setFontSize(16); doc.setFont('Helvetica', 'bold'); doc.setTextColor(color[0], color[1], color[2]); doc.text(title, margin, currentY); currentY += 10; doc.setLineWidth(0.5); doc.setDrawColor(200); doc.line(margin, currentY, pageWidth - margin, currentY); currentY += 12; doc.setTextColor(0); }; const addText = (text, size = 10, style = 'normal', indent = 0) => { doc.setFontSize(size); doc.setFont('Helvetica', style); const lines = doc.splitTextToSize(text, maxWidth - indent); checkPageBreak(lines.length * 9); doc.text(lines, margin + indent, currentY); currentY += (lines.length * 9); }; const addKeyValue = (key, value) => { doc.setFontSize(10); doc.setFont('Helvetica', 'bold'); const keyText = `${key}: `; const keyWidth = doc.getStringUnitWidth(keyText) * 10; const valueLines = doc.splitTextToSize(value, maxWidth - keyWidth); checkPageBreak(10); doc.text(keyText, margin, currentY); doc.setFont('Helvetica', 'normal'); doc.text(valueLines[0], margin + keyWidth, currentY); currentY += 10; for(let i = 1; i < valueLines.length; i++) { doc.text(valueLines[i], margin + keyWidth, currentY); currentY += 10; } }; // --- PDF Content --- // Title Block doc.setFontSize(22); doc.setFont('Helvetica', 'bold'); doc.setTextColor(0, 77, 64); doc.text(`EXPORT COMPLIANCE PLAN`, pageWidth / 2, currentY, { align: 'center' }); currentY += 15; doc.setFontSize(14); doc.text(data.company_name, pageWidth / 2, currentY, { align: 'center' }); currentY += 10; doc.setFontSize(10); doc.text(`Version ${data.version_number} | Effective: ${data.policy_date}`, pageWidth / 2, currentY, { align: 'center' }); currentY += 20; // 1. Policy Statement addSectionHeader("1. Executive Summary & Policy Statement", [0, 77, 64]); addText("Management Commitment:", 10, 'bold'); addText(data.policy_commitment, 10, 'normal', 10); currentY += 5; addKeyValue("Compliance Officer", data.policy_owner); currentY += 5; // 2. Classification addSectionHeader("2. Export Control Classifications", [0, 77, 64]); if (classifications.length > 0) { const classHead = [["List", "Code", "Item Description", "Control Reason"]]; const classBody = classifications.map(c => [c.type, c.code, c.item, c.reason]); doc.autoTable({ startY: currentY, head: classHead, body: classBody, theme: 'grid', headStyles: { fillColor: [74, 78, 105], textColor: [255] }, // Secondary color styles: { fontSize: 9, cellPadding: 5, font: 'Helvetica' } }); currentY = doc.autoTable.previous.finalY + 15; } else { addText("No critical classifications defined.", 11, 'italic'); currentY += 10; } // 3. Screening Procedures addSectionHeader("3. Restricted Party Screening Procedures", [0, 77, 64]); addText("Policy:", 10, 'bold'); addText(data.screening_policy, 10, 'normal', 10); currentY += 5; addText("Mandatory Screening Steps:", 10, 'bold'); if (screeningSteps.length > 0) { screeningSteps.forEach((item, index) => { addText(`${index + 1}. ${item.step}`, 10, 'normal', 10); }); } else { addText("No screening steps defined.", 10, 'italic', 10); } currentY += 5; // 4. Documentation & Training addSectionHeader("4. Documentation, Training, & Audit", [0, 77, 64]); addText("Documentation Policy:", 10, 'bold'); addText(data.documentation_policy, 10, 'normal', 10); currentY += 5; addText("Training Policy:", 10, 'bold'); addText(data.training_policy, 10, 'normal', 10); currentY += 5; addText("Internal Audit Policy:", 10, 'bold'); addText(data.audit_policy, 10, 'normal', 10); currentY += 15; // Footer Disclaimer currentY = doc.internal.pageSize.height - 30; doc.setFontSize(8); doc.setFont('Helvetica', 'italic'); doc.setTextColor(244, 67, 54); doc.text("WARNING: This is a document template and must be reviewed by legal counsel.", pageWidth / 2, currentY, { align: 'center' }); doc.setTextColor(0); doc.save(`${data.company_name.replace(/\s/g, '_')}_Export_Compliance_Plan.pdf`); }; // --- Tab Navigation --- const switchTab = (tabIndex) => { tabs.forEach((tab, index) => { tab.classList.toggle('active', index === tabIndex); contents[index].classList.toggle('active', index === tabIndex); }); currentTab = tabIndex; updateNavButtons(); if (tabIndex === 2) { renderReviewSheet(); } } const updateNavButtons = () => { prevBtn.disabled = currentTab === 0; nextBtn.disabled = currentTab === tabs.length - 1; } tabs.forEach((tab, index) => { tab.addEventListener('click', () => { const tabNode = tab.closest('.compliance-tab-button'); const newIndex = Array.from(tabNode.parentNode.children).indexOf(tabNode); switchTab(newIndex); }); }); nextBtn.addEventListener('click', () => { if (currentTab < tabs.length - 1) switchTab(currentTab + 1); }); prevBtn.addEventListener('click', () => { if (currentTab > 0) switchTab(currentTab - 1); }); // --- Event Listeners and Initial Load --- generateReviewBtn.addEventListener('click', renderReviewSheet); pdfDownloadBtn.addEventListener('click', downloadPDF); // Initial Setup setInitialDate(); renderClassifications(); renderScreeningSteps(); updateNavButtons(); });
Scroll to Top