factpulse 4.0.2 → 4.1.2

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 (434) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -4
  3. data/Gemfile.lock +3 -3
  4. data/README.md +12 -0
  5. data/docs/AFNORErrorDetail.md +26 -0
  6. data/docs/AFNORPDPPAApi.md +9 -2
  7. data/docs/AsyncTasksApi.md +231 -1
  8. data/docs/ChorusProApi.md +96 -16
  9. data/docs/ClientManagementApi.md +371 -25
  10. data/docs/ConversionErrorResult.md +30 -0
  11. data/docs/ConversionExtractionInfo.md +20 -0
  12. data/docs/ConversionPendingInputResult.md +30 -0
  13. data/docs/ConversionSuccessTaskResult.md +36 -0
  14. data/docs/ConversionTaskStatus.md +22 -0
  15. data/docs/ConversionTaskStatusResult.md +85 -0
  16. data/docs/ConversionValidationFailedResult.md +34 -0
  17. data/docs/ConvertResumeRequest.md +5 -1
  18. data/docs/DownloadsApi.md +16 -6
  19. data/docs/ElectronicSignatureApi.md +24 -4
  20. data/docs/FacturXConversionApi.md +176 -4
  21. data/docs/FacturXInvoice.md +1 -1
  22. data/docs/FacturXPDFXMLVerificationApi.md +93 -3
  23. data/docs/FacturXValidationApi.md +12 -78
  24. data/docs/FactureElectroniqueModelsInvoiceTypeCode.md +15 -0
  25. data/docs/FactureElectroniqueRestApiSchemasValidationValidationErrorResponse.md +18 -0
  26. data/docs/Flux10EReportingApi.md +36 -6
  27. data/docs/Flux6InvoiceLifecycleCDARApi.md +100 -3
  28. data/docs/GenerationSuccessResult.md +24 -0
  29. data/docs/GenerationTaskStatus.md +22 -0
  30. data/docs/GenerationTaskStatusResult.md +79 -0
  31. data/docs/HealthApi.md +6 -125
  32. data/docs/{FacturXGenerationApi.md → InvoiceGenerationApi.md} +39 -24
  33. data/docs/InvoiceInput.md +1 -1
  34. data/docs/InvoiceLifecycle.md +24 -0
  35. data/docs/InvoicingFramework.md +1 -1
  36. data/docs/KeyRotationRequest.md +20 -0
  37. data/docs/KeyRotationResponse.md +24 -0
  38. data/docs/LifecycleEvent.md +38 -0
  39. data/docs/LifecycleResponse.md +22 -0
  40. data/docs/PDPConfigResponse.md +2 -0
  41. data/docs/PDPConfigUpdateRequest.md +3 -1
  42. data/docs/ParseApi.md +161 -0
  43. data/docs/ParseFacturXResponse.md +26 -0
  44. data/docs/ReferencesApi.md +74 -0
  45. data/docs/SecretStatus.md +5 -1
  46. data/docs/SignatureSuccessResult.md +34 -0
  47. data/docs/SignatureTaskStatus.md +22 -0
  48. data/docs/SignatureTaskStatusResult.md +79 -0
  49. data/docs/SimplifiedInvoiceData.md +1 -1
  50. data/docs/SubmitCompleteInvoiceResponse.md +3 -1
  51. data/docs/Supplier.md +1 -1
  52. data/docs/TaskErrorResult.md +26 -0
  53. data/docs/VATEXCodeInfo.md +24 -0
  54. data/docs/VATEXCodesResponse.md +22 -0
  55. data/docs/ValidateCDARResponse.md +2 -2
  56. data/docs/ValidationApi.md +88 -0
  57. data/docs/ValidationErrorResponse.md +8 -2
  58. data/docs/ValidationSuccessTaskResult.md +20 -0
  59. data/docs/ValidationTaskStatus.md +22 -0
  60. data/docs/ValidationTaskStatusResult.md +79 -0
  61. data/docs/VerificationSuccessTaskResult.md +20 -0
  62. data/docs/VerificationTypedTaskStatus.md +22 -0
  63. data/docs/VerificationTypedTaskStatusResult.md +79 -0
  64. data/docs/WebhookSecretDeleteResponse.md +20 -0
  65. data/docs/WebhookSecretGenerateResponse.md +24 -0
  66. data/docs/WebhookSecretStatusResponse.md +20 -0
  67. data/factpulse.gemspec +3 -3
  68. data/lib/factpulse/api/afnorpdppa_api.rb +6 -3
  69. data/lib/factpulse/api/afnorpdppa_directory_service_api.rb +2 -2
  70. data/lib/factpulse/api/afnorpdppa_flow_service_api.rb +2 -2
  71. data/lib/factpulse/api/async_tasks_api.rb +192 -3
  72. data/lib/factpulse/api/chorus_pro_api.rb +18 -18
  73. data/lib/factpulse/api/client_management_api.rb +290 -24
  74. data/lib/factpulse/api/downloads_api.rb +8 -8
  75. data/lib/factpulse/api/electronic_signature_api.rb +6 -6
  76. data/lib/factpulse/api/factur_x_conversion_api.rb +143 -6
  77. data/lib/factpulse/api/factur_x_validation_api.rb +4 -79
  78. data/lib/factpulse/api/factur_xpdfxml_verification_api.rb +68 -5
  79. data/lib/factpulse/api/flux10_e_reporting_api.rb +8 -8
  80. data/lib/factpulse/api/flux6_invoice_lifecycle_cdar_api.rb +88 -5
  81. data/lib/factpulse/api/health_api.rb +3 -117
  82. data/lib/factpulse/api/{factur_x_generation_api.rb → invoice_generation_api.rb} +26 -26
  83. data/lib/factpulse/api/parse_api.rb +163 -0
  84. data/lib/factpulse/api/references_api.rb +82 -0
  85. data/lib/factpulse/api/validation_api.rb +97 -0
  86. data/lib/factpulse/api_client.rb +2 -2
  87. data/lib/factpulse/api_error.rb +2 -2
  88. data/lib/factpulse/api_model_base.rb +2 -2
  89. data/lib/factpulse/configuration.rb +9 -2
  90. data/lib/factpulse/models/acknowledgment_status.rb +2 -2
  91. data/lib/factpulse/models/action_code_info.rb +2 -2
  92. data/lib/factpulse/models/action_codes_response.rb +2 -2
  93. data/lib/factpulse/models/additional_document.rb +2 -2
  94. data/lib/factpulse/models/afnor_acknowledgement.rb +2 -2
  95. data/lib/factpulse/models/afnor_acknowledgement_detail.rb +2 -2
  96. data/lib/factpulse/models/afnor_address_edit.rb +2 -2
  97. data/lib/factpulse/models/afnor_address_patch.rb +2 -2
  98. data/lib/factpulse/models/afnor_address_put.rb +2 -2
  99. data/lib/factpulse/models/afnor_address_read.rb +2 -2
  100. data/lib/factpulse/models/afnor_algorithm.rb +2 -2
  101. data/lib/factpulse/models/afnor_contains_operator.rb +2 -2
  102. data/lib/factpulse/models/afnor_create_directory_line_body.rb +2 -2
  103. data/lib/factpulse/models/afnor_create_directory_line_body_addressing_information.rb +2 -2
  104. data/lib/factpulse/models/afnor_create_directory_line_body_period.rb +2 -2
  105. data/lib/factpulse/models/afnor_create_routing_code_body.rb +2 -2
  106. data/lib/factpulse/models/afnor_credentials.rb +2 -2
  107. data/lib/factpulse/models/afnor_destination.rb +2 -2
  108. data/lib/factpulse/models/afnor_diffusion_status.rb +2 -2
  109. data/lib/factpulse/models/afnor_directory_line_field.rb +2 -2
  110. data/lib/factpulse/models/afnor_directory_line_payload_history_legal_unit_facility_routing_code.rb +2 -2
  111. data/lib/factpulse/models/afnor_directory_line_payload_history_legal_unit_facility_routing_code_platform.rb +2 -2
  112. data/lib/factpulse/models/afnor_directory_line_payload_history_legal_unit_facility_routing_code_routing_code.rb +2 -2
  113. data/lib/factpulse/models/afnor_directory_line_post201_response.rb +2 -2
  114. data/lib/factpulse/models/afnor_directory_line_search_post200_response.rb +2 -2
  115. data/lib/factpulse/models/afnor_entity_type.rb +2 -2
  116. data/lib/factpulse/models/afnor_error.rb +2 -2
  117. data/lib/factpulse/models/afnor_error_detail.rb +237 -0
  118. data/lib/factpulse/models/afnor_facility_administrative_status.rb +2 -2
  119. data/lib/factpulse/models/afnor_facility_nature.rb +2 -2
  120. data/lib/factpulse/models/afnor_facility_payload_history.rb +2 -2
  121. data/lib/factpulse/models/afnor_facility_payload_history_ule_b2g_additional_data.rb +2 -2
  122. data/lib/factpulse/models/afnor_facility_payload_included.rb +2 -2
  123. data/lib/factpulse/models/afnor_facility_type.rb +2 -2
  124. data/lib/factpulse/models/afnor_flow.rb +2 -2
  125. data/lib/factpulse/models/afnor_flow_ack_status.rb +2 -2
  126. data/lib/factpulse/models/afnor_flow_direction.rb +2 -2
  127. data/lib/factpulse/models/afnor_flow_info.rb +2 -2
  128. data/lib/factpulse/models/afnor_flow_profile.rb +2 -2
  129. data/lib/factpulse/models/afnor_flow_syntax.rb +2 -2
  130. data/lib/factpulse/models/afnor_flow_type.rb +2 -2
  131. data/lib/factpulse/models/afnor_full_flow_info.rb +2 -2
  132. data/lib/factpulse/models/afnor_health_check_response.rb +2 -2
  133. data/lib/factpulse/models/afnor_legal_unit_administrative_status.rb +2 -2
  134. data/lib/factpulse/models/afnor_legal_unit_payload_history.rb +2 -2
  135. data/lib/factpulse/models/afnor_legal_unit_payload_included.rb +2 -2
  136. data/lib/factpulse/models/afnor_legal_unit_payload_included_no_siren.rb +2 -2
  137. data/lib/factpulse/models/afnor_platform_status.rb +2 -2
  138. data/lib/factpulse/models/afnor_processing_rule.rb +2 -2
  139. data/lib/factpulse/models/afnor_reason_code.rb +2 -2
  140. data/lib/factpulse/models/afnor_reason_code_enum.rb +2 -2
  141. data/lib/factpulse/models/afnor_recipient_platform_type.rb +2 -2
  142. data/lib/factpulse/models/afnor_result.rb +2 -2
  143. data/lib/factpulse/models/afnor_routing_code_administrative_status.rb +2 -2
  144. data/lib/factpulse/models/afnor_routing_code_field.rb +2 -2
  145. data/lib/factpulse/models/afnor_routing_code_payload_history_legal_unit_facility.rb +2 -2
  146. data/lib/factpulse/models/afnor_routing_code_post201_response.rb +2 -2
  147. data/lib/factpulse/models/afnor_routing_code_search.rb +2 -2
  148. data/lib/factpulse/models/afnor_routing_code_search_filters.rb +2 -2
  149. data/lib/factpulse/models/afnor_routing_code_search_filters_administrative_status.rb +2 -2
  150. data/lib/factpulse/models/afnor_routing_code_search_filters_routing_code_name.rb +2 -2
  151. data/lib/factpulse/models/afnor_routing_code_search_filters_routing_identifier.rb +2 -2
  152. data/lib/factpulse/models/afnor_routing_code_search_post200_response.rb +2 -2
  153. data/lib/factpulse/models/afnor_routing_code_search_sorting_inner.rb +2 -2
  154. data/lib/factpulse/models/afnor_search_directory_line.rb +2 -2
  155. data/lib/factpulse/models/afnor_search_directory_line_filters.rb +2 -2
  156. data/lib/factpulse/models/afnor_search_directory_line_filters_addressing_identifier.rb +2 -2
  157. data/lib/factpulse/models/afnor_search_directory_line_filters_addressing_suffix.rb +2 -2
  158. data/lib/factpulse/models/afnor_search_directory_line_sorting_inner.rb +2 -2
  159. data/lib/factpulse/models/afnor_search_flow_content.rb +2 -2
  160. data/lib/factpulse/models/afnor_search_flow_filters.rb +2 -2
  161. data/lib/factpulse/models/afnor_search_flow_params.rb +2 -2
  162. data/lib/factpulse/models/afnor_search_siren.rb +2 -2
  163. data/lib/factpulse/models/afnor_search_siren_filters.rb +2 -2
  164. data/lib/factpulse/models/afnor_search_siren_filters_administrative_status.rb +2 -2
  165. data/lib/factpulse/models/afnor_search_siren_filters_business_name.rb +2 -2
  166. data/lib/factpulse/models/afnor_search_siren_filters_entity_type.rb +2 -2
  167. data/lib/factpulse/models/afnor_search_siren_filters_siren.rb +2 -2
  168. data/lib/factpulse/models/afnor_search_siren_sorting_inner.rb +2 -2
  169. data/lib/factpulse/models/afnor_search_siret.rb +2 -2
  170. data/lib/factpulse/models/afnor_search_siret_filters.rb +2 -2
  171. data/lib/factpulse/models/afnor_search_siret_filters_address_lines.rb +2 -2
  172. data/lib/factpulse/models/afnor_search_siret_filters_administrative_status.rb +2 -2
  173. data/lib/factpulse/models/afnor_search_siret_filters_country_subdivision.rb +2 -2
  174. data/lib/factpulse/models/afnor_search_siret_filters_facility_type.rb +2 -2
  175. data/lib/factpulse/models/afnor_search_siret_filters_locality.rb +2 -2
  176. data/lib/factpulse/models/afnor_search_siret_filters_name.rb +2 -2
  177. data/lib/factpulse/models/afnor_search_siret_filters_postal_code.rb +2 -2
  178. data/lib/factpulse/models/afnor_search_siret_filters_siret.rb +2 -2
  179. data/lib/factpulse/models/afnor_search_siret_sorting_inner.rb +2 -2
  180. data/lib/factpulse/models/afnor_siren_field.rb +2 -2
  181. data/lib/factpulse/models/afnor_siren_search_post200_response.rb +2 -2
  182. data/lib/factpulse/models/afnor_siret_field.rb +2 -2
  183. data/lib/factpulse/models/afnor_siret_search_post200_response.rb +2 -2
  184. data/lib/factpulse/models/afnor_sorting_order.rb +2 -2
  185. data/lib/factpulse/models/afnor_strict_operator.rb +2 -2
  186. data/lib/factpulse/models/afnor_update_patch_directory_line_body.rb +2 -2
  187. data/lib/factpulse/models/afnor_update_patch_routing_code_body.rb +2 -2
  188. data/lib/factpulse/models/afnor_update_put_routing_code_body.rb +2 -2
  189. data/lib/factpulse/models/afnor_webhook_callback_content.rb +2 -2
  190. data/lib/factpulse/models/aggregated_payment_input.rb +2 -2
  191. data/lib/factpulse/models/aggregated_transaction_input.rb +2 -2
  192. data/lib/factpulse/models/allowance_charge.rb +2 -2
  193. data/lib/factpulse/models/allowance_charge_reason_code.rb +2 -2
  194. data/lib/factpulse/models/allowance_reason_code.rb +2 -2
  195. data/lib/factpulse/models/allowance_total_amount.rb +2 -2
  196. data/lib/factpulse/models/amount.rb +2 -2
  197. data/lib/factpulse/models/amount1.rb +2 -2
  198. data/lib/factpulse/models/amount2.rb +2 -2
  199. data/lib/factpulse/models/amount_due.rb +2 -2
  200. data/lib/factpulse/models/api_error.rb +2 -2
  201. data/lib/factpulse/models/api_profile.rb +2 -2
  202. data/lib/factpulse/models/async_task_status.rb +2 -2
  203. data/lib/factpulse/models/base_amount.rb +2 -2
  204. data/lib/factpulse/models/bounding_box_schema.rb +2 -2
  205. data/lib/factpulse/models/buyercountry.rb +2 -2
  206. data/lib/factpulse/models/celery_status.rb +2 -2
  207. data/lib/factpulse/models/certificate_info_response.rb +2 -2
  208. data/lib/factpulse/models/charge_total_amount.rb +2 -2
  209. data/lib/factpulse/models/chorus_pro_credentials.rb +2 -2
  210. data/lib/factpulse/models/chorus_pro_destination.rb +2 -2
  211. data/lib/factpulse/models/chorus_pro_result.rb +2 -2
  212. data/lib/factpulse/models/client_activate_response.rb +2 -2
  213. data/lib/factpulse/models/client_create_request.rb +2 -2
  214. data/lib/factpulse/models/client_detail.rb +2 -2
  215. data/lib/factpulse/models/client_list_response.rb +2 -2
  216. data/lib/factpulse/models/client_summary.rb +2 -2
  217. data/lib/factpulse/models/client_update_request.rb +2 -2
  218. data/lib/factpulse/models/contact.rb +2 -2
  219. data/lib/factpulse/models/conversion_error_result.rb +277 -0
  220. data/lib/factpulse/models/conversion_extraction_info.rb +176 -0
  221. data/lib/factpulse/models/conversion_pending_input_result.rb +344 -0
  222. data/lib/factpulse/models/conversion_success_task_result.rb +355 -0
  223. data/lib/factpulse/models/conversion_task_status.rb +223 -0
  224. data/lib/factpulse/models/conversion_task_status_result.rb +59 -0
  225. data/lib/factpulse/models/conversion_validation_failed_result.rb +348 -0
  226. data/lib/factpulse/models/convert_resume_request.rb +29 -7
  227. data/lib/factpulse/models/convert_success_response.rb +2 -2
  228. data/lib/factpulse/models/convert_validation_failed_response.rb +2 -2
  229. data/lib/factpulse/models/country_code.rb +2 -2
  230. data/lib/factpulse/models/create_aggregated_report_request.rb +2 -2
  231. data/lib/factpulse/models/create_cdar_request.rb +2 -2
  232. data/lib/factpulse/models/create_e_reporting_request.rb +2 -2
  233. data/lib/factpulse/models/currency.rb +2 -2
  234. data/lib/factpulse/models/currency_code.rb +2 -2
  235. data/lib/factpulse/models/delivery_party.rb +2 -2
  236. data/lib/factpulse/models/destination.rb +2 -2
  237. data/lib/factpulse/models/doc_type.rb +2 -2
  238. data/lib/factpulse/models/document_type_info.rb +2 -2
  239. data/lib/factpulse/models/e_reporting_flow_type.rb +2 -2
  240. data/lib/factpulse/models/e_reporting_validation_error.rb +2 -2
  241. data/lib/factpulse/models/electronic_address.rb +2 -2
  242. data/lib/factpulse/models/encaisseamount.rb +2 -2
  243. data/lib/factpulse/models/encaisseamount1.rb +2 -2
  244. data/lib/factpulse/models/encaissee_request.rb +2 -2
  245. data/lib/factpulse/models/enriched_invoice_info.rb +2 -2
  246. data/lib/factpulse/models/error_level.rb +2 -2
  247. data/lib/factpulse/models/error_source.rb +2 -2
  248. data/lib/factpulse/models/extraction_info.rb +2 -2
  249. data/lib/factpulse/models/factur_x_invoice.rb +3 -19
  250. data/lib/factpulse/models/factur_xpdf_info.rb +2 -2
  251. data/lib/factpulse/models/facture_electronique_models_invoice_type_code.rb +54 -0
  252. data/lib/factpulse/models/facture_electronique_rest_api_schemas_chorus_pro_chorus_pro_credentials.rb +2 -2
  253. data/lib/factpulse/models/facture_electronique_rest_api_schemas_validation_validation_error_response.rb +168 -0
  254. data/lib/factpulse/models/field_status.rb +2 -2
  255. data/lib/factpulse/models/file_info.rb +2 -2
  256. data/lib/factpulse/models/files_info.rb +2 -2
  257. data/lib/factpulse/models/flow_direction.rb +2 -2
  258. data/lib/factpulse/models/flow_profile.rb +2 -2
  259. data/lib/factpulse/models/flow_summary.rb +2 -2
  260. data/lib/factpulse/models/flow_syntax.rb +2 -2
  261. data/lib/factpulse/models/flow_type.rb +2 -2
  262. data/lib/factpulse/models/generate_aggregated_report_response.rb +2 -2
  263. data/lib/factpulse/models/generate_cdar_response.rb +2 -2
  264. data/lib/factpulse/models/generate_certificate_request.rb +2 -2
  265. data/lib/factpulse/models/generate_certificate_response.rb +2 -2
  266. data/lib/factpulse/models/generate_e_reporting_response.rb +2 -2
  267. data/lib/factpulse/models/generation_success_result.rb +230 -0
  268. data/lib/factpulse/models/generation_task_status.rb +223 -0
  269. data/lib/factpulse/models/generation_task_status_result.rb +55 -0
  270. data/lib/factpulse/models/get_chorus_pro_id_request.rb +2 -2
  271. data/lib/factpulse/models/get_chorus_pro_id_response.rb +2 -2
  272. data/lib/factpulse/models/get_invoice_request.rb +2 -2
  273. data/lib/factpulse/models/get_invoice_response.rb +2 -2
  274. data/lib/factpulse/models/get_structure_request.rb +2 -2
  275. data/lib/factpulse/models/get_structure_response.rb +2 -2
  276. data/lib/factpulse/models/global_allowance_amount.rb +2 -2
  277. data/lib/factpulse/models/gross_unit_price.rb +2 -2
  278. data/lib/factpulse/models/http_validation_error.rb +2 -2
  279. data/lib/factpulse/models/incoming_invoice.rb +2 -2
  280. data/lib/factpulse/models/incoming_supplier.rb +2 -2
  281. data/lib/factpulse/models/invoice_format.rb +2 -2
  282. data/lib/factpulse/models/invoice_input.rb +3 -3
  283. data/lib/factpulse/models/invoice_lifecycle.rb +215 -0
  284. data/lib/factpulse/models/invoice_line.rb +2 -2
  285. data/lib/factpulse/models/invoice_line_allowance_amount.rb +2 -2
  286. data/lib/factpulse/models/invoice_note.rb +2 -2
  287. data/lib/factpulse/models/invoice_payment_input.rb +2 -2
  288. data/lib/factpulse/models/invoice_references.rb +2 -2
  289. data/lib/factpulse/models/invoice_status.rb +2 -2
  290. data/lib/factpulse/models/invoice_totals.rb +2 -2
  291. data/lib/factpulse/models/invoice_totals_prepayment.rb +2 -2
  292. data/lib/factpulse/models/invoice_type_code.rb +8 -19
  293. data/lib/factpulse/models/invoice_type_code_output.rb +2 -2
  294. data/lib/factpulse/models/invoicing_framework.rb +3 -20
  295. data/lib/factpulse/models/invoicing_framework_code.rb +2 -2
  296. data/lib/factpulse/models/issuer_role_code.rb +2 -2
  297. data/lib/factpulse/models/key_rotation_request.rb +211 -0
  298. data/lib/factpulse/models/key_rotation_response.rb +232 -0
  299. data/lib/factpulse/models/lifecycle_event.rb +300 -0
  300. data/lib/factpulse/models/lifecycle_response.rb +205 -0
  301. data/lib/factpulse/models/line_net_amount.rb +2 -2
  302. data/lib/factpulse/models/line_sub_type.rb +2 -2
  303. data/lib/factpulse/models/line_total_amount.rb +2 -2
  304. data/lib/factpulse/models/location_inner.rb +2 -2
  305. data/lib/factpulse/models/mandatory_note_schema.rb +2 -2
  306. data/lib/factpulse/models/manual_rate.rb +2 -2
  307. data/lib/factpulse/models/manual_vat_rate.rb +2 -2
  308. data/lib/factpulse/models/missing_field.rb +2 -2
  309. data/lib/factpulse/models/operation_nature.rb +2 -2
  310. data/lib/factpulse/models/output_format.rb +5 -3
  311. data/lib/factpulse/models/page_dimensions_schema.rb +2 -2
  312. data/lib/factpulse/models/parse_factur_x_response.rb +249 -0
  313. data/lib/factpulse/models/payee.rb +2 -2
  314. data/lib/factpulse/models/payment_amount_by_rate.rb +2 -2
  315. data/lib/factpulse/models/payment_card.rb +2 -2
  316. data/lib/factpulse/models/payment_means.rb +2 -2
  317. data/lib/factpulse/models/pdf_validation_result_api.rb +2 -2
  318. data/lib/factpulse/models/pdp_config_response.rb +13 -3
  319. data/lib/factpulse/models/pdp_config_update_request.rb +51 -7
  320. data/lib/factpulse/models/pdp_credentials.rb +2 -2
  321. data/lib/factpulse/models/percentage.rb +2 -2
  322. data/lib/factpulse/models/postal_address.rb +2 -2
  323. data/lib/factpulse/models/price_allowance_amount.rb +2 -2
  324. data/lib/factpulse/models/price_basis_quantity.rb +2 -2
  325. data/lib/factpulse/models/processing_options.rb +2 -2
  326. data/lib/factpulse/models/processing_rule.rb +2 -2
  327. data/lib/factpulse/models/product_characteristic.rb +2 -2
  328. data/lib/factpulse/models/product_classification.rb +2 -2
  329. data/lib/factpulse/models/quantity.rb +2 -2
  330. data/lib/factpulse/models/rate.rb +2 -2
  331. data/lib/factpulse/models/rate1.rb +2 -2
  332. data/lib/factpulse/models/reason_code_info.rb +2 -2
  333. data/lib/factpulse/models/reason_codes_response.rb +2 -2
  334. data/lib/factpulse/models/recipient.rb +2 -2
  335. data/lib/factpulse/models/recipient_input.rb +2 -2
  336. data/lib/factpulse/models/refusee_request.rb +2 -2
  337. data/lib/factpulse/models/report_issuer.rb +2 -2
  338. data/lib/factpulse/models/report_period.rb +2 -2
  339. data/lib/factpulse/models/report_sender.rb +2 -2
  340. data/lib/factpulse/models/rounding_amount.rb +2 -2
  341. data/lib/factpulse/models/schematron_validation_error.rb +2 -2
  342. data/lib/factpulse/models/scheme_id.rb +2 -2
  343. data/lib/factpulse/models/search_flow_request.rb +2 -2
  344. data/lib/factpulse/models/search_flow_response.rb +2 -2
  345. data/lib/factpulse/models/search_services_response.rb +2 -2
  346. data/lib/factpulse/models/search_structure_request.rb +2 -2
  347. data/lib/factpulse/models/search_structure_response.rb +2 -2
  348. data/lib/factpulse/models/secret_status.rb +26 -6
  349. data/lib/factpulse/models/sellercountry.rb +2 -2
  350. data/lib/factpulse/models/signature_info.rb +2 -2
  351. data/lib/factpulse/models/signature_info_api.rb +2 -2
  352. data/lib/factpulse/models/signature_parameters.rb +2 -2
  353. data/lib/factpulse/models/signature_success_result.rb +394 -0
  354. data/lib/factpulse/models/signature_task_status.rb +223 -0
  355. data/lib/factpulse/models/signature_task_status_result.rb +55 -0
  356. data/lib/factpulse/models/simplified_cdar_response.rb +2 -2
  357. data/lib/factpulse/models/simplified_invoice_data.rb +3 -3
  358. data/lib/factpulse/models/status_code_info.rb +2 -2
  359. data/lib/factpulse/models/status_codes_response.rb +2 -2
  360. data/lib/factpulse/models/structure_info.rb +2 -2
  361. data/lib/factpulse/models/structure_parameters.rb +2 -2
  362. data/lib/factpulse/models/structure_service.rb +2 -2
  363. data/lib/factpulse/models/submission_mode.rb +2 -2
  364. data/lib/factpulse/models/submit_aggregated_report_request.rb +2 -2
  365. data/lib/factpulse/models/submit_cdar_request.rb +2 -2
  366. data/lib/factpulse/models/submit_cdar_response.rb +2 -2
  367. data/lib/factpulse/models/submit_cdarxml_request.rb +2 -2
  368. data/lib/factpulse/models/submit_complete_invoice_request.rb +2 -2
  369. data/lib/factpulse/models/submit_complete_invoice_response.rb +33 -4
  370. data/lib/factpulse/models/submit_e_reporting_request.rb +2 -2
  371. data/lib/factpulse/models/submit_e_reporting_response.rb +2 -2
  372. data/lib/factpulse/models/submit_flow_request.rb +2 -2
  373. data/lib/factpulse/models/submit_flow_response.rb +2 -2
  374. data/lib/factpulse/models/submit_gross_amount.rb +2 -2
  375. data/lib/factpulse/models/submit_invoice_request.rb +2 -2
  376. data/lib/factpulse/models/submit_invoice_response.rb +2 -2
  377. data/lib/factpulse/models/submit_net_amount.rb +2 -2
  378. data/lib/factpulse/models/submit_vat_amount.rb +2 -2
  379. data/lib/factpulse/models/supplementary_attachment.rb +2 -2
  380. data/lib/factpulse/models/supplier.rb +4 -18
  381. data/lib/factpulse/models/task_error_result.rb +257 -0
  382. data/lib/factpulse/models/task_response.rb +2 -2
  383. data/lib/factpulse/models/tax_breakdown_input.rb +2 -2
  384. data/lib/factpulse/models/tax_due_date_type.rb +2 -2
  385. data/lib/factpulse/models/tax_representative.rb +2 -2
  386. data/lib/factpulse/models/taxable_amount.rb +2 -2
  387. data/lib/factpulse/models/taxableamount.rb +2 -2
  388. data/lib/factpulse/models/taxamount.rb +2 -2
  389. data/lib/factpulse/models/taxamount1.rb +2 -2
  390. data/lib/factpulse/models/taxamount2.rb +2 -2
  391. data/lib/factpulse/models/taxexclusiveamount.rb +2 -2
  392. data/lib/factpulse/models/taxexclusiveamount1.rb +2 -2
  393. data/lib/factpulse/models/total_gross_amount.rb +2 -2
  394. data/lib/factpulse/models/total_net_amount.rb +2 -2
  395. data/lib/factpulse/models/total_vat_amount.rb +2 -2
  396. data/lib/factpulse/models/transaction_category.rb +2 -2
  397. data/lib/factpulse/models/transmission_type_code.rb +2 -2
  398. data/lib/factpulse/models/unit_net_price.rb +2 -2
  399. data/lib/factpulse/models/unit_of_measure.rb +17 -3
  400. data/lib/factpulse/models/validate_cdar_request.rb +2 -2
  401. data/lib/factpulse/models/validate_cdar_response.rb +4 -4
  402. data/lib/factpulse/models/validate_e_reporting_request.rb +2 -2
  403. data/lib/factpulse/models/validate_e_reporting_response.rb +2 -2
  404. data/lib/factpulse/models/validation_error.rb +2 -2
  405. data/lib/factpulse/models/validation_error_detail.rb +2 -2
  406. data/lib/factpulse/models/validation_error_response.rb +69 -22
  407. data/lib/factpulse/models/validation_info.rb +2 -2
  408. data/lib/factpulse/models/validation_success_response.rb +2 -2
  409. data/lib/factpulse/models/validation_success_task_result.rb +210 -0
  410. data/lib/factpulse/models/validation_task_status.rb +223 -0
  411. data/lib/factpulse/models/validation_task_status_result.rb +55 -0
  412. data/lib/factpulse/models/vat_accounting_code.rb +2 -2
  413. data/lib/factpulse/models/vat_amount.rb +2 -2
  414. data/lib/factpulse/models/vat_category.rb +2 -2
  415. data/lib/factpulse/models/vat_line.rb +2 -2
  416. data/lib/factpulse/models/vat_point_date_code.rb +2 -2
  417. data/lib/factpulse/models/vat_rate.rb +2 -2
  418. data/lib/factpulse/models/vatex_code_info.rb +247 -0
  419. data/lib/factpulse/models/vatex_codes_response.rb +204 -0
  420. data/lib/factpulse/models/verification_success_response.rb +2 -2
  421. data/lib/factpulse/models/verification_success_task_result.rb +210 -0
  422. data/lib/factpulse/models/verification_typed_task_status.rb +223 -0
  423. data/lib/factpulse/models/verification_typed_task_status_result.rb +55 -0
  424. data/lib/factpulse/models/verified_field_schema.rb +2 -2
  425. data/lib/factpulse/models/webhook_secret_delete_response.rb +193 -0
  426. data/lib/factpulse/models/webhook_secret_generate_response.rb +247 -0
  427. data/lib/factpulse/models/webhook_secret_status_response.rb +176 -0
  428. data/lib/factpulse/version.rb +3 -3
  429. data/lib/factpulse.rb +40 -5
  430. metadata +133 -63
  431. data/docs/FactureElectroniqueRestApiSchemasCdarValidationErrorResponse.md +0 -24
  432. data/docs/FactureElectroniqueRestApiSchemasEreportingInvoiceTypeCode.md +0 -15
  433. data/lib/factpulse/models/facture_electronique_rest_api_schemas_cdar_validation_error_response.rb +0 -215
  434. data/lib/factpulse/models/facture_electronique_rest_api_schemas_ereporting_invoice_type_code.rb +0 -43
