Skip to content

Community-Benefit Program Employment (E3.1) ​

The E3.1 form announces the employment of a beneficiary of a community-benefit program (κοινωφελούς χαρακτήρα), for example DYPA community work programs run by municipalities and public bodies.

Overview ​

PropertyValue
Document ClassesCommunityProgramEmployment, CommunityProgramEmploymentCorrection
Action CodesWebE31 (declaration), WebE31C (correction)
Declaration ModelCommunityProgramDeclaration
SchemaE31_v1.xsd (root AnaggeliesE31 / AnaggeliaE31)

Basic Usage ​

php
use OxygenSuite\OxygenErgani\Enums\EmploymentStatus;
use OxygenSuite\OxygenErgani\Enums\EmploymentType;
use OxygenSuite\OxygenErgani\Enums\MaritalStatus;
use OxygenSuite\OxygenErgani\Enums\Sex;
use OxygenSuite\OxygenErgani\Http\Documents\CommunityProgram\CommunityProgramEmployment;
use OxygenSuite\OxygenErgani\Models\CommunityProgram\CommunityProgramDeclaration;

$declaration = CommunityProgramDeclaration::make()
    // Submission & provider
    ->setBranchCode(0)
    ->setDypaServiceCode('101213')
    ->setLaborInspectionCode('24010')
    ->setProgramCode('363201-24')
    ->setEmployerOrganization('ΔΗΜΟΣ')
    ->setMainActivityCode('8411')
    ->setBranchActivityCode('8411')
    ->setMunicipalityCode('91860101')
    // Beneficiary
    ->setLastName('ΠΑΠΑΔΟΠΟΥΛΟΣ')
    ->setFirstName('ΓΕΩΡΓΙΟΣ')
    ->setFatherName('ΝΙΚΟΛΑΟΣ')
    ->setMotherName('ΜΑΡΙΑ')
    ->setSex(Sex::MALE)
    ->setBirthDate('08/09/1990')
    ->setNationality('048')
    ->setIdType('ΔΑΤ')
    ->setIdNumber('ΑΒ123456')
    ->setMaritalStatus(MaritalStatus::SINGLE)
    ->setNumberOfChildren(0)
    ->setAfm('123456789')
    ->setAmka('08099012345')
    ->setEducationLevel('5')
    // Placement
    ->setPlacementDate('15/09/2025')
    ->setPlacementTime('08:00')
    ->setScheduleDescription('ΔΕΥΤΕΡΑ - ΠΑΡΑΣΚΕΥΗ 08:00 - 16:00')
    ->setWeeklyHours('40')
    ->setScheduleAttached(false)
    ->setProgramSpecialtyCode('101ΥΕ16')
    ->setSpecialtyCode('962990')
    ->setExperienceYears(0)
    ->setGrossSalary(1000.00)
    ->setHourlyWage(10.00)
    ->setFirstEmployment(false)
    ->setEmploymentType(EmploymentType::FIXED_TERM)
    ->setFixedTermPeriod('15/09/2025', '14/05/2026')
    ->setEmploymentStatus(EmploymentStatus::FULL)
    ->setDypaReferral(true)
    ->setReplacement(false)
    ->setReceivesUnemploymentBenefit(false)
    // Sign-off
    ->setLegalRepresentativeAfm('078776545')
    ->setCertifierLastName('ΛΟΓΙΣΤΗΣ')
    ->setCertifierFirstName('ΜΑΡΙΑ')
    ->setCertifierCapacity('ΛΟΓΙΣΤΡΙΑ')
    ->setCertifierAddress('ΣΤΑΔΙΟΥ 10')
    ->setCertifierAfm('000000001')
    ->withDefaults(); // send every remaining optional field as an empty string

$response = (new CommunityProgramEmployment())->handle($declaration);

All fields are sent

ERGANI expects every E3.1 element to be present, even when empty. Call withDefaults() after setting your values to fill the remaining fields with empty strings.

Via Ergani Facade ​

