import { model, models, Schema, type InferSchemaType, type Model } from "mongoose"; /** * Kart/KMH dönem kaydı (Bölüm 6.8, `statements`). Tutarlar işlemlerden hesaplanır ve kart özeti * okunurken güncellenir (geriye dönük girilen işlem dönem borcunu doğru değiştirir); bu koleksiyon * raporlar ve mobil API için son hesaplanan değerleri tutar. */ const cardStatementSchema = new Schema( { householdId: { type: Schema.Types.ObjectId, required: true }, accountId: { type: Schema.Types.ObjectId, required: true }, kind: { type: String, enum: ["credit_card", "overdraft"], required: true }, /** "YYYY-MM-DD" (İstanbul), ikisi de dahil. */ periodStart: { type: String, required: true }, periodEnd: { type: String, required: true }, dueDate: { type: String, default: null }, /** Kesim günü sonundaki borç (pozitif). */ statementDebtMinor: { type: Number, default: 0 }, minimumPaymentMinor: { type: Number, default: 0 }, /** Kesimden sonra (bir sonraki kesime kadar) yapılan ödemeler. */ paidMinor: { type: Number, default: 0 }, /** Dönemdeki harcamalar (çıkışlar). */ spentMinor: { type: Number, default: 0 }, /** KMH: tahmini faiz. */ interestMinor: { type: Number, default: null }, computedAt: { type: Date, required: true }, }, { timestamps: true, collection: "statements" }, ); cardStatementSchema.index({ accountId: 1, periodEnd: 1 }, { unique: true }); cardStatementSchema.index({ householdId: 1, accountId: 1, periodEnd: -1 }); export type CardStatement = InferSchemaType; export const CardStatementModel: Model = (models.CardStatement as Model | undefined) ?? model("CardStatement", cardStatementSchema);