Install
openclaw skills install @vestafolio/vestafolio-sasu-vs-eurlCompare SASU (président assimilé salarié) and EURL (gérant TNS) net director income for a French solo entrepreneur using Vestafolio's simulator API, after asking the simulator's questions (revenue, deductible charges, capital social, TMI, PFU vs barème, salary level per structure). Use when a user asks "SASU ou EURL", which company structure pays more, about cotisations sociales assimilé salarié vs TNS, dividend taxation in an EURL, or optimal salary vs dividendes split.
openclaw skills install @vestafolio/vestafolio-sasu-vs-eurlFor 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.
Computes, for the same annual revenue, the total net income of the director in a SASU (président assimilé salarié) versus an EURL at IS (gérant TNS): cotisations sociales, impôt sur les sociétés, impôt sur le revenu, dividend taxation, alerts and a recommendation with the annual net-income gap. The rules below are the ones coded in the simulator; use them to explain, and the API to compute.
The simulator collects these inputs in this order (card « Paramètres de votre activité »). Ask or confirm each one in French; do not assume a default for a question marked (gate).
targetRevenue (euros HT prévisionnels).chargesDeductibles (« Frais professionnels :
loyer, matériel, déplacements, etc. Déduites avant le calcul du
résultat. »). Must stay below the revenue.capitalSocial (« En EURL, les dividendes au-delà de
10% du capital sont soumis aux cotisations TNS. »). Ask it whenever
dividends are expected in the EURL: it moves the TNS threshold.marginalTaxRate, one
of 0, 11, 30, 41, 45. Send the same value as sasuMarginalTaxRate and
eurlMarginalTaxRate.https://www.vestafolio.com/api/tools/v1/impot-revenu. Include both calls
in the user's approval scope, or obtain agreement for this additional
data use if it was not covered. If declined, ask for a user-chosen TMI
assumption instead and label it as an assumption. With approval, fetch
that tool's schema and call the impot-revenu tool twice with
revenuNetImposable = other income + the gross salary of that structure
(see 6 and 7), the family situation, jointDeclaration true when
married, partnerIncome 0 and the children; use each marginalRate
× 100 as sasuMarginalTaxRate / eurlMarginalTaxRate, and the higher
of the two as marginalTaxRate.preferPFU: « PFU (Flat Tax
31,4 %) » = true, « Barème progressif (abattement 40%) » = false.sasuSalaryAmount, between
0 € (« 100% dividendes ») and the maximum 55 % × (CA − charges). Simulator
helper: « Les cotisations sociales sont calculées sur la base (CA -
charges). Vous choisissez ensuite le montant de rémunération brute à vous
verser. Le reste sera disponible en dividendes. » Omit the field to take
the maximum (all in salary, no dividends), as the simulator does by
default.eurlSalaryAmount, between
0 € and the maximum (CA − charges) / 1,45. Helper: « Les cotisations
sociales (45%) sont calculées sur la rémunération brute et déduites comme
charge de la société. Le reste du bénéfice est distribué en dividendes. »
Omit to take the maximum.When the user wants "the best split", run several salary levels (the
simulator has sliders) and compare netIncome; do not guess an optimum.
salaryBelowSmic when 0 < gross salary < 22 404,24 €
(SMIC annuel brut, 1 867,02 €/month since June 2026); highDividendRatio
when net dividends exceed 50 % of the director's net income.sasu if its net income is strictly higher, otherwise
eurl (ties go to EURL); annualSavings is the absolute gap. The
simulator gives no textual reason beyond the amount.Always fetch the canonical input schema first (fields, bounds, defaults):
GET https://www.vestafolio.com/api/tools/v1/sasu-vs-eurl
Then POST the user's parameters (all amounts annual, in euros; rates in percent):
curl --fail-with-body --silent --show-error --max-time 30 -X POST https://www.vestafolio.com/api/tools/v1/sasu-vs-eurl \
-H 'Content-Type: application/json' \
-d '{
"targetRevenue": 100000,
"chargesDeductibles": 10000,
"capitalSocial": 10000,
"marginalTaxRate": 30,
"sasuMarginalTaxRate": 30,
"eurlMarginalTaxRate": 30,
"sasuSalaryAmount": 30000,
"eurlSalaryAmount": 30000,
"preferPFU": true
}'
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.
Salary amounts above the maximum are capped silently: check
maxSalaryAvailable in the response.
recommendation — "sasu" or "eurl"; annualSavings — the net-income gapsasu, eurl): netIncome, totalTax,
effectiveRate, companyView (CA → charges → rémunération → cotisations →
résultat avant IS → IS → dividendes) and directorView (rémunération
brute, IR, rémunération nette, dividendes perçus, impôt dividendes, total)maxSalaryAvailable — tell the user when their requested salary was cappedalerts.salaryBelowSmic / alerts.highDividendRatio — relay the
simulator's warnings: « Le salaire brut est inférieur au SMIC annuel. Cela
peut limiter vos droits sociaux. » and « Les dividendes représentent plus
de 50% de vos revenus. Votre protection sociale sera réduite. »details.dividendIR, details.dividendPS, details.tnsContributions —
the EURL TNS on dividends is dividendTax minus IR and PSbreakdownComparison — SASU vs EURL table (charges sociales, IS,
fiscalité des dividendes, total prélèvements, revenu net)