php
use OxygenSuite\OxygenErgani\Ergani;

$ergani = new Ergani($accessToken);

$responses = $ergani->sendCommunityProgramEmployment($declaration);

Corrections (WebE31C) ​

Reference the original submission with setRelatedProtocol() / setRelatedDate() (fields f_protocol_sx / f_date_ypovolis_sx) and submit with the correction document:

php
use OxygenSuite\OxygenErgani\Http\Documents\CommunityProgram\CommunityProgramEmploymentCorrection;

$declaration
    ->setRelatedProtocol($original[0]->protocol)
    ->setRelatedDate($original[0]->submissionDate);

$response = (new CommunityProgramEmploymentCorrection())->handle($declaration);

// or
$responses = $ergani->sendCommunityProgramEmploymentCorrection($declaration);

Helpers ​

php
// Fixed-term period (f_orismenou_apo / f_orismenou_ews)
$declaration->setFixedTermPeriod('15/09/2025', '14/05/2026');

// Vocational training period (f_mea_education_date_from / _to)
$declaration->setTrainingPeriod('08/01/2024', '08/09/2024');

// Up to four foreign language codes (f_mea_fl1..f_mea_fl4)
$declaration->setForeignLanguages(['001', '002']);
$declaration->getForeignLanguages(); // ['001', '002']

// Replacement of a beneficiary of the same program
$declaration->replacesBeneficiary('123456789', '01010101010');

// Beneficiary receives DYPA unemployment benefit
$declaration->receivesUnemploymentBenefitFrom('101213');

Weekly hours are free text

In E3.1, f_week_hours is a free-text field (max 200 characters), so setWeeklyHours() accepts int|string and sends the value as-is (e.g. '40'). The E3.2 form uses a Greek decimal instead.

Field Reference ​

"Required" reflects the elements the XSD marks as non-nillable.

