factpulse 0.1.0 → 1.0.0

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 (794) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -4
  3. data/Gemfile.lock +7 -7
  4. data/LICENSE +1 -1
  5. data/README.md +146 -159
  6. data/docs/AFNORPDPPAApi.md +6 -87
  7. data/docs/AFNORPDPPADirectoryServiceApi.md +238 -148
  8. data/docs/AFNORPDPPAFlowServiceApi.md +40 -52
  9. data/docs/APIError.md +2 -2
  10. data/docs/AdresseElectronique.md +20 -0
  11. data/docs/AdressePostale.md +26 -0
  12. data/docs/CadreDeFacturation.md +22 -0
  13. data/docs/CategorieTVA.md +15 -0
  14. data/docs/CertificateInfoResponse.md +20 -20
  15. data/docs/ChorusProApi.md +142 -224
  16. data/docs/ChorusProCredentials.md +5 -5
  17. data/docs/{AFNORDiffusionStatus.md → CodeCadreFacturation.md} +2 -2
  18. data/docs/{AFNORFacilityType.md → CodeRaisonReduction.md} +2 -2
  19. data/docs/{GetInvoiceRequest.md → ConsulterFactureRequest.md} +4 -4
  20. data/docs/ConsulterFactureResponse.md +34 -0
  21. data/docs/ConsulterStructureRequest.md +22 -0
  22. data/docs/ConsulterStructureResponse.md +34 -0
  23. data/docs/{AFNORCredentials.md → CredentialsAFNOR.md} +2 -2
  24. data/docs/{FactureElectroniqueRestApiSchemasProcessingChorusProCredentials.md → CredentialsChorusPro.md} +4 -4
  25. data/docs/Destinataire.md +28 -0
  26. data/docs/Destination.md +7 -7
  27. data/docs/DestinationAFNOR.md +24 -0
  28. data/docs/DestinationChorusPro.md +20 -0
  29. data/docs/DonneesFactureSimplifiees.md +34 -0
  30. data/docs/FactureEnrichieInfo.md +32 -0
  31. data/docs/FactureFacturX.md +46 -0
  32. data/docs/FormatSortie.md +15 -0
  33. data/docs/Fournisseur.md +36 -0
  34. data/docs/GenerateCertificateRequest.md +19 -19
  35. data/docs/GenerateCertificateResponse.md +8 -8
  36. data/docs/InformationSignatureAPI.md +28 -0
  37. data/docs/LigneDePoste.md +46 -0
  38. data/docs/LigneDePosteMontantRemiseHt.md +15 -0
  39. data/docs/LigneDePosteTauxTvaManuel.md +15 -0
  40. data/docs/LigneDeTVA.md +26 -0
  41. data/docs/{AmountDue.md → ModeDepot.md} +2 -2
  42. data/docs/ModePaiement.md +15 -0
  43. data/docs/{AFNORFlowType.md → MontantAPayer.md} +2 -2
  44. data/docs/MontantBaseHt.md +15 -0
  45. data/docs/{AFNORAlgorithm.md → MontantHtTotal.md} +2 -2
  46. data/docs/{AFNORContainsOperator.md → MontantRemiseGlobaleTtc.md} +2 -2
  47. data/docs/MontantTotal.md +30 -0
  48. data/docs/{AFNORFacilityNature.md → MontantTotalAcompte.md} +2 -2
  49. data/docs/MontantTotalLigneHt.md +15 -0
  50. data/docs/{AFNORFlowSyntax.md → MontantTtcTotal.md} +2 -2
  51. data/docs/{APIProfile.md → MontantTva.md} +2 -2
  52. data/docs/{AFNOREntityType.md → MontantTvaLigne.md} +2 -2
  53. data/docs/MontantTvaTotal.md +15 -0
  54. data/docs/{AFNORFlowProfile.md → MontantUnitaireHt.md} +2 -2
  55. data/docs/{InvoiceNote.md → Note.md} +3 -3
  56. data/docs/ObtenirIdChorusProRequest.md +22 -0
  57. data/docs/ObtenirIdChorusProResponse.md +24 -0
  58. data/docs/OptionsProcessing.md +24 -0
  59. data/docs/PDFFacturXInfo.md +22 -0
  60. data/docs/ParametresSignature.md +34 -0
  61. data/docs/ParametresStructure.md +22 -0
  62. data/docs/PieceJointeComplementaire.md +26 -0
  63. data/docs/{Amount.md → ProfilAPI.md} +2 -2
  64. data/docs/{Amount2.md → Quantite.md} +2 -2
  65. data/docs/RechercherServicesResponse.md +24 -0
  66. data/docs/RechercherStructureRequest.md +26 -0
  67. data/docs/RechercherStructureResponse.md +24 -0
  68. data/docs/References.md +32 -0
  69. data/docs/ReponseTache.md +18 -0
  70. data/docs/ReponseValidationErreur.md +18 -0
  71. data/docs/ReponseValidationSucces.md +18 -0
  72. data/docs/ResultatAFNOR.md +26 -0
  73. data/docs/ResultatChorusPro.md +22 -0
  74. data/docs/ResultatValidationPDFAPI.md +62 -0
  75. data/docs/SantApi.md +131 -0
  76. data/docs/ServiceStructure.md +24 -0
  77. data/docs/SignatureInfo.md +2 -2
  78. data/docs/SoumettreFactureCompleteRequest.md +26 -0
  79. data/docs/SoumettreFactureCompleteResponse.md +34 -0
  80. data/docs/SoumettreFactureRequest.md +46 -0
  81. data/docs/SoumettreFactureResponse.md +24 -0
  82. data/docs/StatutCelery.md +15 -0
  83. data/docs/{InvoiceStatus.md → StatutFacture.md} +5 -5
  84. data/docs/StatutTache.md +22 -0
  85. data/docs/StructureInfo.md +10 -10
  86. data/docs/Tauxmanuel.md +15 -0
  87. data/docs/TraitementFactureApi.md +831 -0
  88. data/docs/TypeFacture.md +15 -0
  89. data/docs/{Amount1.md → TypeTVA.md} +2 -2
  90. data/docs/{Rate.md → Unite.md} +2 -2
  91. data/docs/UtilisateurApi.md +74 -0
  92. data/docs/ValidationError.md +1 -1
  93. data/docs/ValidationErrorDetail.md +3 -3
  94. data/docs/{AFNORDirectoryLineField.md → ValidationErrorLocInner.md} +2 -2
  95. data/factpulse.gemspec +7 -7
  96. data/lib/factpulse/api/afnorpdppa_api.rb +8 -77
  97. data/lib/factpulse/api/afnorpdppa_directory_service_api.rb +143 -143
  98. data/lib/factpulse/api/afnorpdppa_flow_service_api.rb +34 -67
  99. data/lib/factpulse/api/chorus_pro_api.rb +147 -149
  100. data/lib/factpulse/api/sant_api.rb +136 -0
  101. data/lib/factpulse/api/traitement_facture_api.rb +835 -0
  102. data/lib/factpulse/api/utilisateur_api.rb +79 -0
  103. data/lib/factpulse/api_client.rb +4 -4
  104. data/lib/factpulse/api_error.rb +4 -4
  105. data/lib/factpulse/api_model_base.rb +4 -4
  106. data/lib/factpulse/configuration.rb +8 -19
  107. data/lib/factpulse/helpers/client.rb +246 -218
  108. data/lib/factpulse/helpers/exceptions.rb +14 -38
  109. data/lib/factpulse/helpers.rb +13 -0
  110. data/lib/factpulse/models/adresse_electronique.rb +196 -0
  111. data/lib/factpulse/models/adresse_postale.rb +189 -0
  112. data/lib/factpulse/models/api_error.rb +7 -7
  113. data/lib/factpulse/models/cadre_de_facturation.rb +207 -0
  114. data/lib/factpulse/models/categorie_tva.rb +47 -0
  115. data/lib/factpulse/models/certificate_info_response.rb +166 -166
  116. data/lib/factpulse/models/chorus_pro_credentials.rb +14 -14
  117. data/lib/factpulse/models/code_cadre_facturation.rb +42 -0
  118. data/lib/factpulse/models/code_raison_reduction.rb +45 -0
  119. data/lib/factpulse/models/consulter_facture_request.rb +176 -0
  120. data/lib/factpulse/models/consulter_facture_response.rb +261 -0
  121. data/lib/factpulse/models/consulter_structure_request.rb +188 -0
  122. data/lib/factpulse/models/consulter_structure_response.rb +261 -0
  123. data/lib/factpulse/models/credentials_afnor.rb +169 -0
  124. data/lib/factpulse/models/credentials_chorus_pro.rb +191 -0
  125. data/lib/factpulse/models/destinataire.rb +215 -0
  126. data/lib/factpulse/models/destination.rb +9 -9
  127. data/lib/factpulse/models/destination_afnor.rb +228 -0
  128. data/lib/factpulse/models/destination_chorus_pro.rb +194 -0
  129. data/lib/factpulse/models/donnees_facture_simplifiees.rb +342 -0
  130. data/lib/factpulse/models/error_level.rb +4 -4
  131. data/lib/factpulse/models/error_source.rb +5 -6
  132. data/lib/factpulse/models/facture_enrichie_info.rb +348 -0
  133. data/lib/factpulse/models/facture_factur_x.rb +443 -0
  134. data/lib/factpulse/models/format_sortie.rb +40 -0
  135. data/lib/factpulse/models/fournisseur.rb +271 -0
  136. data/lib/factpulse/models/generate_certificate_request.rb +108 -108
  137. data/lib/factpulse/models/generate_certificate_response.rb +49 -49
  138. data/lib/factpulse/models/http_validation_error.rb +4 -4
  139. data/lib/factpulse/models/information_signature_api.rb +216 -0
  140. data/lib/factpulse/models/ligne_de_poste.rb +390 -0
  141. data/lib/factpulse/models/ligne_de_poste_montant_remise_ht.rb +104 -0
  142. data/lib/factpulse/models/ligne_de_poste_taux_tva_manuel.rb +104 -0
  143. data/lib/factpulse/models/ligne_de_tva.rb +242 -0
  144. data/lib/factpulse/models/mode_depot.rb +41 -0
  145. data/lib/factpulse/models/mode_paiement.rb +44 -0
  146. data/lib/factpulse/models/montant_a_payer.rb +104 -0
  147. data/lib/factpulse/models/montant_base_ht.rb +104 -0
  148. data/lib/factpulse/models/montant_ht_total.rb +104 -0
  149. data/lib/factpulse/models/montant_remise_globale_ttc.rb +104 -0
  150. data/lib/factpulse/models/montant_total.rb +272 -0
  151. data/lib/factpulse/models/montant_total_acompte.rb +104 -0
  152. data/lib/factpulse/models/montant_total_ligne_ht.rb +104 -0
  153. data/lib/factpulse/models/montant_ttc_total.rb +104 -0
  154. data/lib/factpulse/models/montant_tva.rb +104 -0
  155. data/lib/factpulse/models/montant_tva_ligne.rb +104 -0
  156. data/lib/factpulse/models/montant_tva_total.rb +104 -0
  157. data/lib/factpulse/models/montant_unitaire_ht.rb +104 -0
  158. data/lib/factpulse/models/note.rb +175 -0
  159. data/lib/factpulse/models/obtenir_id_chorus_pro_request.rb +188 -0
  160. data/lib/factpulse/models/obtenir_id_chorus_pro_response.rb +230 -0
  161. data/lib/factpulse/models/options_processing.rb +207 -0
  162. data/lib/factpulse/models/parametres_signature.rb +235 -0
  163. data/lib/factpulse/models/parametres_structure.rb +175 -0
  164. data/lib/factpulse/models/pdf_factur_x_info.rb +205 -0
  165. data/lib/factpulse/models/piece_jointe_complementaire.rb +269 -0
  166. data/lib/factpulse/models/profil_api.rb +42 -0
  167. data/lib/factpulse/models/quantite.rb +104 -0
  168. data/lib/factpulse/models/rechercher_services_response.rb +214 -0
  169. data/lib/factpulse/models/rechercher_structure_request.rb +191 -0
  170. data/lib/factpulse/models/rechercher_structure_response.rb +216 -0
  171. data/lib/factpulse/models/references.rb +290 -0
  172. data/lib/factpulse/models/reponse_tache.rb +165 -0
  173. data/lib/factpulse/models/reponse_validation_erreur.rb +167 -0
  174. data/lib/factpulse/models/reponse_validation_succes.rb +165 -0
  175. data/lib/factpulse/models/resultat_afnor.rb +240 -0
  176. data/lib/factpulse/models/resultat_chorus_pro.rb +186 -0
  177. data/lib/factpulse/models/resultat_validation_pdfapi.rb +523 -0
  178. data/lib/factpulse/models/scheme_id.rb +7 -20
  179. data/lib/factpulse/models/service_structure.rb +247 -0
  180. data/lib/factpulse/models/signature_info.rb +22 -22
  181. data/lib/factpulse/models/soumettre_facture_complete_request.rb +239 -0
  182. data/lib/factpulse/models/soumettre_facture_complete_response.rb +355 -0
  183. data/lib/factpulse/models/soumettre_facture_request.rb +388 -0
  184. data/lib/factpulse/models/soumettre_facture_response.rb +213 -0
  185. data/lib/factpulse/models/statut_celery.rb +43 -0
  186. data/lib/factpulse/models/statut_facture.rb +203 -0
  187. data/lib/factpulse/models/statut_tache.rb +226 -0
  188. data/lib/factpulse/models/structure_info.rb +86 -86
  189. data/lib/factpulse/models/tauxmanuel.rb +104 -0
  190. data/lib/factpulse/models/type_facture.rb +40 -0
  191. data/lib/factpulse/models/type_tva.rb +42 -0
  192. data/lib/factpulse/models/unite.rb +44 -0
  193. data/lib/factpulse/models/validation_error.rb +5 -5
  194. data/lib/factpulse/models/validation_error_detail.rb +8 -8
  195. data/lib/factpulse/models/validation_error_loc_inner.rb +103 -0
  196. data/lib/factpulse/version.rb +5 -5
  197. data/lib/factpulse.rb +79 -315
  198. metadata +215 -676
  199. data/docs/AFNORAcknowledgement.md +0 -20
  200. data/docs/AFNORAcknowledgementDetail.md +0 -24
  201. data/docs/AFNORAddressEdit.md +0 -30
  202. data/docs/AFNORAddressPatch.md +0 -30
  203. data/docs/AFNORAddressPut.md +0 -30
  204. data/docs/AFNORAddressRead.md +0 -32
  205. data/docs/AFNORCreateDirectoryLineBody.md +0 -20
  206. data/docs/AFNORCreateDirectoryLineBodyAddressingInformation.md +0 -24
  207. data/docs/AFNORCreateDirectoryLineBodyPeriod.md +0 -20
  208. data/docs/AFNORCreateRoutingCodeBody.md +0 -32
  209. data/docs/AFNORDestination.md +0 -26
  210. data/docs/AFNORDirectoryLinePayloadHistoryLegalUnitFacilityRoutingCode.md +0 -32
  211. data/docs/AFNORDirectoryLinePayloadHistoryLegalUnitFacilityRoutingCodePlatform.md +0 -20
  212. data/docs/AFNORDirectoryLinePayloadHistoryLegalUnitFacilityRoutingCodeRoutingCode.md +0 -28
  213. data/docs/AFNORDirectoryLinePost201Response.md +0 -22
  214. data/docs/AFNORDirectoryLineSearchPost200Response.md +0 -22
  215. data/docs/AFNORError.md +0 -26
  216. data/docs/AFNORFacilityAdministrativeStatus.md +0 -15
  217. data/docs/AFNORFacilityPayloadHistory.md +0 -34
  218. data/docs/AFNORFacilityPayloadHistoryUleB2gAdditionalData.md +0 -28
  219. data/docs/AFNORFacilityPayloadIncluded.md +0 -32
  220. data/docs/AFNORFlow.md +0 -38
  221. data/docs/AFNORFlowAckStatus.md +0 -15
  222. data/docs/AFNORFlowDirection.md +0 -15
  223. data/docs/AFNORFlowInfo.md +0 -28
  224. data/docs/AFNORFullFlowInfo.md +0 -32
  225. data/docs/AFNORHealthCheckResponse.md +0 -22
  226. data/docs/AFNORLegalUnitAdministrativeStatus.md +0 -15
  227. data/docs/AFNORLegalUnitPayloadHistory.md +0 -24
  228. data/docs/AFNORLegalUnitPayloadIncluded.md +0 -24
  229. data/docs/AFNORLegalUnitPayloadIncludedNoSiren.md +0 -22
  230. data/docs/AFNORPlatformStatus.md +0 -15
  231. data/docs/AFNORProcessingRule.md +0 -15
  232. data/docs/AFNORReasonCode.md +0 -49
  233. data/docs/AFNORReasonCodeEnum.md +0 -15
  234. data/docs/AFNORRecipientPlatformType.md +0 -15
  235. data/docs/AFNORResult.md +0 -32
  236. data/docs/AFNORRoutingCodeAdministrativeStatus.md +0 -15
  237. data/docs/AFNORRoutingCodeField.md +0 -15
  238. data/docs/AFNORRoutingCodePayloadHistoryLegalUnitFacility.md +0 -34
  239. data/docs/AFNORRoutingCodePost201Response.md +0 -22
  240. data/docs/AFNORRoutingCodeSearch.md +0 -28
  241. data/docs/AFNORRoutingCodeSearchFilters.md +0 -30
  242. data/docs/AFNORRoutingCodeSearchFiltersAdministrativeStatus.md +0 -20
  243. data/docs/AFNORRoutingCodeSearchFiltersRoutingCodeName.md +0 -20
  244. data/docs/AFNORRoutingCodeSearchFiltersRoutingIdentifier.md +0 -20
  245. data/docs/AFNORRoutingCodeSearchPost200Response.md +0 -22
  246. data/docs/AFNORRoutingCodeSearchSortingInner.md +0 -20
  247. data/docs/AFNORSearchDirectoryLine.md +0 -26
  248. data/docs/AFNORSearchDirectoryLineFilters.md +0 -26
  249. data/docs/AFNORSearchDirectoryLineFiltersAddressingIdentifier.md +0 -20
  250. data/docs/AFNORSearchDirectoryLineFiltersAddressingSuffix.md +0 -20
  251. data/docs/AFNORSearchDirectoryLineSortingInner.md +0 -20
  252. data/docs/AFNORSearchFlowContent.md +0 -22
  253. data/docs/AFNORSearchFlowFilters.md +0 -30
  254. data/docs/AFNORSearchFlowParams.md +0 -20
  255. data/docs/AFNORSearchSiren.md +0 -26
  256. data/docs/AFNORSearchSirenFilters.md +0 -24
  257. data/docs/AFNORSearchSirenFiltersAdministrativeStatus.md +0 -20
  258. data/docs/AFNORSearchSirenFiltersBusinessName.md +0 -20
  259. data/docs/AFNORSearchSirenFiltersEntityType.md +0 -20
  260. data/docs/AFNORSearchSirenFiltersSiren.md +0 -20
  261. data/docs/AFNORSearchSirenSortingInner.md +0 -20
  262. data/docs/AFNORSearchSiret.md +0 -28
  263. data/docs/AFNORSearchSiretFilters.md +0 -34
  264. data/docs/AFNORSearchSiretFiltersAddressLines.md +0 -20
  265. data/docs/AFNORSearchSiretFiltersAdministrativeStatus.md +0 -20
  266. data/docs/AFNORSearchSiretFiltersCountrySubdivision.md +0 -20
  267. data/docs/AFNORSearchSiretFiltersFacilityType.md +0 -20
  268. data/docs/AFNORSearchSiretFiltersLocality.md +0 -20
  269. data/docs/AFNORSearchSiretFiltersName.md +0 -20
  270. data/docs/AFNORSearchSiretFiltersPostalCode.md +0 -20
  271. data/docs/AFNORSearchSiretFiltersSiret.md +0 -20
  272. data/docs/AFNORSearchSiretSortingInner.md +0 -20
  273. data/docs/AFNORSirenField.md +0 -15
  274. data/docs/AFNORSirenSearchPost200Response.md +0 -22
  275. data/docs/AFNORSiretField.md +0 -15
  276. data/docs/AFNORSiretSearchPost200Response.md +0 -22
  277. data/docs/AFNORSortingOrder.md +0 -15
  278. data/docs/AFNORStrictOperator.md +0 -15
  279. data/docs/AFNORUpdatePatchDirectoryLineBody.md +0 -18
  280. data/docs/AFNORUpdatePatchRoutingCodeBody.md +0 -24
  281. data/docs/AFNORUpdatePutRoutingCodeBody.md +0 -24
  282. data/docs/AFNORWebhookCallbackContent.md +0 -18
  283. data/docs/AcknowledgmentStatus.md +0 -15
  284. data/docs/ActionCodeInfo.md +0 -22
  285. data/docs/ActionCodesResponse.md +0 -22
  286. data/docs/AdditionalDocument.md +0 -26
  287. data/docs/AggregatedPaymentInput.md +0 -22
  288. data/docs/AggregatedTransactionInput.md +0 -32
  289. data/docs/AllowanceCharge.md +0 -32
  290. data/docs/AllowanceChargeReasonCode.md +0 -15
  291. data/docs/AllowanceReasonCode.md +0 -15
  292. data/docs/AllowanceTotalAmount.md +0 -15
  293. data/docs/AsyncTaskStatus.md +0 -22
  294. data/docs/AsyncTasksApi.md +0 -82
  295. data/docs/BaseAmount.md +0 -15
  296. data/docs/BoundingBoxSchema.md +0 -30
  297. data/docs/Buyercountry.md +0 -15
  298. data/docs/CeleryStatus.md +0 -15
  299. data/docs/ChargeTotalAmount.md +0 -15
  300. data/docs/ChorusProDestination.md +0 -20
  301. data/docs/ChorusProResult.md +0 -22
  302. data/docs/ClientActivateResponse.md +0 -22
  303. data/docs/ClientCreateRequest.md +0 -22
  304. data/docs/ClientDetail.md +0 -38
  305. data/docs/ClientListResponse.md +0 -24
  306. data/docs/ClientManagementApi.md +0 -921
  307. data/docs/ClientSummary.md +0 -38
  308. data/docs/ClientUpdateRequest.md +0 -22
  309. data/docs/Contact.md +0 -24
  310. data/docs/ConvertResumeRequest.md +0 -18
  311. data/docs/ConvertSuccessResponse.md +0 -36
  312. data/docs/ConvertValidationFailedResponse.md +0 -34
  313. data/docs/CountryCode.md +0 -15
  314. data/docs/CreateAggregatedReportRequest.md +0 -36
  315. data/docs/CreateCDARRequest.md +0 -52
  316. data/docs/CreateEReportingRequest.md +0 -38
  317. data/docs/Currency.md +0 -15
  318. data/docs/CurrencyCode.md +0 -15
  319. data/docs/DeliveryParty.md +0 -24
  320. data/docs/DocType.md +0 -15
  321. data/docs/DocumentTypeInfo.md +0 -22
  322. data/docs/DownloadsApi.md +0 -161
  323. data/docs/EReportingFlowType.md +0 -15
  324. data/docs/EReportingValidationError.md +0 -22
  325. data/docs/ElectronicAddress.md +0 -20
  326. data/docs/ElectronicSignatureApi.md +0 -339
  327. data/docs/Encaisseamount.md +0 -15
  328. data/docs/Encaisseamount1.md +0 -15
  329. data/docs/EncaisseeRequest.md +0 -40
  330. data/docs/EnrichedInvoiceInfo.md +0 -32
  331. data/docs/ExtractionInfo.md +0 -24
  332. data/docs/FacturXConversionApi.md +0 -319
  333. data/docs/FacturXGenerationApi.md +0 -254
  334. data/docs/FacturXInvoice.md +0 -76
  335. data/docs/FacturXPDFInfo.md +0 -22
  336. data/docs/FacturXPDFXMLVerificationApi.md +0 -240
  337. data/docs/FacturXValidationApi.md +0 -256
  338. data/docs/FactureElectroniqueRestApiSchemasEreportingInvoiceTypeCode.md +0 -15
  339. data/docs/FactureElectroniqueRestApiSchemasValidationValidationErrorResponse.md +0 -18
  340. data/docs/FieldStatus.md +0 -15
  341. data/docs/FileInfo.md +0 -20
  342. data/docs/FilesInfo.md +0 -20
  343. data/docs/FlowDirection.md +0 -15
  344. data/docs/FlowProfile.md +0 -15
  345. data/docs/FlowSummary.md +0 -32
  346. data/docs/FlowSyntax.md +0 -15
  347. data/docs/FlowType.md +0 -15
  348. data/docs/Flux10EReportingApi.md +0 -814
  349. data/docs/Flux6InvoiceLifecycleCDARApi.md +0 -698
  350. data/docs/GenerateAggregatedReportResponse.md +0 -30
  351. data/docs/GenerateCDARResponse.md +0 -26
  352. data/docs/GenerateEReportingResponse.md +0 -26
  353. data/docs/GetChorusProIdRequest.md +0 -22
  354. data/docs/GetChorusProIdResponse.md +0 -24
  355. data/docs/GetInvoiceResponse.md +0 -34
  356. data/docs/GetStructureRequest.md +0 -22
  357. data/docs/GetStructureResponse.md +0 -34
  358. data/docs/GlobalAllowanceAmount.md +0 -15
  359. data/docs/GrossUnitPrice.md +0 -15
  360. data/docs/HealthApi.md +0 -203
  361. data/docs/IncomingInvoice.md +0 -54
  362. data/docs/IncomingSupplier.md +0 -32
  363. data/docs/InvoiceFormat.md +0 -15
  364. data/docs/InvoiceInput.md +0 -50
  365. data/docs/InvoiceLine.md +0 -84
  366. data/docs/InvoiceLineAllowanceAmount.md +0 -15
  367. data/docs/InvoicePaymentInput.md +0 -26
  368. data/docs/InvoiceReferences.md +0 -52
  369. data/docs/InvoiceTotals.md +0 -38
  370. data/docs/InvoiceTotalsPrepayment.md +0 -15
  371. data/docs/InvoiceTypeCode.md +0 -15
  372. data/docs/InvoiceTypeCodeOutput.md +0 -15
  373. data/docs/InvoicingFramework.md +0 -24
  374. data/docs/InvoicingFrameworkCode.md +0 -15
  375. data/docs/IssuerRoleCode.md +0 -15
  376. data/docs/KeyRotationRequest.md +0 -20
  377. data/docs/KeyRotationResponse.md +0 -24
  378. data/docs/LineNetAmount.md +0 -15
  379. data/docs/LineSubType.md +0 -15
  380. data/docs/LineTotalAmount.md +0 -15
  381. data/docs/LocationInner.md +0 -15
  382. data/docs/MandatoryNoteSchema.md +0 -30
  383. data/docs/ManualRate.md +0 -15
  384. data/docs/ManualVatRate.md +0 -15
  385. data/docs/MissingField.md +0 -28
  386. data/docs/OperationNature.md +0 -15
  387. data/docs/OutputFormat.md +0 -15
  388. data/docs/PDFValidationResultAPI.md +0 -62
  389. data/docs/PDPConfigResponse.md +0 -46
  390. data/docs/PDPConfigUpdateRequest.md +0 -30
  391. data/docs/PDPCredentials.md +0 -26
  392. data/docs/PageDimensionsSchema.md +0 -20
  393. data/docs/Payee.md +0 -32
  394. data/docs/PaymentAmountByRate.md +0 -20
  395. data/docs/PaymentCard.md +0 -20
  396. data/docs/PaymentMeans.md +0 -15
  397. data/docs/Percentage.md +0 -15
  398. data/docs/PostalAddress.md +0 -30
  399. data/docs/PriceAllowanceAmount.md +0 -15
  400. data/docs/PriceBasisQuantity.md +0 -15
  401. data/docs/ProcessingOptions.md +0 -24
  402. data/docs/ProcessingRule.md +0 -15
  403. data/docs/ProductCharacteristic.md +0 -20
  404. data/docs/ProductClassification.md +0 -22
  405. data/docs/Quantity.md +0 -15
  406. data/docs/Rate1.md +0 -15
  407. data/docs/ReasonCodeInfo.md +0 -22
  408. data/docs/ReasonCodesResponse.md +0 -22
  409. data/docs/Recipient.md +0 -34
  410. data/docs/RecipientInput.md +0 -26
  411. data/docs/RefuseeRequest.md +0 -40
  412. data/docs/ReportIssuer.md +0 -24
  413. data/docs/ReportPeriod.md +0 -20
  414. data/docs/ReportSender.md +0 -22
  415. data/docs/RoundingAmount.md +0 -15
  416. data/docs/SchematronValidationError.md +0 -32
  417. data/docs/SearchFlowRequest.md +0 -34
  418. data/docs/SearchFlowResponse.md +0 -24
  419. data/docs/SearchServicesResponse.md +0 -24
  420. data/docs/SearchStructureRequest.md +0 -26
  421. data/docs/SearchStructureResponse.md +0 -24
  422. data/docs/SecretStatus.md +0 -24
  423. data/docs/Sellercountry.md +0 -15
  424. data/docs/SignatureInfoAPI.md +0 -28
  425. data/docs/SignatureParameters.md +0 -34
  426. data/docs/SimplifiedCDARResponse.md +0 -26
  427. data/docs/SimplifiedInvoiceData.md +0 -42
  428. data/docs/StatusCodeInfo.md +0 -22
  429. data/docs/StatusCodesResponse.md +0 -22
  430. data/docs/StructureParameters.md +0 -22
  431. data/docs/StructureService.md +0 -24
  432. data/docs/SubmissionMode.md +0 -15
  433. data/docs/SubmitAggregatedReportRequest.md +0 -28
  434. data/docs/SubmitCDARRequest.md +0 -62
  435. data/docs/SubmitCDARResponse.md +0 -24
  436. data/docs/SubmitCDARXMLRequest.md +0 -30
  437. data/docs/SubmitCompleteInvoiceRequest.md +0 -26
  438. data/docs/SubmitCompleteInvoiceResponse.md +0 -34
  439. data/docs/SubmitEReportingRequest.md +0 -28
  440. data/docs/SubmitEReportingResponse.md +0 -32
  441. data/docs/SubmitFlowRequest.md +0 -28
  442. data/docs/SubmitFlowResponse.md +0 -30
  443. data/docs/SubmitGrossAmount.md +0 -15
  444. data/docs/SubmitInvoiceRequest.md +0 -46
  445. data/docs/SubmitInvoiceResponse.md +0 -24
  446. data/docs/SubmitNetAmount.md +0 -15
  447. data/docs/SubmitVatAmount.md +0 -15
  448. data/docs/SupplementaryAttachment.md +0 -26
  449. data/docs/Supplier.md +0 -52
  450. data/docs/TaskResponse.md +0 -18
  451. data/docs/TaxBreakdownInput.md +0 -22
  452. data/docs/TaxDueDateType.md +0 -15
  453. data/docs/TaxRepresentative.md +0 -22
  454. data/docs/TaxableAmount.md +0 -15
  455. data/docs/Taxableamount.md +0 -15
  456. data/docs/Taxamount.md +0 -15
  457. data/docs/Taxamount1.md +0 -15
  458. data/docs/Taxamount2.md +0 -15
  459. data/docs/Taxexclusiveamount.md +0 -15
  460. data/docs/Taxexclusiveamount1.md +0 -15
  461. data/docs/TotalGrossAmount.md +0 -15
  462. data/docs/TotalNetAmount.md +0 -15
  463. data/docs/TotalVATAmount.md +0 -15
  464. data/docs/TransactionCategory.md +0 -15
  465. data/docs/TransmissionTypeCode.md +0 -15
  466. data/docs/UnitNetPrice.md +0 -15
  467. data/docs/UnitOfMeasure.md +0 -15
  468. data/docs/VATAccountingCode.md +0 -15
  469. data/docs/VATAmount.md +0 -15
  470. data/docs/VATCategory.md +0 -15
  471. data/docs/VATLine.md +0 -32
  472. data/docs/VATPointDateCode.md +0 -15
  473. data/docs/ValidateCDARRequest.md +0 -32
  474. data/docs/ValidateCDARResponse.md +0 -22
  475. data/docs/ValidateEReportingRequest.md +0 -18
  476. data/docs/ValidateEReportingResponse.md +0 -28
  477. data/docs/ValidationErrorResponse.md +0 -24
  478. data/docs/ValidationInfo.md +0 -28
  479. data/docs/ValidationSuccessResponse.md +0 -18
  480. data/docs/VatRate.md +0 -15
  481. data/docs/VerificationSuccessResponse.md +0 -36
  482. data/docs/VerifiedFieldSchema.md +0 -34
  483. data/docs/WebhookSecretDeleteResponse.md +0 -20
  484. data/docs/WebhookSecretGenerateResponse.md +0 -24
  485. data/docs/WebhookSecretStatusResponse.md +0 -20
  486. data/lib/factpulse/api/async_tasks_api.rb +0 -85
  487. data/lib/factpulse/api/client_management_api.rb +0 -831
  488. data/lib/factpulse/api/downloads_api.rb +0 -151
  489. data/lib/factpulse/api/electronic_signature_api.rb +0 -339
  490. data/lib/factpulse/api/factur_x_conversion_api.rb +0 -306
  491. data/lib/factpulse/api/factur_x_generation_api.rb +0 -254
  492. data/lib/factpulse/api/factur_x_validation_api.rb +0 -256
  493. data/lib/factpulse/api/factur_xpdfxml_verification_api.rb +0 -232
  494. data/lib/factpulse/api/flux10_e_reporting_api.rb +0 -777
  495. data/lib/factpulse/api/flux6_invoice_lifecycle_cdar_api.rb +0 -670
  496. data/lib/factpulse/api/health_api.rb +0 -193
  497. data/lib/factpulse/helpers/helpers.rb +0 -14
  498. data/lib/factpulse/models/acknowledgment_status.rb +0 -41
  499. data/lib/factpulse/models/action_code_info.rb +0 -220
  500. data/lib/factpulse/models/action_codes_response.rb +0 -207
  501. data/lib/factpulse/models/additional_document.rb +0 -206
  502. data/lib/factpulse/models/afnor_acknowledgement.rb +0 -216
  503. data/lib/factpulse/models/afnor_acknowledgement_detail.rb +0 -267
  504. data/lib/factpulse/models/afnor_address_edit.rb +0 -353
  505. data/lib/factpulse/models/afnor_address_patch.rb +0 -386
  506. data/lib/factpulse/models/afnor_address_put.rb +0 -435
  507. data/lib/factpulse/models/afnor_address_read.rb +0 -382
  508. data/lib/factpulse/models/afnor_algorithm.rb +0 -43
  509. data/lib/factpulse/models/afnor_contains_operator.rb +0 -39
  510. data/lib/factpulse/models/afnor_create_directory_line_body.rb +0 -156
  511. data/lib/factpulse/models/afnor_create_directory_line_body_addressing_information.rb +0 -294
  512. data/lib/factpulse/models/afnor_create_directory_line_body_period.rb +0 -175
  513. data/lib/factpulse/models/afnor_create_routing_code_body.rb +0 -412
  514. data/lib/factpulse/models/afnor_credentials.rb +0 -169
  515. data/lib/factpulse/models/afnor_destination.rb +0 -224
  516. data/lib/factpulse/models/afnor_diffusion_status.rb +0 -40
  517. data/lib/factpulse/models/afnor_directory_line_field.rb +0 -44
  518. data/lib/factpulse/models/afnor_directory_line_payload_history_legal_unit_facility_routing_code.rb +0 -312
  519. data/lib/factpulse/models/afnor_directory_line_payload_history_legal_unit_facility_routing_code_platform.rb +0 -178
  520. data/lib/factpulse/models/afnor_directory_line_payload_history_legal_unit_facility_routing_code_routing_code.rb +0 -308
  521. data/lib/factpulse/models/afnor_directory_line_post201_response.rb +0 -187
  522. data/lib/factpulse/models/afnor_directory_line_search_post200_response.rb +0 -168
  523. data/lib/factpulse/models/afnor_entity_type.rb +0 -40
  524. data/lib/factpulse/models/afnor_error.rb +0 -214
  525. data/lib/factpulse/models/afnor_facility_administrative_status.rb +0 -40
  526. data/lib/factpulse/models/afnor_facility_nature.rb +0 -40
  527. data/lib/factpulse/models/afnor_facility_payload_history.rb +0 -323
  528. data/lib/factpulse/models/afnor_facility_payload_history_ule_b2g_additional_data.rb +0 -198
  529. data/lib/factpulse/models/afnor_facility_payload_included.rb +0 -314
  530. data/lib/factpulse/models/afnor_facility_type.rb +0 -40
  531. data/lib/factpulse/models/afnor_flow.rb +0 -315
  532. data/lib/factpulse/models/afnor_flow_ack_status.rb +0 -41
  533. data/lib/factpulse/models/afnor_flow_direction.rb +0 -40
  534. data/lib/factpulse/models/afnor_flow_info.rb +0 -293
  535. data/lib/factpulse/models/afnor_flow_profile.rb +0 -41
  536. data/lib/factpulse/models/afnor_flow_syntax.rb +0 -43
  537. data/lib/factpulse/models/afnor_flow_type.rb +0 -51
  538. data/lib/factpulse/models/afnor_full_flow_info.rb +0 -339
  539. data/lib/factpulse/models/afnor_health_check_response.rb +0 -220
  540. data/lib/factpulse/models/afnor_legal_unit_administrative_status.rb +0 -40
  541. data/lib/factpulse/models/afnor_legal_unit_payload_history.rb +0 -247
  542. data/lib/factpulse/models/afnor_legal_unit_payload_included.rb +0 -247
  543. data/lib/factpulse/models/afnor_legal_unit_payload_included_no_siren.rb +0 -207
  544. data/lib/factpulse/models/afnor_platform_status.rb +0 -40
  545. data/lib/factpulse/models/afnor_processing_rule.rb +0 -44
  546. data/lib/factpulse/models/afnor_reason_code.rb +0 -105
  547. data/lib/factpulse/models/afnor_reason_code_enum.rb +0 -53
  548. data/lib/factpulse/models/afnor_recipient_platform_type.rb +0 -40
  549. data/lib/factpulse/models/afnor_result.rb +0 -270
  550. data/lib/factpulse/models/afnor_routing_code_administrative_status.rb +0 -40
  551. data/lib/factpulse/models/afnor_routing_code_field.rb +0 -46
  552. data/lib/factpulse/models/afnor_routing_code_payload_history_legal_unit_facility.rb +0 -366
  553. data/lib/factpulse/models/afnor_routing_code_post201_response.rb +0 -228
  554. data/lib/factpulse/models/afnor_routing_code_search.rb +0 -224
  555. data/lib/factpulse/models/afnor_routing_code_search_filters.rb +0 -201
  556. data/lib/factpulse/models/afnor_routing_code_search_filters_administrative_status.rb +0 -178
  557. data/lib/factpulse/models/afnor_routing_code_search_filters_routing_code_name.rb +0 -209
  558. data/lib/factpulse/models/afnor_routing_code_search_filters_routing_identifier.rb +0 -209
  559. data/lib/factpulse/models/afnor_routing_code_search_post200_response.rb +0 -168
  560. data/lib/factpulse/models/afnor_routing_code_search_sorting_inner.rb +0 -179
  561. data/lib/factpulse/models/afnor_search_directory_line.rb +0 -191
  562. data/lib/factpulse/models/afnor_search_directory_line_filters.rb +0 -183
  563. data/lib/factpulse/models/afnor_search_directory_line_filters_addressing_identifier.rb +0 -198
  564. data/lib/factpulse/models/afnor_search_directory_line_filters_addressing_suffix.rb +0 -198
  565. data/lib/factpulse/models/afnor_search_directory_line_sorting_inner.rb +0 -179
  566. data/lib/factpulse/models/afnor_search_flow_content.rb +0 -168
  567. data/lib/factpulse/models/afnor_search_flow_filters.rb +0 -250
  568. data/lib/factpulse/models/afnor_search_flow_params.rb +0 -195
  569. data/lib/factpulse/models/afnor_search_siren.rb +0 -191
  570. data/lib/factpulse/models/afnor_search_siren_filters.rb +0 -174
  571. data/lib/factpulse/models/afnor_search_siren_filters_administrative_status.rb +0 -178
  572. data/lib/factpulse/models/afnor_search_siren_filters_business_name.rb +0 -198
  573. data/lib/factpulse/models/afnor_search_siren_filters_entity_type.rb +0 -178
  574. data/lib/factpulse/models/afnor_search_siren_filters_siren.rb +0 -209
  575. data/lib/factpulse/models/afnor_search_siren_sorting_inner.rb +0 -179
  576. data/lib/factpulse/models/afnor_search_siret.rb +0 -224
  577. data/lib/factpulse/models/afnor_search_siret_filters.rb +0 -219
  578. data/lib/factpulse/models/afnor_search_siret_filters_address_lines.rb +0 -198
  579. data/lib/factpulse/models/afnor_search_siret_filters_administrative_status.rb +0 -178
  580. data/lib/factpulse/models/afnor_search_siret_filters_country_subdivision.rb +0 -198
  581. data/lib/factpulse/models/afnor_search_siret_filters_facility_type.rb +0 -178
  582. data/lib/factpulse/models/afnor_search_siret_filters_locality.rb +0 -198
  583. data/lib/factpulse/models/afnor_search_siret_filters_name.rb +0 -198
  584. data/lib/factpulse/models/afnor_search_siret_filters_postal_code.rb +0 -209
  585. data/lib/factpulse/models/afnor_search_siret_filters_siret.rb +0 -209
  586. data/lib/factpulse/models/afnor_search_siret_sorting_inner.rb +0 -179
  587. data/lib/factpulse/models/afnor_siren_field.rb +0 -43
  588. data/lib/factpulse/models/afnor_siren_search_post200_response.rb +0 -168
  589. data/lib/factpulse/models/afnor_siret_field.rb +0 -52
  590. data/lib/factpulse/models/afnor_siret_search_post200_response.rb +0 -168
  591. data/lib/factpulse/models/afnor_sorting_order.rb +0 -40
  592. data/lib/factpulse/models/afnor_strict_operator.rb +0 -39
  593. data/lib/factpulse/models/afnor_update_patch_directory_line_body.rb +0 -148
  594. data/lib/factpulse/models/afnor_update_patch_routing_code_body.rb +0 -258
  595. data/lib/factpulse/models/afnor_update_put_routing_code_body.rb +0 -289
  596. data/lib/factpulse/models/afnor_webhook_callback_content.rb +0 -148
  597. data/lib/factpulse/models/aggregated_payment_input.rb +0 -213
  598. data/lib/factpulse/models/aggregated_transaction_input.rb +0 -349
  599. data/lib/factpulse/models/allowance_charge.rb +0 -274
  600. data/lib/factpulse/models/allowance_charge_reason_code.rb +0 -76
  601. data/lib/factpulse/models/allowance_reason_code.rb +0 -45
  602. data/lib/factpulse/models/allowance_total_amount.rb +0 -104
  603. data/lib/factpulse/models/amount.rb +0 -104
  604. data/lib/factpulse/models/amount1.rb +0 -104
  605. data/lib/factpulse/models/amount2.rb +0 -104
  606. data/lib/factpulse/models/amount_due.rb +0 -104
  607. data/lib/factpulse/models/api_profile.rb +0 -43
  608. data/lib/factpulse/models/async_task_status.rb +0 -227
  609. data/lib/factpulse/models/base_amount.rb +0 -104
  610. data/lib/factpulse/models/bounding_box_schema.rb +0 -332
  611. data/lib/factpulse/models/buyercountry.rb +0 -104
  612. data/lib/factpulse/models/celery_status.rb +0 -43
  613. data/lib/factpulse/models/charge_total_amount.rb +0 -104
  614. data/lib/factpulse/models/chorus_pro_destination.rb +0 -194
  615. data/lib/factpulse/models/chorus_pro_result.rb +0 -186
  616. data/lib/factpulse/models/client_activate_response.rb +0 -220
  617. data/lib/factpulse/models/client_create_request.rb +0 -236
  618. data/lib/factpulse/models/client_detail.rb +0 -368
  619. data/lib/factpulse/models/client_list_response.rb +0 -249
  620. data/lib/factpulse/models/client_summary.rb +0 -368
  621. data/lib/factpulse/models/client_update_request.rb +0 -225
  622. data/lib/factpulse/models/contact.rb +0 -179
  623. data/lib/factpulse/models/convert_resume_request.rb +0 -151
  624. data/lib/factpulse/models/convert_success_response.rb +0 -360
  625. data/lib/factpulse/models/convert_validation_failed_response.rb +0 -339
  626. data/lib/factpulse/models/country_code.rb +0 -208
  627. data/lib/factpulse/models/create_aggregated_report_request.rb +0 -320
  628. data/lib/factpulse/models/create_cdar_request.rb +0 -414
  629. data/lib/factpulse/models/create_e_reporting_request.rb +0 -347
  630. data/lib/factpulse/models/currency.rb +0 -104
  631. data/lib/factpulse/models/currency_code.rb +0 -91
  632. data/lib/factpulse/models/delivery_party.rb +0 -179
  633. data/lib/factpulse/models/doc_type.rb +0 -42
  634. data/lib/factpulse/models/document_type_info.rb +0 -220
  635. data/lib/factpulse/models/e_reporting_flow_type.rb +0 -42
  636. data/lib/factpulse/models/e_reporting_validation_error.rb +0 -203
  637. data/lib/factpulse/models/electronic_address.rb +0 -198
  638. data/lib/factpulse/models/encaisseamount.rb +0 -104
  639. data/lib/factpulse/models/encaisseamount1.rb +0 -103
  640. data/lib/factpulse/models/encaissee_request.rb +0 -347
  641. data/lib/factpulse/models/enriched_invoice_info.rb +0 -354
  642. data/lib/factpulse/models/extraction_info.rb +0 -217
  643. data/lib/factpulse/models/factur_x_invoice.rb +0 -580
  644. data/lib/factpulse/models/factur_xpdf_info.rb +0 -205
  645. data/lib/factpulse/models/facture_electronique_rest_api_schemas_ereporting_invoice_type_code.rb +0 -43
  646. data/lib/factpulse/models/facture_electronique_rest_api_schemas_processing_chorus_pro_credentials.rb +0 -191
  647. data/lib/factpulse/models/facture_electronique_rest_api_schemas_validation_validation_error_response.rb +0 -168
  648. data/lib/factpulse/models/field_status.rb +0 -43
  649. data/lib/factpulse/models/file_info.rb +0 -161
  650. data/lib/factpulse/models/files_info.rb +0 -159
  651. data/lib/factpulse/models/flow_direction.rb +0 -40
  652. data/lib/factpulse/models/flow_profile.rb +0 -41
  653. data/lib/factpulse/models/flow_summary.rb +0 -253
  654. data/lib/factpulse/models/flow_syntax.rb +0 -43
  655. data/lib/factpulse/models/flow_type.rb +0 -51
  656. data/lib/factpulse/models/generate_aggregated_report_response.rb +0 -330
  657. data/lib/factpulse/models/generate_cdar_response.rb +0 -273
  658. data/lib/factpulse/models/generate_e_reporting_response.rb +0 -274
  659. data/lib/factpulse/models/get_chorus_pro_id_request.rb +0 -188
  660. data/lib/factpulse/models/get_chorus_pro_id_response.rb +0 -230
  661. data/lib/factpulse/models/get_invoice_request.rb +0 -176
  662. data/lib/factpulse/models/get_invoice_response.rb +0 -263
  663. data/lib/factpulse/models/get_structure_request.rb +0 -188
  664. data/lib/factpulse/models/get_structure_response.rb +0 -263
  665. data/lib/factpulse/models/global_allowance_amount.rb +0 -104
  666. data/lib/factpulse/models/gross_unit_price.rb +0 -104
  667. data/lib/factpulse/models/incoming_invoice.rb +0 -489
  668. data/lib/factpulse/models/incoming_supplier.rb +0 -236
  669. data/lib/factpulse/models/invoice_format.rb +0 -41
  670. data/lib/factpulse/models/invoice_input.rb +0 -439
  671. data/lib/factpulse/models/invoice_line.rb +0 -593
  672. data/lib/factpulse/models/invoice_line_allowance_amount.rb +0 -104
  673. data/lib/factpulse/models/invoice_note.rb +0 -176
  674. data/lib/factpulse/models/invoice_payment_input.rb +0 -267
  675. data/lib/factpulse/models/invoice_references.rb +0 -393
  676. data/lib/factpulse/models/invoice_status.rb +0 -203
  677. data/lib/factpulse/models/invoice_totals.rb +0 -312
  678. data/lib/factpulse/models/invoice_totals_prepayment.rb +0 -104
  679. data/lib/factpulse/models/invoice_type_code.rb +0 -54
  680. data/lib/factpulse/models/invoice_type_code_output.rb +0 -54
  681. data/lib/factpulse/models/invoicing_framework.rb +0 -218
  682. data/lib/factpulse/models/invoicing_framework_code.rb +0 -42
  683. data/lib/factpulse/models/issuer_role_code.rb +0 -40
  684. data/lib/factpulse/models/key_rotation_request.rb +0 -211
  685. data/lib/factpulse/models/key_rotation_response.rb +0 -232
  686. data/lib/factpulse/models/line_net_amount.rb +0 -104
  687. data/lib/factpulse/models/line_sub_type.rb +0 -41
  688. data/lib/factpulse/models/line_total_amount.rb +0 -104
  689. data/lib/factpulse/models/location_inner.rb +0 -103
  690. data/lib/factpulse/models/mandatory_note_schema.rb +0 -265
  691. data/lib/factpulse/models/manual_rate.rb +0 -104
  692. data/lib/factpulse/models/manual_vat_rate.rb +0 -104
  693. data/lib/factpulse/models/missing_field.rb +0 -269
  694. data/lib/factpulse/models/operation_nature.rb +0 -52
  695. data/lib/factpulse/models/output_format.rb +0 -40
  696. data/lib/factpulse/models/page_dimensions_schema.rb +0 -193
  697. data/lib/factpulse/models/payee.rb +0 -281
  698. data/lib/factpulse/models/payment_amount_by_rate.rb +0 -191
  699. data/lib/factpulse/models/payment_card.rb +0 -159
  700. data/lib/factpulse/models/payment_means.rb +0 -44
  701. data/lib/factpulse/models/pdf_validation_result_api.rb +0 -523
  702. data/lib/factpulse/models/pdp_config_response.rb +0 -306
  703. data/lib/factpulse/models/pdp_config_update_request.rb +0 -315
  704. data/lib/factpulse/models/pdp_credentials.rb +0 -257
  705. data/lib/factpulse/models/percentage.rb +0 -104
  706. data/lib/factpulse/models/postal_address.rb +0 -209
  707. data/lib/factpulse/models/price_allowance_amount.rb +0 -104
  708. data/lib/factpulse/models/price_basis_quantity.rb +0 -104
  709. data/lib/factpulse/models/processing_options.rb +0 -207
  710. data/lib/factpulse/models/processing_rule.rb +0 -44
  711. data/lib/factpulse/models/product_characteristic.rb +0 -193
  712. data/lib/factpulse/models/product_classification.rb +0 -186
  713. data/lib/factpulse/models/quantity.rb +0 -104
  714. data/lib/factpulse/models/rate.rb +0 -104
  715. data/lib/factpulse/models/rate1.rb +0 -104
  716. data/lib/factpulse/models/reason_code_info.rb +0 -220
  717. data/lib/factpulse/models/reason_codes_response.rb +0 -207
  718. data/lib/factpulse/models/recipient.rb +0 -231
  719. data/lib/factpulse/models/recipient_input.rb +0 -191
  720. data/lib/factpulse/models/refusee_request.rb +0 -346
  721. data/lib/factpulse/models/report_issuer.rb +0 -236
  722. data/lib/factpulse/models/report_period.rb +0 -193
  723. data/lib/factpulse/models/report_sender.rb +0 -221
  724. data/lib/factpulse/models/rounding_amount.rb +0 -104
  725. data/lib/factpulse/models/schematron_validation_error.rb +0 -294
  726. data/lib/factpulse/models/search_flow_request.rb +0 -306
  727. data/lib/factpulse/models/search_flow_response.rb +0 -249
  728. data/lib/factpulse/models/search_services_response.rb +0 -217
  729. data/lib/factpulse/models/search_structure_request.rb +0 -191
  730. data/lib/factpulse/models/search_structure_response.rb +0 -216
  731. data/lib/factpulse/models/secret_status.rb +0 -213
  732. data/lib/factpulse/models/sellercountry.rb +0 -104
  733. data/lib/factpulse/models/signature_info_api.rb +0 -216
  734. data/lib/factpulse/models/signature_parameters.rb +0 -235
  735. data/lib/factpulse/models/simplified_cdar_response.rb +0 -274
  736. data/lib/factpulse/models/simplified_invoice_data.rb +0 -404
  737. data/lib/factpulse/models/status_code_info.rb +0 -220
  738. data/lib/factpulse/models/status_codes_response.rb +0 -207
  739. data/lib/factpulse/models/structure_parameters.rb +0 -175
  740. data/lib/factpulse/models/structure_service.rb +0 -247
  741. data/lib/factpulse/models/submission_mode.rb +0 -41
  742. data/lib/factpulse/models/submit_aggregated_report_request.rb +0 -216
  743. data/lib/factpulse/models/submit_cdar_request.rb +0 -466
  744. data/lib/factpulse/models/submit_cdar_response.rb +0 -213
  745. data/lib/factpulse/models/submit_cdarxml_request.rb +0 -228
  746. data/lib/factpulse/models/submit_complete_invoice_request.rb +0 -239
  747. data/lib/factpulse/models/submit_complete_invoice_response.rb +0 -355
  748. data/lib/factpulse/models/submit_e_reporting_request.rb +0 -216
  749. data/lib/factpulse/models/submit_e_reporting_response.rb +0 -306
  750. data/lib/factpulse/models/submit_flow_request.rb +0 -238
  751. data/lib/factpulse/models/submit_flow_response.rb +0 -294
  752. data/lib/factpulse/models/submit_gross_amount.rb +0 -104
  753. data/lib/factpulse/models/submit_invoice_request.rb +0 -388
  754. data/lib/factpulse/models/submit_invoice_response.rb +0 -213
  755. data/lib/factpulse/models/submit_net_amount.rb +0 -104
  756. data/lib/factpulse/models/submit_vat_amount.rb +0 -104
  757. data/lib/factpulse/models/supplementary_attachment.rb +0 -274
  758. data/lib/factpulse/models/supplier.rb +0 -337
  759. data/lib/factpulse/models/task_response.rb +0 -166
  760. data/lib/factpulse/models/tax_breakdown_input.rb +0 -217
  761. data/lib/factpulse/models/tax_due_date_type.rb +0 -44
  762. data/lib/factpulse/models/tax_representative.rb +0 -220
  763. data/lib/factpulse/models/taxable_amount.rb +0 -104
  764. data/lib/factpulse/models/taxableamount.rb +0 -104
  765. data/lib/factpulse/models/taxamount.rb +0 -104
  766. data/lib/factpulse/models/taxamount1.rb +0 -104
  767. data/lib/factpulse/models/taxamount2.rb +0 -104
  768. data/lib/factpulse/models/taxexclusiveamount.rb +0 -104
  769. data/lib/factpulse/models/taxexclusiveamount1.rb +0 -104
  770. data/lib/factpulse/models/total_gross_amount.rb +0 -104
  771. data/lib/factpulse/models/total_net_amount.rb +0 -104
  772. data/lib/factpulse/models/total_vat_amount.rb +0 -104
  773. data/lib/factpulse/models/transaction_category.rb +0 -42
  774. data/lib/factpulse/models/transmission_type_code.rb +0 -40
  775. data/lib/factpulse/models/unit_net_price.rb +0 -104
  776. data/lib/factpulse/models/unit_of_measure.rb +0 -44
  777. data/lib/factpulse/models/validate_cdar_request.rb +0 -219
  778. data/lib/factpulse/models/validate_cdar_response.rb +0 -190
  779. data/lib/factpulse/models/validate_e_reporting_request.rb +0 -166
  780. data/lib/factpulse/models/validate_e_reporting_response.rb +0 -271
  781. data/lib/factpulse/models/validation_error_response.rb +0 -215
  782. data/lib/factpulse/models/validation_info.rb +0 -255
  783. data/lib/factpulse/models/validation_success_response.rb +0 -166
  784. data/lib/factpulse/models/vat_accounting_code.rb +0 -42
  785. data/lib/factpulse/models/vat_amount.rb +0 -104
  786. data/lib/factpulse/models/vat_category.rb +0 -47
  787. data/lib/factpulse/models/vat_line.rb +0 -272
  788. data/lib/factpulse/models/vat_point_date_code.rb +0 -41
  789. data/lib/factpulse/models/vat_rate.rb +0 -104
  790. data/lib/factpulse/models/verification_success_response.rb +0 -343
  791. data/lib/factpulse/models/verified_field_schema.rb +0 -334
  792. data/lib/factpulse/models/webhook_secret_delete_response.rb +0 -193
  793. data/lib/factpulse/models/webhook_secret_generate_response.rb +0 -247
  794. data/lib/factpulse/models/webhook_secret_status_response.rb +0 -176
