Show detailed error information for erroneous documents

- Extract error details from Binect API for documents with status 7
- Display error details in a highlighted box below the status
- Map status 7 (ERRONEOUS) to 'failed' status in refresh handler
- Add CSS styling for error details display

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-16 21:29:45 +01:00
parent 4f0f7ed9eb
commit f4c0481eda
3 changed files with 33 additions and 1 deletions

View File

@@ -459,6 +459,21 @@ body {
color: var(--text-light);
}
.pdf-item-status.failed {
color: var(--red);
}
/* Error details for erroneous documents */
.pdf-item-error {
font-size: 10px;
color: var(--red);
margin-top: 4px;
padding: 4px 6px;
background: rgba(229, 57, 53, 0.08);
border-radius: 3px;
line-height: 1.3;
}
/* Price display */
.pdf-price {
font-weight: 600;

View File

@@ -464,6 +464,9 @@ function renderPDFItem(pdf: DocumentProxy, section: 'pending' | 'basket' | 'prod
break;
}
// Show detailed error info for erroneous documents
const hasErrorDetails = pdf.binectStatus === 'failed' && pdf.errorMessage && pdf.binectStatusCode === 7;
return `
<div class="pdf-list-item ${statusClass}" data-id="${escapeHtml(pdf.id)}">
<div class="pdf-item-icon">${getStatusIcon(pdf.binectStatus)}</div>
@@ -478,6 +481,7 @@ function renderPDFItem(pdf: DocumentProxy, section: 'pending' | 'basket' | 'prod
</div>
${pdf.recipientAddress ? `<div class="pdf-item-recipient">${escapeHtml(pdf.recipientAddress.split('\n')[0])}</div>` : ''}
<div class="pdf-item-status ${statusClass}">${statusText}</div>
${hasErrorDetails ? `<div class="pdf-item-error">${escapeHtml(pdf.errorMessage!)}</div>` : ''}
</div>
<div class="pdf-item-actions">
${actionsHtml}
@@ -896,6 +900,8 @@ async function handleRefreshStatus(id: string) {
newStatus = 'sent';
} else if (result.status === 6) {
newStatus = 'canceled';
} else if (result.status === 7) {
newStatus = 'failed'; // Erroneous
} else if (result.status === 3 || result.status === 4) {
newStatus = 'in_production';
} else if (result.status === 2) {
@@ -906,7 +912,8 @@ async function handleRefreshStatus(id: string) {
binectStatus: result.status,
binectStatusText: result.statusText,
price: result.price,
recipientAddress: result.recipientAddress
recipientAddress: result.recipientAddress,
errorMessage: result.errorDetails
};
// Update in background
@@ -923,6 +930,7 @@ async function handleRefreshStatus(id: string) {
pdf.binectStatusText = result.statusText;
if (result.price) pdf.price = result.price;
if (result.recipientAddress) pdf.recipientAddress = result.recipientAddress;
if (result.errorDetails) pdf.errorMessage = result.errorDetails;
renderPDFList();
} catch (error) {

View File

@@ -334,6 +334,7 @@ export interface DocumentStatusInfo {
statusText: string;
price?: number;
recipientAddress?: string;
errorDetails?: string; // Error details for erroneous documents
}
/**
@@ -425,17 +426,25 @@ export async function getDocumentStatus(
// Extract price and recipient if available
let price: number | undefined;
let recipientAddress: string | undefined;
let errorDetails: string | undefined;
if (doc.letter?.letterData) {
price = doc.letter.letterData.price?.priceAfterTax;
recipientAddress = doc.letter.letterData.recipientAddress;
}
// Extract error details for erroneous documents (status 7)
if (doc.status.code === 7 && doc.letter?.errors && doc.letter.errors.length > 0) {
errorDetails = doc.letter.errors.map(e => e.message).join('; ');
console.log('[Binect API] Document errors:', errorDetails);
}
return {
status: doc.status.code,
statusText: doc.status.text || getStatusText(doc.status.code),
price,
recipientAddress,
errorDetails,
};
} catch (error) {
console.error('[Binect API] Get status error:', error);