factpulse 2.0.42 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -3
  3. data/Gemfile.lock +3 -3
  4. data/README.md +91 -91
  5. data/docs/{CredentialsAFNOR.md → AFNORCredentials.md} +2 -2
  6. data/docs/{DestinationAFNOR.md → AFNORDestination.md} +4 -4
  7. data/docs/AFNORHealthCheckResponse.md +22 -0
  8. data/docs/AFNORPDPPAApi.md +25 -25
  9. data/docs/AFNORPDPPADirectoryServiceApi.md +19 -19
  10. data/docs/AFNORPDPPAFlowServiceApi.md +16 -16
  11. data/docs/{ResultatAFNOR.md → AFNORResult.md} +5 -5
  12. data/docs/APIError.md +2 -2
  13. data/docs/{MontantTva.md → APIProfile.md} +2 -2
  14. data/docs/{CodeCadreFacturation.md → AcknowledgmentStatus.md} +2 -2
  15. data/docs/{CodeRaisonReduction.md → AllowanceReasonCode.md} +2 -2
  16. data/docs/{ModeDepot.md → AmountDue.md} +2 -2
  17. data/docs/BoundingBoxSchema.md +7 -7
  18. data/docs/{CategorieTVA.md → CeleryStatus.md} +2 -2
  19. data/docs/CertificateInfoResponse.md +20 -20
  20. data/docs/ChorusProApi.md +123 -123
  21. data/docs/ChorusProDestination.md +20 -0
  22. data/docs/ChorusProResult.md +22 -0
  23. data/docs/Destination.md +7 -7
  24. data/docs/{ModePaiement.md → DocumentType.md} +2 -2
  25. data/docs/{AdresseElectronique.md → ElectronicAddress.md} +4 -4
  26. data/docs/EnrichedInvoiceInfo.md +32 -0
  27. data/docs/FacturXPDFInfo.md +22 -0
  28. data/docs/FactureElectroniqueRestApiSchemasChorusProChorusProCredentials.md +26 -0
  29. data/docs/{CredentialsChorusPro.md → FactureElectroniqueRestApiSchemasProcessingChorusProCredentials.md} +4 -4
  30. data/docs/FactureFacturX.md +30 -30
  31. data/docs/FieldStatus.md +15 -0
  32. data/docs/{DirectionFlux.md → FlowDirection.md} +2 -2
  33. data/docs/FlowProfile.md +15 -0
  34. data/docs/FlowSummary.md +32 -0
  35. data/docs/{ProfilFlux.md → FlowSyntax.md} +2 -2
  36. data/docs/{TypeTVA.md → FlowType.md} +2 -2
  37. data/docs/GenerateCertificateRequest.md +19 -19
  38. data/docs/GenerateCertificateResponse.md +8 -8
  39. data/docs/GetChorusProIdRequest.md +22 -0
  40. data/docs/GetChorusProIdResponse.md +24 -0
  41. data/docs/GetInvoiceRequest.md +20 -0
  42. data/docs/GetInvoiceResponse.md +34 -0
  43. data/docs/GetStructureRequest.md +22 -0
  44. data/docs/GetStructureResponse.md +34 -0
  45. data/docs/GlobalAllowanceAmount.md +15 -0
  46. data/docs/{SantApi.md → HealthApi.md} +23 -23
  47. data/docs/IncomingInvoice.md +54 -0
  48. data/docs/IncomingSupplier.md +32 -0
  49. data/docs/{FormatFacture.md → InvoiceFormat.md} +2 -2
  50. data/docs/InvoiceLine.md +46 -0
  51. data/docs/InvoiceLineAllowanceAmount.md +15 -0
  52. data/docs/InvoiceNote.md +20 -0
  53. data/docs/InvoiceProcessingApi.md +831 -0
  54. data/docs/InvoiceReferences.md +32 -0
  55. data/docs/{StatutFacture.md → InvoiceStatus.md} +5 -5
  56. data/docs/InvoiceTotals.md +30 -0
  57. data/docs/InvoiceTotalsPrepayment.md +15 -0
  58. data/docs/InvoiceTypeCode.md +15 -0
  59. data/docs/InvoicingFramework.md +24 -0
  60. data/docs/InvoicingFrameworkCode.md +15 -0
  61. data/docs/LineNetAmount.md +15 -0
  62. data/docs/MandatoryNoteSchema.md +30 -0
  63. data/docs/ManualRate.md +15 -0
  64. data/docs/ManualVatRate.md +15 -0
  65. data/docs/OperationNature.md +15 -0
  66. data/docs/{FormatSortie.md → OutputFormat.md} +2 -2
  67. data/docs/PDFValidationResultAPI.md +62 -0
  68. data/docs/PDFXMLVerificationApi.md +435 -0
  69. data/docs/PDPCredentials.md +4 -4
  70. data/docs/PageDimensionsSchema.md +20 -0
  71. data/docs/{Beneficiaire.md → Payee.md} +5 -5
  72. data/docs/PaymentMeans.md +15 -0
  73. data/docs/PostalAddress.md +26 -0
  74. data/docs/ProcessingOptions.md +24 -0
  75. data/docs/{Quantite.md → Quantity.md} +2 -2
  76. data/docs/Recipient.md +28 -0
  77. data/docs/SearchFlowRequest.md +34 -0
  78. data/docs/SearchFlowResponse.md +24 -0
  79. data/docs/SearchServicesResponse.md +24 -0
  80. data/docs/SearchStructureRequest.md +26 -0
  81. data/docs/SearchStructureResponse.md +24 -0
  82. data/docs/SignatureInfo.md +2 -2
  83. data/docs/SignatureInfoAPI.md +28 -0
  84. data/docs/SignatureParameters.md +34 -0
  85. data/docs/SimplifiedInvoiceData.md +34 -0
  86. data/docs/StructureInfo.md +10 -10
  87. data/docs/StructureParameters.md +22 -0
  88. data/docs/StructureService.md +24 -0
  89. data/docs/SubmissionMode.md +15 -0
  90. data/docs/SubmitCompleteInvoiceRequest.md +26 -0
  91. data/docs/SubmitCompleteInvoiceResponse.md +34 -0
  92. data/docs/SubmitFlowRequest.md +28 -0
  93. data/docs/SubmitFlowResponse.md +30 -0
  94. data/docs/SubmitInvoiceRequest.md +46 -0
  95. data/docs/SubmitInvoiceResponse.md +24 -0
  96. data/docs/SupplementaryAttachment.md +26 -0
  97. data/docs/Supplier.md +36 -0
  98. data/docs/TaskResponse.md +18 -0
  99. data/docs/TaskStatus.md +22 -0
  100. data/docs/TaxableAmount.md +15 -0
  101. data/docs/TotalGrossAmount.md +15 -0
  102. data/docs/TotalNetAmount.md +15 -0
  103. data/docs/TotalVATAmount.md +15 -0
  104. data/docs/UnitNetPrice.md +15 -0
  105. data/docs/UnitOfMeasure.md +15 -0
  106. data/docs/UserApi.md +74 -0
  107. data/docs/VATAccountingCode.md +15 -0
  108. data/docs/{ProfilAPI.md → VATAmount.md} +2 -2
  109. data/docs/VATCategory.md +15 -0
  110. data/docs/VATLine.md +30 -0
  111. data/docs/ValidationErrorDetail.md +3 -3
  112. data/docs/ValidationErrorResponse.md +18 -0
  113. data/docs/ValidationSuccessResponse.md +18 -0
  114. data/docs/{TypeFlux.md → VatAmount.md} +2 -2
  115. data/docs/VerificationSuccessResponse.md +36 -0
  116. data/docs/VerifiedFieldSchema.md +34 -0
  117. data/factpulse.gemspec +4 -4
  118. data/lib/factpulse/api/afnorpdppa_api.rb +25 -25
  119. data/lib/factpulse/api/afnorpdppa_directory_service_api.rb +40 -40
  120. data/lib/factpulse/api/afnorpdppa_flow_service_api.rb +16 -16
  121. data/lib/factpulse/api/chorus_pro_api.rb +127 -127
  122. data/lib/factpulse/api/health_api.rb +136 -0
  123. data/lib/factpulse/api/invoice_processing_api.rb +835 -0
  124. data/lib/factpulse/api/pdfxml_verification_api.rb +430 -0
  125. data/lib/factpulse/api/user_api.rb +79 -0
  126. data/lib/factpulse/api_client.rb +2 -2
  127. data/lib/factpulse/api_error.rb +2 -2
  128. data/lib/factpulse/api_model_base.rb +2 -2
  129. data/lib/factpulse/configuration.rb +2 -2
  130. data/lib/factpulse/helpers/client.rb +182 -182
  131. data/lib/factpulse/helpers/exceptions.rb +2 -2
  132. data/lib/factpulse/helpers/helpers.rb +5 -5
  133. data/lib/factpulse/models/acknowledgment_status.rb +41 -0
  134. data/lib/factpulse/models/afnor_credentials.rb +169 -0
  135. data/lib/factpulse/models/{destination_afnor.rb → afnor_destination.rb} +10 -10
  136. data/lib/factpulse/models/{reponse_healthcheck_afnor.rb → afnor_health_check_response.rb} +9 -9
  137. data/lib/factpulse/models/{resultat_afnor.rb → afnor_result.rb} +13 -13
  138. data/lib/factpulse/models/allowance_reason_code.rb +45 -0
  139. data/lib/factpulse/models/amount_due.rb +104 -0
  140. data/lib/factpulse/models/api_error.rb +5 -5
  141. data/lib/factpulse/models/api_profile.rb +42 -0
  142. data/lib/factpulse/models/bounding_box_schema.rb +10 -10
  143. data/lib/factpulse/models/celery_status.rb +43 -0
  144. data/lib/factpulse/models/certificate_info_response.rb +164 -164
  145. data/lib/factpulse/models/{destination_chorus_pro.rb → chorus_pro_destination.rb} +7 -7
  146. data/lib/factpulse/models/chorus_pro_result.rb +186 -0
  147. data/lib/factpulse/models/destination.rb +7 -7
  148. data/lib/factpulse/models/document_type.rb +43 -0
  149. data/lib/factpulse/models/electronic_address.rb +196 -0
  150. data/lib/factpulse/models/enriched_invoice_info.rb +348 -0
  151. data/lib/factpulse/models/error_level.rb +2 -2
  152. data/lib/factpulse/models/error_source.rb +2 -2
  153. data/lib/factpulse/models/factur_xpdf_info.rb +205 -0
  154. data/lib/factpulse/models/{chorus_pro_credentials.rb → facture_electronique_rest_api_schemas_chorus_pro_chorus_pro_credentials.rb} +11 -11
  155. data/lib/factpulse/models/facture_electronique_rest_api_schemas_processing_chorus_pro_credentials.rb +191 -0
  156. data/lib/factpulse/models/facture_factur_x.rb +160 -160
  157. data/lib/factpulse/models/field_status.rb +43 -0
  158. data/lib/factpulse/models/flow_direction.rb +40 -0
  159. data/lib/factpulse/models/flow_profile.rb +41 -0
  160. data/lib/factpulse/models/flow_summary.rb +251 -0
  161. data/lib/factpulse/models/flow_syntax.rb +43 -0
  162. data/lib/factpulse/models/flow_type.rb +43 -0
  163. data/lib/factpulse/models/generate_certificate_request.rb +106 -106
  164. data/lib/factpulse/models/generate_certificate_response.rb +47 -47
  165. data/lib/factpulse/models/get_chorus_pro_id_request.rb +188 -0
  166. data/lib/factpulse/models/get_chorus_pro_id_response.rb +230 -0
  167. data/lib/factpulse/models/get_invoice_request.rb +176 -0
  168. data/lib/factpulse/models/get_invoice_response.rb +261 -0
  169. data/lib/factpulse/models/get_structure_request.rb +188 -0
  170. data/lib/factpulse/models/get_structure_response.rb +261 -0
  171. data/lib/factpulse/models/global_allowance_amount.rb +104 -0
  172. data/lib/factpulse/models/http_validation_error.rb +2 -2
  173. data/lib/factpulse/models/incoming_invoice.rb +522 -0
  174. data/lib/factpulse/models/incoming_supplier.rb +236 -0
  175. data/lib/factpulse/models/invoice_format.rb +41 -0
  176. data/lib/factpulse/models/invoice_line.rb +389 -0
  177. data/lib/factpulse/models/invoice_line_allowance_amount.rb +104 -0
  178. data/lib/factpulse/models/invoice_note.rb +175 -0
  179. data/lib/factpulse/models/invoice_references.rb +290 -0
  180. data/lib/factpulse/models/invoice_status.rb +203 -0
  181. data/lib/factpulse/models/invoice_totals.rb +272 -0
  182. data/lib/factpulse/models/invoice_totals_prepayment.rb +104 -0
  183. data/lib/factpulse/models/invoice_type_code.rb +70 -0
  184. data/lib/factpulse/models/invoicing_framework.rb +217 -0
  185. data/lib/factpulse/models/invoicing_framework_code.rb +46 -0
  186. data/lib/factpulse/models/line_net_amount.rb +104 -0
  187. data/lib/factpulse/models/mandatory_note_schema.rb +265 -0
  188. data/lib/factpulse/models/manual_rate.rb +104 -0
  189. data/lib/factpulse/models/manual_vat_rate.rb +104 -0
  190. data/lib/factpulse/models/operation_nature.rb +52 -0
  191. data/lib/factpulse/models/output_format.rb +40 -0
  192. data/lib/factpulse/models/page_dimensions_schema.rb +193 -0
  193. data/lib/factpulse/models/{beneficiaire.rb → payee.rb} +15 -15
  194. data/lib/factpulse/models/payment_means.rb +50 -0
  195. data/lib/factpulse/models/pdf_validation_result_api.rb +523 -0
  196. data/lib/factpulse/models/pdp_credentials.rb +7 -7
  197. data/lib/factpulse/models/postal_address.rb +189 -0
  198. data/lib/factpulse/models/processing_options.rb +207 -0
  199. data/lib/factpulse/models/quantity.rb +104 -0
  200. data/lib/factpulse/models/recipient.rb +201 -0
  201. data/lib/factpulse/models/scheme_id.rb +2 -2
  202. data/lib/factpulse/models/search_flow_request.rb +306 -0
  203. data/lib/factpulse/models/search_flow_response.rb +249 -0
  204. data/lib/factpulse/models/search_services_response.rb +214 -0
  205. data/lib/factpulse/models/search_structure_request.rb +191 -0
  206. data/lib/factpulse/models/search_structure_response.rb +216 -0
  207. data/lib/factpulse/models/signature_info.rb +20 -20
  208. data/lib/factpulse/models/signature_info_api.rb +216 -0
  209. data/lib/factpulse/models/signature_parameters.rb +235 -0
  210. data/lib/factpulse/models/simplified_invoice_data.rb +342 -0
  211. data/lib/factpulse/models/structure_info.rb +84 -84
  212. data/lib/factpulse/models/structure_parameters.rb +175 -0
  213. data/lib/factpulse/models/structure_service.rb +247 -0
  214. data/lib/factpulse/models/submission_mode.rb +44 -0
  215. data/lib/factpulse/models/submit_complete_invoice_request.rb +239 -0
  216. data/lib/factpulse/models/submit_complete_invoice_response.rb +355 -0
  217. data/lib/factpulse/models/submit_flow_request.rb +238 -0
  218. data/lib/factpulse/models/submit_flow_response.rb +294 -0
  219. data/lib/factpulse/models/submit_invoice_request.rb +388 -0
  220. data/lib/factpulse/models/submit_invoice_response.rb +213 -0
  221. data/lib/factpulse/models/supplementary_attachment.rb +269 -0
  222. data/lib/factpulse/models/supplier.rb +257 -0
  223. data/lib/factpulse/models/task_response.rb +166 -0
  224. data/lib/factpulse/models/task_status.rb +227 -0
  225. data/lib/factpulse/models/taxable_amount.rb +104 -0
  226. data/lib/factpulse/models/total_gross_amount.rb +104 -0
  227. data/lib/factpulse/models/total_net_amount.rb +104 -0
  228. data/lib/factpulse/models/total_vat_amount.rb +104 -0
  229. data/lib/factpulse/models/unit_net_price.rb +104 -0
  230. data/lib/factpulse/models/unit_of_measure.rb +50 -0
  231. data/lib/factpulse/models/validation_error.rb +2 -2
  232. data/lib/factpulse/models/validation_error_detail.rb +6 -6
  233. data/lib/factpulse/models/validation_error_loc_inner.rb +2 -2
  234. data/lib/factpulse/models/validation_error_response.rb +168 -0
  235. data/lib/factpulse/models/validation_success_response.rb +166 -0
  236. data/lib/factpulse/models/vat_accounting_code.rb +46 -0
  237. data/lib/factpulse/models/vat_amount.rb +104 -0
  238. data/lib/factpulse/models/vat_category.rb +47 -0
  239. data/lib/factpulse/models/vat_line.rb +262 -0
  240. data/lib/factpulse/models/verification_success_response.rb +343 -0
  241. data/lib/factpulse/models/verified_field_schema.rb +334 -0
  242. data/lib/factpulse/version.rb +3 -3
  243. data/lib/factpulse.rb +99 -99
  244. metadata +250 -257
  245. data/docs/AdressePostale.md +0 -26
  246. data/docs/CadreDeFacturation.md +0 -24
  247. data/docs/ChampVerifieSchema.md +0 -34
  248. data/docs/ChorusProCredentials.md +0 -26
  249. data/docs/ConsulterFactureRequest.md +0 -20
  250. data/docs/ConsulterFactureResponse.md +0 -34
  251. data/docs/ConsulterStructureRequest.md +0 -22
  252. data/docs/ConsulterStructureResponse.md +0 -34
  253. data/docs/Destinataire.md +0 -28
  254. data/docs/DestinationChorusPro.md +0 -20
  255. data/docs/DimensionPageSchema.md +0 -20
  256. data/docs/DonneesFactureSimplifiees.md +0 -34
  257. data/docs/FactureEnrichieInfo.md +0 -32
  258. data/docs/FactureEntrante.md +0 -54
  259. data/docs/FluxResume.md +0 -32
  260. data/docs/Fournisseur.md +0 -36
  261. data/docs/FournisseurEntrant.md +0 -32
  262. data/docs/InformationSignatureAPI.md +0 -28
  263. data/docs/LigneDePoste.md +0 -46
  264. data/docs/LigneDePosteMontantRemiseHt.md +0 -15
  265. data/docs/LigneDePosteTauxTvaManuel.md +0 -15
  266. data/docs/LigneDeTVA.md +0 -30
  267. data/docs/MontantAPayer.md +0 -15
  268. data/docs/MontantBaseHt.md +0 -15
  269. data/docs/MontantHtTotal.md +0 -15
  270. data/docs/MontantRemiseGlobaleTtc.md +0 -15
  271. data/docs/MontantTotal.md +0 -30
  272. data/docs/MontantTotalAcompte.md +0 -15
  273. data/docs/MontantTotalLigneHt.md +0 -15
  274. data/docs/MontantTtcTotal.md +0 -15
  275. data/docs/MontantTvaLigne.md +0 -15
  276. data/docs/MontantTvaTotal.md +0 -15
  277. data/docs/MontantUnitaireHt.md +0 -15
  278. data/docs/NatureOperation.md +0 -15
  279. data/docs/Note.md +0 -20
  280. data/docs/NoteObligatoireSchema.md +0 -30
  281. data/docs/ObtenirIdChorusProRequest.md +0 -22
  282. data/docs/ObtenirIdChorusProResponse.md +0 -24
  283. data/docs/OptionsProcessing.md +0 -24
  284. data/docs/PDFFacturXInfo.md +0 -22
  285. data/docs/ParametresSignature.md +0 -34
  286. data/docs/ParametresStructure.md +0 -22
  287. data/docs/PieceJointeComplementaire.md +0 -26
  288. data/docs/RechercherServicesResponse.md +0 -24
  289. data/docs/RechercherStructureRequest.md +0 -26
  290. data/docs/RechercherStructureResponse.md +0 -24
  291. data/docs/References.md +0 -32
  292. data/docs/ReponseHealthcheckAFNOR.md +0 -22
  293. data/docs/ReponseRechercheFlux.md +0 -24
  294. data/docs/ReponseSoumissionFlux.md +0 -30
  295. data/docs/ReponseTache.md +0 -18
  296. data/docs/ReponseValidationErreur.md +0 -18
  297. data/docs/ReponseValidationSucces.md +0 -18
  298. data/docs/ReponseVerificationSucces.md +0 -36
  299. data/docs/RequeteRechercheFlux.md +0 -34
  300. data/docs/RequeteSoumissionFlux.md +0 -28
  301. data/docs/ResultatChorusPro.md +0 -22
  302. data/docs/ResultatValidationPDFAPI.md +0 -62
  303. data/docs/ServiceStructure.md +0 -24
  304. data/docs/SoumettreFactureCompleteRequest.md +0 -26
  305. data/docs/SoumettreFactureCompleteResponse.md +0 -34
  306. data/docs/SoumettreFactureRequest.md +0 -46
  307. data/docs/SoumettreFactureResponse.md +0 -24
  308. data/docs/StatutAcquittement.md +0 -15
  309. data/docs/StatutCelery.md +0 -15
  310. data/docs/StatutChampAPI.md +0 -15
  311. data/docs/StatutTache.md +0 -22
  312. data/docs/SyntaxeFlux.md +0 -15
  313. data/docs/Tauxmanuel.md +0 -15
  314. data/docs/TraitementFactureApi.md +0 -831
  315. data/docs/TypeDocument.md +0 -15
  316. data/docs/TypeFacture.md +0 -15
  317. data/docs/Unite.md +0 -15
  318. data/docs/UtilisateurApi.md +0 -74
  319. data/docs/VrificationPDFXMLApi.md +0 -435
  320. data/lib/factpulse/api/sant_api.rb +0 -136
  321. data/lib/factpulse/api/traitement_facture_api.rb +0 -835
  322. data/lib/factpulse/api/utilisateur_api.rb +0 -79
  323. data/lib/factpulse/api/vrification_pdfxml_api.rb +0 -430
  324. data/lib/factpulse/models/adresse_electronique.rb +0 -196
  325. data/lib/factpulse/models/adresse_postale.rb +0 -189
  326. data/lib/factpulse/models/cadre_de_facturation.rb +0 -217
  327. data/lib/factpulse/models/categorie_tva.rb +0 -47
  328. data/lib/factpulse/models/champ_verifie_schema.rb +0 -334
  329. data/lib/factpulse/models/code_cadre_facturation.rb +0 -42
  330. data/lib/factpulse/models/code_raison_reduction.rb +0 -45
  331. data/lib/factpulse/models/consulter_facture_request.rb +0 -176
  332. data/lib/factpulse/models/consulter_facture_response.rb +0 -261
  333. data/lib/factpulse/models/consulter_structure_request.rb +0 -188
  334. data/lib/factpulse/models/consulter_structure_response.rb +0 -261
  335. data/lib/factpulse/models/credentials_afnor.rb +0 -169
  336. data/lib/factpulse/models/credentials_chorus_pro.rb +0 -191
  337. data/lib/factpulse/models/destinataire.rb +0 -201
  338. data/lib/factpulse/models/dimension_page_schema.rb +0 -193
  339. data/lib/factpulse/models/direction_flux.rb +0 -40
  340. data/lib/factpulse/models/donnees_facture_simplifiees.rb +0 -342
  341. data/lib/factpulse/models/facture_enrichie_info.rb +0 -348
  342. data/lib/factpulse/models/facture_entrante.rb +0 -522
  343. data/lib/factpulse/models/flux_resume.rb +0 -251
  344. data/lib/factpulse/models/format_facture.rb +0 -41
  345. data/lib/factpulse/models/format_sortie.rb +0 -40
  346. data/lib/factpulse/models/fournisseur.rb +0 -257
  347. data/lib/factpulse/models/fournisseur_entrant.rb +0 -236
  348. data/lib/factpulse/models/information_signature_api.rb +0 -216
  349. data/lib/factpulse/models/ligne_de_poste.rb +0 -390
  350. data/lib/factpulse/models/ligne_de_poste_montant_remise_ht.rb +0 -104
  351. data/lib/factpulse/models/ligne_de_poste_taux_tva_manuel.rb +0 -104
  352. data/lib/factpulse/models/ligne_de_tva.rb +0 -262
  353. data/lib/factpulse/models/mode_depot.rb +0 -41
  354. data/lib/factpulse/models/mode_paiement.rb +0 -44
  355. data/lib/factpulse/models/montant_a_payer.rb +0 -104
  356. data/lib/factpulse/models/montant_base_ht.rb +0 -104
  357. data/lib/factpulse/models/montant_ht_total.rb +0 -104
  358. data/lib/factpulse/models/montant_remise_globale_ttc.rb +0 -104
  359. data/lib/factpulse/models/montant_total.rb +0 -272
  360. data/lib/factpulse/models/montant_total_acompte.rb +0 -104
  361. data/lib/factpulse/models/montant_total_ligne_ht.rb +0 -104
  362. data/lib/factpulse/models/montant_ttc_total.rb +0 -104
  363. data/lib/factpulse/models/montant_tva.rb +0 -104
  364. data/lib/factpulse/models/montant_tva_ligne.rb +0 -104
  365. data/lib/factpulse/models/montant_tva_total.rb +0 -104
  366. data/lib/factpulse/models/montant_unitaire_ht.rb +0 -104
  367. data/lib/factpulse/models/nature_operation.rb +0 -52
  368. data/lib/factpulse/models/note.rb +0 -175
  369. data/lib/factpulse/models/note_obligatoire_schema.rb +0 -265
  370. data/lib/factpulse/models/obtenir_id_chorus_pro_request.rb +0 -188
  371. data/lib/factpulse/models/obtenir_id_chorus_pro_response.rb +0 -230
  372. data/lib/factpulse/models/options_processing.rb +0 -207
  373. data/lib/factpulse/models/parametres_signature.rb +0 -235
  374. data/lib/factpulse/models/parametres_structure.rb +0 -175
  375. data/lib/factpulse/models/pdf_factur_x_info.rb +0 -205
  376. data/lib/factpulse/models/piece_jointe_complementaire.rb +0 -269
  377. data/lib/factpulse/models/profil_api.rb +0 -42
  378. data/lib/factpulse/models/profil_flux.rb +0 -41
  379. data/lib/factpulse/models/quantite.rb +0 -104
  380. data/lib/factpulse/models/rechercher_services_response.rb +0 -214
  381. data/lib/factpulse/models/rechercher_structure_request.rb +0 -191
  382. data/lib/factpulse/models/rechercher_structure_response.rb +0 -216
  383. data/lib/factpulse/models/references.rb +0 -290
  384. data/lib/factpulse/models/reponse_recherche_flux.rb +0 -249
  385. data/lib/factpulse/models/reponse_soumission_flux.rb +0 -294
  386. data/lib/factpulse/models/reponse_tache.rb +0 -165
  387. data/lib/factpulse/models/reponse_validation_erreur.rb +0 -167
  388. data/lib/factpulse/models/reponse_validation_succes.rb +0 -165
  389. data/lib/factpulse/models/reponse_verification_succes.rb +0 -343
  390. data/lib/factpulse/models/requete_recherche_flux.rb +0 -306
  391. data/lib/factpulse/models/requete_soumission_flux.rb +0 -238
  392. data/lib/factpulse/models/resultat_chorus_pro.rb +0 -186
  393. data/lib/factpulse/models/resultat_validation_pdfapi.rb +0 -523
  394. data/lib/factpulse/models/service_structure.rb +0 -247
  395. data/lib/factpulse/models/soumettre_facture_complete_request.rb +0 -239
  396. data/lib/factpulse/models/soumettre_facture_complete_response.rb +0 -355
  397. data/lib/factpulse/models/soumettre_facture_request.rb +0 -388
  398. data/lib/factpulse/models/soumettre_facture_response.rb +0 -213
  399. data/lib/factpulse/models/statut_acquittement.rb +0 -41
  400. data/lib/factpulse/models/statut_celery.rb +0 -43
  401. data/lib/factpulse/models/statut_champ_api.rb +0 -43
  402. data/lib/factpulse/models/statut_facture.rb +0 -203
  403. data/lib/factpulse/models/statut_tache.rb +0 -226
  404. data/lib/factpulse/models/syntaxe_flux.rb +0 -43
  405. data/lib/factpulse/models/tauxmanuel.rb +0 -104
  406. data/lib/factpulse/models/type_document.rb +0 -43
  407. data/lib/factpulse/models/type_facture.rb +0 -54
  408. data/lib/factpulse/models/type_flux.rb +0 -43
  409. data/lib/factpulse/models/type_tva.rb +0 -42
  410. data/lib/factpulse/models/unite.rb +0 -44