@@ -1,271 +1,299 @@
1
1
  # frozen_string_literal: true
2
- #
3
- # FactPulse SDK - Thin HTTP wrapper with auto-polling.
4
- #
5
- # Usage:
6
- # client = FactPulseClient.new('email', 'password', 'client_uid')
7
- #
8
- # # POST /api/v1/processing/invoices/submit-complete-async
9
- # result = client.post('processing/invoices/submit-complete-async',
10
- # invoiceData: {...},
11
- # destination: { type: 'afnor' }
12
- # )
13
- # pdf_bytes = result['content'] # auto-decoded, auto-polled
14
-
15
- require 'net/http'
16
- require 'json'
17
- require 'base64'
18
- require 'uri'
2
+ require 'net/http'; require 'json'; require 'base64'; require 'uri'; require 'securerandom'
19
3
 
20
4
  module FactPulse
21
- class Error < StandardError
22
- attr_reader :status_code, :details
23
-
24
- def initialize(message, status_code: nil, details: [])
25
- super(message)
26
- @status_code = status_code
27
- @details = details
28
- end
29
- end
30
-
31
- class Client
32
- DEFAULT_API_URL = 'https://factpulse.fr'
33
-
34
- def initialize(email, password, client_uid, api_url: DEFAULT_API_URL, timeout: 60, polling_timeout: 120)
35
- @email = email
36
- @password = password
37
- @client_uid = client_uid
38
- @api_url = api_url.chomp('/')
39
- @timeout = timeout
40
- @polling_timeout = polling_timeout
41
- @token = nil
42
- @token_expires_at = 0
43
- @token_mutex = Mutex.new
44
- end
45
-
46
- # POST request to /api/v1/{path} (JSON body)
47
- def post(path, **data)
48
- request('POST', path, data, retry_auth: true)
49
- end
50
-
51
- # POST request with multipart/form-data (for file uploads)
52
- def post_multipart(path, data: {}, files: {})
53
- request_multipart(path, data, files, retry_auth: true)
5
+ module Helpers
6
+ # Credentials Chorus Pro pour le mode Zero-Trust.
7
+ # Ces credentials sont passés dans chaque requête et ne sont jamais stockés côté serveur.
8
+ class ChorusProCredentials
9
+ attr_reader :piste_client_id, :piste_client_secret, :chorus_pro_login, :chorus_pro_password, :sandbox
10
+ def initialize(piste_client_id:, piste_client_secret:, chorus_pro_login:, chorus_pro_password:, sandbox: true)
11
+ @piste_client_id, @piste_client_secret = piste_client_id, piste_client_secret
12
+ @chorus_pro_login, @chorus_pro_password, @sandbox = chorus_pro_login, chorus_pro_password, sandbox
13
+ end
14
+ def to_h
15
+ { 'piste_client_id' => @piste_client_id, 'piste_client_secret' => @piste_client_secret,
16
+ 'chorus_pro_login' => @chorus_pro_login, 'chorus_pro_password' => @chorus_pro_password, 'sandbox' => @sandbox }
17
+ end
54
18
  end
