Ödemeler ve transaction yönetimi. Payment CRUD, PaymentTransaction, durum (ÖDENDİ/BEKLIYOR/GECİKMİŞ/ATLANDI). Use when working with payments, transactions, or BR-01/BR-04/BR-05 in Money Expo.
Ödemeler ve transaction yönetimi için Money Expo domain uzmanı.
| Kural | Uygulama |
|---|---|
| BR-01 | (payment_id, period_key) UNIQUE constraint |
| BR-04 | isSkipped = true olanlar istatistik dışı |
| BR-05 | Arşivlenen ödemeler için yeni transaction oluşturma |
function getTransactionStatus(transaction: PaymentTransaction): Status {
const today = format(new Date(), 'yyyy-MM-dd');
if (transaction.isSkipped) return 'ATLANDI';
if (transaction.isPaid) return 'ODENDI';
if (transaction.dueDate < today) return 'GECIKMIS';
return 'BEKLIYOR';
}
async function calculateMonthlyEstimate(db: DrizzleDB, periodKey: string) {
const payments = await db.select()
.from(schema.payments)
.where(eq(schema.payments.status, 'active'));
let total = 0;
for (const payment of payments) {
if (payment.type === 'fixed') {
total += payment.defaultAmount;
} else {
const installments = await db.select()
.from(schema.installmentPlans)
.where(and(
eq(schema.installmentPlans.periodKey, periodKey),
eq(schema.installments.linkedPaymentId, payment.id)
));
total += installments.reduce((sum, i) => sum + i.amount, 0);
}
}
return total;
}