@@ -0,0 +1,79 @@
1
+ # FactPulse::GenerationTaskStatusResult
2
+
3
+ ## Class instance methods
4
+
5
+ ### `openapi_one_of`
6
+
7
+ Returns the list of classes defined in oneOf.
8
+
9
+ #### Example
10
+
11
+ ```ruby
12
+ require 'factpulse'
13
+
14
+ FactPulse::GenerationTaskStatusResult.openapi_one_of
15
+ # =>
16
+ # [
17
+ # :'GenerationSuccessResult',
18
+ # :'TaskErrorResult'
19
+ # ]
20
+ ```
21
+
22
+ ### `openapi_discriminator_name`
23
+
24
+ Returns the discriminator's property name.
25
+
26
+ #### Example
27
+
28
+ ```ruby
29
+ require 'factpulse'
30
+
31
+ FactPulse::GenerationTaskStatusResult.openapi_discriminator_name
32
+ # => :'status'
33
+ ```
34
+
35
+ ### `openapi_discriminator_name`
36
+
37
+ Returns the discriminator's mapping.
38
+
39
+ #### Example
40
+
41
+ ```ruby
42
+ require 'factpulse'
43
+
44
+ FactPulse::GenerationTaskStatusResult.openapi_discriminator_mapping
45
+ # =>
46
+ # {
47
+ # :'ERROR' => :'TaskErrorResult',
48
+ # :'SUCCESS' => :'GenerationSuccessResult'
49
+ # }
50
+ ```
51
+
52
+ ### build
53
+
54
+ Find the appropriate object from the `openapi_one_of` list and casts the data into it.
55
+
56
+ #### Example
57
+
58
+ ```ruby
59
+ require 'factpulse'
60
+
61
+ FactPulse::GenerationTaskStatusResult.build(data)
62
+ # => #<GenerationSuccessResult:0x00007fdd4aab02a0>
63
+
64
+ FactPulse::GenerationTaskStatusResult.build(data_that_doesnt_match)
65
+ # => nil
66
+ ```
67
+
68
+ #### Parameters
69
+
70
+ | Name | Type | Description |
71
+ | ---- | ---- | ----------- |
72
+ | **data** | **Mixed** | data to be matched against the list of oneOf items |
73
+
74
+ #### Return type
75
+
76
+ - `GenerationSuccessResult`
77
+ - `TaskErrorResult`
78
+ - `nil` (if no type matches)
79
+
data/docs/HealthApi.md CHANGED
@@ -5,8 +5,6 @@ All URIs are relative to *https://factpulse.fr*
5
5
  | Method | HTTP request | Description |
