Financial Exception Dashboard
Priority Queue (Oldest First)
No open exceptions.
';
return;
}
container.innerHTML = sortedByAge.map(ex => `
${ex.Description}
${ex.Type} • ${Math.floor(ex.age)}d ago • Assigned to ${ex.Assignee}
${formatCurrency(ex.Amount)}
`).join('');
}
function renderExceptionTable() {
const table = document.getElementById('exceptions-table');
const headers = ['ID', 'Date', 'Type', 'Amount ($)', 'Status', 'Assigned To', 'Description'];
table.innerHTML = `
${headers.map(h => `| ${h} | `).join('')}Actions |
${exceptionsData.sort((a,b) => new Date(b.Date) - new Date(a.Date)).map(ex => `
| ${ex.ID} |
|
|
|
|
|
|
|
`).join('')}
`;
}
window.fed_updateException = (id, key, value) => {
const exception = exceptionsData.find(e => e.id === id);
if(exception) exception[key] = (key === 'Amount') ? parseFloat(value) || 0 : value;
renderAll();
};
window.fed_addException = () => {
const newId = `EXC-${Math.floor(1000 + Math.random() * 9000)}`;
exceptionsData.unshift({
id: Date.now(), ID: newId, Date: new Date().toISOString().split('T')[0], Type: EXCEPTION_TYPES[0],
Amount: 0, Status: 'New', Assignee: ASSIGNEES[0], Description: 'New exception details'
});
renderAll();
};
window.fed_removeException = (id) => {
exceptionsData = exceptionsData.filter(e => e.id !== id);
renderAll();
};
function initialize() {
const today = new Date("2025-06-29");
const createDate = (daysAgo) => {
const date = new Date(today);
date.setDate(today.getDate() - daysAgo);
return date.toISOString().split('T')[0];
};
exceptionsData = [
{ id: 1, ID: 'EXC-1023', Date: createDate(2), Type: 'Duplicate Invoice', Amount: 1500.75, Status: 'New', Assignee: 'Anna', Description: 'Invoice #INV-5822 from Acme Corp.' },
{ id: 2, ID: 'EXC-1024', Date: createDate(8), Type: 'Over-Budget Expense', Amount: 550.00, Status: 'In Review', Assignee: 'Ben', Description: 'Team travel expenses for Q2 conference' },
{ id: 3, ID: 'EXC-1025', Date: createDate(1), Type: 'High-Value Payment', Amount: 25000.00, Status: 'New', Assignee: 'Carla', Description: 'Payment to new vendor "Innovate LLC"' },
{ id: 4, ID: 'EXC-1026', Date: createDate(25), Type: 'Missing PO', Amount: 890.50, Status: 'Resolved', Assignee: 'David', Description: 'Hardware purchase from Comp. Solutions' },
{ id: 5, ID: 'EXC-1027', Date: createDate(12), Type: 'Duplicate Invoice', Amount: 120.00, Status: 'In Review', Assignee: 'Anna', Description: 'Invoice #D-9910 from SaaS Co.' },
{ id: 6, ID: 'EXC-1028', Date: createDate(4), Type: 'Vendor Mismatch', Amount: 3250.00, Status: 'New', Assignee: 'Carla', Description: 'Payment for "ACME" but vendor is "Acme Inc."' },
];
renderAll();
}
initialize();
});