55
19
 
56
- # GET request to /api/v1/{path}
57
- def get(path, **params)
58
- request('GET', path, params, retry_auth: true)
20
+ # Credentials AFNOR PDP pour le mode Zero-Trust.
21
+ # L'API FactPulse utilise ces credentials pour s'authentifier auprès de la PDP AFNOR.
22
+ class AFNORCredentials
23
+ attr_reader :flow_service_url, :token_url, :client_id, :client_secret, :directory_service_url
24
+ def initialize(flow_service_url:, token_url:, client_id:, client_secret:, directory_service_url: nil)
25
+ @flow_service_url, @token_url = flow_service_url, token_url
26
+ @client_id, @client_secret, @directory_service_url = client_id, client_secret, directory_service_url
27
+ end
28
+ def to_h
29
+ result = { 'flow_service_url' => @flow_service_url, 'token_url' => @token_url,
30
+ 'client_id' => @client_id, 'client_secret' => @client_secret }
31
+ result['directory_service_url'] = @directory_service_url if @directory_service_url
32
+ result
33
+ end
59
34
  end
60
35
 
61
- private
62
-
63
- def request(method, path, data, retry_auth:)
64
- ensure_auth
65
- url = "#{@api_url}/api/v1/#{path}"
66
- uri = URI(url)
67
-
68
- http = Net::HTTP.new(uri.host, uri.port)
69
- http.use_ssl = uri.scheme == 'https'
70
- http.read_timeout = @timeout
71
-
72
- if method == 'POST'
73
- req = Net::HTTP::Post.new(uri)
74
- req['Content-Type'] = 'application/json'
75
- req.body = JSON.generate(data)
76
- else
77
- uri.query = URI.encode_www_form(data) unless data.empty?
78
- req = Net::HTTP::Get.new(uri)
36
+ # Helpers pour créer des montants totaux simplifiés.
37
+ module MontantHelpers
38
+ def self.montant(value)
39
+ return '0.00' if value.nil?
40
+ return format('%.2f', value) if value.is_a?(Numeric)
41
+ value.is_a?(String) ? value : '0.00'
79
42
  end