@@ -0,0 +1,430 @@
1
+ =begin
2
+ #FactPulse REST API
3
+
4
+ # REST API for electronic invoicing in France: Factur-X, AFNOR PDP/PA, electronic signatures. ## 🎯 Main Features ### 📄 Factur-X Invoice Generation - **Formats**: XML only or PDF/A-3 with embedded XML - **Profiles**: MINIMUM, BASIC, EN16931, EXTENDED - **Standards**: EN 16931 (EU directive 2014/55), ISO 19005-3 (PDF/A-3), CII (UN/CEFACT) - **🆕 Simplified Format**: Generation from SIRET + auto-enrichment (Chorus Pro API + Business Search) ### ✅ Validation and Compliance - **XML Validation**: Schematron (45 to 210+ rules depending on profile) - **PDF Validation**: PDF/A-3, Factur-X XMP metadata, electronic signatures - **VeraPDF**: Strict PDF/A validation (146+ ISO 19005-3 rules) - **Asynchronous Processing**: Celery support for heavy validations (VeraPDF) ### 📡 AFNOR PDP/PA Integration (XP Z12-013) - **Flow Submission**: Send invoices to Partner Dematerialization Platforms - **Flow Search**: View submitted invoices - **Download**: Retrieve PDF/A-3 with XML - **Directory Service**: Company search (SIREN/SIRET) - **Multi-client**: Support for multiple PDP configs per user (stored credentials or zero-storage) ### ✍️ PDF Electronic Signature - **Standards**: PAdES-B-B, PAdES-B-T (RFC 3161 timestamping), PAdES-B-LT (long-term archival) - **eIDAS Levels**: SES (self-signed), AdES (commercial CA), QES (QTSP) - **Validation**: Cryptographic integrity and certificate verification - **Certificate Generation**: Self-signed X.509 certificates for testing ### 🔄 Asynchronous Processing - **Celery**: Asynchronous generation, validation and signing - **Polling**: Status tracking via `/tasks/{task_id}/status` - **No timeout**: Ideal for large files or heavy validations ## 🔒 Authentication All requests require a **JWT token** in the Authorization header: ``` Authorization: Bearer YOUR_JWT_TOKEN ``` ### How to obtain a JWT token? #### 🔑 Method 1: `/api/token/` API (Recommended) **URL:** `https://www.factpulse.fr/api/token/` This method is **recommended** for integration in your applications and CI/CD workflows. **Prerequisites:** Having set a password on your account **For users registered via email/password:** - You already have a password, use it directly **For users registered via OAuth (Google/GitHub):** - You must first set a password at: https://www.factpulse.fr/accounts/password/set/ - Once the password is created, you can use the API **Request example:** ```bash curl -X POST https://www.factpulse.fr/api/token/ \\ -H \"Content-Type: application/json\" \\ -d '{ \"username\": \"your_email@example.com\", \"password\": \"your_password\" }' ``` **Optional `client_uid` parameter:** To select credentials for a specific client (PA/PDP, Chorus Pro, signing certificates), add `client_uid`: ```bash curl -X POST https://www.factpulse.fr/api/token/ \\ -H \"Content-Type: application/json\" \\ -d '{ \"username\": \"your_email@example.com\", \"password\": \"your_password\", \"client_uid\": \"550e8400-e29b-41d4-a716-446655440000\" }' ``` The `client_uid` will be included in the JWT and allow the API to automatically use: - AFNOR/PDP credentials configured for this client - Chorus Pro credentials configured for this client - Electronic signature certificates configured for this client **Response:** ```json { \"access\": \"eyJ0eXAiOiJKV1QiLCJhbGc...\", // Access token (validity: 30 min) \"refresh\": \"eyJ0eXAiOiJKV1QiLCJhbGc...\" // Refresh token (validity: 7 days) } ``` **Advantages:** - ✅ Full automation (CI/CD, scripts) - ✅ Programmatic token management - ✅ Refresh token support for automatic access renewal - ✅ Easy integration in any language/tool #### 🖥️ Method 2: Dashboard Generation (Alternative) **URL:** https://www.factpulse.fr/dashboard/ This method is suitable for quick tests or occasional use via the graphical interface. **How it works:** - Log in to the dashboard - Use the \"Generate Test Token\" or \"Generate Production Token\" buttons - Works for **all** users (OAuth and email/password), without requiring a password **Token types:** - **Test Token**: 24h validity, 1000 calls/day quota (free) - **Production Token**: 7 days validity, quota based on your plan **Advantages:** - ✅ Quick for API testing - ✅ No password required - ✅ Simple visual interface **Disadvantages:** - ❌ Requires manual action - ❌ No refresh token - ❌ Less suited for automation ### 📚 Full Documentation For more information on authentication and API usage: https://www.factpulse.fr/documentation-api/
5
+
6
+ The version of the OpenAPI document: 1.0.0
7
+
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.18.0-SNAPSHOT
10
+
11
+ =end
12
+
13
+ require 'cgi'
14
+
15
+ module FactPulse
16
+ class PDFXMLVerificationApi
17
+ attr_accessor :api_client
18
+
19
+ def initialize(api_client = ApiClient.default)
20
+ @api_client = api_client
21
+ end
22
+ # Get status of an asynchronous verification
23
+ # Retrieves the status and result of an asynchronous verification task. **Possible statuses:** - `PENDING`: Task waiting in queue - `STARTED`: Task currently running - `SUCCESS`: Task completed successfully (see `result`) - `FAILURE`: System error (unhandled exception) **Note:** The `result.status` field can be \"SUCCESS\" or \"ERROR\" independently of Celery status (which will always be SUCCESS if the task ran).
24
+ # @param task_id [String]
25
+ # @param [Hash] opts the optional parameters
26
+ # @return [TaskStatus]
27
+ def get_verification_status_api_v1_verification_verify_async_task_id_status_get(task_id, opts = {})
28
+ data, _status_code, _headers = get_verification_status_api_v1_verification_verify_async_task_id_status_get_with_http_info(task_id, opts)
29
+ data
30
+ end
31
+
32
+ # Get status of an asynchronous verification
33
+ # Retrieves the status and result of an asynchronous verification task. **Possible statuses:** - `PENDING`: Task waiting in queue - `STARTED`: Task currently running - `SUCCESS`: Task completed successfully (see `result`) - `FAILURE`: System error (unhandled exception) **Note:** The `result.status` field can be \"SUCCESS\" or \"ERROR\" independently of Celery status (which will always be SUCCESS if the task ran).
34
+ # @param task_id [String]
35
+ # @param [Hash] opts the optional parameters
36
+ # @return [Array<(TaskStatus, Integer, Hash)>] TaskStatus data, response status code and response headers
37
+ def get_verification_status_api_v1_verification_verify_async_task_id_status_get_with_http_info(task_id, opts = {})
38
+ if @api_client.config.debugging
39
+ @api_client.config.logger.debug 'Calling API: PDFXMLVerificationApi.get_verification_status_api_v1_verification_verify_async_task_id_status_get ...'
40
+ end
41
+ # verify the required parameter 'task_id' is set
42
+ if @api_client.config.client_side_validation && task_id.nil?
43
+ fail ArgumentError, "Missing the required parameter 'task_id' when calling PDFXMLVerificationApi.get_verification_status_api_v1_verification_verify_async_task_id_status_get"
44
+ end
45
+ # resource path
46
+ local_var_path = '/api/v1/verification/verify-async/{task_id}/status'.sub('{' + 'task_id' + '}', CGI.escape(task_id.to_s))
47
+
48
+ # query parameters
49
+ query_params = opts[:query_params] || {}
50
+
51
+ # header parameters
52
+ header_params = opts[:header_params] || {}
53
+ # HTTP header 'Accept' (if needed)
54
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
55
+
56
+ # form parameters
57
+ form_params = opts[:form_params] || {}
58
+
59
+ # http body (model)
60
+ post_body = opts[:debug_body]
61
+
62
+ # return_type
63
+ return_type = opts[:debug_return_type] || 'TaskStatus'
64
+
65
+ # auth_names
66
+ auth_names = opts[:debug_auth_names] || ['HTTPBearer']
67
+
68
+ new_options = opts.merge(
69
+ :operation => :"PDFXMLVerificationApi.get_verification_status_api_v1_verification_verify_async_task_id_status_get",
70
+ :header_params => header_params,
71
+ :query_params => query_params,
72
+ :form_params => form_params,
73
+ :body => post_body,
74
+ :auth_names => auth_names,
75
+ :return_type => return_type
76
+ )
77
+
78
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
79
+ if @api_client.config.debugging
80
+ @api_client.config.logger.debug "API called: PDFXMLVerificationApi#get_verification_status_api_v1_verification_verify_async_task_id_status_get\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
81
+ end
82
+ return data, status_code, headers
83
+ end
84
+
85
+ # Get status of an asynchronous verification
86
+ # Retrieves the status and result of an asynchronous verification task. **Possible statuses:** - `PENDING`: Task waiting in queue - `STARTED`: Task currently running - `SUCCESS`: Task completed successfully (see `result`) - `FAILURE`: System error (unhandled exception) **Note:** The `result.status` field can be \"SUCCESS\" or \"ERROR\" independently of Celery status (which will always be SUCCESS if the task ran).
87
+ # @param task_id [String]
88
+ # @param [Hash] opts the optional parameters
89
+ # @return [TaskStatus]
90
+ def get_verification_status_api_v1_verification_verify_async_task_id_status_get_0(task_id, opts = {})
91
+ data, _status_code, _headers = get_verification_status_api_v1_verification_verify_async_task_id_status_get_0_with_http_info(task_id, opts)
92
+ data
93
+ end
94
+
95
+ # Get status of an asynchronous verification
96
+ # Retrieves the status and result of an asynchronous verification task. **Possible statuses:** - &#x60;PENDING&#x60;: Task waiting in queue - &#x60;STARTED&#x60;: Task currently running - &#x60;SUCCESS&#x60;: Task completed successfully (see &#x60;result&#x60;) - &#x60;FAILURE&#x60;: System error (unhandled exception) **Note:** The &#x60;result.status&#x60; field can be \&quot;SUCCESS\&quot; or \&quot;ERROR\&quot; independently of Celery status (which will always be SUCCESS if the task ran).
97
+ # @param task_id [String]
98
+ # @param [Hash] opts the optional parameters
99
+ # @return [Array<(TaskStatus, Integer, Hash)>] TaskStatus data, response status code and response headers
100
+ def get_verification_status_api_v1_verification_verify_async_task_id_status_get_0_with_http_info(task_id, opts = {})
101
+ if @api_client.config.debugging
102
+ @api_client.config.logger.debug 'Calling API: PDFXMLVerificationApi.get_verification_status_api_v1_verification_verify_async_task_id_status_get_0 ...'
103
+ end
104
+ # verify the required parameter 'task_id' is set
105
+ if @api_client.config.client_side_validation && task_id.nil?
106
+ fail ArgumentError, "Missing the required parameter 'task_id' when calling PDFXMLVerificationApi.get_verification_status_api_v1_verification_verify_async_task_id_status_get_0"
107
+ end
108
+ # resource path
109
+ local_var_path = '/api/v1/verification/verify-async/{task_id}/status'.sub('{' + 'task_id' + '}', CGI.escape(task_id.to_s))
110
+
111
+ # query parameters
112
+ query_params = opts[:query_params] || {}
113
+
114
+ # header parameters
115
+ header_params = opts[:header_params] || {}
116
+ # HTTP header 'Accept' (if needed)
117
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
118
+
119
+ # form parameters
120
+ form_params = opts[:form_params] || {}
121
+
122
+ # http body (model)
123
+ post_body = opts[:debug_body]
124
+
125
+ # return_type
126
+ return_type = opts[:debug_return_type] || 'TaskStatus'
127
+
128
+ # auth_names
129
+ auth_names = opts[:debug_auth_names] || ['HTTPBearer']
130
+
131
+ new_options = opts.merge(
132
+ :operation => :"PDFXMLVerificationApi.get_verification_status_api_v1_verification_verify_async_task_id_status_get_0",
133
+ :header_params => header_params,
134
+ :query_params => query_params,
135
+ :form_params => form_params,
136
+ :body => post_body,
137
+ :auth_names => auth_names,
138
+ :return_type => return_type
139
+ )
140
+
141
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
142
+ if @api_client.config.debugging
143
+ @api_client.config.logger.debug "API called: PDFXMLVerificationApi#get_verification_status_api_v1_verification_verify_async_task_id_status_get_0\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
144
+ end
145
+ return data, status_code, headers
146
+ end
147
+
148
+ # Verify PDF/XML Factur-X compliance (asynchronous)
149
+ # Verifies PDF/XML Factur-X compliance asynchronously. **IMPORTANT**: Only Factur-X PDFs (with embedded XML) are accepted. PDFs without Factur-X XML will return a `NOT_FACTURX` error in the result. This version uses a Celery task and can call the OCR service if the PDF is an image or if `force_ocr=true`. **Returns immediately** a task ID. Use `/verify-async/{task_id}/status` to retrieve the result. **Verification principle (Factur-X 1.08):** - Principle #2: XML can only contain info present in the PDF - Principle #4: All XML info must be present and compliant in the PDF **Verified fields:** - Identification: BT-1 (invoice #), BT-2 (date), BT-3 (type), BT-5 (currency), BT-23 (framework) - Seller: BT-27 (name), BT-29 (SIRET), BT-30 (SIREN), BT-31 (VAT) - Buyer: BT-44 (name), BT-46 (SIRET), BT-47 (SIREN), BT-48 (VAT) - Amounts: BT-109 (excl. tax), BT-110 (VAT), BT-112 (incl. tax), BT-115 (amount due) - VAT breakdown: BT-116, BT-117, BT-118, BT-119 - Invoice lines: BT-153, BT-129, BT-146, BT-131 - Mandatory notes: PMT, PMD, AAB - Rule BR-FR-09: SIRET/SIREN consistency **Advantages over synchronous version:** - OCR support for image PDFs (via DocTR service) - Longer timeout for large documents - Doesn't block the server
150
+ # @param pdf_file [File] Factur-X PDF file to verify
151
+ # @param [Hash] opts the optional parameters
152
+ # @option opts [Boolean] :force_ocr Force OCR usage even if PDF contains native text (default to false)
153
+ # @return [TaskResponse]
154
+ def verify_pdf_async_api_v1_verification_verify_async_post(pdf_file, opts = {})
155
+ data, _status_code, _headers = verify_pdf_async_api_v1_verification_verify_async_post_with_http_info(pdf_file, opts)
156
+ data
157
+ end
158
+
159
+ # Verify PDF/XML Factur-X compliance (asynchronous)
160
+ # Verifies PDF/XML Factur-X compliance asynchronously. **IMPORTANT**: Only Factur-X PDFs (with embedded XML) are accepted. PDFs without Factur-X XML will return a &#x60;NOT_FACTURX&#x60; error in the result. This version uses a Celery task and can call the OCR service if the PDF is an image or if &#x60;force_ocr&#x3D;true&#x60;. **Returns immediately** a task ID. Use &#x60;/verify-async/{task_id}/status&#x60; to retrieve the result. **Verification principle (Factur-X 1.08):** - Principle #2: XML can only contain info present in the PDF - Principle #4: All XML info must be present and compliant in the PDF **Verified fields:** - Identification: BT-1 (invoice #), BT-2 (date), BT-3 (type), BT-5 (currency), BT-23 (framework) - Seller: BT-27 (name), BT-29 (SIRET), BT-30 (SIREN), BT-31 (VAT) - Buyer: BT-44 (name), BT-46 (SIRET), BT-47 (SIREN), BT-48 (VAT) - Amounts: BT-109 (excl. tax), BT-110 (VAT), BT-112 (incl. tax), BT-115 (amount due) - VAT breakdown: BT-116, BT-117, BT-118, BT-119 - Invoice lines: BT-153, BT-129, BT-146, BT-131 - Mandatory notes: PMT, PMD, AAB - Rule BR-FR-09: SIRET/SIREN consistency **Advantages over synchronous version:** - OCR support for image PDFs (via DocTR service) - Longer timeout for large documents - Doesn&#39;t block the server
161
+ # @param pdf_file [File] Factur-X PDF file to verify
162
+ # @param [Hash] opts the optional parameters
163
+ # @option opts [Boolean] :force_ocr Force OCR usage even if PDF contains native text (default to false)
164
+ # @return [Array<(TaskResponse, Integer, Hash)>] TaskResponse data, response status code and response headers
165
+ def verify_pdf_async_api_v1_verification_verify_async_post_with_http_info(pdf_file, opts = {})
166
+ if @api_client.config.debugging
167
+ @api_client.config.logger.debug 'Calling API: PDFXMLVerificationApi.verify_pdf_async_api_v1_verification_verify_async_post ...'
168
+ end
169
+ # verify the required parameter 'pdf_file' is set
170
+ if @api_client.config.client_side_validation && pdf_file.nil?
171
+ fail ArgumentError, "Missing the required parameter 'pdf_file' when calling PDFXMLVerificationApi.verify_pdf_async_api_v1_verification_verify_async_post"
172
+ end
173
+ # resource path
174
+ local_var_path = '/api/v1/verification/verify-async'
175
+
176
+ # query parameters
177
+ query_params = opts[:query_params] || {}
178
+
179
+ # header parameters
180
+ header_params = opts[:header_params] || {}
181
+ # HTTP header 'Accept' (if needed)
182
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
183
+ # HTTP header 'Content-Type'
184
+ content_type = @api_client.select_header_content_type(['multipart/form-data'])
185
+ if !content_type.nil?
186
+ header_params['Content-Type'] = content_type
187
+ end
188
+
189
+ # form parameters
190
+ form_params = opts[:form_params] || {}
191
+ form_params['pdf_file'] = pdf_file
192
+ form_params['force_ocr'] = opts[:'force_ocr'] if !opts[:'force_ocr'].nil?
193
+
194
+ # http body (model)
195
+ post_body = opts[:debug_body]
196
+
197
+ # return_type
198
+ return_type = opts[:debug_return_type] || 'TaskResponse'
199
+
200
+ # auth_names
201
+ auth_names = opts[:debug_auth_names] || ['HTTPBearer']
202
+
203
+ new_options = opts.merge(
204
+ :operation => :"PDFXMLVerificationApi.verify_pdf_async_api_v1_verification_verify_async_post",
205
+ :header_params => header_params,
206
+ :query_params => query_params,
207
+ :form_params => form_params,
208
+ :body => post_body,
209
+ :auth_names => auth_names,
210
+ :return_type => return_type
211
+ )
212
+
213
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
214
+ if @api_client.config.debugging
215
+ @api_client.config.logger.debug "API called: PDFXMLVerificationApi#verify_pdf_async_api_v1_verification_verify_async_post\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
216
+ end
217
+ return data, status_code, headers
218
+ end
219
+
220
+ # Verify PDF/XML Factur-X compliance (asynchronous)
221
+ # Verifies PDF/XML Factur-X compliance asynchronously. **IMPORTANT**: Only Factur-X PDFs (with embedded XML) are accepted. PDFs without Factur-X XML will return a `NOT_FACTURX` error in the result. This version uses a Celery task and can call the OCR service if the PDF is an image or if `force_ocr=true`. **Returns immediately** a task ID. Use `/verify-async/{task_id}/status` to retrieve the result. **Verification principle (Factur-X 1.08):** - Principle #2: XML can only contain info present in the PDF - Principle #4: All XML info must be present and compliant in the PDF **Verified fields:** - Identification: BT-1 (invoice #), BT-2 (date), BT-3 (type), BT-5 (currency), BT-23 (framework) - Seller: BT-27 (name), BT-29 (SIRET), BT-30 (SIREN), BT-31 (VAT) - Buyer: BT-44 (name), BT-46 (SIRET), BT-47 (SIREN), BT-48 (VAT) - Amounts: BT-109 (excl. tax), BT-110 (VAT), BT-112 (incl. tax), BT-115 (amount due) - VAT breakdown: BT-116, BT-117, BT-118, BT-119 - Invoice lines: BT-153, BT-129, BT-146, BT-131 - Mandatory notes: PMT, PMD, AAB - Rule BR-FR-09: SIRET/SIREN consistency **Advantages over synchronous version:** - OCR support for image PDFs (via DocTR service) - Longer timeout for large documents - Doesn't block the server
222
+ # @param pdf_file [File] Factur-X PDF file to verify
223
+ # @param [Hash] opts the optional parameters
224
+ # @option opts [Boolean] :force_ocr Force OCR usage even if PDF contains native text (default to false)
225
+ # @return [TaskResponse]
226
+ def verify_pdf_async_api_v1_verification_verify_async_post_0(pdf_file, opts = {})
227
+ data, _status_code, _headers = verify_pdf_async_api_v1_verification_verify_async_post_0_with_http_info(pdf_file, opts)
228
+ data
229
+ end
230
+
231
+ # Verify PDF/XML Factur-X compliance (asynchronous)
232
+ # Verifies PDF/XML Factur-X compliance asynchronously. **IMPORTANT**: Only Factur-X PDFs (with embedded XML) are accepted. PDFs without Factur-X XML will return a &#x60;NOT_FACTURX&#x60; error in the result. This version uses a Celery task and can call the OCR service if the PDF is an image or if &#x60;force_ocr&#x3D;true&#x60;. **Returns immediately** a task ID. Use &#x60;/verify-async/{task_id}/status&#x60; to retrieve the result. **Verification principle (Factur-X 1.08):** - Principle #2: XML can only contain info present in the PDF - Principle #4: All XML info must be present and compliant in the PDF **Verified fields:** - Identification: BT-1 (invoice #), BT-2 (date), BT-3 (type), BT-5 (currency), BT-23 (framework) - Seller: BT-27 (name), BT-29 (SIRET), BT-30 (SIREN), BT-31 (VAT) - Buyer: BT-44 (name), BT-46 (SIRET), BT-47 (SIREN), BT-48 (VAT) - Amounts: BT-109 (excl. tax), BT-110 (VAT), BT-112 (incl. tax), BT-115 (amount due) - VAT breakdown: BT-116, BT-117, BT-118, BT-119 - Invoice lines: BT-153, BT-129, BT-146, BT-131 - Mandatory notes: PMT, PMD, AAB - Rule BR-FR-09: SIRET/SIREN consistency **Advantages over synchronous version:** - OCR support for image PDFs (via DocTR service) - Longer timeout for large documents - Doesn&#39;t block the server
233
+ # @param pdf_file [File] Factur-X PDF file to verify
234
+ # @param [Hash] opts the optional parameters
235
+ # @option opts [Boolean] :force_ocr Force OCR usage even if PDF contains native text (default to false)
236
+ # @return [Array<(TaskResponse, Integer, Hash)>] TaskResponse data, response status code and response headers
237
+ def verify_pdf_async_api_v1_verification_verify_async_post_0_with_http_info(pdf_file, opts = {})
238
+ if @api_client.config.debugging
239
+ @api_client.config.logger.debug 'Calling API: PDFXMLVerificationApi.verify_pdf_async_api_v1_verification_verify_async_post_0 ...'
240
+ end
241
+ # verify the required parameter 'pdf_file' is set
242
+ if @api_client.config.client_side_validation && pdf_file.nil?
243
+ fail ArgumentError, "Missing the required parameter 'pdf_file' when calling PDFXMLVerificationApi.verify_pdf_async_api_v1_verification_verify_async_post_0"
244
+ end
245
+ # resource path
246
+ local_var_path = '/api/v1/verification/verify-async'
247
+
248
+ # query parameters
249
+ query_params = opts[:query_params] || {}
250
+
251
+ # header parameters
252
+ header_params = opts[:header_params] || {}
253
+ # HTTP header 'Accept' (if needed)
254
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
255
+ # HTTP header 'Content-Type'
256
+ content_type = @api_client.select_header_content_type(['multipart/form-data'])
257
+ if !content_type.nil?
258
+ header_params['Content-Type'] = content_type
259
+ end
260
+
261
+ # form parameters
262
+ form_params = opts[:form_params] || {}
263
+ form_params['pdf_file'] = pdf_file
264
+ form_params['force_ocr'] = opts[:'force_ocr'] if !opts[:'force_ocr'].nil?
265
+
266
+ # http body (model)
267
+ post_body = opts[:debug_body]
268
+
269
+ # return_type
270
+ return_type = opts[:debug_return_type] || 'TaskResponse'
271
+
272
+ # auth_names
273
+ auth_names = opts[:debug_auth_names] || ['HTTPBearer']
274
+
275
+ new_options = opts.merge(
276
+ :operation => :"PDFXMLVerificationApi.verify_pdf_async_api_v1_verification_verify_async_post_0",
277
+ :header_params => header_params,
278
+ :query_params => query_params,
279
+ :form_params => form_params,
280
+ :body => post_body,
281
+ :auth_names => auth_names,
282
+ :return_type => return_type
283
+ )
284
+
285
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
286
+ if @api_client.config.debugging
287
+ @api_client.config.logger.debug "API called: PDFXMLVerificationApi#verify_pdf_async_api_v1_verification_verify_async_post_0\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
288
+ end
289
+ return data, status_code, headers
290
+ end
291
+
292
+ # Verify PDF/XML Factur-X compliance (synchronous)
293
+ # Verifies compliance between the PDF and its embedded Factur-X XML. **IMPORTANT**: Only Factur-X PDFs (with embedded XML) are accepted. PDFs without Factur-X XML will be rejected with a 400 error. This synchronous version uses only native PDF extraction (pdfplumber). For image PDFs requiring OCR, use the `/verify-async` endpoint. **Verification principle (Factur-X 1.08):** - Principle #2: XML can only contain info present in the PDF - Principle #4: All XML info must be present and compliant in the PDF **Verified fields:** - Identification: BT-1 (invoice #), BT-2 (date), BT-3 (type), BT-5 (currency), BT-23 (framework) - Seller: BT-27 (name), BT-29 (SIRET), BT-30 (SIREN), BT-31 (VAT) - Buyer: BT-44 (name), BT-46 (SIRET), BT-47 (SIREN), BT-48 (VAT) - Amounts: BT-109 (excl. tax), BT-110 (VAT), BT-112 (incl. tax), BT-115 (amount due) - VAT breakdown: BT-116, BT-117, BT-118, BT-119 - Invoice lines: BT-153, BT-129, BT-146, BT-131 - Mandatory notes: PMT, PMD, AAB - Rule BR-FR-09: SIRET/SIREN consistency
294
+ # @param pdf_file [File] Factur-X PDF file to verify
295
+ # @param [Hash] opts the optional parameters
296
+ # @return [VerificationSuccessResponse]
297
+ def verify_pdf_sync_api_v1_verification_verify_post(pdf_file, opts = {})
298
+ data, _status_code, _headers = verify_pdf_sync_api_v1_verification_verify_post_with_http_info(pdf_file, opts)
299
+ data
300
+ end
301
+
302
+ # Verify PDF/XML Factur-X compliance (synchronous)
303
+ # Verifies compliance between the PDF and its embedded Factur-X XML. **IMPORTANT**: Only Factur-X PDFs (with embedded XML) are accepted. PDFs without Factur-X XML will be rejected with a 400 error. This synchronous version uses only native PDF extraction (pdfplumber). For image PDFs requiring OCR, use the &#x60;/verify-async&#x60; endpoint. **Verification principle (Factur-X 1.08):** - Principle #2: XML can only contain info present in the PDF - Principle #4: All XML info must be present and compliant in the PDF **Verified fields:** - Identification: BT-1 (invoice #), BT-2 (date), BT-3 (type), BT-5 (currency), BT-23 (framework) - Seller: BT-27 (name), BT-29 (SIRET), BT-30 (SIREN), BT-31 (VAT) - Buyer: BT-44 (name), BT-46 (SIRET), BT-47 (SIREN), BT-48 (VAT) - Amounts: BT-109 (excl. tax), BT-110 (VAT), BT-112 (incl. tax), BT-115 (amount due) - VAT breakdown: BT-116, BT-117, BT-118, BT-119 - Invoice lines: BT-153, BT-129, BT-146, BT-131 - Mandatory notes: PMT, PMD, AAB - Rule BR-FR-09: SIRET/SIREN consistency
304
+ # @param pdf_file [File] Factur-X PDF file to verify
305
+ # @param [Hash] opts the optional parameters
306
+ # @return [Array<(VerificationSuccessResponse, Integer, Hash)>] VerificationSuccessResponse data, response status code and response headers
307
+ def verify_pdf_sync_api_v1_verification_verify_post_with_http_info(pdf_file, opts = {})
308
+ if @api_client.config.debugging
309
+ @api_client.config.logger.debug 'Calling API: PDFXMLVerificationApi.verify_pdf_sync_api_v1_verification_verify_post ...'
310
+ end
311
+ # verify the required parameter 'pdf_file' is set
312
+ if @api_client.config.client_side_validation && pdf_file.nil?
313
+ fail ArgumentError, "Missing the required parameter 'pdf_file' when calling PDFXMLVerificationApi.verify_pdf_sync_api_v1_verification_verify_post"
314
+ end
315
+ # resource path
316
+ local_var_path = '/api/v1/verification/verify'
317
+
318
+ # query parameters
319
+ query_params = opts[:query_params] || {}
320
+
321
+ # header parameters
322
+ header_params = opts[:header_params] || {}
323
+ # HTTP header 'Accept' (if needed)
324
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
325
+ # HTTP header 'Content-Type'
326
+ content_type = @api_client.select_header_content_type(['multipart/form-data'])
327
+ if !content_type.nil?
328
+ header_params['Content-Type'] = content_type
329
+ end
330
+
331
+ # form parameters
332
+ form_params = opts[:form_params] || {}
333
+ form_params['pdf_file'] = pdf_file
334
+
335
+ # http body (model)
336
+ post_body = opts[:debug_body]
337
+
338
+ # return_type
339
+ return_type = opts[:debug_return_type] || 'VerificationSuccessResponse'
340
+
341
+ # auth_names
342
+ auth_names = opts[:debug_auth_names] || ['HTTPBearer']
343
+
344
+ new_options = opts.merge(
345
+ :operation => :"PDFXMLVerificationApi.verify_pdf_sync_api_v1_verification_verify_post",
346
+ :header_params => header_params,
347
+ :query_params => query_params,
348
+ :form_params => form_params,
349
+ :body => post_body,
350
+ :auth_names => auth_names,
351
+ :return_type => return_type
352
+ )
353
+
354
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
355
+ if @api_client.config.debugging
356
+ @api_client.config.logger.debug "API called: PDFXMLVerificationApi#verify_pdf_sync_api_v1_verification_verify_post\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
357
+ end
358
+ return data, status_code, headers
359
+ end
360
+
361
+ # Verify PDF/XML Factur-X compliance (synchronous)
362
+ # Verifies compliance between the PDF and its embedded Factur-X XML. **IMPORTANT**: Only Factur-X PDFs (with embedded XML) are accepted. PDFs without Factur-X XML will be rejected with a 400 error. This synchronous version uses only native PDF extraction (pdfplumber). For image PDFs requiring OCR, use the `/verify-async` endpoint. **Verification principle (Factur-X 1.08):** - Principle #2: XML can only contain info present in the PDF - Principle #4: All XML info must be present and compliant in the PDF **Verified fields:** - Identification: BT-1 (invoice #), BT-2 (date), BT-3 (type), BT-5 (currency), BT-23 (framework) - Seller: BT-27 (name), BT-29 (SIRET), BT-30 (SIREN), BT-31 (VAT) - Buyer: BT-44 (name), BT-46 (SIRET), BT-47 (SIREN), BT-48 (VAT) - Amounts: BT-109 (excl. tax), BT-110 (VAT), BT-112 (incl. tax), BT-115 (amount due) - VAT breakdown: BT-116, BT-117, BT-118, BT-119 - Invoice lines: BT-153, BT-129, BT-146, BT-131 - Mandatory notes: PMT, PMD, AAB - Rule BR-FR-09: SIRET/SIREN consistency
363
+ # @param pdf_file [File] Factur-X PDF file to verify
364
+ # @param [Hash] opts the optional parameters
365
+ # @return [VerificationSuccessResponse]
366
+ def verify_pdf_sync_api_v1_verification_verify_post_0(pdf_file, opts = {})
367
+ data, _status_code, _headers = verify_pdf_sync_api_v1_verification_verify_post_0_with_http_info(pdf_file, opts)
368
+ data
369
+ end
370
+
371
+ # Verify PDF/XML Factur-X compliance (synchronous)
372
+ # Verifies compliance between the PDF and its embedded Factur-X XML. **IMPORTANT**: Only Factur-X PDFs (with embedded XML) are accepted. PDFs without Factur-X XML will be rejected with a 400 error. This synchronous version uses only native PDF extraction (pdfplumber). For image PDFs requiring OCR, use the &#x60;/verify-async&#x60; endpoint. **Verification principle (Factur-X 1.08):** - Principle #2: XML can only contain info present in the PDF - Principle #4: All XML info must be present and compliant in the PDF **Verified fields:** - Identification: BT-1 (invoice #), BT-2 (date), BT-3 (type), BT-5 (currency), BT-23 (framework) - Seller: BT-27 (name), BT-29 (SIRET), BT-30 (SIREN), BT-31 (VAT) - Buyer: BT-44 (name), BT-46 (SIRET), BT-47 (SIREN), BT-48 (VAT) - Amounts: BT-109 (excl. tax), BT-110 (VAT), BT-112 (incl. tax), BT-115 (amount due) - VAT breakdown: BT-116, BT-117, BT-118, BT-119 - Invoice lines: BT-153, BT-129, BT-146, BT-131 - Mandatory notes: PMT, PMD, AAB - Rule BR-FR-09: SIRET/SIREN consistency
373
+ # @param pdf_file [File] Factur-X PDF file to verify
374
+ # @param [Hash] opts the optional parameters
375
+ # @return [Array<(VerificationSuccessResponse, Integer, Hash)>] VerificationSuccessResponse data, response status code and response headers
376
+ def verify_pdf_sync_api_v1_verification_verify_post_0_with_http_info(pdf_file, opts = {})
377
+ if @api_client.config.debugging
378
+ @api_client.config.logger.debug 'Calling API: PDFXMLVerificationApi.verify_pdf_sync_api_v1_verification_verify_post_0 ...'
379
+ end
380
+ # verify the required parameter 'pdf_file' is set
381
+ if @api_client.config.client_side_validation && pdf_file.nil?
382
+ fail ArgumentError, "Missing the required parameter 'pdf_file' when calling PDFXMLVerificationApi.verify_pdf_sync_api_v1_verification_verify_post_0"
383
+ end
384
+ # resource path
385
+ local_var_path = '/api/v1/verification/verify'
386
+
387
+ # query parameters
388
+ query_params = opts[:query_params] || {}
389
+
390
+ # header parameters
391
+ header_params = opts[:header_params] || {}
392
+ # HTTP header 'Accept' (if needed)
393
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
394
+ # HTTP header 'Content-Type'
395
+ content_type = @api_client.select_header_content_type(['multipart/form-data'])
396
+ if !content_type.nil?
397
+ header_params['Content-Type'] = content_type
398
+ end
399
+
400
+ # form parameters
401
+ form_params = opts[:form_params] || {}
402
+ form_params['pdf_file'] = pdf_file
403
+
404
+ # http body (model)
405
+ post_body = opts[:debug_body]
406
+
407
+ # return_type
408
+ return_type = opts[:debug_return_type] || 'VerificationSuccessResponse'
409
+
410
+ # auth_names
411
+ auth_names = opts[:debug_auth_names] || ['HTTPBearer']
412
+
413
+ new_options = opts.merge(
414
+ :operation => :"PDFXMLVerificationApi.verify_pdf_sync_api_v1_verification_verify_post_0",
415
+ :header_params => header_params,
416
+ :query_params => query_params,
417
+ :form_params => form_params,
418
+ :body => post_body,
419
+ :auth_names => auth_names,
420
+ :return_type => return_type
421
+ )
422
+
423
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
424
+ if @api_client.config.debugging
425
+ @api_client.config.logger.debug "API called: PDFXMLVerificationApi#verify_pdf_sync_api_v1_verification_verify_post_0\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
426
+ end
427
+ return data, status_code, headers
428
+ end
429
+ end
430
+ end
@@ -0,0 +1,79 @@
1
+ =begin
2
+ #FactPulse REST API
3
+
4
+ # REST API for electronic invoicing in France: Factur-X, AFNOR PDP/PA, electronic signatures. ## 🎯 Main Features ### 📄 Factur-X Invoice Generation - **Formats**: XML only or PDF/A-3 with embedded XML - **Profiles**: MINIMUM, BASIC, EN16931, EXTENDED - **Standards**: EN 16931 (EU directive 2014/55), ISO 19005-3 (PDF/A-3), CII (UN/CEFACT) - **🆕 Simplified Format**: Generation from SIRET + auto-enrichment (Chorus Pro API + Business Search) ### ✅ Validation and Compliance - **XML Validation**: Schematron (45 to 210+ rules depending on profile) - **PDF Validation**: PDF/A-3, Factur-X XMP metadata, electronic signatures - **VeraPDF**: Strict PDF/A validation (146+ ISO 19005-3 rules) - **Asynchronous Processing**: Celery support for heavy validations (VeraPDF) ### 📡 AFNOR PDP/PA Integration (XP Z12-013) - **Flow Submission**: Send invoices to Partner Dematerialization Platforms - **Flow Search**: View submitted invoices - **Download**: Retrieve PDF/A-3 with XML - **Directory Service**: Company search (SIREN/SIRET) - **Multi-client**: Support for multiple PDP configs per user (stored credentials or zero-storage) ### ✍️ PDF Electronic Signature - **Standards**: PAdES-B-B, PAdES-B-T (RFC 3161 timestamping), PAdES-B-LT (long-term archival) - **eIDAS Levels**: SES (self-signed), AdES (commercial CA), QES (QTSP) - **Validation**: Cryptographic integrity and certificate verification - **Certificate Generation**: Self-signed X.509 certificates for testing ### 🔄 Asynchronous Processing - **Celery**: Asynchronous generation, validation and signing - **Polling**: Status tracking via `/tasks/{task_id}/status` - **No timeout**: Ideal for large files or heavy validations ## 🔒 Authentication All requests require a **JWT token** in the Authorization header: ``` Authorization: Bearer YOUR_JWT_TOKEN ``` ### How to obtain a JWT token? #### 🔑 Method 1: `/api/token/` API (Recommended) **URL:** `https://www.factpulse.fr/api/token/` This method is **recommended** for integration in your applications and CI/CD workflows. **Prerequisites:** Having set a password on your account **For users registered via email/password:** - You already have a password, use it directly **For users registered via OAuth (Google/GitHub):** - You must first set a password at: https://www.factpulse.fr/accounts/password/set/ - Once the password is created, you can use the API **Request example:** ```bash curl -X POST https://www.factpulse.fr/api/token/ \\ -H \"Content-Type: application/json\" \\ -d '{ \"username\": \"your_email@example.com\", \"password\": \"your_password\" }' ``` **Optional `client_uid` parameter:** To select credentials for a specific client (PA/PDP, Chorus Pro, signing certificates), add `client_uid`: ```bash curl -X POST https://www.factpulse.fr/api/token/ \\ -H \"Content-Type: application/json\" \\ -d '{ \"username\": \"your_email@example.com\", \"password\": \"your_password\", \"client_uid\": \"550e8400-e29b-41d4-a716-446655440000\" }' ``` The `client_uid` will be included in the JWT and allow the API to automatically use: - AFNOR/PDP credentials configured for this client - Chorus Pro credentials configured for this client - Electronic signature certificates configured for this client **Response:** ```json { \"access\": \"eyJ0eXAiOiJKV1QiLCJhbGc...\", // Access token (validity: 30 min) \"refresh\": \"eyJ0eXAiOiJKV1QiLCJhbGc...\" // Refresh token (validity: 7 days) } ``` **Advantages:** - ✅ Full automation (CI/CD, scripts) - ✅ Programmatic token management - ✅ Refresh token support for automatic access renewal - ✅ Easy integration in any language/tool #### 🖥️ Method 2: Dashboard Generation (Alternative) **URL:** https://www.factpulse.fr/dashboard/ This method is suitable for quick tests or occasional use via the graphical interface. **How it works:** - Log in to the dashboard - Use the \"Generate Test Token\" or \"Generate Production Token\" buttons - Works for **all** users (OAuth and email/password), without requiring a password **Token types:** - **Test Token**: 24h validity, 1000 calls/day quota (free) - **Production Token**: 7 days validity, quota based on your plan **Advantages:** - ✅ Quick for API testing - ✅ No password required - ✅ Simple visual interface **Disadvantages:** - ❌ Requires manual action - ❌ No refresh token - ❌ Less suited for automation ### 📚 Full Documentation For more information on authentication and API usage: https://www.factpulse.fr/documentation-api/
5
+
6
+ The version of the OpenAPI document: 1.0.0
7
+
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.18.0-SNAPSHOT
10
+
11
+ =end
12
+
13
+ require 'cgi'
14
+
15
+ module FactPulse
16
+ class UserApi
17
+ attr_accessor :api_client
18
+
19
+ def initialize(api_client = ApiClient.default)
20
+ @api_client = api_client
21
+ end
22
+ # Get current user information
23
+ # Returns information about the authenticated user. This endpoint allows you to: - Verify that authentication works - Get connected account details - Test JWT token validity - Check your consumption quota **Requires valid authentication.**
24
+ # @param [Hash] opts the optional parameters
25
+ # @return [Object]
26
+ def get_user_info_api_v1_me_get(opts = {})
27
+ data, _status_code, _headers = get_user_info_api_v1_me_get_with_http_info(opts)
28
+ data
29
+ end
30
+
31
+ # Get current user information
32
+ # Returns information about the authenticated user. This endpoint allows you to: - Verify that authentication works - Get connected account details - Test JWT token validity - Check your consumption quota **Requires valid authentication.**
33
+ # @param [Hash] opts the optional parameters
34
+ # @return [Array<(Object, Integer, Hash)>] Object data, response status code and response headers
35
+ def get_user_info_api_v1_me_get_with_http_info(opts = {})
36
+ if @api_client.config.debugging
37
+ @api_client.config.logger.debug 'Calling API: UserApi.get_user_info_api_v1_me_get ...'
38
+ end
39
+ # resource path
40
+ local_var_path = '/api/v1/me'
41
+
42
+ # query parameters
43
+ query_params = opts[:query_params] || {}
44
+
45
+ # header parameters
46
+ header_params = opts[:header_params] || {}
47
+ # HTTP header 'Accept' (if needed)
48
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
49
+
50
+ # form parameters
51
+ form_params = opts[:form_params] || {}
52
+
53
+ # http body (model)
54
+ post_body = opts[:debug_body]
55
+
56
+ # return_type
57
+ return_type = opts[:debug_return_type] || 'Object'
58
+
59
+ # auth_names
60
+ auth_names = opts[:debug_auth_names] || ['HTTPBearer']
61
+
62
+ new_options = opts.merge(
63
+ :operation => :"UserApi.get_user_info_api_v1_me_get",
64
+ :header_params => header_params,
65
+ :query_params => query_params,
66
+ :form_params => form_params,
67
+ :body => post_body,
68
+ :auth_names => auth_names,
69
+ :return_type => return_type
70
+ )
71
+
72
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
73
+ if @api_client.config.debugging
74
+ @api_client.config.logger.debug "API called: UserApi#get_user_info_api_v1_me_get\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
75
+ end
76
+ return data, status_code, headers
77
+ end
78
+ end
79
+ end
@@ -1,7 +1,7 @@
1
1
  =begin
