Install
openclaw skills install @vestafolio/vestafolio-micro-foncier-vs-reelCompare unfurnished rental taxation between micro-foncier and régime réel with déficit foncier using Vestafolio's simulator API, after asking the simulator's questions (unfurnished or not, gross rents, six charge lines, TMI, prior deficit). Use when a user asks "micro-foncier ou régime réel", how location nue rental income is taxed in France, about the 30 % abattement, the 15 000 € micro-foncier ceiling, déficit foncier imputation on global income, or which regime saves more tax on revenus fonciers.
openclaw skills install @vestafolio/vestafolio-micro-foncier-vs-reelFor a request within this simulator's scope:
https://www.vestafolio.com, summarize the fields and
values to be sent, and obtain the user's agreement. Existing explicit
approval for this destination and data scope is sufficient; do not ask
again for calls it already covers. Installing or selecting the skill alone
is not approval to transmit personal data. If the user declines, do not
POST; offer the simulator link for manual use without prefilled inputs.execute_code in OpenWebUI). Python can use
urllib.request; in browser-based Pyodide use await pyfetch(...) from
pyodide.http. A Python environment does not need a shell to call the API.ok must be true; read the
calculation from result. Ground the answer in that output, state relevant
assumptions and limits. Offer the simulator link when useful for checking
assumptions or exploring alternatives; respect requests for no links.Writing a code block is not execution. Do not substitute mental arithmetic, remembered tax rules, or the worked example for a tool result. If execution or network access is unavailable, or the API fails, say the calculation could not be completed and provide the simulator link; do not invent its result or recommendation. A schema GET alone is not a completed simulation.
Reply in French whenever the user speaks or writes in French.
Compares the taxation of an unfurnished rental (location nue) under the micro-foncier (flat 30 % abattement) and the régime réel (real charges and déficit foncier), with the recommended regime, annual savings and the break-even charges level. The rules below are the ones coded in the simulator; use them to explain, and the API to compute.
The simulator opens with a gate, then three tabs. Ask or confirm each in French; do not assume a default for a question marked (gate).
annualRent (« Seuil
micro-foncier : 15 000 € »; above it the site warns « Vous dépassez le
seuil du micro-foncier »).charges: « Intérêts d'emprunt » loanInterest,
« Taxe foncière » propertyTax, « Charges de copropriété » condoFees
(non-recoverable), « Assurance PNO » insurance, « Frais de gestion »
managementFees, « Travaux et réparations » repairs. Ask for each; the
site's defaults (3 000 € interest, 1 200 € tax, 1 800 € copropriété…) are
placeholders, not the user's figures. The site shows the charges ratio and
the break-even (30 % of rents) next to them.marginalTaxRate, one of 0, 11, 30, 41, 45 (estimate it with
vestafolio-impot-revenu if unknown), and « Déficit foncier antérieur » →
existingDeficit (« Déficit foncier des années précédentes reportable sur
les revenus fonciers pendant 10 ans. », 0 if none).breakEvenCharges = 30 % of the rents: above it the réel taxes less.regime_reel when micro-foncier is ineligible, when the
réel total tax is lower, or when a deficit is imputable on global income;
otherwise micro_foncier. annualSavings = micro tax − réel tax, floored
at 0.Always fetch the canonical input schema first (fields, bounds, defaults):
GET https://www.vestafolio.com/api/tools/v1/micro-foncier-vs-reel
Then POST the user's parameters (all amounts annual and in euros, TMI in percent):
curl --fail-with-body --silent --show-error --max-time 30 -X POST https://www.vestafolio.com/api/tools/v1/micro-foncier-vs-reel \
-H 'Content-Type: application/json' \
-d '{
"annualRent": 12000,
"charges": {
"loanInterest": 3000,
"propertyTax": 1200,
"condoFees": 1800,
"insurance": 300,
"managementFees": 0,
"repairs": 500
},
"marginalTaxRate": 30,
"existingDeficit": 0
}'
Unknown fields are rejected (strict schema) — if you get a validation_error,
re-read the schema from the GET endpoint rather than guessing field names.
recommendation — micro_foncier or regime_reel; microFoncier.isEligible
tells whether the réel was imposed by the 15 000 € ceilingannualSavings — yearly tax saved by the réel vs micro (0 if micro wins or
when the réel is chosen for its deficit)breakEvenCharges — the charges level above which the réel becomes more
advantageous; useful to explain the tipping pointmicroFoncier, reel): deductions, taxableIncome,
incomeTax, socialContributions, totalTax, netIncome, effectiveRatereel.deficit — resultBeforeDeficit, existingDeficitUsed, created,
usedAgainstIncome (« Imputé sur autres revenus ») and carriedForward
(« Reporté sur années suivantes », which includes the unused prior deficit)