80
- req['Authorization'] = "Bearer #{@token}"
81
43
 
82
- response = http.request(req)
83
-
84
- if response.code == '401' && retry_auth
85
- invalidate_token
86
- return request(method, path, data, retry_auth: false)
44
+ def self.montant_total(ht, tva, ttc, a_payer, remise_ttc: nil, motif_remise: nil, acompte: nil)
45
+ result = {
46
+ 'montantHtTotal' => montant(ht), 'montantTva' => montant(tva),
47
+ 'montantTtcTotal' => montant(ttc), 'montantAPayer' => montant(a_payer)
48
+ }
49
+ result['montantRemiseGlobaleTtc'] = montant(remise_ttc) if remise_ttc
50
+ result['motifRemiseGlobaleTtc'] = motif_remise if motif_remise
51
+ result['acompte'] = montant(acompte) if acompte
52
+ result
87
53
  end
88
54
 
89
- result = parse_response(response)
90
-
91
- # Auto-poll: support both taskId (camelCase) and task_id (snake_case)
92
- if result.is_a?(Hash)
93
- task_id = result['taskId'] || result['task_id']
94
- result = poll(task_id) if task_id
55
+ # Crée une ligne de poste (aligné sur LigneDePoste de models.py).
56
+ def self.ligne_de_poste(numero, denomination, quantite, montant_unitaire_ht, montant_total_ligne_ht,
57
+ taux_tva: '20.00', categorie_tva: 'S', unite: 'FORFAIT', **options)
58
+ result = {
59
+ 'numero' => numero, 'denomination' => denomination,
60
+ 'quantite' => montant(quantite), 'montantUnitaireHt' => montant(montant_unitaire_ht),
61
+ 'montantTotalLigneHt' => montant(montant_total_ligne_ht), 'tauxTva' => montant(taux_tva),
62
+ 'categorieTva' => categorie_tva, 'unite' => unite
63
+ }
64
+ result['reference'] = options[:reference] if options[:reference]
65
+ result['montantRemiseHt'] = montant(options[:montant_remise_ht]) if options[:montant_remise_ht]
66
+ result['codeRaisonReduction'] = options[:code_raison_reduction] if options[:code_raison_reduction]
67
+ result['raisonReduction'] = options[:raison_reduction] if options[:raison_reduction]
68
+ result['dateDebutPeriode'] = options[:date_debut_periode] if options[:date_debut_periode]
69
+ result['dateFinPeriode'] = options[:date_fin_periode] if options[:date_fin_periode]
70
+ result
95
71
  end
