zatca-phase2
Version:
ZATCA Phase 2 e-invoicing integration for Node.js
59 lines (49 loc) • 1.52 kB
JavaScript
/**
* Invoice Status Module
* @module zatca-phase2/invoice/status
* @private
*/
const { ZatcaError, ErrorCodes } = require('../errors');
const logger = require('../utils/logger');
const api = require('../api');
/**
* Check status of a submitted invoice
* @function
* @param {Object} invoice - Invoice with zatcaResponse
* @returns {Promise<Object>} Updated status
*/
exports.checkInvoiceStatus = async function(invoice) {
try {
logger.info('Checking invoice status', {
invoiceNumber: invoice.invoiceNumber
});
if (!invoice.zatcaResponse || !invoice.zatcaResponse.requestID) {
throw new ZatcaError(
'Invoice has no valid ZATCA response with requestID',
ErrorCodes.VALIDATION_ERROR
);
}
const requestId = invoice.zatcaResponse.requestID;
logger.debug('Found request ID', { requestId });
const statusResponse = await api.checkInvoiceStatus(requestId);
// Update invoice status
invoice.zatcaStatus = statusResponse.status || 'unknown';
logger.info('Invoice status updated', {
invoiceNumber: invoice.invoiceNumber,
status: invoice.zatcaStatus
});
return statusResponse;
} catch (error) {
logger.error('Failed to check invoice status', {
invoiceNumber: invoice.invoiceNumber,
error: error.message
});
if (error.name === 'ZatcaError') {
throw error;
}
throw new ZatcaError(
`Failed to check invoice status: ${error.message}`,
ErrorCodes.UNKNOWN_ERROR
);
}
};