{"protocolVersion":"0.3.0","name":"fr-legal-kit","description":"French legal kit for agents: e-invoice obligation calendar (Sep 2026 reform), L441-10 penalties, SIRET/IBAN checksums. Paid x402 USDC on Base.","url":"https://fr-legal-kit.monnet-yanis1.workers.dev/a2a","version":"1.0.0","provider":{"organization":"Yanis Monnet EI","url":"https://fr-legal-kit.monnet-yanis1.workers.dev"},"capabilities":{"streaming":false,"pushNotifications":false},"defaultInputModes":["application/json"],"defaultOutputModes":["application/json"],"skills":[{"id":"late-penalties","name":"/v1/late-penalties","description":"French L441-10 late-payment: BCE MRO+10pts interest + 40€ indemnity (D.441-5) from amount_ttc and days_late. Default MRO 2.40% (H2 2026, ECB). No live BCE fetch.","tags":["france","invoice","L441-10","penalties","legal"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"einvoice-who","name":"/v1/einvoice-who","description":"French e-invoice calendar: who must receive (2026-09-01 all) vs emit (GE/ETI 2026, PME/micro 2027). Size in, dates out. No registry lookup.","tags":["france","e-invoice","facture-electronique","pdp","2026"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"check-siret","name":"/v1/check-siret","description":"SIRET/SIREN checksum (Luhn / La Poste). Does not call INSEE.","tags":["france","siret","luhn","checksum"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"check-iban","name":"/v1/check-iban","description":"IBAN ISO 13616 checksum. Does not prove the account exists.","tags":["iban","checksum","payments"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"due-date","name":"/v1/due-date","description":"French invoice due date: invoice_date + net_days (calendar). Also next_open_day skipping weekends + L.3133-1 holidays 2026–2027. No live calendar fetch.","tags":["france","invoice","due-date","jours-feries"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"tva-rate","name":"/v1/tva-rate","description":"Indicative FR VAT rate table: standard 20 / intermediate 10 / reduced 5.5 / super_reduced 2.1 / exempt. Not a tax ruling.","tags":["france","tva","vat","cgi"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"holidays","name":"/v1/holidays","description":"French metropolitan public holidays for 2026 or 2027 (C. trav. L.3133-1). Optional Alsace-Moselle extras. No live fetch.","tags":["france","jours-feries","calendar","invoice"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"payment-term-max","name":"/v1/payment-term-max","description":"Statutory ceiling on agreed FR B2B payment terms: 60 days after invoice issue, or 45 days end-of-month if stipulated (L441-10 I). Not a recommended term.","tags":["france","invoice","L441-10","payment-terms"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"mention-fields","name":"/v1/mention-fields","description":"Checklist of French invoice/quote legal mention fields (L441-9, L441-10, 293 B). JSON in, list of required ids out. No lookup.","tags":["france","invoice","mentions","293B","L441-9"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"vat-key","name":"/v1/vat-key","description":"French intra-community VAT identifier from SIREN: FR + 2-digit key + SIREN. Key = (12 + 3*(siren%97))%97 (CGI 286 ter). Not a VIES proof.","tags":["france","tva","vat","siren","286ter"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"penalty-text","name":"/v1/penalty-text","description":"Statutory L441-10 / D.441-5 invoice mention strings (rate BCE MRO+10 pts + 40 € indemnity). No amount required. Default MRO 2.40% H2 2026.","tags":["france","invoice","L441-10","mentions","penalties"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"franchise-293b","name":"/v1/franchise-293b","description":"CGI 293 B franchise-en-base 2026 thresholds (services 37 500/41 250, goods 85 000/93 500) plus the statutory invoice mention. 25 000 € unique threshold was abandoned. Not a tax ruling.","tags":["france","tva","293B","franchise","invoice"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"dunning-steps","name":"/v1/dunning-steps","description":"Suggested FR B2B dunning calendar after the due date (J+1 / J+8 / J+15). L441-10 penalties accrue without a reminder. Usage, not a statutory timetable.","tags":["france","invoice","dunning","relance","L441-10"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"open-days","name":"/v1/open-days","description":"Inclusive count of French metropolitan open days between two dates (skip Sat/Sun + L.3133-1 holidays 2026–2027). Optional Alsace-Moselle extras.","tags":["france","calendar","jours-ouvres","jours-feries"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"invoice-numbering","name":"/v1/invoice-numbering","description":"French invoice numbering helper (C. com. L441-9): unique chronological sequence, no gaps. Returns next number from last_number plus the statutory rules.","tags":["france","invoice","L441-9","numbering"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"amount-words","name":"/v1/amount-words","description":"French amount in words for invoices (douze euros et quarante centimes). Traditional hyphenation. Not a statutory mention.","tags":["france","invoice","montant","lettres"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"alsace-holidays","name":"/v1/alsace-holidays","description":"Alsace-Moselle extra public holidays (Good Friday + St Stephen) plus the combined 2026–2027 calendar. In addition to L.3133-1 metropolitan days.","tags":["france","alsace","moselle","jours-feries","calendar"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"due-date-eom","name":"/v1/due-date-eom","description":"French 45-days-end-of-month due date (L441-10 I derogation). Statutory reading: 45 days after month-end of the invoice. Alternate usage: +45 then EOM. Must be stipulated.","tags":["france","invoice","L441-10","due-date","fin-de-mois"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"ht-ttc","name":"/v1/ht-ttc","description":"French HT ↔ TTC using CGI indicative rates (20 / 10 / 5.5 / 2.1 / 0). Pass exactly one of amount_ht or amount_ttc. Not a tax ruling.","tags":["france","tva","invoice","ht","ttc"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"days-late","name":"/v1/days-late","description":"Calendar days late from due_date to as_of (L441-10 periods are calendar). Also accepts invoice_date + net_days. Feed days_late into /v1/late-penalties.","tags":["france","invoice","L441-10","late","calendar"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"siren-from-siret","name":"/v1/siren-from-siret","description":"Split a French SIRET into SIREN + NIC, checksum both (Luhn / La Poste), and compute the CGI 286 ter VAT key. No INSEE lookup.","tags":["france","siret","siren","vat","checksum"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"quote-validity","name":"/v1/quote-validity","description":"French quote (devis) validity calendar. Default 30 days from quote_date. Commercial usage, not L441-9. Returns expiry and a collable mention.","tags":["france","devis","quote","validity"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"ape-naf","name":"/v1/ape-naf","description":"French APE/NAF rev.2 format check: 4 digits + 1 letter (62.01Z). No INSEE lookup of the label.","tags":["france","ape","naf","invoice","checksum"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"postcode-fr","name":"/v1/postcode-fr","description":"French 5-digit postcode: department prefix (Corsica 2A/2B, overseas 97x). No address lookup. Flags Alsace-Moselle 57/67/68.","tags":["france","postcode","invoice","address"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"legal-form","name":"/v1/legal-form","description":"Extra French invoice mentions by legal form (EI/micro vs SARL/SAS/SA/SCI): EI quality, 293 B, capital, RCS. On top of /v1/mention-fields.","tags":["france","invoice","mentions","ei","sas","L441-9"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"iban-fr","name":"/v1/iban-fr","description":"French IBAN structure: 27 chars, bank/branch/account/RIB key, plus ISO 13616 checksum. Does not prove the account exists.","tags":["france","iban","payments","rib"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"credit-note","name":"/v1/credit-note","description":"French credit note (avoir): next number in a dedicated AV- sequence, collable CGI 289 mention referencing the original invoice, optional HT/TTC reversal. Does not reuse the cancelled invoice number (L441-9).","tags":["france","invoice","avoir","credit-note","L441-9","CGI-289"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"phone-fr","name":"/v1/phone-fr","description":"French phone format (ARCEP numbering plan): 10-digit national or +33/0033 → E.164, grouped mention, kind mobile/geo/voip/overseas. No subscriber lookup.","tags":["france","phone","invoice","e164","arcep"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"capital-social","name":"/v1/capital-social","description":"French share-capital invoice mention for sociétés (SAS/SARL/SA/SCI): 'au capital de 1 000,00 €', optional variable capital. EI/micro have no capital. Format only, not a Kbis.","tags":["france","invoice","capital","sas","sarl","L441-9"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"rcs-mention","name":"/v1/rcs-mention","description":"French RCS invoice mention: 'RCS Pau 404 833 048' from greffe city + SIREN/SIRET. Format only, not a Kbis lookup.","tags":["france","invoice","rcs","greffe","L441-9"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"invoice-currency","name":"/v1/invoice-currency","description":"French invoice currency: EUR is legal tender. Foreign ISO 4217 (USD/GBP/CHF/CAD/JPY) allowed; VAT is expressed in euros. Offline subset, no FX rate.","tags":["france","invoice","currency","eur","tva"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"escompte","name":"/v1/escompte","description":"French invoice early-payment discount mention (L441-9 / L441-10): collable 'Pas d'escompte pour paiement anticipé.' or 'Escompte de X % pour paiement sous N jours.'","tags":["france","invoice","escompte","L441-10","L441-9"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"acompte","name":"/v1/acompte","description":"French down-payment (acompte) invoice: next AC- number, 30% default or explicit %, remaining TTC, collable CGI 289 mention. Own L441-9 sequence.","tags":["france","invoice","acompte","L441-9","CGI-289"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"date-fr","name":"/v1/date-fr","description":"French invoice date format: YYYY-MM-DD → JJ/MM/AAAA, weekday, long form, collable 'Date de facture : …'. L441-9 emission date.","tags":["france","invoice","date","L441-9"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"payment-means","name":"/v1/payment-means","description":"French invoice means-of-payment mention (L441-9): virement, chèque, CB, espèces, prélèvement, LCR. Default virement. Collable string.","tags":["france","invoice","payment","virement","L441-9"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"interest-start","name":"/v1/interest-start","description":"L441-10: calendar day late-payment interest starts (the day after the due date), without a reminder. Accepts due_date or invoice_date + net_days.","tags":["france","invoice","L441-10","penalties","due-date"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"siege-social","name":"/v1/siege-social","description":"French siège social invoice mention (L441-9): street + postcode + city, department prefix, Alsace-Moselle flag. Format only, not a Kbis.","tags":["france","invoice","adresse","siege","L441-9"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"net-a-payer","name":"/v1/net-a-payer","description":"French invoice footer: HT / VAT / TTC plus collable 'Net à payer : 1 200,00 €'. Same CGI rates as /v1/ht-ttc. Pass exactly one of amount_ht or amount_ttc.","tags":["france","invoice","tva","ttc","net-a-payer"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"doc-title","name":"/v1/doc-title","description":"CGI 289 document title: Facture, Avoir, Facture d'acompte, Note d'honoraires (still an invoice), or Devis (not L441-9). Optional number → 'Facture n° …'.","tags":["france","invoice","cgi-289","honoraires","devis"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"autoliquidation","name":"/v1/autoliquidation","description":"French reverse-charge VAT mention (autoliquidation): intra-EU CGI 283, construction 283-2 nonies, or import. Invoice shows HT; VAT due by the customer.","tags":["france","tva","autoliquidation","cgi-283","invoice"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"eori","name":"/v1/eori","description":"French EORI format: FR + SIREN (legal entity). From a SIRET also returns FR+SIRET establishment form. Format only, no customs lookup.","tags":["france","eori","customs","siren","invoice"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"duplicata","name":"/v1/duplicata","description":"French invoice duplicata: same original number stamped DUPLICATA. Not a new L441-9 number and not a credit note. Collable 'Ne pas comptabiliser une seconde fois.'","tags":["france","invoice","duplicata","L441-9","CGI-289"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"rm-mention","name":"/v1/rm-mention","description":"French artisan RM invoice mention: 'RM Pau 404 833 048' from city + SIREN/SIRET. Format only. RNE replaced RM for new filings in 2023; invoice usage still shows RM.","tags":["france","invoice","rm","artisan","L441-9"],"inputModes":["application/json"],"outputModes":["application/json"]}]}