🧾 Freelance

freelance-invoice-generator

Aide à créer des factures conformes, gérer les mentions légales obligatoires et suivre les relances de paiement.

⚡ Installation & lancement en 1 commande

Copiez-collez dans votre terminal : le skill s'installe dans ~/.claude/skills et Claude Code se lance directement dessus.

macOS / Linux
curl -fsSL https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.sh | sh -s -- freelance-invoice-generator --launch
Windows (PowerShell)
iex "& { $(iwr -useb https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.ps1) } freelance-invoice-generator -Launch"

🚀 Déjà installé ?

claude "/freelance-invoice-generator"

Ou tapez /freelance-invoice-generator dans une session Claude Code, ou décrivez simplement votre besoin — le skill se déclenche automatiquement via le skill-router.

🔑 Déclencheurs automatiques

Le skill s'active automatiquement quand votre demande contient :

facturefacturationmentions légalesrelance paiementdevis freelance

📦 Installation manuelle

git clone https://github.com/khalilbenaz/claude-skills-collection.git cp -r claude-skills-collection/skills/freelance-invoice-generator ~/.claude/skills/

Payload du plugin : skills/freelance-invoice-generator · source éditable : freelance-skills/invoice-generator

📖 Manuel

Invoice Generator

Étape 1 — Identifier le statut juridique

Le régime détermine les mentions obligatoires et la TVA applicable.

StatutTVAMention spécifique
Micro-entrepreneur (France)Non collectée si CA < seuils"TVA non applicable, art. 293 B du CGI"
EURL / SASU soumise à ISOui (20 % standard)Numéro de TVA intracommunautaire obligatoire
Auto-entrepreneur MarocNon (exonéré 36 mois)RC + ICE + Patente + IF
Freelance UE → client UEAutoliquidation"Autoliquidation — art. 283-2 du CGI"

Étape 2 — Mentions légales obligatoires

Bloc prestataire

Bloc client

Bloc facturation

Mentions légales pied de facture (France)

Pénalités de retard : taux directeur BCE + 10 points (soit X % à la date d'émission).
Indemnité forfaitaire de recouvrement : 40 EUR (art. L441-10 C. Com.).
Escompte pour paiement anticipé : aucun.

Étape 3 — Modèle de facture (Markdown → PDF)

# FACTURE N° 2026-042

**Émetteur**               **Client**
Khalil BENAZZOUZ           ACME SAS
12 rue des Devs, Paris     5 av. du Client, Lyon
SIRET : 123 456 789 00010  TVA : FR 12 345678901
TVA : FR 00 123456789

---
| Description                  | Qté | PU HT   | TVA  | Total HT |
|------------------------------|-----|---------|------|----------|
| Développement API REST       |  10 | 650,00  | 20 % | 6 500,00 |
| Audit sécurité OWASP         |   1 | 800,00  | 20 % |   800,00 |

**Total HT** : 7 300,00 €
**TVA 20 %** : 1 460,00 €
**Total TTC** : 8 760,00 €

Date d'échéance : 2026-07-24 (30 jours nets)

IBAN : FR76 1234 5678 9012 3456 7890 123  |  BIC : BNPAFRPP

Convertir en PDF avec un outil CLI :

# Option 1 — pandoc + LaTeX
pandoc facture-2026-042.md -o facture-2026-042.pdf --pdf-engine=xelatex

# Option 2 — wkhtmltopdf (HTML → PDF)
wkhtmltopdf --page-size A4 facture-2026-042.html facture-2026-042.pdf

Étape 4 — Numérotation et séquence

numero,date_emission,client,ht,tva,ttc,echeance,statut
2026-001,2026-01-15,ACME SAS,7300,1460,8760,2026-02-14,PAYE
2026-002,2026-02-01,Beta Corp,2000,400,2400,2026-03-03,EN_ATTENTE

Étape 5 — Processus de relance

J+0   Envoi facture PDF par email (accusé de lecture si possible)
J+7   après échéance → Relance amiable (email courtois, PJ facture)
J+15  → Relance ferme (email + appel téléphonique)
J+30  → Mise en demeure par LRAR (mentionner pénalités de retard)
J+45  → Injonction de payer (tribunal compétent) ou cabinet de recouvrement

Template relance amiable :

Objet : Rappel facture n° 2026-042 — échéance dépassée

Bonjour,

Sauf erreur de ma part, la facture n° 2026-042 d'un montant de 8 760,00 €
est arrivée à échéance le 2026-07-24. Pourriez-vous me confirmer la date
de règlement prévue ?

Cordialement,

Étape 6 — Tableau de bord trésorerie

Script Python minimal pour résumer le registre CSV :

import csv, datetime
from collections import defaultdict

with open("factures.csv") as f:
    rows = list(csv.DictReader(f))

total_en_attente = sum(float(r["ttc"]) for r in rows if r["statut"] == "EN_ATTENTE")
en_retard = [
    r for r in rows
    if r["statut"] == "EN_ATTENTE"
    and datetime.date.fromisoformat(r["echeance"]) < datetime.date.today()
]
print(f"En attente : {total_en_attente:.2f} €")
print(f"En retard  : {len(en_retard)} facture(s)")
for r in en_retard:
    print(f"  → {r['numero']} / {r['client']} / {r['ttc']} € / éch. {r['echeance']}")

Garde-fous et pièges fréquents

PiègeConséquenceCorrectif
Modifier une facture émiseFraude fiscaleAvoir + nouvelle facture
Numérotation avec saut ou doublonRejet comptable, redressementAudit du registre avant émission
Oublier la mention d'exonération TVAFacture non conformeAjouter "TVA non applicable, art. 293 B CGI"
Date d'échéance absenteDélai légal 30 j s'applique par défautToujours dater l'échéance explicitement
Envoi sans accusé de réceptionPreuve difficile en cas de litigeEmail avec tracking ou LRAR pour gros montants
TVA intracommunautaire client absentAutoliquidation refuséeVérifier le numéro sur vies.europa.eu

Bonnes pratiques 2026