6
6
  | ------ | ------------ | ----------- |
7
7
  | [**get_user_info_api_v1_me_get**](HealthApi.md#get_user_info_api_v1_me_get) | **GET** /api/v1/me | Get current user information |
8
- | [**healthcheck_healthcheck_get**](HealthApi.md#healthcheck_healthcheck_get) | **GET** /healthcheck | Docker healthcheck endpoint |
9
- | [**root_get**](HealthApi.md#root_get) | **GET** / | Check API status |
10
8
 
11
9
 
12
10
  ## get_user_info_api_v1_me_get
@@ -24,6 +22,11 @@ require 'time'
24
22
  require 'factpulse'
25
23
  # setup authorization
26
24
  FactPulse.configure do |config|
25
+ # Configure API key authorization: APIKeyHeader
26
+ config.api_key['X-API-Key'] = 'YOUR API KEY'
27
+ # Uncomment the following line to set a prefix for the API key, e.g. 'Bearer' (defaults to nil)
28
+ # config.api_key_prefix['X-API-Key'] = 'Bearer'
29
+
27
30
  # Configure Bearer authorization: HTTPBearer
28
31
  config.access_token = 'YOUR_BEARER_TOKEN'
29
32
  end
@@ -67,129 +70,7 @@ This endpoint does not need any parameter.
67
70
 
68
71
  ### Authorization
69
72
 
70
- [HTTPBearer](../README.md#HTTPBearer)
71
-
72
- ### HTTP request headers
73
-
74
- - **Content-Type**: Not defined
75
- - **Accept**: application/json
76
-
77
-
78
- ## healthcheck_healthcheck_get
79
-
80
- > Object healthcheck_healthcheck_get
81
-
82
- Docker healthcheck endpoint
83
-
84
- Healthcheck endpoint for Docker and load balancers. Useful for: - Docker healthcheck - Kubernetes liveness/readiness probes - Load balancers (Nginx, HAProxy) - Availability monitoring - Zero downtime deployment Returns a 200 code if the API is operational.
85
-
86
- ### Examples
87
-
88
- ```ruby
89
- require 'time'
90
- require 'factpulse'
91
-
92
- api_instance = FactPulse::HealthApi.new
93
-
94
- begin
95
- # Docker healthcheck endpoint
96
- result = api_instance.healthcheck_healthcheck_get
97
- p result
98
- rescue FactPulse::ApiError => e
99
- puts "Error when calling HealthApi->healthcheck_healthcheck_get: #{e}"
100
- end
101
- ```
102
-
103
- #### Using the healthcheck_healthcheck_get_with_http_info variant
104
-
105
- This returns an Array which contains the response data, status code and headers.
106
-
107
- > <Array(Object, Integer, Hash)> healthcheck_healthcheck_get_with_http_info
108
-
109
- ```ruby
110
- begin
111
- # Docker healthcheck endpoint
112
- data, status_code, headers = api_instance.healthcheck_healthcheck_get_with_http_info
113
- p status_code # => 2xx
114
- p headers # => { ... }
115
- p data # => Object
116
- rescue FactPulse::ApiError => e
117
- puts "Error when calling HealthApi->healthcheck_healthcheck_get_with_http_info: #{e}"
118
- end
119
- ```
120
-
121
- ### Parameters
122
-
123
- This endpoint does not need any parameter.
124
-
125
- ### Return type
126
-
127
- **Object**
128
-
129
- ### Authorization
130
-
131
- No authorization required
132
-
133
- ### HTTP request headers
134
-
135
- - **Content-Type**: Not defined
136
- - **Accept**: application/json
137
-
138
-
139
- ## root_get
140
-
141
- > Object root_get
142
-
143
- Check API status
144
-
145
- Health check endpoint to verify the API is responding. Useful for: - Availability monitoring - Integration tests - Load balancers
146
-
147
- ### Examples
148
-
149
- ```ruby
150
- require 'time'
151
- require 'factpulse'
152
-
153
- api_instance = FactPulse::HealthApi.new
154
-
155
- begin
156
- # Check API status
157
- result = api_instance.root_get
158
- p result
159
- rescue FactPulse::ApiError => e
160
- puts "Error when calling HealthApi->root_get: #{e}"
161
- end
162
- ```
163
-
164
- #### Using the root_get_with_http_info variant
165
-
166
- This returns an Array which contains the response data, status code and headers.
167
-
168
- > <Array(Object, Integer, Hash)> root_get_with_http_info
169
-
170
- ```ruby
171
- begin
172
- # Check API status
173
- data, status_code, headers = api_instance.root_get_with_http_info
174
- p status_code # => 2xx
175
- p headers # => { ... }
176
- p data # => Object
177
- rescue FactPulse::ApiError => e
178
- puts "Error when calling HealthApi->root_get_with_http_info: #{e}"
179
- end
180
- ```
181
-
182
- ### Parameters
183
-
184
- This endpoint does not need any parameter.
185
-
186
- ### Return type
187
-
188
- **Object**
189
-
190
- ### Authorization
191
-
192
- No authorization required
73
+ [APIKeyHeader](../README.md#APIKeyHeader), [HTTPBearer](../README.md#HTTPBearer)
193
74
 
194
75
  ### HTTP request headers
195
76
 
@@ -1,21 +1,21 @@
1
- # FactPulse::FacturXGenerationApi
1
+ # FactPulse::InvoiceGenerationApi
2
2
 
3
3
  All URIs are relative to *https://factpulse.fr*
4
4
 
5
5
  | Method | HTTP request | Description |
6
6
  | ------ | ------------ | ----------- |
7
- | [**generate_invoice_api_v1_processing_generate_invoice_post**](FacturXGenerationApi.md#generate_invoice_api_v1_processing_generate_invoice_post) | **POST** /api/v1/processing/generate-invoice | Generate a Factur-X invoice |
8
- | [**submit_complete_invoice_api_v1_processing_invoices_submit_complete_post**](FacturXGenerationApi.md#submit_complete_invoice_api_v1_processing_invoices_submit_complete_post) | **POST** /api/v1/processing/invoices/submit-complete | Submit a complete invoice (generation + signature + submission) |
9
- | [**submit_complete_invoice_async_api_v1_processing_invoices_submit_complete_async_post**](FacturXGenerationApi.md#submit_complete_invoice_async_api_v1_processing_invoices_submit_complete_async_post) | **POST** /api/v1/processing/invoices/submit-complete-async | Submit a complete invoice (asynchronous with Celery) |
7
+ | [**generate_invoice_api_v1_processing_generate_invoice_post**](InvoiceGenerationApi.md#generate_invoice_api_v1_processing_generate_invoice_post) | **POST** /api/v1/processing/generate-invoice | Generate an electronic invoice (CII / UBL / Factur-X PDF) |
8
+ | [**submit_complete_invoice_api_v1_processing_invoices_submit_complete_post**](InvoiceGenerationApi.md#submit_complete_invoice_api_v1_processing_invoices_submit_complete_post) | **POST** /api/v1/processing/invoices/submit-complete | Submit a complete invoice (generation + signature + submission) |
9
+ | [**submit_complete_invoice_async_api_v1_processing_invoices_submit_complete_async_post**](InvoiceGenerationApi.md#submit_complete_invoice_async_api_v1_processing_invoices_submit_complete_async_post) | **POST** /api/v1/processing/invoices/submit-complete-async | Submit a complete invoice (asynchronous with Celery) |
10
10
 
11
11
 
12
12
  ## generate_invoice_api_v1_processing_generate_invoice_post
13
13
 
14
14
  > <TaskResponse> generate_invoice_api_v1_processing_generate_invoice_post(invoice_data, opts)
15
15
 
16
- Generate a Factur-X invoice
16
+ Generate an electronic invoice (CII / UBL / Factur-X PDF)
17
17
 
18
- Generates an electronic invoice in Factur-X format compliant with European standards. ## Applied Standards - **Factur-X** (France): FNFE-MPE standard (Forum National de la Facture Électronique) - **ZUGFeRD** (Germany): German format compatible with Factur-X - **EN 16931**: European semantic standard for electronic invoicing - **ISO 19005-3** (PDF/A-3): Long-term electronic archiving - **Cross Industry Invoice (CII)**: UN/CEFACT XML syntax ## 🆕 New: Simplified format with auto-enrichment (P0.1) You can now create an invoice by providing only: - An invoice number - A supplier SIRET + **IBAN** (required) - A recipient SIRET - Invoice lines (description, quantity, net price) **Simplified format example**: ```json { \"number\": \"FACT-2025-001\", \"supplier\": { \"siret\": \"92019522900017\", \"iban\": \"FR7630001007941234567890185\" }, \"recipient\": {\"siret\": \"35600000000048\"}, \"lines\": [ {\"description\": \"Service\", \"quantity\": 10, \"unitPrice\": 100.00, \"vatRate\": 20.0} ] } ``` **⚠️ Required fields (simplified format)**: - `number`: Unique invoice number - `supplier.siret`: Supplier's SIRET (14 digits) - `supplier.iban`: Bank account IBAN (no public API to retrieve it) - `recipient.siret`: Recipient's SIRET - `lines[]`: At least one invoice line **What happens automatically with `auto_enrich=True`**: - ✅ Name enrichment from Chorus Pro API - ✅ Address enrichment from Business Search API (free, public) - ✅ Automatic intra-EU VAT calculation (FR + key + SIREN) - ✅ Chorus Pro ID retrieval for electronic invoicing - ✅ Net/VAT/Gross totals calculation - ✅ Date generation (today + 30-day due date) - ✅ Multi-rate VAT handling **Supported identifiers**: - SIRET (14 digits): Specific establishment ⭐ Recommended - SIREN (9 digits): Company (auto-selection of headquarters) - Special types: UE_HORS_FRANCE, RIDET, TAHITI, etc. ## Checks performed during generation ### 1. Data validation (Pydantic) - Data types (amounts as Decimal, ISO 8601 dates) - Formats (14-digit SIRET, 9-digit SIREN, IBAN) - Required fields per profile - Amount consistency (Net + VAT = Gross) ### 2. CII-compliant XML generation - Serialization according to Cross Industry Invoice XSD schema - Correct UN/CEFACT namespaces - Hierarchical structure respected - UTF-8 encoding without BOM ### 3. Schematron validation - Business rules for selected profile (MINIMUM, BASIC, EN16931, EXTENDED) - Element cardinality (required, optional, repeatable) - Calculation rules (totals, VAT, discounts) - European EN 16931 compliance ### 4. PDF/A-3 conversion (if output_format='pdf') - Source PDF conversion to PDF/A-3 via Ghostscript - Factur-X XML embedding in PDF - Compliant XMP metadata - ICC sRGB color profile - Removal of forbidden elements (JavaScript, forms) ## How it works 1. **Submission**: Invoice is queued in Celery for asynchronous processing 2. **Immediate return**: You receive a `task_id` (HTTP 202 Accepted) 3. **Tracking**: Use the `/tasks/{task_id}/status` endpoint to track progress ## Webhook notification (recommended) Instead of polling, you can receive a webhook notification when the task completes: ``` callback_url=https://your-server.com/webhook ``` The webhook will POST a JSON payload with: - `event_type`: `generation.completed` or `generation.failed` - `data.task_id`: The Celery task ID - `data.content_b64` or `data.xml_content`: The generated content - `X-Webhook-Signature` header for HMAC verification See `/docs/WEBHOOKS.md` for full documentation. ## Output formats - **xml**: Generates only Factur-X XML (recommended for testing) - **pdf**: Generates PDF/A-3 with embedded XML (requires `source_pdf`) ## Factur-X profiles - **MINIMUM**: Minimal data (simplified invoice) - **BASIC**: Basic information (SMEs) - **EN16931**: European standard (recommended, compliant with directive 2014/55/EU) - **EXTENDED**: All available data (large accounts) ## What you get After successful processing (status `completed`): - **XML only**: Base64-encoded Factur-X compliant XML file - **PDF/A-3**: PDF with embedded XML, ready for sending/archiving - **Metadata**: Profile, Factur-X version, file size - **Validation**: Schematron compliance confirmation ## Validation Data is automatically validated according to detected format. On error, a 422 status is returned with invalid field details.
18
+ Generates an electronic invoice compliant with European standards. Supports **two XML syntaxes** defined by EN 16931: - **CII** (Cross-Industry Invoice, UN/CEFACT) the Factur-X / ZUGFeRD syntax - **UBL 2.1** (Universal Business Language, OASIS) the Peppol BIS Billing syntax ## Applied Standards - **EN 16931**: European semantic standard for electronic invoicing - **Factur-X / ZUGFeRD** (CII syntax): Franco-German standard - **UBL 2.1** (OASIS): International standard, used by Peppol - **ISO 19005-3** (PDF/A-3): Long-term electronic archiving (PDF output only) - **Schematron**: Business rules validation (EN16931-CII, EN16931-UBL, BR-FR) ## 🆕 New: Simplified format with auto-enrichment (P0.1) You can now create an invoice by providing only: - An invoice number - A supplier SIRET + **IBAN** (required) - A recipient SIRET - Invoice lines (description, quantity, net price) **Simplified format example**: ```json { \"number\": \"FACT-2025-001\", \"supplier\": { \"siret\": \"92019522900017\", \"iban\": \"FR7630001007941234567890185\" }, \"recipient\": {\"siret\": \"35600000000048\"}, \"lines\": [ {\"description\": \"Service\", \"quantity\": 10, \"unitPrice\": 100.00, \"vatRate\": 20.0} ] } ``` **⚠️ Required fields (simplified format)**: - `number`: Unique invoice number - `supplier.siret`: Supplier's SIRET (14 digits) - `supplier.iban`: Bank account IBAN (no public API to retrieve it) - `recipient.siret`: Recipient's SIRET - `lines[]`: At least one invoice line **What happens automatically with `auto_enrich=True`**: - ✅ Name enrichment from Chorus Pro API - ✅ Address enrichment from Business Search API (free, public) - ✅ Automatic intra-EU VAT calculation (FR + key + SIREN) - ✅ Chorus Pro ID retrieval for electronic invoicing - ✅ Net/VAT/Gross totals calculation - ✅ Date generation (today + 30-day due date) - ✅ Multi-rate VAT handling **Supported identifiers**: - SIRET (14 digits): Specific establishment ⭐ Recommended - SIREN (9 digits): Company (auto-selection of headquarters) - Special types: UE_HORS_FRANCE, RIDET, TAHITI, etc. ## Checks performed during generation ### 1. Data validation (Pydantic) - Data types (amounts as Decimal, ISO 8601 dates) - Formats (14-digit SIRET, 9-digit SIREN, IBAN) - Required fields per profile - Amount consistency (Net + VAT = Gross) ### 2. CII-compliant XML generation - Serialization according to Cross Industry Invoice XSD schema - Correct UN/CEFACT namespaces - Hierarchical structure respected - UTF-8 encoding without BOM ### 3. Schematron validation - Business rules for selected profile (MINIMUM, BASIC, EN16931, EXTENDED) - Element cardinality (required, optional, repeatable) - Calculation rules (totals, VAT, discounts) - European EN 16931 compliance ### 4. PDF/A-3 conversion (if output_format='pdf') - Source PDF conversion to PDF/A-3 via Ghostscript - Factur-X XML embedding in PDF - Compliant XMP metadata - ICC sRGB color profile - Removal of forbidden elements (JavaScript, forms) ## How it works 1. **Submission**: Invoice is queued in Celery for asynchronous processing 2. **Immediate return**: You receive a `task_id` (HTTP 202 Accepted) 3. **Tracking**: Use the `/tasks/{task_id}/status` endpoint to track progress ## Webhook notification (recommended) Instead of polling, you can receive a webhook notification when the task completes: ``` callback_url=https://your-server.com/webhook ``` The webhook will POST a JSON payload with: - `event_type`: `generation.completed` or `generation.failed` - `data.task_id`: The Celery task ID - `data.content_b64` or `data.xml_content`: The generated content - `X-Webhook-Signature` header for HMAC verification See `/docs/WEBHOOKS.md` for full documentation. ## Output formats - **xml** / **cii**: CII XML (Factur-X syntax, UN/CEFACT) - **ubl**: UBL 2.1 XML (OASIS, Peppol BIS Billing 3.0) - **pdf**: Factur-X PDF/A-3 with embedded CII XML (requires `source_pdf`) ## Factur-X profiles (CII only) - **MINIMUM**: Minimal data (simplified invoice) - **BASIC**: Basic information (SMEs) - **EN16931**: European standard (recommended, compliant with directive 2014/55/EU) - **EXTENDED**: All available data (large accounts) When `output_format=ubl`, the profile parameter is ignored (UBL always uses EN16931). ## What you get After successful processing (status `completed`): - **XML only**: Base64-encoded Factur-X compliant XML file - **PDF/A-3**: PDF with embedded XML, ready for sending/archiving - **Metadata**: Profile, Factur-X version, file size - **Validation**: Schematron compliance confirmation ## Validation Data is automatically validated according to detected format. On error, a 422 status is returned with invalid field details.
19
19
 
20
20
  ### Examples
21
21
 
@@ -24,15 +24,20 @@ require 'time'
24
24
  require 'factpulse'
25
25
  # setup authorization
26
26
  FactPulse.configure do |config|
27
+ # Configure API key authorization: APIKeyHeader
28
+ config.api_key['X-API-Key'] = 'YOUR API KEY'
29
+ # Uncomment the following line to set a prefix for the API key, e.g. 'Bearer' (defaults to nil)
30
+ # config.api_key_prefix['X-API-Key'] = 'Bearer'
31
+
27
32
  # Configure Bearer authorization: HTTPBearer
28
33
  config.access_token = 'YOUR_BEARER_TOKEN'
29
34
  end
30
35
 
31
- api_instance = FactPulse::FacturXGenerationApi.new
36
+ api_instance = FactPulse::InvoiceGenerationApi.new
32
37
  invoice_data = 'invoice_data_example' # String | Invoice data in JSON format. Two formats accepted: 1. **Classic format**: Complete FacturXInvoice structure (all fields) 2. **Simplified format** (🆕 P0.1): Minimal structure with auto-enrichment Format is detected automatically!
33
38
  opts = {
34
- profile: FactPulse::APIProfile::MINIMUM, # APIProfile | Factur-X profile: MINIMUM, BASIC, EN16931 or EXTENDED.
35
- output_format: FactPulse::OutputFormat::XML, # OutputFormat | Output format: 'xml' (XML only) or 'pdf' (Factur-X PDF with embedded XML).
39
+ profile: FactPulse::APIProfile::MINIMUM, # APIProfile | Factur-X/CII profile: MINIMUM, BASIC, EN16931 or EXTENDED. Ignored when output_format='ubl' (always EN16931).
40
+ output_format: FactPulse::OutputFormat::XML, # OutputFormat | Output format: 'xml' or 'cii' (CII/Factur-X XML), 'ubl' (UBL 2.1 XML), 'pdf' (Factur-X PDF/A-3).
36
41
  auto_enrich: true, # Boolean | 🆕 Enable auto-enrichment from SIRET/SIREN (simplified format only)
37
42
  source_pdf: File.new('/path/to/some/file'), # File |
38
43
  callback_url: 'callback_url_example', # String |
@@ -41,11 +46,11 @@ opts = {
41
46
  }
42
47
 
43
48
  begin
44
- # Generate a Factur-X invoice
49
+ # Generate an electronic invoice (CII / UBL / Factur-X PDF)
45
50
  result = api_instance.generate_invoice_api_v1_processing_generate_invoice_post(invoice_data, opts)
46
51
  p result
47
52
  rescue FactPulse::ApiError => e
48
- puts "Error when calling FacturXGenerationApi->generate_invoice_api_v1_processing_generate_invoice_post: #{e}"
53
+ puts "Error when calling InvoiceGenerationApi->generate_invoice_api_v1_processing_generate_invoice_post: #{e}"
49
54
  end
50
55
  ```
51
56
 
@@ -57,13 +62,13 @@ This returns an Array which contains the response data, status code and headers.
57
62
 
58
63
  ```ruby
59
64
  begin
60
- # Generate a Factur-X invoice
65
+ # Generate an electronic invoice (CII / UBL / Factur-X PDF)
61
66
  data, status_code, headers = api_instance.generate_invoice_api_v1_processing_generate_invoice_post_with_http_info(invoice_data, opts)
62
67
  p status_code # => 2xx
63
68
  p headers # => { ... }
64
69
  p data # => <TaskResponse>
65
70
  rescue FactPulse::ApiError => e
66
- puts "Error when calling FacturXGenerationApi->generate_invoice_api_v1_processing_generate_invoice_post_with_http_info: #{e}"
71
+ puts "Error when calling InvoiceGenerationApi->generate_invoice_api_v1_processing_generate_invoice_post_with_http_info: #{e}"
67
72
  end
68
73
  ```
69
74
 
@@ -72,8 +77,8 @@ end
72
77
  | Name | Type | Description | Notes |
73
78
  | ---- | ---- | ----------- | ----- |
74
79
  | **invoice_data** | **String** | Invoice data in JSON format. Two formats accepted: 1. **Classic format**: Complete FacturXInvoice structure (all fields) 2. **Simplified format** (🆕 P0.1): Minimal structure with auto-enrichment Format is detected automatically! | |
75
- | **profile** | [**APIProfile**](APIProfile.md) | Factur-X profile: MINIMUM, BASIC, EN16931 or EXTENDED. | [optional] |
76
- | **output_format** | [**OutputFormat**](OutputFormat.md) | Output format: &#39;xml&#39; (XML only) or &#39;pdf&#39; (Factur-X PDF with embedded XML). | [optional] |
80
+ | **profile** | [**APIProfile**](APIProfile.md) | Factur-X/CII profile: MINIMUM, BASIC, EN16931 or EXTENDED. Ignored when output_format&#x3D;&#39;ubl&#39; (always EN16931). | [optional] |
81
+ | **output_format** | [**OutputFormat**](OutputFormat.md) | Output format: &#39;xml&#39; or &#39;cii&#39; (CII/Factur-X XML), &#39;ubl&#39; (UBL 2.1 XML), &#39;pdf&#39; (Factur-X PDF/A-3). | [optional] |
77
82
  | **auto_enrich** | **Boolean** | 🆕 Enable auto-enrichment from SIRET/SIREN (simplified format only) | [optional][default to true] |
78
83
  | **source_pdf** | **File** | | [optional] |
79
84
  | **callback_url** | **String** | | [optional] |
@@ -86,7 +91,7 @@ end
86
91
 
87
92
  ### Authorization
88
93
 
89
- [HTTPBearer](../README.md#HTTPBearer)
94
+ [APIKeyHeader](../README.md#APIKeyHeader), [HTTPBearer](../README.md#HTTPBearer)
90
95
 
91
96
  ### HTTP request headers
92
97
 
@@ -109,11 +114,16 @@ require 'time'
109
114
  require 'factpulse'
110
115
  # setup authorization
111
116
  FactPulse.configure do |config|
117
+ # Configure API key authorization: APIKeyHeader
118
+ config.api_key['X-API-Key'] = 'YOUR API KEY'
119
+ # Uncomment the following line to set a prefix for the API key, e.g. 'Bearer' (defaults to nil)
120
+ # config.api_key_prefix['X-API-Key'] = 'Bearer'
121
+
112
122
  # Configure Bearer authorization: HTTPBearer
113
123
  config.access_token = 'YOUR_BEARER_TOKEN'
114
124
  end
115
125
 
116
- api_instance = FactPulse::FacturXGenerationApi.new
126
+ api_instance = FactPulse::InvoiceGenerationApi.new
117
127
  submit_complete_invoice_request = FactPulse::SubmitCompleteInvoiceRequest.new({invoice_data: FactPulse::SimplifiedInvoiceData.new({number: 'number_example', supplier: { key: 3.56}, recipient: { key: 3.56}, lines: [{ key: 3.56}]}), source_pdf: 'source_pdf_example', destination: FactPulse::AFNORDestination.new}) # SubmitCompleteInvoiceRequest |
118
128
 
119
129
  begin
@@ -121,7 +131,7 @@ begin
121
131
  result = api_instance.submit_complete_invoice_api_v1_processing_invoices_submit_complete_post(submit_complete_invoice_request)
122
132
  p result
123
133
  rescue FactPulse::ApiError => e
124
- puts "Error when calling FacturXGenerationApi->submit_complete_invoice_api_v1_processing_invoices_submit_complete_post: #{e}"
134
+ puts "Error when calling InvoiceGenerationApi->submit_complete_invoice_api_v1_processing_invoices_submit_complete_post: #{e}"
125
135
  end
126
136
  ```
127
137
 
@@ -139,7 +149,7 @@ begin
139
149
  p headers # => { ... }
140
150
  p data # => <SubmitCompleteInvoiceResponse>
141
151
  rescue FactPulse::ApiError => e
142
- puts "Error when calling FacturXGenerationApi->submit_complete_invoice_api_v1_processing_invoices_submit_complete_post_with_http_info: #{e}"
152
+ puts "Error when calling InvoiceGenerationApi->submit_complete_invoice_api_v1_processing_invoices_submit_complete_post_with_http_info: #{e}"
143
153
  end
144
154
  ```
145
155
 
@@ -155,7 +165,7 @@ end
155
165
 
156
166
  ### Authorization
157
167
 
158
- [HTTPBearer](../README.md#HTTPBearer)
168
+ [APIKeyHeader](../README.md#APIKeyHeader), [HTTPBearer](../README.md#HTTPBearer)
159
169
 
160
170
  ### HTTP request headers
161
171
 
@@ -178,11 +188,16 @@ require 'time'
178
188
  require 'factpulse'
179
189
  # setup authorization
180
190
  FactPulse.configure do |config|
191
+ # Configure API key authorization: APIKeyHeader
192
+ config.api_key['X-API-Key'] = 'YOUR API KEY'
193
+ # Uncomment the following line to set a prefix for the API key, e.g. 'Bearer' (defaults to nil)
194
+ # config.api_key_prefix['X-API-Key'] = 'Bearer'
195
+
181
196
  # Configure Bearer authorization: HTTPBearer
182
197
  config.access_token = 'YOUR_BEARER_TOKEN'
183
198
  end
184
199
 
185
- api_instance = FactPulse::FacturXGenerationApi.new
200
+ api_instance = FactPulse::InvoiceGenerationApi.new
186
201
  submit_complete_invoice_request = FactPulse::SubmitCompleteInvoiceRequest.new({invoice_data: FactPulse::SimplifiedInvoiceData.new({number: 'number_example', supplier: { key: 3.56}, recipient: { key: 3.56}, lines: [{ key: 3.56}]}), source_pdf: 'source_pdf_example', destination: FactPulse::AFNORDestination.new}) # SubmitCompleteInvoiceRequest |
187
202
  opts = {
188
203
  callback_url: 'callback_url_example', # String | Webhook URL for async notification when submission completes.
@@ -194,7 +209,7 @@ begin
194
209
  result = api_instance.submit_complete_invoice_async_api_v1_processing_invoices_submit_complete_async_post(submit_complete_invoice_request, opts)
195
210
  p result
196
211
  rescue FactPulse::ApiError => e
197
- puts "Error when calling FacturXGenerationApi->submit_complete_invoice_async_api_v1_processing_invoices_submit_complete_async_post: #{e}"
212
+ puts "Error when calling InvoiceGenerationApi->submit_complete_invoice_async_api_v1_processing_invoices_submit_complete_async_post: #{e}"
198
213
  end
199
214
  ```
200
215
 
@@ -212,7 +227,7 @@ begin
212
227
  p headers # => { ... }
213
228
  p data # => <TaskResponse>
214
229
  rescue FactPulse::ApiError => e
215
- puts "Error when calling FacturXGenerationApi->submit_complete_invoice_async_api_v1_processing_invoices_submit_complete_async_post_with_http_info: #{e}"
230
+ puts "Error when calling InvoiceGenerationApi->submit_complete_invoice_async_api_v1_processing_invoices_submit_complete_async_post_with_http_info: #{e}"
216
231
  end
217
232
  ```
218
233
 
@@ -230,7 +245,7 @@ end
230
245
 
231
246
  ### Authorization
232
247
 
233
- [HTTPBearer](../README.md#HTTPBearer)
248
+ [APIKeyHeader](../README.md#APIKeyHeader), [HTTPBearer](../README.md#HTTPBearer)
234
249
 
235
250
  ### HTTP request headers
236
251
 
data/docs/InvoiceInput.md CHANGED
@@ -6,7 +6,7 @@
6
6
  | ---- | ---- | ----------- | ----- |
7
7
  | **invoice_id** | **String** | Invoice identifier | |
8
8
  | **issue_date** | **Date** | Invoice issue date | |
9
- | **type_code** | [**FactureElectroniqueRestApiSchemasEreportingInvoiceTypeCode**](FactureElectroniqueRestApiSchemasEreportingInvoiceTypeCode.md) | Invoice type code | [optional] |
9
+ | **type_code** | [**InvoiceTypeCode**](InvoiceTypeCode.md) | Invoice type code | [optional] |
10
10
  | **currency** | [**Currency**](Currency.md) | | [optional] |
11
11
  | **due_date** | **Date** | | [optional] |
12
12
  | **seller_id** | **String** | | [optional] |
@@ -0,0 +1,24 @@
1
+ # FactPulse::InvoiceLifecycle
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **seller_id** | **String** | | [optional] |
8
+ | **invoice_id** | **String** | Reference de la facture (IssuerAssignedID du CDAR) | |
9
+ | **events** | [**Array&lt;LifecycleEvent&gt;**](LifecycleEvent.md) | Evenements de cycle de vie tries chronologiquement | [optional] |
10
+ | **total_events** | **Integer** | Nombre total d&#39;evenements | |
11
+
12
+ ## Example
13
+
14
+ ```ruby
15
+ require 'factpulse'
16
+
17
+ instance = FactPulse::InvoiceLifecycle.new(
18
+ seller_id: null,
19
+ invoice_id: null,
20
+ events: null,
21
+ total_events: null
22
+ )
23
+ ```
24
+
@@ -4,7 +4,7 @@
4
4
 
5
5
  | Name | Type | Description | Notes |
6
6
  | ---- | ---- | ----------- | ----- |
7
- | **invoicing_framework_code** | [**InvoicingFrameworkCode**](InvoicingFrameworkCode.md) | Chorus Pro framework code (A1, A2, A9, A12) | |
7
+ | **invoicing_framework_code** | [**InvoicingFrameworkCode**](InvoicingFrameworkCode.md) | | [optional] |
8
8
  | **operation_nature** | [**OperationNature**](OperationNature.md) | | [optional] |
9
9
  | **approver_service_code** | **String** | | [optional] |
10
10
  | **approver_structure_code** | **String** | | [optional] |
@@ -0,0 +1,20 @@
1
+ # FactPulse::KeyRotationRequest
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **old_key** | **String** | Current encryption key (base64-encoded AES-256) | |
8
+ | **new_key** | **String** | New encryption key (base64-encoded AES-256) | |
9
+
10
+ ## Example
11
+
12
+ ```ruby
13
+ require 'factpulse'
14
+
15
+ instance = FactPulse::KeyRotationRequest.new(
16
+ old_key: null,
17
+ new_key: null
18
+ )
19
+ ```
20
+
@@ -0,0 +1,24 @@
1
+ # FactPulse::KeyRotationResponse
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **success** | **Boolean** | Whether rotation was successful | |
8
+ | **message** | **String** | Result message | |
9
+ | **rotated_count** | **Integer** | Number of secrets that were rotated | |
10
+ | **partial_errors** | **Array&lt;String&gt;** | | [optional] |
11
+
12
+ ## Example
13
+
14
+ ```ruby
15
+ require 'factpulse'
16
+
17
+ instance = FactPulse::KeyRotationResponse.new(
18
+ success: null,
19
+ message: null,
20
+ rotated_count: null,
21
+ partial_errors: null
22
+ )
23
+ ```
24
+
@@ -0,0 +1,38 @@
1
+ # FactPulse::LifecycleEvent
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **flow_id** | **String** | ID du flux lifecycle | |
8
+ | **status_code** | **String** | Code statut (200-601) | |
9
+ | **status_description** | **String** | | [optional] |
10
+ | **ack_status** | **String** | | [optional] |
11
+ | **at** | **String** | | [optional] |
12
+ | **document_id** | **String** | | [optional] |
13
+ | **amount** | **String** | | [optional] |
14
+ | **currency** | **String** | | [optional] |
15
+ | **issuer_siren** | **String** | | [optional] |
16
+ | **issuer_role** | **String** | | [optional] |
17
+ | **reason_code** | **String** | | [optional] |
18
+
19
+ ## Example
20
+
21
+ ```ruby
22
+ require 'factpulse'
23
+
24
+ instance = FactPulse::LifecycleEvent.new(
25
+ flow_id: null,
26
+ status_code: null,
27
+ status_description: null,
28
+ ack_status: null,
29
+ at: null,
30
+ document_id: null,
31
+ amount: null,
32
+ currency: null,
33
+ issuer_siren: null,
34
+ issuer_role: null,
35
+ reason_code: null
36
+ )
37
+ ```
38
+
@@ -0,0 +1,22 @@
1
+ # FactPulse::LifecycleResponse
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **invoices** | [**Array&lt;InvoiceLifecycle&gt;**](InvoiceLifecycle.md) | Cycles de vie par facture | [optional] |
8
+ | **total_invoices** | **Integer** | Nombre de factures | |
9
+ | **cutoff_days** | **Integer** | Nombre de jours de la fenetre de recherche | |
10
+
11
+ ## Example
12
+
13
+ ```ruby
14
+ require 'factpulse'
15
+
16
+ instance = FactPulse::LifecycleResponse.new(
17
+ invoices: null,
18
+ total_invoices: null,
19
+ cutoff_days: null
20
+ )
21
+ ```
22
+
@@ -11,6 +11,7 @@
11
11
  | **flow_service_url** | **String** | | [optional] |
12
12
  | **token_url** | **String** | | [optional] |
13
13
  | **oauth_client_id** | **String** | | [optional] |
14
+ | **encryption_mode** | **String** | | [optional] |
14
15
  | **secret_status** | [**SecretStatus**](SecretStatus.md) | | [optional] |
15
16
  | **last_test_at** | **Time** | | [optional] |
16
17
  | **last_test_success** | **Boolean** | | [optional] |
@@ -32,6 +33,7 @@ instance = FactPulse::PDPConfigResponse.new(
32
33
  flow_service_url: null,
33
34
  token_url: null,
34
35
  oauth_client_id: null,
36
+ encryption_mode: null,
35
37
  secret_status: null,
36
38
  last_test_at: null,
37
39
  last_test_success: null,
@@ -10,6 +10,7 @@
10
10
  | **token_url** | **String** | PDP OAuth token URL | |
11
11
  | **oauth_client_id** | **String** | OAuth Client ID | |
12
12
  | **client_secret** | **String** | OAuth Client Secret (sent but never returned) | |
13
+ | **encryption_mode** | **String** | | [optional] |
13
14
 
14
15
  ## Example
15
16
 
@@ -22,7 +23,8 @@ instance = FactPulse::PDPConfigUpdateRequest.new(
22
23
  flow_service_url: null,
23
24
  token_url: null,
24
25
  oauth_client_id: null,
25
- client_secret: null
26
+ client_secret: null,
27
+ encryption_mode: null
26
28
  )
27
29
  ```
28
30