2
- #API REST FactPulse
2
+ #FactPulse REST API
3
3
 
4
- # API REST pour la facturation électronique en France : Factur-X, AFNOR PDP/PA, signatures électroniques. ## 🎯 Fonctionnalités principales ### 📄 Génération de factures Factur-X - **Formats** : XML seul ou PDF/A-3 avec XML embarqué - **Profils** : MINIMUM, BASIC, EN16931, EXTENDED - **Normes** : EN 16931 (directive UE 2014/55), ISO 19005-3 (PDF/A-3), CII (UN/CEFACT) - **🆕 Format simplifié** : Génération à partir de SIRET + auto-enrichissement (API Chorus Pro + Recherche Entreprises) ### ✅ Validation et conformité - **Validation XML** : Schematron (45 à 210+ règles selon profil) - **Validation PDF** : PDF/A-3, métadonnées XMP Factur-X, signatures électroniques - **VeraPDF** : Validation stricte PDF/A (146+ règles ISO 19005-3) - **Traitement asynchrone** : Support Celery pour validations lourdes (VeraPDF) ### 📡 Intégration AFNOR PDP/PA (XP Z12-013) - **Soumission de flux** : Envoi de factures vers Plateformes de Dématérialisation Partenaires - **Recherche de flux** : Consultation des factures soumises - **Téléchargement** : Récupération des PDF/A-3 avec XML - **Directory Service** : Recherche d'entreprises (SIREN/SIRET) - **Multi-client** : Support de plusieurs configs PDP par utilisateur (stored credentials ou zero-storage) ### ✍️ Signature électronique PDF - **Standards** : PAdES-B-B, PAdES-B-T (horodatage RFC 3161), PAdES-B-LT (archivage long terme) - **Niveaux eIDAS** : SES (auto-signé), AdES (CA commerciale), QES (PSCO) - **Validation** : Vérification intégrité cryptographique et certificats - **Génération de certificats** : Certificats X.509 auto-signés pour tests ### 🔄 Traitement asynchrone - **Celery** : Génération, validation et signature asynchrones - **Polling** : Suivi d'état via `/taches/{id_tache}/statut` - **Pas de timeout** : Idéal pour gros fichiers ou validations lourdes ## 🔒 Authentification Toutes les requêtes nécessitent un **token JWT** dans le header Authorization : ``` Authorization: Bearer YOUR_JWT_TOKEN ``` ### Comment obtenir un token JWT ? #### 🔑 Méthode 1 : API `/api/token/` (Recommandée) **URL :** `https://www.factpulse.fr/api/token/` Cette méthode est **recommandée** pour l'intégration dans vos applications et workflows CI/CD. **Prérequis :** Avoir défini un mot de passe sur votre compte **Pour les utilisateurs inscrits via email/password :** - Vous avez déjà un mot de passe, utilisez-le directement **Pour les utilisateurs inscrits via OAuth (Google/GitHub) :** - Vous devez d'abord définir un mot de passe sur : https://www.factpulse.fr/accounts/password/set/ - Une fois le mot de passe créé, vous pourrez utiliser l'API **Exemple de requête :** ```bash curl -X POST https://www.factpulse.fr/api/token/ \\ -H \"Content-Type: application/json\" \\ -d '{ \"username\": \"votre_email@example.com\", \"password\": \"votre_mot_de_passe\" }' ``` **Paramètre optionnel `client_uid` :** Pour sélectionner les credentials d'un client spécifique (PA/PDP, Chorus Pro, certificats de signature), ajoutez `client_uid` : ```bash curl -X POST https://www.factpulse.fr/api/token/ \\ -H \"Content-Type: application/json\" \\ -d '{ \"username\": \"votre_email@example.com\", \"password\": \"votre_mot_de_passe\", \"client_uid\": \"550e8400-e29b-41d4-a716-446655440000\" }' ``` Le `client_uid` sera inclus dans le JWT et permettra à l'API d'utiliser automatiquement : - Les credentials AFNOR/PDP configurés pour ce client - Les credentials Chorus Pro configurés pour ce client - Les certificats de signature électronique configurés pour ce client **Réponse :** ```json { \"access\": \"eyJ0eXAiOiJKV1QiLCJhbGc...\", // Token d'accès (validité: 30 min) \"refresh\": \"eyJ0eXAiOiJKV1QiLCJhbGc...\" // Token de rafraîchissement (validité: 7 jours) } ``` **Avantages :** - ✅ Automatisation complète (CI/CD, scripts) - ✅ Gestion programmatique des tokens - ✅ Support du refresh token pour renouveler automatiquement l'accès - ✅ Intégration facile dans n'importe quel langage/outil #### 🖥️ Méthode 2 : Génération via Dashboard (Alternative) **URL :** https://www.factpulse.fr/dashboard/ Cette méthode convient pour des tests rapides ou une utilisation occasionnelle via l'interface graphique. **Fonctionnement :** - Connectez-vous au dashboard - Utilisez les boutons \"Generate Test Token\" ou \"Generate Production Token\" - Fonctionne pour **tous** les utilisateurs (OAuth et email/password), sans nécessiter de mot de passe **Types de tokens :** - **Token Test** : Validité 24h, quota 1000 appels/jour (gratuit) - **Token Production** : Validité 7 jours, quota selon votre forfait **Avantages :** - ✅ Rapide pour tester l'API - ✅ Aucun mot de passe requis - ✅ Interface visuelle simple **Inconvénients :** - ❌ Nécessite une action manuelle - ❌ Pas de refresh token - ❌ Moins adapté pour l'automatisation ### 📚 Documentation complète Pour plus d'informations sur l'authentification et l'utilisation de l'API : https://www.factpulse.fr/documentation-api/
4
+ # REST API for electronic invoicing in France: Factur-X, AFNOR PDP/PA, electronic signatures. ## 🎯 Main Features ### 📄 Factur-X Invoice Generation - **Formats**: XML only or PDF/A-3 with embedded XML - **Profiles**: MINIMUM, BASIC, EN16931, EXTENDED - **Standards**: EN 16931 (EU directive 2014/55), ISO 19005-3 (PDF/A-3), CII (UN/CEFACT) - **🆕 Simplified Format**: Generation from SIRET + auto-enrichment (Chorus Pro API + Business Search) ### ✅ Validation and Compliance - **XML Validation**: Schematron (45 to 210+ rules depending on profile) - **PDF Validation**: PDF/A-3, Factur-X XMP metadata, electronic signatures - **VeraPDF**: Strict PDF/A validation (146+ ISO 19005-3 rules) - **Asynchronous Processing**: Celery support for heavy validations (VeraPDF) ### 📡 AFNOR PDP/PA Integration (XP Z12-013) - **Flow Submission**: Send invoices to Partner Dematerialization Platforms - **Flow Search**: View submitted invoices - **Download**: Retrieve PDF/A-3 with XML - **Directory Service**: Company search (SIREN/SIRET) - **Multi-client**: Support for multiple PDP configs per user (stored credentials or zero-storage) ### ✍️ PDF Electronic Signature - **Standards**: PAdES-B-B, PAdES-B-T (RFC 3161 timestamping), PAdES-B-LT (long-term archival) - **eIDAS Levels**: SES (self-signed), AdES (commercial CA), QES (QTSP) - **Validation**: Cryptographic integrity and certificate verification - **Certificate Generation**: Self-signed X.509 certificates for testing ### 🔄 Asynchronous Processing - **Celery**: Asynchronous generation, validation and signing - **Polling**: Status tracking via `/tasks/{task_id}/status` - **No timeout**: Ideal for large files or heavy validations ## 🔒 Authentication All requests require a **JWT token** in the Authorization header: ``` Authorization: Bearer YOUR_JWT_TOKEN ``` ### How to obtain a JWT token? #### 🔑 Method 1: `/api/token/` API (Recommended) **URL:** `https://www.factpulse.fr/api/token/` This method is **recommended** for integration in your applications and CI/CD workflows. **Prerequisites:** Having set a password on your account **For users registered via email/password:** - You already have a password, use it directly **For users registered via OAuth (Google/GitHub):** - You must first set a password at: https://www.factpulse.fr/accounts/password/set/ - Once the password is created, you can use the API **Request example:** ```bash curl -X POST https://www.factpulse.fr/api/token/ \\ -H \"Content-Type: application/json\" \\ -d '{ \"username\": \"your_email@example.com\", \"password\": \"your_password\" }' ``` **Optional `client_uid` parameter:** To select credentials for a specific client (PA/PDP, Chorus Pro, signing certificates), add `client_uid`: ```bash curl -X POST https://www.factpulse.fr/api/token/ \\ -H \"Content-Type: application/json\" \\ -d '{ \"username\": \"your_email@example.com\", \"password\": \"your_password\", \"client_uid\": \"550e8400-e29b-41d4-a716-446655440000\" }' ``` The `client_uid` will be included in the JWT and allow the API to automatically use: - AFNOR/PDP credentials configured for this client - Chorus Pro credentials configured for this client - Electronic signature certificates configured for this client **Response:** ```json { \"access\": \"eyJ0eXAiOiJKV1QiLCJhbGc...\", // Access token (validity: 30 min) \"refresh\": \"eyJ0eXAiOiJKV1QiLCJhbGc...\" // Refresh token (validity: 7 days) } ``` **Advantages:** - ✅ Full automation (CI/CD, scripts) - ✅ Programmatic token management - ✅ Refresh token support for automatic access renewal - ✅ Easy integration in any language/tool #### 🖥️ Method 2: Dashboard Generation (Alternative) **URL:** https://www.factpulse.fr/dashboard/ This method is suitable for quick tests or occasional use via the graphical interface. **How it works:** - Log in to the dashboard - Use the \"Generate Test Token\" or \"Generate Production Token\" buttons - Works for **all** users (OAuth and email/password), without requiring a password **Token types:** - **Test Token**: 24h validity, 1000 calls/day quota (free) - **Production Token**: 7 days validity, quota based on your plan **Advantages:** - ✅ Quick for API testing - ✅ No password required - ✅ Simple visual interface **Disadvantages:** - ❌ Requires manual action - ❌ No refresh token - ❌ Less suited for automation ### 📚 Full Documentation For more information on authentication and API usage: https://www.factpulse.fr/documentation-api/
5
5
 