96
72
 
97
- # Auto-decode: support both content_b64 and contentB64
98
- if result.is_a?(Hash)
99
- b64_content = result.delete('content_b64') || result.delete('contentB64')
100
- result['content'] = Base64.decode64(b64_content) if b64_content
73
+ # Crée une ligne de TVA (aligné sur LigneDeTVA de models.py).
74
+ def self.ligne_de_tva(taux_manuel, montant_base_ht, montant_tva, categorie: 'S')
75
+ {
76
+ 'tauxManuel' => montant(taux_manuel), 'montantBaseHt' => montant(montant_base_ht),
77
+ 'montantTva' => montant(montant_tva), 'categorie' => categorie
78
+ }
101
79
  end
102
80
 
103
- result
104
- end
105
-
106
- def request_multipart(path, data, files, retry_auth:)
107
- ensure_auth
108
- url = "#{@api_url}/api/v1/#{path}"
109
- uri = URI(url)
110
-
111
- http = Net::HTTP.new(uri.host, uri.port)
112
- http.use_ssl = uri.scheme == 'https'
113
- http.read_timeout = @timeout
114
-
115
- # Build multipart body
116
- boundary = "----RubyFormBoundary#{rand(1_000_000)}"
117
- body = []
118
-
119
- data.each do |key, value|
120
- body << "--#{boundary}\r\n"
121
- body << "Content-Disposition: form-data; name=\"#{key}\"\r\n\r\n"
122
- body << "#{value}\r\n"
81
+ # Crée une adresse postale pour l'API FactPulse.
82
+ def self.adresse_postale(ligne1, code_postal, ville, pays: 'FR', ligne2: nil, ligne3: nil)
83
+ result = { 'ligneUn' => ligne1, 'codePostal' => code_postal, 'nomVille' => ville, 'paysCodeIso' => pays }
84
+ result['ligneDeux'] = ligne2 if ligne2
85
+ result['ligneTrois'] = ligne3 if ligne3
86
+ result
123
87
  end
