Skip to content

Hiring (E3)

The E3 hiring declarations report new employee hirings, transfers, and lending arrangements to ERGANI. There are four types of E3 forms, each for a different hiring scenario.

Form Types

ClassActionFormDescriptionGuide
HiringNewWebE3NE3NNew employee hiringNew Hire
HiringModificationWebE3ME3MEmployee transfer from another companyTransfer
HiringDeletionWebE3DE3DEmployee lending FROM direct employerLending
HiringWithLendingWebE3PDE3PDEmployee hiring TO indirect employerBorrowed

When to Use Each Form

  • E3N (New Hire): Standard new hire - employee starting fresh employment
  • E3M (Transfer): Employee transferred from another company (business sale, merger, etc.)
  • E3D (Lending): You are lending your employee to another company (you are the direct employer)
  • E3PD (Borrowed): You are receiving a borrowed employee (you are the indirect employer)

Common Fields

All E3 declarations share a common base class (Declaration) with personal and employment fields. Each form type adds specific fields documented in their respective pages.

DateTime Support

All date fields accept both DateTime objects and strings. When a DateTime is passed, it's automatically formatted to DD/MM/YYYY:

php
$declaration->setBirthDate('15/01/1990');           // String
$declaration->setBirthDate(new DateTime('1990-01-15')); // DateTime

Branch/Location

MethodAPI FieldTypeRequiredDescription
setBranchCode()f_aa_pararthmatosintYesBranch code (0 = main)
setRelatedProtocol()f_rel_protocolstringNoRelated submission protocol
setRelatedDate()f_rel_datestringNoRelated submission date (DD/MM/YYYY)
setLaborInspectionServiceCode()f_ypiresia_sepestringYes5-digit SEPE code
setDypaServiceCode()f_ypiresia_oaedstringYes6-digit DYPA code
setBranchActivityCode()f_kad_pararthmatosstringNo4-digit KAD code
setMunicipalityCode()f_kallikratis_pararthmatosstringNo8-digit Kallikratis code

Personal Information

MethodAPI FieldTypeRequiredDescription
setLastName()f_eponymostringYesLast name (max 50 chars)
setFirstName()f_onomastringYesFirst name (max 30 chars)
setFatherName()f_onoma_patrosstringYesFather's name (max 30 chars)
setMotherName()f_onoma_mitrosstringYesMother's name (max 30 chars)
setBirthDate()f_birthdatestringYesBirth date (DD/MM/YYYY)
setSex()f_sexSexYesSex (0=Male, 1=Female)
setMaritalStatus()f_marital_statusMaritalStatusNoMarital status
setNumberOfChildren()f_arithmos_teknonintNoNumber of children

Identity/Nationality

MethodAPI FieldTypeRequiredDescription
setNationality()f_yphkoothtastringYes3-digit nationality code
setIdType()f_typos_taytothtasstringYesID type code (e.g., ΑΤ)
setIdNumber()f_ar_taytothtasstringYesID number (max 20 chars)
setIdIssuingAuthority()f_ekdousa_arxhstringNoIssuing authority (max 50 chars)
setIdIssueDate()f_date_ekdosisstringNoIssue date (DD/MM/YYYY)
setIdExpiryDate()f_date_ekdosis_lixistringNoExpiry date (DD/MM/YYYY)

Foreign Worker Permits

For third-country nationals with direct labor market access:

MethodAPI FieldTypeRequiredDescription
setResPermitDirectAccess()f_res_permit_instboolNoHas direct access permit
setResPermitDirectAccessType()f_res_permit_inst_typestringCond.Permit type code
setResPermitDirectAccessNumber()f_res_permit_inst_arstringCond.Permit number
setResPermitDirectAccessExpiry()f_res_permit_inst_lixistringCond.Expiry date

For permits requiring additional approval:

MethodAPI FieldTypeRequiredDescription
setResPermitApproval()f_res_permit_apboolNoHas approval permit
setResPermitApprovalType()f_res_permit_ap_typestringCond.Permit type code
setResPermitApprovalNumber()f_res_permit_ap_arstringCond.Permit number
setResPermitApprovalExpiry()f_res_permit_ap_lixistringCond.Expiry date

For seasonal work visas:

MethodAPI FieldTypeRequiredDescription
setSeasonalWorkVisa()f_res_permit_visaboolNoHas seasonal visa
setSeasonalWorkVisaNumber()f_res_permit_visa_arstringCond.Visa number
setSeasonalWorkVisaFrom()f_res_permit_visa_fromstringCond.Validity start
setSeasonalWorkVisaTo()f_res_permit_visa_tostringCond.Validity end

Tax/Insurance IDs

MethodAPI FieldTypeRequiredDescription
setAfm()f_afmstringYes9-digit Tax ID (AFM)
setTaxOffice()f_doystringNo4-digit Tax Office code
setAmika()f_amikastringNoIKA insurance number
setAmka()f_amkastringYes11-digit Social Security Number
setUnemploymentCardNumber()f_code_anergiasstringNoUnemployment card number
setMinorWorkBookNumber()f_ar_vivliou_anilikoustringCond.Minor's work booklet (if under 18)
setEducationLevel()f_epipedo_morfosisstringNoEducation level code

Employment Details

