french-rental-compliance

FR/EN tools for French rental, frontalier & home-employment (CCN 3239) — sourced, dated answers.

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
100%
Integridad del esquema
99%
Calidad de los nombres
92%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Hallazgos (3)

  • LOWTool 'calculate_home_employment_end_of_contract' name length outside 3-30 rangeen calculate_home_employment_end_of_contract
  • LOWTool 'calculate_assistant_maternel_end_of_contract' name length outside 3-30 rangeen calculate_assistant_maternel_end_of_contract
  • LOWTool 'calculate_teletravail_frontalier' name length outside 3-30 rangeen calculate_teletravail_frontalier

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~8,373Tokens (definiciones de herramientas)
~4.3 KBTamaño de respuesta típico
Impacto significativo en la atención (6.54% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "french-rental-compliance": {
      "url": "https://api.adminlanding.com/mcp"
    }
  }
}

Puntos de conexión remotos

https://api.adminlanding.com/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (13)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢check_zone_tendue(insee_code, commune, code_postal)

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).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "insee_code": {
      "description": "INSEE commune code (5 chars, e.g. 75056 for Paris, 2A004 for Ajaccio). Preferred when known — skips name resolution.",
      "type": "string",
      "pattern": "^[0-9][0-9ABab][0-9]{3}$"
    },
    "commune": {
      "description": "Commune name, e.g. 'Lyon'. Used when insee_code is not provided.",
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "code_postal": {
      "description": "5-digit postal code — disambiguates homonym communes.",
      "type": "string",
      "pattern": "^[0-9]{5}$"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢calculate_tenant_notice_period(lease_type, insee_code, commune, code_postal, zone_tendue, ...)

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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "lease_type": {
      "type": "string",
      "enum": [
        "vide",
        "meuble"
      ],
      "description": "'vide' = unfurnished, 'meuble' = furnished"
    },
    "insee_code": {
      "description": "INSEE commune code (5 chars, e.g. 75056 for Paris, 2A004 for Ajaccio). Preferred when known — skips name resolution.",
      "type": "string",
      "pattern": "^[0-9][0-9ABab][0-9]{3}$"
    },
    "commune": {
      "description": "Commune name, e.g. 'Lyon'. Used when insee_code is not provided.",
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "code_postal": {
      "description": "5-digit postal code — disambiguates homonym communes.",
      "type": "string",
      "pattern": "^[0-9]{5}$"
    },
    "zone_tendue": {
      "description": "Explicit zone-tendue (first list) flag if already known — otherwise resolved from insee_code/commune.",
      "type": "boolean"
    },
    "ground_id": {
      "description": "Statutory ground for the reduced 1-month notice on an unfurnished lease (art. 15 I).",
      "type": "string",
      "enum": [
        "premier_emploi",
        "mutation",
        "perte_emploi",
        "nouvel_emploi",
        "sante",
        "rsa_aah",
        "logement_social",
        "violences"
      ]
    },
    "reception_date": {
      "description": "ISO date the LANDLORD RECEIVES the notice (LRAR reception, remise en main propre, or acte de commissaire) — never the sending date.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    }
  },
  "required": [
    "lease_type"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢calculate_home_employment_end_of_contract(party, end_reason, start_date, notification_date, as_of_date, ...)

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, 6-month settlement contest window, and the end-of-contract documents with who produces and who receives each. 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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "party": {
      "type": "string",
      "enum": [
        "employer",
        "employee"
      ],
      "description": "Who is asking: 'employer' (particulier employeur) or 'employee' (salarié / assistant maternel). Wording only — the figures are identical for both."
    },
    "end_reason": {
      "type": "string",
      "enum": [
        "employer_termination",
        "resignation",
        "mutual_termination"
      ],
      "description": "Closed category matching the letter: 'employer_termination' (licenciement / retrait d'enfant), 'resignation' (démission), 'mutual_termination' (rupture conventionnelle — not available for assistants maternels)."
    },
    "start_date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Contract start (ISO)."
    },
    "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 signature date. Omit for durations only.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "as_of_date": {
      "description": "Seniority reference date when the letter has not been sent yet (planning). Ignored when notification_date is given.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "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"
    },
    "regime": {
      "type": "string",
      "enum": [
        "home_employee",
        "garde_domicile",
        "assistant_maternel"
      ],
      "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)."
    },
    "convocation_date": {
      "description": "Employer termination only: first presentation of the convocation à l'entretien préalable → earliest entretien date (CCN art. 161.1.1.1).",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "hourly_gross": {
      "description": "Gross hourly rate in € (home employee / garde à domicile).",
      "type": "number",
      "minimum": 0,
      "maximum": 500
    },
    "weekly_hours": {
      "description": "Weekly hours (mensualisation = hourly × hours × 52 / 12).",
      "type": "number",
      "minimum": 0,
      "maximum": 80
    },
    "avg_12_months_gross": {
      "description": "Optional — average gross monthly pay over the last 12 months (art. 163.1 reference).",
      "type": "number",
      "minimum": 0
    },
    "avg_3_months_gross": {
      "description": "Optional — average gross monthly pay over the last 3 months (the more favourable average is used).",
      "type": "number",
      "minimum": 0
    },
    "am_monthly_gross": {
      "description": "Assistant maternel: monthly gross (mensualisation), EXCLUDING indemnités d'entretien, repas, kilométriques.",
      "type": "number",
      "minimum": 0
    },
    "am_total_gross_paid": {
      "description": "Assistant maternel: optional total gross salaries paid since the start (art. 121.1 base). Defaults to mensualisation × complete months.",
      "type": "number",
      "minimum": 0
    }
  },
  "required": [
    "party",
    "end_reason",
    "start_date",
    "regime"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢calculate_assistant_maternel_end_of_contract(party, end_reason, start_date, notification_date, as_of_date, ...)

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), last Pajemploi declaration, 6-month settlement contest window, documents with who produces and who receives each. 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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "party": {
      "type": "string",
      "enum": [
        "employer",
        "employee"
      ],
      "description": "Who is asking: 'employer' (particulier employeur) or 'employee' (salarié / assistant maternel). Wording only — the figures are identical for both."
    },
    "end_reason": {
      "type": "string",
      "enum": [
        "employer_termination",
        "resignation",
        "mutual_termination"
      ],
      "description": "Closed category matching the letter: 'employer_termination' (licenciement / retrait d'enfant), 'resignation' (démission), 'mutual_termination' (rupture conventionnelle — not available for assistants maternels)."
    },
    "start_date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Contract start (ISO)."
    },
    "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 signature date. Omit for durations only.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "as_of_date": {
      "description": "Seniority reference date when the letter has not been sent yet (planning). Ignored when notification_date is given.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "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"
    },
    "am_monthly_gross": {
      "description": "Assistant maternel: monthly gross (mensualisation), EXCLUDING indemnités d'entretien, repas, kilométriques.",
      "type": "number",
      "minimum": 0
    },
    "am_total_gross_paid": {
      "description": "Assistant maternel: optional total gross salaries paid since the start (art. 121.1 base). Defaults to mensualisation × complete months.",
      "type": "number",
      "minimum": 0
    }
  },
  "required": [
    "party",
    "end_reason",
    "start_date"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢check_dpe_rental_restrictions(dpe_class, dpe_issue_date)

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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "dpe_class": {
      "type": "string",
      "enum": [
        "A",
        "B",
        "C",
        "D",
        "E",
        "F",
        "G"
      ],
      "description": "Energy class from the dwelling's DPE."
    },
    "dpe_issue_date": {
      "description": "ISO issue date of the DPE — enables the validity check.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    }
  },
  "required": [
    "dpe_class"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢calculate_deposit_restitution(deposit, rent_hors_charges, key_return_date, edl_outcome, restitution_date, ...)

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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "deposit": {
      "type": "number",
      "minimum": 0,
      "maximum": 1000000,
      "description": "Deposit paid at move-in (€)."
    },
    "rent_hors_charges": {
      "type": "number",
      "minimum": 0,
      "maximum": 1000000,
      "description": "Monthly rent en principal, excluding charges (€)."
    },
    "key_return_date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Date the keys were handed back (remise des clés), ISO date — the deadline runs from this day."
    },
    "edl_outcome": {
      "type": "string",
      "enum": [
        "identical",
        "differences"
      ],
      "description": "'identical' when the exit état des lieux matches the entry one (1-month deadline); 'differences' otherwise (2 months)."
    },
    "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).",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "lease_type": {
      "description": "'vide' unfurnished (deposit cap 1 month) or 'meuble' furnished (cap 2 months). Never presumed: omitted, no cap is computed.",
      "type": "string",
      "enum": [
        "vide",
        "meuble"
      ]
    },
    "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"
    },
    "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"
    },
    "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.",
      "type": "number",
      "minimum": 0,
      "maximum": 1000000
    },
    "provision_justification": {
      "description": "What justifies the provision (e.g. 'arrêté provisoire des comptes du 15/09/2026').",
      "type": "string",
      "minLength": 1,
      "maxLength": 300
    },
    "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"
    },
    "damages": {
      "description": "Damage lines to apportion. Omit for a full restitution.",
      "maxItems": 30,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "item": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "description": "What is damaged / repaired (plain words)."
          },
          "cost": {
            "type": "number",
            "minimum": 0,
            "maximum": 1000000,
            "description": "Justified repair cost (quote or invoice), €."
          },
          "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.",
            "type": "number",
            "minimum": 0,
            "maximum": 80
          },
          "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.",
            "type": "string",
            "enum": [
              "peinture",
              "papier_peint",
              "moquette",
              "sol_souple",
              "parquet_vitrification",
              "robinetterie",
              "chauffe_eau",
              "electromenager",
              "volets_stores"
            ]
          },
          "lifespan_years": {
            "description": "Lease-annexed grille: theoretical lifespan of the element (overrides the category).",
            "type": "number",
            "minimum": 1,
            "maximum": 60
          },
          "franchise_years": {
            "description": "Lease-annexed grille: franchise in years.",
            "type": "number",
            "minimum": 0,
            "maximum": 20
          },
          "annual_rate_pct": {
            "description": "Lease-annexed grille: annual abatement in % (omit for a linear abatement over the lifespan).",
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "residual_pct": {
            "description": "Lease-annexed grille: residual share in % (default 0).",
            "type": "number",
            "minimum": 0,
            "maximum": 100
          }
        },
        "required": [
          "item",
          "cost"
        ]
      }
    },
    "perspective": {
      "description": "Who is asking — changes only the next_steps wording, never the figures.",
      "type": "string",
      "enum": [
        "landlord",
        "tenant"
      ]
    }
  },
  "required": [
    "deposit",
    "rent_hors_charges",
    "key_return_date",
    "edl_outcome"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢calculate_rent_revision(current_rent, reference_quarter, revision_date, dpe_class)

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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "current_rent": {
      "type": "number",
      "exclusiveMinimum": 0,
      "description": "Current monthly rent excluding charges (hors charges), in euros."
    },
    "reference_quarter": {
      "type": "string",
      "minLength": 2,
      "maxLength": 20,
      "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."
    },
    "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.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "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).",
      "type": "string",
      "enum": [
        "A",
        "B",
        "C",
        "D",
        "E",
        "F",
        "G"
      ]
    }
  },
  "required": [
    "current_rent",
    "reference_quarter"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢calculate_net_swiss_salary(gross_chf_annual, age, canton)

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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "gross_chf_annual": {
      "type": "number",
      "minimum": 1000,
      "maximum": 1000000,
      "description": "Gross annual salary in CHF."
    },
    "age": {
      "type": "integer",
      "minimum": 16,
      "maximum": 80,
      "description": "Employee age (affects LPP rate)."
    },
    "canton": {
      "type": "string",
      "enum": [
        "GE",
        "VD",
        "JU",
        "NE",
        "BS",
        "VS"
      ],
      "description": "Swiss border canton (GE, VD, JU, NE, BS, VS)."
    }
  },
  "required": [
    "gross_chf_annual",
    "age",
    "canton"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢compare_lamal_cmu(salary_chf, age, canton, children_ages)

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 French CMU/PUMa (in EUR, a % of income). 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 data year, plus how to transmit the signed choice form (the CPAM's dedicated online téléservice).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "salary_chf": {
      "type": "number",
      "minimum": 0,
      "maximum": 2000000,
      "description": "Annual Swiss salary in CHF."
    },
    "age": {
      "type": "integer",
      "minimum": 16,
      "maximum": 80,
      "description": "Worker's age."
    },
    "canton": {
      "type": "string",
      "enum": [
        "GE",
        "VD",
        "JU",
        "NE",
        "BS",
        "VS"
      ],
      "description": "Swiss border canton (GE, VD, JU, NE, BS, VS)."
    },
    "children_ages": {
      "description": "Ages of dependants (optional) — priced by band (≤18 / 19-25 / 26+).",
      "maxItems": 10,
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 0,
        "maximum": 30
      }
    }
  },
  "required": [
    "salary_chf",
    "age",
    "canton"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢calculate_teletravail_frontalier(telework_days_per_week, days_per_week, mission_days_per_year, swiss_employment_start, as_of_date)

Frontalier telework thresholds (FR–CH): 40 % tax and 49.9 % social security, reported separately. · Télétravail frontalier : seuils fiscal 40 % et sécurité sociale 49,9 %, distingués. — 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 applicable since 01/01/2026 vs the EU/EFTA social-security framework agreement since 01/07/2023), the remaining telework days before each is crossed, and how many temporary mission days count inside the allowance (≤ 10 a year). Optional: the 3-month LAMal/CMU droit d'option window from the Swiss employment start date. 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).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "telework_days_per_week": {
      "type": "number",
      "minimum": 0,
      "maximum": 7,
      "description": "Days per week worked from home in France (fractions allowed, e.g. 1.5)."
    },
    "days_per_week": {
      "description": "Contractual working days per week (1–7). Default 5.",
      "type": "number",
      "minimum": 1,
      "maximum": 7
    },
    "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.",
      "type": "integer",
      "minimum": 0,
      "maximum": 60
    },
    "swiss_employment_start": {
      "description": "YYYY-MM-DD the Swiss employment began — adds the 3-month LAMal/CMU droit d'option window.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "as_of_date": {
      "description": "YYYY-MM-DD reference date for the option window (default: today) — makes the answer reproducible.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    }
  },
  "required": [
    "telework_days_per_week"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢compare_family_allowances(canton, children, spouse_works_in_france)

Family allowances: Swiss vs French for a frontalier. · Allocations familiales : Suisse ou France pour un frontalier. — Compares the monthly/annual family allowances a cross-border worker's household is due under the Swiss canton's rules vs French CAF, and the EU 883/2004 differential top-up when the spouse works in France. Deterministic official allowance tables — no AI. Returns Swiss annual + monthly base (CHF), CAF monthly (EUR), the differential, and the data year.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "canton": {
      "type": "string",
      "enum": [
        "GE",
        "VD",
        "JU",
        "NE",
        "BS",
        "VS"
      ],
      "description": "Swiss border canton (GE, VD, JU, NE, BS, VS)."
    },
    "children": {
      "minItems": 1,
      "maxItems": 10,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "age": {
            "type": "integer",
            "minimum": 0,
            "maximum": 30,
            "description": "Child's age."
          },
          "in_training": {
            "description": "In education/training (extends eligibility).",
            "type": "boolean"
          }
        },
        "required": [
          "age"
        ]
      },
      "description": "The children (at least one)."
    },
    "spouse_works_in_france": {
      "description": "Does the spouse work in France? (triggers the EU differential).",
      "type": "boolean"
    }
  },
  "required": [
    "canton",
    "children"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢check_geneva_quasi_resident(swiss_income, total_income)

Geneva quasi-resident status (≥90% income taxed in CH). · Statut de quasi-résident genevois (≥90% des revenus imposés en CH). — Tells a Geneva cross-border worker whether they qualify as a quasi-résident — i.e. at least ~90% of the household's worldwide income is taxable in Switzerland — which unlocks itemised deductions on the Geneva tax return. Deterministic threshold rule — no AI. Returns eligibility, the share, the threshold, and the data year.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "swiss_income": {
      "type": "number",
      "minimum": 0,
      "maximum": 100000000,
      "description": "Income taxable in Switzerland (same currency as total_income)."
    },
    "total_income": {
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 100000000,
      "description": "Total worldwide household income (same currency)."
    }
  },
  "required": [
    "swiss_income",
    "total_income"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢generate_rent_receipt(landlordName, landlordAddress, tenantName, propertyAddress, periodFrom, ...)

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 €49 — 50 documents (€39 each additional property); first property free (10 documents). Payment happens in the browser, never through the agent. General information/document tooling, not legal advice.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "landlordName": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "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."
    },
    "landlordAddress": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Landlord's address."
    },
    "tenantName": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Tenant's full name (locataire) as it must appear on the receipt."
    },
    "propertyAddress": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Address of the rented dwelling."
    },
    "periodFrom": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Rental period start (ISO date, e.g. 2026-08-01)."
    },
    "periodTo": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Rental period end (ISO date). The receipt month is derived from this date."
    },
    "paymentDate": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Date the landlord RECEIVED the payment (ISO date)."
    },
    "rentAmount": {
      "type": "string",
      "pattern": "^[0-9]+([.,][0-9]{1,2})?$",
      "description": "Rent RECEIVED, excluding charges, in euros, as a string (e.g. '850' or '850.50'). Above 0: a receipt of nothing is refused."
    },
    "chargesAmount": {
      "type": "string",
      "pattern": "^[0-9]+([.,][0-9]{1,2})?$",
      "description": "Charges (provisions/forfait), in euros, as a string ('0' if none)."
    },
    "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.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "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).",
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "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"
    },
    "includeEnglish": {
      "description": "Append a non-binding English reference translation as the last page. The legal document itself stays French.",
      "type": "boolean"
    },
    "locale": {
      "description": "Filename/interface language only — the document is always issued in French (required for validity). Default fr.",
      "type": "string",
      "enum": [
        "en",
        "fr"
      ]
    }
  },
  "required": [
    "landlordName",
    "landlordAddress",
    "tenantName",
    "propertyAddress",
    "periodFrom",
    "periodTo",
    "paymentDate",
    "rentAmount",
    "chargesAmount"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada13 herramientas
verificadoversión no registrada13 herramientas