#sdk #api #api-client #rust

ergani

Rust SDK 用于希腊政府艾尔伽尼API,用于员工工作流程

9 个版本

0.1.13 2024年4月2日
0.1.12 2024年3月26日
0.1.6 2024年2月25日

#71 in #sdk

50 每月下载次数

MIT 许可证

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