6
6
  The version of the OpenAPI document: 1.0.0
7
7
 
@@ -1,7 +1,7 @@
1
1
  =begin
2
- #API REST FactPulse
2
+ #FactPulse REST API
3
3
 
4
- # API REST pour la facturation électronique en France : Factur-X, AFNOR PDP/PA, signatures électroniques. ## 🎯 Fonctionnalités principales ### 📄 Génération de factures Factur-X - **Formats** : XML seul ou PDF/A-3 avec XML embarqué - **Profils** : MINIMUM, BASIC, EN16931, EXTENDED - **Normes** : EN 16931 (directive UE 2014/55), ISO 19005-3 (PDF/A-3), CII (UN/CEFACT) - **🆕 Format simplifié** : Génération à partir de SIRET + auto-enrichissement (API Chorus Pro + Recherche Entreprises) ### ✅ Validation et conformité - **Validation XML** : Schematron (45 à 210+ règles selon profil) - **Validation PDF** : PDF/A-3, métadonnées XMP Factur-X, signatures électroniques - **VeraPDF** : Validation stricte PDF/A (146+ règles ISO 19005-3) - **Traitement asynchrone** : Support Celery pour validations lourdes (VeraPDF) ### 📡 Intégration AFNOR PDP/PA (XP Z12-013) - **Soumission de flux** : Envoi de factures vers Plateformes de Dématérialisation Partenaires - **Recherche de flux** : Consultation des factures soumises - **Téléchargement** : Récupération des PDF/A-3 avec XML - **Directory Service** : Recherche d'entreprises (SIREN/SIRET) - **Multi-client** : Support de plusieurs configs PDP par utilisateur (stored credentials ou zero-storage) ### ✍️ Signature électronique PDF - **Standards** : PAdES-B-B, PAdES-B-T (horodatage RFC 3161), PAdES-B-LT (archivage long terme) - **Niveaux eIDAS** : SES (auto-signé), AdES (CA commerciale), QES (PSCO) - **Validation** : Vérification intégrité cryptographique et certificats - **Génération de certificats** : Certificats X.509 auto-signés pour tests ### 🔄 Traitement asynchrone - **Celery** : Génération, validation et signature asynchrones - **Polling** : Suivi d'état via `/taches/{id_tache}/statut` - **Pas de timeout** : Idéal pour gros fichiers ou validations lourdes ## 🔒 Authentification Toutes les requêtes nécessitent un **token JWT** dans le header Authorization : ``` Authorization: Bearer YOUR_JWT_TOKEN ``` ### Comment obtenir un token JWT ? #### 🔑 Méthode 1 : API `/api/token/` (Recommandée) **URL :** `https://www.factpulse.fr/api/token/` Cette méthode est **recommandée** pour l'intégration dans vos applications et workflows CI/CD. **Prérequis :** Avoir défini un mot de passe sur votre compte **Pour les utilisateurs inscrits via email/password :** - Vous avez déjà un mot de passe, utilisez-le directement **Pour les utilisateurs inscrits via OAuth (Google/GitHub) :** - Vous devez d'abord définir un mot de passe sur : https://www.factpulse.fr/accounts/password/set/ - Une fois le mot de passe créé, vous pourrez utiliser l'API **Exemple de requête :** ```bash curl -X POST https://www.factpulse.fr/api/token/ \\ -H \"Content-Type: application/json\" \\ -d '{ \"username\": \"votre_email@example.com\", \"password\": \"votre_mot_de_passe\" }' ``` **Paramètre optionnel `client_uid` :** Pour sélectionner les credentials d'un client spécifique (PA/PDP, Chorus Pro, certificats de signature), ajoutez `client_uid` : ```bash curl -X POST https://www.factpulse.fr/api/token/ \\ -H \"Content-Type: application/json\" \\ -d '{ \"username\": \"votre_email@example.com\", \"password\": \"votre_mot_de_passe\", \"client_uid\": \"550e8400-e29b-41d4-a716-446655440000\" }' ``` Le `client_uid` sera inclus dans le JWT et permettra à l'API d'utiliser automatiquement : - Les credentials AFNOR/PDP configurés pour ce client - Les credentials Chorus Pro configurés pour ce client - Les certificats de signature électronique configurés pour ce client **Réponse :** ```json { \"access\": \"eyJ0eXAiOiJKV1QiLCJhbGc...\", // Token d'accès (validité: 30 min) \"refresh\": \"eyJ0eXAiOiJKV1QiLCJhbGc...\" // Token de rafraîchissement (validité: 7 jours) } ``` **Avantages :** - ✅ Automatisation complète (CI/CD, scripts) - ✅ Gestion programmatique des tokens - ✅ Support du refresh token pour renouveler automatiquement l'accès - ✅ Intégration facile dans n'importe quel langage/outil #### 🖥️ Méthode 2 : Génération via Dashboard (Alternative) **URL :** https://www.factpulse.fr/dashboard/ Cette méthode convient pour des tests rapides ou une utilisation occasionnelle via l'interface graphique. **Fonctionnement :** - Connectez-vous au dashboard - Utilisez les boutons \"Generate Test Token\" ou \"Generate Production Token\" - Fonctionne pour **tous** les utilisateurs (OAuth et email/password), sans nécessiter de mot de passe **Types de tokens :** - **Token Test** : Validité 24h, quota 1000 appels/jour (gratuit) - **Token Production** : Validité 7 jours, quota selon votre forfait **Avantages :** - ✅ Rapide pour tester l'API - ✅ Aucun mot de passe requis - ✅ Interface visuelle simple **Inconvénients :** - ❌ Nécessite une action manuelle - ❌ Pas de refresh token - ❌ Moins adapté pour l'automatisation ### 📚 Documentation complète Pour plus d'informations sur l'authentification et l'utilisation de l'API : https://www.factpulse.fr/documentation-api/
4
+ # REST API for electronic invoicing in France: Factur-X, AFNOR PDP/PA, electronic signatures. ## 🎯 Main Features ### 📄 Factur-X Invoice Generation - **Formats**: XML only or PDF/A-3 with embedded XML - **Profiles**: MINIMUM, BASIC, EN16931, EXTENDED - **Standards**: EN 16931 (EU directive 2014/55), ISO 19005-3 (PDF/A-3), CII (UN/CEFACT) - **🆕 Simplified Format**: Generation from SIRET + auto-enrichment (Chorus Pro API + Business Search) ### ✅ Validation and Compliance - **XML Validation**: Schematron (45 to 210+ rules depending on profile) - **PDF Validation**: PDF/A-3, Factur-X XMP metadata, electronic signatures - **VeraPDF**: Strict PDF/A validation (146+ ISO 19005-3 rules) - **Asynchronous Processing**: Celery support for heavy validations (VeraPDF) ### 📡 AFNOR PDP/PA Integration (XP Z12-013) - **Flow Submission**: Send invoices to Partner Dematerialization Platforms - **Flow Search**: View submitted invoices - **Download**: Retrieve PDF/A-3 with XML - **Directory Service**: Company search (SIREN/SIRET) - **Multi-client**: Support for multiple PDP configs per user (stored credentials or zero-storage) ### ✍️ PDF Electronic Signature - **Standards**: PAdES-B-B, PAdES-B-T (RFC 3161 timestamping), PAdES-B-LT (long-term archival) - **eIDAS Levels**: SES (self-signed), AdES (commercial CA), QES (QTSP) - **Validation**: Cryptographic integrity and certificate verification - **Certificate Generation**: Self-signed X.509 certificates for testing ### 🔄 Asynchronous Processing - **Celery**: Asynchronous generation, validation and signing - **Polling**: Status tracking via `/tasks/{task_id}/status` - **No timeout**: Ideal for large files or heavy validations ## 🔒 Authentication All requests require a **JWT token** in the Authorization header: ``` Authorization: Bearer YOUR_JWT_TOKEN ``` ### How to obtain a JWT token? #### 🔑 Method 1: `/api/token/` API (Recommended) **URL:** `https://www.factpulse.fr/api/token/` This method is **recommended** for integration in your applications and CI/CD workflows. **Prerequisites:** Having set a password on your account **For users registered via email/password:** - You already have a password, use it directly **For users registered via OAuth (Google/GitHub):** - You must first set a password at: https://www.factpulse.fr/accounts/password/set/ - Once the password is created, you can use the API **Request example:** ```bash curl -X POST https://www.factpulse.fr/api/token/ \\ -H \"Content-Type: application/json\" \\ -d '{ \"username\": \"your_email@example.com\", \"password\": \"your_password\" }' ``` **Optional `client_uid` parameter:** To select credentials for a specific client (PA/PDP, Chorus Pro, signing certificates), add `client_uid`: ```bash curl -X POST https://www.factpulse.fr/api/token/ \\ -H \"Content-Type: application/json\" \\ -d '{ \"username\": \"your_email@example.com\", \"password\": \"your_password\", \"client_uid\": \"550e8400-e29b-41d4-a716-446655440000\" }' ``` The `client_uid` will be included in the JWT and allow the API to automatically use: - AFNOR/PDP credentials configured for this client - Chorus Pro credentials configured for this client - Electronic signature certificates configured for this client **Response:** ```json { \"access\": \"eyJ0eXAiOiJKV1QiLCJhbGc...\", // Access token (validity: 30 min) \"refresh\": \"eyJ0eXAiOiJKV1QiLCJhbGc...\" // Refresh token (validity: 7 days) } ``` **Advantages:** - ✅ Full automation (CI/CD, scripts) - ✅ Programmatic token management - ✅ Refresh token support for automatic access renewal - ✅ Easy integration in any language/tool #### 🖥️ Method 2: Dashboard Generation (Alternative) **URL:** https://www.factpulse.fr/dashboard/ This method is suitable for quick tests or occasional use via the graphical interface. **How it works:** - Log in to the dashboard - Use the \"Generate Test Token\" or \"Generate Production Token\" buttons - Works for **all** users (OAuth and email/password), without requiring a password **Token types:** - **Test Token**: 24h validity, 1000 calls/day quota (free) - **Production Token**: 7 days validity, quota based on your plan **Advantages:** - ✅ Quick for API testing - ✅ No password required - ✅ Simple visual interface **Disadvantages:** - ❌ Requires manual action - ❌ No refresh token - ❌ Less suited for automation ### 📚 Full Documentation For more information on authentication and API usage: https://www.factpulse.fr/documentation-api/
5
5
 
6
6
  The version of the OpenAPI document: 1.0.0
7
7