124
88
 
125
- files.each do |key, content|
126
- body << "--#{boundary}\r\n"
127
- body << "Content-Disposition: form-data; name=\"#{key}\"; filename=\"#{key}\"\r\n"
128
- body << "Content-Type: application/octet-stream\r\n\r\n"
129
- body << content
130
- body << "\r\n"
89
+ # Crée une adresse électronique. scheme_id: "0009"=SIREN, "0225"=SIRET
90
+ def self.adresse_electronique(identifiant, scheme_id: '0009')
91
+ { 'identifiant' => identifiant, 'schemeId' => scheme_id }
131
92
  end
132
93
 
133
- body << "--#{boundary}--\r\n"
134
-
135
- req = Net::HTTP::Post.new(uri)
136
- req['Authorization'] = "Bearer #{@token}"
137
- req['Content-Type'] = "multipart/form-data; boundary=#{boundary}"
138
- req.body = body.join
139
-
140
- response = http.request(req)
141
-
142
- if response.code == '401' && retry_auth
143
- invalidate_token
144
- return request_multipart(path, data, files, retry_auth: false)
94
+ # Calcule le numéro TVA intracommunautaire français depuis un SIREN.
95
+ def self.calculer_tva_intra(siren)
96
+ return nil if siren.nil? || siren.length != 9 || !siren.match?(/^\d+$/)
97
+ cle = (12 + 3 * (siren.to_i % 97)) % 97
98
+ format('FR%02d%s', cle, siren)
145
99
  end
