Document schemas · Income & Employment
Income & Employment
Prebuilt extractors for French income and employment documents: employment and secondment contracts, employer and social-body certificates, and personal and professional income tax returns. Each schema below previews the structured document_part the extraction will return. Any document type below can also be processed with a custom extractor returning your own schema.
The part_type values and field layouts on this page describe Holofin's upcoming prebuilt extractors for these document types. They are not yet emitted by workflow runs.
If your workflow processes one of these document types with a custom extractor, each extracted part carries that extractor's own part_type and schema, which may differ from this page.
The authoritative schema is the one defined on the extractor in your workflow configuration.
Employment Contract (Contrat de travail)
fr_contrat_travailPreviewIncome & EmploymentThe Contrat de travail is the French employment agreement between an employer and an employee. The extraction captures the parties, the nature of the contract, working time, and the agreed remuneration for income and employment verification.
Document structure
The Contrat de travail contains:
- Employer block: Legal name, SIRET, and postal address
- Employee block: Identity of the hired person
- Contract terms: Type, start and end dates, trial period, and working time
- Remuneration: Agreed gross salary and its period
- Governing rules: Applicable collective agreement and classification
Data structure
Within the document_parts array, the fr_contrat_travail data object contains:
{
"employer": {
"name": "Ateliers Vernet SAS",
"siret": "40123456700018",
"address": "12 rue de la Fontaine, 69003 Lyon"
},
"employee": {
"last_name": "MARTIN",
"first_names": "Camille"
},
"job_title": "Chargée de clientèle",
"classification": "Niveau IV, échelon 2",
"contract_type": "cdi",
"start_date": "2024-09-01",
"end_date": null,
"trial_period_months": 3,
"gross_salary": {
"amount": 2450.0,
"period": "monthly"
},
"weekly_hours": 35,
"collective_agreement": "Convention collective Syntec",
"work_location": "69003 Lyon"
}Field reference
| Field | Type | Description |
|---|---|---|
| employer | object | Employer identification block |
| employer.name | string | Employer legal name |
| employer.siret | string | null | Employer 14-digit SIRET establishment number |
| employer.address | string | null | Employer postal address |
| employee | object | Employee identity block |
| employee.last_name | string | Employee surname |
| employee.first_names | string | Employee given name(s) |
| job_title | string | Job title or position held |
| classification | string | null | Collective-agreement classification (level, coefficient, échelon) |
| contract_type | string | Contract type: cdi, cdd, or interim |
| start_date | date | Contract start date (YYYY-MM-DD) |
| end_date | date | null | Contract end date for fixed-term contracts; null for open-ended (cdi) |
| trial_period_months | number | null | Trial period duration in months, when stated |
| gross_salary | object | Agreed gross remuneration |
| gross_salary.amount | number | Gross salary amount |
| gross_salary.period | string | Salary period: monthly or annual |
| weekly_hours | number | Contractual weekly working hours |
| collective_agreement | string | null | Applicable collective agreement (convention collective) |
| work_location | string | Place of work |
Validation
Extraction results include validation_status and validation_codes reflecting coherence, completeness and authenticity controls. Anomalies are surfaced as graded alerts for human review.
Secondment Contract (Contrat de détachement)
fr_contrat_detachementPreviewIncome & EmploymentThe Contrat de détachement documents the temporary posting of an employee by an origin employer to a host entity, often abroad. The extraction captures both parties, the posting terms, and whether the home social security scheme is maintained.
Document structure
The Contrat de détachement contains:
- Origin employer: The posting company, its name and SIRET
- Employee block: Identity of the posted person
- Host details: Receiving entity and country of assignment
- Posting terms: Job title, start and end dates, and duration
- Coverage: Remuneration and whether the home social scheme is maintained
Data structure
Within the document_parts array, the fr_contrat_detachement data object contains:
{
"origin_employer": {
"name": "Groupe Belfort Ingénierie SA",
"siret": "51234567800027"
},
"employee": {
"last_name": "MARTIN",
"first_names": "Camille"
},
"host_entity": "Belfort Engineering GmbH",
"host_country": "DE",
"job_title": "Ingénieure procédés",
"start_date": "2025-01-06",
"end_date": "2025-12-31",
"duration_months": 12,
"remuneration": {
"amount": 3800.0,
"period": "monthly"
},
"social_scheme_maintained": true,
"work_location": "Stuttgart, Germany"
}Field reference
| Field | Type | Description |
|---|---|---|
| origin_employer | object | Posting (home) employer block |
| origin_employer.name | string | Origin employer legal name |
| origin_employer.siret | string | null | Origin employer 14-digit SIRET establishment number |
| employee | object | Posted employee identity block |
| employee.last_name | string | Employee surname |
| employee.first_names | string | Employee given name(s) |
| host_entity | string | Receiving entity hosting the posted employee |
| host_country | string | Country of assignment (ISO 3166 code or name) |
| job_title | string | Job title or position held during the posting |
| start_date | date | Posting start date (YYYY-MM-DD) |
| end_date | date | null | Posting end date (YYYY-MM-DD) |
| duration_months | number | null | Posting duration in months |
| remuneration | object | Remuneration during the posting |
| remuneration.amount | number | Remuneration amount |
| remuneration.period | string | Remuneration period: monthly or annual |
| social_scheme_maintained | boolean | Whether the home country social security scheme is maintained during the posting |
| work_location | string | Place of work at the host location |
Validation
Extraction results include validation_status and validation_codes reflecting coherence, completeness and authenticity controls. Anomalies are surfaced as graded alerts for human review.
Employment Certificate (Attestation de travail)
fr_attestation_travailPreviewIncome & EmploymentThe Attestation de travail is a short employer-issued certificate confirming that a person is or was employed. The extraction captures the employer, the employee, the role, and the signatory who issued the certificate.
Document structure
The Attestation de travail contains:
- Employer block: Legal name, SIRET, and postal address
- Employee block: Identity of the certified person
- Employment facts: Job title, hire date, and contract type
- Issuance: Date, signatory, and presence of a company stamp
Data structure
Within the document_parts array, the fr_attestation_travail data object contains:
{
"employer": {
"name": "Ateliers Vernet SAS",
"siret": "40123456700018",
"address": "12 rue de la Fontaine, 69003 Lyon"
},
"employee": {
"last_name": "MARTIN",
"first_names": "Camille"
},
"job_title": "Chargée de clientèle",
"hire_date": "2024-09-01",
"contract_type": "cdi",
"issue_date": "2025-06-15",
"signatory": {
"name": "DUBOIS Léa",
"role": "Directrice des ressources humaines"
},
"stamp_present": true
}Field reference
| Field | Type | Description |
|---|---|---|
| employer | object | Employer identification block |
| employer.name | string | Employer legal name |
| employer.siret | string | null | Employer 14-digit SIRET establishment number |
| employer.address | string | null | Employer postal address |
| employee | object | Employee identity block |
| employee.last_name | string | Employee surname |
| employee.first_names | string | Employee given name(s) |
| job_title | string | Job title or position held |
| hire_date | date | Date the employee was hired (YYYY-MM-DD) |
| contract_type | string | null | Contract type as stated on the certificate (e.g. cdi, cdd) |
| issue_date | date | Date the certificate was issued (YYYY-MM-DD) |
| signatory | object | null | Person who signed the certificate |
| signatory.name | string | Signatory name |
| signatory.role | string | null | Signatory role or function |
| stamp_present | boolean | Whether a company stamp is present on the certificate |
Validation
Extraction results include validation_status and validation_codes reflecting coherence, completeness and authenticity controls. Anomalies are surfaced as graded alerts for human review.
France Travail Payment Statement (Attestation de paiement)
fr_attestation_france_travailPreviewIncome & EmploymentThe Attestation de paiement issued by France Travail confirms unemployment allowance payments to a beneficiary for a given period. The extraction captures the beneficiary, the period, and the gross and net amounts paid.
Document structure
The France Travail Attestation de paiement contains:
- Beneficiary block: Identity and identifier number
- Period: Month and year covered by the payment
- Allowance: Type of allowance and number of days paid
- Amounts: Gross and net amounts and the payment date
Data structure
Within the document_parts array, the fr_attestation_france_travail data object contains:
{
"beneficiary": {
"last_name": "MARTIN",
"first_names": "Camille"
},
"identifier_number": "1234567A",
"period": {
"month": 5,
"year": 2025
},
"allowance_type": "ARE",
"days_paid": 31,
"gross_amount": 1512.30,
"net_amount": 1398.75,
"payment_date": "2025-06-05",
"issue_date": "2025-06-06"
}Field reference
| Field | Type | Description |
|---|---|---|
| beneficiary | object | Beneficiary identity block |
| beneficiary.last_name | string | Beneficiary surname |
| beneficiary.first_names | string | Beneficiary given name(s) |
| identifier_number | string | null | France Travail beneficiary identifier number |
| period | object | Payment period |
| period.month | number | Month covered (1-12) |
| period.year | number | Year covered |
| allowance_type | string | null | Allowance type (e.g. ARE, ASS) |
| days_paid | number | Number of days paid in the period |
| gross_amount | number | Gross amount paid for the period |
| net_amount | number | Net amount paid for the period |
| payment_date | date | null | Date the payment was made (YYYY-MM-DD) |
| issue_date | date | Date the statement was issued (YYYY-MM-DD) |
Validation
Extraction results include validation_status and validation_codes reflecting coherence, completeness and authenticity controls. Anomalies are surfaced as graded alerts for human review.
Pension Payment Statement (Attestation de paiement de retraite)
fr_attestation_retraitePreviewIncome & EmploymentThe Attestation de paiement de retraite confirms pension payments made to a beneficiary by a pension fund over a period. The extraction captures the beneficiary, the fund, the period, and the gross-to-net breakdown of withholdings.
Document structure
The Attestation de paiement de retraite contains:
- Beneficiary block: Identity of the pensioner
- Pension reference: Pension number and paying fund
- Period: Start and end dates of the payment window
- Amounts: Gross amount, itemized withholdings, and net amount
Data structure
Within the document_parts array, the fr_attestation_retraite data object contains:
{
"beneficiary": {
"last_name": "MARTIN",
"first_names": "Camille"
},
"pension_number": "1 55 08 75 116 001",
"pension_fund": "CNAV",
"period": {
"start_date": "2025-01-01",
"end_date": "2025-03-31"
},
"gross_amount": 4260.00,
"withholdings": [
{ "label": "CSG", "amount": 349.32 },
{ "label": "CRDS", "amount": 21.30 },
{ "label": "CASA", "amount": 12.78 }
],
"net_amount": 3876.60,
"issue_date": "2025-04-02"
}Field reference
| Field | Type | Description |
|---|---|---|
| beneficiary | object | Pensioner identity block |
| beneficiary.last_name | string | Beneficiary surname |
| beneficiary.first_names | string | Beneficiary given name(s) |
| pension_number | string | null | Pension account or reference number |
| pension_fund | string | null | Paying pension fund (e.g. CNAV, Agirc-Arrco) |
| period | object | Payment period |
| period.start_date | date | Period start date (YYYY-MM-DD) |
| period.end_date | date | Period end date (YYYY-MM-DD) |
| gross_amount | number | Gross pension amount for the period |
| withholdings | array | Itemized deductions applied to the gross amount |
| withholdings[].label | string | Withholding label (e.g. CSG, CRDS, CASA) |
| withholdings[].amount | number | Withholding amount |
| net_amount | number | Net pension amount paid for the period |
| issue_date | date | Date the statement was issued (YYYY-MM-DD) |
Validation
Extraction results include validation_status and validation_codes reflecting coherence, completeness and authenticity controls. Anomalies are surfaced as graded alerts for human review.
Income Tax Return (Déclaration 2042)
fr_declaration_2042PreviewIncome & EmploymentThe Déclaration 2042 is the main French household income tax return. The extraction captures the declarants, the household composition, and the income categories reported for the tax year.
Document structure
The Déclaration 2042 contains:
- Declarants: The first declarant and an optional second declarant
- Household: Marital status and number of tax shares (parts)
- Salaries and pensions: Employment and pension income per declarant
- Other income: Investment income, property income, and additional entries
Data structure
Within the document_parts array, the fr_declaration_2042 data object contains:
{
"declarant_1": {
"last_name": "MARTIN",
"first_names": "Camille"
},
"declarant_2": {
"last_name": "MARTIN",
"first_names": "Julien"
},
"income_year": 2024,
"household_status": "married",
"tax_shares": 2.5,
"salaries": {
"declarant_1": 29400,
"declarant_2": 31200
},
"pensions": null,
"investment_income": 1250,
"property_income": 6800,
"other_income": []
}Field reference
| Field | Type | Description |
|---|---|---|
| declarant_1 | object | First declarant identity block |
| declarant_1.last_name | string | First declarant surname |
| declarant_1.first_names | string | First declarant given name(s) |
| declarant_2 | object | null | Second declarant identity block; null for a single-declarant household |
| income_year | number | Tax year the income relates to |
| household_status | string | null | Marital status: single, married, pacs, divorced, or widowed |
| tax_shares | number | Number of tax shares (parts) for the household quotient |
| salaries | object | Reported salary income per declarant |
| salaries.declarant_1 | number | Salary income of the first declarant |
| salaries.declarant_2 | number | null | Salary income of the second declarant; null when not applicable |
| pensions | object | null | Reported pension income per declarant; null when none is reported |
| investment_income | number | null | Reported investment income (revenus de capitaux mobiliers) |
| property_income | number | null | Reported property income (revenus fonciers) |
| other_income | array | Additional income entries, each with a label and amount |
Validation
Extraction results include validation_status and validation_codes reflecting coherence, completeness and authenticity controls. Anomalies are surfaced as graded alerts for human review.
Self-Employed Income Return (2042 C PRO)
fr_declaration_2042_c_proPreviewIncome & EmploymentThe Déclaration 2042 C PRO reports self-employed and non-salaried professional income as a complement to the main return. The extraction captures the declarant, the tax regime, and the reported professional income and boxes.
Document structure
The Déclaration 2042 C PRO contains:
- Declarant: Identity of the self-employed person
- Regime: Micro or actual (réel) tax regime and the income year
- Income: Revenue, taxable professional income, and capital gains
- Boxes: Raw form box codes and their amounts
Data structure
Within the document_parts array, the fr_declaration_2042_c_pro data object contains:
{
"declarant": {
"last_name": "MARTIN",
"first_names": "Camille"
},
"income_year": 2024,
"regime": "micro_bnc",
"revenue": 42000,
"taxable_professional_income": 29400,
"capital_gains": null,
"social_contributions": 9660,
"boxes": [
{ "code": "5HQ", "amount": 42000 },
{ "code": "5HY", "amount": 9660 }
]
}Field reference
| Field | Type | Description |
|---|---|---|
| declarant | object | Self-employed declarant identity block |
| declarant.last_name | string | Declarant surname |
| declarant.first_names | string | Declarant given name(s) |
| income_year | number | Tax year the income relates to |
| regime | string | Tax regime: micro_bic, micro_bnc, or reel |
| revenue | number | Gross professional revenue reported |
| taxable_professional_income | number | Taxable professional income after applicable allowance or expenses |
| capital_gains | number | null | Professional capital gains, when reported |
| social_contributions | number | null | Social contributions reported, when present |
| boxes | array | Raw form boxes as reported |
| boxes[].code | string | Form box code (e.g. 5HQ) |
| boxes[].amount | number | Amount reported in the box |
Validation
Extraction results include validation_status and validation_codes reflecting coherence, completeness and authenticity controls. Anomalies are surfaced as graded alerts for human review.
Property Income Return (Déclaration 2044)
fr_declaration_2044PreviewIncome & EmploymentThe Déclaration 2044 reports income from unfurnished rental property under the actual regime (revenus fonciers). The extraction captures the declarant, the per-property breakdown, and the aggregated net property income.
Document structure
The Déclaration 2044 contains:
- Declarant: Identity of the reporting person
- Properties: One entry per property with receipts, expenses, and loan interest
- Totals: Aggregated gross receipts, expenses, and loan interest
- Result: Net property income for the tax year
Data structure
Within the document_parts array, the fr_declaration_2044 data object contains:
{
"declarant": {
"last_name": "MARTIN",
"first_names": "Camille"
},
"income_year": 2024,
"properties": [
{
"address": "8 rue des Lilas, 33000 Bordeaux",
"gross_receipts": 9600,
"expenses": 2140,
"loan_interest": 3120
},
{
"address": "25 avenue Jean Jaurès, 31000 Toulouse",
"gross_receipts": 7200,
"expenses": 1580,
"loan_interest": 2040
}
],
"total_gross_receipts": 16800,
"total_expenses": 3720,
"total_loan_interest": 5160,
"net_property_income": 7920
}Field reference
| Field | Type | Description |
|---|---|---|
| declarant | object | Declarant identity block |
| declarant.last_name | string | Declarant surname |
| declarant.first_names | string | Declarant given name(s) |
| income_year | number | Tax year the income relates to |
| properties | array | Per-property income breakdown |
| properties[].address | string | Property address |
| properties[].gross_receipts | number | Gross rental receipts for the property |
| properties[].expenses | number | Deductible expenses for the property |
| properties[].loan_interest | number | Loan interest deducted for the property |
| total_gross_receipts | number | Aggregated gross rental receipts across properties |
| total_expenses | number | Aggregated deductible expenses across properties |
| total_loan_interest | number | Aggregated loan interest across properties |
| net_property_income | number | Net property income (revenu foncier net) for the year |
Validation
Extraction results include validation_status and validation_codes reflecting coherence, completeness and authenticity controls. Anomalies are surfaced as graded alerts for human review.
BIC Return (Déclaration 2031-SD)
fr_declaration_2031_bicPreviewIncome & EmploymentThe Déclaration 2031-SD reports industrial and commercial profits (bénéfices industriels et commerciaux, BIC) for an operator taxed under the actual regime. The extraction captures the operator, the fiscal year, and the reconciliation from accounting result to fiscal result.
Document structure
The Déclaration 2031-SD contains:
- Operator: The reporting business, its name and SIRET
- Fiscal year: Start and end dates of the reporting period
- Regime and revenue: Applicable tax regime and reported revenue
- Reconciliation: Accounting result adjusted by add-backs and deductions to the fiscal result
Data structure
Within the document_parts array, the fr_declaration_2031_bic data object contains:
{
"operator": {
"name": "Boulangerie du Marché SARL",
"siret": "79345612800014"
},
"fiscal_year": {
"start_date": "2024-01-01",
"end_date": "2024-12-31"
},
"tax_regime": "reel_normal",
"revenue": 486000,
"accounting_result": 58200,
"add_backs": 7400,
"deductions": 3100,
"fiscal_result": 62500
}Field reference
| Field | Type | Description |
|---|---|---|
| operator | object | Reporting business block |
| operator.name | string | Operator legal name |
| operator.siret | string | null | Operator 14-digit SIRET establishment number |
| fiscal_year | object | Reporting period |
| fiscal_year.start_date | date | Fiscal year start date (YYYY-MM-DD) |
| fiscal_year.end_date | date | Fiscal year end date (YYYY-MM-DD) |
| tax_regime | string | null | Applicable tax regime: reel_simplifie or reel_normal |
| revenue | number | Reported revenue (chiffre d'affaires) for the period |
| accounting_result | number | Accounting result before tax adjustments |
| add_backs | number | Tax add-backs (réintégrations) applied to the accounting result |
| deductions | number | Tax deductions (déductions) applied to the accounting result |
| fiscal_result | number | Fiscal result (résultat fiscal) after add-backs and deductions |
Validation
Extraction results include validation_status and validation_codes reflecting coherence, completeness and authenticity controls. Anomalies are surfaced as graded alerts for human review.