feat(import): Kakeibo çalışma kitabı için içe aktarma motoru ve servis

- Kredi Kartı / Maaş Hesabı sayfaları ayrıştırılır; ekstre toplamı ve
  bakiye zinciri kontrolü, taksit planı, iade = gelir, kart ödemesi /
  ATM / hesaplar arası = transfer, KMH ve ücretler = banka maliyeti
- Taslak parti (importBatches), hesap rolleri ve önerilen hesaplar,
  satır düzenleme (aynı açıklamalılara toplu), tek transaction'da işleme,
  parmak iziyle tekrar engeli ve toplu geri alma
- Migration 017-imports (geri alınabilir), denetim kayıtları

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-07 09:31:44 +03:00
parent c52e8f9976
commit ebcdf3f741
11 changed files with 2195 additions and 0 deletions
+19
View File
@@ -0,0 +1,19 @@
import { ImportBatchModel } from "@/models/import-batch";
import { TransactionModel } from "@/models/transaction";
import type { Migration } from "./types";
/** Ekstre içe aktarma (Faz 17): importBatches index'i ve işlemlerde tekrar engeli index'i. */
export const migration: Migration = {
name: "017-imports",
description: "içe aktarma partileri ve işlemlerde tekrar engeli (importKey) index'leri",
async up() {
await ImportBatchModel.createIndexes();
await TransactionModel.createIndexes();
},
async down(db) {
await db
.collection("transactions")
.dropIndex("householdId_1_importKey_1")
.catch(() => {});
},
};
+2
View File
@@ -16,6 +16,7 @@ import { migration as m013 } from "./013-stores-products";
import { migration as m014 } from "./014-product-prices";
import { migration as m015 } from "./015-shopping-lists";
import { migration as m016 } from "./016-kakeibo-groups";
import { migration as m017 } from "./017-imports";
import type { Migration } from "./types";
/** Sıralı migration listesi. Yeni migration: dosyayı ekle ve buraya sırayla ekle. */
@@ -36,6 +37,7 @@ export const MIGRATIONS: Migration[] = [
m014,
m015,
m016,
m017,
];
const COLLECTION = "migrations";