use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Serialize, Deserialize)]
pub struct PageResponse<T> {
pub items: Vec<T>,
pub has_more: bool,
pub page_token: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Clone, Default)]
pub struct I18nText {
pub zh_cn: Option<String>,
pub en_us: Option<String>,
pub ja_jp: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct PaymentDetailListRequest {
pub payment_activity_id: String,
pub page_size: Option<u32>,
pub page_token: Option<String>,
pub employee_id: Option<String>,
pub user_id_type: Option<String>,
pub department_id_type: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct PaymentDetailQueryRequest {
pub payment_activity_id: String,
pub employee_ids: Vec<String>,
pub user_id_type: Option<String>,
pub fields: Option<Vec<String>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct PaymentDetail {
pub employee_id: String,
pub employee_name: Option<I18nText>,
pub employee_number: Option<String>,
pub department_id: Option<String>,
pub department_name: Option<I18nText>,
pub job_id: Option<String>,
pub job_name: Option<I18nText>,
pub payment_items: Vec<PaymentItem>,
pub total_amount: Option<String>,
pub currency: Option<String>,
pub payment_status: Option<String>,
pub payment_time: Option<String>,
pub remark: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct PaymentItem {
pub acct_item_id: String,
pub acct_item_name: Option<I18nText>,
pub acct_item_type: Option<String>,
pub amount: String,
pub currency: Option<String>,
pub formula: Option<String>,
pub remark: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct PaymentActivityListRequest {
pub page_size: Option<u32>,
pub page_token: Option<String>,
pub status: Option<String>,
pub paygroup_id: Option<String>,
pub period_start: Option<String>,
pub period_end: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct PaymentActivityArchiveRequest {
pub payment_activity_id: String,
pub archive_reason: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct PaymentActivity {
pub payment_activity_id: String,
pub activity_name: I18nText,
pub status: String,
pub paygroup_id: String,
pub paygroup_name: Option<I18nText>,
pub period_start: String,
pub period_end: String,
pub planned_payment_date: Option<String>,
pub actual_payment_date: Option<String>,
pub employee_count: Option<u32>,
pub total_amount: Option<String>,
pub currency: Option<String>,
pub created_time: Option<String>,
pub updated_time: Option<String>,
pub creator_id: Option<String>,
pub remark: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct DatasourceRecordSaveRequest {
pub datasource_id: String,
pub employee_id: String,
pub user_id_type: Option<String>,
pub records: Vec<DatasourceRecord>,
pub payment_period: String,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct DatasourceRecordQueryRequest {
pub datasource_id: String,
pub employee_ids: Vec<String>,
pub user_id_type: Option<String>,
pub payment_period: String,
pub page_size: Option<u32>,
pub page_token: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DatasourceRecord {
pub record_id: Option<String>,
pub employee_id: String,
pub field_values: HashMap<String, serde_json::Value>,
pub payment_period: String,
pub created_time: Option<String>,
pub updated_time: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct DatasourceListRequest {
pub page_size: Option<u32>,
pub page_token: Option<String>,
pub status: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Datasource {
pub datasource_id: String,
pub datasource_name: I18nText,
pub datasource_type: String,
pub status: String,
pub field_configs: Vec<DatasourceFieldConfig>,
pub created_time: Option<String>,
pub updated_time: Option<String>,
pub description: Option<I18nText>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DatasourceFieldConfig {
pub field_id: String,
pub field_name: I18nText,
pub field_type: String,
pub required: bool,
pub default_value: Option<serde_json::Value>,
pub description: Option<I18nText>,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct AcctItemListRequest {
pub page_size: Option<u32>,
pub page_token: Option<String>,
pub item_type: Option<String>,
pub paygroup_id: Option<String>,
pub status: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct AcctItem {
pub acct_item_id: String,
pub item_name: I18nText,
pub item_type: String,
pub category: Option<String>,
pub calculation_method: Option<String>,
pub formula: Option<String>,
pub tax_related: bool,
pub social_security_related: bool,
pub display_order: Option<u32>,
pub status: String,
pub created_time: Option<String>,
pub updated_time: Option<String>,
pub description: Option<I18nText>,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct CostAllocationReportListRequest {
pub start_date: String,
pub end_date: String,
pub cost_center_id: Option<String>,
pub department_id: Option<String>,
pub page_size: Option<u32>,
pub page_token: Option<String>,
pub report_type: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct CostAllocationReport {
pub report_id: String,
pub cost_center_id: String,
pub cost_center_name: Option<I18nText>,
pub department_id: Option<String>,
pub department_name: Option<I18nText>,
pub employee_count: u32,
pub total_cost: String,
pub currency: String,
pub allocation_details: Vec<AllocationDetail>,
pub period_start: String,
pub period_end: String,
pub generated_time: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct AllocationDetail {
pub acct_item_id: String,
pub acct_item_name: Option<I18nText>,
pub allocated_amount: String,
pub allocation_ratio: Option<f64>,
pub employee_count: u32,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct CostAllocationPlanListRequest {
pub page_size: Option<u32>,
pub page_token: Option<String>,
pub status: Option<String>,
pub plan_type: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct CostAllocationPlan {
pub plan_id: String,
pub plan_name: I18nText,
pub plan_type: String,
pub status: String,
pub allocation_rules: Vec<AllocationRule>,
pub effective_date: Option<String>,
pub expiry_date: Option<String>,
pub created_time: Option<String>,
pub updated_time: Option<String>,
pub creator_id: Option<String>,
pub description: Option<I18nText>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct AllocationRule {
pub rule_id: String,
pub rule_name: I18nText,
pub allocation_dimension: String,
pub allocation_ratio: f64,
pub target_cost_center_id: String,
pub target_cost_center_name: Option<I18nText>,
pub conditions: Option<Vec<RuleCondition>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct RuleCondition {
pub field: String,
pub operator: String,
pub value: serde_json::Value,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct PaygroupListRequest {
pub page_size: Option<u32>,
pub page_token: Option<String>,
pub status: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Paygroup {
pub paygroup_id: String,
pub paygroup_name: I18nText,
pub paygroup_type: String,
pub status: String,
pub payment_cycle_type: String,
pub payment_day_setting: Option<PaymentDaySetting>,
pub employee_count: Option<u32>,
pub created_time: Option<String>,
pub updated_time: Option<String>,
pub description: Option<I18nText>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct PaymentDaySetting {
pub payment_day_type: String,
pub payment_day: Option<u32>,
pub holiday_adjustment: bool,
pub adjustment_rule: Option<String>,
}