75 lines
2 KiB
JavaScript
75 lines
2 KiB
JavaScript
const BaseFinancialRepository = require('./BaseFinancialRepository');
|
|
|
|
/**
|
|
* Transaction Line Repository
|
|
*
|
|
* Manages transaction lines for double-entry bookkeeping.
|
|
* Each transaction should have balanced debit and credit lines.
|
|
*/
|
|
class TransactionLineRepository extends BaseFinancialRepository {
|
|
constructor() {
|
|
super('pg_fn_transaction_lines');
|
|
}
|
|
|
|
/**
|
|
* Find lines for a transaction
|
|
* @param {string} transactionId - Transaction ID
|
|
* @returns {Promise<Array>} Array of transaction lines
|
|
*/
|
|
async findByTransactionId(transactionId) {
|
|
try {
|
|
return await this.findAll({ transaction_id: transactionId }, { orderBy: 'created_at' });
|
|
} catch (error) {
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Find lines for an account
|
|
* @param {string} accountId - Account ID
|
|
* @returns {Promise<Array>} Array of transaction lines
|
|
*/
|
|
async findByAccountId(accountId) {
|
|
try {
|
|
return await this.findAll({ account_id: accountId }, {
|
|
orderBy: 'created_at',
|
|
orderDirection: 'desc'
|
|
});
|
|
} catch (error) {
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Create transaction lines in batch
|
|
* @param {Array<Object>} lines - Array of transaction lines
|
|
* @returns {Promise<Array>} Created lines
|
|
*/
|
|
async createLines(lines) {
|
|
try {
|
|
const createdLines = [];
|
|
for (const line of lines) {
|
|
const created = await this.create(line);
|
|
createdLines.push(created);
|
|
}
|
|
return createdLines;
|
|
} catch (error) {
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Validate double-entry balance
|
|
* @param {Array<Object>} lines - Transaction lines
|
|
* @returns {boolean} True if debits equal credits
|
|
*/
|
|
validateBalance(lines) {
|
|
const totalDebits = lines.reduce((sum, line) => sum + parseFloat(line.debit_amount || 0), 0);
|
|
const totalCredits = lines.reduce((sum, line) => sum + parseFloat(line.credit_amount || 0), 0);
|
|
return totalDebits === totalCredits;
|
|
}
|
|
}
|
|
|
|
module.exports = TransactionLineRepository;
|
|
|
|
|