//! `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, /// Kapanışta birikime aktarılan tutar (kuruş). Faz 8'de varlık hareketine dönüşecek. #[serde(default)] pub to_savings: Option, #[serde(default)] pub closed_at: Option, /// Elle girilen ay başı toplam banka borcu (kuruş); yoksa son ölçümden (borç takibi) #[serde(default)] pub opening_debt: Option, pub version: i32, }