9 个版本
0.1.13 | 2024年4月2日 |
---|---|
0.1.12 | 2024年3月26日 |
0.1.6 | 2024年2月25日 |
#71 in #sdk
50 每月下载次数
135KB
2.5K SLoC
艾尔伽尼 Rust SDK
ergani
是一个 Rust SDK,用于与 艾尔伽尼 的 API 交互。
贡献者
艾尔伽尼 Rust SDK 是由 LOGIC (https://withlogic.co/) 开发的相关 艾尔伽尼 Python SDK 的 Rust 版本。
要求
Rust 1.76.0 或更高版本
安装
您可以在 crates.io 上找到 ergani
包,并通过您喜欢的包管理器进行安装。
cargo install ergani
使用方法
创建客户端
要创建新的艾尔伽尼客户端,您需要设置艾尔伽尼用户名、密码,以及可选的艾尔伽尼 API 基础 URL,默认为 https://trialeservices.yeka.gr/WebServicesAPI/api。
let ergani_username = env::var("ERGANI_USERNAME") ?;
let ergani_password = env::var("ERGANI_PASSWORD") ?;
let ergani_base_url = env::var("ERGANI_BASE_URL")
.unwrap_or("https://trialeservices.yeka.gr/WebServicesAPI/api".to_string());
let client = ErganiClient::new(ergani_username, ergani_password, Some(ergani_base_url)).await?;
如果您打算为多个公司实体使用此包,则需要为每个实体创建带有相应凭据的单独客户端实例。
以下示例中将使用上述的 ergani_client
。
工作卡
向艾尔伽尼提交工作卡记录,以申报员工的活动(到达,离开)。
async fn submit_work_card(company_work_cards: Vec<CompanyWorkCard>) -> Result<Vec<SubmissionResponse>>
示例
let work_card_movement_datetime =
NaiveDateTime::parse_from_str("2024-03-20 10:00", "%Y-%m-%d %H:%M")
.unwrap()
.and_utc();
let work_card_submission_date = NaiveDate::parse_from_str("2022-05-04", "%Y-%m-%d").unwrap();
let work_card = vec![CompanyWorkCardBuilder::builder()
.set_employer_tax_identification_number("123456789")
.set_business_branch_number(0)
.set_comments(Some("Σχόλια"))
.set_card_details(vec![WorkCardBuilder::builder()
.set_employee_tax_identification_number("123456789")
.set_employee_last_name("Last")
.set_employee_first_name("First")
.set_work_card_movement_type(WorkCardMovementType::Arrival)
.set_work_card_submission_date(work_card_submission_date)
.set_work_card_movement_datetime(work_card_movement_datetime)
.set_late_declaration_justification(Some(LateDeclarationJustificationType::PowerOutage))
.build()?])
.build()];
let response = ergani_client.submit_work_card(work_card).await?;
response.iter().for_each(|r| {
println!("{:?}", r);
});
注意:您可以根据上面的示例同时为多个公司分支的多个员工提交工作卡。
加班
向艾尔伽尼提交加班记录,以申报员工的加班。
async fn submit_overtime(company_overtimes: Vec<CompanyOvertime>) -> Result<Vec<SubmissionResponse>>
示例
let start_time = "2024-03-01T12:00:00Z".parse::<DateTime<Utc>>().unwrap();
let end_time = "2024-03-01T20:00:00Z".parse::<DateTime<Utc>>().unwrap();
let related_protocol_date = NaiveDate::from_ymd_opt(2024, 3, 1).unwrap();
let company_overtimes = vec![CompanyOvertimeBuilder::builder()
.set_business_branch_number(0)
.set_sepe_service_code("10000")
.set_business_primary_activity_code("1000")
.set_business_branch_activity_code("1010")
.set_kallikratis_municipal_code("10000000")
.set_legal_representative_tax_identification_number("123456789")
.set_employee_overtimes(vec![OvertimeBuilder::builder()
.set_employee_tax_identification_number("123456789")
.set_employee_social_security_number("00000000000")
.set_employee_last_name("Last")
.set_employee_first_name("First")
.set_overtime_date(NaiveDate::from_ymd_opt(2024, 3, 1).unwrap())
.set_overtime_start_time(start_time)
.set_overtime_end_time(end_time)
.set_overtime_cancellation(false)
.set_employee_profession_code("1234")
.set_overtime_justification(
OvertimeJustificationType::AccidentPreventionOrDamageRestoration,
)
.set_weekly_workdays_number(WeeklyWorkDays::Five)
.set_asee_approval(Some("ΑΣΕΕ"))
.build()
.unwrap()])
.set_related_protocol_id(Some("Αρ. Πρωτ. Σχετ."))
.set_related_protocol_date(Some(related_protocol_date))
.set_employer_organization(Some("Εργοδότης"))
.set_business_secondary_activity_code_1(Some("1011"))
.set_business_secondary_activity_code_2(Some("1012"))
.set_business_secondary_activity_code_3(Some("1013"))
.set_business_secondary_activity_code_4(Some("1014"))
.set_comments(Some("Σχόλια"))
.build()];
let response = ergani_client.submit_overtime(company_overtimes).await?;
注意:您可以根据上面的示例同时为多个公司分支的多个员工提交加班记录。
每日日程
向艾尔伽尼提交每日日程,以申报无固定日程的员工(例如轮班工人)的日程。
async fn submit_daily_schedule(company_daily_schedules: Vec<CompanyDailySchedule>) -> Result<Vec<SubmissionResponse>>
示例
let start_time = "2024-03-01T12:00:00Z".parse::<DateTime<Utc>>().unwrap();
let end_time = "2024-03-01T20:00:00Z".parse::<DateTime<Utc>>().unwrap();
let related_protocol_date = NaiveDate::from_ymd_opt(2024, 3, 1).unwrap();
let company_daily_schedules = vec![CompanyDailyScheduleBuilder::builder()
.set_business_branch_number(0)
.set_start_date(NaiveDate::from_ymd_opt(2024, 3, 1).unwrap())
.set_end_date(NaiveDate::from_ymd_opt(2024, 3, 2).unwrap())
.set_employee_schedules(vec![EmployeeDailyScheduleBuilder::builder()
.set_employee_tax_identification_number("123456789")
.set_employee_last_name("Last")
.set_employee_first_name("First")
.set_schedule_date(NaiveDate::from_ymd_opt(2024, 3, 3).unwrap())
.set_workday_details(vec![
WorkDayDetailsBuilder::builder()
.set_work_type(ScheduleWorkType::WorkFromHome)
.set_start_time(start_time)
.set_end_time(end_time)
.build()?,
WorkDayDetailsBuilder::builder()
.set_work_type(ScheduleWorkType::WorkFromOffice)
.set_start_time(start_time)
.set_end_time(end_time)
.build()?,
])
.build()])
.set_related_protocol_id(Some("1"))
.set_related_protocol_date(Some(related_protocol_date))
.set_comments(Some("Σχόλια"))
.build()];
let response = ergani_client
.submit_daily_schedule(company_daily_schedules)
.await?;
每周日程
向艾尔伽尼提交每周日程,以申报有固定日程的员工的日程。
async fn submit_weekly_schedule(company_weekly_schedules: Vec<CompanyWeeklySchedule>) -> Result<Vec<SubmissionResponse>>
示例
let start_time = "2024-03-01T12:00:00Z".parse::<DateTime<Utc>>().unwrap();
let end_time = "2024-03-01T20:00:00Z".parse::<DateTime<Utc>>().unwrap();
let related_protocol_date = NaiveDate::from_ymd_opt(2024, 3, 1).unwrap();
let schedule_date = NaiveDate::from_ymd_opt(2024, 3, 3).unwrap();
let company_weekly_schedules = vec![CompanyWeeklyScheduleBuilder::builder()
.set_business_branch_number(0)
.set_start_date(NaiveDate::from_ymd_opt(2024, 3, 1).unwrap())
.set_end_date(NaiveDate::from_ymd_opt(2024, 3, 2).unwrap())
.set_employee_schedules(vec![EmployeeWeeklyScheduleBuilder::builder()
.set_employee_tax_identification_number("123456789")
.set_employee_last_name("Last")
.set_employee_first_name("First")
.set_schedule_date(schedule_date)
.set_workday_details(vec![
WorkDayDetailsBuilder::builder()
.set_work_type(ScheduleWorkType::WorkFromHome)
.set_start_time(start_time)
.set_end_time(end_time)
.build()?,
WorkDayDetailsBuilder::builder()
.set_work_type(ScheduleWorkType::WorkFromOffice)
.set_start_time(start_time)
.set_end_time(end_time)
.build()?,
])
.build()])
.set_related_protocol_id(Some("1"))
.set_related_protocol_date(Some(related_protocol_date))
.build()];
let response = ergani_client
.submit_weekly_schedule(company_weekly_schedules)
.await?;
注意:您可以根据上面的示例同时为多个公司分支的多个员工提交每周日程。
完整的参考文档可在 https://docs.rs/ergani/latest/ergani/ 查找。
术语表
术语表可能有助于您查看艾尔伽尼 API 的官方文档(https://eservices.yeka.gr/(S(ayldvlj35eukgvmzrr055oe5))/Announcements.aspx?id=257)。
工作卡
原始 | 原始帮助文本(希腊语) | 已翻译 |
---|---|---|
f_afm_ergodoti |
A.Φ.Μ Εργοδότη (Για επαλήθευση) | 雇主税务识别号码 |
f_aa |
附件A/A | 商业分支编号 |
f_comments |
注释 | 注释 |
f_afm |
税务登记号(A.Φ.Μ.) | 雇员税务识别号码 |
f_eponymo |
姓氏 | 雇员姓氏 |
f_onoma |
名字 | 雇员名字 |
f_type |
运动类型 | 工作卡运动类型 |
f_reference_date |
参考日期 | 工作卡提交日期 |
f_date |
运动日期 | 工作卡运动日期时间 |
f_aitiologia |
原因代码(在延期的情况下) | 延期声明正当性 |
工作卡运动类型
原始API代码 | 原始帮助文本(希腊语) | 已翻译 |
---|---|---|
0 |
进入 | 到达 |
1 |
离开 | 出发 |
工作卡正当性
原始API代码 | 原始帮助文本(希腊语) | 已翻译 |
---|---|---|
001 |
电力/电信问题 | 停电 |
002 |
雇主系统问题不可用 | EMPLOYER_SYSTEMS_UNAVAILABLE |
003 |
与ERGANI系统连接问题 | ERGANI_SYSTEMS_UNAVAILABLE |
加班
原始 | 原始帮助文本(希腊语) | 已翻译 |
---|---|---|
f_aa |
附件A/A | 商业分支编号 |
f_rel_protocol |
相关表格编号 | related_protocol_id |
f_rel_date |
相关表格日期 | related_protocol_date |
f_ypiresia_sepe |
SEPE服务代码 | sepe_service_code |
f_ergodotikh_organwsh |
雇主组织 | employer_organization |
f_kad_kyria |
Κ.Α.Δ. - ΚΥΡΙΑ ΔΡΑΣΤΗΡΙΟΤΗΤΑ | 业务主要活动代码 |
f_kad_deyt_1 |
Κ.Α.Δ. - ΚΥΡΙΑ ΔΡΑΣΤΗΡΙΟΤΗΤΑ 1 | 业务次要活动代码1 |
f_kad_deyt_2 |
Κ.Α.Δ. - ΚΥΡΙΑ ΔΡΑΣΤΗΡΙΟΤΗΤΑ 2 | 业务次要活动代码2 |
f_kad_deyt_3 |
Κ.Α.Δ. - ΚΥΡΙΑ ΔΡΑΣΤΗΡΙΟΤΗΤΑ 3 | 业务次要活动代码3 |
f_kad_deyt_4 |
Κ.Α.Δ. - ΚΥΡΙΑ ΔΡΑΣΤΗΡΙΟΤΗΤΑ 4 | 业务次要活动代码4 |
f_kad_pararthmatos |
Κ.Α.Δ. ΠΑΡΑΡΤΗΜΑΤΟΣ | 业务分支活动代码 |
f_kallikratis_pararthmatos |
民主/当地社区 | kallikratis_municipal_code |
f_comments |
评论 | 注释 |
f_afm_proswpoy |
合法代表(税务登记号) | legal_representative_tax_identification_number |
f_afm |
税务登记号(A.Φ.Μ.) | 雇员税务识别号码 |
f_amka |
社会保险登记号(税务登记号) | employee_social_security_number |
f_eponymo |
姓氏 | 雇员姓氏 |
f_onoma |
名字 | 雇员名字 |
f_date |
超时日期 | overtime_date |
f_from |
超时开始时间(HH24:MM) | overtime_start_time |
f_to |
超时结束时间(HH24:MM) | overtime_end_time |
f_cancellation |
超时取消 | overtime_cancellation |
f_step |
特殊代码 | employee_profession_code |
f_reason |
原因代码 | overtime_justification |
f_weekdates |
每周工作日(5)哀悼(6)哀悼 | weekly_workdays_number |
f_asee |
ASSE批准 | asee_approval |
超时正当性
原始API代码 | 原始帮助文本(希腊语) | 翻译 |
---|---|---|
001 |
事故预防或损害恢复 | ACCIDENT_PREVENTION_OR_DAMAGE_RESTORATION |
002 |
紧急季节性工作 | URGENT_SEASONAL_TASKS |
003 |
异常工作量 | EXCEPTIONAL_WORKLOAD |
004 |
预防性或补充工作 | SUPPLEMENTARY_TASKS |
005 |
因突发原因或暴力导致丢失的时间 | LOST_HOURS_SUDDEN_CAUSES |
006 |
因官方假期导致丢失的时间 | LOST_HOURS_OFFICIAL_HOLIDAYS |
007 |
因天气条件导致丢失的时间 | LOST_HOURS_WEATHER_CONDITIONS |
008 |
一天的紧急关闭 | EMERGENCY_CLOSURE_DAY |
009 |
不能在工作时间完成的额外工作 | NON_WORKDAY_TASKS |
每日日程
原始 | 原始帮助文本(希腊语) | 已翻译 |
---|---|---|
f_aa_pararthmatos |
附件A/A | 商业分支编号 |
f_rel_protocol |
相关表格编号 | related_protocol_id |
f_rel_date |
相关表格日期 | related_protocol_date |
f_comments |
评论 | 注释 |
f_from_date |
开始日期 | start_date |
f_to_date |
结束日期 | end_date |
f_afm |
税务登记号(A.Φ.Μ.) | 雇员税务识别号码 |
f_eponymo |
姓氏 | 雇员姓氏 |
f_onoma |
名字 | 雇员名字 |
f_day |
日期 | schedule_date |
f_type |
分析记录类型 - 代码 | work_type |
f_from |
开始时间(HH24:MM) | start_time |
f_to |
结束时间(HH24:MM) | end_time |
每周日程
原始 | 原始帮助文本(希腊语) | 已翻译 |
---|---|---|
f_aa_pararthmatos |
附件A/A | 商业分支编号 |
f_rel_protocol |
相关表格编号 | related_protocol_id |
f_rel_date |
相关表格日期 | related_protocol_date |
f_comments |
评论 | 注释 |
f_from_date |
开始日期 | start_date |
f_to_date |
结束日期 | end_date |
f_afm |
税务登记号(A.Φ.Μ.) | 雇员税务识别号码 |
f_eponymo |
姓氏 | 雇员姓氏 |
f_onoma |
名字 | 雇员名字 |
f_date |
日期 | schedule_date |
f_type |
分析记录类型 - 代码 | work_type |
f_from |
开始时间(HH24:MM) | start_time |
f_to |
结束时间(HH24:MM) | end_time |
工作类型
原始API代码 | 原始帮助文本(希腊语) | 已翻译 |
---|---|---|
工作日 |
非工作 | 缺席 |
是 |
休息/休假 | 休息日 |
电话 |
远程工作 | 在家工作 |
工 |
工作 | 办公室工作 |
许可证
本项目采用MIT 许可证
依赖项
约10–22MB
约324K SLoC