Avant toute analyse, le serveur verifie que chaque fichier respecte les contraintes configurees.
- Nombre maximum de fichiers par lot via
Upload:MaxFilesPerBatch.
- Taille maximum par fichier via
Upload:MaxFileSizeMb.
- Extension obligatoire
.pdf.
- Content-Type autorise, par defaut
application/pdf ou application/x-pdf.
- Signature binaire du fichier : les premiers octets doivent commencer par
%PDF-.
Le nom original n'est jamais utilise pour stocker le fichier. Un nom aleatoire cote serveur est genere.
Le fichier est ouvert avec la bibliotheque NuGet PDFsharp afin de verifier qu'il est
lisible comme document PDF.
- Si le PDF ne peut pas etre ouvert, le rapport signale une erreur.
- Le nombre de pages lisibles est ajoute aux informations du rapport.
- La presence d'indices PDF/A-3 est recherchee dans les metadonnees PDF.
La compatibilite PDF/A-3 est seulement indicative. Une certification PDF/A-3 complete necessite un
validateur specialise.
Factur-X repose sur un PDF lisible contenant un XML structure. L'application recherche donc un XML
compatible dans le contenu du PDF.
- Recherche des noms usuels :
factur-x.xml, zugferd-invoice.xml, xrechnung.xml.
- Recherche d'un document XML contenant
CrossIndustryInvoice.
- Lecture du contenu brut et des streams PDF compresses en
FlateDecode.
- Signalement si le nom du fichier XML n'est pas confirme ou differe de
factur-x.xml.
Certains PDF peuvent stocker les pieces jointes avec des structures que cette extraction simple ne
couvre pas encore.
Le XML detecte est parse cote serveur avec une configuration restrictive.
- Le XML doit etre bien forme.
- Les DTD sont interdites.
- Les resolvers externes sont desactives pour eviter les acces reseau ou fichiers non souhaites.
- Une limite de taille documentaire est appliquee pendant le parsing.
Aucun contenu provenant du PDF ou du XML n'est execute.
Le service verifie que le XML ressemble a une facture CII attendue pour Factur-X.
- La racine XML doit etre
CrossIndustryInvoice.
- L'espace de noms doit correspondre a la famille UN/CEFACT CrossIndustryInvoice.
- Le profil Factur-X est detecte si le contexte documentaire contient une indication exploitable.
Les champs ci-dessous sont extraits depuis le XML et affiches dans le rapport quand ils sont presents.
- Profil Factur-X : MINIMUM, BASIC WL, BASIC, EN16931 ou EXTENDED.
- Numero de facture et date d'emission.
- Vendeur et acheteur.
- Total HT, total TVA, total TTC et devise.
- Lignes de facture pour les profils qui les exigent generalement.
Si les montants HT, TVA et TTC sont presents, l'application applique un controle arithmetique simple.
- Calcul attendu :
Total TTC = Total HT + Total TVA.
- Tolerance configurable via
FacturX:AmountTolerance, par defaut 0.02.
- Un ecart superieur a la tolerance produit une erreur.
Ce controle ne remplace pas les regles fiscales detaillees par taux, exonerations, arrondis ou lignes.
L'architecture prevoit une interface ISchemaValidationService et un dossier
/app/data/schemas pour integrer les schemas officiels.
- Le service actuel signale explicitement que la validation XSD/Schematron complete n'est pas executee.
- Le chemin des schemas est configurable via
FacturX:SchemasPath.
- Une implementation future pourra charger les XSD et les regles Schematron officielles Factur-X / EN 16931.
Une facture peut donc passer certains controles de base sans etre officiellement conforme.
Lecture du resultat
Conforme signifie qu'aucune erreur ni avertissement n'a ete detecte par les controles
actuellement implementes. Avertissements signifie qu'un point doit etre verifie.
Non conforme signifie qu'au moins une erreur bloquante a ete detectee.
La mention "Conforme" doit toujours etre comprise dans le perimetre de cette page, pas comme une
certification fiscale, comptable, juridique ou normative complete.