146
100
 
147
- result = parse_response(response)
148
-
149
- # Auto-poll
150
- if result.is_a?(Hash)
151
- task_id = result['taskId'] || result['task_id']
152
- result = poll(task_id) if task_id
101
+ # Crée un fournisseur (émetteur) avec auto-calcul SIREN, TVA intracommunautaire et adresses.
102
+ def self.fournisseur(nom, siret, adresse_ligne1, code_postal, ville, **options)
103
+ siren = options[:siren] || (siret.length == 14 ? siret[0, 9] : nil)
104
+ numero_tva_intra = options[:numero_tva_intra] || (siren ? calculer_tva_intra(siren) : nil)
105
+ result = {
106
+ 'nom' => nom, 'idFournisseur' => options[:id_fournisseur] || 0, 'siret' => siret,
107
+ 'adresseElectronique' => adresse_electronique(siret, scheme_id: '0225'),
108
+ 'adressePostale' => adresse_postale(adresse_ligne1, code_postal, ville, pays: options[:pays] || 'FR', ligne2: options[:adresse_ligne2])
109
+ }
110
+ result['siren'] = siren if siren
111
+ result['numeroTvaIntra'] = numero_tva_intra if numero_tva_intra
112
+ result['iban'] = options[:iban] if options[:iban]
113
+ result['idServiceFournisseur'] = options[:code_service] if options[:code_service]
114
+ result['codeCoordonnesBancairesFournisseur'] = options[:code_coordonnees_bancaires] if options[:code_coordonnees_bancaires]
115
+ result
153
116
  end
154
117
 
155
- # Auto-decode
156
- if result.is_a?(Hash)
157
- b64_content = result.delete('content_b64') || result.delete('contentB64')
158
- result['content'] = Base64.decode64(b64_content) if b64_content
118
+ # Crée un destinataire (client) avec auto-calcul SIREN et adresses.
119
+ def self.destinataire(nom, siret, adresse_ligne1, code_postal, ville, **options)
120
+ siren = options[:siren] || (siret.length == 14 ? siret[0, 9] : nil)
121
+ result = {
122
+ 'nom' => nom, 'siret' => siret,
123
+ 'adresseElectronique' => adresse_electronique(siret, scheme_id: '0225'),
124
+ 'adressePostale' => adresse_postale(adresse_ligne1, code_postal, ville, pays: options[:pays] || 'FR', ligne2: options[:adresse_ligne2])
125
+ }
126
+ result['siren'] = siren if siren
127
+ result['codeServiceExecutant'] = options[:code_service_executant] if options[:code_service_executant]
128
+ result
159
129
  end
160
-
161
- result
162
130
  end
163
131
 
164
- def parse_response(response)
165
- body = response.body
166
- data = body && !body.empty? ? JSON.parse(body) : {}
132
+ class FactPulseClient
133
+ attr_reader :chorus_credentials, :afnor_credentials
167
134
 
168
- return data if response.is_a?(Net::HTTPSuccess)
135
+ def initialize(email:, password:, api_url: nil, client_uid: nil, chorus_credentials: nil, afnor_credentials: nil,
136
+ polling_interval: nil, polling_timeout: nil, max_retries: nil)
137
+ @email, @password = email, password; @api_url = (api_url || 'https://factpulse.fr').chomp('/')
138
+ @client_uid, @polling_interval, @polling_timeout, @max_retries = client_uid, polling_interval || 2000, polling_timeout || 120000, max_retries || 1
139
+ @chorus_credentials, @afnor_credentials = chorus_credentials, afnor_credentials
140
+ @access_token = @refresh_token = @token_expires_at = nil
141
+ end
169
142
 
170
- msg = "HTTP #{response.code}"
171
- details = []
143
+ def chorus_credentials_for_api; @chorus_credentials&.to_h; end
144
+ def afnor_credentials_for_api; @afnor_credentials&.to_h; end
145
+ # Alias plus courts
146
+ def get_chorus_pro_credentials; chorus_credentials_for_api; end
147
+ def get_afnor_credentials; afnor_credentials_for_api; end
148
+
149
+ def ensure_authenticated(force_refresh: false)
150
+ now = (Time.now.to_f * 1000).to_i
151
+ if force_refresh || @access_token.nil? || (@token_expires_at && now >= @token_expires_at)
152
+ payload = { 'username' => @email, 'password' => @password }; payload['client_uid'] = @client_uid if @client_uid
153
+ response = http_post(URI("#{@api_url}/api/token/"), payload)
154
+ raise FactPulseAuthError, "Auth failed" unless response.is_a?(Net::HTTPSuccess)
155
+ tokens = JSON.parse(response.body); @access_token, @refresh_token = tokens['access'], tokens['refresh']
156
+ @token_expires_at = now + (28 * 60 * 1000)
157
+ end
158
+ end
172
159
 
173
- if data.is_a?(Hash)
174
- if data['detail'].is_a?(Array)
175
- details = data['detail']
176
- msgs = data['detail'].map do |e|
177
- loc = e['loc'] || []
178
- "#{loc.last || '?'}: #{e['msg'] || '?'}"
160
+ def reset_auth; @access_token = @refresh_token = @token_expires_at = nil; end
161
+
162
+ def poll_task(task_id, timeout: nil, interval: nil)
163
+ timeout_ms, interval_ms = timeout || @polling_timeout, interval || @polling_interval
164
+ start_time, current_interval = (Time.now.to_f * 1000).to_i, interval_ms.to_f
165
+ loop do
166
+ raise FactPulsePollingTimeout.new(task_id, timeout_ms) if (Time.now.to_f * 1000).to_i - start_time > timeout_ms
167
+ ensure_authenticated; response = http_get(URI("#{@api_url}/api/v1/traitement/taches/#{task_id}/statut"))
168
+ reset_auth and next if response.code == '401'
169
+ data = JSON.parse(response.body)
170
+ return data['resultat'] || {} if data['statut'] == 'SUCCESS'
171
+ if data['statut'] == 'FAILURE'
172
+ r = data['resultat'] || {}
173
+ raise FactPulseValidationError.new("Task #{task_id} failed: #{r['message_erreur'] || '?'}", (r['erreurs'] || []).map { |e| ValidationErrorDetail.from_hash(e) })
179
174
  end
180
- msg = "Validation error: #{msgs.join('; ')}"
181
- elsif data['detail'].is_a?(String)
182
- msg = data['detail']
183
- elsif data['errorMessage'].is_a?(String)
184
- msg = data['errorMessage']
175
+ sleep(current_interval / 1000.0); current_interval = [current_interval * 1.5, 10000].min
185
176
  end
186
177
  end
187
178
 