MethodAPI FieldTypeRequiredDescription
setBranchCode()f_aa_pararthmatosint|stringYesBranch sequence number (0 for HQ)
setRelatedProtocol()f_protocol_sxstringNoProtocol of the original declaration (corrections only).
setRelatedDate()f_date_ypovolis_sxDateTime|stringNoSubmission date of the original declaration (corrections only).
setDypaServiceCode()f_ypiresia_oaedstringYesDYPA service code.
setLaborInspectionCode()f_ypiresia_sepestringYesLabour inspectorate service code (5 digits).
setProgramCode()f_programma_benefitstringYesProgram code (e.g. 363201-24).
setEmployerOrganization()f_mer_organizationstringNoEmployer organization
setMainActivityCode()f_mer_stakod1stringYesMain activity code (KAD, 4 digits).
setSecondaryActivityCode1()f_mer_stakod2stringNoSecondary activity code1
setSecondaryActivityCode2()f_mer_stakod3stringNoSecondary activity code2
setSecondaryActivityCode3()f_mer_stakod4stringNoSecondary activity code3
setSecondaryActivityCode4()f_mer_stakod5stringNoSecondary activity code4
setBranchActivityCode()f_mpa_stakodstringYesActivity code (KAD) of the branch.
setMunicipalityCode()f_mpa_kallikratisstringYesKallikratis code of the branch (8 digits).
setLastName()f_mea_eponimostringYesLast name
setFirstName()f_mea_onomastringYesFirst name
setFatherLastName()f_mea_eponimo_paterastringNoFather last name
setFatherName()f_mea_onoma_paterastringYesFather name
setMotherLastName()f_mea_eponimo_miterasstringNoMother last name
setMotherName()f_mea_onoma_miterasstringYesMother name
setSex()f_mea_sexSex|string|intYes0=Male, 1=Female (or use Sex enum)
setBirthPlace()f_mea_birth_citystringNoBirth place
setBirthDate()f_mea_date_birthDateTime|stringYesBirth date (DD/MM/YYYY)
setNationality()f_mea_nationalitystringYesNationality code (3 digits, see ParameterLookup::NATIONALITY).
setIdType()f_mea_typos_taytotitasstringYesIdentity document type (see ParameterLookup::ID_TYPE).
setIdNumber()f_mea_ar_taytotitasstringYesIdentity document number
setIdIssuingAuthority()f_mea_ekdousastringNoId issuing authority
setIdIssueDate()f_mea_date_ekdosisDateTime|stringNoIdentity document issue date (DD/MM/YYYY)
setIdExpiryDate()f_mea_date_ekdosis_lixiDateTime|stringNoIdentity document expiry date (DD/MM/YYYY)
setResidencePermit()f_mea_res_permitstring|boolNoWhether the beneficiary holds a residence or work permit.
setResidencePermitType()f_mea_res_permit_typestringNoResidence permit type (see ParameterLookup::RESIDENCE_PERMIT).
setResidencePermitNumber()f_mea_res_permit_arstringNoResidence permit number
setResidencePermitExpiry()f_mea_res_permit_lixiDateTime|stringNoResidence permit expiry date (DD/MM/YYYY)
setMaritalStatus()f_mea_marital_statusMaritalStatus|string|intYes0=Single, 1=Married, 2=Divorced, 3=Widowed (or use MaritalStatus enum)
setNumberOfChildren()f_mea_ar_teknonint|stringYesNumber of children
setAfm()f_mea_afmstringYesBeneficiary tax ID (AFM)
setTaxOffice()f_mea_doystringNoTax office code (4 digits, see ParameterLookup::DOY).
setInsuranceAgency()f_mea_insurance_agencystringNoMain insurance agency code (see ParameterLookup::PRIMARY_INSURANCE).
setAmika()f_mea_am_ikastringNoe-EFKA insurance registry number.
setAmka()f_mea_amkastringYesBeneficiary social security number (AMKA)
setUnemploymentCardNumber()f_mea_code_anergiasstringNoUnemployment card number
setAddress()f_mea_dieythinsistringNoAddress
setResidenceMunicipalityCode()f_mea_kallikratisstringNoKallikratis code of the beneficiary residence (8 digits).
setPostalCode()f_mea_tkstringNoPostal code
setPhone()f_mea_tilstringNoPhone
setFax()f_mea_faxstringNoFax
setEmail()f_mea_emailstringNoE-mail
setEducationLevel()f_mea_epipedo_morfosisstringYesEducation level code (see ParameterLookup::EDUCATION_LEVEL).
setProfessionalTraining()f_mea_professional_educationstring|boolNoWhether the beneficiary has vocational training.
setTrainingSubject()f_mea_expertise_fieldstringNoTraining subject
setSubjectArea()f_mea_subject_areastringNoSubject area code (see ParameterLookup::SUBJECT_AREA).
setSubjectGroup()f_mea_subject_groupstringNoSubject group code (see ParameterLookup::SUBJECT_GROUP).
setEducationAgency()f_mea_education_agencystringNoTraining agency type code (see ParameterLookup::EDUCATION_AGENCY).
setTrainingDateFrom()f_mea_education_date_fromDateTime|stringNoVocational training start date (DD/MM/YYYY)
setTrainingDateTo()f_mea_education_date_toDateTime|stringNoVocational training end date (DD/MM/YYYY)
setTrainingDuration()f_mea_durationint|stringNoTraining duration in hours.
setTrainingYear()f_mea_education_yearint|stringNoYear the training was completed.
setForeignLanguage1()f_mea_fl1stringNoForeign language1
setForeignLanguage2()f_mea_fl2stringNoForeign language2
setForeignLanguage3()f_mea_fl3stringNoForeign language3
setForeignLanguage4()f_mea_fl4stringNoForeign language4
setComputerSkills()f_mea_pcstring|boolNo0=No, 1=Yes (or boolean)
setComputerSkillsOther()f_mea_pc_otherstringNoComputer skills other
setPlacementDate()f_date_proslipsisDateTime|stringYesPlacement date (DD/MM/YYYY)
setPlacementTime()f_date_time_proslipsisstringYesWork start time on the first day (HH:MM).
setScheduleDescription()f_orariostringNoWorking / training days and hours as free text (max 200 characters).
setWeeklyHours()f_week_hoursint|stringNoWeekly working hours as free text (e.g. "40").
setBreakDescription()f_orario_dialeimastringNoBreak hours as free text (max 200 characters).
setScheduleAttached()f_wres_externalstring|boolNoWhether the working days and hours are given in an attached file.
setProgramSpecialtyCode()f_eidikothta_programmastringYesSpecialty code of the public call (e.g. 101ΠΕ01).
setSpecialtyCode()f_eidikothtastringYesSpecialty code
setExperienceYears()f_proipiresiaintYesPrevious experience in years
setGrossSalary()f_apodoxesfloatYesTotal gross earnings (Greek float)
setHourlyWage()f_hour_apodoxesfloatYesHourly wage (Greek float)
setFirstEmployment()f_proti_ergasiastring|boolYesWhether this is the first employment as a salaried worker.
setEmploymentType()f_sxesh_apasxolhshsEmploymentType|string|intYes0=Indefinite, 1=Fixed-term, 2=Project (BORROWED not accepted)
setStartDate()f_orismenou_apoDateTime|stringNoFixed-term contract start date.
setEndDate()f_orismenou_ewsDateTime|stringNoFixed-term contract end date.
setEmploymentStatus()f_kathestos_apasxolhshsEmploymentStatus|string|intYes0=Full-time, 1=Part-time, 2=Rotational (ON_DEMAND not accepted)
setPlacementAgency()f_foreas_topothetisisstringNoAgency where the beneficiary is placed.
setDypaReferral()f_topothetisi_epistolistring|boolYesWhether the placement is made with a DYPA referral letter.
setReplacement()f_replace_programastring|boolNoWhether the placement replaces a beneficiary of the same program.
setReplacedAfm()f_replace_programa_afmstringNoAFM of the replaced beneficiary
setReplacedAmka()f_replace_programa_amkastringNoAMKA of the replaced beneficiary
setReceivesUnemploymentBenefit()f_epidoma_anergeiasstring|boolYes0=No, 1=Yes (or boolean)
setUnemploymentBenefitServiceCode()f_ypiresia_oaed_anergeiasstringNoDYPA service paying the unemployment benefit.
setComments()f_commentsstringNoComments
setLegalRepresentativeAfm()f_mek_afmstringYesAFM of the responsible provider / legal representative.
setCertifierLastName()f_eponymostringYesCertifier last name
setCertifierFirstName()f_onomastringYesCertifier first name
setCertifierCapacity()f_idiotitastringYesCapacity of the certifying person (e.g. accountant)
setCertifierAddress()f_dieythinsistringYesCertifier address
setCertifierAfm()f_afm_bebaiwnstringYesAFM of the certifying person
setFormFile()f_filestringNoSigned form (base64-encoded PDF).
setForeignFile()f_foreign_filestringNoThird-country national labour-market access documents (base64-encoded PDF).

Response Handling ​

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

foreach ($response as $result) {
    echo $result->id;              // Unique submission ID
    echo $result->protocol;        // Protocol number
    echo $result->submissionDate->format('d/m/Y H:i:s');
}

Retrieve PDF ​

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

file_put_contents('community-program.pdf', base64_decode($pdfBase64));

Testing with Factories ​

php
use OxygenSuite\OxygenErgani\Models\CommunityProgram\CommunityProgramDeclaration;

$declaration = CommunityProgramDeclaration::factory()->make();

$declaration = CommunityProgramDeclaration::factory()
    ->forBranch(1)
    ->indefinite()                               // no fixed-term dates
    ->partTime('20')
    ->replacing('123456789', '01010101010')
    ->withUnemploymentBenefit('101213')
    ->asCorrection('ΑΚ123', '01/10/2026')
    ->make();

See Also ​

Released under the MIT License.