add dolibarr-thirdparty-completeness and dolibarr-tva-deductible

V4 bundle — two more sibling skills, both read-only, both depending
on the dolibarr base skill.

dolibarr-thirdparty-completeness:
- audit-thirdparty.sh <socid>: country-aware completeness audit for
  any thirdparty (FR: SIREN + SIRET + tva_intra; EU non-FR: tva_intra;
  extra-EU: national tax id). Generalizes the V1 KM-hardcoded script.
- audit-all-thirdparties.sh: loops over /thirdparties and surfaces a
  compact table of gaps. --clients-only / --suppliers-only flags.
- Live baseline finds 5/10 thirdparties with mandatory gaps:
  KissMetrics (US tax id), Wise Europe SA (BE tva_intra), Medialex
  (FR SIRET + tva_intra), Qonto (SIRET), Infogreffe (SIRET).

dolibarr-tva-deductible:
- deductible-by-month.sh: TVA déductible aggregated per period × rate.
- deductible-line-detail.sh: per supplier-invoice line with country-
  based CA3 bucket assignment (ligne 20 for 20 % FR, ligne 19 for
  reduced rates, ligne 17+24 for intra-UE autoliquidation).
- Live baseline: 223.22 € total TVA déductible across 13 lines.
  Wise Europe SA correctly identified as intra-UE autoliquidation;
  La Poste correctly identified as FR exempt (timbres).
- Mirrors dolibarr-tva-reconciliation on the supplier side. Together
  they give the two numbers a CA3 monthly declaration needs.

Also extends dolibarr/SKILL.md endpoint catalogue with /supplierinvoices
(noting the 403 on the /lines sub-endpoint — inline lines on the detail
endpoint make this a non-issue). dolibarr/README.md gains two new
permission checkboxes for Factures fournisseurs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-29 06:14:28 +02:00
parent fe9e8274f1
commit 585b7beb03
18 changed files with 5736 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
id name cnty role missing
--------------------------------------------------------------------------------------------------------------
1 KissMetrics US client tax_id
2 Wise Europe SA BE supplier tva_intra
3 Greffe du tribunal de commerce Évry FR supplier (complete)
4 YOLAW FR supplier (complete)
5 Medialex FR supplier SIRET, tva_intra
6 Qonto FR supplier SIRET
7 OVH FR supplier (complete)
8 La Poste FR supplier (complete)
9 Infogreffe FR supplier SIRET
10 Darnis Operations FR supplier (complete)
--------------------------------------------------------------------------------------------------------------
# 10 thirdparties audited, 5 with mandatory gaps

View File

@@ -0,0 +1,16 @@
================================================================================
Thirdparty 1 — KissMetrics [client, country=US]
================================================================================
[OK] name = 'KissMetrics'
[OK] address = '2850 34th Street North, 307'
[OK] zip = '33713'
[OK] town = 'St. Petersburg'
[OK] country_code = 'US'
[XX] idprof1 (tax id / EIN) = ''
[--] idprof2 = '' (optional)
[OK] email = 'evan@kissmetrics.io' (optional)
[--] phone = None (optional)
[--] url = None (optional)
[--] iban = (not set) (optional)
6 pass, 1 mandatory fail(s), 3 optional unset

View File

@@ -0,0 +1,16 @@
================================================================================
Thirdparty 2 — Wise Europe SA [supplier, country=BE]
================================================================================
[OK] name = 'Wise Europe SA'
[OK] address = 'Rue du Trône 100, 3rd floor'
[OK] zip = '1050'
[OK] town = 'Brussels'
[OK] country_code = 'BE'
[XX] tva_intra (VAT EU) = ''
[--] idprof1 (national reg) = '' (optional)
[--] email = None (optional)
[--] phone = None (optional)
[OK] url = 'wise.com' (optional)
[--] iban = (not set) (optional)
6 pass, 1 mandatory fail(s), 3 optional unset

View File

@@ -0,0 +1,18 @@
================================================================================
Thirdparty 5 — Medialex [supplier, country=FR]
================================================================================
[OK] name = 'Medialex'
[OK] address = '10 rue du Breil'
[OK] zip = '35063'
[OK] town = 'Rennes'
[OK] country_code = 'FR'
[OK] idprof1 (SIREN) = '353403074'
[XX] idprof2 (SIRET) = ''
[OK] idprof3 (APE) = '7312Z' (optional)
[XX] tva_intra (VAT) = ''
[--] email = None (optional)
[OK] phone = '0299264200' (optional)
[--] url = None (optional)
[--] iban = (not set) (optional)
8 pass, 2 mandatory fail(s), 2 optional unset