188
- raise Error.new(msg, status_code: response.code.to_i, details: details)
189
- end
179
+ def self.format_montant(m); MontantHelpers.montant(m); end
180
+
181
+ # Génère une facture Factur-X à partir d'un dict/hash et d'un PDF source.
182
+ # Accepte un Hash, un String JSON, ou tout objet avec une méthode to_h/to_hash.
183
+ # @param facture_data [Hash, String, Object] Données de la facture
184
+ # @param pdf_source [String, File] Chemin vers le PDF source ou objet File
185
+ # @param profil [String] Profil Factur-X (MINIMUM, BASIC, EN16931, EXTENDED)
186
+ # @param format_sortie [String] Format de sortie (pdf, xml, both)
187
+ # @param sync [Boolean] Mode synchrone (true) ou asynchrone (false)
188
+ # @param timeout [Integer, nil] Timeout en ms pour le polling
189
+ # @return [String] Contenu binaire du PDF généré
190
+ def generer_facturx(facture_data, pdf_source, profil: 'EN16931', format_sortie: 'pdf', sync: true, timeout: nil)
191
+ # Conversion des données en JSON string
192
+ json_data = case facture_data
193
+ when String then facture_data
194
+ when Hash then JSON.generate(facture_data)
195
+ else
196
+ if facture_data.respond_to?(:to_h)
197
+ JSON.generate(facture_data.to_h)
198
+ elsif facture_data.respond_to?(:to_hash)
199
+ JSON.generate(facture_data.to_hash)
200
+ else
201
+ raise FactPulseValidationError.new("Type de données non supporté: #{facture_data.class}")
202
+ end
203
+ end
204
+
205
+ # Lecture du PDF source
206
+ pdf_content = case pdf_source
207
+ when String then File.binread(pdf_source)
208
+ when File then pdf_source.read
209
+ else
210
+ if pdf_source.respond_to?(:read)
211
+ pdf_source.read
212
+ else
213
+ raise FactPulseValidationError.new("Type de PDF non supporté: #{pdf_source.class}")
214
+ end
215
+ end
216
+ pdf_filename = pdf_source.is_a?(String) ? File.basename(pdf_source) : 'facture.pdf'
217
+
218
+ ensure_authenticated
219
+ uri = URI("#{@api_url}/api/v1/traitement/generer-facture")
220
+
221
+ # Construire la requête multipart
222
+ boundary = "----RubyFormBoundary#{SecureRandom.hex(16)}"
223
+ body = []
224
+
225
+ # Champ donnees_facture
226
+ body << "--#{boundary}\r\n"
227
+ body << "Content-Disposition: form-data; name=\"donnees_facture\"\r\n\r\n"
228
+ body << "#{json_data}\r\n"
229
+
230
+ # Champ profil
231
+ body << "--#{boundary}\r\n"
232
+ body << "Content-Disposition: form-data; name=\"profil\"\r\n\r\n"
233
+ body << "#{profil}\r\n"
190
234
 
191
- def poll(task_id)
192
- start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
193
- interval = 1.0
235
+ # Champ format_sortie
236
+ body << "--#{boundary}\r\n"
237
+ body << "Content-Disposition: form-data; name=\"format_sortie\"\r\n\r\n"
238
+ body << "#{format_sortie}\r\n"
194
239
 
195
- loop do
196
- elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start
197
- if elapsed >= @polling_timeout
198
- raise Error.new("Polling timeout after #{@polling_timeout}s for task #{task_id}")
199
- end
240
+ # Champ source_pdf (fichier)
241
+ body << "--#{boundary}\r\n"
242
+ body << "Content-Disposition: form-data; name=\"source_pdf\"; filename=\"#{pdf_filename}\"\r\n"
243
+ body << "Content-Type: application/pdf\r\n\r\n"
244
+ body << pdf_content
245
+ body << "\r\n"
246
+
247
+ body << "--#{boundary}--\r\n"
248
+ body_str = body.join
200
249
 
201
- ensure_auth
202
- uri = URI("#{@api_url}/api/v1/processing/tasks/#{task_id}/status")
203
250
  http = Net::HTTP.new(uri.host, uri.port)
204
251
  http.use_ssl = uri.scheme == 'https'
205
- http.read_timeout = @timeout
206
-
207
- req = Net::HTTP::Get.new(uri)
208
- req['Authorization'] = "Bearer #{@token}"
209
- response = http.request(req)
252
+ http.read_timeout = 120
210
253
 
211
- if response.code == '401'
212
- invalidate_token
213
- next
214
- end
254
+ request = Net::HTTP::Post.new(uri)
255
+ request['Authorization'] = "Bearer #{@access_token}"
256
+ request['Content-Type'] = "multipart/form-data; boundary=#{boundary}"
257
+ request.body = body_str
215
258
 
216
- data = parse_response(response)
217
- status = data['status']
259
+ response = http.request(request)
218
260
 
219
- if status == 'SUCCESS'
220
- result = data['result'] || {}
221
- # Support both content_b64 and contentB64
222
- b64_content = result.delete('content_b64') || result.delete('contentB64')
223
- result['content'] = Base64.decode64(b64_content) if b64_content
224
- return result
261
+ if response.code == '401'
262
+ reset_auth
263
+ ensure_authenticated
264
+ request['Authorization'] = "Bearer #{@access_token}"
265
+ response = http.request(request)
225
266
  end
226
267
 
227
- if status == 'FAILURE'
228
- res = data['result'] || {}
229
- raise Error.new(res['errorMessage'] || 'Task failed', details: res['details'] || [])
268
+ unless response.is_a?(Net::HTTPSuccess)
269
+ error_data = JSON.parse(response.body) rescue { 'detail' => response.body }
270
+ raise FactPulseValidationError.new("Erreur API: #{error_data['detail'] || response.body}")
230
271
  end
231
272
 
232
- sleep([interval, @polling_timeout - elapsed].min)
233
- interval = [interval * 1.5, 10].min
234
- end
235
- end
273
+ data = JSON.parse(response.body)
236
274
 
237
- def ensure_auth
238
- @token_mutex.synchronize do
239
- if Process.clock_gettime(Process::CLOCK_MONOTONIC) >= @token_expires_at
240
- refresh_token
275
+ if sync && data['id_tache']
276
+ result = poll_task(data['id_tache'], timeout: timeout)
277
+ if result['contenu_b64']
278
+ require 'base64'
279
+ return Base64.decode64(result['contenu_b64'])
280
+ elsif result['contenu_xml']
281
+ return result['contenu_xml']
282
+ end
283
+ raise FactPulseValidationError.new("Résultat inattendu: #{result.keys.join(', ')}")
241
284
  end
242
- end
243
- end
244
-
245
- def refresh_token
246
- uri = URI("#{@api_url}/api/token/")
247
- http = Net::HTTP.new(uri.host, uri.port)
248
- http.use_ssl = uri.scheme == 'https'
249
- http.read_timeout = @timeout
250
-
251
- req = Net::HTTP::Post.new(uri)
252
- req['Content-Type'] = 'application/json'
253
- req.body = JSON.generate(username: @email, password: @password, client_uid: @client_uid)
254
-
255
- response = http.request(req)
256
285
 
257
- unless response.is_a?(Net::HTTPSuccess)
258
- raise Error.new("Authentication failed: HTTP #{response.code}", status_code: response.code.to_i)
286
+ data
259
287
  end
260
288
 
261
- data = JSON.parse(response.body)
262
- @token = data['access'] || raise(Error.new('Invalid auth response'))
263
- @token_expires_at = Process.clock_gettime(Process::CLOCK_MONOTONIC) + 28 * 60
264
- end
265
-
266
- def invalidate_token
267
- @token_mutex.synchronize do
268
- @token_expires_at = 0
289
+ private
290
+ def http_post(uri, payload)
291
+ Net::HTTP.new(uri.host, uri.port).tap { |h| h.use_ssl = uri.scheme == 'https'; h.read_timeout = 30 }
292
+ .request(Net::HTTP::Post.new(uri).tap { |r| r['Content-Type'] = 'application/json'; r.body = JSON.generate(payload) })
293
+ end
294
+ def http_get(uri)
295
+ Net::HTTP.new(uri.host, uri.port).tap { |h| h.use_ssl = uri.scheme == 'https'; h.read_timeout = 30 }
296
+ .request(Net::HTTP::Get.new(uri).tap { |r| r['Authorization'] = "Bearer #{@access_token}" })
269
297
  end
270
298
  end
271
299
  end
@@ -1,45 +1,21 @@
1
1
  # frozen_string_literal: true
2
-
3
2
  module FactPulse
4
- # Additional error types (base Error class is in client.rb)
5
- class AuthError < Error; end
6
-
7
- class PollingTimeout < Error
8
- attr_reader :task_id, :timeout
9
-
10
- def initialize(task_id, timeout)
11
- @task_id = task_id
12
- @timeout = timeout
13
- super("Timeout (#{timeout}ms) for #{task_id}")
3
+ module Helpers
4
+ class FactPulseError < StandardError; end
5
+ class FactPulseAuthError < FactPulseError; end
6
+ class FactPulsePollingTimeout < FactPulseError
7
+ attr_reader :task_id, :timeout
8
+ def initialize(task_id, timeout); @task_id, @timeout = task_id, timeout; super("Timeout (#{timeout}ms) pour #{task_id}"); end
14
9
  end
15
- end
16
-
17
- class ValidationErrorDetail
18
- attr_accessor :level, :item, :reason, :source, :code
19
-
20
- def initialize(level: '', item: '', reason: '', source: nil, code: nil)
21
- @level = level
22
- @item = item
23
- @reason = reason
24
- @source = source
25
- @code = code
26
- end
27
-
28
- def to_s
29
- "[#{@item.to_s.empty? ? 'unknown' : @item}] #{@reason.to_s.empty? ? 'Unknown error' : @reason}"
10
+ class ValidationErrorDetail
11
+ attr_accessor :level, :item, :reason, :source, :code
12
+ def initialize(level: '', item: '', reason: '', source: nil, code: nil); @level, @item, @reason, @source, @code = level, item, reason, source, code; end
13
+ def to_s; "[#{@item.to_s.empty? ? 'unknown' : @item}] #{@reason.to_s.empty? ? 'Unknown error' : @reason}"; end
14
+ def self.from_hash(h); new(level: h['level']||'', item: h['item']||'', reason: h['reason']||'', source: h['source'], code: h['code']); end
30
15
  end
31
-
32
- def self.from_hash(h)
33
- new(level: h['level'] || '', item: h['item'] || '', reason: h['reason'] || '', source: h['source'], code: h['code'])
34
- end
35
- end
36
-
37
- class ValidationError < Error
38
- attr_reader :errors
39
-
40
- def initialize(msg, errors = [])
41
- @errors = errors
42
- super(errors.empty? ? msg : "#{msg}\n\nDetails:\n#{errors.map { |e| " - #{e}" }.join("\n")}")
16
+ class FactPulseValidationError < FactPulseError
17
+ attr_reader :errors
18
+ def initialize(msg, errors = []); @errors = errors; super(errors.empty? ? msg : "#{msg}\n\nDétails:\n#{errors.map{|e| " - #{e}"}.join("\n")}"); end
43
19
  end
44
20
  end
45
21
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+ require_relative 'helpers/exceptions'
3
+ require_relative 'helpers/client'
4
+ module FactPulse
5
+ module Helpers
6
+ def self.create_client(**opts); FactPulseClient.new(**opts); end
7
+ def self.format_montant(m); MontantHelpers.montant(m); end
8
+ def self.montant(m); MontantHelpers.montant(m); end
9
+ def self.montant_total(*args, **kwargs); MontantHelpers.montant_total(*args, **kwargs); end
10
+ def self.ligne_de_poste(*args, **kwargs); MontantHelpers.ligne_de_poste(*args, **kwargs); end
11
+ def self.ligne_de_tva(*args, **kwargs); MontantHelpers.ligne_de_tva(*args, **kwargs); end
12
+ end
13
+ end