Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,558Letters: 14Defects: 1,336counted 2 min ago
teppi

Server definition

Hash
sha256:01386c6f9f989984f27ca31dfe9ddd10904247a93716d37b5832ffe1dea77411
What it is
What a remote MCP server returned when asked what it offers: 13 tools

The blob, as servednamed by its sha256

{ "instructions": "French rental & cross-border tools by AdminLanding (adminlanding.com): rental — zone tendue status, tenant notice period, DPE rental restrictions, IRL rent-revision; frontalier (France–Switzerland) — net Swiss salary, LAMal vs CMU health cover, Swiss vs French family allowances, Geneva quasi-resident status; home employment (particulier employeur ↔ salarié, CCN 3239) — end-of-contract notice, calendar, indemnity and documents for either party, plus an assistant-maternel (assmat) alias with the regime pre-set — all free, no account needed (read-only, except generate_rent_receipt which renders a free PDF). generate_rent_receipt is available here WITHOUT an account: a free French quittance de loyer PDF from the fields you give (nothing stored beyond the 24h PDF and its single-use link; per-network caps apply). Leases, the other rental letters, home-employment documents, the cross-border reports and the two frontalier attestations (membership or a Cross-Border Pack édition already bought, unlimited under fair use) and e-signature (generate_lease, generate_home_employment_*, generate_*_report, generate_presence_attestation, generate_leaver_attestation, request_signature) require a personal API key or OAuth sign-in on /mcp/account. Deterministic legal formulas, official datasets and fixed document templates — general information, not legal advice (the user should verify important decisions).", "tools": [ { "description": "End of an assistant maternel (assmat) contract with a parent-employer: retrait d'enfant or resignation, notice, indemnity, Pajemploi documents, for the parent or the assistant maternel. · Fin de contrat d'assistant maternel (assmat) avec un parent employeur : retrait d'enfant ou démission, préavis, indemnité de rupture, documents Pajemploi, pour le parent comme pour l'assistant maternel. — Same engine as calculate_home_employment_end_of_contract with regime pre-set to assistant_maternel (socle spécifique): notice by length of care (art. 120: 8 days / 15 days / 1 month, outside the trial period), withdrawal indemnity (art. 121.1: 1/80 of gross salaries excluding entretien/repas/km, from 9 months of care), rupture conventionnelle NOT available (CASF L.423-2), unfitness (art. 119.5) and the approval suspended or withdrawn (art. 119.3), last Pajemploi declaration, 6-month settlement contest window (from the receipt's signature — earliest end shown), documents with who produces and who receives each; départ volontaire à la retraite (art. 63.2.2, notice art. 120; the annex-4 indemnity of art. 121.2 computed on the periods given, PAID BY THE INSURER, not the employer). With no date given the seniority is taken today (Europe/Paris) and the result says so. NOT for a garde d'enfant à domicile (nounou at the family's home) — that is regime garde_domicile on the generic tool. Applies the Convention collective IDCC 3239 (verified on Légifrance 2026). Deterministic formulas — no AI, no assessment of any person or motif.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "agreed_end_date": { "description": "Rupture conventionnelle only: the end date the parties agreed — the minimum indemnity (art. 161.3 → 163.1) is computed with the seniority reached on that day.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "am_monthly_gross": { "description": "Assistant maternel: monthly gross (mensualisation), EXCLUDING indemnités d'entretien, repas, kilométriques.", "minimum": 0, "type": "number" }, "am_total_gross_paid": { "description": "Assistant maternel: optional total gross salaries paid since the start (art. 121.1 base). Defaults to mensualisation × complete months.", "minimum": 0, "type": "number" }, "approval_decision": { "description": "Approval ending only (assistant maternel): the conseil départemental's decision.", "enum": [ "suspension", "modification", "retrait" ], "type": "string" }, "approval_notified_date": { "description": "Approval ending only: the day the conseil départemental notified the decision — the contract ends on it (art. 119.3).", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "as_of_date": { "description": "Seniority reference date when the letter has not been sent yet (planning). Ignored when notification_date is given. Defaults to today (Europe/Paris) when no date at all is given, as on the web calculator and the documents.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "avg_60_months_gross": { "description": "retirement_departure only: the monthly average of the gross salaries of the last 60 calendar months in the branch (annex 4, art. 4.1 takes the most favourable of the 60-, 12- and 3-month averages). The indemnity is PAID BY THE INSURER, not by the employer (art. 4.2).", "minimum": 0, "type": "number" }, "cdd_end_date": { "description": "contract_type 'cdd' only: the term of the contract with its renewals (the L.1243-2 notice counts on the total length).", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "cdd_reason": { "description": "contract_type 'cdd' only: the motif (C. trav. art. L.1242-2) — 'seasonal' has no end-of-contract indemnity (L.1243-10, 1°).", "enum": [ "replacement_absence", "replacement_part_time", "replacement_suspension", "replacement_before_removal", "awaiting_cdi", "temporary_increase", "seasonal" ], "type": "string" }, "contract_type": { "description": "'cdi' (permanent) or 'cdd' (fixed-term). Omitted = the rules of a permanent contract. A CDD ends before its term only in the cases of C. trav. art. L.1243-1 / L.1243-2 (CCN 3239 art. 62): agreement of the parties (no official form, no homologation), faute grave, unfitness (L.1226-4-3 / L.1226-20), the employee's resignation on a CDI hire (notice one day per week of the total length, two weeks at most) — any other ending is answered status 'blocked', code cdd_early_end_not_provided. Judged after its term (cdd_end_date), the relationship still running, the CDD is a CDI (L.1243-11).", "enum": [ "cdi", "cdd" ], "type": "string" }, "end_reason": { "description": "Closed category matching the letter: 'cdd_term_end' (a fixed-term contract ending at its term — C. trav. art. L.1243-5 « cesse de plein droit à l'échéance du terme »: no letter, no notice, no rupture indemnity; the end-of-contract indemnity of L.1243-8 except in the cases of L.1243-10; every figure taken at the term; needs contract_type 'cdd' and cdd_end_date; not when the work went on after the term — then a permanent contract, L.1243-11), 'employer_termination' (licenciement / retrait d'enfant), 'resignation' (démission), 'mutual_termination' (rupture conventionnelle — not available for assistants maternels), 'unfitness' (inaptitude, CCN art. 161.1.3 / 119.5: no notice; needs unfitness_origin and unfitness_opinion_date), 'approval_withdrawn' (assistant maternel only, art. 119.3: approval suspended, changed or withdrawn; needs approval_decision and approval_notified_date), 'retirement_by_employer' (mise à la retraite, home employee only, art. 161.1.2: the dismissal's notice, art. 162.5; an indemnity whatever the seniority, computed like art. 163.1, art. 163.2 — for an assistant maternel the employer's ending is the withdrawal of the child, blocked with code retirement_by_employer_is_withdrawal_am), 'retirement_departure' (départ volontaire à la retraite, art. 63.2.2: home employee notice art. 162.5, assistant maternel art. 120; the voluntary-retirement indemnity of annex 4 — art. 163.3 / 121.2 — is computed from annex 4 on sector_months / sector_months_last_84 / avg_60_months_gross when given, else on this contract alone, with payer 'insurer' (annex 4, art. 4.2); reason annex4_conditions_not_met when the periods known do not reach 120 months, 60 of them in the last 84).", "enum": [ "employer_termination", "resignation", "mutual_termination", "unfitness", "approval_withdrawn", "retirement_by_employer", "retirement_departure", "cdd_term_end" ], "type": "string" }, "entretien_date": { "description": "Home employee dismissal / unfitness: the day the preliminary interview was held — the notification window (4th–30th jour ouvrable, art. 161.1.1.1) is computed from it.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "leave_pay_mode": { "description": "Home employee: how paid leave is paid — 'on_leave' (when taken) or 'cesu_10pct' (the CESU hourly wage raised by 10 %: « les congés payés sont rémunérés au moment du versement du salaire mensuel », CCN 3239 art. 140.1.2 — then no compensatory paid-leave indemnity at the end). Omitted = unknown: the answer states the rule with its exception.", "enum": [ "on_leave", "cesu_10pct" ], "type": "string" }, "notification_date": { "description": "ISO date of the FIRST PRESENTATION (or handover) of the letter that ends the contract — the notice runs from it. For a rupture conventionnelle: the day both parties sign the OFFICIAL form (the withdrawal period runs from it). When omitted (with sent_date and as_of_date), the seniority is taken TODAY (Europe/Paris) and the result says so (seniority.as_of_default: 'today') — never zero seniority.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "party": { "description": "Who is asking: 'employer' (particulier employeur) or 'employee' (salarié / assistant maternel). Wording only — the figures are identical for both.", "enum": [ "employer", "employee" ], "type": "string" }, "sector_months": { "description": "retirement_departure only: the months of employment in the branch over the whole career, ALL household employers together (CCN 3239 annex 4, art. 2.2: 120 months needed; 1 month of salary from 10 years, 1.5 from 15, 2 from 20, 2.5 from 30). Defaults to this contract's months — a floor.", "maximum": 720, "minimum": 0, "type": "number" }, "sector_months_last_84": { "description": "retirement_departure only: of those, the months within the 84 months before the end of the contract (annex 4, art. 2.2: 60 needed). Defaults to this contract's.", "maximum": 84, "minimum": 0, "type": "number" }, "sent_date": { "description": "ISO date the ending letter was SENT (registered post) or handed over. The notice tier is set by the seniority on that day (CCN art. 162.1 / 120); for faute grave/lourde and unfitness the contract ends on it (art. 64.3 / 64.4). When omitted the tier is taken at the first presentation and notice.tierDependsOnSentDate says whether a threshold lies in the 7 days before it.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "serious_misconduct": { "description": "The letter states faute grave or faute lourde (a category chosen by the user — the tool does not assess it). Removes the notice and the indemnity by rule.", "type": "boolean" }, "start_date": { "description": "Contract start (ISO).", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "unfitness_opinion_date": { "description": "Unfitness only: the date of the occupational physician's final opinion; the rupture takes place within one month of it.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "unfitness_origin": { "description": "Unfitness only: 'occupational' (work accident or occupational disease — the indemnity is doubled, art. 161.1.3 / 2/80 art. 119.5) or 'non_occupational'.", "enum": [ "occupational", "non_occupational" ], "type": "string" } }, "required": [ "party", "end_reason", "start_date" ], "type": "object" }, "name": "calculate_assistant_maternel_end_of_contract", "outputSchema": null }, { "description": "Deposit restitution: due date, 10 %/month late penalty, vétusté-apportioned retentions. · Restitution du dépôt de garantie : date limite, majoration de 10 % par mois de retard, retenues avec vétusté. — For a French residential lease (loi n° 89-462 art. 22 / art. 25-6): the restitution deadline (1 month from the remise des clés when the exit état des lieux matches the entry one, 2 months otherwise), the late penalty (10 % of the monthly rent en principal per monthly period started late; not due when the delay results from the tenant not having given the address of the new home), the provision a landlord may keep in an immeuble collectif (duly justified, at most 20 % of the deposit — art. 22, al. 5: a ceiling, the amount is the landlord's), the legal deposit cap (1 month unfurnished / 2 months furnished, when lease_type is given) and, for each damage line, the share chargeable to the tenant after vétusté (usure normale) — under the grille of the lease when given, otherwise an ILLUSTRATIVE grille (no official grille exists — décret n° 2016-382 art. 4 defers to accords collectifs; the response says so). Nothing is assumed: the age of an element a grille applies to is asked for, the lease type and the provision amount are left out when not given. Same figures whichever party asks: pass perspective 'landlord' (justify a retention) or 'tenant' (contest one) — only next_steps change. Ask the user for amounts and dates in plain words; damage items as 'what, repair cost, age of the element'. Deterministic rules, not AI. General information, not legal advice.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "apply_provision": { "description": "true to deduct provision_amount in the figures; false to leave it out. Without provision_amount nothing can be deducted: the tool asks for the amount.", "type": "boolean" }, "copropriete": { "description": "true when the dwelling is in an immeuble collectif (a collective building, co-owned or not): the landlord may keep a duly justified provision of at most 20 % of the deposit until the building's yearly accounts (art. 22, al. 5).", "type": "boolean" }, "damages": { "description": "Damage lines to apportion. Omit for a full restitution.", "items": { "properties": { "age_years": { "description": "Age of the element in years (installed or last renewed) — 0 for a new element. REQUIRED when a grille applies to the line (grille_key, lifespan_years or annual_rate_pct): the chargeable share is computed from it and it is never assumed.", "maximum": 80, "minimum": 0, "type": "number" }, "annual_rate_pct": { "description": "Lease-annexed grille: annual abatement in % (omit for a linear abatement over the lifespan).", "maximum": 100, "minimum": 0, "type": "number" }, "cost": { "description": "Justified repair cost (quote or invoice), €.", "maximum": 1000000, "minimum": 0, "type": "number" }, "franchise_years": { "description": "Lease-annexed grille: franchise in years.", "maximum": 20, "minimum": 0, "type": "number" }, "grille_key": { "description": "Category in the grille (peinture, papier_peint, moquette, sol_souple, parquet_vitrification, robinetterie, chauffe_eau, electromenager, volets_stores). Omit for an element outside the grille — its full cost then stays chargeable.", "enum": [ "peinture", "papier_peint", "moquette", "sol_souple", "parquet_vitrification", "robinetterie", "chauffe_eau", "electromenager", "volets_stores" ], "type": "string" }, "item": { "description": "What is damaged / repaired (plain words).", "maxLength": 120, "minLength": 1, "type": "string" }, "lifespan_years": { "description": "Lease-annexed grille: theoretical lifespan of the element (overrides the category).", "maximum": 60, "minimum": 1, "type": "number" }, "residual_pct": { "description": "Lease-annexed grille: residual share in % (default 0).", "maximum": 100, "minimum": 0, "type": "number" } }, "required": [ "item", "cost" ], "type": "object" }, "maxItems": 30, "type": "array" }, "deposit": { "description": "Deposit paid at move-in (€).", "maximum": 1000000, "minimum": 0, "type": "number" }, "edl_outcome": { "description": "'identical' when the exit état des lieux matches the entry one (1-month deadline); 'differences' otherwise (2 months).", "enum": [ "identical", "differences" ], "type": "string" }, "key_return_date": { "description": "Date the keys were handed back (remise des clés), ISO date — the deadline runs from this day.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "lease_type": { "description": "'vide' unfurnished (deposit cap 1 month) or 'meuble' furnished (cap 2 months). Never presumed: omitted, no cap is computed.", "enum": [ "vide", "meuble" ], "type": "string" }, "perspective": { "description": "Who is asking — changes only the next_steps wording, never the figures.", "enum": [ "landlord", "tenant" ], "type": "string" }, "provision_amount": { "description": "Immeuble collectif only: the provision the landlord keeps, € — the landlord's own justified amount, at most 20 % of the deposit. Never assumed: omitted, no provision is deducted and the result only states the maximum.", "maximum": 1000000, "minimum": 0, "type": "number" }, "provision_justification": { "description": "What justifies the provision (e.g. 'arrêté provisoire des comptes du 15/09/2026').", "maxLength": 300, "minLength": 1, "type": "string" }, "rent_hors_charges": { "description": "Monthly rent en principal, excluding charges (€).", "maximum": 1000000, "minimum": 0, "type": "number" }, "restitution_date": { "description": "Date the deposit was / will be returned (ISO) — the penalty is computed against it. Omitted, the figures are computed as of today (date in France) and the result says the date was assumed (as_of.assumed).", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "tenant_gave_address": { "description": "false when the tenant never gave the address of the new home and the delay results from it — the late penalty is then not due (art. 22, al. 7). Defaults to true.", "type": "boolean" } }, "required": [ "deposit", "rent_hors_charges", "key_return_date", "edl_outcome" ], "type": "object" }, "name": "calculate_deposit_restitution", "outputSchema": null }, { "description": "End of a home-employment contract in France (particulier employeur ↔ salarié: cleaner, carer, garde d'enfant à domicile, assistant maternel): notice, dates, indemnity, documents, for either party. · Fin de contrat d'emploi à domicile (particulier employeur ↔ salarié, assistant maternel) : préavis, calendrier, indemnité, documents, pour l'employeur comme pour le salarié. — Notice duration by seniority (art. 162.4.1 dismissal / 162.6 resignation / 120 assistant maternel), earliest entretien préalable date (art. 161.1.1.1 — 4th jour ouvrable counted from the day after presentation; the Code du travail dismissal procedure does not apply to the particulier employeur), notice end computed from the FIRST PRESENTATION of the letter, dismissal indemnity (art. 163.1: 1/4 month per year up to 10 years then 1/3, from 8 months, best of the 12- or 3-month average) or assistant-maternel withdrawal indemnity (art. 121.1: 1/80 of gross salaries, from 9 months), rupture conventionnelle windows (blocked for assistants maternels, CASF L.423-2), paid-leave reminder, last CESU/Pajemploi declaration date, the 6-month settlement contest window (it runs from the receipt's signature, CCN art. 69 — only its earliest end is shown), unfitness (no notice, doubled indemnity when occupational, one month from the opinion) and the approval ending, and the end-of-contract documents with who produces and who receives each; retirement (mise à la retraite art. 161.1.2 / 162.5 / 163.2 — indemnity whatever the seniority; départ volontaire art. 63.2.2, its annex-4 indemnity computed on the periods given and PAID BY THE INSURER, not the employer), the paid job-search hours from 40 hours a week only (art. 162.4.2), no paid-leave indemnity for a CESU wage raised by 10 % (art. 140.1.2). With no date given the seniority is taken today (Europe/Paris) and the result says so. Same numbers whichever party calls. Applies the Convention collective IDCC 3239 (verified on Légifrance 2026). Deterministic formulas — no AI, no assessment of any person or motif.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "agreed_end_date": { "description": "Rupture conventionnelle only: the end date the parties agreed — the minimum indemnity (art. 161.3 → 163.1) is computed with the seniority reached on that day.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "am_monthly_gross": { "description": "Assistant maternel: monthly gross (mensualisation), EXCLUDING indemnités d'entretien, repas, kilométriques.", "minimum": 0, "type": "number" }, "am_total_gross_paid": { "description": "Assistant maternel: optional total gross salaries paid since the start (art. 121.1 base). Defaults to mensualisation × complete months.", "minimum": 0, "type": "number" }, "approval_decision": { "description": "Approval ending only (assistant maternel): the conseil départemental's decision.", "enum": [ "suspension", "modification", "retrait" ], "type": "string" }, "approval_notified_date": { "description": "Approval ending only: the day the conseil départemental notified the decision — the contract ends on it (art. 119.3).", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "as_of_date": { "description": "Seniority reference date when the letter has not been sent yet (planning). Ignored when notification_date is given. Defaults to today (Europe/Paris) when no date at all is given, as on the web calculator and the documents.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "avg_12_months_gross": { "description": "Optional — average gross monthly pay over the last 12 months (art. 163.1 reference).", "minimum": 0, "type": "number" }, "avg_3_months_gross": { "description": "Optional — average gross monthly pay over the last 3 months (the more favourable average is used).", "minimum": 0, "type": "number" }, "avg_60_months_gross": { "description": "retirement_departure only: the monthly average of the gross salaries of the last 60 calendar months in the branch (annex 4, art. 4.1 takes the most favourable of the 60-, 12- and 3-month averages). The indemnity is PAID BY THE INSURER, not by the employer (art. 4.2).", "minimum": 0, "type": "number" }, "cdd_end_date": { "description": "contract_type 'cdd' only: the term of the contract with its renewals (the L.1243-2 notice counts on the total length).", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "cdd_reason": { "description": "contract_type 'cdd' only: the motif (C. trav. art. L.1242-2) — 'seasonal' has no end-of-contract indemnity (L.1243-10, 1°).", "enum": [ "replacement_absence", "replacement_part_time", "replacement_suspension", "replacement_before_removal", "awaiting_cdi", "temporary_increase", "seasonal" ], "type": "string" }, "contract_type": { "description": "'cdi' (permanent) or 'cdd' (fixed-term). Omitted = the rules of a permanent contract. A CDD ends before its term only in the cases of C. trav. art. L.1243-1 / L.1243-2 (CCN 3239 art. 62): agreement of the parties (no official form, no homologation), faute grave, unfitness (L.1226-4-3 / L.1226-20), the employee's resignation on a CDI hire (notice one day per week of the total length, two weeks at most) — any other ending is answered status 'blocked', code cdd_early_end_not_provided. Judged after its term (cdd_end_date), the relationship still running, the CDD is a CDI (L.1243-11).", "enum": [ "cdi", "cdd" ], "type": "string" }, "convocation_date": { "description": "Employer termination only: first presentation of the convocation à l'entretien préalable → earliest entretien date (CCN art. 161.1.1.1).", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "end_reason": { "description": "Closed category matching the letter: 'cdd_term_end' (a fixed-term contract ending at its term — C. trav. art. L.1243-5 « cesse de plein droit à l'échéance du terme »: no letter, no notice, no rupture indemnity; the end-of-contract indemnity of L.1243-8 except in the cases of L.1243-10; every figure taken at the term; needs contract_type 'cdd' and cdd_end_date; not when the work went on after the term — then a permanent contract, L.1243-11), 'employer_termination' (licenciement / retrait d'enfant), 'resignation' (démission), 'mutual_termination' (rupture conventionnelle — not available for assistants maternels), 'unfitness' (inaptitude, CCN art. 161.1.3 / 119.5: no notice; needs unfitness_origin and unfitness_opinion_date), 'approval_withdrawn' (assistant maternel only, art. 119.3: approval suspended, changed or withdrawn; needs approval_decision and approval_notified_date), 'retirement_by_employer' (mise à la retraite, home employee only, art. 161.1.2: the dismissal's notice, art. 162.5; an indemnity whatever the seniority, computed like art. 163.1, art. 163.2 — for an assistant maternel the employer's ending is the withdrawal of the child, blocked with code retirement_by_employer_is_withdrawal_am), 'retirement_departure' (départ volontaire à la retraite, art. 63.2.2: home employee notice art. 162.5, assistant maternel art. 120; the voluntary-retirement indemnity of annex 4 — art. 163.3 / 121.2 — is computed from annex 4 on sector_months / sector_months_last_84 / avg_60_months_gross when given, else on this contract alone, with payer 'insurer' (annex 4, art. 4.2); reason annex4_conditions_not_met when the periods known do not reach 120 months, 60 of them in the last 84).", "enum": [ "employer_termination", "resignation", "mutual_termination", "unfitness", "approval_withdrawn", "retirement_by_employer", "retirement_departure", "cdd_term_end" ], "type": "string" }, "entretien_date": { "description": "Home employee dismissal / unfitness: the day the preliminary interview was held — the notification window (4th–30th jour ouvrable, art. 161.1.1.1) is computed from it.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "hourly_gross": { "description": "Gross hourly rate in € (home employee / garde à domicile).", "maximum": 500, "minimum": 0, "type": "number" }, "leave_pay_mode": { "description": "Home employee: how paid leave is paid — 'on_leave' (when taken) or 'cesu_10pct' (the CESU hourly wage raised by 10 %: « les congés payés sont rémunérés au moment du versement du salaire mensuel », CCN 3239 art. 140.1.2 — then no compensatory paid-leave indemnity at the end). Omitted = unknown: the answer states the rule with its exception.", "enum": [ "on_leave", "cesu_10pct" ], "type": "string" }, "notification_date": { "description": "ISO date of the FIRST PRESENTATION (or handover) of the letter that ends the contract — the notice runs from it. For a rupture conventionnelle: the day both parties sign the OFFICIAL form (the withdrawal period runs from it). When omitted (with sent_date and as_of_date), the seniority is taken TODAY (Europe/Paris) and the result says so (seniority.as_of_default: 'today') — never zero seniority.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "party": { "description": "Who is asking: 'employer' (particulier employeur) or 'employee' (salarié / assistant maternel). Wording only — the figures are identical for both.", "enum": [ "employer", "employee" ], "type": "string" }, "regime": { "description": "'home_employee' (salarié du particulier employeur: cleaner, carer, housekeeper…), 'garde_domicile' (child care at the family's home — same rules as home_employee), 'assistant_maternel' (childminder at her own home, agréée — or use calculate_assistant_maternel_end_of_contract).", "enum": [ "home_employee", "garde_domicile", "assistant_maternel" ], "type": "string" }, "sector_months": { "description": "retirement_departure only: the months of employment in the branch over the whole career, ALL household employers together (CCN 3239 annex 4, art. 2.2: 120 months needed; 1 month of salary from 10 years, 1.5 from 15, 2 from 20, 2.5 from 30). Defaults to this contract's months — a floor.", "maximum": 720, "minimum": 0, "type": "number" }, "sector_months_last_84": { "description": "retirement_departure only: of those, the months within the 84 months before the end of the contract (annex 4, art. 2.2: 60 needed). Defaults to this contract's.", "maximum": 84, "minimum": 0, "type": "number" }, "sent_date": { "description": "ISO date the ending letter was SENT (registered post) or handed over. The notice tier is set by the seniority on that day (CCN art. 162.1 / 120); for faute grave/lourde and unfitness the contract ends on it (art. 64.3 / 64.4). When omitted the tier is taken at the first presentation and notice.tierDependsOnSentDate says whether a threshold lies in the 7 days before it.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "serious_misconduct": { "description": "The letter states faute grave or faute lourde (a category chosen by the user — the tool does not assess it). Removes the notice and the indemnity by rule.", "type": "boolean" }, "start_date": { "description": "Contract start (ISO).", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "unfitness_opinion_date": { "description": "Unfitness only: the date of the occupational physician's final opinion; the rupture takes place within one month of it.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "unfitness_origin": { "description": "Unfitness only: 'occupational' (work accident or occupational disease — the indemnity is doubled, art. 161.1.3 / 2/80 art. 119.5) or 'non_occupational'.", "enum": [ "occupational", "non_occupational" ], "type": "string" }, "weekly_hours": { "description": "Weekly hours (mensualisation = hourly × hours × 52 / 12).", "maximum": 80, "minimum": 0, "type": "number" } }, "required": [ "party", "end_reason", "start_date", "regime" ], "type": "object" }, "name": "calculate_home_employment_end_of_contract", "outputSchema": null }, { "description": "Net Swiss salary for a cross-border worker. · Salaire suisse net pour un frontalier. — Converts a gross annual Swiss salary (CHF) to net, deducting the employee shares of AVS/AI/APG, AC (chômage), LPP (2nd pillar) and NBU (non-occupational accident) for the given border canton. Deterministic Swiss payroll rules — no AI. Returns annual + monthly net and the deduction breakdown, with the data year of the rates used.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "age": { "description": "Employee age (affects LPP rate).", "maximum": 80, "minimum": 16, "type": "integer" }, "canton": { "description": "Swiss canton of work supported by the net-salary engine (GE, VD, JU, NE, BS, VS).", "enum": [ "GE", "VD", "JU", "NE", "BS", "VS" ], "type": "string" }, "gross_chf_annual": { "description": "Gross annual salary in CHF.", "maximum": 1000000, "minimum": 1000, "type": "number" } }, "required": [ "gross_chf_annual", "age", "canton" ], "type": "object" }, "name": "calculate_net_swiss_salary", "outputSchema": null }, { "description": "New rent after the yearly IRL revision; no revision for class F/G homes. · Nouveau loyer après la révision IRL annuelle ; pas de révision pour les logements classés F ou G. — Computes the legally revised rent for a French residential lease using the INSEE IRL (indice de référence des loyers): new rent = current rent × (IRL of the lease's reference quarter ÷ IRL of the SAME quarter one year earlier), loi n° 89-462 art. 17-1. The reference quarter (trimestre de référence IRL) is the one written in the lease — pass it as reference_quarter. Two legal limits: the landlord must ask for the revision within ONE YEAR of the date it takes effect (the date agreed in the lease or, failing that, the end of each year of the lease), otherwise the landlord is deemed to have waived it for the year gone by (art. 17-1, I, al. 3) — when revision_date is more than one year old the result says so; and the revision cannot be applied in a dwelling of DPE class F or G (art. 17-1, III; leases concluded, renewed or tacitly continued since 24 August 2022 — loi n° 2021-1104 du 22 août 2021, art. 159) — pass dpe_class to get that check. The revised rent applies from the landlord's request, never retroactively (art. 17-1, I, al. 4). Deterministic INSEE data + fixed formula — no AI. France métropolitaine.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "current_rent": { "description": "Current monthly rent excluding charges (hors charges), in euros.", "exclusiveMinimum": 0, "type": "number" }, "dpe_class": { "description": "Dwelling's DPE class, if known — in a class F or G dwelling the revision cannot be applied (art. 17-1, III).", "enum": [ "A", "B", "C", "D", "E", "F", "G" ], "type": "string" }, "reference_quarter": { "description": "The IRL reference quarter OF THE YEAR OF THE REVISION (e.g. '2026-T2' for a revision in 2026). The lease usually names the quarter only ('T2', '2e trimestre') — infer the year from the revision date, or pass revision_date and give just the quarter here. Accepts '2026-T2', 'T2 2026', 'Q2 2026', or 'T2' when revision_date is provided. Never the quarter of the previous year: the tool itself divides by the same quarter one year earlier.", "maxLength": 20, "minLength": 2, "type": "string" }, "revision_date": { "description": "Date the revision takes effect, as an ISO date (e.g. 2026-09-01) — normally the lease anniversary; accept a natural date from the user and format it yourself. When given, the reference quarter is taken in THIS year; if reference_quarter names a different year, the result carries a warning and this date wins.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" } }, "required": [ "current_rent", "reference_quarter" ], "type": "object" }, "name": "calculate_rent_revision", "outputSchema": null }, { "description": "Frontalier telework thresholds (FR–CH): 40 % tax; social security Swiss below 25 %, French from 25 % unless the employer's A1 (framework agreement, below 50 %), reported separately. · Télétravail frontalier : seuil fiscal 40 % ; sécurité sociale suisse sous 25 %, française dès 25 % sauf A1 de l'employeur (accord-cadre, moins de 50 %). — Projects a typical working week over 46 worked weeks and returns the telework share, the position against BOTH limits (different instruments: the FR–CH tax avenant in force 24/07/2025, applying to pay from 01/01/2023, vs the EU/EFTA social-security framework agreement since 01/07/2023), the telework days that can still be added over the projected year (its worked days stay fixed) before each is crossed, and how many temporary mission days count inside the allowance (≤ 10 a year). What the 40 % line means depends on the canton of work — give work_canton: Geneva and the other source-taxing cantons stay taxed in Switzerland up to 40 %; the eight cantons of the 1983 agreement are taxed in France and keep the frontalier status up to 40 %. Without it, both regimes are stated. Optional: the 3-month LAMal/CMU droit d'option window (Swiss and EU nationals) from the Swiss employment start date or the later move to France. Deterministic — verified official facts with sources and dates, nothing stored. Same engine as the free web counter; a signed-in monthly log turns the projection into the real position (list_deadlines then carries the threshold warnings).", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "as_of_date": { "description": "YYYY-MM-DD reference date for the option window (default: today) — makes the answer reproducible.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "days_per_week": { "description": "Contractual working days per week (1–7). Default 5.", "maximum": 7, "minimum": 1, "type": "number" }, "france_move_date": { "description": "YYYY-MM-DD the worker took up residence in France, if already working in Switzerland — the window then counts from the LATER of the two dates (official form p.3).", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "mission_days_per_year": { "description": "Temporary mission days per year in France or a third country — only the first 10 count inside the telework allowance.", "maximum": 60, "minimum": 0, "type": "integer" }, "swiss_employment_start": { "description": "YYYY-MM-DD the Swiss employment began (or the Swiss pension was granted) — adds the 3-month LAMal/CMU droit d'option window. Only if this job opened the option: a first Swiss job since living in France, or a return after unemployment — a change of employer does not reopen it.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "telework_days_per_week": { "description": "Days per week worked from home in France (fractions allowed, e.g. 1.5).", "maximum": 7, "minimum": 0, "type": "number" }, "work_canton": { "description": "Swiss canton of work (code like GE, VD, or name). Picks the tax rule: the 8 cantons of the 1983 agreement (BE, SO, BS, BL, VD, VS, NE, JU) tax in France; the others tax at source. Omitted: both regimes are stated.", "maxLength": 40, "type": "string" } }, "required": [ "telework_days_per_week" ], "type": "object" }, "name": "calculate_teletravail_frontalier", "outputSchema": null }, { "description": "Tenant's notice period to end a French lease (préavis). · Délai de préavis du locataire pour résilier un bail. — Computes the tenant's notice period for terminating a French residential lease (loi n° 89-462 art. 15): furnished = always 1 month; unfurnished = 3 months, reduced to 1 month in a zone tendue commune (first-list perimeter, resolved automatically from insee_code/commune) or on a statutory ground (art. 15 I, 1° à 5° incl. 3° bis). Returns the end date computed de quantième à quantième from the RECEPTION date, plus which justificatifs must accompany the letter. Deterministic legal formula — no AI involved. France métropolitaine rules.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "code_postal": { "description": "5-digit postal code — disambiguates homonym communes.", "pattern": "^[0-9]{5}$", "type": "string" }, "commune": { "description": "Commune name, e.g. 'Lyon'. Used when insee_code is not provided.", "maxLength": 80, "minLength": 1, "type": "string" }, "ground_id": { "description": "Statutory ground for the reduced 1-month notice on an unfurnished lease (art. 15 I).", "enum": [ "premier_emploi", "mutation", "perte_emploi", "nouvel_emploi", "sante", "rsa_aah", "logement_social", "violences" ], "type": "string" }, "insee_code": { "description": "INSEE commune code (5 chars, e.g. 75056 for Paris, 2A004 for Ajaccio). Preferred when known — skips name resolution.", "pattern": "^[0-9][0-9ABab][0-9]{3}$", "type": "string" }, "lease_type": { "description": "'vide' = unfurnished, 'meuble' = furnished", "enum": [ "vide", "meuble" ], "type": "string" }, "reception_date": { "description": "ISO date the LANDLORD RECEIVES the notice (LRAR reception, remise en main propre, or acte de commissaire) — never the sending date.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "zone_tendue": { "description": "Explicit zone-tendue (first list) flag if already known — otherwise resolved from insee_code/commune.", "type": "boolean" } }, "required": [ "lease_type" ], "type": "object" }, "name": "calculate_tenant_notice_period", "outputSchema": null }, { "description": "French rental limits by DPE class: letting ban, rent freeze, DPE validity. · Restrictions locatives selon la classe DPE : interdiction de louer, gel des loyers, validité du DPE. — Given a dwelling's DPE class (A–G), returns the French rental restrictions in force: letting ban status and date (loi n° 2021-1104 Climat et Résilience — G banned since 2025, F from 2028, E from 2034, France métropolitaine), the F/G rent freeze (no rent revision in a class F or G dwelling — loi n° 89-462 art. 17-1, III, for leases concluded, renewed or tacitly continued since 24 August 2022), and — when dpe_issue_date is provided — whether the DPE itself is still valid (10-year rule + the 2013–2021 transitional expiries). Deterministic rules from official thresholds — no AI involved.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "dpe_class": { "description": "Energy class from the dwelling's DPE.", "enum": [ "A", "B", "C", "D", "E", "F", "G" ], "type": "string" }, "dpe_issue_date": { "description": "ISO issue date of the DPE — enables the validity check.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" } }, "required": [ "dpe_class" ], "type": "object" }, "name": "check_dpe_rental_restrictions", "outputSchema": null }, { "description": "Quasi-resident status (≥ 90 % of the household's income taxable in CH). · Statut de quasi-résident (≥ 90 % des revenus du foyer imposables en CH). — For a person taxed at source in Switzerland who lives in France (Geneva and every canton outside the 1983 agreement): at least 90 % of the household's worldwide gross income (you + spouse) taxable in Switzerland opens a request for ordinary taxation (TOU), in writing, by 31 March of the following year, every year, not withdrawable once filed (LIFD art. 99a; OIS art. 14). The eight cantons of the agreement of 11 April 1983 (BE, SO, BS, BL, VD, VS, NE, JU) tax in France: not applicable there. Deterministic threshold rule — no AI. Returns eligibility, the share, the threshold, the deadline and the data year.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "source_taxed": { "description": "For a canton of the 1983 agreement (BE, SO, BS, BL, VD, VS, NE, JU): true when the employer withholds Swiss source tax in 2026 (the tax year of the open request, due 31/03/2027) — a condition of the frontalier status is not met (daily return — at most 45 nights a year full time and at most one a week —, 2041-AS, telework ≤ 40 %) or a Swiss national paid by a public-law employer. The request is then open.", "type": "boolean" }, "swiss_income": { "description": "Household (you + spouse) gross income taxable in Switzerland (same currency as total_income).", "maximum": 100000000, "minimum": 0, "type": "number" }, "total_income": { "description": "Household (you + spouse) worldwide gross income (same currency).", "exclusiveMinimum": 0, "maximum": 100000000, "type": "number" }, "work_canton": { "description": "Swiss canton of work (code like GE, ZH, or name). A canton of the 1983 agreement is answered « not applicable » unless source_taxed is true. Omitted: the rule is answered with that condition stated.", "maxLength": 40, "type": "string" } }, "required": [ "swiss_income", "total_income" ], "type": "object" }, "name": "check_geneva_quasi_resident", "outputSchema": null }, { "description": "Is a commune in zone tendue, and which list (reduced tenant notice, or tax only)? · Une commune est-elle en zone tendue, et sur quelle liste (préavis réduit, ou fiscal seulement) ? — Checks whether a French commune is in the 'zone tendue' perimeter and — crucially — WHICH one: the first list (décret n° 2013-392 annex, 1,434 communes, agglomérations >50k) where the tenant's reduced 1-month notice applies, or the wider TLV tax perimeter added in 2023 where ONLY fiscal measures apply (widely mislabelled 'zone tendue' — the reduced notice does NOT apply there). Deterministic dataset lookup on DILA reference data (service-public.fr simulator dataset) — no AI involved. Provide insee_code, or commune (+ code_postal to disambiguate).", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "code_postal": { "description": "5-digit postal code — disambiguates homonym communes.", "pattern": "^[0-9]{5}$", "type": "string" }, "commune": { "description": "Commune name, e.g. 'Lyon'. Used when insee_code is not provided.", "maxLength": 80, "minLength": 1, "type": "string" }, "insee_code": { "description": "INSEE commune code (5 chars, e.g. 75056 for Paris, 2A004 for Ajaccio). Preferred when known — skips name resolution.", "pattern": "^[0-9][0-9ABab][0-9]{3}$", "type": "string" } }, "type": "object" }, "name": "check_zone_tendue", "outputSchema": null }, { "description": "Family allowances: Swiss vs French for a frontalier. · Allocations familiales : Suisse ou France pour un frontalier. — Compares the family allowances a cross-border worker's household is due under the Swiss canton's rules (BSV 2026 table, LAFam art. 3 age limits; paid monthly with the salary) vs the French CAF (F13213 amounts, modulated by the household's N-2 resources band), and the EU 883/2004 art. 68 differential when the other parent has an activity or an assimilated situation in France. Deterministic official tables — no AI. Returns Swiss monthly + annual (CHF), CAF monthly (EUR), the differential, per-child detail, the notes and the data year.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "caf_income_band": { "description": "The household's CAF resources band (revenu net catégoriel of year N-2; service-public F13213): full rate, half or quarter. Omitted → full rate, and the result says so.", "enum": [ "full", "half", "quarter" ], "type": "string" }, "canton": { "description": "Swiss canton of work — two-letter code, any of the 26 cantons.", "enum": [ "AG", "AI", "AR", "BE", "BL", "BS", "FR", "GE", "GL", "GR", "JU", "LU", "NE", "NW", "OW", "SG", "SH", "SO", "SZ", "TG", "TI", "UR", "VD", "VS", "ZG", "ZH" ], "type": "string" }, "children": { "description": "The children (at least one).", "items": { "properties": { "age": { "description": "Child's completed age.", "maximum": 30, "minimum": 0, "type": "integer" }, "in_training": { "description": "In post-compulsory training (training allowance from 15 at the earliest, until 25 at the latest — LAFam art. 3), or still at school after 16.", "type": "boolean" }, "incapable": { "description": "Unable to exercise a gainful activity (art. 7 LPGA): child allowance until 20.", "type": "boolean" } }, "required": [ "age" ], "type": "object" }, "maxItems": 10, "minItems": 1, "type": "array" }, "spouse_works_in_france": { "description": "Does the OTHER parent have an activity in France (employed or self-employed) or an assimilated situation there (French unemployment, sickness or maternity benefits, paid leave, parental leave treated as activity — Decision F1)? Yes → the CAF pays first and Switzerland pays the difference (Reg. 883/2004 art. 68).", "type": "boolean" } }, "required": [ "canton", "children" ], "type": "object" }, "name": "compare_family_allowances", "outputSchema": null }, { "description": "Frontalier health cover: LAMal (CH) vs CMU/PUMa (FR). · Couverture santé frontalier : LAMal (CH) ou CMU (FR). — Estimates the monthly cost of the two health-insurance options a France–Switzerland cross-border worker chooses between (droit d'option): Swiss LAMal (in CHF) vs the French contribution (in EUR, 8 % of the worker's OWN income of year N-2 above 25 % of the PASS — CSS art. L. 380-3-1 IV and D. 380-2). Give income_n2_eur (own net income as declared); without it the French figure is an UPPER estimate from the gross salary, flagged as such. Dependants are priced by age band (0-18 child, 19-25 young adult, 26+ adult). Deterministic official premium/rate tables — no AI. Returns both monthly figures, the rules of the option (window, reception by the Swiss authority, default, who has it) and how to transmit the form. Recommends neither system.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "age": { "description": "Worker's age.", "maximum": 80, "minimum": 16, "type": "integer" }, "canton": { "description": "Swiss canton of work — two-letter code, any of the 26 cantons.", "enum": [ "AG", "AI", "AR", "BE", "BL", "BS", "FR", "GE", "GL", "GR", "JU", "LU", "NE", "NW", "OW", "SG", "SH", "SO", "SZ", "TG", "TI", "UR", "VD", "VS", "ZG", "ZH" ], "type": "string" }, "children_ages": { "description": "Ages of dependants (optional) — priced by band (≤18 / 19-25 / 26+).", "items": { "maximum": 30, "minimum": 0, "type": "integer" }, "maxItems": 10, "type": "array" }, "income_n2_eur": { "description": "The worker's OWN income of year N-2 in EUR, net, as declared (salaries + other own income; half of income held in common) — the base of the French contribution (CSS D. 380-2). Not the household revenu fiscal de référence.", "maximum": 5000000, "minimum": 0, "type": "number" }, "salary_chf": { "description": "Annual gross Swiss salary in CHF — used only when income_n2_eur is missing, and then the French figure is an upper estimate.", "maximum": 2000000, "minimum": 0, "type": "number" } }, "required": [ "age", "canton" ], "type": "object" }, "name": "compare_lamal_cmu", "outputSchema": null }, { "description": "FREE — no account needed. · GRATUIT, sans compte : quittance de loyer en PDF. — Rent receipt (quittance de loyer, loi n° 89-462 art. 21) PDF from the data you give: landlord, tenant, property address, period, rent and charges, payment date. Deterministic template engine — a fixed legal template filled with the given data, not AI-generated content. The document is issued in FRENCH (required for legal validity); includeEnglish appends a non-binding English reference translation. Nothing is stored: the PDF is available for 24 hours through a single-use link, then deleted — no account, no property, no history. Per-network caps apply (a structured rate_limited result says when to retry). Have the landlord verify every field before sending it to the tenant. BLANK MENTIONS: what is not given is printed blank, never invented. Before the document is produced, the tool answers needs_input with blank_mentions — the mentions that would be blank, as printed: show the landlord the list and complete them, or pass acknowledge_incomplete: true once the landlord has chosen to leave them blank. A generated document returns printed_blank, the mentions to complete by hand. With an AdminLanding account the same receipt is pre-filled from your saved properties, the tenant is stamped from the record so their name never passes through the assistant, receipts are kept in your history and shared through the tenant portal, and leases can be sent for e-signature — €4.90 — one document for this property (buy in the web app), or Membership — €6 a month or €59 a year, renewed automatically, cancel any time from the account: every rental document on up to 10 properties (€1 a month or €10 a year per extra property), plus home employment, cross-border, letters and patrimoine; first property free (10 documents). Payment happens in the browser, never through the agent. General information/document tooling, not legal advice.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "acknowledge_incomplete": { "description": "Set ONLY after the tool has returned status:'needs_input' — with blank_mentions, the mentions the document would print blank — you have shown the landlord that list, and the landlord has explicitly chosen to generate the document with those mentions left blank, to complete them by hand before signing or sending. Never set this on a first call. It never waives a refusal: a missing mandatory input, an unlawful value or an input that would not be printed stays refused.", "type": "boolean" }, "chargesAmount": { "description": "Charges (provisions/forfait), in euros, as a string ('0' if none).", "pattern": "^[0-9]+([.,][0-9]{1,2})?$", "type": "string" }, "includeEnglish": { "description": "Append a non-binding English reference translation as the last page. The legal document itself stays French.", "type": "boolean" }, "issuedAt": { "description": "City where the receipt is issued, printed « Fait à … ». Ask the landlord — it is never taken from an address. Omitted, the mention is blank. The date next to it is the day of issue (today, date in France).", "maxLength": 120, "minLength": 1, "type": "string" }, "landlordAddress": { "description": "Landlord's address.", "maxLength": 200, "minLength": 1, "type": "string" }, "landlordName": { "description": "Landlord's full name, or the company's name (bailleur). With an account, a company is designated from the landlord profile — « (société) », SIRET — when this name is the profile's; without one, write the designation here.", "maxLength": 200, "minLength": 1, "type": "string" }, "locale": { "description": "Filename/interface language only — the document is always issued in French (required for validity). Default fr.", "enum": [ "en", "fr" ], "type": "string" }, "paymentDate": { "description": "Date the landlord RECEIVED the payment (ISO date).", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "paymentMethod": { "description": "Payment method as the landlord states it (e.g. 'Virement bancaire', 'Chèque'), printed after « Mode de paiement ». NO default: omitted, the mention is blank. Never guess it.", "maxLength": 200, "minLength": 1, "type": "string" }, "periodFrom": { "description": "Rental period start (ISO date, e.g. 2026-08-01).", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "periodTo": { "description": "Rental period end (ISO date). The receipt month is derived from this date.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "propertyAddress": { "description": "Address of the rented dwelling.", "maxLength": 200, "minLength": 1, "type": "string" }, "rentAmount": { "description": "Rent RECEIVED, excluding charges, in euros, as a string (e.g. '850' or '850.50'). Above 0: a receipt of nothing is refused.", "pattern": "^[0-9]+([.,][0-9]{1,2})?$", "type": "string" }, "tenantName": { "description": "Tenant's full name (locataire) as it must appear on the receipt.", "maxLength": 200, "minLength": 1, "type": "string" } }, "required": [ "landlordName", "landlordAddress", "tenantName", "propertyAddress", "periodFrom", "periodTo", "paymentDate", "rentAmount", "chargesAmount" ], "type": "object" }, "name": "generate_rent_receipt", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:01386c6f9f989984f27ca31dfe9ddd10904247a93716d37b5832ffe1dea77411 | sha256sum