datasynth_core/models/
payroll.rs1use chrono::NaiveDate;
7use rust_decimal::Decimal;
8use serde::{Deserialize, Serialize};
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
12#[serde(rename_all = "snake_case")]
13pub enum PayrollRunStatus {
14 #[default]
16 Draft,
17 Calculated,
19 Approved,
21 Posted,
23 Reversed,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize)]
29pub struct PayrollRun {
30 pub company_code: String,
32 pub payroll_id: String,
34 pub pay_period_start: NaiveDate,
36 pub pay_period_end: NaiveDate,
38 pub run_date: NaiveDate,
40 pub status: PayrollRunStatus,
42 #[serde(with = "rust_decimal::serde::str")]
44 pub total_gross: Decimal,
45 #[serde(with = "rust_decimal::serde::str")]
47 pub total_deductions: Decimal,
48 #[serde(with = "rust_decimal::serde::str")]
50 pub total_net: Decimal,
51 #[serde(with = "rust_decimal::serde::str")]
53 pub total_employer_cost: Decimal,
54 pub employee_count: u32,
56 pub currency: String,
58 pub posted_by: Option<String>,
60 pub approved_by: Option<String>,
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize)]
66pub struct PayrollLineItem {
67 pub payroll_id: String,
69 pub employee_id: String,
71 pub line_id: String,
73 #[serde(with = "rust_decimal::serde::str")]
75 pub gross_pay: Decimal,
76 #[serde(with = "rust_decimal::serde::str")]
78 pub base_salary: Decimal,
79 #[serde(with = "rust_decimal::serde::str")]
81 pub overtime_pay: Decimal,
82 #[serde(with = "rust_decimal::serde::str")]
84 pub bonus: Decimal,
85 #[serde(with = "rust_decimal::serde::str")]
87 pub tax_withholding: Decimal,
88 #[serde(with = "rust_decimal::serde::str")]
90 pub social_security: Decimal,
91 #[serde(with = "rust_decimal::serde::str")]
93 pub health_insurance: Decimal,
94 #[serde(with = "rust_decimal::serde::str")]
96 pub retirement_contribution: Decimal,
97 #[serde(with = "rust_decimal::serde::str")]
99 pub other_deductions: Decimal,
100 #[serde(with = "rust_decimal::serde::str")]
102 pub net_pay: Decimal,
103 pub hours_worked: f64,
105 pub overtime_hours: f64,
107 pub pay_date: NaiveDate,
109 pub cost_center: Option<String>,
111 pub department: Option<String>,
113}