11402ba660
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
66 lines
2.2 KiB
Rust
66 lines
2.2 KiB
Rust
//! `periods` koleksiyonu (DATA_MODEL.md §3.4).
|
||
|
||
use mongodb::bson::{DateTime, Uuid};
|
||
use serde::{Deserialize, Serialize};
|
||
use ts_rs::TS;
|
||
|
||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, TS)]
|
||
#[serde(rename_all = "lowercase")]
|
||
#[ts(export)]
|
||
pub enum PeriodStatus {
|
||
/// Girişler yapılabilir. Hanede en fazla bir tane.
|
||
Open,
|
||
/// Salt okunur. Sahip yeniden açarsa `Correcting` olur.
|
||
Closed,
|
||
/// Düzeltmede: kapanmış dönem sahip tarafından düzeltme için açıldı.
|
||
/// Yazılabilir, ama "açık dönem" sayılmaz (yeni dönem açıkken de olabilir).
|
||
/// "Yeniden kapat" ile devir yeniden hesaplanır.
|
||
Correcting,
|
||
/// Geçmiş (arşiv): ekstre içe aktarımıyla yıl başından beri olan aylar için açılır.
|
||
/// Yalnızca kayıt tutar: plan/bütçe zorunlu değil, kapatılmaz, devir üretmez ve
|
||
/// devir zincirinde atlanır; bütçe önerilerini ("önceki dönem", "son 3 ay") besler.
|
||
Archived,
|
||
}
|
||
|
||
impl PeriodStatus {
|
||
pub fn as_str(self) -> &'static str {
|
||
match self {
|
||
PeriodStatus::Open => "open",
|
||
PeriodStatus::Closed => "closed",
|
||
PeriodStatus::Correcting => "correcting",
|
||
PeriodStatus::Archived => "archived",
|
||
}
|
||
}
|
||
|
||
/// Kayıt eklenip değiştirilebilir mi?
|
||
pub fn is_writable(self) -> bool {
|
||
self != PeriodStatus::Closed
|
||
}
|
||
}
|
||
|
||
#[derive(Debug, Clone, Deserialize)]
|
||
pub struct Period {
|
||
#[serde(rename = "_id")]
|
||
pub id: Uuid,
|
||
pub name: String,
|
||
/// `"YYYY-MM-DD"`, dahil
|
||
pub start_date: String,
|
||
/// `"YYYY-MM-DD"`, **hariç**
|
||
pub end_date: String,
|
||
pub status: PeriodStatus,
|
||
/// Kuruş
|
||
pub savings_goal: i64,
|
||
/// "Nasıl daha iyi yapabilirim?" (Markdown, Değerlendirme sayfası)
|
||
#[serde(default)]
|
||
pub reflection_md: Option<String>,
|
||
/// Kapanışta birikime aktarılan tutar (kuruş). Faz 8'de varlık hareketine dönüşecek.
|
||
#[serde(default)]
|
||
pub to_savings: Option<i64>,
|
||
#[serde(default)]
|
||
pub closed_at: Option<DateTime>,
|
||
/// Elle girilen ay başı toplam banka borcu (kuruş); yoksa son ölçümden (borç takibi)
|
||
#[serde(default)]
|
||
pub opening_debt: Option<i64>,
|
||
pub version: i32,
|
||
}
|