Skip to content

Theoretical Training Start (E3.2) ​

The E3.2 form announces the start of theoretical training (θεωρητική κατάρτιση) for a program beneficiary, optionally followed by practical training at a business.

Overview ​

PropertyValue
Document ClassesTheoreticalTraining, TheoreticalTrainingCorrection
Action CodesWebE32 (declaration), WebE32C (correction)
Declaration ModelTheoreticalTrainingDeclaration
SchemaE32_v1.xsd (root AnaggeliesE32 / AnaggeliaE32)

Basic Usage ​

php
use OxygenSuite\OxygenErgani\Enums\MaritalStatus;
use OxygenSuite\OxygenErgani\Enums\Sex;
use OxygenSuite\OxygenErgani\Http\Documents\Training\TheoreticalTraining;
use OxygenSuite\OxygenErgani\Models\Training\TheoreticalTrainingDeclaration;

$declaration = TheoreticalTrainingDeclaration::make()
    // Submission & training provider
    ->setBranchCode(0)
    ->setDypaServiceCode('101213')
    ->setLaborInspectionCode('24010')
    ->setProgramCode('34')
    ->setInvitationCode('002')
    ->setMainActivityCode('8559')
    ->setBranchActivityCode('8559')
    ->setMunicipalityCode('91860101')
    ->setEopepCode('1234567')
    ->setTrainingProviderCategory('001')
    // 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')
    // Theoretical training
    ->setTrainingPeriod('15/09/2025', '31/10/2025')
    ->setWeeklyHours(20.0)
    ->setScheduleDescription('ΔΕΥΤΕΡΑ - ΠΑΡΑΣΚΕΥΗ 17:00 - 21:00')
    ->setTheoryHours(80)
    ->setTheoryProgram('001')
    ->setTheoryDescription('ΨΗΦΙΑΚΕΣ ΔΕΞΙΟΤΗΤΕΣ')
    ->setStatusAtApplication('001')
    ->setStatusBeforeApplication('002')
    ->setUnemploymentMonths(2)
    ->setLegalRepresentativeAfm('078776545')
    ->withDefaults(); // send every remaining optional field as an empty string

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

All fields are sent

ERGANI expects every E3.2 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->sendTheoreticalTraining($declaration);

Practical Training ​

When the program continues with practical training at a business, fill in the practice fields:

php
$declaration
    ->setPracticeHours(200)
    ->setInsuranceDays(25)
    ->setDailyAllowance(30.00)                   // f_daily_apodoxes → "30,00"
    ->setPracticeCompanyName('ΕΠΙΧΕΙΡΗΣΗ Α.Ε.')
    ->setPracticeCompanyAfm('999999999')
    ->setPracticeCompanyTaxOffice('1101')
    ->setPracticeCompanyAme('1234567')
    ->setPracticeBranchAddress('ΕΡΜΟΥ 1')
    ->setPracticeBranchMunicipalityCode('91860101')
    ->setPracticeBranchPostalCode('10563')
    ->setPracticePeriod('01/11/2025', '31/12/2025');

Corrections (WebE32C) ​

php
use OxygenSuite\OxygenErgani\Http\Documents\Training\TheoreticalTrainingCorrection;

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

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

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

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_voucher_codestringNoProgram code
setInvitationCode()f_programma_voucherstringNoInvitation (call) code (3 digits).
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).
setEopepCode()f_eopep_codestringYesTraining provider code (EOPPEP).
setTrainingProviderCategory()f_edu_agency_categorystringYesTraining provider category code (3 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
setMinorBookNumber()f_mea_ar_vivliou_anilikoustringNoMinor book 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).
setVocationalTrainingSubject()f_mea_practical_educationstringNoVocational training subject code (3 digits).
setVoucherProgram()f_mea_voucherstring|boolNoWhether this is a voucher program.
setKayasCode()f_mea_kayasstringNoK.A.Y.A.S. code.
setTrainingStartDate()f_date_proslipsisDateTime|stringYesTheoretical training start date (DD/MM/YYYY)
setWeeklyHours()f_week_hoursfloatYesWeekly theoretical training hours.
setScheduleDescription()f_orariostringNoWorking / training days and hours as free text (max 200 characters).
setBreakDescription()f_orario_dialeimastringNoBreak hours as free text (max 200 characters).
setTheoryHours()f_total_hours_theoryint|stringNoTotal theoretical training hours in the program.
setPracticeHours()f_total_hours_practiceint|stringNoTotal practical training hours in the program.
setInsuranceDays()f_total_insurance_daysint|stringNoInsurance days for theoretical and practical training.
setDailyAllowance()f_daily_apodoxesfloatNoGross daily training allowance.
setTheoryProgram()f_theory_educationstringYesTheoretical training program code.
setTheoryDescription()f_theory_descriptionstringNoTheory description
setTheoryCode()f_theory_codestringNoTheory code
setTrainingEndDate()f_orismenou_ewsDateTime|stringYesTheoretical training end date (DD/MM/YYYY)
setStatusAtApplication()f_benefiter_status_afterstringYesBeneficiary status when applying to the program (3-digit code).
setUnemploymentMonths()f_months_unempoymentint|stringNoUnemployment months
setStatusBeforeApplication()f_benefiter_status_beforestringYesBeneficiary status one month before applying (3-digit code).
setComments()f_commentsstringNoComments
setPracticeCompanyName()f_practice_mer_eponimiastringNoPractice company name
setPracticeCompanyAfm()f_practice_mer_afmstringNoAFM of the practical training business
setPracticeCompanyTaxOffice()f_practice_mer_doystringNoTax office code of the practical training business
setPracticeCompanyAme()f_practice_mer_amestringNoEmployer registry number (AME) of the business.
setPracticeCompanyWithoutAme()f_practice_mer_no_amestring|boolNoWhether the business has no AME.
setPracticeBranchAddress()f_practice_mpa_addressstringNoPractice branch address
setPracticeBranchMunicipalityCode()f_practice_mpa_kallikratisstringNoPractice branch municipality code
setPracticeBranchPostalCode()f_practice_mpa_tkstringNoPractice branch postal code
setPracticeBranchPhone()f_practice_mpa_tilstringNoPractice branch phone
setPracticeBranchFax()f_practice_mpa_faxstringNoPractice branch fax
setPracticeBranchEmail()f_practice_mpa_emailstringNoPractice branch email
setPracticeDateFrom()f_practice_date_fromDateTime|stringNoPractical training start date (DD/MM/YYYY)
setPracticeDateTo()f_practice_date_toDateTime|stringNoPractical training end date (DD/MM/YYYY)
setLegalRepresentativeAfm()f_mek_afmstringYesAFM of the responsible provider / legal representative.
setFormFile()f_filestringNoSigned form (base64-encoded PDF).
setForeignFile()f_foreign_filestringNoThird-country national labour-market access documents (base64-encoded PDF).
setMinorFile()f_young_filestringNoMinor worker book (base64-encoded PDF).

Response Handling ​

php
$response = (new TheoreticalTraining())->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 TheoreticalTraining())->pdf(
    $response[0]->protocol,
    $response[0]->submissionDate
);

file_put_contents('theoretical-training.pdf', base64_decode($pdfBase64));

Testing with Factories ​

php
use OxygenSuite\OxygenErgani\Models\Training\TheoreticalTrainingDeclaration;

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

$declaration = TheoreticalTrainingDeclaration::factory()
    ->forBranch(1)
    ->withPractice(hours: 240, dailyAllowance: 32.50)
    ->asCorrection('ΑΚ123', '01/10/2026')
    ->make();

See Also ​

Released under the MIT License.