use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
#[derive(Debug, Serialize, Deserialize)]
pub struct EmployeeListRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub page_size: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub department_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub department_id_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub include_resigned: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fields: Option<Vec<String>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Employee {
#[serde(skip_serializing_if = "Option::is_none")]
pub employee_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub employee_number: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub en_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mobile: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gender: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub birthday: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub id_number: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<EmployeeStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
pub department_info: Option<EmployeeDepartment>,
#[serde(skip_serializing_if = "Option::is_none")]
pub job_info: Option<EmployeeJob>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hire_info: Option<EmployeeHire>,
#[serde(skip_serializing_if = "Option::is_none")]
pub personal_info: Option<EmployeePersonal>,
#[serde(skip_serializing_if = "Option::is_none")]
pub education_info: Option<Vec<EmployeeEducation>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub work_experience: Option<Vec<EmployeeWorkExperience>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub emergency_contact: Option<Vec<EmergencyContact>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bank_account: Option<Vec<BankAccount>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub social_security: Option<SocialSecurity>,
#[serde(skip_serializing_if = "Option::is_none")]
pub create_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub update_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub custom_fields: Option<HashMap<String, Value>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct EmployeeStatus {
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub effective_date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub resignation_date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub resignation_reason: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct EmployeeDepartment {
#[serde(skip_serializing_if = "Option::is_none")]
pub department_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub department_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parent_department_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub department_path: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct EmployeeJob {
#[serde(skip_serializing_if = "Option::is_none")]
pub job_title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub job_level: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub job_family: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supervisor_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub supervisor_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub employee_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub work_location: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct EmployeeHire {
#[serde(skip_serializing_if = "Option::is_none")]
pub hire_date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub probation_end_date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub contract_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub contract_start_date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub contract_end_date: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct EmployeePersonal {
#[serde(skip_serializing_if = "Option::is_none")]
pub nationality: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ethnicity: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub marital_status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub political_status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub registered_address: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub current_address: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub graduate_school: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub highest_education: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct EmployeeEducation {
#[serde(skip_serializing_if = "Option::is_none")]
pub school_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub major: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub degree: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub start_date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_date: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct EmployeeWorkExperience {
#[serde(skip_serializing_if = "Option::is_none")]
pub company_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub position: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub start_date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct EmergencyContact {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub relationship: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub phone: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub address: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct BankAccount {
#[serde(skip_serializing_if = "Option::is_none")]
pub bank_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub account_number: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub branch_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub account_type: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct SocialSecurity {
#[serde(skip_serializing_if = "Option::is_none")]
pub social_security_number: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub housing_fund_number: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub social_security_location: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct PageResponse<T> {
#[serde(skip_serializing_if = "Option::is_none")]
pub has_more: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub items: Option<Vec<T>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct EmployeeAttachmentRequest {
pub employee_id: String,
pub attachment_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id_type: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct EmployeeAttachment {
#[serde(skip_serializing_if = "Option::is_none")]
pub attachment_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_size: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub category: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub upload_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct AttachmentDownloadResponse {
#[serde(skip_serializing_if = "Option::is_none")]
pub file_content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_size: Option<i64>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct EhrResponse<T> {
#[serde(skip_serializing_if = "Option::is_none")]
pub data: Option<T>,
#[serde(skip_serializing_if = "Option::is_none")]
pub code: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub msg: Option<String>,
}