MethodAPI FieldTypeRequiredDescription
setStartTime()f_proslipsitimestringYesWork start time (HH:MM)
setEndTime()f_apoxwrisitimestringYesWork end time (HH:MM)
setWeeklyHours()f_week_hoursfloatYesWeekly hours (e.g., 40.0)
setSpecialtyCode()f_eidikothtastringYesSpecialty/occupation code
setSpecialtyDescription()f_eidikothta_analstringNoDetailed specialty description
setEmploymentStatus()f_kathestosapasxolisisEmploymentStatusYesFull/Part-time/Rotational/On-demand
setWorkerType()f_xaraktirismosWorkerTypeYesWorker (0) or Employee (1)
setResponsiblePosition()f_responsible_positionResponsiblePositionNoManagerial position

Work Organization

MethodAPI FieldTypeRequiredDescription
setWorkingTimeDigitalOrganization()f_working_time_digital_organizationboolNoDigital time tracking
setFullEmploymentHours()f_full_employment_hoursfloatNoFull employment hours
setWeekDays()f_week_daysWeekDaysNo5 or 6 day week
setFlexibleArrivalMinutes()f_euelikto_wrario_minutesintNoFlexible arrival minutes
setWorkingCard()f_working_cardboolNoWork card required
setBreakMinutes()f_dialeimma_minutesintNoBreak duration
setBreakWithinSchedule()f_dialeimma_entos_wrariouboolNoBreak within schedule

Work Location

MethodAPI FieldTypeRequiredDescription
setWorkLocation()f_topos_ergasiasWorkLocationNo0=Branch, 1=Other
setWorkLocationComment()f_topos_ergasias_commentstringCond.Location details

Unpredictable Schedule

MethodAPI FieldTypeRequiredDescription
setUnpredictableSchedule()f_mh_provlepsimo_programmaboolNoOn-demand schedule
setReferenceDaysHours()f_paraggelia_hmeres_hoursstringCond.Reference days/hours
setMinNotificationPeriod()f_paraggelia_min_notificationstringCond.Minimum notice period
setAssignmentCancellationDeadline()f_paraggelia_notesstringCond.Cancellation deadline

Files

MethodAPI FieldTypeRequiredDescription
setComments()f_commentsstringNoComments (max 100 chars)
setForeignWorkerFile()f_foreign_filestringCond.Base64 PDF for foreign workers
setMinorWorkerFile()f_young_filestringCond.Base64 PDF for minors

Common Enums

Sex

CaseValueEnglishGreek
MALE0MaleΆνδρας
FEMALE1FemaleΓυναίκα

EmploymentType

CaseValueEnglishGreek
INDEFINITE0Indefinite termΑορίστου χρόνου
FIXED_TERM1Fixed termΟρισμένου χρόνου
PROJECT2Project-basedΈργου
BORROWED3Borrowed employeeΔανειζόμενος

EmploymentStatus

CaseValueEnglishGreek
FULL0Full-timeΠλήρης απασχόληση
PARTIAL1Part-timeΜερική απασχόληση
ROTATION2RotationalΕκ περιτροπής απασχόληση
ON_DEMAND3On-demandΔιαλείπουσα απασχόληση

WorkerType

CaseValueEnglishGreek
WORKER0WorkerΕργάτης
EMPLOYEE1EmployeeΥπάλληλος

MaritalStatus

CaseValueEnglishGreek
SINGLE0SingleΆγαμος
MARRIED1MarriedΈγγαμος
DIVORCED2DivorcedΔιαζευγμένος
WIDOWED3WidowedΧήρος

Response Handling

All E3 documents return an array of SubmissionResponse objects:

php
$response = (new HiringNew())->handle($declaration);

foreach ($response as $result) {
    echo $result->id;              // Unique submission ID
    echo $result->protocol;        // Protocol number (e.g., 'Ε3Ν123')
    echo $result->submissionDate->format('d/m/Y H:i:s');
}

Retrieve PDF

After a successful submission, retrieve the official PDF document:

php
$pdfBase64 = (new HiringNew())->pdf(
    $response[0]->protocol,
    $response[0]->submissionDate
);

// Save to file
file_put_contents('hiring.pdf', base64_decode($pdfBase64));

Multiple Declarations

Submit multiple declarations in a single API call:

php
$declarations = [
    NewDeclaration::make()->setLastName('ΠΑΠΑΔΟΠΟΥΛΟΣ')/* ... */,
    NewDeclaration::make()->setLastName('ΓΕΩΡΓΙΟΥ')/* ... */,
];

$response = (new HiringNew())->handle($declarations);

Best Practices

1. Use Enums for Type Safety

php
// Good
->setSex(Sex::MALE)
->setEmploymentType(EmploymentType::INDEFINITE)
->setEmploymentStatus(EmploymentStatus::FULL)

// Avoid
->setSex(0)

2. Handle File Attachments

php
$pdfContent = file_get_contents('/path/to/document.pdf');
$declaration->setForeignWorkerFile(base64_encode($pdfContent));

3. Store Protocol Numbers

php
foreach ($response as $result) {
    $this->storeHiringRecord([
        'employee_afm' => $declaration->getAfm(),
        'protocol' => $result->protocol,
        'submission_date' => $result->submissionDate,
    ]);
}

See Also

Released under the MIT License.