From d1057513ada7f7b19e4ac4d54ad8b7088534459d Mon Sep 17 00:00:00 2001 From: Paul-Henry PERRIN Date: Tue, 27 Jan 2026 14:48:39 +0100 Subject: [PATCH] Add superset --- build.sh | 10 +- elasticsearch-values.yaml | 4 + es_elt/.dockerignore | 2 + es_elt/.gitignore | 3 + es_elt/Dockerfile | 41 + es_elt/README.md | 0 es_elt/compose.yaml | 21 + es_elt/cronjob.yaml | 57 ++ es_elt/pyproject.toml | 34 + es_elt/settings.toml | 22 + es_elt/src/es_elt/.gitignore | 3 + es_elt/src/es_elt/__init__.py | 3 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 215 bytes .../es_elt/__pycache__/config.cpython-312.pyc | Bin 0 -> 1028 bytes .../es_elt/__pycache__/main.cpython-312.pyc | Bin 0 -> 14559 bytes es_elt/src/es_elt/config.py | 22 + es_elt/src/es_elt/main.py | 345 +++++++ es_elt/src/es_elt/xml/__init__.py | 1 + .../xml/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 169 bytes es_elt/src/es_elt/xml/audit_data/__init__.py | 1 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 180 bytes .../src/es_elt/xml/audit_data/acm/__init__.py | 35 + .../acm/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 845 bytes .../__pycache__/user_group.cpython-312.pyc | Bin 0 -> 3123 bytes .../__pycache__/user_login.cpython-312.pyc | Bin 0 -> 3860 bytes .../es_elt/xml/audit_data/acm/user_group.py | 108 +++ .../es_elt/xml/audit_data/acm/user_login.py | 130 +++ .../src/es_elt/xml/audit_data/alm/__init__.py | 17 + .../alm/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 468 bytes .../__pycache__/action_list.cpython-312.pyc | Bin 0 -> 4409 bytes .../es_elt/xml/audit_data/alm/action_list.py | 162 ++++ .../src/es_elt/xml/audit_data/bpm/__init__.py | 73 ++ .../bpm/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1499 bytes .../configuration_parameters.cpython-312.pyc | Bin 0 -> 3174 bytes ...cketing_conf_item_creation.cpython-312.pyc | Bin 0 -> 3200 bytes .../ticketing_set_creation.cpython-312.pyc | Bin 0 -> 4995 bytes .../ticketing_set_publish.cpython-312.pyc | Bin 0 -> 2938 bytes .../bpm/configuration_parameters.py | 116 +++ .../bpm/ticketing_conf_item_creation.py | 113 +++ .../audit_data/bpm/ticketing_set_creation.py | 183 ++++ .../audit_data/bpm/ticketing_set_publish.py | 96 ++ .../src/es_elt/xml/audit_data/clm/__init__.py | 19 + .../clm/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 518 bytes .../customer_claim.cpython-312.pyc | Bin 0 -> 5096 bytes .../xml/audit_data/clm/customer_claim.py | 181 ++++ .../src/es_elt/xml/audit_data/clr/__init__.py | 263 +++++ .../clr/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 5764 bytes ...pping_ratio_plugin_details.cpython-312.pyc | Bin 0 -> 8302 bytes .../clearing_operation.cpython-312.pyc | Bin 0 -> 3535 bytes .../contract_apportionment.cpython-312.pyc | Bin 0 -> 10764 bytes .../__pycache__/fee_contract.cpython-312.pyc | Bin 0 -> 8406 bytes ...tion_apportionment_details.cpython-312.pyc | Bin 0 -> 5990 bytes ...ation_apportionment_errors.cpython-312.pyc | Bin 0 -> 4498 bytes ...nual_settlement_item_audit.cpython-312.pyc | Bin 0 -> 6260 bytes ...consumptions_apportionment.cpython-312.pyc | Bin 0 -> 8044 bytes .../settlement_period.cpython-312.pyc | Bin 0 -> 9559 bytes .../transaction_apportionment.cpython-312.pyc | Bin 0 -> 9305 bytes ...ment_using_capping_ratio_plugin_details.py | 260 +++++ .../xml/audit_data/clr/clearing_operation.py | 108 +++ .../audit_data/clr/contract_apportionment.py | 371 +++++++ .../es_elt/xml/audit_data/clr/fee_contract.py | 315 ++++++ ...rigin_destination_apportionment_details.py | 182 ++++ ...origin_destination_apportionment_errors.py | 151 +++ .../clr/manual_settlement_item_audit.py | 242 +++++ .../clr/media_consumptions_apportionment.py | 253 +++++ .../xml/audit_data/clr/settlement_period.py | 360 +++++++ .../clr/transaction_apportionment.py | 325 +++++++ .../src/es_elt/xml/audit_data/cmm/__init__.py | 71 ++ .../cmm/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1965 bytes .../cmm/__pycache__/customer.cpython-312.pyc | Bin 0 -> 12724 bytes .../customer_profile.cpython-312.pyc | Bin 0 -> 6533 bytes .../__pycache__/payment_means.cpython-312.pyc | Bin 0 -> 2932 bytes .../src/es_elt/xml/audit_data/cmm/customer.py | 447 +++++++++ .../xml/audit_data/cmm/customer_profile.py | 238 +++++ .../xml/audit_data/cmm/payment_means.py | 93 ++ .../src/es_elt/xml/audit_data/daq/__init__.py | 75 ++ .../daq/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1566 bytes ...invalid_device_transaction.cpython-312.pyc | Bin 0 -> 4383 bytes .../invalid_message_batch.cpython-312.pyc | Bin 0 -> 2705 bytes .../transaction_extended_data.cpython-312.pyc | Bin 0 -> 6066 bytes .../validator_errors.cpython-312.pyc | Bin 0 -> 3657 bytes .../daq/invalid_device_transaction.py | 146 +++ .../audit_data/daq/invalid_message_batch.py | 80 ++ .../daq/transaction_extended_data.py | 228 +++++ .../xml/audit_data/daq/validator_errors.py | 108 +++ .../src/es_elt/xml/audit_data/dem/__init__.py | 49 + .../dem/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1119 bytes .../dem/__pycache__/device.cpython-312.pyc | Bin 0 -> 7888 bytes ..._conf_items_version_update.cpython-312.pyc | Bin 0 -> 4156 bytes .../src/es_elt/xml/audit_data/dem/device.py | 294 ++++++ .../dem/device_conf_items_version_update.py | 143 +++ .../src/es_elt/xml/audit_data/dlm/__init__.py | 45 + .../dlm/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1112 bytes .../__pycache__/deny_action.cpython-312.pyc | Bin 0 -> 8282 bytes .../__pycache__/issuer_deny.cpython-312.pyc | Bin 0 -> 3036 bytes .../es_elt/xml/audit_data/dlm/deny_action.py | 327 +++++++ .../es_elt/xml/audit_data/dlm/issuer_deny.py | 99 ++ .../src/es_elt/xml/audit_data/mam/__init__.py | 324 +++++++ .../mam/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 6203 bytes .../mam/__pycache__/abt_purse.cpython-312.pyc | Bin 0 -> 6691 bytes ...djustment_execution_result.cpython-312.pyc | Bin 0 -> 3604 bytes ...adjustment_execution_start.cpython-312.pyc | Bin 0 -> 2942 bytes .../contract_transfer.cpython-312.pyc | Bin 0 -> 3456 bytes .../discarded_travel_event.cpython-312.pyc | Bin 0 -> 2927 bytes .../mam/__pycache__/media.cpython-312.pyc | Bin 0 -> 4478 bytes ...dia_consumption_adjustment.cpython-312.pyc | Bin 0 -> 8020 bytes ...on_adjustment_cancellation.cpython-312.pyc | Bin 0 -> 7094 bytes .../media_consumptions.cpython-312.pyc | Bin 0 -> 22364 bytes ...a_deny_access_notification.cpython-312.pyc | Bin 0 -> 3072 bytes ..._grace_expiry_notification.cpython-312.pyc | Bin 0 -> 3081 bytes ...o_sale_expiry_notification.cpython-312.pyc | Bin 0 -> 3090 bytes ...rofile_expiry_notification.cpython-312.pyc | Bin 0 -> 3081 bytes .../media_reconstruction.cpython-312.pyc | Bin 0 -> 3209 bytes .../__pycache__/purse_usage.cpython-312.pyc | Bin 0 -> 4746 bytes .../__pycache__/travel_event.cpython-312.pyc | Bin 0 -> 4484 bytes .../es_elt/xml/audit_data/mam/abt_purse.py | 272 ++++++ .../mam/bulk_adjustment_execution_result.py | 127 +++ .../mam/bulk_adjustment_execution_start.py | 85 ++ .../xml/audit_data/mam/contract_transfer.py | 122 +++ .../audit_data/mam/discarded_travel_event.py | 97 ++ es_elt/src/es_elt/xml/audit_data/mam/media.py | 168 ++++ .../mam/media_consumption_adjustment.py | 312 ++++++ ...dia_consumption_adjustment_cancellation.py | 255 +++++ .../xml/audit_data/mam/media_consumptions.py | 899 +++++++++++++++++ .../mam/media_deny_access_notification.py | 104 ++ .../mam/media_grace_expiry_notification.py | 104 ++ .../mam/media_no_sale_expiry_notification.py | 104 ++ .../mam/media_profile_expiry_notification.py | 104 ++ .../audit_data/mam/media_reconstruction.py | 111 +++ .../es_elt/xml/audit_data/mam/purse_usage.py | 181 ++++ .../es_elt/xml/audit_data/mam/travel_event.py | 159 +++ .../src/es_elt/xml/audit_data/pom/__init__.py | 73 ++ .../pom/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1394 bytes .../customer_order.cpython-312.pyc | Bin 0 -> 7524 bytes .../__pycache__/order_item.cpython-312.pyc | Bin 0 -> 5751 bytes .../refund_payment.cpython-312.pyc | Bin 0 -> 2102 bytes .../refund_payment_request.cpython-312.pyc | Bin 0 -> 2134 bytes .../refund_payment_response.cpython-312.pyc | Bin 0 -> 2138 bytes .../xml/audit_data/pom/customer_order.py | 327 +++++++ .../es_elt/xml/audit_data/pom/order_item.py | 238 +++++ .../xml/audit_data/pom/refund_payment.py | 56 ++ .../audit_data/pom/refund_payment_request.py | 56 ++ .../audit_data/pom/refund_payment_response.py | 56 ++ .../src/es_elt/xml/audit_data/rpe/__init__.py | 199 ++++ .../rpe/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 3950 bytes .../rpe/__pycache__/bad_debt.cpython-312.pyc | Bin 0 -> 3359 bytes .../debt_recovery_attempt.cpython-312.pyc | Bin 0 -> 2876 bytes .../debt_repayment.cpython-312.pyc | Bin 0 -> 7970 bytes .../debt_repayment_response.cpython-312.pyc | Bin 0 -> 4002 bytes .../ignored_journey.cpython-312.pyc | Bin 0 -> 3363 bytes .../payment_request.cpython-312.pyc | Bin 0 -> 12414 bytes ...ment_request_old_processor.cpython-312.pyc | Bin 0 -> 2868 bytes .../payment_response.cpython-312.pyc | Bin 0 -> 10436 bytes .../risk_reassessment.cpython-312.pyc | Bin 0 -> 2934 bytes .../unblock_media_attempt.cpython-312.pyc | Bin 0 -> 3058 bytes .../src/es_elt/xml/audit_data/rpe/bad_debt.py | 120 +++ .../audit_data/rpe/debt_recovery_attempt.py | 94 ++ .../xml/audit_data/rpe/debt_repayment.py | 267 ++++++ .../audit_data/rpe/debt_repayment_response.py | 137 +++ .../xml/audit_data/rpe/ignored_journey.py | 99 ++ .../xml/audit_data/rpe/payment_request.py | 482 ++++++++++ .../rpe/payment_request_old_processor.py | 89 ++ .../xml/audit_data/rpe/payment_response.py | 426 +++++++++ .../xml/audit_data/rpe/risk_reassessment.py | 92 ++ .../audit_data/rpe/unblock_media_attempt.py | 105 ++ .../src/es_elt/xml/audit_data/scm/__init__.py | 46 + .../scm/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1026 bytes .../scm/__pycache__/fine.cpython-312.pyc | Bin 0 -> 4813 bytes .../fine_gdpr_extraction.cpython-312.pyc | Bin 0 -> 3189 bytes .../__pycache__/orphan_shift.cpython-312.pyc | Bin 0 -> 3948 bytes es_elt/src/es_elt/xml/audit_data/scm/fine.py | 178 ++++ .../audit_data/scm/fine_gdpr_extraction.py | 103 ++ .../es_elt/xml/audit_data/scm/orphan_shift.py | 136 +++ .../src/es_elt/xml/audit_data/stf/__init__.py | 15 + .../stf/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 465 bytes .../__pycache__/agent_account.cpython-312.pyc | Bin 0 -> 4070 bytes .../xml/audit_data/stf/agent_account.py | 136 +++ .../src/es_elt/xml/audit_data/stk/__init__.py | 127 +++ .../stk/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 2408 bytes .../stk/__pycache__/low_stock.cpython-312.pyc | Bin 0 -> 3993 bytes .../stock_entity_created.cpython-312.pyc | Bin 0 -> 3344 bytes .../stock_movement.cpython-312.pyc | Bin 0 -> 6600 bytes .../stock_operation.cpython-312.pyc | Bin 0 -> 5511 bytes .../stock_order_created.cpython-312.pyc | Bin 0 -> 3595 bytes .../stock_provider_created.cpython-312.pyc | Bin 0 -> 3385 bytes .../stock_update_error.cpython-312.pyc | Bin 0 -> 3194 bytes .../__pycache__/stock_updated.cpython-312.pyc | Bin 0 -> 3134 bytes .../es_elt/xml/audit_data/stk/low_stock.py | 148 +++ .../audit_data/stk/stock_entity_created.py | 107 +++ .../xml/audit_data/stk/stock_movement.py | 247 +++++ .../xml/audit_data/stk/stock_operation.py | 203 ++++ .../xml/audit_data/stk/stock_order_created.py | 126 +++ .../audit_data/stk/stock_provider_created.py | 107 +++ .../xml/audit_data/stk/stock_update_error.py | 108 +++ .../xml/audit_data/stk/stock_updated.py | 108 +++ es_elt/src/es_elt/xml/common/__init__.py | 291 ++++++ .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 7165 bytes .../capping_details.cpython-312.pyc | Bin 0 -> 1292 bytes .../clearing_item_type.cpython-312.pyc | Bin 0 -> 10745 bytes .../customer_payment_type.cpython-312.pyc | Bin 0 -> 2861 bytes .../deny_action_status.cpython-312.pyc | Bin 0 -> 1311 bytes .../__pycache__/discount.cpython-312.pyc | Bin 0 -> 1132 bytes .../extended_address.cpython-312.pyc | Bin 0 -> 2687 bytes ...ternal_identifier_exchange.cpython-312.pyc | Bin 0 -> 2015 bytes .../common/__pycache__/fee.cpython-312.pyc | Bin 0 -> 941 bytes .../__pycache__/hal_link.cpython-312.pyc | Bin 0 -> 1078 bytes .../__pycache__/headers.cpython-312.pyc | Bin 0 -> 1229 bytes .../__pycache__/localized.cpython-312.pyc | Bin 0 -> 10203 bytes ...sumption_adjustment_common.cpython-312.pyc | Bin 0 -> 8998 bytes .../media_identification.cpython-312.pyc | Bin 0 -> 2051 bytes ...ng_versions_audit_exchange.cpython-312.pyc | Bin 0 -> 4312 bytes .../__pycache__/order_details.cpython-312.pyc | Bin 0 -> 4452 bytes .../__pycache__/order_status.cpython-312.pyc | Bin 0 -> 1190 bytes .../payment_request_type.cpython-312.pyc | Bin 0 -> 1577 bytes .../payment_status.cpython-312.pyc | Bin 0 -> 2814 bytes .../payment_trigger_source.cpython-312.pyc | Bin 0 -> 1681 bytes .../__pycache__/payment_type.cpython-312.pyc | Bin 0 -> 2616 bytes ...product_price_with_details.cpython-312.pyc | Bin 0 -> 5952 bytes .../provider_status.cpython-312.pyc | Bin 0 -> 1202 bytes .../__pycache__/rating_detail.cpython-312.pyc | Bin 0 -> 3010 bytes ...nd_contract_audit_exchange.cpython-312.pyc | Bin 0 -> 5244 bytes .../refund_payment_audit.cpython-312.pyc | Bin 0 -> 7217 bytes .../stock_entity_exchange.cpython-312.pyc | Bin 0 -> 4340 bytes .../stock_entity_item.cpython-312.pyc | Bin 0 -> 1358 bytes .../stock_history_action.cpython-312.pyc | Bin 0 -> 1845 bytes .../stock_order_exchange.cpython-312.pyc | Bin 0 -> 5566 bytes .../stock_provider_exchange.cpython-312.pyc | Bin 0 -> 3769 bytes ...transaction_exception_type.cpython-312.pyc | Bin 0 -> 1258 bytes .../transit_contract.cpython-312.pyc | Bin 0 -> 2780 bytes .../travel_event_source.cpython-312.pyc | Bin 0 -> 1294 bytes .../travel_event_type.cpython-312.pyc | Bin 0 -> 1508 bytes .../__pycache__/travel_status.cpython-312.pyc | Bin 0 -> 1217 bytes .../validation_model.cpython-312.pyc | Bin 0 -> 1332 bytes .../src/es_elt/xml/common/capping_details.py | 34 + .../es_elt/xml/common/clearing_item_type.py | 415 ++++++++ .../xml/common/customer_payment_type.py | 61 ++ .../es_elt/xml/common/deny_action_status.py | 29 + es_elt/src/es_elt/xml/common/discount.py | 36 + .../src/es_elt/xml/common/extended_address.py | 135 +++ .../common/external_identifier_exchange.py | 56 ++ es_elt/src/es_elt/xml/common/fee.py | 28 + es_elt/src/es_elt/xml/common/hal_link.py | 29 + es_elt/src/es_elt/xml/common/headers.py | 25 + es_elt/src/es_elt/xml/common/localized.py | 549 +++++++++++ .../media_consumption_adjustment_common.py | 396 ++++++++ .../es_elt/xml/common/media_identification.py | 69 ++ ...multi_ticketing_versions_audit_exchange.py | 146 +++ es_elt/src/es_elt/xml/common/order_details.py | 129 +++ es_elt/src/es_elt/xml/common/order_status.py | 25 + .../es_elt/xml/common/payment_request_type.py | 35 + .../src/es_elt/xml/common/payment_status.py | 60 ++ .../xml/common/payment_trigger_source.py | 38 + es_elt/src/es_elt/xml/common/payment_type.py | 54 ++ .../xml/common/product_price_with_details.py | 204 ++++ .../src/es_elt/xml/common/provider_status.py | 25 + es_elt/src/es_elt/xml/common/rating_detail.py | 105 ++ .../common/refund_contract_audit_exchange.py | 186 ++++ .../es_elt/xml/common/refund_payment_audit.py | 306 ++++++ .../xml/common/stock_entity_exchange.py | 154 +++ .../es_elt/xml/common/stock_entity_item.py | 39 + .../es_elt/xml/common/stock_history_action.py | 40 + .../es_elt/xml/common/stock_order_exchange.py | 232 +++++ .../xml/common/stock_provider_exchange.py | 184 ++++ .../xml/common/transaction_exception_type.py | 25 + .../src/es_elt/xml/common/transit_contract.py | 103 ++ .../es_elt/xml/common/travel_event_source.py | 28 + .../es_elt/xml/common/travel_event_type.py | 39 + es_elt/src/es_elt/xml/common/travel_status.py | 26 + .../src/es_elt/xml/common/validation_model.py | 31 + es_elt/uv.lock | 704 ++++++++++++++ es_elt/xsd/_jaxb.java.bindings.xsd | 19 + es_elt/xsd/auditData/acm/UserGroup.xsd | 77 ++ es_elt/xsd/auditData/acm/UserLogin.xsd | 85 ++ es_elt/xsd/auditData/alm/ActionList.xsd | 101 ++ .../auditData/bpm/ConfigurationParameters.xsd | 72 ++ .../bpm/TicketingConfItemCreation.xsd | 74 ++ .../auditData/bpm/TicketingSetCreation.xsd | 113 +++ .../xsd/auditData/bpm/TicketingSetPublish.xsd | 72 ++ es_elt/xsd/auditData/clm/CustomerClaim.xsd | 135 +++ ...tionmentUsingCappingRatioPluginDetails.xsd | 163 ++++ .../xsd/auditData/clr/ClearingOperation.xsd | 99 ++ .../auditData/clr/ContractApportionment.xsd | 265 +++++ es_elt/xsd/auditData/clr/FeeContract.xsd | 190 ++++ ...dOriginDestinationApportionmentDetails.xsd | 124 +++ ...edOriginDestinationApportionmentErrors.xsd | 111 +++ .../clr/ManualSettlementItemAudit.xsd | 161 ++++ .../clr/MediaConsumptionsApportionment.xsd | 177 ++++ es_elt/xsd/auditData/clr/SettlementPeriod.xsd | 225 +++++ .../clr/TransactionApportionment.xsd | 164 ++++ es_elt/xsd/auditData/cmm/Customer.xsd | 248 +++++ es_elt/xsd/auditData/cmm/CustomerProfile.xsd | 125 +++ es_elt/xsd/auditData/cmm/PaymentMeans.xsd | 74 ++ .../daq/InvalidDeviceTransaction.xsd | 95 ++ .../xsd/auditData/daq/InvalidMessageBatch.xsd | 70 ++ .../auditData/daq/TransactionExtendedData.xsd | 174 ++++ es_elt/xsd/auditData/daq/ValidatorErrors.xsd | 78 ++ es_elt/xsd/auditData/dem/Device.xsd | 177 ++++ .../dem/DeviceConfItemsVersionUpdate.xsd | 85 ++ es_elt/xsd/auditData/dlm/DenyAction.xsd | 150 +++ es_elt/xsd/auditData/dlm/IssuerDeny.xsd | 77 ++ es_elt/xsd/auditData/mam/AbtPurse.xsd | 145 +++ .../mam/BulkAdjustmentExecutionResult.xsd | 74 ++ .../mam/BulkAdjustmentExecutionStart.xsd | 69 ++ es_elt/xsd/auditData/mam/ContractTransfer.xsd | 73 ++ .../auditData/mam/DiscardedTravelEvent.xsd | 76 ++ es_elt/xsd/auditData/mam/Media.xsd | 111 +++ .../mam/MediaConsumptionAdjustment.xsd | 135 +++ ...MediaConsumptionAdjustmentCancellation.xsd | 117 +++ .../xsd/auditData/mam/MediaConsumptions.xsd | 511 ++++++++++ .../mam/MediaDenyAccessNotification.xsd | 71 ++ .../mam/MediaGraceExpiryNotification.xsd | 71 ++ .../mam/MediaNoSaleExpiryNotification.xsd | 71 ++ .../mam/MediaProfileExpiryNotification.xsd | 70 ++ .../xsd/auditData/mam/MediaReconstruction.xsd | 74 ++ es_elt/xsd/auditData/mam/PurseUsage.xsd | 99 ++ es_elt/xsd/auditData/mam/TravelEvent.xsd | 102 ++ es_elt/xsd/auditData/pom/CustomerOrder.xsd | 183 ++++ es_elt/xsd/auditData/pom/OrderItem.xsd | 142 +++ es_elt/xsd/auditData/pom/RefundPayment.xsd | 66 ++ .../auditData/pom/RefundPaymentRequest.xsd | 66 ++ .../auditData/pom/RefundPaymentResponse.xsd | 65 ++ es_elt/xsd/auditData/rpe/BadDebt.xsd | 87 ++ .../xsd/auditData/rpe/DebtRecoveryAttempt.xsd | 72 ++ es_elt/xsd/auditData/rpe/DebtRepayment.xsd | 146 +++ .../auditData/rpe/DebtRepaymentResponse.xsd | 91 ++ es_elt/xsd/auditData/rpe/IgnoredJourney.xsd | 76 ++ es_elt/xsd/auditData/rpe/PaymentRequest.xsd | 237 +++++ .../rpe/PaymentRequestOldProcessor.xsd | 71 ++ es_elt/xsd/auditData/rpe/PaymentResponse.xsd | 280 ++++++ es_elt/xsd/auditData/rpe/RiskReassessment.xsd | 75 ++ .../xsd/auditData/rpe/UnblockMediaAttempt.xsd | 77 ++ es_elt/xsd/auditData/scm/Fine.xsd | 134 +++ .../xsd/auditData/scm/FineGdprExtraction.xsd | 85 ++ es_elt/xsd/auditData/scm/OrphanShift.xsd | 94 ++ es_elt/xsd/auditData/stf/AgentAccount.xsd | 85 ++ es_elt/xsd/auditData/stk/LowStock.xsd | 84 ++ .../xsd/auditData/stk/StockEntityCreated.xsd | 76 ++ es_elt/xsd/auditData/stk/StockMovement.xsd | 145 +++ es_elt/xsd/auditData/stk/StockOperation.xsd | 122 +++ .../xsd/auditData/stk/StockOrderCreated.xsd | 78 ++ .../auditData/stk/StockProviderCreated.xsd | 76 ++ es_elt/xsd/auditData/stk/StockUpdateError.xsd | 72 ++ es_elt/xsd/auditData/stk/StockUpdated.xsd | 72 ++ es_elt/xsd/common/CappingDetails.xsd | 26 + es_elt/xsd/common/ClearingItemType.xsd | 291 ++++++ es_elt/xsd/common/CustomerPaymentType.xsd | 106 ++ es_elt/xsd/common/DenyActionStatus.xsd | 47 + es_elt/xsd/common/Discount.xsd | 42 + es_elt/xsd/common/ExtendedAddress.xsd | 64 ++ .../xsd/common/ExternalIdentifierExchange.xsd | 55 ++ es_elt/xsd/common/Fee.xsd | 41 + es_elt/xsd/common/HalLink.xsd | 43 + es_elt/xsd/common/Headers.xsd | 43 + es_elt/xsd/common/Localized.xsd | 212 ++++ .../MediaConsumptionAdjustmentCommon.xsd | 195 ++++ es_elt/xsd/common/MediaIdentification.xsd | 57 ++ .../MultiTicketingVersionsAuditExchange.xsd | 77 ++ es_elt/xsd/common/OrderDetails.xsd | 167 ++++ es_elt/xsd/common/OrderStatus.xsd | 40 + es_elt/xsd/common/PaymentRequestType.xsd | 58 ++ es_elt/xsd/common/PaymentStatus.xsd | 116 +++ es_elt/xsd/common/PaymentTriggerSource.xsd | 69 ++ es_elt/xsd/common/PaymentType.xsd | 97 ++ es_elt/xsd/common/ProductPriceWithDetails.xsd | 103 ++ es_elt/xsd/common/ProviderStatus.xsd | 40 + es_elt/xsd/common/RatingDetail.xsd | 89 ++ .../common/RefundContractAuditExchange.xsd | 138 +++ es_elt/xsd/common/RefundPaymentAudit.xsd | 201 ++++ es_elt/xsd/common/StockEntityExchange.xsd | 78 ++ es_elt/xsd/common/StockEntityItem.xsd | 46 + es_elt/xsd/common/StockHistoryAction.xsd | 55 ++ es_elt/xsd/common/StockOrderExchange.xsd | 116 +++ es_elt/xsd/common/StockProviderExchange.xsd | 71 ++ .../xsd/common/TransactionExceptionType.xsd | 40 + es_elt/xsd/common/TransitContract.xsd | 63 ++ es_elt/xsd/common/TravelEventSource.xsd | 43 + es_elt/xsd/common/TravelEventType.xsd | 48 + es_elt/xsd/common/TravelStatus.xsd | 41 + es_elt/xsd/common/ValidationModel.xsd | 45 + sds/app/.sds-api.yaml.kate-swp | Bin 662 -> 0 bytes sds/app/sds-api.yaml | 34 - sds/base/elasticsearch.yaml | 4 + superset-image/Dockerfile | 31 + superset-values-ref.yaml | 902 ++++++++++++++++++ superset-values.yaml | 74 ++ superset/app/database.yaml | 105 ++ superset/app/kustomization.yaml | 61 ++ superset/app/namespace.yaml | 8 + superset/base/kustomization.yaml | 3 + superset/base/superset.yaml | 472 +++++++++ superset/base/valkey.yaml | 191 ++++ superset/local/kustomization.yaml | 78 ++ 392 files changed, 33982 insertions(+), 35 deletions(-) create mode 100644 es_elt/.dockerignore create mode 100644 es_elt/.gitignore create mode 100644 es_elt/Dockerfile create mode 100644 es_elt/README.md create mode 100644 es_elt/compose.yaml create mode 100644 es_elt/cronjob.yaml create mode 100644 es_elt/pyproject.toml create mode 100644 es_elt/settings.toml create mode 100644 es_elt/src/es_elt/.gitignore create mode 100644 es_elt/src/es_elt/__init__.py create mode 100644 es_elt/src/es_elt/__pycache__/__init__.cpython-312.pyc create mode 100644 es_elt/src/es_elt/__pycache__/config.cpython-312.pyc create mode 100644 es_elt/src/es_elt/__pycache__/main.cpython-312.pyc create mode 100644 es_elt/src/es_elt/config.py create mode 100644 es_elt/src/es_elt/main.py create mode 100644 es_elt/src/es_elt/xml/__init__.py create mode 100644 es_elt/src/es_elt/xml/__pycache__/__init__.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/__init__.py create mode 100644 es_elt/src/es_elt/xml/audit_data/__pycache__/__init__.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/acm/__init__.py create mode 100644 es_elt/src/es_elt/xml/audit_data/acm/__pycache__/__init__.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/acm/__pycache__/user_group.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/acm/__pycache__/user_login.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/acm/user_group.py create mode 100644 es_elt/src/es_elt/xml/audit_data/acm/user_login.py create mode 100644 es_elt/src/es_elt/xml/audit_data/alm/__init__.py create mode 100644 es_elt/src/es_elt/xml/audit_data/alm/__pycache__/__init__.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/alm/__pycache__/action_list.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/alm/action_list.py create mode 100644 es_elt/src/es_elt/xml/audit_data/bpm/__init__.py create mode 100644 es_elt/src/es_elt/xml/audit_data/bpm/__pycache__/__init__.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/bpm/__pycache__/configuration_parameters.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/bpm/__pycache__/ticketing_conf_item_creation.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/bpm/__pycache__/ticketing_set_creation.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/bpm/__pycache__/ticketing_set_publish.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/bpm/configuration_parameters.py create mode 100644 es_elt/src/es_elt/xml/audit_data/bpm/ticketing_conf_item_creation.py create mode 100644 es_elt/src/es_elt/xml/audit_data/bpm/ticketing_set_creation.py create mode 100644 es_elt/src/es_elt/xml/audit_data/bpm/ticketing_set_publish.py create mode 100644 es_elt/src/es_elt/xml/audit_data/clm/__init__.py create mode 100644 es_elt/src/es_elt/xml/audit_data/clm/__pycache__/__init__.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/clm/__pycache__/customer_claim.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/clm/customer_claim.py create mode 100644 es_elt/src/es_elt/xml/audit_data/clr/__init__.py create mode 100644 es_elt/src/es_elt/xml/audit_data/clr/__pycache__/__init__.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/clr/__pycache__/apportionment_using_capping_ratio_plugin_details.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/clr/__pycache__/clearing_operation.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/clr/__pycache__/contract_apportionment.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/clr/__pycache__/fee_contract.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/clr/__pycache__/fixed_origin_destination_apportionment_details.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/clr/__pycache__/fixed_origin_destination_apportionment_errors.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/clr/__pycache__/manual_settlement_item_audit.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/clr/__pycache__/media_consumptions_apportionment.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/clr/__pycache__/settlement_period.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/clr/__pycache__/transaction_apportionment.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/clr/apportionment_using_capping_ratio_plugin_details.py create mode 100644 es_elt/src/es_elt/xml/audit_data/clr/clearing_operation.py create mode 100644 es_elt/src/es_elt/xml/audit_data/clr/contract_apportionment.py create mode 100644 es_elt/src/es_elt/xml/audit_data/clr/fee_contract.py create mode 100644 es_elt/src/es_elt/xml/audit_data/clr/fixed_origin_destination_apportionment_details.py create mode 100644 es_elt/src/es_elt/xml/audit_data/clr/fixed_origin_destination_apportionment_errors.py create mode 100644 es_elt/src/es_elt/xml/audit_data/clr/manual_settlement_item_audit.py create mode 100644 es_elt/src/es_elt/xml/audit_data/clr/media_consumptions_apportionment.py create mode 100644 es_elt/src/es_elt/xml/audit_data/clr/settlement_period.py create mode 100644 es_elt/src/es_elt/xml/audit_data/clr/transaction_apportionment.py create mode 100644 es_elt/src/es_elt/xml/audit_data/cmm/__init__.py create mode 100644 es_elt/src/es_elt/xml/audit_data/cmm/__pycache__/__init__.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/cmm/__pycache__/customer.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/cmm/__pycache__/customer_profile.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/cmm/__pycache__/payment_means.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/cmm/customer.py create mode 100644 es_elt/src/es_elt/xml/audit_data/cmm/customer_profile.py create mode 100644 es_elt/src/es_elt/xml/audit_data/cmm/payment_means.py create mode 100644 es_elt/src/es_elt/xml/audit_data/daq/__init__.py create mode 100644 es_elt/src/es_elt/xml/audit_data/daq/__pycache__/__init__.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/daq/__pycache__/invalid_device_transaction.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/daq/__pycache__/invalid_message_batch.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/daq/__pycache__/transaction_extended_data.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/daq/__pycache__/validator_errors.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/daq/invalid_device_transaction.py create mode 100644 es_elt/src/es_elt/xml/audit_data/daq/invalid_message_batch.py create mode 100644 es_elt/src/es_elt/xml/audit_data/daq/transaction_extended_data.py create mode 100644 es_elt/src/es_elt/xml/audit_data/daq/validator_errors.py create mode 100644 es_elt/src/es_elt/xml/audit_data/dem/__init__.py create mode 100644 es_elt/src/es_elt/xml/audit_data/dem/__pycache__/__init__.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/dem/__pycache__/device.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/dem/__pycache__/device_conf_items_version_update.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/dem/device.py create mode 100644 es_elt/src/es_elt/xml/audit_data/dem/device_conf_items_version_update.py create mode 100644 es_elt/src/es_elt/xml/audit_data/dlm/__init__.py create mode 100644 es_elt/src/es_elt/xml/audit_data/dlm/__pycache__/__init__.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/dlm/__pycache__/deny_action.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/dlm/__pycache__/issuer_deny.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/dlm/deny_action.py create mode 100644 es_elt/src/es_elt/xml/audit_data/dlm/issuer_deny.py create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/__init__.py create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/__pycache__/__init__.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/__pycache__/abt_purse.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/__pycache__/bulk_adjustment_execution_result.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/__pycache__/bulk_adjustment_execution_start.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/__pycache__/contract_transfer.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/__pycache__/discarded_travel_event.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_consumption_adjustment.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_consumption_adjustment_cancellation.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_consumptions.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_deny_access_notification.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_grace_expiry_notification.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_no_sale_expiry_notification.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_profile_expiry_notification.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_reconstruction.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/__pycache__/purse_usage.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/__pycache__/travel_event.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/abt_purse.py create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/bulk_adjustment_execution_result.py create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/bulk_adjustment_execution_start.py create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/contract_transfer.py create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/discarded_travel_event.py create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/media.py create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/media_consumption_adjustment.py create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/media_consumption_adjustment_cancellation.py create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/media_consumptions.py create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/media_deny_access_notification.py create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/media_grace_expiry_notification.py create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/media_no_sale_expiry_notification.py create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/media_profile_expiry_notification.py create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/media_reconstruction.py create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/purse_usage.py create mode 100644 es_elt/src/es_elt/xml/audit_data/mam/travel_event.py create mode 100644 es_elt/src/es_elt/xml/audit_data/pom/__init__.py create mode 100644 es_elt/src/es_elt/xml/audit_data/pom/__pycache__/__init__.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/pom/__pycache__/customer_order.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/pom/__pycache__/order_item.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/pom/__pycache__/refund_payment.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/pom/__pycache__/refund_payment_request.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/pom/__pycache__/refund_payment_response.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/pom/customer_order.py create mode 100644 es_elt/src/es_elt/xml/audit_data/pom/order_item.py create mode 100644 es_elt/src/es_elt/xml/audit_data/pom/refund_payment.py create mode 100644 es_elt/src/es_elt/xml/audit_data/pom/refund_payment_request.py create mode 100644 es_elt/src/es_elt/xml/audit_data/pom/refund_payment_response.py create mode 100644 es_elt/src/es_elt/xml/audit_data/rpe/__init__.py create mode 100644 es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/__init__.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/bad_debt.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/debt_recovery_attempt.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/debt_repayment.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/debt_repayment_response.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/ignored_journey.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/payment_request.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/payment_request_old_processor.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/payment_response.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/risk_reassessment.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/unblock_media_attempt.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/rpe/bad_debt.py create mode 100644 es_elt/src/es_elt/xml/audit_data/rpe/debt_recovery_attempt.py create mode 100644 es_elt/src/es_elt/xml/audit_data/rpe/debt_repayment.py create mode 100644 es_elt/src/es_elt/xml/audit_data/rpe/debt_repayment_response.py create mode 100644 es_elt/src/es_elt/xml/audit_data/rpe/ignored_journey.py create mode 100644 es_elt/src/es_elt/xml/audit_data/rpe/payment_request.py create mode 100644 es_elt/src/es_elt/xml/audit_data/rpe/payment_request_old_processor.py create mode 100644 es_elt/src/es_elt/xml/audit_data/rpe/payment_response.py create mode 100644 es_elt/src/es_elt/xml/audit_data/rpe/risk_reassessment.py create mode 100644 es_elt/src/es_elt/xml/audit_data/rpe/unblock_media_attempt.py create mode 100644 es_elt/src/es_elt/xml/audit_data/scm/__init__.py create mode 100644 es_elt/src/es_elt/xml/audit_data/scm/__pycache__/__init__.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/scm/__pycache__/fine.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/scm/__pycache__/fine_gdpr_extraction.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/scm/__pycache__/orphan_shift.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/scm/fine.py create mode 100644 es_elt/src/es_elt/xml/audit_data/scm/fine_gdpr_extraction.py create mode 100644 es_elt/src/es_elt/xml/audit_data/scm/orphan_shift.py create mode 100644 es_elt/src/es_elt/xml/audit_data/stf/__init__.py create mode 100644 es_elt/src/es_elt/xml/audit_data/stf/__pycache__/__init__.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/stf/__pycache__/agent_account.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/stf/agent_account.py create mode 100644 es_elt/src/es_elt/xml/audit_data/stk/__init__.py create mode 100644 es_elt/src/es_elt/xml/audit_data/stk/__pycache__/__init__.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/stk/__pycache__/low_stock.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_entity_created.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_movement.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_operation.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_order_created.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_provider_created.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_update_error.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_updated.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/audit_data/stk/low_stock.py create mode 100644 es_elt/src/es_elt/xml/audit_data/stk/stock_entity_created.py create mode 100644 es_elt/src/es_elt/xml/audit_data/stk/stock_movement.py create mode 100644 es_elt/src/es_elt/xml/audit_data/stk/stock_operation.py create mode 100644 es_elt/src/es_elt/xml/audit_data/stk/stock_order_created.py create mode 100644 es_elt/src/es_elt/xml/audit_data/stk/stock_provider_created.py create mode 100644 es_elt/src/es_elt/xml/audit_data/stk/stock_update_error.py create mode 100644 es_elt/src/es_elt/xml/audit_data/stk/stock_updated.py create mode 100644 es_elt/src/es_elt/xml/common/__init__.py create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/__init__.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/capping_details.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/clearing_item_type.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/customer_payment_type.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/deny_action_status.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/discount.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/extended_address.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/external_identifier_exchange.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/fee.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/hal_link.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/headers.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/localized.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/media_consumption_adjustment_common.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/media_identification.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/multi_ticketing_versions_audit_exchange.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/order_details.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/order_status.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/payment_request_type.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/payment_status.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/payment_trigger_source.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/payment_type.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/product_price_with_details.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/provider_status.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/rating_detail.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/refund_contract_audit_exchange.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/refund_payment_audit.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/stock_entity_exchange.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/stock_entity_item.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/stock_history_action.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/stock_order_exchange.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/stock_provider_exchange.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/transaction_exception_type.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/transit_contract.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/travel_event_source.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/travel_event_type.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/travel_status.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/__pycache__/validation_model.cpython-312.pyc create mode 100644 es_elt/src/es_elt/xml/common/capping_details.py create mode 100644 es_elt/src/es_elt/xml/common/clearing_item_type.py create mode 100644 es_elt/src/es_elt/xml/common/customer_payment_type.py create mode 100644 es_elt/src/es_elt/xml/common/deny_action_status.py create mode 100644 es_elt/src/es_elt/xml/common/discount.py create mode 100644 es_elt/src/es_elt/xml/common/extended_address.py create mode 100644 es_elt/src/es_elt/xml/common/external_identifier_exchange.py create mode 100644 es_elt/src/es_elt/xml/common/fee.py create mode 100644 es_elt/src/es_elt/xml/common/hal_link.py create mode 100644 es_elt/src/es_elt/xml/common/headers.py create mode 100644 es_elt/src/es_elt/xml/common/localized.py create mode 100644 es_elt/src/es_elt/xml/common/media_consumption_adjustment_common.py create mode 100644 es_elt/src/es_elt/xml/common/media_identification.py create mode 100644 es_elt/src/es_elt/xml/common/multi_ticketing_versions_audit_exchange.py create mode 100644 es_elt/src/es_elt/xml/common/order_details.py create mode 100644 es_elt/src/es_elt/xml/common/order_status.py create mode 100644 es_elt/src/es_elt/xml/common/payment_request_type.py create mode 100644 es_elt/src/es_elt/xml/common/payment_status.py create mode 100644 es_elt/src/es_elt/xml/common/payment_trigger_source.py create mode 100644 es_elt/src/es_elt/xml/common/payment_type.py create mode 100644 es_elt/src/es_elt/xml/common/product_price_with_details.py create mode 100644 es_elt/src/es_elt/xml/common/provider_status.py create mode 100644 es_elt/src/es_elt/xml/common/rating_detail.py create mode 100644 es_elt/src/es_elt/xml/common/refund_contract_audit_exchange.py create mode 100644 es_elt/src/es_elt/xml/common/refund_payment_audit.py create mode 100644 es_elt/src/es_elt/xml/common/stock_entity_exchange.py create mode 100644 es_elt/src/es_elt/xml/common/stock_entity_item.py create mode 100644 es_elt/src/es_elt/xml/common/stock_history_action.py create mode 100644 es_elt/src/es_elt/xml/common/stock_order_exchange.py create mode 100644 es_elt/src/es_elt/xml/common/stock_provider_exchange.py create mode 100644 es_elt/src/es_elt/xml/common/transaction_exception_type.py create mode 100644 es_elt/src/es_elt/xml/common/transit_contract.py create mode 100644 es_elt/src/es_elt/xml/common/travel_event_source.py create mode 100644 es_elt/src/es_elt/xml/common/travel_event_type.py create mode 100644 es_elt/src/es_elt/xml/common/travel_status.py create mode 100644 es_elt/src/es_elt/xml/common/validation_model.py create mode 100644 es_elt/uv.lock create mode 100644 es_elt/xsd/_jaxb.java.bindings.xsd create mode 100644 es_elt/xsd/auditData/acm/UserGroup.xsd create mode 100644 es_elt/xsd/auditData/acm/UserLogin.xsd create mode 100644 es_elt/xsd/auditData/alm/ActionList.xsd create mode 100644 es_elt/xsd/auditData/bpm/ConfigurationParameters.xsd create mode 100644 es_elt/xsd/auditData/bpm/TicketingConfItemCreation.xsd create mode 100644 es_elt/xsd/auditData/bpm/TicketingSetCreation.xsd create mode 100644 es_elt/xsd/auditData/bpm/TicketingSetPublish.xsd create mode 100644 es_elt/xsd/auditData/clm/CustomerClaim.xsd create mode 100644 es_elt/xsd/auditData/clr/ApportionmentUsingCappingRatioPluginDetails.xsd create mode 100644 es_elt/xsd/auditData/clr/ClearingOperation.xsd create mode 100644 es_elt/xsd/auditData/clr/ContractApportionment.xsd create mode 100644 es_elt/xsd/auditData/clr/FeeContract.xsd create mode 100644 es_elt/xsd/auditData/clr/FixedOriginDestinationApportionmentDetails.xsd create mode 100644 es_elt/xsd/auditData/clr/FixedOriginDestinationApportionmentErrors.xsd create mode 100644 es_elt/xsd/auditData/clr/ManualSettlementItemAudit.xsd create mode 100644 es_elt/xsd/auditData/clr/MediaConsumptionsApportionment.xsd create mode 100644 es_elt/xsd/auditData/clr/SettlementPeriod.xsd create mode 100644 es_elt/xsd/auditData/clr/TransactionApportionment.xsd create mode 100644 es_elt/xsd/auditData/cmm/Customer.xsd create mode 100644 es_elt/xsd/auditData/cmm/CustomerProfile.xsd create mode 100644 es_elt/xsd/auditData/cmm/PaymentMeans.xsd create mode 100644 es_elt/xsd/auditData/daq/InvalidDeviceTransaction.xsd create mode 100644 es_elt/xsd/auditData/daq/InvalidMessageBatch.xsd create mode 100644 es_elt/xsd/auditData/daq/TransactionExtendedData.xsd create mode 100644 es_elt/xsd/auditData/daq/ValidatorErrors.xsd create mode 100644 es_elt/xsd/auditData/dem/Device.xsd create mode 100644 es_elt/xsd/auditData/dem/DeviceConfItemsVersionUpdate.xsd create mode 100644 es_elt/xsd/auditData/dlm/DenyAction.xsd create mode 100644 es_elt/xsd/auditData/dlm/IssuerDeny.xsd create mode 100644 es_elt/xsd/auditData/mam/AbtPurse.xsd create mode 100644 es_elt/xsd/auditData/mam/BulkAdjustmentExecutionResult.xsd create mode 100644 es_elt/xsd/auditData/mam/BulkAdjustmentExecutionStart.xsd create mode 100644 es_elt/xsd/auditData/mam/ContractTransfer.xsd create mode 100644 es_elt/xsd/auditData/mam/DiscardedTravelEvent.xsd create mode 100644 es_elt/xsd/auditData/mam/Media.xsd create mode 100644 es_elt/xsd/auditData/mam/MediaConsumptionAdjustment.xsd create mode 100644 es_elt/xsd/auditData/mam/MediaConsumptionAdjustmentCancellation.xsd create mode 100644 es_elt/xsd/auditData/mam/MediaConsumptions.xsd create mode 100644 es_elt/xsd/auditData/mam/MediaDenyAccessNotification.xsd create mode 100644 es_elt/xsd/auditData/mam/MediaGraceExpiryNotification.xsd create mode 100644 es_elt/xsd/auditData/mam/MediaNoSaleExpiryNotification.xsd create mode 100644 es_elt/xsd/auditData/mam/MediaProfileExpiryNotification.xsd create mode 100644 es_elt/xsd/auditData/mam/MediaReconstruction.xsd create mode 100644 es_elt/xsd/auditData/mam/PurseUsage.xsd create mode 100644 es_elt/xsd/auditData/mam/TravelEvent.xsd create mode 100644 es_elt/xsd/auditData/pom/CustomerOrder.xsd create mode 100644 es_elt/xsd/auditData/pom/OrderItem.xsd create mode 100644 es_elt/xsd/auditData/pom/RefundPayment.xsd create mode 100644 es_elt/xsd/auditData/pom/RefundPaymentRequest.xsd create mode 100644 es_elt/xsd/auditData/pom/RefundPaymentResponse.xsd create mode 100644 es_elt/xsd/auditData/rpe/BadDebt.xsd create mode 100644 es_elt/xsd/auditData/rpe/DebtRecoveryAttempt.xsd create mode 100644 es_elt/xsd/auditData/rpe/DebtRepayment.xsd create mode 100644 es_elt/xsd/auditData/rpe/DebtRepaymentResponse.xsd create mode 100644 es_elt/xsd/auditData/rpe/IgnoredJourney.xsd create mode 100644 es_elt/xsd/auditData/rpe/PaymentRequest.xsd create mode 100644 es_elt/xsd/auditData/rpe/PaymentRequestOldProcessor.xsd create mode 100644 es_elt/xsd/auditData/rpe/PaymentResponse.xsd create mode 100644 es_elt/xsd/auditData/rpe/RiskReassessment.xsd create mode 100644 es_elt/xsd/auditData/rpe/UnblockMediaAttempt.xsd create mode 100644 es_elt/xsd/auditData/scm/Fine.xsd create mode 100644 es_elt/xsd/auditData/scm/FineGdprExtraction.xsd create mode 100644 es_elt/xsd/auditData/scm/OrphanShift.xsd create mode 100644 es_elt/xsd/auditData/stf/AgentAccount.xsd create mode 100644 es_elt/xsd/auditData/stk/LowStock.xsd create mode 100644 es_elt/xsd/auditData/stk/StockEntityCreated.xsd create mode 100644 es_elt/xsd/auditData/stk/StockMovement.xsd create mode 100644 es_elt/xsd/auditData/stk/StockOperation.xsd create mode 100644 es_elt/xsd/auditData/stk/StockOrderCreated.xsd create mode 100644 es_elt/xsd/auditData/stk/StockProviderCreated.xsd create mode 100644 es_elt/xsd/auditData/stk/StockUpdateError.xsd create mode 100644 es_elt/xsd/auditData/stk/StockUpdated.xsd create mode 100644 es_elt/xsd/common/CappingDetails.xsd create mode 100644 es_elt/xsd/common/ClearingItemType.xsd create mode 100644 es_elt/xsd/common/CustomerPaymentType.xsd create mode 100644 es_elt/xsd/common/DenyActionStatus.xsd create mode 100644 es_elt/xsd/common/Discount.xsd create mode 100644 es_elt/xsd/common/ExtendedAddress.xsd create mode 100644 es_elt/xsd/common/ExternalIdentifierExchange.xsd create mode 100644 es_elt/xsd/common/Fee.xsd create mode 100644 es_elt/xsd/common/HalLink.xsd create mode 100644 es_elt/xsd/common/Headers.xsd create mode 100644 es_elt/xsd/common/Localized.xsd create mode 100644 es_elt/xsd/common/MediaConsumptionAdjustmentCommon.xsd create mode 100644 es_elt/xsd/common/MediaIdentification.xsd create mode 100644 es_elt/xsd/common/MultiTicketingVersionsAuditExchange.xsd create mode 100644 es_elt/xsd/common/OrderDetails.xsd create mode 100644 es_elt/xsd/common/OrderStatus.xsd create mode 100644 es_elt/xsd/common/PaymentRequestType.xsd create mode 100644 es_elt/xsd/common/PaymentStatus.xsd create mode 100644 es_elt/xsd/common/PaymentTriggerSource.xsd create mode 100644 es_elt/xsd/common/PaymentType.xsd create mode 100644 es_elt/xsd/common/ProductPriceWithDetails.xsd create mode 100644 es_elt/xsd/common/ProviderStatus.xsd create mode 100644 es_elt/xsd/common/RatingDetail.xsd create mode 100644 es_elt/xsd/common/RefundContractAuditExchange.xsd create mode 100644 es_elt/xsd/common/RefundPaymentAudit.xsd create mode 100644 es_elt/xsd/common/StockEntityExchange.xsd create mode 100644 es_elt/xsd/common/StockEntityItem.xsd create mode 100644 es_elt/xsd/common/StockHistoryAction.xsd create mode 100644 es_elt/xsd/common/StockOrderExchange.xsd create mode 100644 es_elt/xsd/common/StockProviderExchange.xsd create mode 100644 es_elt/xsd/common/TransactionExceptionType.xsd create mode 100644 es_elt/xsd/common/TransitContract.xsd create mode 100644 es_elt/xsd/common/TravelEventSource.xsd create mode 100644 es_elt/xsd/common/TravelEventType.xsd create mode 100644 es_elt/xsd/common/TravelStatus.xsd create mode 100644 es_elt/xsd/common/ValidationModel.xsd delete mode 100644 sds/app/.sds-api.yaml.kate-swp create mode 100644 superset-image/Dockerfile create mode 100644 superset-values-ref.yaml create mode 100644 superset-values.yaml create mode 100644 superset/app/database.yaml create mode 100644 superset/app/kustomization.yaml create mode 100644 superset/app/namespace.yaml create mode 100644 superset/base/kustomization.yaml create mode 100644 superset/base/superset.yaml create mode 100644 superset/base/valkey.yaml create mode 100644 superset/local/kustomization.yaml diff --git a/build.sh b/build.sh index 4537c86..6cf21b7 100644 --- a/build.sh +++ b/build.sh @@ -5,5 +5,13 @@ helm template valkey https://github.com/valkey-io/valkey-helm/releases/download/ helm template azurite https://github.com/viters/azurite-helm-chart/releases/download/azurite-2.0.0/azurite-2.0.0.tgz --values azurite-values.yaml > sds/base/azurite.yaml - helm template elasticsearch https://github.com/wiremind/wiremind-helm-charts/releases/download/elasticsearch-8.16.0/elasticsearch-8.16.0.tgz --values elasticsearch-values.yaml > sds/base/elasticsearch.yaml + + + +helm template valkey https://github.com/valkey-io/valkey-helm/releases/download/valkey-0.9.3/valkey-0.9.3.tgz --namespace reports-superset --values valkey-values.yaml > superset/base/valkey.yaml + +helm template superset https://github.com/apache/superset/releases/download/superset-helm-chart-0.15.2/superset-0.15.2.tgz --namespace reports-superset --values superset-values.yaml > superset/base/superset.yaml + + +docker buildx build --push -t registry.dev.k8s.transcity/reports/superset:5.0.0 superset-image diff --git a/elasticsearch-values.yaml b/elasticsearch-values.yaml index 4488c53..edd623e 100644 --- a/elasticsearch-values.yaml +++ b/elasticsearch-values.yaml @@ -20,5 +20,9 @@ resources: extraEnvs: - name: xpack.security.enabled value: "false" +- name: http.cors.enabled + value: "true" +- name: http.cors.allow-origin + value: "*" secret: password: GTRNZHCJTiGJ2CfY diff --git a/es_elt/.dockerignore b/es_elt/.dockerignore new file mode 100644 index 0000000..2c8730c --- /dev/null +++ b/es_elt/.dockerignore @@ -0,0 +1,2 @@ +samples/ +xsd/ diff --git a/es_elt/.gitignore b/es_elt/.gitignore new file mode 100644 index 0000000..cc37884 --- /dev/null +++ b/es_elt/.gitignore @@ -0,0 +1,3 @@ +/samples/ +__pycache__/ +/last.json diff --git a/es_elt/Dockerfile b/es_elt/Dockerfile new file mode 100644 index 0000000..94035ea --- /dev/null +++ b/es_elt/Dockerfile @@ -0,0 +1,41 @@ +FROM python:3.12-slim AS builder + +COPY --from=ghcr.io/astral-sh/uv:0.8 /uv /bin/ + +WORKDIR /app + +ENV UV_LINK_MODE=copy \ + UV_COMPILE_BYTECODE=1 + +RUN uv venv --clear --relocatable /app + +RUN --mount=type=cache,target=/root/.cache/uv \ + --mount=type=bind,source=uv.lock,target=uv.lock \ + --mount=type=bind,source=pyproject.toml,target=pyproject.toml \ + uv sync --locked --no-install-project --no-dev --no-editable + +RUN --mount=type=cache,target=/root/.cache/uv \ + --mount=type=bind,source=.,target=/usr/src \ + uv pip install /usr/src + + +FROM python:3.12-slim + +COPY --from=builder /app /app +WORKDIR /app + +COPY settings.toml /app/settings.toml + +RUN mkdir /state /data +VOLUME /state + +ENV ELT_ENV=docker \ + ELT_ELASTICSEARCH_URL=http://elasticsearch:9200/ \ + ELT_ELASTICSEARCH_USER=elasticsearch \ + ELT_ELASTICSEARCH_PASSWORD=password + +ENTRYPOINT [ "/app/bin/es-elt" ] + + + + diff --git a/es_elt/README.md b/es_elt/README.md new file mode 100644 index 0000000..e69de29 diff --git a/es_elt/compose.yaml b/es_elt/compose.yaml new file mode 100644 index 0000000..fd17278 --- /dev/null +++ b/es_elt/compose.yaml @@ -0,0 +1,21 @@ +name: es + +services: + + elasticsearch: + image: docker.elastic.co/elasticsearch/elasticsearch:9.1.3 + ports: + - "9200:9200" + - "9300:9300" + environment: + ES_JAVA_OPTS: "-Xms2g -Xmx2g" + ELASTIC_PASSWORD: "password" + http.cors.enabled: "true" + http.cors.allow-origin: "http://localhost:9800" + xpack.security.enabled: "false" + discovery.type: single-node + + elasticvue: + image: cars10/elasticvue + ports: + - "9800:8080" diff --git a/es_elt/cronjob.yaml b/es_elt/cronjob.yaml new file mode 100644 index 0000000..4c61d78 --- /dev/null +++ b/es_elt/cronjob.yaml @@ -0,0 +1,57 @@ +apiVersion: batch/v1 +kind: CronJob +metadata: + name: elt-es + namespace: transcity-demo-aws-pg +spec: + schedule: "5 * * * *" + concurrencyPolicy: Forbid + suspend: false + jobTemplate: + spec: + template: + spec: + restartPolicy: Never + nodeSelector: + workload: transcity-pg + containers: + - name: es-elt + image: 767397786784.dkr.ecr.eu-west-3.amazonaws.com/reports/es-elt:0.1.4 +# args: +# - --start-from +# - 2026-01-26/00 + env: + - name: ELT_ELASTICSEARCH_URL + value: http://elasticsearch-master.reports-sds.svc:9200 + - name: ELT_ELASTICSEARCH_USER + value: elastic + - name: ELT_ELASTICSEARCH_PASSWORD + value: GTRNZHCJTiGJ2CfY + - name: ELT_MAX_WORKERS + value: "2" + volumeMounts: + - name: export + mountPath: /data + - name: state + mountPath: /state + volumes: + - name: export + persistentVolumeClaim: + claimName: demo-aws-pg-dih-export + - name: state + persistentVolumeClaim: + claimName: elt-es + parallelism: 1 + backoffLimit: 3 +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: elt-es + namespace: transcity-demo-aws-pg +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 16Mi diff --git a/es_elt/pyproject.toml b/es_elt/pyproject.toml new file mode 100644 index 0000000..e90b327 --- /dev/null +++ b/es_elt/pyproject.toml @@ -0,0 +1,34 @@ +[project] +name = "es-elt" +version = "0.1.4" +description = "Add your description here" +readme = "README.md" +authors = [ + { name = "Paul-Henry PERRIN", email = "paul-henry.perrin@urbanandmainlines.com" } +] +requires-python = ">=3.12" +dependencies = [ + "cyclopts>=4.5.0", + "dynaconf>=3.2.12", + "elasticsearch>=9.2.1", + "xsdata-pydantic[cli,lxml]>=24.5", +] + +[project.scripts] +es-elt = "es_elt:main" + +[build-system] +requires = ["uv_build>=0.8.14,<0.9.0"] +build-backend = "uv_build" + +[dependency-groups] +dev = [ + "isort>=7.0.0", + "ruff>=0.14.13", + "taskipy>=1.14.1", +] + +[tool.taskipy.tasks] +generate = "cd src && ELT_ENV=default uv run xsdata generate --output pydantic --package es_elt.xml --recursive --unnest-classes ../xsd && uv run isort es_elt/xml && uv run ruff format es_elt/xml" +package = "docker buildx build -t es-elt:$(uv version --short) ." +deploy = "docker buildx build --push -t registry.dev.k8s.transcity/reports/es-elt:$(uv version --short) ." diff --git a/es_elt/settings.toml b/es_elt/settings.toml new file mode 100644 index 0000000..ff2469a --- /dev/null +++ b/es_elt/settings.toml @@ -0,0 +1,22 @@ +[global] +ingest_device_txn=false +ingest_bo_txn=false + +[default] +state_file="last.json" +include_audit= [ "mam_str_media_consumptions" ] +audit_dir = "/tmp" + + +[docker] +state_file="/state/last.json" +include_audit= [ "mam_str_media_consumptions" ] +audit_dir = "/data" + + +[dev] +state_file="last.json" +elasticsearch_url="http://localhost:9200" +elasticsearch_user="elasticsearch" +include_audit= [] +audit_dir = "samples" diff --git a/es_elt/src/es_elt/.gitignore b/es_elt/src/es_elt/.gitignore new file mode 100644 index 0000000..bf035d2 --- /dev/null +++ b/es_elt/src/es_elt/.gitignore @@ -0,0 +1,3 @@ + +# Ignore dynaconf secret files +.secrets.* diff --git a/es_elt/src/es_elt/__init__.py b/es_elt/src/es_elt/__init__.py new file mode 100644 index 0000000..36231d6 --- /dev/null +++ b/es_elt/src/es_elt/__init__.py @@ -0,0 +1,3 @@ +from .main import main + +__all__ = ("main",) diff --git a/es_elt/src/es_elt/__pycache__/__init__.cpython-312.pyc b/es_elt/src/es_elt/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5c0487fb21ec57585e74064bd974b3e973843605 GIT binary patch literal 215 zcmX@j%ge<81knlknMOeRF^B^LOi;#W5g=naLkdF*V-7n+a literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/__pycache__/config.cpython-312.pyc b/es_elt/src/es_elt/__pycache__/config.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4d93c73db9c22fbca29550327aba3afe6dabc453 GIT binary patch literal 1028 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 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/config.py b/es_elt/src/es_elt/config.py new file mode 100644 index 0000000..f7ec7e7 --- /dev/null +++ b/es_elt/src/es_elt/config.py @@ -0,0 +1,22 @@ +from pathlib import Path + +from dynaconf import Dynaconf, Validator + +settings = Dynaconf( + envvar_prefix="ELT", + environments=True, + env_switcher="ELT_ENV", + settings_files=["settings.toml", ".secrets.toml"], + validators=[ + Validator( + "include_audit", + cast=lambda v: (v.split(",") if isinstance(v, str) else v), + default=[], + ), + Validator("audit_dir", cast=lambda p: Path(p), condition=lambda p: p.is_dir()), + Validator("max_workers", cast=int), + ], +) + +# `envvar_prefix` = export envvars with `export DYNACONF_FOO=bar`. +# `settings_files` = Load these files in the order. diff --git a/es_elt/src/es_elt/main.py b/es_elt/src/es_elt/main.py new file mode 100644 index 0000000..ce3f915 --- /dev/null +++ b/es_elt/src/es_elt/main.py @@ -0,0 +1,345 @@ +import importlib +import json +import pkgutil +import re +import time +from concurrent.futures import ProcessPoolExecutor, wait +from pathlib import Path + +# from pprint import pprint +from typing import Any + +import cyclopts +from elasticsearch import BadRequestError, Elasticsearch, helpers +from xsdata_pydantic.bindings import XmlParser + +import es_elt.xml as xml + +from .config import settings + +## Generation: +## uv run xsdata generate --output pydantic --package es_elt.xml --recursive --unnest-classes ../xsd + +## Import all modules generated by xsd +models = [ + importlib.import_module(pkg.name) + for pkg in pkgutil.walk_packages(xml.__path__, prefix=xml.__name__ + ".") + if not pkg.ispkg +] + +## Associate xml namespace to top level generated class +audit_class = { + getattr(module, "__NAMESPACE__"): getattr(module, "AuditMessages") + for module in models + if hasattr(module, "__NAMESPACE__") and hasattr(module, "AuditMessages") +} + +## pprint(audit_class) + +re_ifsng = re.compile(r"^(X-)?[Ii]fsng-") +re_camel_case = re.compile(r"[a-z][A-Z]") + + +def clean_header(header: str): + # print(header) + h = re_ifsng.sub("", header) + h = h.replace("-", "_") + h = re_camel_case.sub(lambda x: f"{x.group()[0]}_{x.group()[1].lower()}", h) + return h + + +def to_document[T](audit: T) -> dict[str, Any]: + headers = {clean_header(elt.qname): elt.text for elt in audit.headers.any_element} + document = audit.model_dump(mode="json") + document["headers"] = headers + return document + + +def to_index_action(document, index: str): + action = { + "_index": index, + "_id": document["headers"]["msg_id"], + "_source": document, + } + return action + + +def list_days_after( + root: Path, start_day: str = None, stop_day: str = None +) -> list[Path]: + start_day = start_day or "0000-00-00" + stop_day = stop_day or "9999-99-99" + days = sorted(p for p in root.glob("????-??-??") if start_day <= p.name <= stop_day) + return days + + +def list_hours_after( + day: Path, start_hour: str = None, stop_hour: str = None +) -> list[Path]: + start_hour = start_hour or "00" + stop_hour = stop_hour or "99" + hours = sorted(p for p in day.glob("??") if start_hour <= p.name <= stop_hour) + return hours + + +include_audit = set(settings.include_audit or []) + + +def list_audit_types(hour: Path) -> list[Path]: + return list( + audit_dir + for audit_dir in (hour / "auditData").glob("*") + if (audit_dir.name in include_audit if include_audit else True) + ) + + +def list_txn_device(hour: Path) -> list[Path]: + return list((hour / "txn" / "device").glob("*/*")) + + +def list_txn_bo(hour: Path) -> list[Path]: + return list((hour / "txn" / "bo").glob("*/*")) + + +def ingest_file(es: Elasticsearch, audit_dir: Path, index_name: str) -> None: + def get_namespace(): + ns_rx = re.compile( + r'\<([^:>]+:)?AuditMessages.*xmlns(:[^ =]+)? *= *"(?P[^"]*)"' + ) + + sample = next(audit_dir.glob("*.xml")) + with sample.open("r") as sample_stream: + header = sample_stream.read(512) + + if match := ns_rx.search(header): + return match.groupdict()["ns"] + + return None + + parser = XmlParser() + + ns = get_namespace() + if ns is None: + print("Unable to find namespace") + return + message_class = audit_class[ns] + + try: + # Check if index exists silently + # if not es.indices.exists(index="pom_orders_post"): + es.indices.create(index=index_name) + + except BadRequestError as ex: + if ex.error != "resource_already_exists_exception": + raise + # print(f"Index {index_name} already exists") + + fail_doc = [] + + def generate_document(): + for xml_file in audit_dir.glob("*"): + # print(xml_file) + with xml_file.open("rb") as input_stream: + try: + result = parser.parse(input_stream, message_class) + # print(result) + for audit in result.audit_message: + yield to_index_action(to_document(audit), index_name) + except Exception as ex: + # print(f"Failed to read {xml_file}: {ex}, skipping") + # import traceback + # traceback.print_exception(ex) + fail_doc.append( + { + "_index": "error-ingestion-parsing", + "_id": xml_file.name, + "error": str(ex), + } + ) + + start_time = time.monotonic() + succeeded, failed = helpers.bulk( + es, + generate_document(), + raise_on_error=False, + max_retries=3, + initial_backoff=2, + ) + duration = int(time.monotonic() - start_time) or 1 + print( + f"{audit_dir} {index_name} {succeeded} inserted, failures: {len(failed)} in {duration // 60}m{duration % 60}s, ({(succeeded + len(failed)) / duration:.2f} records/s)" + ) + + if fail_doc: + helpers.bulk( + es, + fail_doc, + raise_on_error=False, + max_retries=3, + initial_backoff=2, + ) + + +def ingest_dir(ingest_dir, index_name): + es = Elasticsearch( + settings.elasticsearch_url, + basic_auth=(settings.elasticsearch_user, settings.elasticsearch_password), + ) + + try: + es.indices.create(index="error-ingestion-parsing") + + except BadRequestError as ex: + if ex.error != "resource_already_exists_exception": + raise + try: + es.indices.create(index="error-ingestion-insert") + + except BadRequestError as ex: + if ex.error != "resource_already_exists_exception": + raise + + try: + ingest_file(es, ingest_dir, index_name) + except Exception as ex: + print(f"Failed: {ingest_dir.name} {ex}") + + +def ingest( + *, + start_from: str | None = None, + stop_at: str | None = None, + single: str | None = None, +) -> None: + """Load audit xml files in ElasticSearch + + Parameters + ---------- + start_from + Start ingestion from this date/hour YYYY-MM-DD[/HH]. + stop_at + Last date / hour to ingest YYYY-MM-DD[/HH]. + single + Load only this directory YYYY-MM-DD[/HH]. + """ + + state_file = Path(settings.state_file) + + if state_file.is_file(): + state = json.loads(state_file.read_text()) + + start_day = state["last_day"] + start_hour = state["last_hour"] + else: + start_day = None + start_hour = None + + if single: + start_from = stop_at = single + + if start_from: + if "/" in start_from: + start_day, _, start_hour = start_from.partition("/") + else: + start_day = start_from + start_hour = None + + if stop_at: + if "/" in stop_at: + stop_day, _, stop_hour = stop_at.partition("/") + else: + stop_day = stop_at + stop_hour = None + else: + stop_day = None + stop_hour = None + + file_root = settings.audit_dir + + es = Elasticsearch( + settings.elasticsearch_url, + basic_auth=(settings.elasticsearch_user, settings.elasticsearch_password), + ) + if not es.ping(): + print("ElasticSearch not reachable") + return + + print( + f"Ingest files from {file_root}/{start_day or ''}/{start_hour or '00'} to {file_root}/{stop_day or ''}/{stop_hour or '23'} in {settings.elasticsearch_url}" + ) + + hour_dirs = sorted( + [ + hour + for day in list_days_after(file_root, start_day, stop_day) + for hour in list_hours_after( + day, + start_hour if day.name == (start_day or "0000-00-00") else None, + stop_hour if day.name == (stop_day or "0000-00-00") else None, + ) + ] + ) + + print("Will process:") + for h in hour_dirs: + print(f" {h}") + + audit_dirs = [ + audit_type for hour in hour_dirs for audit_type in list_audit_types(hour) + ] + + txn_devices_dirs = [ + txn_device for hour in hour_dirs for txn_device in list_txn_device(hour) + ] + + txn_bo_dirs = [txn_bo for hour in hour_dirs for txn_bo in list_txn_bo(hour)] + + with ProcessPoolExecutor(max_workers=settings.get("max_workers")) as pool: + futures = ( + [ + pool.submit( + ingest_dir, audit_dir, f"audit-{audit_dir.name.replace('_', '-')}" + ) + for audit_dir in audit_dirs + ] + + ( + [ + pool.submit( + ingest_dir, + txn_device_dir, + f"txn-device-{txn_device_dir.name.lower().replace('_', '-')}", + ) + for txn_device_dir in txn_devices_dirs + ] + if settings.ingest_device_txn + else [] + ) + + ( + [ + pool.submit( + ingest_dir, + txn_bo_dir, + f"txn-bo-{txn_bo_dir.name.lower().replace('_', '-')}", + ) + for txn_bo_dir in txn_bo_dirs + ] + if settings.ingest_bo_txn + else [] + ) + ) + + done, not_done = wait(futures) + # pprint([d.result() for d in done]) + + if hour_dirs: + last_dir = hour_dirs[-1] + last_day = last_dir.parts[-2] + last_hour = last_dir.parts[-1] + + state_file.write_text( + json.dumps({"last_day": last_day, "last_hour": last_hour}) + ) + + +def main() -> None: + cyclopts.run(ingest) diff --git a/es_elt/src/es_elt/xml/__init__.py b/es_elt/src/es_elt/xml/__init__.py new file mode 100644 index 0000000..b2a4ba5 --- /dev/null +++ b/es_elt/src/es_elt/xml/__init__.py @@ -0,0 +1 @@ +# nothing here diff --git a/es_elt/src/es_elt/xml/__pycache__/__init__.cpython-312.pyc b/es_elt/src/es_elt/xml/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e9a0bb434c9d194249c2b036a5f2995611393ac7 GIT binary patch literal 169 zcmX@j%ge<81n*+=Gx>q^V-N=&d}aZPOlPQM&}8&m$xy@u-* zRFs+Lkdv8|T2zv#SCX2Xpq^V-N=&d}aZPOlPQM&}8&m$xy@u-* zRFs+Lkdv8|T2zv#SCX2Xp?3P#Y6X@yg zx9|_rQqchiI_WCj3pti0LRiXZJQ=_D#{L)tM+DaQ{B8MeM#v}J+$=Vd%Po-iBquqQ zMA3vQmN1HY274=+4cr1gPwauufIEphdOYwPjUEp?i_znO#~=7ydMZc)wM>?3m8>W! zNN#_i$$IC6?q?h$WW9fywPjtsXw$Yc{q0vq=qI}Fn$s>X+p}%9NvlGHv=0X1nJ^|T zgaP6BKzO-p(6#(<1-g2YB=Hxx3(`%E!pia9SU$jGB+ckMn2zw qP~U+*6h3nw;EP2myyicbQ?Rur^TekxFHRober1-h*VhHc1q z%{POzotC!lXM(JqmA2te1vxthwrS^6WQEZ5Jwh`~eWb=?+0)XS1@9Eo6Yq@l=D?dD z^A@Cc8oV=O-dX7_fOnS7COs5;MXU5X4q_={%5AmUksEpKRtT?Jz10n@l*qi}hHSM> znJ=GiLYvj=A>%8&-R(5v1;(fhANwc3_?9qYE0owNs@N(`*&0=Cy{B2a$SpTmeNbOF7nbYX!u3`m)^(N|mkDqv00X8hCW7QjO}=pyoq$EBz=XKPI*T(lTlGO?Vx$rjB5x zX%1NVG1l}EtPF_Eq=hlo>=CT2?5mitN|K|{@ zk1;(e4CK8}g(=C|`U zekxV_S0A4_w^JzZmY>}zpW1om2(&Z5y@z5m9Db8Q!?Nr5QN})N>cs|j1nofhpXNDRth=P>%DhopwlnrWKdtL_W)MTI_;49ntGoxspzqkvck-8a+)Okr-8VeN;^It;6 zj8O`N1ZXA+(4=XWrkNxiDKtx`XpZI|rnaV&yAe}cI!VaC9btMJ z#_&+Q;QpK$W*leTZANY0lV|zvobQFvC*xmY^gk7OS6&^Euuu_q)ytJjqLieT8zKD& zZdSPbL}odPxOcM~F)MYDIV@G^aQGoZorS%VLkSi0)!bMXx)W08^SGOamHl@$2n{F7 zaj#-cETeTu6R)EW0p;*dOPgmje zn&y(Rtv&nT%9ti_m;}(y?J_hxc^>+=n(!X!3)1p~ZuLi1$0x0_9h} z$;7#81subSU>S!y#73F*KV7OlvO2Z}qe@z&+I7BOse zM&DIrjTp*2Bc6$CrwSBIm1a8#+O5hkhjFO6iO4%nV|lgy;kD%}b(jp^e({}zX+g?O zuJ6#EK25(F7kY2;4}gaO3~hivR7Fvqkh8y%W51CXo{-8Da^Y8UdAD$>pC1^ia^n6g u0|Jjh&QgpA9}l1+HU>A8S;e^D8xVL5E&x2p3~f!hv|WDgPXbT5e}4n{U-YH` literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/acm/__pycache__/user_login.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/acm/__pycache__/user_login.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3251a2b77ad64d167a2882b36e2d7557121eef73 GIT binary patch literal 3860 zcmbtX-ESMm5x?)_r$kYdVp(5|?ZiGKCG9prTfqpTNV4ljQi4bh5*ESX%w0(=?s&}J zF*b#wWdIv+-uxCn_@R$AtUn|`U-VF*%mN047D3Us3Sv>fPnp>xsUxHG10}$@xw*NW z-TlqX{_c<2Y)XP(m)xuUIW0+l#hd<5j}-Z&1Ikwtk%;U{o?MY-)D>6p)QT!})zv(` zqI*Wg5cisEdWlLx=(?NqQk9g@4L9v&DjCqtN>-6>NhI+=B1x(~SEE>!F=0)CHBI$_ zbzE38V9my?Ibj_G>v+sMA*?yDPQhB<0@aqyWlS5|t`4ktzz2D=JYc zT1&MwJ`Pi;)B7;TEtqOE;O5qym6f%vEpFUgzP-M-x@qY=VcT`bqqfacw(a?(>7t&o z?a!Ky8$DrJh{47{Jd;i^?#oZgd%j1@jRs|`R)5E>-K8vaN+GT8l|!#lX0+k6FeuZ& zrfygcShcU-_uR76B(=~cPUw`Ks#k8p0&N#pSZcIb24kVXcmXO8q|VqY?OUDf)E76| zWdHHdZkS+&pL|jQdAb{SB!Q$1NGi`2;UZO3MWPx}547jKJ*?zWXp*FFz{{2Dmw}htsoPrX#2G zVAy^J$w%l8Z2jG4%_TfJSOPcKT&O8SuvZ&aZunU1WOV(5zpBIGukh27cY8g^E;06JSlQ3L@AYW5P8y$<*L`Axr0i@zzx z8Zp;!`rN>E-X{C0o(CiyH+u`=`iD4uu8UQ0<3oybhjM%s16@FI5d=>#`dPEaDD-p@ zPINGCFyYQq7$I8A{^ed2G>NwU1AT<2#S}#41XgyWa=2;R#IHgnVD+#oD6nYQH56A- z{20ZXD1M6K=O~671$zT+C~zUc*B~BB$BLmRj&re!S-jNA6^;t$hbyLNv{w&Pb0=6b z;67UvPIJRfvqt;Yqe|arW>_sINxX=m#8e_5D1(yGz@ihiU&3%EBnD@K0W1WH zxK~c-m5vI1$SXlI;FT5Sq*`MC;8GZhkKi9{gLo)?GdbVytQRf| zROW|Kxdb@G>O( zR5=(MP`xCO!~_vtwKZYo`9vH#!PO${cqaZ}6u(OlWPe&5g>g58{!^ZH1POxU6w_f} zySUlEMsBhD}XdG(ipRC02$1p?qYhZw%e1d)Lv~>SFg4fb5gJ>Iz7Kn;bi$=41Gul-YktJu)*0Eeif{r~^~ literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/acm/user_group.py b/es_elt/src/es_elt/xml/audit_data/acm/user_group.py new file mode 100644 index 0000000..7998643 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/acm/user_group.py @@ -0,0 +1,108 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDateTime +from xsdata_pydantic.fields import field + +from es_elt.xml.common.headers import HeadersType + +__NAMESPACE__ = "http://www.thales.dc/UserGroup" + + +class ActionStatus(Enum): + ADDED = "ADDED" + UPDATED = "UPDATED" + DELETED = "DELETED" + + +class UserGroupAuditExchange(BaseModel): + model_config = ConfigDict(defer_build=True) + date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "Date", + "type": "Element", + "namespace": "", + }, + ) + user_group_name: None | str = field( + default=None, + metadata={ + "name": "UserGroupName", + "type": "Element", + "namespace": "", + }, + ) + user_group_id: None | int = field( + default=None, + metadata={ + "name": "UserGroupId", + "type": "Element", + "namespace": "", + }, + ) + user_id: None | str = field( + default=None, + metadata={ + "name": "UserId", + "type": "Element", + "namespace": "", + }, + ) + status: ActionStatus = field( + metadata={ + "name": "Status", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessageType(BaseModel): + model_config = ConfigDict(defer_build=True) + headers: None | HeadersType = field( + default=None, + metadata={ + "name": "Headers", + "type": "Element", + "namespace": "", + }, + ) + payload: UserGroupAuditExchange = field( + metadata={ + "name": "Payload", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessagesType(BaseModel): + model_config = ConfigDict(defer_build=True) + audit_message: list[AuditMessageType] = field( + default_factory=list, + metadata={ + "name": "AuditMessage", + "type": "Element", + "namespace": "", + }, + ) + user_group_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "UserGroupXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/UserGroup" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/acm/user_login.py b/es_elt/src/es_elt/xml/audit_data/acm/user_login.py new file mode 100644 index 0000000..6699ff5 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/acm/user_login.py @@ -0,0 +1,130 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDateTime +from xsdata_pydantic.fields import field + +from es_elt.xml.common.headers import HeadersType + +__NAMESPACE__ = "http://www.thales.dc/UserLogin" + + +class ConnexionStatus(Enum): + SUCCESS = "SUCCESS" + FAILED = "FAILED" + + +class UserLoginAuditExchangeUserGroups(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + user_group: list[str] = field( + default_factory=list, + metadata={ + "name": "UserGroup", + "type": "Element", + "namespace": "", + }, + ) + + +class UserLoginAuditExchange(BaseModel): + """ + :ivar date: + :ivar user_id: + :ivar realm: + :ivar result: + :ivar user_groups: List of userGroups associated to user + """ + + model_config = ConfigDict(defer_build=True) + date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "Date", + "type": "Element", + "namespace": "", + }, + ) + user_id: None | str = field( + default=None, + metadata={ + "name": "UserId", + "type": "Element", + "namespace": "", + }, + ) + realm: None | str = field( + default=None, + metadata={ + "name": "Realm", + "type": "Element", + "namespace": "", + }, + ) + result: ConnexionStatus = field( + metadata={ + "name": "Result", + "type": "Element", + "namespace": "", + "required": True, + } + ) + user_groups: None | UserLoginAuditExchangeUserGroups = field( + default=None, + metadata={ + "name": "UserGroups", + "type": "Element", + "namespace": "", + }, + ) + + +class AuditMessageType(BaseModel): + model_config = ConfigDict(defer_build=True) + headers: None | HeadersType = field( + default=None, + metadata={ + "name": "Headers", + "type": "Element", + "namespace": "", + }, + ) + payload: None | UserLoginAuditExchange = field( + default=None, + metadata={ + "name": "Payload", + "type": "Element", + "namespace": "", + }, + ) + + +class AuditMessagesType(BaseModel): + model_config = ConfigDict(defer_build=True) + audit_message: list[AuditMessageType] = field( + default_factory=list, + metadata={ + "name": "AuditMessage", + "type": "Element", + "namespace": "", + }, + ) + user_login_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "UserLoginXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/UserLogin" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/alm/__init__.py b/es_elt/src/es_elt/xml/audit_data/alm/__init__.py new file mode 100644 index 0000000..61e4cc9 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/alm/__init__.py @@ -0,0 +1,17 @@ +from es_elt.xml.audit_data.alm.action_list import ( + ActionEntryStatus, + ActionEntryType, + ActionListAuditExchange, + AuditMessages, + AuditMessagesType, + AuditMessageType, +) + +__all__ = [ + "ActionEntryStatus", + "ActionEntryType", + "ActionListAuditExchange", + "AuditMessageType", + "AuditMessages", + "AuditMessagesType", +] diff --git a/es_elt/src/es_elt/xml/audit_data/alm/__pycache__/__init__.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/alm/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fbd45b39d7c01d396dbd19e58ed0fdc19d389097 GIT binary patch literal 468 zcmZ9JzfQw25XS8!O)8-L8{i2TBBA&N5TZjjU;zm!i)CV~wPYue?TTjPDcIR~7TzE$ z6C0vPl{#@wDOB9>)7^LScc0|f!C(tPeenlbV1(ZMu&&^znV&-QggD|@A&qmagFMh- z9_lEMbT9AeIFB(JBOW~CJZZu-diPJ$xIGvaPFCfpbf&p+%uQ{(w;|m&wP=r5!lkrs zIOWofX2pb+W6=(}@k&_B#=?S^->%2*>HenVl{7XXTsDzM&!g`VdnADCwBMcxONDaT zOskA}OUjvJ8B;oAU0SLj%733SPtD9y2OjmrW#JSmpJMcxw9sxc=jPW8! SaIipt&%cC`mkinvK-rqo!E&JTTUXy-DZn*w~JM5HBlqWhAl4^Dz*fp8OJP0 zNlQ|RW%Qs0vOwEYZtFwPUK_;!NiQzYgLZ%b0g6S@TMerykW=3qN;0LW=%E7iIDGS) zH^cWme~w1O0{q(Kxqd4q2!F$u?$7TI#Pb#mz7vQ*L_;vek|^TXXZTF1B=NCi$fm#K zHpPW}V8PKsDjpPcsVlI=eTGevwG__S~IBDA|cZY|jk=E)&cT}P|T3R#Aw8lSQHQ@VGwT2bJ z&5+=(_BfCiLMwi)`M4Fk(#!$*CTAtOnBfXrhUwu7BXUV0{!)M_r671+s1Zzt*qBFw zXeM?kv%Q_qt!Ik4t%90aFXq1B!+!o=;X!_D{c*1FkWD_?%5P+M)a{+EpXc&fb#Hqk zQ_Ql+_TJ8JR^7?ww=x@S#C_YyKFAeWbbYH(+yT+*ZYG~)6TR09sfA?Nf*2GmRDl&o zf{tL#Ai0d>3X)kQb4actnLxtTGl`?AENs(u zx!Jm${);^2N%>_-1bACzGl&V{cvsG69sM>`EN2Dh>`y# z0prNCo*vS29XG_Vr)zyPH66}1$Tlg_HB~2GsLQjdrE7)?=@^pEhtqhtfpvEMiK*N6 zu-)y3?NC$gsK_g`_!@FIq5ITQpVW1O6nIWzfviDIP$d&yOH9Tj$zY=wv@(6| zV*yyG)eVOQP3mZv>5irg)e4>e&4*fM6GIHd1NZ3Chig!;Y`kv;-#(h{YIp+_d=&4j z^b{pF+HV9F&K{!b5zj^_A9FLXz$Pj`M~=cBDYj$bm$(*T<9vFTo1wt1z$S*6hK+C> z9@ryF2h~MgG@ctQ#YT5~_Tgt48?YCP?{X`-{@K|vG0bww@qvuV0;)=?WmUBlh#D4w zB1a9i%5bcciH`$0=e^YQ8UjV@?*frIAy zL9oO}sSetfwLTDZjpE%XaoP@0=B*SeV7_c&&;A9Gu2ZkT)og%2-L2F!R%6qFf>h$p@`-SQ*@$4{hgfr9cB?3E`4I#DQ5 zouuq1BfN--B=Sl=iS{HwX#&(3Ps&m<#$r4bZ&KUVo>KJvqO}00D6l}M543K;tF?&a zCK9a4y>RvPiY##8HjXT?tu>6QMv}613s)>5!4`)FE&6p`wCWIcNV?;1vpl3qpIH3B5dL|S}7|a+U(O15c(O%mh zf(t{C#JCB^lX2*$v6^;F$oqEJhAiTp7_cK;4aPc2U)_iFT(uh9BuAI9ul=QWC3?kI zEUNJ?7-|N3%8|61y2lc3io=`0mp1tVZVgbgSSaH-mj0yf(4_Ce1CkQ+Ln4FJyaLMO zdoc+U^;D-g;J)giP1I+uoFV-rCdCVXU@|VTet}Hx698i z64(1<_AUhf=|r;Y6^qH%XuK7he3w{hC9a+MCGd(sU=afQ%JHtpD{z}WuaJQOKk@uW zKraHDU*<%(%=vnjcRNw(MD7Kuzu|`~Pt@#??z$Ae0NXs%uo?Fvn1b71s$4bAY9-al zZdM2vM^&|u+05>4XV$ZD7=8uhSC@I*{BtDe4E!Sp6#G8-se5((%=!u-Xhr(~$Uh}f z6yFNhe-I}BF08y2Qg4OjAB5F+vDId@tw`eRvD_Bm(T)VfdoKyNop`UE*b_zNSZ@pX hY}b6_qVlrQ7U0od267zgjAilOY2xO;1bA|l{s+-VW&8jD literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/alm/action_list.py b/es_elt/src/es_elt/xml/audit_data/alm/action_list.py new file mode 100644 index 0000000..82b0e6a --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/alm/action_list.py @@ -0,0 +1,162 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDateTime +from xsdata_pydantic.fields import field + +from es_elt.xml.common.headers import HeadersType + +__NAMESPACE__ = "http://www.thales.dc/ActionList" + + +class ActionEntryStatus(Enum): + INITIALIZED = "INITIALIZED" + COMPLETED = "COMPLETED" + CANCELLED = "CANCELLED" + + +class ActionEntryType(Enum): + APPLICATION_ACTIVATION = "APPLICATION_ACTIVATION" + APPLICATION_UNBLOCKING = "APPLICATION_UNBLOCKING" + HOLDER_PROFILE_UPDATE = "HOLDER_PROFILE_UPDATE" + PURSE_RELOAD = "PURSE_RELOAD" + PURSE_DEBIT = "PURSE_DEBIT" + CONTRACT_SALE = "CONTRACT_SALE" + CONTRACT_UNBLOCKING = "CONTRACT_UNBLOCKING" + + +class ActionListAuditExchange(BaseModel): + """ + :ivar action_entry_status: Dictionary prefix: ActionEntryStatus + :ivar action_entry_type: Dictionary prefix: ActionEntryType + :ivar execution_date: + :ivar expiry_date: + :ivar media_id: + :ivar media_serial_number: + :ivar media_type_id: + :ivar submission_date: + :ivar system_action_number: + """ + + model_config = ConfigDict(defer_build=True) + action_entry_status: None | ActionEntryStatus = field( + default=None, + metadata={ + "name": "ActionEntryStatus", + "type": "Element", + "namespace": "", + }, + ) + action_entry_type: None | ActionEntryType = field( + default=None, + metadata={ + "name": "ActionEntryType", + "type": "Element", + "namespace": "", + }, + ) + execution_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ExecutionDate", + "type": "Element", + "namespace": "", + }, + ) + expiry_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ExpiryDate", + "type": "Element", + "namespace": "", + }, + ) + media_id: None | str = field( + default=None, + metadata={ + "name": "MediaId", + "type": "Element", + "namespace": "", + }, + ) + media_serial_number: None | str = field( + default=None, + metadata={ + "name": "MediaSerialNumber", + "type": "Element", + "namespace": "", + }, + ) + media_type_id: None | int = field( + default=None, + metadata={ + "name": "MediaTypeId", + "type": "Element", + "namespace": "", + }, + ) + submission_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "SubmissionDate", + "type": "Element", + "namespace": "", + }, + ) + system_action_number: None | str = field( + default=None, + metadata={ + "name": "SystemActionNumber", + "type": "Element", + "namespace": "", + }, + ) + + +class AuditMessageType(BaseModel): + model_config = ConfigDict(defer_build=True) + headers: None | HeadersType = field( + default=None, + metadata={ + "name": "Headers", + "type": "Element", + "namespace": "", + }, + ) + payload: ActionListAuditExchange = field( + metadata={ + "name": "Payload", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessagesType(BaseModel): + model_config = ConfigDict(defer_build=True) + audit_message: list[AuditMessageType] = field( + default_factory=list, + metadata={ + "name": "AuditMessage", + "type": "Element", + "namespace": "", + }, + ) + action_list_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "ActionListXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/ActionList" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/bpm/__init__.py b/es_elt/src/es_elt/xml/audit_data/bpm/__init__.py new file mode 100644 index 0000000..feacf1b --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/bpm/__init__.py @@ -0,0 +1,73 @@ +from es_elt.xml.audit_data.bpm.configuration_parameters import ( + AuditMessages as ConfigurationParametersAuditMessages, +) +from es_elt.xml.audit_data.bpm.configuration_parameters import ( + AuditMessagesType as ConfigurationParametersAuditMessagesType, +) +from es_elt.xml.audit_data.bpm.configuration_parameters import ( + AuditMessageType as ConfigurationParametersAuditMessageType, +) +from es_elt.xml.audit_data.bpm.configuration_parameters import ( + ConfigurationParametersAuditExchange, +) +from es_elt.xml.audit_data.bpm.ticketing_conf_item_creation import ( + AuditMessages as TicketingConfItemCreationAuditMessages, +) +from es_elt.xml.audit_data.bpm.ticketing_conf_item_creation import ( + AuditMessagesType as TicketingConfItemCreationAuditMessagesType, +) +from es_elt.xml.audit_data.bpm.ticketing_conf_item_creation import ( + AuditMessageType as TicketingConfItemCreationAuditMessageType, +) +from es_elt.xml.audit_data.bpm.ticketing_conf_item_creation import ( + TicketingConfItemCreationAuditExchange, +) +from es_elt.xml.audit_data.bpm.ticketing_set_creation import ( + AuditMessages as SetAuditMessages, +) +from es_elt.xml.audit_data.bpm.ticketing_set_creation import ( + AuditMessagesType as SetAuditMessagesType, +) +from es_elt.xml.audit_data.bpm.ticketing_set_creation import ( + AuditMessageType as SetAuditMessageType, +) +from es_elt.xml.audit_data.bpm.ticketing_set_creation import ( + ConfItem, + ConfItems, + TicketingSetCreationAuditExchange, + TicketingSetValidationStatus, +) +from es_elt.xml.audit_data.bpm.ticketing_set_publish import ( + AuditMessages as PublishAuditMessages, +) +from es_elt.xml.audit_data.bpm.ticketing_set_publish import ( + AuditMessagesType as PublishAuditMessagesType, +) +from es_elt.xml.audit_data.bpm.ticketing_set_publish import ( + AuditMessageType as PublishAuditMessageType, +) +from es_elt.xml.audit_data.bpm.ticketing_set_publish import ( + TicketingSetPublishAuditExchange, +) + +__all__ = [ + "ConfigurationParametersAuditMessageType", + "ConfigurationParametersAuditMessages", + "ConfigurationParametersAuditMessagesType", + "ConfigurationParametersAuditExchange", + "TicketingConfItemCreationAuditMessageType", + "TicketingConfItemCreationAuditMessages", + "TicketingConfItemCreationAuditMessagesType", + "TicketingConfItemCreationAuditExchange", + "SetAuditMessageType", + "SetAuditMessages", + "SetAuditMessagesType", + "ConfItem", + "ConfItems", + "TicketingSetCreationAuditExchange", + "TicketingSetValidationStatus", + "PublishAuditMessageType", + "PublishAuditMessages", + "PublishAuditMessagesType", + "TicketingSetPublishAuditExchange", +] diff --git a/es_elt/src/es_elt/xml/audit_data/bpm/__pycache__/__init__.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/bpm/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..862e3639dccae30a8817e5fa7f66a65ffae1bace GIT binary patch literal 1499 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 Apa1{> literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/bpm/__pycache__/ticketing_set_publish.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/bpm/__pycache__/ticketing_set_publish.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c7ffff4e5b381b5f64053575fd2935e047b9607b GIT binary patch literal 2938 zcmbtW&2Jk;6yNV%J9gqYZfGeXZb)c0H0y=}5~XShZTcaaC{hEe4ApAmnZzr0ZFhFv z)D?#ywFhp!HHRK@K_Vi50{;P*95}cmRf>cV;zpDpq?~v&Yi~9m;=)S%_U)TDZ)V>6 zz4zvqY&I>xvxipP^^_p|#(uhw8ZqMTIxsH;Bp}ffe6cKwjF&vgm&>xRlokFjd#bOM zHO?!Z?i*!;^QxEf)8#bqTDeCOZV5<#Dj);PKgp5(a)wJ&AWbKvSuX7XX(l1<<-E}_yL`i~giPLRtC(JXn?`0V_z_lz$QV zRj0O$pWI9r;aP0>cG&fc9pKPzFwazYATAfD!(u#IgwbMR)ZzvfHo*4?FJWRYHeC=-Qc-$7u~1ptsQA@BekDhDB65oY&u?NM7M2Juh=$WDM>S+g+05%!Auy| z$Z00;v+V@*LHjHl8e(J^$cC^BRM-k0}j< z(%_ohRhlSm7tCWy6QFcv?USz3(8zXS^qA5RC>5Sp_Skade0Sd`C$tB{$%KZal##e8 z#R;o`L`8BZo%NS8B(nsQ;3;d6fO?$FDvFX>L>Wl=Y;3`R(xxMxrY+gb(HzgVSsVn; zGG;|-fiR!WQN2^BNFV%?9FPr}5ka=r z|A`%(} zsNN4yx5}la!;rX(%@CW?0dh>4s!&{@0#3p{_@d-Z;OMy%v)z6ipl*4bGt>VK5vs7= zlMk6;4wR1>cLXT!GZ`bd;XMwN3sVsK?ZU`mpiFA3vs(jZ7bw=Hc5l9&JGEW7)GiF~ zs4}2Q*DXl(vGpJU6t>JEpeP`KN8Dv22dU2Q9U|O2q!0H9yas|!^)R)g2H9XDp^wCbftfJ!HM{}qH&2CsBvHM#BQT+qNua3_8D!LGw2%YcwnCVvqmDKR5Q2_k@x}%>EZ|vFk9u}z(C*H&_(d(?6^EXQ zx|9X2$*R#aQjK6~?GzoB@zlzZ7s{jB1 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/bpm/configuration_parameters.py b/es_elt/src/es_elt/xml/audit_data/bpm/configuration_parameters.py new file mode 100644 index 0000000..a646814 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/bpm/configuration_parameters.py @@ -0,0 +1,116 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDateTime +from xsdata_pydantic.fields import field + +from es_elt.xml.common.headers import HeadersType + +__NAMESPACE__ = "http://www.thales.dc/ConfigurationParameters" + + +class ConfigurationParametersAuditExchange(BaseModel): + model_config = ConfigDict(defer_build=True) + operator_id: str = field( + metadata={ + "name": "OperatorId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + creation_date_time: XmlDateTime = field( + metadata={ + "name": "CreationDateTime", + "type": "Element", + "namespace": "", + "required": True, + } + ) + activation_date_time: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ActivationDateTime", + "type": "Element", + "namespace": "", + }, + ) + filename: str = field( + metadata={ + "name": "Filename", + "type": "Element", + "namespace": "", + "required": True, + } + ) + identifier_version: str = field( + metadata={ + "name": "IdentifierVersion", + "type": "Element", + "namespace": "", + "required": True, + } + ) + type_value: str = field( + metadata={ + "name": "Type", + "type": "Element", + "namespace": "", + "required": True, + } + ) + content: str = field( + metadata={ + "name": "Content", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessageType(BaseModel): + model_config = ConfigDict(defer_build=True) + headers: None | HeadersType = field( + default=None, + metadata={ + "name": "Headers", + "type": "Element", + "namespace": "", + }, + ) + payload: ConfigurationParametersAuditExchange = field( + metadata={ + "name": "Payload", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessagesType(BaseModel): + model_config = ConfigDict(defer_build=True) + audit_message: list[AuditMessageType] = field( + default_factory=list, + metadata={ + "name": "AuditMessage", + "type": "Element", + "namespace": "", + }, + ) + configuration_parameters_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "ConfigurationParametersXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/ConfigurationParameters" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/bpm/ticketing_conf_item_creation.py b/es_elt/src/es_elt/xml/audit_data/bpm/ticketing_conf_item_creation.py new file mode 100644 index 0000000..4da05ea --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/bpm/ticketing_conf_item_creation.py @@ -0,0 +1,113 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDateTime +from xsdata_pydantic.fields import field + +from es_elt.xml.common.headers import HeadersType + +__NAMESPACE__ = "http://www.thales.dc/TicketingConfItemCreation" + + +class TicketingConfItemCreationAuditExchange(BaseModel): + """ + bpm_ticketing_configurationItem_post: At business parameters + configuration item creation. + """ + + model_config = ConfigDict(defer_build=True) + conf_item_type: str = field( + metadata={ + "name": "ConfItemType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + creation_date_time: XmlDateTime = field( + metadata={ + "name": "CreationDateTime", + "type": "Element", + "namespace": "", + "required": True, + } + ) + hash: str = field( + metadata={ + "name": "Hash", + "type": "Element", + "namespace": "", + "required": True, + } + ) + identifier_version: str = field( + metadata={ + "name": "IdentifierVersion", + "type": "Element", + "namespace": "", + "required": True, + } + ) + parameters_type: str = field( + metadata={ + "name": "ParametersType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + ticketing_conf_item_id: str = field( + metadata={ + "name": "TicketingConfItemId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessageType(BaseModel): + model_config = ConfigDict(defer_build=True) + headers: None | HeadersType = field( + default=None, + metadata={ + "name": "Headers", + "type": "Element", + "namespace": "", + }, + ) + payload: TicketingConfItemCreationAuditExchange = field( + metadata={ + "name": "Payload", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessagesType(BaseModel): + model_config = ConfigDict(defer_build=True) + audit_message: list[AuditMessageType] = field( + default_factory=list, + metadata={ + "name": "AuditMessage", + "type": "Element", + "namespace": "", + }, + ) + ticketing_conf_item_creation_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "TicketingConfItemCreationXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/TicketingConfItemCreation" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/bpm/ticketing_set_creation.py b/es_elt/src/es_elt/xml/audit_data/bpm/ticketing_set_creation.py new file mode 100644 index 0000000..db214ed --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/bpm/ticketing_set_creation.py @@ -0,0 +1,183 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDateTime +from xsdata_pydantic.fields import field + +from es_elt.xml.common.headers import HeadersType + +__NAMESPACE__ = "http://www.thales.dc/TicketingSetCreation" + + +class ConfItem(BaseModel): + model_config = ConfigDict(defer_build=True) + conf_item_id: str = field( + metadata={ + "name": "ConfItemId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + identifier_version: None | str = field( + default=None, + metadata={ + "name": "IdentifierVersion", + "type": "Element", + "namespace": "", + }, + ) + + +class TicketingSetValidationStatus(Enum): + DRAFT = "DRAFT" + APPROVED = "APPROVED" + REJECTED = "REJECTED" + DEPLOYED = "DEPLOYED" + + +class ConfItems(BaseModel): + model_config = ConfigDict(defer_build=True) + conf_item: list[ConfItem] = field( + default_factory=list, + metadata={ + "name": "ConfItem", + "type": "Element", + "namespace": "", + "min_occurs": 1, + }, + ) + + +class TicketingSetCreationAuditExchange(BaseModel): + """ + bpm_ticketing_set_approve_post: On approval of ticketing set by an + operator bpm_ticketing_set_reject_post: On rejection of ticketing set + by an operator bpm_ticketing_set_deploy_post: On deployment of + ticketing set by an operator bpm_ticketing_set_post: Creation of a + ticketing set. + + :ivar activation_date_time: + :ivar creation_date_time: + :ivar update_date_time: + :ivar hash: + :ivar identifier_version: + :ivar ticketing_set_id: + :ivar status: + :ivar conf_items: List of configuration items contained in the set + """ + + model_config = ConfigDict(defer_build=True) + activation_date_time: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ActivationDateTime", + "type": "Element", + "namespace": "", + }, + ) + creation_date_time: XmlDateTime = field( + metadata={ + "name": "CreationDateTime", + "type": "Element", + "namespace": "", + "required": True, + } + ) + update_date_time: XmlDateTime = field( + metadata={ + "name": "UpdateDateTime", + "type": "Element", + "namespace": "", + "required": True, + } + ) + hash: str = field( + metadata={ + "name": "Hash", + "type": "Element", + "namespace": "", + "required": True, + } + ) + identifier_version: str = field( + metadata={ + "name": "IdentifierVersion", + "type": "Element", + "namespace": "", + "required": True, + } + ) + ticketing_set_id: str = field( + metadata={ + "name": "TicketingSetId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + status: TicketingSetValidationStatus = field( + metadata={ + "name": "Status", + "type": "Element", + "namespace": "", + "required": True, + } + ) + conf_items: ConfItems = field( + metadata={ + "name": "ConfItems", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessageType(BaseModel): + model_config = ConfigDict(defer_build=True) + headers: None | HeadersType = field( + default=None, + metadata={ + "name": "Headers", + "type": "Element", + "namespace": "", + }, + ) + payload: TicketingSetCreationAuditExchange = field( + metadata={ + "name": "Payload", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessagesType(BaseModel): + model_config = ConfigDict(defer_build=True) + audit_message: list[AuditMessageType] = field( + default_factory=list, + metadata={ + "name": "AuditMessage", + "type": "Element", + "namespace": "", + }, + ) + ticketing_set_creation_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "TicketingSetCreationXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/TicketingSetCreation" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/bpm/ticketing_set_publish.py b/es_elt/src/es_elt/xml/audit_data/bpm/ticketing_set_publish.py new file mode 100644 index 0000000..53e7a4e --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/bpm/ticketing_set_publish.py @@ -0,0 +1,96 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDateTime +from xsdata_pydantic.fields import field + +from es_elt.xml.common.headers import HeadersType + +__NAMESPACE__ = "http://www.thales.dc/TicketingSetPublish" + + +class TicketingSetPublishAuditExchange(BaseModel): + """ + bpm_ticketing_set_publication: At ticketing set publication. + """ + + model_config = ConfigDict(defer_build=True) + activation_date_time: XmlDateTime = field( + metadata={ + "name": "ActivationDateTime", + "type": "Element", + "namespace": "", + "required": True, + } + ) + identifier_version: str = field( + metadata={ + "name": "IdentifierVersion", + "type": "Element", + "namespace": "", + "required": True, + } + ) + publication_date_time: XmlDateTime = field( + metadata={ + "name": "PublicationDateTime", + "type": "Element", + "namespace": "", + "required": True, + } + ) + ticketing_set_id: str = field( + metadata={ + "name": "TicketingSetId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessageType(BaseModel): + model_config = ConfigDict(defer_build=True) + headers: None | HeadersType = field( + default=None, + metadata={ + "name": "Headers", + "type": "Element", + "namespace": "", + }, + ) + payload: TicketingSetPublishAuditExchange = field( + metadata={ + "name": "Payload", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessagesType(BaseModel): + model_config = ConfigDict(defer_build=True) + audit_message: list[AuditMessageType] = field( + default_factory=list, + metadata={ + "name": "AuditMessage", + "type": "Element", + "namespace": "", + }, + ) + ticketing_set_publish_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "TicketingSetPublishXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/TicketingSetPublish" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/clm/__init__.py b/es_elt/src/es_elt/xml/audit_data/clm/__init__.py new file mode 100644 index 0000000..d87658f --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/clm/__init__.py @@ -0,0 +1,19 @@ +from es_elt.xml.audit_data.clm.customer_claim import ( + AuditMessages, + AuditMessagesType, + AuditMessageType, + CustomerClaimAuditExchange, + CustomerClaimAuthor, + CustomerClaimStatus, + CustomerClaimType, +) + +__all__ = [ + "AuditMessageType", + "AuditMessages", + "AuditMessagesType", + "CustomerClaimAuditExchange", + "CustomerClaimAuthor", + "CustomerClaimStatus", + "CustomerClaimType", +] diff --git a/es_elt/src/es_elt/xml/audit_data/clm/__pycache__/__init__.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/clm/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad7d7c1894e14a82c440a7c93ad812ec46172e64 GIT binary patch literal 518 zcmZvZF;2rU6o&02ZBkGK2qw4ySz-==5C}2C0uquJ%OqA4$!;Rs5$(t+*qPug+#o9x z8&IT5op>&-Xe&H?dVbIO{Y8F_;|&DsJHIcVF+y){vsm7|7#~6Lh;o!;i4>+-dDK%r z^;JLv)uA2LrCk-$5TicIy(dhgk)H(b?(-yU{wJ>u8RJqi_JYO`kEXYzfPW)(EwnBN zr?R{g8p5r}3Sw1Fw5Tg>4f%B-MrVr>bjY6$0Ug3vIRHJD)}v{3tg5_`;zV!3J@B5$ b8~{FijPb;aus1<~PlvC)Xw!QLbqw<#^>~#D literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/clm/__pycache__/customer_claim.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/clm/__pycache__/customer_claim.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ae954868e7e8a585fe31348f829d57e345a69c10 GIT binary patch literal 5096 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 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/clm/customer_claim.py b/es_elt/src/es_elt/xml/audit_data/clm/customer_claim.py new file mode 100644 index 0000000..e3aa4a0 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/clm/customer_claim.py @@ -0,0 +1,181 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDateTime, XmlDuration +from xsdata_pydantic.fields import field + +from es_elt.xml.common.headers import HeadersType + +__NAMESPACE__ = "http://www.thales.dc/CustomerClaim" + + +class CustomerClaimAuthor(Enum): + OPERATOR = "OPERATOR" + DEVICE = "DEVICE" + CUSTOMER = "CUSTOMER" + + +class CustomerClaimStatus(Enum): + SUBMITTED = "SUBMITTED" + IN_PROGRESS = "IN_PROGRESS" + APPROVED = "APPROVED" + REJECTED = "REJECTED" + CLOSED = "CLOSED" + + +class CustomerClaimType(Enum): + REFUND = "REFUND" + CUSTOMER_CLAIM = "CUSTOMER_CLAIM" + EVIDENCE_CHECK = "EVIDENCE_CHECK" + DEVICE_DYSFUNCTION = "DEVICE_DYSFUNCTION" + + +class CustomerClaimAuditExchange(BaseModel): + """ + clm_customer_claims_post: At claims creation or update. + + :ivar answer_expected: Whenever an operator answered a customer but + shall later come back to him. + :ivar author_id: Claim author id + :ivar author_type: Claim author type (operator, customer, ...). + :ivar claim_number: + :ivar customer_claim_type: Dictionary prefix: CustomerClaimType + :ivar customer_id: Customer account identifier. May be null + (DEVICE_DYSFUNCTION case). + :ivar last_event_duration: Duration since previous event sent + :ivar pending_limit_date: The date AFTER which the claim may be + processed. + :ivar status: Dictionary prefix: CustomerClaimStatus + :ivar text: Last message exchange during the conversation. + """ + + model_config = ConfigDict(defer_build=True) + answer_expected: bool = field( + metadata={ + "name": "AnswerExpected", + "type": "Element", + "namespace": "", + "required": True, + } + ) + author_id: str = field( + metadata={ + "name": "AuthorId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + author_type: CustomerClaimAuthor = field( + metadata={ + "name": "AuthorType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + claim_number: str = field( + metadata={ + "name": "ClaimNumber", + "type": "Element", + "namespace": "", + "required": True, + } + ) + customer_claim_type: CustomerClaimType = field( + metadata={ + "name": "CustomerClaimType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + customer_id: None | str = field( + default=None, + metadata={ + "name": "CustomerId", + "type": "Element", + "namespace": "", + }, + ) + last_event_duration: None | XmlDuration = field( + default=None, + metadata={ + "name": "LastEventDuration", + "type": "Element", + "namespace": "", + }, + ) + pending_limit_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "PendingLimitDate", + "type": "Element", + "namespace": "", + }, + ) + status: CustomerClaimStatus = field( + metadata={ + "name": "Status", + "type": "Element", + "namespace": "", + "required": True, + } + ) + text: None | str = field( + default=None, + metadata={ + "name": "Text", + "type": "Element", + "namespace": "", + }, + ) + + +class AuditMessageType(BaseModel): + model_config = ConfigDict(defer_build=True) + headers: None | HeadersType = field( + default=None, + metadata={ + "name": "Headers", + "type": "Element", + "namespace": "", + }, + ) + payload: CustomerClaimAuditExchange = field( + metadata={ + "name": "Payload", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessagesType(BaseModel): + model_config = ConfigDict(defer_build=True) + audit_message: list[AuditMessageType] = field( + default_factory=list, + metadata={ + "name": "AuditMessage", + "type": "Element", + "namespace": "", + }, + ) + customer_claim_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "CustomerClaimXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/CustomerClaim" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/clr/__init__.py b/es_elt/src/es_elt/xml/audit_data/clr/__init__.py new file mode 100644 index 0000000..31cd90a --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/clr/__init__.py @@ -0,0 +1,263 @@ +from es_elt.xml.audit_data.clr.apportionment_using_capping_ratio_plugin_details import ( + ApportionmentUsingCappingRatioPluginDetailsAuditExchange, + ApportionmentUsingCappingRatioPluginDetailsAuditExchangeDailyMediaConsumptions, + ApportionmentUsingCappingRatioPluginDetailsAuditExchangeDailyMediaConsumptionsDailyMediaConsumption, + ApportionmentUsingCappingRatioPluginDetailsAuditExchangeDailyMediaConsumptionsDailyMediaConsumptionLegApportionments, +) +from es_elt.xml.audit_data.clr.apportionment_using_capping_ratio_plugin_details import ( + AuditMessages as ApportionmentUsingCappingRatioPluginDetailsAuditMessages, +) +from es_elt.xml.audit_data.clr.apportionment_using_capping_ratio_plugin_details import ( + AuditMessagesType as ApportionmentUsingCappingRatioPluginDetailsAuditMessagesType, +) +from es_elt.xml.audit_data.clr.apportionment_using_capping_ratio_plugin_details import ( + AuditMessageType as ApportionmentUsingCappingRatioPluginDetailsAuditMessageType, +) +from es_elt.xml.audit_data.clr.apportionment_using_capping_ratio_plugin_details import ( + CappingRatioApportionmentItemType, +) +from es_elt.xml.audit_data.clr.apportionment_using_capping_ratio_plugin_details import ( + LegApportionment as UsingCappingRatioPluginLegApportionment, +) +from es_elt.xml.audit_data.clr.apportionment_using_capping_ratio_plugin_details import ( + LegApportionmentApportionmentItems as UsingCappingRatioPluginLegApportionmentApportionmentItems, +) +from es_elt.xml.audit_data.clr.clearing_operation import ( + AuditMessages as ClearingOperationAuditMessages, +) +from es_elt.xml.audit_data.clr.clearing_operation import ( + AuditMessagesType as ClearingOperationAuditMessagesType, +) +from es_elt.xml.audit_data.clr.clearing_operation import ( + AuditMessageType as ClearingOperationAuditMessageType, +) +from es_elt.xml.audit_data.clr.clearing_operation import ( + ClearingOperationAuditExchange, + ClearingOperationAuditExchangeFees, +) +from es_elt.xml.audit_data.clr.contract_apportionment import ( + AuditMessages as ContractApportionmentAuditMessages, +) +from es_elt.xml.audit_data.clr.contract_apportionment import ( + AuditMessagesType as ContractApportionmentAuditMessagesType, +) +from es_elt.xml.audit_data.clr.contract_apportionment import ( + AuditMessageType as ContractApportionmentAuditMessageType, +) +from es_elt.xml.audit_data.clr.contract_apportionment import ( + ContractApportionmentAuditExchange, + ContractApportionmentAuditExchangeContractRuleDetails, + ContractApportionmentAuditExchangeDailyMediaConsumptions, + DailyMediaConsumption, + DailyMediaConsumptionLegs, +) +from es_elt.xml.audit_data.clr.contract_apportionment import Leg as ContractLeg +from es_elt.xml.audit_data.clr.fee_contract import AuditMessages as FeeAuditMessages +from es_elt.xml.audit_data.clr.fee_contract import ( + AuditMessagesType as FeeAuditMessagesType, +) +from es_elt.xml.audit_data.clr.fee_contract import ( + AuditMessageType as FeeAuditMessageType, +) +from es_elt.xml.audit_data.clr.fee_contract import ( + FeeContractExchange, + FeeContractExchangeFeeItems, + FeeContractExchangeSettlementItems, + FeeContractItemType, + FeeSettlementItemType, +) +from es_elt.xml.audit_data.clr.fixed_origin_destination_apportionment_details import ( + AuditMessages as FixedOriginDestinationApportionmentDetailsAuditMessages, +) +from es_elt.xml.audit_data.clr.fixed_origin_destination_apportionment_details import ( + AuditMessagesType as FixedOriginDestinationApportionmentDetailsAuditMessagesType, +) +from es_elt.xml.audit_data.clr.fixed_origin_destination_apportionment_details import ( + AuditMessageType as FixedOriginDestinationApportionmentDetailsAuditMessageType, +) +from es_elt.xml.audit_data.clr.fixed_origin_destination_apportionment_details import ( + FixedOriginDestinationApportionmentDetailsAuditExchange, + FixedOriginDestinationApportionmentDetailsAuditExchangeLegApportionments, +) +from es_elt.xml.audit_data.clr.fixed_origin_destination_apportionment_details import ( + LegApportionment as FixedOriginDestinationLegApportionment, +) +from es_elt.xml.audit_data.clr.fixed_origin_destination_apportionment_details import ( + LegApportionmentApportionmentItems as FixedOriginDestinationLegApportionmentApportionmentItems, +) +from es_elt.xml.audit_data.clr.fixed_origin_destination_apportionment_details import ( + LegApportionmentLegRuleDetails, +) +from es_elt.xml.audit_data.clr.fixed_origin_destination_apportionment_errors import ( + ApportionmentErrorType, +) +from es_elt.xml.audit_data.clr.fixed_origin_destination_apportionment_errors import ( + AuditMessages as ErrorsAuditMessages, +) +from es_elt.xml.audit_data.clr.fixed_origin_destination_apportionment_errors import ( + AuditMessagesType as ErrorsAuditMessagesType, +) +from es_elt.xml.audit_data.clr.fixed_origin_destination_apportionment_errors import ( + AuditMessageType as ErrorsAuditMessageType, +) +from es_elt.xml.audit_data.clr.fixed_origin_destination_apportionment_errors import ( + FixedOriginDestinationApportionmentErrorsAuditExchange, +) +from es_elt.xml.audit_data.clr.manual_settlement_item_audit import ( + AuditMessages as ManualSettlementItemAuditMessages, +) +from es_elt.xml.audit_data.clr.manual_settlement_item_audit import ( + AuditMessagesType as ManualSettlementItemAuditMessagesType, +) +from es_elt.xml.audit_data.clr.manual_settlement_item_audit import ( + AuditMessageType as ManualSettlementItemAuditMessageType, +) +from es_elt.xml.audit_data.clr.manual_settlement_item_audit import ( + ManualSettlementItemExchange, + ManualSettlementItemStatus, +) +from es_elt.xml.audit_data.clr.media_consumptions_apportionment import ( + AuditMessages as MediaConsumptionsApportionmentAuditMessages, +) +from es_elt.xml.audit_data.clr.media_consumptions_apportionment import ( + AuditMessagesType as MediaConsumptionsApportionmentAuditMessagesType, +) +from es_elt.xml.audit_data.clr.media_consumptions_apportionment import ( + AuditMessageType as MediaConsumptionsApportionmentAuditMessageType, +) +from es_elt.xml.audit_data.clr.media_consumptions_apportionment import ( + Journey, + JourneyLegs, +) +from es_elt.xml.audit_data.clr.media_consumptions_apportionment import ( + Leg as MediaConsumptionsLeg, +) +from es_elt.xml.audit_data.clr.media_consumptions_apportionment import ( + LegErrorCodes, + MediaConsumptionApportionment, + MediaConsumptionApportionmentFees, + MediaConsumptionApportionmentJourneys, + MediaConsumptionsApportionmentAuditExchange, + MediaConsumptionsApportionmentAuditExchangeMediaConsumptionApportionments, +) +from es_elt.xml.audit_data.clr.settlement_period import ( + AuditMessages as SettlementPeriodAuditMessages, +) +from es_elt.xml.audit_data.clr.settlement_period import ( + AuditMessagesType as SettlementPeriodAuditMessagesType, +) +from es_elt.xml.audit_data.clr.settlement_period import ( + AuditMessageType as SettlementPeriodAuditMessageType, +) +from es_elt.xml.audit_data.clr.settlement_period import ( + Balances, + FeeSettlements, + ManualSettlements, + ProductApportionments, + SettlementPeriodApportionmentExchange, + SettlementPeriodExchange, + Settlements, + StakeholderAccountBalanceExchange, +) +from es_elt.xml.audit_data.clr.transaction_apportionment import ( + AuditMessages as TransactionApportionmentAuditMessages, +) +from es_elt.xml.audit_data.clr.transaction_apportionment import ( + AuditMessagesType as TransactionApportionmentAuditMessagesType, +) +from es_elt.xml.audit_data.clr.transaction_apportionment import ( + AuditMessageType as TransactionApportionmentAuditMessageType, +) +from es_elt.xml.audit_data.clr.transaction_apportionment import ( + TransactionApportionmentAuditExchange, + TransactionApportionmentAuditExchangeTransactionRuleDetails, + TransactionRuleDetail, + TransactionRuleDetailApportionmentItems, + TransactionRuleDetailPtomContractTypes, + TransactionRuleDetailSettlementItems, +) + +__all__ = [ + "ApportionmentUsingCappingRatioPluginDetailsAuditExchange", + "ApportionmentUsingCappingRatioPluginDetailsAuditExchangeDailyMediaConsumptions", + "ApportionmentUsingCappingRatioPluginDetailsAuditExchangeDailyMediaConsumptionsDailyMediaConsumption", + "ApportionmentUsingCappingRatioPluginDetailsAuditExchangeDailyMediaConsumptionsDailyMediaConsumptionLegApportionments", + "ApportionmentUsingCappingRatioPluginDetailsAuditMessageType", + "ApportionmentUsingCappingRatioPluginDetailsAuditMessages", + "ApportionmentUsingCappingRatioPluginDetailsAuditMessagesType", + "CappingRatioApportionmentItemType", + "UsingCappingRatioPluginLegApportionment", + "UsingCappingRatioPluginLegApportionmentApportionmentItems", + "ClearingOperationAuditMessageType", + "ClearingOperationAuditMessages", + "ClearingOperationAuditMessagesType", + "ClearingOperationAuditExchange", + "ClearingOperationAuditExchangeFees", + "ContractApportionmentAuditMessageType", + "ContractApportionmentAuditMessages", + "ContractApportionmentAuditMessagesType", + "ContractApportionmentAuditExchange", + "ContractApportionmentAuditExchangeContractRuleDetails", + "ContractApportionmentAuditExchangeDailyMediaConsumptions", + "DailyMediaConsumption", + "DailyMediaConsumptionLegs", + "ContractLeg", + "FeeAuditMessageType", + "FeeAuditMessages", + "FeeAuditMessagesType", + "FeeContractExchange", + "FeeContractExchangeFeeItems", + "FeeContractExchangeSettlementItems", + "FeeContractItemType", + "FeeSettlementItemType", + "FixedOriginDestinationApportionmentDetailsAuditMessageType", + "FixedOriginDestinationApportionmentDetailsAuditMessages", + "FixedOriginDestinationApportionmentDetailsAuditMessagesType", + "FixedOriginDestinationApportionmentDetailsAuditExchange", + "FixedOriginDestinationApportionmentDetailsAuditExchangeLegApportionments", + "FixedOriginDestinationLegApportionment", + "FixedOriginDestinationLegApportionmentApportionmentItems", + "LegApportionmentLegRuleDetails", + "ApportionmentErrorType", + "ErrorsAuditMessageType", + "ErrorsAuditMessages", + "ErrorsAuditMessagesType", + "FixedOriginDestinationApportionmentErrorsAuditExchange", + "ManualSettlementItemAuditMessageType", + "ManualSettlementItemAuditMessages", + "ManualSettlementItemAuditMessagesType", + "ManualSettlementItemExchange", + "ManualSettlementItemStatus", + "MediaConsumptionsApportionmentAuditMessageType", + "MediaConsumptionsApportionmentAuditMessages", + "MediaConsumptionsApportionmentAuditMessagesType", + "Journey", + "JourneyLegs", + "MediaConsumptionsLeg", + "LegErrorCodes", + "MediaConsumptionApportionment", + "MediaConsumptionApportionmentFees", + "MediaConsumptionApportionmentJourneys", + "MediaConsumptionsApportionmentAuditExchange", + "MediaConsumptionsApportionmentAuditExchangeMediaConsumptionApportionments", + "SettlementPeriodAuditMessageType", + "SettlementPeriodAuditMessages", + "SettlementPeriodAuditMessagesType", + "Balances", + "FeeSettlements", + "ManualSettlements", + "ProductApportionments", + "SettlementPeriodApportionmentExchange", + "SettlementPeriodExchange", + "Settlements", + "StakeholderAccountBalanceExchange", + "TransactionApportionmentAuditMessageType", + "TransactionApportionmentAuditMessages", + "TransactionApportionmentAuditMessagesType", + "TransactionApportionmentAuditExchange", + "TransactionApportionmentAuditExchangeTransactionRuleDetails", + "TransactionRuleDetail", + "TransactionRuleDetailApportionmentItems", + "TransactionRuleDetailPtomContractTypes", + "TransactionRuleDetailSettlementItems", +] diff --git a/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/__init__.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3f94e000dce03b9930252525d2512f1180604c5a GIT binary patch literal 5764 zcmcgwSyLNF5Y~kdr@3u&*uukY?UC_n4p_}zU59@_qxmJT~x8SyX)=1=@8tJbO7mE7?5-=(t|L_ zhG2*d!!R3x5f+B9r9X=LW0w9X>fg2WM^XQtr0eui7J&$hLX?fexa3tKuO9A8I*4>5 zJdkv~{*XO_M{EKnVW3&a9tz)$Hjij6OWA+B#u($A*y@Pj50foJX_e=%V>pAhnn}71chqIP& z>+f`=!&PExF`Z6vGm%O%EomMaiR8(Wnoi@#o{HREJ#&&sE^DTm(2d1RJYlYUjGd~< z6HRPiRdX3_oo#9Hgu0YU8X1-*?}mu|xAt7U2=jk%@068lvB2abGh{U8AQeD`U5sE4ye%MW>*wsb4%^O?=eiJ3JvDKf_EU zv*ocrt*(#d`V|$6&x;{?i&^;HRvSD%9geE3aGv56zL=~a1}W`qDQK~KOHF1}-I*3$U)g0WmLUeqide1< zF;*;QI6OIyu-Nzt;bKvTS;|A`nX0SF7>3&DI9-NlF3ul5Cc8Wp&lEknxXD5Vb~TtJ5x1V zk(f=$c4S4nD_;z|vK>KWpWz`_!Cf=Oa{YqNzaa)(wpO%3KM>j*}kNxRcBGcadZ3|(p}o6KwEyosQhpoO3nLDc08U`FMXx)4Sa zKJj*@A=-*La)0e)vxDF|!3~0&2x6v!)@`3V_8ffe%*rQb_G(VE+3KX&yD0V{cQY4` z-&AFCj)Ke6$Ggc_5Bch_%`bZnS}*bqaovR}%g{@v28z2f`LY+0L~$~?Oh&sDO{U94 zq|;lpiQD8kQanpsW|Vz%mCUq!QKOX`&la+e;_9ck+AgSK4f!2fA0QYc7$O)Z7(o!X z3*FV4Sae&lN8eLUf`(N72irvh*$BhrZIob)0ACY$_&tIML6l$|L5$eizvC3y>m{pN ze(2?M8Lq@&HpcrD#RGze1dj+N2qqD>!!fa`8H%Qxk&jG|sFWimu9|8jrt^quAG=D1 zE`v%8ne-{I2TEGr2bFmCLg+TX`UG)-6SGY?D7F1B(O;1f`lUZ==;`2x6$Tk8d?iiCKR5 zGHI+3ED@CKx$9-@(Jeqp$!h>+J%0~y?jc`~HS)7guu70`joHSvLA*@_vG%V$YV>2@ zkiC#o7vnDowg{e+hsn|&nCw!Dk$>Ej1U5WHo<+Vx7Iq1?2@1Vxri?*)mq2OHzf5qZ zhwqW8eS((+`9@Q|rSJn37GtIT+ID~k6MrQ0S7iQ(;Epk}cy}r*L zf<_-g@KQJr`cW?AkUI~Svr=;PJQ(o${`4SxuFctVGhY;yo5*>v#_K!xAbcYD+?KOf Z&@C@=9;_w<2!FNgd+U5ZRPz(e)Ia0Llgt1B literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/apportionment_using_capping_ratio_plugin_details.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/apportionment_using_capping_ratio_plugin_details.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ebd3f4bd57194b0bb80f39711aff83a3fb2e305f GIT binary patch literal 8302 zcmc&(%WvGq87G%Za-VvvRxe9dXxXu}vAt_GiPH*hYFU0nwY5=WyJ8Uw2J>(D+C=kQ`19I%O=tYMf6aoQ+7HQF&1#J<)r+(j%TyeQn9JfwG zfWzT8A7_U1{pNekU()FW16Nz!(2Yrk`8&RN7w=Tq{g+sV`G8Rwl{J_uTVh$PM~q07 zD{-{W8PO_V;;TYQpzl#btj0<)TIY>;HBm~?x?m)$sZy$%E~VjJEcHd0tBe}E$Eb0Q zf5188mHH_)0o0_AIzXu@pr(D)K}zidYQK+~q0|AO4*IA=l$rtRkdKTx z!~;c8qbjcoYD5)3j6RHY+C-3fOii2zKFXC0<%+8*;7WJ6`a-!9ApMv+(BT>krJB6Oq`xZ^7*{4Bc)ufH*1zN6Zb{3>e5C3ZL}j6oqQXv2He$vS!DK_I6W;rH8&^Rgkr+SPF>)R_(rSG}$rS{RmHj8s3g~ zKw^svj+kxEw1_Rba<=;yyyaY=QX^6PZlEI^caiO*0lqh#MR&J}eIU(4q*BbK?U*d% zPsy^KkmV|X696pRDOrBIsTgjHD9dWSEXzc|d8B|#GvqQ=kp$HcIfC?lS@!8x;GV>$ z=dd`2#c?R^Gy707kAGRH)T>&d0c!%Nx?t#cG-4@vODk6jR<%(e8g2@+pqa8}SOt@m zz3SbnQBaxyco`SGP&P=ROa3yd;x!LehsRY#5H8!eK?8DTL5xA|u%-eLA4 zNj|oBgvm~QeB!S|g{|wK=3m^+9^c6x-5H~L6`l|M5?DnHTEI*Fy7$? z+o8qPB-PU?fYkJLZEeA?bh}FS)uwkUo?&O&t=?tMh^J!WTQ;x|c$=|v#iBz;iY zgFU}M27yj8P~7K87VE=Uj36Om_k(s(nuaB>DrKuqT4WsPn=^)PT5mnkiruy|ihucJ z(CXD&m@gtMKe@+XA^5O= z@hU)mH#_5CZBL8>_IYuU1*DB^kA2SvHS8}OY7J;P5a=^;O;QwsX#ikf2Y~Sdr=yk3 z4cY@iz-+dt-hWD`0GtGL2I!}bo6sv3b6$GAX*HUbv`XsL5Wm0$5D!yYQV&2wQ16g2 zET*8a1!u6Lo#{cENzMTWfJ$^h<$x(y1P4I+g%teP-tX<9ka_pQX$B{Q8vX!Ie6D;0>+x#gMs6=^CqJ2IfWkz?i6FnMhNZ7ja-lC_~uCUkGoq_CbcD5UC zR}gNa+v68~aKiz^;r6v_HmhrKzuZ}0KqGbeZn>h=*0f9DzPFaaPg5YWFq_o|jXy%E zL3uu%u55i1Gjz2tnFGlLF+!Ep6=-N-<4agj4Sb+nDS~`E1JO=ifnsxn>dWAQ+_ndC zvvgtlt7%6vk6mBIB1}16!UinX;WiOwpd5uz<#_gGsvJ*tqZO_2@b>5#A6T)waIoHk zmR{WmL3jjAG1t*;Q3%O+HTsb6m|_7aB7|{Zh9RJfLnxQ%w8bD$hd>SIPPx*dTnV)g zxcZT+H30gu{C@z=rtH(BDsBfE+;d$)KhoO}0d3nOWl*+VGetKaLpj=W*D62BrKoiE z^Yv`xC+>=Cu>QY=J9JmrqoLa2%WTMz!E7EaGd|vrV z1U-{S3^TqQ@ohjHz6%;65a43>zjkX;e6}F#`imz4{Km5#`-xb-0ZaNZ+~HUr4#je) z&ey5Vf3~v^9sRaFddPlx8e?(`|2fQ<`~VxU_#@mVdQXQL6Y#p@ebk(s>NY2F;Sta9 zlaH9ll+b44USx-zc447|=-)w0uSxmlGl8waT*m(Pe=F0?e^C8?sPj$(elNcx(SToa z0)98y2NuR65Qi;6YRqSZJaWM5n2^`eYGugaVG^)TASH--FOMwMnpH?vU}Dj#VD`=J ze8!|*W4=uB2XFpt+#z@~oe;x~6fpPfPS>|VhCsBwa3Sdp3zN5FH{2=PoDNB=m^W2> zBoz22g{3`q*lZ5d|AElp$2cR3{GVVAz5k&8e-mj~d;+)mYbY>25FtLu_~L_6h%%)f ztv@DgU3-7XQ~JY4!g4Ib!q#i=l|7yY+hljMr+a#8U<@(2J!SZ;0!}J?522Ov?;&ub zIF)@EdEjM29EXf^bLk=kqOp#%CO{@#>}1k;)ybr@Y6_gRbf zJZRzr(!B%Rj&xP51q}PokcP!)aGTikJItp;N4>P!^bC#V+_`h7XgGz4yUsGNvT6b(mQvFnMj*Ms!Ju%J z{K*B>V}pKa(W4-D)OILk`+^KxmRONMNun;>L zKoO0%DmWxn6u7s7P+CPA7JG2_Lh1AzwT#oVi@f2yn6c--7aBlNtLx5C$Xd*e<1xZ&(`phpMj*I{Fl|MTSe;XhSfi!F*^yo*c&P21 zD2xE8Aek?FO?i6YYC0Lsapw#m4~hSLxn6~1ue__}NDRB5=xxU{FM2LZ&tsfZm$WPw z7nU#ISXo%S3^Swoe@t9D*#`{MX{17JBehvnzfok;RS2y8kBeApigX literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/clearing_operation.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/clearing_operation.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..46192ad1f5111837db40c8be1af25c098d976a4a GIT binary patch literal 3535 zcmbtW&2JmW72ogW*NT+H7?x$ptnAd@I3ca3NDRRVB1?AaG-3i&{bCR-);l9CP10}F;AK$*2 zc{A_#d-MKoSvd)QJ#ycF0@}CuXYkV#MLzx;C{H9J5jl`TxgpD_D}fTK4K>snn)t5< zdT2BZp=*H|W*Qlx>p?cmHFBUEjl3egFA?*hL^4!;rY7?@3c{KNYc6HAgf$P=LdrTJ ztQJ@&Qr4od7QtGg#o@fA?xa2SFI>cydERX{Td^Dat!88^JbTlP=vs@=fag|P%?*EZ z)%RlX(>Ht?5Kzq9l&-q5i(`L9T|!y3-fhztKi`Vu_EN2O|Ni}IyyXTosuHiZ5>S`< z&CQS6l!-;WWOIo$lb3wl0Og59rG`wThVolU#4SVI$}=VLX{d@sHKOim&*Z*E2a7>X zq7#FdB=c0=%MQIWaAsMOzX7h@f^G4IQ-LgZh#%j2;BC3hO$vL8Mk4F4As?4UA|rA` z?JBnV;_?sAS6!pAd%JFHJmWY`H>8fkbB+_XNGCwO;5eUk+@Sv@zZtadx`7kJS?)^5 zxWyN4ZL1a1S{u#|&hWj!ze`!{R%7aI)#9*SW3=63aa5y`LxZ>$F>jzg2!oo78*~Vy zs^$d@o+J}aYmka+yUR5Ul3B1CJ`pD5p>%L&_RBn*2A#bEVtp4; zar0I{L)whFw5xIrcfmCbo@Y^y+O9`;6<&mKZYPMH4cCiXtjjYYEQmpETY(?NpY+l6 zDOWcrt=l;^fy)+A;L(c!7&49*;N)oFcmkEoK$C`3umx0$j*~*N*?k>V`t^h zb3Mt_jbvJ!aRf6%H2(#@q|uD15$IL+)KT;jO`umH=2LAiGyG#)qr#|1+o)A@V(5~8&t+*3$0tjb^(~sVReVyp;x{WEl$%OxLkz@qZ+^5!qsZN) zwN-l0_h|p0othZ{0Ly#vaN2>Pa)(q?et@TFsRHdL#X?bkgu^;J14qlP^^>P+)jh#n*4#hkOo?-N}j?XCBmD$hGpaSmrMCuqI8c{JtXm<$D52At(b*^C; zY!*fWC(J%4#7x_Ez15_Z&nw@b797tt+>)IiqX;)0hqOF^Jko?+M1kyJZ=iS;MGeK9 zD8^WE8Eq&qwCD>EkEA2T)H6p@DMFmPa9F;WumPBHl+}R{syS=y)E}=LBO#7T(%HGg za^;lIS!3tdkEaJdZ{Ij5l@H73Mv3*dv9r3Ldo#r>4Cv*|3gAncS-=jJ$a~7O!JVLi zMJH;XS0*qaGh~7Rd@+Zt()+BENddTL4QI%}4Qi62;EQUPcu8CoeH`LVmw>0v&Hn9o zf*X-wwg@q9PxZ5!x*@r_m0XwH{MhXVEtfDGT-j9=xMgm(6T6)qOYwMSuj3GrSuAAZ zNqq}#DBgo7S_kn+`eu4=P~H|Ui!98IX5pf-^ZvedVUViYFAt&mi2|5Pc}+N7O{EH# z`F~Oc#jT$#NR>HE6?6v3+`QUxsypG>DpbR~VF z7t$Zb^K}8Xuzf~cMrk)p^{3o&#VraK8WyE(b+LMl&z_>{A0qNQ=!2jJ^6YXPGyiTU zrnYiYMQoMpP!OPK`~p@J#AmOA#^(n`_T*Z29z?{smrVDP3vrC(mvFv!Q3yQTL~V@Z zcs>jTLg6$XUSAZ~-NGmy-Y|C7_NVOu9eJyJSbl{(p4w{rg_!a*A~87 zN#OyP8Nq`F2KdRxxbYL}{iTK6bvnJy*GVih{Xs@Dob zxVDE7^kW)|29%jN_snV6eg$J0{BAi;eR=KHZ$4gLxdriv4h!p;s67I3VvA#^`XX~9 zX@TEmYv7E9JNi9{f2*=AKbIE1lU{o+UHPYU{kgPwSh~Jr^^AgSd_B{X;MJR7kd3eY l*puMZ`#_$QjmO=d1h3u|5P!|~bxppuUw-vJ61>Iv{STA3X6FC^ literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/contract_apportionment.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/contract_apportionment.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ba8942dd92aeb1e6464b32a3520ff4718c75dabf GIT binary patch literal 10764 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 CvF&yM literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/fixed_origin_destination_apportionment_errors.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/fixed_origin_destination_apportionment_errors.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aa72d98f49ce5331955b1e5a2aa23abab70289e0 GIT binary patch literal 4498 zcmbtYUvC@75x?W{?nsK1D2jIMSeDOr9P1pLw9~?9R3|MfQL2ayTNLu301lAHytMIyKR^uo1LQjtD1;&p$^r%i1VPa^3sObRW!=qq!?j^3Cu$=xX-*=^M-oX< z^_dcmTgwXV5NOj>Khlm0Z3eW%5p7OrM?jm6Xvc(h6tp=ycGN?@GiK)hfrFSbAF>;b zW?%oZP00D!vYP?umIcd1P% z^Q)Z}g=&7GS+`whi;`v5B<*@I4IjVyU?T`xQ^n%LhYt(EhV4?nK7$)k;+%vh88_0TAxl)FC%XQ1$DN2LIr53c`PJ3=%A7S*s+O$Tr4_5Ryu7qhonNXfmMc|$sk&4xEm)<>jI~n!uw1!U zwn~dj_bOFuW`1_Iyn>j?>Po4y3Kh_;PK(C5m2#;Hit61`#VRc*KcVhAnIu*1|?m01>69(g8^6)hES`rbmmd7G=z7{M>c!Qx@2T zfYvvPf!8WBil*|5)VHV`6n$3j6*oP%Xt#+ISi}zOV%=rMHMF+X6y~h3wyBw z*oadRZ7YlwFcm_ljOqq85MeaejBX1S15o$oYB&u)up4!1IBTLGT#OSKj&Ilotft{Z zrTcBcz?cOSu~`Rn6gI+?5s6Nbc?9--*qjat=iu1^b2bfFo$J7w*P0CGfFndVOd;}l zcXPFx4ww*ni8Mtw+@N;bYqlF;bFp@a$*vJ%vaURE*$m7TWp2V`> zvg?#582z~IFiN1GghvA#Bb$g%JSDg(SXJRe5!XId*ag@t%s_Dw#M2npVGefN4cJ>y z-#S-mHmLE5F(_^EbeBPbmt3zRJLbt&s{4%}FrMg9hG)V|wv5i7Cw!!j3_KUfaXnCe z5G}Y?5@gsK?vB$<%Ula7!E>b^0V!Dt9nQxFuz-&)qBB;7FDk+nd~AS!%q+tY&vGcn zKycl%NV9HP41+jNL(-xy#tF#(EP<#is2{Pc$N>V-*Rbh2iUNw8DBeZ!V-&YhzkBxF?wRrZq?$_| zD*82T`!0nz$@L<0nBA+V*e1#XjGzfGq4Vs zHF1<#HORmEQT|oQkjP9jNkf*-9QBaEGbtGnxk)jzJS$SpBK3WHo#HO9GIVl<>)jJ0 z8;2@8kK!tdNf2APF6SesO0I8&M@+6S+a0%Q6E=bP%P4TkTyKSXGucOE!C&?h1Pa=| zkEQoe{0v1O8Gnj86dt_(Z$Nw|eLHr($HGfjg%|p`1H72q$z15UYEE8|_kgMWWSx@* zZaU&E9O?h@7Mz#5{sM35N8Zv&0?r%B?ny!=GD(5Q(j@aF2B#$j28AbjTI!6NIX)Wo zmN?9Z?&9faL!Zmwf-usJrq&uHgeL2RQT4Rz_`&a@Um^j1&oj0-lR`*GQfw)=3OD(W ze()LQBcFT-Hw{QTJXs1LH{Wju)Qla6cvImjL@9{NCah6Rg)11P-}|2qzt*NttOwyp z6*KkUImP3+RyKnJ3TDk?sgGGD)S>tk-q)FR{T76^z5Jz<`}>Bry|^=G_Lwy*|4QB+ z&h2JT?d9ip^B4A21tOfT&&m)7-v8Qq`mY4+&z-HFzzjZt{YuUt-nufjKqOH&n#doia){YV>Edr{VS%ZseK7W zs+Wa6T?mIlXvI8*SGl!z&}MLzW4NdASRpRY3~kNha0>Gn{)xa7tq!ppfm3H1RKtvV z8W;wr7pvD)5VvVx1Sx(tyv`Ni4p*o*JvgKlx&e?SvBPt(x4XSdH$(IAjAd0yi{;hj z(sUW-CoXchG!fhc55CQ_{Qp@s7MUsaPQ>v^zt{zJ8bC~_LENfr?_E5s#!;RRetbNfrl;G!Z62#+V Sx2(xGck);MDZ#I>?!N&?5Wmg< literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/manual_settlement_item_audit.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/manual_settlement_item_audit.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f024a9fffc74852586995c586b1a1a667b2348be GIT binary patch literal 6260 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 D5UbEq literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/media_consumptions_apportionment.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/media_consumptions_apportionment.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..482e9f344aa8d31837664b42fc1c9b5d3396eb57 GIT binary patch literal 8044 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 JCcu{&?qBhXmLdQE literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/settlement_period.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/settlement_period.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..312efdd50f4b39b252e9cd1535c0c8caf65427f7 GIT binary patch literal 9559 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 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/transaction_apportionment.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/transaction_apportionment.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2d7892eded68b8f9bc076d49a597a99f19d68194 GIT binary patch literal 9305 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 P`Q5_P{}$kvANzj+%Ycd4 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/cmm/__pycache__/payment_means.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/cmm/__pycache__/payment_means.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..74b5a0c251b0e3fb39d2204d148686db646dd800 GIT binary patch literal 2932 zcmbtW&2Jl35a0EF`7?16H#DSaw@C?cKkNnsRG~tI619jXR3b%SK&!3aOS00g*L}Ng z;s~T5wG!NVK(vP*I8r7536~r=q))082_eLdC`L#*G4s53)*--wl{`D1nVt7BzxloQ zV=kAL;AxRnr<9VUpYc!U(b|f<|1BtwBq9;nl{~p3%cv*Zgr`&#Ppzopzv611UeSfF zx`vmmBth3Isf2W0BKm!a7*yF*+Bqv}VNHTH6|-i9H4WBG%$gO}ELd|i+s%+`_7(eo z!*oTNXY5+d5AD$LYe6x=Q}5UTo%acKdHR}PTXL4)b*dr6X-f`u34U;c+Jv%Tv00}F zXIH|oK2t8QuCA8C72BmjiB!wC?50O+;XJi#LA5>Ywlvx=dH*|59!XTH$V93nZo~dm zl!Qc8lGsu<<#tp>1B*^nq7j`KB>6)+3Yh+qX`7wN znoB-2?V9a2L#G;)(&FPQI{PFn0=L zJ0qiehB}yTX~r3Sq-mr zu!+umj;96}+;M7v_Ew0zmDudif(jOmC>>$|T1a+jK?hO+b*vBP+>auUq5xujFoIr;54o|@CP!`n z{9NBAMU@TU7lSBd&<5L?VdAs{t{+F2AA zP>iDxJ9-Ya$&Q!?C0GRUKzcSb)+zG%%f}T53V3}xccxRp^W|N@fPlfy$y0kN4UnK1 z=S9$Dtb{n$|0yAGdsIXyq0ucNFg>tws#`*tq@j#il6#Wa>g%3isTgMu6bJc0yoBOx zYS)lwgN(@wJAH#Y`4hW^i#vrg zdzu2sFpNokTOE5G#E^l*^dLh813dEnDTii}$xSb@r)oO2=O zM(?E};stphTk|kEUMZT1qH-|U^J!@wjt-WD&;{ttBfW+VdSv6cDn6J2PX&GfUSaM_ zJB2sCNwxd#O)x}!QPhtnL}#pnkJRJ}dQp4=zu+W@`_i8YS-Y|)q0l?@{MF6&P#C&U z?86gjsS!39oJdRo8&B4o#IC`C&TyyO$I&oA2+jnn<0^>@Tp(D4kF<}H5}Y5Us_%Jz ztrRgA!v*r3Wi8Ck&wY4n_Szf_B90KjEdoYj-o0x%NM3Cpl5eqDNPsm7Zh-h*k!AV0 zH2$k}{<$>ui!{BPe|00*(kEp7`&3JUSL>!cAnOmCEeT$&DG-mrA#_!~yj^(d4+-94 G1O5WKq3w78 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/cmm/customer.py b/es_elt/src/es_elt/xml/audit_data/cmm/customer.py new file mode 100644 index 0000000..40faa96 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/cmm/customer.py @@ -0,0 +1,447 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDate, XmlDateTime +from xsdata_pydantic.fields import field + +from es_elt.xml.common.headers import HeadersType + +__NAMESPACE__ = "http://www.thales.dc/Customer" + + +class CustomerAccountAuditExchangeCustomerProfilesCustomerProfile(BaseModel): + """ + :ivar profile_id: To get profile name, please reference to system + parameters + :ivar start_date: Start date of the profile + :ivar expiry_date: Expiry date of the profile + :ivar update_date: Last update date of the profile + """ + + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + profile_id: None | int = field( + default=None, + metadata={ + "name": "ProfileId", + "type": "Element", + "namespace": "", + }, + ) + start_date: None | XmlDate = field( + default=None, + metadata={ + "name": "StartDate", + "type": "Element", + "namespace": "", + }, + ) + expiry_date: None | XmlDate = field( + default=None, + metadata={ + "name": "ExpiryDate", + "type": "Element", + "namespace": "", + }, + ) + update_date: None | XmlDate = field( + default=None, + metadata={ + "name": "UpdateDate", + "type": "Element", + "namespace": "", + }, + ) + + +class CustomerAccountAuditExchangeNotificationChannelConfigurationsNotificationChannelConfigurationNotificationChannelTypeConfigurationsNotificationChannelTypeConfiguration( + BaseModel +): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + notification_channel_type: None | str = field( + default=None, + metadata={ + "name": "NotificationChannelType", + "type": "Element", + "namespace": "", + }, + ) + activation_status: None | bool = field( + default=None, + metadata={ + "name": "ActivationStatus", + "type": "Element", + "namespace": "", + }, + ) + + +class CustomerMedia(BaseModel): + model_config = ConfigDict(defer_build=True) + media_id: None | str = field( + default=None, + metadata={ + "name": "MediaId", + "type": "Element", + "namespace": "", + }, + ) + media_serial_number: None | str = field( + default=None, + metadata={ + "name": "MediaSerialNumber", + "type": "Element", + "namespace": "", + }, + ) + media_type_id: None | int = field( + default=None, + metadata={ + "name": "MediaTypeId", + "type": "Element", + "namespace": "", + }, + ) + + +class CustomerStatus(Enum): + """ + Customer Status enumeration. + """ + + INITIALIZED = "INITIALIZED" + ENABLED = "ENABLED" + BLOCKED = "BLOCKED" + CLOSED = "CLOSED" + DISABLED = "DISABLED" + + +class CustomerType(Enum): + INDIVIDUAL = "INDIVIDUAL" + ORGANIZATION = "ORGANIZATION" + + +class CustomerAccountAuditExchangeAttachedMedia(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + attached_media: list[CustomerMedia] = field( + default_factory=list, + metadata={ + "name": "AttachedMedia", + "type": "Element", + "namespace": "", + }, + ) + + +class CustomerAccountAuditExchangeCustomerProfiles(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + customer_profile: list[ + CustomerAccountAuditExchangeCustomerProfilesCustomerProfile + ] = field( + default_factory=list, + metadata={ + "name": "CustomerProfile", + "type": "Element", + "namespace": "", + }, + ) + + +class CustomerAccountAuditExchangeNotificationChannelConfigurationsNotificationChannelConfigurationNotificationChannelTypeConfigurations( + BaseModel +): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + notification_channel_type_configuration: list[ + CustomerAccountAuditExchangeNotificationChannelConfigurationsNotificationChannelConfigurationNotificationChannelTypeConfigurationsNotificationChannelTypeConfiguration + ] = field( + default_factory=list, + metadata={ + "name": "NotificationChannelTypeConfiguration", + "type": "Element", + "namespace": "", + }, + ) + + +class CustomerAccountAuditExchangeNotificationChannelConfigurationsNotificationChannelConfiguration( + BaseModel +): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + notification_type: None | str = field( + default=None, + metadata={ + "name": "NotificationType", + "type": "Element", + "namespace": "", + }, + ) + notification_channel_type_configurations: CustomerAccountAuditExchangeNotificationChannelConfigurationsNotificationChannelConfigurationNotificationChannelTypeConfigurations = field( + metadata={ + "name": "NotificationChannelTypeConfigurations", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class CustomerAccountAuditExchangeNotificationChannelConfigurations(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + notification_channel_configuration: list[ + CustomerAccountAuditExchangeNotificationChannelConfigurationsNotificationChannelConfiguration + ] = field( + default_factory=list, + metadata={ + "name": "NotificationChannelConfiguration", + "type": "Element", + "namespace": "", + }, + ) + + +class CustomerAccountAuditExchange(BaseModel): + """ + cmm_customers_post: At customer creation cmm_customer_put: At customer + update cmm_customer_delete: At customer delete + cmm_customer_status_post: At customer block it's account + cmm_customer_medias_post: At media attachment to a customer + cmm_customer_media_delete: At media detachment from a customer + cmm_customer_profile_post: At profile attached to customer. + + :ivar birth_date: Birth date of the customer + :ivar city: City associated to post code + :ivar country: Country name + :ivar customer_id: + :ivar customer_number: + :ivar customer_type: Type of customer : individual or organization + Dictionary prefix: CustomerType + :ivar nationality: Nationality (country ISO code) + :ivar postal_code: Address post code + :ivar state: State (only USA) + :ivar title: Title of the customer. Mr, Mrs, Miss + :ivar version: Monotonic version of the data + :ivar attached_media: Media attached to customer + :ivar customer_status: Customer Account Status + :ivar date: + :ivar user_id: + :ivar realm: + :ivar notification_channel_configurations: Audit Notification + :ivar customer_profiles: Customer Profiles + """ + + model_config = ConfigDict(defer_build=True) + birth_date: None | XmlDate = field( + default=None, + metadata={ + "name": "BirthDate", + "type": "Element", + "namespace": "", + }, + ) + city: None | str = field( + default=None, + metadata={ + "name": "City", + "type": "Element", + "namespace": "", + }, + ) + country: None | str = field( + default=None, + metadata={ + "name": "Country", + "type": "Element", + "namespace": "", + }, + ) + customer_id: None | str = field( + default=None, + metadata={ + "name": "CustomerId", + "type": "Element", + "namespace": "", + }, + ) + customer_number: None | str = field( + default=None, + metadata={ + "name": "CustomerNumber", + "type": "Element", + "namespace": "", + }, + ) + customer_type: None | CustomerType = field( + default=None, + metadata={ + "name": "CustomerType", + "type": "Element", + "namespace": "", + }, + ) + nationality: None | str = field( + default=None, + metadata={ + "name": "Nationality", + "type": "Element", + "namespace": "", + }, + ) + postal_code: None | str = field( + default=None, + metadata={ + "name": "PostalCode", + "type": "Element", + "namespace": "", + }, + ) + state: None | str = field( + default=None, + metadata={ + "name": "State", + "type": "Element", + "namespace": "", + }, + ) + title: None | str = field( + default=None, + metadata={ + "name": "Title", + "type": "Element", + "namespace": "", + }, + ) + version: None | int = field( + default=None, + metadata={ + "name": "Version", + "type": "Element", + "namespace": "", + }, + ) + attached_media: None | CustomerAccountAuditExchangeAttachedMedia = field( + default=None, + metadata={ + "name": "AttachedMedia", + "type": "Element", + "namespace": "", + }, + ) + customer_status: None | CustomerStatus = field( + default=None, + metadata={ + "name": "CustomerStatus", + "type": "Element", + "namespace": "", + }, + ) + date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "Date", + "type": "Element", + "namespace": "", + }, + ) + user_id: None | str = field( + default=None, + metadata={ + "name": "UserId", + "type": "Element", + "namespace": "", + }, + ) + realm: None | str = field( + default=None, + metadata={ + "name": "Realm", + "type": "Element", + "namespace": "", + }, + ) + notification_channel_configurations: ( + None | CustomerAccountAuditExchangeNotificationChannelConfigurations + ) = field( + default=None, + metadata={ + "name": "NotificationChannelConfigurations", + "type": "Element", + "namespace": "", + }, + ) + customer_profiles: None | CustomerAccountAuditExchangeCustomerProfiles = field( + default=None, + metadata={ + "name": "CustomerProfiles", + "type": "Element", + "namespace": "", + }, + ) + + +class AuditMessageType(BaseModel): + model_config = ConfigDict(defer_build=True) + headers: None | HeadersType = field( + default=None, + metadata={ + "name": "Headers", + "type": "Element", + "namespace": "", + }, + ) + payload: CustomerAccountAuditExchange = field( + metadata={ + "name": "Payload", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessagesType(BaseModel): + model_config = ConfigDict(defer_build=True) + audit_message: list[AuditMessageType] = field( + default_factory=list, + metadata={ + "name": "AuditMessage", + "type": "Element", + "namespace": "", + }, + ) + customer_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "CustomerXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/Customer" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/cmm/customer_profile.py b/es_elt/src/es_elt/xml/audit_data/cmm/customer_profile.py new file mode 100644 index 0000000..33ce8e5 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/cmm/customer_profile.py @@ -0,0 +1,238 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDate +from xsdata_pydantic.fields import field + +from es_elt.xml.common.headers import HeadersType + +__NAMESPACE__ = "http://www.thales.dc/CustomerProfile" + + +class ProfileStatus(Enum): + """ + Customer profile status enumeration. + """ + + REJECTED = "REJECTED" + PENDING_VALIDATION = "PENDING_VALIDATION" + VALIDATED = "VALIDATED" + EXPIRED = "EXPIRED" + + +class CustomerExplicitProfileAudit(BaseModel): + model_config = ConfigDict(defer_build=True) + profile_id: int = field( + metadata={ + "name": "ProfileId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + profile_number: str = field( + metadata={ + "name": "ProfileNumber", + "type": "Element", + "namespace": "", + "required": True, + } + ) + start_validity_date: None | XmlDate = field( + default=None, + metadata={ + "name": "StartValidityDate", + "type": "Element", + "namespace": "", + }, + ) + end_validity_date: None | XmlDate = field( + default=None, + metadata={ + "name": "EndValidityDate", + "type": "Element", + "namespace": "", + }, + ) + profile_status: None | ProfileStatus = field( + default=None, + metadata={ + "name": "ProfileStatus", + "type": "Element", + "namespace": "", + }, + ) + + +class CustomerProfileAuditExchangeCustomerImplicitProfileAudit(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + profile_id: None | str = field( + default=None, + metadata={ + "name": "ProfileId", + "type": "Element", + "namespace": "", + }, + ) + profile_number: str = field( + metadata={ + "name": "ProfileNumber", + "type": "Element", + "namespace": "", + "required": True, + } + ) + customer_birth_date: XmlDate = field( + metadata={ + "name": "CustomerBirthDate", + "type": "Element", + "namespace": "", + "required": True, + } + ) + profile_status: None | ProfileStatus = field( + default=None, + metadata={ + "name": "ProfileStatus", + "type": "Element", + "namespace": "", + }, + ) + + +class CustomerProfileAuditExchangeCustomerExplicitProfiles(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + customer_explicit_profile: list[CustomerExplicitProfileAudit] = field( + default_factory=list, + metadata={ + "name": "CustomerExplicitProfile", + "type": "Element", + "namespace": "", + }, + ) + + +class CustomerProfileAuditExchange(BaseModel): + """ + cmm_customers_profile_add: At customer profile creation + cmm_customers_profile_edit: At customer profile update + cmm_customers_profile_validation: At customer profile validation + cmm_customers_profile_remove: At customer profile delete + cmm_customers_profile_all_remove: At customer profile delete all. + + :ivar customer_id: + :ivar request_date: + :ivar update_date: + :ivar comment: + :ivar customer_explicit_profiles: Customer Explicit Profile + :ivar customer_implicit_profile_audit: Customer Implicit Profile + """ + + model_config = ConfigDict(defer_build=True) + customer_id: str = field( + metadata={ + "name": "CustomerId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + request_date: None | XmlDate = field( + default=None, + metadata={ + "name": "RequestDate", + "type": "Element", + "namespace": "", + }, + ) + update_date: None | XmlDate = field( + default=None, + metadata={ + "name": "UpdateDate", + "type": "Element", + "namespace": "", + }, + ) + comment: None | str = field( + default=None, + metadata={ + "name": "Comment", + "type": "Element", + "namespace": "", + }, + ) + customer_explicit_profiles: ( + None | CustomerProfileAuditExchangeCustomerExplicitProfiles + ) = field( + default=None, + metadata={ + "name": "CustomerExplicitProfiles", + "type": "Element", + "namespace": "", + }, + ) + customer_implicit_profile_audit: ( + None | CustomerProfileAuditExchangeCustomerImplicitProfileAudit + ) = field( + default=None, + metadata={ + "name": "CustomerImplicitProfileAudit", + "type": "Element", + "namespace": "", + }, + ) + + +class AuditMessageType(BaseModel): + model_config = ConfigDict(defer_build=True) + headers: None | HeadersType = field( + default=None, + metadata={ + "name": "Headers", + "type": "Element", + "namespace": "", + }, + ) + payload: CustomerProfileAuditExchange = field( + metadata={ + "name": "Payload", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessagesType(BaseModel): + model_config = ConfigDict(defer_build=True) + audit_message: list[AuditMessageType] = field( + default_factory=list, + metadata={ + "name": "AuditMessage", + "type": "Element", + "namespace": "", + }, + ) + customer_profile_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "CustomerProfileXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/CustomerProfile" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/cmm/payment_means.py b/es_elt/src/es_elt/xml/audit_data/cmm/payment_means.py new file mode 100644 index 0000000..eb67770 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/cmm/payment_means.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +from es_elt.xml.common.headers import HeadersType + +__NAMESPACE__ = "http://www.thales.dc/PaymentMeans" + + +class PaymentMeansAuditExchange(BaseModel): + """ + cmm_customer_paymentAgreements_post: At payment agreement creation + cmm_customer_paymentAgreement_delete: At payment agreement deletion + Used to export payment means of a customer for analytics. + + :ivar customer_id: + :ivar payment_mean_id: + :ivar version: Monotonic version of the data + """ + + model_config = ConfigDict(defer_build=True) + customer_id: None | str = field( + default=None, + metadata={ + "name": "CustomerId", + "type": "Element", + "namespace": "", + }, + ) + payment_mean_id: None | str = field( + default=None, + metadata={ + "name": "PaymentMeanId", + "type": "Element", + "namespace": "", + }, + ) + version: None | int = field( + default=None, + metadata={ + "name": "Version", + "type": "Element", + "namespace": "", + }, + ) + + +class AuditMessageType(BaseModel): + model_config = ConfigDict(defer_build=True) + headers: None | HeadersType = field( + default=None, + metadata={ + "name": "Headers", + "type": "Element", + "namespace": "", + }, + ) + payload: PaymentMeansAuditExchange = field( + metadata={ + "name": "Payload", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessagesType(BaseModel): + model_config = ConfigDict(defer_build=True) + audit_message: list[AuditMessageType] = field( + default_factory=list, + metadata={ + "name": "AuditMessage", + "type": "Element", + "namespace": "", + }, + ) + payment_means_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "PaymentMeansXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/PaymentMeans" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/daq/__init__.py b/es_elt/src/es_elt/xml/audit_data/daq/__init__.py new file mode 100644 index 0000000..b640a22 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/daq/__init__.py @@ -0,0 +1,75 @@ +from es_elt.xml.audit_data.daq.invalid_device_transaction import ( + AuditMessages as DeviceTransactionAuditMessages, +) +from es_elt.xml.audit_data.daq.invalid_device_transaction import ( + AuditMessagesType as DeviceTransactionAuditMessagesType, +) +from es_elt.xml.audit_data.daq.invalid_device_transaction import ( + AuditMessageType as DeviceTransactionAuditMessageType, +) +from es_elt.xml.audit_data.daq.invalid_device_transaction import ( + InvalidDeviceTransaction, + InvalidDeviceTransactionErrorCodes, +) +from es_elt.xml.audit_data.daq.invalid_message_batch import ( + AuditMessages as MessageBatchAuditMessages, +) +from es_elt.xml.audit_data.daq.invalid_message_batch import ( + AuditMessagesType as MessageBatchAuditMessagesType, +) +from es_elt.xml.audit_data.daq.invalid_message_batch import ( + AuditMessageType as MessageBatchAuditMessageType, +) +from es_elt.xml.audit_data.daq.invalid_message_batch import ( + InvalidMessageBatchAuditExchange, +) +from es_elt.xml.audit_data.daq.transaction_extended_data import ( + AuditMessages as TransactionExtendedAuditMessages, +) +from es_elt.xml.audit_data.daq.transaction_extended_data import ( + AuditMessagesType as TransactionExtendedAuditMessagesType, +) +from es_elt.xml.audit_data.daq.transaction_extended_data import ( + AuditMessageType as TransactionExtendedAuditMessageType, +) +from es_elt.xml.audit_data.daq.transaction_extended_data import ( + EmvTagType, + TransactionExtendedDataAuditExchange, +) +from es_elt.xml.audit_data.daq.validator_errors import ( + AuditMessages as ValidatorErrorsAuditMessages, +) +from es_elt.xml.audit_data.daq.validator_errors import ( + AuditMessagesType as ValidatorErrorsAuditMessagesType, +) +from es_elt.xml.audit_data.daq.validator_errors import ( + AuditMessageType as ValidatorErrorsAuditMessageType, +) +from es_elt.xml.audit_data.daq.validator_errors import ( + ValidatorErrorExchange, + ValidatorErrorsExchange, + ValidatorErrorsExchangeValidatorErrorExchanges, +) + +__all__ = [ + "DeviceTransactionAuditMessageType", + "DeviceTransactionAuditMessages", + "DeviceTransactionAuditMessagesType", + "InvalidDeviceTransaction", + "InvalidDeviceTransactionErrorCodes", + "MessageBatchAuditMessageType", + "MessageBatchAuditMessages", + "MessageBatchAuditMessagesType", + "InvalidMessageBatchAuditExchange", + "TransactionExtendedAuditMessageType", + "TransactionExtendedAuditMessages", + "TransactionExtendedAuditMessagesType", + "EmvTagType", + "TransactionExtendedDataAuditExchange", + "ValidatorErrorsAuditMessageType", + "ValidatorErrorsAuditMessages", + "ValidatorErrorsAuditMessagesType", + "ValidatorErrorExchange", + "ValidatorErrorsExchange", + "ValidatorErrorsExchangeValidatorErrorExchanges", +] diff --git a/es_elt/src/es_elt/xml/audit_data/daq/__pycache__/__init__.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/daq/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..289b11cf6b7e77988b7e07a242934bccffabf251 GIT binary patch literal 1566 zcmah|J8u&~5WYP-ekFEZPGW}uCeWC|S3rpnkGP<1pQ&$Z;_JCILK z-~=Rc1o2&h+y$QV^M>buFZcz+^T3OKQI!0WIg_Xinu^twL9=KzWzZ}cz5p>*ziQ)a z5Wj5WYY@L;<7*JVYIq^4i8X&sto!R$QwPn4)zm?=X*G4wY#CmR>Z0K{MAL7IZGW3M zeJ3b=CjPDCa=Y>qTWu3veSR2(>1(bO>vIK$)hWaN@sNXYWzuMDu5P@FM=T11Jw6J1 zd|$Fyv0fS`vEH5K=}MW%mq}m>wQQ8F{eq>vfhp5H>J3=j=WSP4x?;4?`dCpvm?+Ub zN_iacV2`D2T9eb8Z}DHTG?AuUmQ8O>+tq(ZXNF_ioQ11)UEjOX^X2*IJ99&n-ktBq zj%5L^NEQL~&XplqgPBZomRIT9GhL=a36tNyX0TWKY26T{uDzehG|E&gV^8=3_1)?D zs>xW>*3O&&rCam7rqm*qT0*D-ylL;~$6Qe!rJW-Ybr|kFg*{=NfW7a87t2fov&}Re zud~cyie-d6!V1CyLJeVjN#4!b#l<_L2e|BV4fX2?s|e;Y9?ecN@t-KS55P1aH&DKb zP)8Wg_~GnqqwJMXj;~V521=UI6jA!cIRUS8{>~dDf_p<)QyIq3qVRxA z7-h?4Bs0M--F?Ml!h@}2JH-w&r4545*$YSsoaG+1b&JE t{K^qRPF%|gw*&BJX=Bm-Sd=ZO@(puVh literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/daq/__pycache__/invalid_device_transaction.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/daq/__pycache__/invalid_device_transaction.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ffe9612c2a072163cde39f4dc73cc39b3bc4fc4d GIT binary patch literal 4383 zcmbtX-ESMm5x?Ud@AxTF60KU+*F~0VpBj^PjiQMfxKSj>k!!JOEe9!s;BexutOJfb zdhckNLLXGX29lT7Z}CI^01MW0{)xWmp%2Oe1_TsE(YFdxQNT}~+2hBNl8_c9z`4D- z+1c5hncvR*Ih##M@H-(}&R9;8{)#W1UpySh$KS!=8;M9ncBPtJk!2jm+*nPiC^faB zig(40*R+Zz#;U8=5|xA)$K7NtRY}2EtE6MnU5V(=B$A-YYbDfQ$p~%|xTy#?E4XRk zW+L1n!Oa49D8kJNZVtG4n(OM#w}#D;f8Zjf%+q$g?ge(>cy-^5@#IIgPggxcU7lL< z>Ko3ZWv3dT+~+lS*$(KMQ={-2-*Bi)kpBs_31$9Tt3lsh-wcArLaDU1wN(r@ZI}8* zQZ232pV+QLmgy6xO4pcO_w6dKR}J?WQayag#}ycSBT=a$6R8q=D2Xk|u!Y#`SSV9b zViHw}vZub5+nhLXG^&$0(TGkG-zs~_u5<#9FGXV@~};*IB15u!{k$ZkB>tqr_;#V}W0yzD3=j?Uyni`ao(BKG5w6FS5q!XsADb4jt$;wl=;val-teRRw->0oT)>ogmMF}na{ zZ5KRG=murhdedvvpQqxFDGy9!rvPh7>V@Fb4?hFzt*F`k3jcGC^44G0F0 zwRoZi%c6Vh0bEJKsI zidxt#4s(_jiE_(gBRE@Zrhub#hh$*jF93Ni{W~VdCyyi~npBv6HTRd%($4+wC*L`^ zIC)r@IVemWj87ct>PYG&u1{$@_g*AVBt5Q$YEfff5Ou@52;meBZww<5&apkEKb(nr zW;p8*&WSLbG3ZG~gnW!-zg72!x*C!s2U2+qdLcD@rc{cIfYfMLN+pFe5-3eBfYex5 z>PKhl%7_&&cBND@eul2Bu>Mj+YT^v3Auyeei$y( zn{&$8o^^dj|B$i8$l^UL@xyapV`C6uWv;J=-eu$P$}S<900Jnbw^53{1Ml0ZvR9|Z z?+w5euD2tCXV-cLt&m-nP2&71B-226f`J)XSo9!*1 zmw-J{o{pTanH#`ru3HxIs(`(S*X%M9#6?k?EOlh&%)`RmDVaHK=hrX3=*Uc87HbXM4AXcsq&hNV6NiQAQ+mdX z=$Y@gd0yLBFTK3i5xTu33n`;t>bAD?tNr1H$VG%lboNE$!k6ep1lNQ@8b_hlaO|EZ-RVUX!wOg)d6LuX$SqTYlnd^;^Zzcx^F zKElyJnB7Jmk`4I#Ye1e$-;Yjps)5<7XT{fLh_C(ZOvhJdu^WMr05gTqm58fwng7RC zPz$u31+LP&u7YwH?$Tt}RWeC|yE0HO#GqbKU{Uy0BJ~1x2Yfi{DpA~rzT%nahe3bM zfU4~=QNBgR(A8h^tSze0Hg0Y!H;XsUuf;$2$!E}2z!lAti$TB~xNxZ%>w&AO@Hmuv zfTi=Ws6bYB14jJE=T`yNQ=eE*LbYd!hk8FoBEsVyjt0VG8F@&y;eR?j-n}V` z#o7KOy{_%7?vI+C@VNEf!O+M-{=#A5y@SHcQCtE1(e+!9@AI#gBH@9{^o55C4EV{% zKLy&$4&#Y-)r0#N3{*23&Ft-Tr8G<`qSg?1%lxc-Wd1p&u(& zy;{wy7uz7l61ZB{vdW9AcOHDYxO4|B5Iu>wW0 zApcZkS$-qU{#}}XBNg9B*ZwBmJk0-cCwro0WbM`Xi3E?6=}%-?d)YdX@OkoCY*^M_ bz#BYHt^s)oEsYqf@{Rq%m48X_6leAy-rQ|5 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/daq/__pycache__/invalid_message_batch.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/daq/__pycache__/invalid_message_batch.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8282d387978694bc33a696f0306d04e8ccdfaa17 GIT binary patch literal 2705 zcmbtW&ugs%E(pjEX%uj=wy^Nql)no`$& zE3m7!)D1rsq^oJr&FYAXZXselLd2%pb1jZv%}8qstmz?ZR$52Eni;Z=N^2IZqjYo- zA=k+{`M*UtN8uxGqtT4q$ZIx2N9C#OZb%oKg!(*vquE&T?%woj5%?J^9`%XX@F{f( zW#Lk%Md9(-5_21&TN42m9@J<{C}M4Qx*kQX%jNRw>S`&fyFLv|q*nf{ao_blvPi?w zy-TmVQLSE!PZmonzA4)+P@W))stQ3>^(#ncRZ|hwiMpXZS7NWK0Tz?!#2_Y7iS<<9 zum@`vNl}}muY#-e8adP}1qriBR(N$rog6P7@`3Yh;ze+{y4$!*A6C*uxQKfXd+}Lt z5FZ9Fi_=^#&PPQ?lS~wwD@C_aOgxK;XHj~VWT2&W$SI*Kl;P#J=M$dYmqukT)cT#q2XJSFt7<<=;-8NJu`7$p$P4rt^OH*y&;6!B5o2L;Pr+86FB*TRT# zjk&88C(Uh)MI?-Q8snfz+P=^;7~gBVezIa=Oqw-}nP553fEV>~P4a`8U}DFFJ%{lS zo51@7Sl7`uNVH4J^=3fJtrlg>YkcB+%alcKDWbJ{ISN{3Mq5o5g=HFI>PO{})%xm# zz%RQ30xXVIhRl}_&3viVVI%M=DMmpFs~{euo~jyl&qjq)zn=SjqP%wdMfv@$!r5+N zvU~hQ_t?o^${0`YXx6N`R@p4fY$MAsdwG;UvQ;?#hEv{LyYb`1j__e;`!743!9FYx zGZ94GtHLI@swS}48nD+OF?$t~0gh(}5o{=Ii{vDGH7C#W zlB!8@i7H%T8HiTlR#LSr2ahZdVqIh7LZ1+#00OGt0v@_;KVome^TY87YQ=UZ#ZC(2q!6cs5Y%BsAtYli2X$v%Kn?{@QrEdWqr*t2v1(6G*$YqvJDr~3fTeK_zKLU~R)T^vGC zyyE{L2puTF5D>Hm2wKp#ZIVj*k3kfY1{5+aHIgZ8+=mXGC9QY3TQua1z{LG;xiXVgo-;X0g@A+?va9w;o zn-hU0Q9cmb0iu+IO^D0zdy^7Jnh zn=GqjZtCZsg+oLUuh~Zw9Sm?O+wXzgD|I<_6_~o}fDG~I(l+!#=^7owF?n_vn{Z$7 zWX37mqFVQYi#ga)9c_1f-`3J1w0)KW*NUSb%&REx1Bv6h+#s^{Is8H~cORi{;o48B zxD2m=A?Y5Dc`%?@94hDon0zEwg{Z(U6r;B=h7^_aA@Pz8X)_YwS9_Q@|LC zM7+`zMR|#){z4aCqUk@;+-p@;)K@kdyRw$uF^?$bv(65J+s^EmV*U&|+;*lx{E|v^ PU76i1oPUkrE;IKpc;TgD literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/daq/__pycache__/transaction_extended_data.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/daq/__pycache__/transaction_extended_data.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cfacb11c0f785354136ab69c09c7e60c6be4f683 GIT binary patch literal 6066 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 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/dem/__pycache__/device.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/dem/__pycache__/device.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7f93341ec607b69393f5f062186ba3289b1c9b58 GIT binary patch literal 7888 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 b>r{a*d;adwg%1^!&mE*r{ZoQ}uDJgIrz?u5 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/dem/__pycache__/device_conf_items_version_update.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/dem/__pycache__/device_conf_items_version_update.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2e7b08eb9703a66b7a1fa320f44cc58e13fa6996 GIT binary patch literal 4156 zcmb7H&2JmW72oBOyUQ<$k|;$Vmc&?fYbFk9)kRthN@7)3ZNU*?G;)!$2o`J3$XZ~R zWM-F^DfFNM4$z`K=$0P*2UM^Q`8(Pkbm&1DzyOh;C~~VR76p9jd$YULl2nj(0lpo+ z`R$vJ_ug;b{3V-BN$_;Zp0z(BNnhii@JaX$`TVcY_*^0qk!{J5tFnykm>qMJs^Y|} zaq(ZV6OLL{MLTY5j$YM8J7FiCR5b-{wVIAe_ave{mxxZ4mx^z{ni1M0Xj2hwR%p|p z%|x^#LYoEcNJKj-w4-uP@AXL8}%LQ$z7}FA?{J@j{6Hh!)TA11kBa^9q^^*zvOcp8lOv4s>(#F#vVyA zi7G@sj=hw9L^TeY1W`zwB#2DZ7x81Q*QdhPY9zS|P=QKaiqZutji`2}nB|lGvkWG= zeFQ5cbcZtIam%s^&xFgs^>S^)rVg!pTsn&Lc-?d;k9*jW#J1ZsYn1DZe%i7aC16T- zsAs~mO|G~e<0CcL6T^Z{F~nD+q48jJK6U|k>hD^mnB=-)pn1dKDZ_9Yq-A3}V;G;d zOxy2a7`Z$Hozynai1mcw?y?!wj~YhA>xRMRKzk&egOpx3%DWARmYYq=m{q@HTaPL8 z%o4b2x9mC1GNa7~^V~9Z4QhL3m({}NGsiBQEn;~FF0o9g13z@Vn1NWQYXs{sTEhLM zW}Bs9R3S3Za6ba^ne^qv{GYz}w~6w>hhNSvcJfzG^Yf=ObEnf+&XS4oR9DgF)Pu_5 z`njYf)U%wlu++(48^SE8C-KQcw~HWlH5{cc;&jl$BcI;~`P~sm)gb0nqCw2*FJt0! zsS5E%b&?X%lrCoY)TPnnZZlk?zv5ABe8`3;nRbgAMQQG5W9lo%%fO9f#JdyQDBttIND`z z;r{}PH&KWkT*B71P!yoy-U89*vDGzjR44y-;E>rl-)RZ`J#fgClZD$|Ne?}Orusb6 z zos9NSxl2)LG6tye9%_Q*1#a?%ay-?Gl?-_UP}7J4BA(&Je*g9J;~M7E#1bP`qXn2Z|D zhE?|vU%)A@-XMlK!fK3uH$7qc<5sKW-CH%12j_kb%Ah2jNP1Ix;)1z$AILZ$&)&^KhbfVV+Dy!z2BZ zuZZ|RQU($hl2i+l)KAX&N~2B-zb^Q58K8ET&jj-tqIkEM9Y{~E83t+8fT;WPl$CMu z1r*CDeuUy(6e}nOvi2R+p}?Q}XAqxBXE8mYpXH_eLP)ohvz`3H5S31;2b;fjL%N-w z@8koqv5OYV~kWX{@PX2}uJk#QE z03@_KGLXsq$>M5+-f>}ciA*wZ1Y}=^bfW`BXg)=> zm12(PMCxu)*EOF|tQP!8u5c}=m?DwbzNhI=d z$y{st`tRa(_5qGlK(U5mAVA(j9SYn-cN;_>tzZ3t@WXt+AHZApPO^)kyH-Bvz)?MT zTCWJuyAfA~!@wZ^)8qaB%~cmCF}OC0Wxpb3%zn=;EiT-1k zgjHX1&GVS`xaHAe?1E&93Qqu6z`1-I1{M_K^WKd?A{i{QjAt&nIQvrr}M z6a^HUC0zuq#WVq?XdcokA3(9f4m!pYxqNwt0)Lm|$ z@gSMyb1cj*jAQN5jun;H<9(l&wxFD6Nq|+m;q4%&Ifbaw85Fffgc5cS$g?0mRQnlu#^CnS(^i6zcZQ56oACcfRkO?G9Q zwq=KQ%$dNM&^^O#;12B??f|dS9s`m zJ(~y++gC-SdBx#Lmgb5@`BRb3j-x!z(r4$n`Bd2#1?7O^D$Aox1rRnGFME)K4RUJ9nO^d#fZ=tjX+qxUufSB%P> zfnBtgbC)isT2F;C?zq)eV!P-s6F1jbbhmZr_68A`uHb%I%0=)H>IiuIR1=|v;3Mn+ z6#Zp4+m_opSl%ES%Uvk-V$d({3mu9iAD+u($Z)ujvz!fiB8MFQf5^-QP!8I65Gn|J z2vvkO!hiPvFSFRJI7Ck~roskQ4`Cmn3sAUW$dV)szglxRT9c!-Y>7yv_HD)5K8<3T{KU% literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/dlm/__pycache__/deny_action.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/dlm/__pycache__/deny_action.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fa752e793b4e488ff750f6e879ae6e9894fa3947 GIT binary patch literal 8282 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 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/dlm/__pycache__/issuer_deny.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/dlm/__pycache__/issuer_deny.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..84926409ab2c39b5ab3532705bbe4a47a0d5048c GIT binary patch literal 3036 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 NEurt4_&4yA{1-c1;Zy(s literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/abt_purse.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/abt_purse.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3eeabe99a7a8e63889b9029b0f9c7616ef6ccc8f GIT binary patch literal 6691 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 To$Bie>C%pI?!N?{V)Oq8jsU+W literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/bulk_adjustment_execution_start.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/bulk_adjustment_execution_start.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f7364790aa4554db9f84369c23a99d33ea386cee GIT binary patch literal 2942 zcmbtW&2JM&6rcUJ9XoLn^ASFZn^2mi)F%A^nufN4L{N#Ow4^OEs#c3TM}-|v0Q zZ<$Prz_U#kE6F4wf8e0?7%`)4tpf9aP(l@t_)1ApkXJp`*GihNmvlMSJi|9jrsQ?c z@)MggX(Ne&q26`h zn{p#ISMeDPjrj`mD9SH0mogsCHEJjyx={DNo21{?!^mgV=+o+azds&H{fXXlepfrB=^NwURUqS{c-8^xA#Ge$`1Q>$DP0 zFO?VE>MeHXmsB1e-}N1z(TeMo!MAn4hX3W<1phd0+d&Rzx9cp79M<}Crxt|Kc>e1J zR?WN85H88@EXmh+P-bD6579?qKHz!SAOdgagZX^4z*-87=5eXCv9r7&$8#$H9cA;3 z!-*;$6&dOA7Q(`s_80;v$cirXs_QeMM*y)%A|KY=G7||rdxbL!wh}&zTeq|<8%Z$XdedY3fTfmUQ~+WIS>U z5i2hgBfnPUtQLTmi!5}Q7ZpQZZm~< z0J%ptRozHzrb+I#UyuJjSX{pHWMp(BH?p2Px;}Jx{os+!q%n}%)~w^^@@MyNY!S;a zH?!pI#71s(kIq?hO+UDH=-qA9;v=oyUY<%GOn0Udq=QD4RrOITjdYM0RBI-Z^-zN} zQehE1B@@!fYNwGw<1|ue8j>y3wveE`pw%bSNVBsdD^q0#;@7>!uxQNj3|N~LRO0U$&aA$D3aHZU=;B@5*a)vk$WAE?-*99BV;1{&8EQ1Lkq5bfyDA-0S}!2&J%zAs}eA5wvIm zN?fv82o0*x6rh-uW;i z%)8|%;Efo<{az)EZgj51p!h~)T$x%>YcNpmXk&%b;zV~5>24O+L;4l;A*it;IT=N~ za&}k^$yUT?3Y&s1+EHeJ3ivJs;%nnY&IH(ZHi1MTw#~-X5mn_FpGDL zV~=jAw)SG6YiVHyx(3Jl)vT@W_A6%mF2@O7F8B~;zJNExG`&mKbC-Tf#+ivh+AJux zx!WL4cI5ajOg_L_B%i|@9s+Wg{G%$yWo45{YPRb0k5}T&PAC9{XwBE}N51Yh6L!u0mOc#8BLN3eax~<-qrY zYN1);cmj8OfA9R>YsXIihyI8*;_jPqoY~2l>1$UfFHXbhWpk2+O-876Nw=F`Bqris z{1Kmm%@OVpp?Ib#it>~U|3ywdC55MC^iMMOTvZkIS%UOWDa)B{^MGPLPHq$UY`@p9 dnD-mo1U}oNKz;_f literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/contract_transfer.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/contract_transfer.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..931d88047dd9fae5bee6a40a84f559c812e3d957 GIT binary patch literal 3456 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 WaS-3bfY4QWW<7KCFA1LFfc^pISmY=G literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d655fdab1f5be11fc1e99f7d0b1fe8ace5e2a11c GIT binary patch literal 4478 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 TM57!L&peb*{6~OauB-n6%o4eJ literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_consumption_adjustment_cancellation.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_consumption_adjustment_cancellation.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d4a855260dad5b94f0319cfb25d9f9747b0ff212 GIT binary patch literal 7094 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

~v8pROc%-O%I+? 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 RgZ_QX>GAJF6#Lj%{2x-prb_?- literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_deny_access_notification.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_deny_access_notification.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d6b13c1ee05b29a553b92dfa84e7edc04b7de53e GIT binary patch literal 3072 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 CUKbqz literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_no_sale_expiry_notification.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_no_sale_expiry_notification.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f015cd1e8c0322f11ccacdfab325c67c4edc1143 GIT binary patch literal 3090 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 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_reconstruction.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_reconstruction.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1278125b3e19e8627e6644fe26179ead50053470 GIT binary patch literal 3209 zcmcgu&2QX96t~x2dq0y+vPs*tC27*MaUr`+D?qBMLTID5s97o+KC}o~u4j^1*t^@Y zmvk!*K`K(Y<<=f@;7Dlx0R9HJ=l}a_R0;gK>jTle9WBGKhN~p_I*Q=EUXYqz(2Y`z&IMgNh z!YyhM%KZ68jqXh@1wrjfvADdvTnLsdm-+=_7w0H(toNx6QwFSVL|Fw(oG3&kaUv6KP2JEtV;V_Nog}XURG?Bvq7nj? z?w~S9qLKoY?Vx&&M5W*ub&^9=qtEE)aq*$^>u@N9E>LFPuRAW`x-j1cW!9x0tpr?J zSGiiTJj&Goj*TZ#_iL6-d4kagb%#*`vm`tkSi}k}uE4?JBb=k@5S|w^-egv7$+0cB zRQK*v#)rc3#kSe3g!VpxzDJqUfewUFU)b8Xw7?;cuvf)_eP%-#?h%$P8EKv{P28(# z@|0SY zJ-fJ6^=PqHql`I~w_OK5Ft7>%wU>&4S1U4FtFpi^Qs1O*Q1qGIRv&t9(W(-ediWV}Ds zRP;e@<<=8>SJLC!PEH!1+|FM(gc;X1)!}E?+n~{j?fm&epiuxFdp6Jp4UcT+&l~~` zYb$fBmz%g6JJ;Us(ZS=w@c$P)jf|1yqrzjlBYOtVe)gfgWK|aFJj0{q>Gznk=u`xn z_26gpqR62bM1f53OjV#vK^M>6pnl*~L?#k1@;VVT@G+GB`39&JF63I+K}6GhiF4?2UqJ6-f*e^fH#fk zYsyCAc?_n5tE@pS&`GM3sM3%aHAsyaNR8P}YD|zGK=q15r5HJ$6C}-1-?xAxi0+W5 z64zVFe4nIsh4sNgtRKYy2q+3VWH+ns25bnPAN7~26*~IGXrvBseJLyoT)%5I+^R() zT;oY_y%yU4k-*Eit|0Jr)D94cyfGBl;qT9b=pu0J{8ldC3E~}Hg$R!8)ZSL8WugQ7G_q;fJy6%%qRw2f?4ZgTA%#P(;|HHa-$bYQlxHoGNTD{NqdZck z3m5t6BVztzpL_@{0MvD!oCyNv+^+}Ji0ylhq40QE{x88k#G>pNXna%zyV;$a&4)fQ zKMyA?8L7VyajxR#*%h2u_{lZY4*1ENXhZQ4{15xdYtz8|c7803(#;>bQCNB(2}7ZJXehF z0|&=d@d8E{mKPs8wa3y{{@T~cFpb^-Lo0b0+QA8NFp`iDa596VC_aO~kIlhj>Cc!P ze``lVp-K5yL?!<6PPi08OGYm?9t-uL&YF6+8J4Ua=R(Pt$9oCleKRe cO$lzzNf4_M{aLbQSLKVF`H4RyxQi3{3zOguz5oCK literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/purse_usage.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/purse_usage.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..193afa875ba0132cf95a63999992a24b234e5945 GIT binary patch literal 4746 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 ekrBYPI}-eK=7Bsb0JoTJAGiL1dww2bx$9K;C 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 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/pom/__pycache__/order_item.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/pom/__pycache__/order_item.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..73c22ba2cbad8b622656bc0bb1482406f10e61c4 GIT binary patch literal 5751 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 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/pom/customer_order.py b/es_elt/src/es_elt/xml/audit_data/pom/customer_order.py new file mode 100644 index 0000000..fd4e7f1 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/pom/customer_order.py @@ -0,0 +1,327 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDateTime +from xsdata_pydantic.fields import field + +from es_elt.xml.common.extended_address import ExtendedAddress +from es_elt.xml.common.headers import HeadersType +from es_elt.xml.common.media_identification import MediaIdentification +from es_elt.xml.common.order_details import ( + CustomerOrderStatus, + DeliveryOrderStatus, + OrderItemType, + PriceIncludingVat, +) + +__NAMESPACE__ = "http://www.thales.dc/CustomerOrder" + + +class User(BaseModel): + """ + :ivar realm: Realm of the user + :ivar user_id: Id the user + """ + + model_config = ConfigDict(defer_build=True) + realm: None | str = field( + default=None, + metadata={ + "name": "Realm", + "type": "Element", + "namespace": "", + }, + ) + user_id: None | str = field( + default=None, + metadata={ + "name": "UserId", + "type": "Element", + "namespace": "", + }, + ) + + +class Item(BaseModel): + """ + :ivar expiration_date: + :ivar item_number: + :ivar item_status: Dictionary prefix: DeliveryOrderStatus + :ivar item_type: Dictionary prefix: DeliveryOrderStatus + :ivar media: + :ivar price: + :ivar ticketing_version: + :ivar contract_serial_number: The serial number of the contract to + refund + :ivar initial_refund_amount: The initial refund amount calculated by + CSS + :ivar final_refund_amount: The final refund amount calculated by MAM + :ivar refund_fee: The fee applicate to refund a product + :ivar final_refund_amount_flag: If we have a final refund amount + :ivar payment_means_id: The payment means Id (When a Payment + Agreement is attached to a media) + :ivar purse_id: + """ + + model_config = ConfigDict(defer_build=True) + expiration_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ExpirationDate", + "type": "Element", + "namespace": "", + }, + ) + item_number: None | str = field( + default=None, + metadata={ + "name": "ItemNumber", + "type": "Element", + "namespace": "", + }, + ) + item_status: None | DeliveryOrderStatus = field( + default=None, + metadata={ + "name": "ItemStatus", + "type": "Element", + "namespace": "", + }, + ) + item_type: None | OrderItemType = field( + default=None, + metadata={ + "name": "ItemType", + "type": "Element", + "namespace": "", + }, + ) + media: None | MediaIdentification = field( + default=None, + metadata={ + "name": "Media", + "type": "Element", + "namespace": "", + }, + ) + price: None | PriceIncludingVat = field( + default=None, + metadata={ + "name": "Price", + "type": "Element", + "namespace": "", + }, + ) + ticketing_version: None | str = field( + default=None, + metadata={ + "name": "TicketingVersion", + "type": "Element", + "namespace": "", + }, + ) + contract_serial_number: None | str = field( + default=None, + metadata={ + "name": "ContractSerialNumber", + "type": "Element", + "namespace": "", + }, + ) + initial_refund_amount: None | PriceIncludingVat = field( + default=None, + metadata={ + "name": "InitialRefundAmount", + "type": "Element", + "namespace": "", + }, + ) + final_refund_amount: None | PriceIncludingVat = field( + default=None, + metadata={ + "name": "FinalRefundAmount", + "type": "Element", + "namespace": "", + }, + ) + refund_fee: None | PriceIncludingVat = field( + default=None, + metadata={ + "name": "RefundFee", + "type": "Element", + "namespace": "", + }, + ) + final_refund_amount_flag: None | bool = field( + default=None, + metadata={ + "name": "FinalRefundAmountFlag", + "type": "Element", + "namespace": "", + }, + ) + payment_means_id: None | str = field( + default=None, + metadata={ + "name": "PaymentMeansId", + "type": "Element", + "namespace": "", + }, + ) + purse_id: None | str = field( + default=None, + metadata={ + "name": "PurseId", + "type": "Element", + "namespace": "", + }, + ) + + +class Items(BaseModel): + model_config = ConfigDict(defer_build=True) + item: list[Item] = field( + default_factory=list, + metadata={ + "name": "Item", + "type": "Element", + "namespace": "", + }, + ) + + +class CustomerOrderAuditExchange(BaseModel): + """ + pom_orders_post: At order update. + + :ivar customer_id: + :ivar invoicing_data: + :ivar order_number: + :ivar order_status: Dictionary prefix: CustomerOrderStatus + :ivar payment_reference: + :ivar submission_date: + :ivar total_price: + :ivar items: + :ivar user: + """ + + model_config = ConfigDict(defer_build=True) + customer_id: None | str = field( + default=None, + metadata={ + "name": "CustomerId", + "type": "Element", + "namespace": "", + }, + ) + invoicing_data: None | ExtendedAddress = field( + default=None, + metadata={ + "name": "InvoicingData", + "type": "Element", + "namespace": "", + }, + ) + order_number: None | str = field( + default=None, + metadata={ + "name": "OrderNumber", + "type": "Element", + "namespace": "", + }, + ) + order_status: None | CustomerOrderStatus = field( + default=None, + metadata={ + "name": "OrderStatus", + "type": "Element", + "namespace": "", + }, + ) + payment_reference: None | str = field( + default=None, + metadata={ + "name": "PaymentReference", + "type": "Element", + "namespace": "", + }, + ) + submission_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "SubmissionDate", + "type": "Element", + "namespace": "", + }, + ) + total_price: None | PriceIncludingVat = field( + default=None, + metadata={ + "name": "TotalPrice", + "type": "Element", + "namespace": "", + }, + ) + items: None | Items = field( + default=None, + metadata={ + "name": "Items", + "type": "Element", + "namespace": "", + }, + ) + user: None | User = field( + default=None, + metadata={ + "name": "User", + "type": "Element", + "namespace": "", + }, + ) + + +class AuditMessageType(BaseModel): + model_config = ConfigDict(defer_build=True) + headers: None | HeadersType = field( + default=None, + metadata={ + "name": "Headers", + "type": "Element", + "namespace": "", + }, + ) + payload: CustomerOrderAuditExchange = field( + metadata={ + "name": "Payload", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessagesType(BaseModel): + model_config = ConfigDict(defer_build=True) + audit_message: list[AuditMessageType] = field( + default_factory=list, + metadata={ + "name": "AuditMessage", + "type": "Element", + "namespace": "", + }, + ) + customer_order_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "CustomerOrderXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/CustomerOrder" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/pom/order_item.py b/es_elt/src/es_elt/xml/audit_data/pom/order_item.py new file mode 100644 index 0000000..4b6c6fc --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/pom/order_item.py @@ -0,0 +1,238 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDateTime +from xsdata_pydantic.fields import field + +from es_elt.xml.common.extended_address import ExtendedAddress +from es_elt.xml.common.headers import HeadersType +from es_elt.xml.common.media_identification import MediaIdentification +from es_elt.xml.common.order_details import ( + CustomerOrderStatus, + DeliveryOrderStatus, + OrderItemType, + PriceIncludingVat, +) + +__NAMESPACE__ = "http://www.thales.dc/OrderItem" + + +class OrderItemAuditExchange(BaseModel): + """ + pom_order_item_put: At order item update. + + :ivar order_number: + :ivar order_status: Dictionary prefix: CustomerOrderStatus + :ivar customer_id: + :ivar invoicing_data: + :ivar expiration_date: + :ivar item_number: + :ivar item_status: Dictionary prefix: DeliveryOrderStatus + :ivar item_type: Dictionary prefix: DeliveryOrderStatus + :ivar media: + :ivar price: + :ivar ticketing_version: + :ivar contract_serial_number: The serial number of the contract to + refund + :ivar initial_refund_amount: The initial refund amount calculated by + CSS + :ivar final_refund_amount: The final refund amount calculated by MAM + :ivar refund_fee: The fee applied to refund a product + :ivar final_refund_amount_flag: If we have a final refund amount + :ivar payment_means_id: The payment means Id (When a Payment + Agreement is attached to a media) + :ivar purse_id: + """ + + model_config = ConfigDict(defer_build=True) + order_number: None | str = field( + default=None, + metadata={ + "name": "OrderNumber", + "type": "Element", + "namespace": "", + }, + ) + order_status: None | CustomerOrderStatus = field( + default=None, + metadata={ + "name": "OrderStatus", + "type": "Element", + "namespace": "", + }, + ) + customer_id: None | str = field( + default=None, + metadata={ + "name": "CustomerId", + "type": "Element", + "namespace": "", + }, + ) + invoicing_data: None | ExtendedAddress = field( + default=None, + metadata={ + "name": "InvoicingData", + "type": "Element", + "namespace": "", + }, + ) + expiration_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ExpirationDate", + "type": "Element", + "namespace": "", + }, + ) + item_number: None | str = field( + default=None, + metadata={ + "name": "ItemNumber", + "type": "Element", + "namespace": "", + }, + ) + item_status: None | DeliveryOrderStatus = field( + default=None, + metadata={ + "name": "ItemStatus", + "type": "Element", + "namespace": "", + }, + ) + item_type: None | OrderItemType = field( + default=None, + metadata={ + "name": "ItemType", + "type": "Element", + "namespace": "", + }, + ) + media: None | MediaIdentification = field( + default=None, + metadata={ + "name": "Media", + "type": "Element", + "namespace": "", + }, + ) + price: None | PriceIncludingVat = field( + default=None, + metadata={ + "name": "Price", + "type": "Element", + "namespace": "", + }, + ) + ticketing_version: None | str = field( + default=None, + metadata={ + "name": "TicketingVersion", + "type": "Element", + "namespace": "", + }, + ) + contract_serial_number: None | str = field( + default=None, + metadata={ + "name": "ContractSerialNumber", + "type": "Element", + "namespace": "", + }, + ) + initial_refund_amount: None | PriceIncludingVat = field( + default=None, + metadata={ + "name": "InitialRefundAmount", + "type": "Element", + "namespace": "", + }, + ) + final_refund_amount: None | PriceIncludingVat = field( + default=None, + metadata={ + "name": "FinalRefundAmount", + "type": "Element", + "namespace": "", + }, + ) + refund_fee: None | PriceIncludingVat = field( + default=None, + metadata={ + "name": "RefundFee", + "type": "Element", + "namespace": "", + }, + ) + final_refund_amount_flag: None | bool = field( + default=None, + metadata={ + "name": "FinalRefundAmountFlag", + "type": "Element", + "namespace": "", + }, + ) + payment_means_id: None | str = field( + default=None, + metadata={ + "name": "PaymentMeansId", + "type": "Element", + "namespace": "", + }, + ) + purse_id: None | str = field( + default=None, + metadata={ + "name": "PurseId", + "type": "Element", + "namespace": "", + }, + ) + + +class AuditMessageType(BaseModel): + model_config = ConfigDict(defer_build=True) + headers: None | HeadersType = field( + default=None, + metadata={ + "name": "Headers", + "type": "Element", + "namespace": "", + }, + ) + payload: OrderItemAuditExchange = field( + metadata={ + "name": "Payload", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessagesType(BaseModel): + model_config = ConfigDict(defer_build=True) + audit_message: list[AuditMessageType] = field( + default_factory=list, + metadata={ + "name": "AuditMessage", + "type": "Element", + "namespace": "", + }, + ) + order_item_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "OrderItemXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/OrderItem" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/pom/refund_payment.py b/es_elt/src/es_elt/xml/audit_data/pom/refund_payment.py new file mode 100644 index 0000000..51e32b0 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/pom/refund_payment.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +from es_elt.xml.common.headers import HeadersType +from es_elt.xml.common.refund_payment_audit import RefundPaymentAudit + +__NAMESPACE__ = "http://www.thales.dc/RefundPayment" + + +class AuditMessageType(BaseModel): + model_config = ConfigDict(defer_build=True) + headers: None | HeadersType = field( + default=None, + metadata={ + "name": "Headers", + "type": "Element", + "namespace": "", + }, + ) + payload: RefundPaymentAudit = field( + metadata={ + "name": "Payload", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessagesType(BaseModel): + model_config = ConfigDict(defer_build=True) + audit_message: list[AuditMessageType] = field( + default_factory=list, + metadata={ + "name": "AuditMessage", + "type": "Element", + "namespace": "", + }, + ) + refund_payment_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "RefundPaymentXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/RefundPayment" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/pom/refund_payment_request.py b/es_elt/src/es_elt/xml/audit_data/pom/refund_payment_request.py new file mode 100644 index 0000000..5d381b8 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/pom/refund_payment_request.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +from es_elt.xml.common.headers import HeadersType +from es_elt.xml.common.refund_payment_audit import RefundPaymentAudit + +__NAMESPACE__ = "http://www.thales.dc/RefundPaymentRequest" + + +class AuditMessageType(BaseModel): + model_config = ConfigDict(defer_build=True) + headers: None | HeadersType = field( + default=None, + metadata={ + "name": "Headers", + "type": "Element", + "namespace": "", + }, + ) + payload: RefundPaymentAudit = field( + metadata={ + "name": "Payload", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessagesType(BaseModel): + model_config = ConfigDict(defer_build=True) + audit_message: list[AuditMessageType] = field( + default_factory=list, + metadata={ + "name": "AuditMessage", + "type": "Element", + "namespace": "", + }, + ) + refund_payment_request_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "RefundPaymentRequestXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/RefundPaymentRequest" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/pom/refund_payment_response.py b/es_elt/src/es_elt/xml/audit_data/pom/refund_payment_response.py new file mode 100644 index 0000000..92989fd --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/pom/refund_payment_response.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +from es_elt.xml.common.headers import HeadersType +from es_elt.xml.common.refund_payment_audit import RefundPaymentAudit + +__NAMESPACE__ = "http://www.thales.dc/RefundPaymentResponse" + + +class AuditMessageType(BaseModel): + model_config = ConfigDict(defer_build=True) + headers: None | HeadersType = field( + default=None, + metadata={ + "name": "Headers", + "type": "Element", + "namespace": "", + }, + ) + payload: RefundPaymentAudit = field( + metadata={ + "name": "Payload", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessagesType(BaseModel): + model_config = ConfigDict(defer_build=True) + audit_message: list[AuditMessageType] = field( + default_factory=list, + metadata={ + "name": "AuditMessage", + "type": "Element", + "namespace": "", + }, + ) + refund_payment_response_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "RefundPaymentResponseXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/RefundPaymentResponse" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/rpe/__init__.py b/es_elt/src/es_elt/xml/audit_data/rpe/__init__.py new file mode 100644 index 0000000..c685915 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/rpe/__init__.py @@ -0,0 +1,199 @@ +from es_elt.xml.audit_data.rpe.bad_debt import AuditMessages as BadAuditMessages +from es_elt.xml.audit_data.rpe.bad_debt import AuditMessagesType as BadAuditMessagesType +from es_elt.xml.audit_data.rpe.bad_debt import AuditMessageType as BadAuditMessageType +from es_elt.xml.audit_data.rpe.bad_debt import BadDebtAuditExchange +from es_elt.xml.audit_data.rpe.debt_recovery_attempt import ( + AuditMessages as RecoveryAttemptAuditMessages, +) +from es_elt.xml.audit_data.rpe.debt_recovery_attempt import ( + AuditMessagesType as RecoveryAttemptAuditMessagesType, +) +from es_elt.xml.audit_data.rpe.debt_recovery_attempt import ( + AuditMessageType as RecoveryAttemptAuditMessageType, +) +from es_elt.xml.audit_data.rpe.debt_recovery_attempt import ( + DebtRecoveryAttemptAuditExchange, +) +from es_elt.xml.audit_data.rpe.debt_repayment import ( + AuditMessages as RepaymentAuditMessages, +) +from es_elt.xml.audit_data.rpe.debt_repayment import ( + AuditMessagesType as RepaymentAuditMessagesType, +) +from es_elt.xml.audit_data.rpe.debt_repayment import ( + AuditMessageType as RepaymentAuditMessageType, +) +from es_elt.xml.audit_data.rpe.debt_repayment import ( + DailyMediaConsumption as DebtRepaymentDailyMediaConsumption, +) +from es_elt.xml.audit_data.rpe.debt_repayment import ( + DailyMediaConsumptionModifiedLegs as DebtRepaymentDailyMediaConsumptionModifiedLegs, +) +from es_elt.xml.audit_data.rpe.debt_repayment import ( + DailyMediaConsumptionModifiedLegsAddedLegs as DebtRepaymentDailyMediaConsumptionModifiedLegsAddedLegs, +) +from es_elt.xml.audit_data.rpe.debt_repayment import ( + DailyMediaConsumptionModifiedLegsRemovedLegs as DebtRepaymentDailyMediaConsumptionModifiedLegsRemovedLegs, +) +from es_elt.xml.audit_data.rpe.debt_repayment import ( + DebtRepaymentAuditExchange, + DebtRepaymentAuditExchangeInvolvedDailyMediaConsumptions, +) +from es_elt.xml.audit_data.rpe.debt_repayment import Leg as DebtRepaymentLeg +from es_elt.xml.audit_data.rpe.debt_repayment_response import ( + AuditMessages as ResponseAuditMessages, +) +from es_elt.xml.audit_data.rpe.debt_repayment_response import ( + AuditMessagesType as ResponseAuditMessagesType, +) +from es_elt.xml.audit_data.rpe.debt_repayment_response import ( + AuditMessageType as ResponseAuditMessageType, +) +from es_elt.xml.audit_data.rpe.debt_repayment_response import ( + DebtRepaymentResponseAuditExchange, + DebtRepaymentResponseAuditExchangeDebtIds, +) +from es_elt.xml.audit_data.rpe.ignored_journey import ( + AuditMessages as IgnoredJourneyAuditMessages, +) +from es_elt.xml.audit_data.rpe.ignored_journey import ( + AuditMessagesType as IgnoredJourneyAuditMessagesType, +) +from es_elt.xml.audit_data.rpe.ignored_journey import ( + AuditMessageType as IgnoredJourneyAuditMessageType, +) +from es_elt.xml.audit_data.rpe.ignored_journey import ( + IgnoredJourneyAuditExchange, + IgnoredJourneyAuditExchangeIgnoredJourneys, +) +from es_elt.xml.audit_data.rpe.payment_request import ( + AuditMessages as PaymentRequestAuditMessages, +) +from es_elt.xml.audit_data.rpe.payment_request import ( + AuditMessagesType as PaymentRequestAuditMessagesType, +) +from es_elt.xml.audit_data.rpe.payment_request import ( + AuditMessageType as PaymentRequestAuditMessageType, +) +from es_elt.xml.audit_data.rpe.payment_request import ( + DailyMediaConsumption as PaymentRequestDailyMediaConsumption, +) +from es_elt.xml.audit_data.rpe.payment_request import ( + DailyMediaConsumptionModifiedLegs as PaymentRequestDailyMediaConsumptionModifiedLegs, +) +from es_elt.xml.audit_data.rpe.payment_request import ( + DailyMediaConsumptionModifiedLegsAddedLegs as PaymentRequestDailyMediaConsumptionModifiedLegsAddedLegs, +) +from es_elt.xml.audit_data.rpe.payment_request import ( + DailyMediaConsumptionModifiedLegsRemovedLegs as PaymentRequestDailyMediaConsumptionModifiedLegsRemovedLegs, +) +from es_elt.xml.audit_data.rpe.payment_request import Leg as PaymentRequestLeg +from es_elt.xml.audit_data.rpe.payment_request import ( + PaymentRequestAuditExchange, + PaymentRequestAuditExchangeInvolvedDailyMediaConsumptions, +) +from es_elt.xml.audit_data.rpe.payment_request_old_processor import ( + AuditMessages as OldProcessorAuditMessages, +) +from es_elt.xml.audit_data.rpe.payment_request_old_processor import ( + AuditMessagesType as OldProcessorAuditMessagesType, +) +from es_elt.xml.audit_data.rpe.payment_request_old_processor import ( + AuditMessageType as OldProcessorAuditMessageType, +) +from es_elt.xml.audit_data.rpe.payment_request_old_processor import ( + PaymentRequestOldProcessorAuditExchange, +) +from es_elt.xml.audit_data.rpe.payment_response import ( + AuditMessages as ResponseAuditMessages, +) +from es_elt.xml.audit_data.rpe.payment_response import ( + AuditMessagesType as ResponseAuditMessagesType, +) +from es_elt.xml.audit_data.rpe.payment_response import ( + AuditMessageType as ResponseAuditMessageType, +) +from es_elt.xml.audit_data.rpe.payment_response import ( + AutoRenewedContract, + PaymentResponseAuditExchange, +) +from es_elt.xml.audit_data.rpe.risk_reassessment import ( + AuditMessages as RiskReassessmentAuditMessages, +) +from es_elt.xml.audit_data.rpe.risk_reassessment import ( + AuditMessagesType as RiskReassessmentAuditMessagesType, +) +from es_elt.xml.audit_data.rpe.risk_reassessment import ( + AuditMessageType as RiskReassessmentAuditMessageType, +) +from es_elt.xml.audit_data.rpe.risk_reassessment import RiskReassessmentAuditExchange +from es_elt.xml.audit_data.rpe.unblock_media_attempt import ( + AuditMessages as UnblockMediaAttemptAuditMessages, +) +from es_elt.xml.audit_data.rpe.unblock_media_attempt import ( + AuditMessagesType as UnblockMediaAttemptAuditMessagesType, +) +from es_elt.xml.audit_data.rpe.unblock_media_attempt import ( + AuditMessageType as UnblockMediaAttemptAuditMessageType, +) +from es_elt.xml.audit_data.rpe.unblock_media_attempt import ( + UnblockMediaAttemptAuditExchange, +) + +__all__ = [ + "BadAuditMessageType", + "BadAuditMessages", + "BadAuditMessagesType", + "BadDebtAuditExchange", + "RecoveryAttemptAuditMessageType", + "RecoveryAttemptAuditMessages", + "RecoveryAttemptAuditMessagesType", + "DebtRecoveryAttemptAuditExchange", + "RepaymentAuditMessageType", + "RepaymentAuditMessages", + "RepaymentAuditMessagesType", + "DebtRepaymentDailyMediaConsumption", + "DebtRepaymentDailyMediaConsumptionModifiedLegs", + "DebtRepaymentDailyMediaConsumptionModifiedLegsAddedLegs", + "DebtRepaymentDailyMediaConsumptionModifiedLegsRemovedLegs", + "DebtRepaymentAuditExchange", + "DebtRepaymentAuditExchangeInvolvedDailyMediaConsumptions", + "DebtRepaymentLeg", + "ResponseAuditMessageType", + "ResponseAuditMessages", + "ResponseAuditMessagesType", + "DebtRepaymentResponseAuditExchange", + "DebtRepaymentResponseAuditExchangeDebtIds", + "IgnoredJourneyAuditMessageType", + "IgnoredJourneyAuditMessages", + "IgnoredJourneyAuditMessagesType", + "IgnoredJourneyAuditExchange", + "IgnoredJourneyAuditExchangeIgnoredJourneys", + "PaymentRequestAuditMessageType", + "PaymentRequestAuditMessages", + "PaymentRequestAuditMessagesType", + "PaymentRequestDailyMediaConsumption", + "PaymentRequestDailyMediaConsumptionModifiedLegs", + "PaymentRequestDailyMediaConsumptionModifiedLegsAddedLegs", + "PaymentRequestDailyMediaConsumptionModifiedLegsRemovedLegs", + "PaymentRequestLeg", + "PaymentRequestAuditExchange", + "PaymentRequestAuditExchangeInvolvedDailyMediaConsumptions", + "OldProcessorAuditMessageType", + "OldProcessorAuditMessages", + "OldProcessorAuditMessagesType", + "PaymentRequestOldProcessorAuditExchange", + "ResponseAuditMessageType", + "ResponseAuditMessages", + "ResponseAuditMessagesType", + "AutoRenewedContract", + "PaymentResponseAuditExchange", + "RiskReassessmentAuditMessageType", + "RiskReassessmentAuditMessages", + "RiskReassessmentAuditMessagesType", + "RiskReassessmentAuditExchange", + "UnblockMediaAttemptAuditMessageType", + "UnblockMediaAttemptAuditMessages", + "UnblockMediaAttemptAuditMessagesType", + "UnblockMediaAttemptAuditExchange", +] diff --git a/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/__init__.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1b61931b08900bbfb7907b351bbef363f7ce800a GIT binary patch literal 3950 zcmb_fTT|Oc6qam!;bJftbHAGe48#tQ1RF?-6KIFFv>8u3o!J+Su(sevvfP!O;K%-o zzW1%arT<`G`_#8i(@bab(CIlVVM`#{FjLR)&8OY(oU?m$&T9EBkrhJnDhxA1|A_%!TW&6NK9~9kAuG7(Z@kQ;OOI^ z9~3+Snjtde=o6qHcJv9*k2v}S=#zp+^@K4>#srT6PmyuKF7(Kf92>)pg$ITOfMNH zM}K8v9|XRpRw0pS6c?Hc~{O0!E>jzx26tWe52v2!?5~n zh_85Dl&MvR1W->BdA7F(6{ng74rfmY*OpS z-iuu(dv1QsYy7pYy=G``I2OKJW}%Knp`ZAoU){UC z&24h!Vpn(`8zBRj1qkgzuEaXZ**-4!srWTfaQ#sYqXqyGi-p{q*gA<;D9M zx>}bFL2g(A6O{BgfxhEYo&5$=WZQ4?j%kJ&02gua7r{~8Y8SDWDzzHCJ-h8psD?iCU<22!>e5=%iSE< zr80$qGC@b2J67O1*bcYa!;Kwr8X|s`{fw_rOQCurcV*}~6|WMCrZ&_ZtJB=MswoEK){gY*Ic3lW4O+R(H;j6o(YnbR zmJ>T~vC1`t#>saYCl8I2SCncE8cE63TOZ?xhN(4m`huN792x#B_>WNfGc3#Uhfqik oeTe=a@J}=huHv^{`AztZ1uo;R;=AfZpuggU!O%}J_66kQKaPs@lmGw# literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/bad_debt.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/bad_debt.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6f0e775c05f8b7f4c9a7042302a4fcef2ee8c418 GIT binary patch literal 3359 zcmbtW&2QYs73bHIyQ^JkCDF3%$~I-yk*GSmb{YhTkOom~$7yP914wOyEee*}8EILN z%gvB$d4(JlzyZ=*Zq>nu9xGV?L;iqVbjU#&z<_|DC<^pYK`H|Hl=p_@YF8F|2?0J1 z-~8t5ef-{hQ!W=JcuvWd_w|S*eUCrclS>-%$={*zH;G6@_N72>$TGGSUkTKP8fXno z{HuO0&>OmFYrYZW8+p;r`Gug^C_-Crj40AWi5O2MlBeo(HJQIr650Z2iv!xS(2jt% zG@u<7+A?TI>1cn3vEGJuFBA$195(OR!V;kW#;+Y4wrUWGZj(aV`u9Cwy#wXLnKYTR;t8dXWN_P$H* z)AhKS93hcL@{v#A;9xH*HDn?+l;45f8mb~ujVSx-bLhjTkpqoRG?F7aF-ZQIx?gy% zqnz#T}B9pK$vyZwYFbbJ^ zrtM$upR7!#0d)mYJGPl$6ny&A(yTLkTORpe2 z@~SSP%)4+%CkX{-cu=N|M1(9^Yb|QIo12Vox-liNJ2%38ZdfsN;O+-D5rzI^N|vnE z*z0tCz(xbb~Tyz3cg; z&dn7x?8D3`bzu{3Jn$(-IG6TRuC?8OaxI47=LKv>9k)sM6mGywZr6`_KA^En+}PbN z*26ZnKC_~j@u`aq&JD5TuL%xAr+S2s3)QMHa=L}dq;tsdypU!d3@&Ci_6W;EAZ?rJ z(kUcKPClB!5?642RhV~AV-qllO`0496j1({UIwBQF7p`c6}D3e$0^Y1EH7&Hw`e`YLwKptz3W z28vrC_M{V#(#t>8T46wI;7P{3_IthuaT~i;i1$`44mvePJ0Xjs8jT$4$F+zxv*we) zueq324!WlXnN)))5_weZ^cWDjBt!`s(SJaEAss8lT>f}kGOz#R=ig4&b{>6aR}U-Z zk-2ziUOT+D4ynwMg2g#y8F?IWaRYYiZnATK-Y#rGy2YlU;ZV-%-*+W^NdBTi>Z4mfA_65F5iiS5SVY7&zLxFDR24n{6?E-rZmGdYTP+;(~MHC`t-@w){P`ruaHVR?6 zDz@%q;t@2WH4tA&-%Vc2V&~@kMPV_g?>syx-^e_5Yw-v|OGMXzr)~+*?0~Cqt)Jp5 zD5t5jz*R=yRZv`^92NSml1UNVRU+kQ%Kq6EqCmy~RS`vN+@9d$gRT-+gTz<7G}v*@ zUvS+ROIg#|aGP<+dV+1Xr+hDp|2Q}jz5gd(c189A>0(4|t9Pq+_;^|_KZ(fi;Z_1A zj~ABXn0f2nnA*x2v)L-o0s8Rd^=16b{zmk-sD%7EBGYo>TT}^q3;Q_hz zYX5M-7PXz19jCs$@?iDj<$DicFQRM-;t|m%jyHVdm-%;+68$dw4Xh)>8)4(Wsw~Sd zq?`Ye7GFpU|CH{&kd}@r)t&OG{wrDEefv~`&*^*0xU7HGJC)#bx&UIgkhV4X&VhOB Ke-eC!seS~D-(S=K literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/debt_recovery_attempt.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/debt_recovery_attempt.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b5b32ec4134368687d57314e60dea7a66eba8669 GIT binary patch literal 2876 zcmbtW&2QXP5cjwDGudpGv?VForj*7&cN>Zj3Z)R*^ou5{ARx3AvYdS{jgh_HK6{&P z1X7S%soZ*^9D3-HDESxo3%KOKVf&;?kx+%WHA)atPRu;-ZZ;v}f+df~^TzW&=J%WN zui0!$f@_B?xi1rv^gF(EElNKMDu#I1 zJkw895<=I#q@Sv!KsPFBMY1cZ7#bup+dxVJC4)d+m_ z1($jRzr9KwLRmQ1tkd1`#VD#zmdi^^OQmSh@n~2g)$%1eAALrv!ClIlQ&B|ydQ^=! z5=%3F$lE`H@>rr$MJ7^3`2tR_qAC*Ah_bG($+1^O2a7>8q7#EC#C)QyC%R)MNzw#K zod;Lpl_nYCmwlqH_pK@I2uacpUb(KE3m~#}68{ zXtKxRQ{pr(BC5+dPSSSa+(FCm6lca2X{KB;nJ@ zAx`8l4bF}m@m6NJIfFa6MpjjphXFQ-q5xu5;U-M%G`xr%f%oOqY*3@cZ;N5XFj~BC zp1c{K>NUbu97*l%-b(X?ZR2umo2P8s4@kp9J!9K<8jjZRX!Roi9;%)&F^MLoMJ zV9gMO>?qp%ZM%mL;C&p2iXc{{ZIIF~DK7>-E!XRmF}L=y=gw0WIi-kJ7t4`fFEd&X zSQM6NXj3mLhpgIB@A+QYLD1NEKxM#68L_a3lMWW@O_qkKgvf#teh1=#w56DOVk<8d zUiywuTS+~i+EL9T#>(Y~SGFZnH@0%p$ca|2un9iG zZOhcaM>j`|m8%cG>G&KO*({767U%jSbqC|H@y>bM2~@T#Tz2Hvwc`;1D)|{zE7*58MQ>q1{Td6KEVmaS{b$ ziJd|rAan+`H&B#OoJJu|&O+_2j(7)@a1O)+>Dl1%PBO<%AC{<-#>$nA>}V%b6Yq6X z*^}`J;dG`aRXErGNflJtcCsK%tnr9usEvQO}h-G!6 zbe11Kq;7u|k}siWLBHck=t#_+Z$#8m_Ue+Qavcf-l$jCOjhK{;g2qoAN>}?{NNi|t z7;)B0{WnCohO1}qVqgK3_fb0llnJz;09D99JvDDrCzE4Xt&`ekoTxTuq;JIS+IB;-W6CZpC zBe&oVk(2kOR^h@A$(V*0z|bxemT@p34)zfGKu$iuQ4|%pL+lmzrN0$f|7c4>VRWkU z_c!9H&~+Bd6f~rTM$}-?kQnjo5NbuOXE)U4YBY1(w W&Nzsll5Jg+&u$b>{UyOuoX9^sKhwhi literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/debt_repayment.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/debt_repayment.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..98ad15dad41ef24e25684b792f8cce43a628fc85 GIT binary patch literal 7970 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 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/debt_repayment_response.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/debt_repayment_response.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..372469535a13e9a81246f2b42ca77ae1d4eb4654 GIT binary patch literal 4002 zcmbtXUvC@75x?W{{*WRmQlcfxk|oBD>s->1c3n4t;-cL8`VXTjP4-uB40lRSC{FXfU16Z&g`WgD#7d_;GS-^mRASm)uL=b}je#*=qc{5WMPUylg!yc+DO2a`hbWdOe?#Zb-zqFOdvYpDNK@^@5OQ zK{}R@jtglHr1^xjD5M3DjwhrgAuWQmL`$*ViOz&M`4vuL%6!ajHvP~J9lsgCtA3p} z9M5*m6wmy^4(N(csLQk0{N{#p`?}Kzama_Bd)*G{n&VM;RW}^!5|qC~Z9-YF)@jk_ zuWp86Yq3_ld-rZN+_YU9R7sp>O>_P(TPDakJG!^Sl@t+%#hp_Q10Z- z0ymFc&QhB=;qtx4rro?vQR5~FhL+f$Og=0QEs@A|rIRw1=hg3Rwz@(?`|VXT%?-X!p3j>{2{%E`5c22kxfP zC7wo4cn0~PWj83#dQQ{w8;v##c2ayCY}su$v^MNU=(7$tJXi#-b}QpLLHLItWVg63 zR_%~gGs|#o3{QoXkl>=2288EeOQ~x$L>M!SF`h;f>}6!fEh~`)mc=G)N%X8iG>F&&I_tfk`MxDs^RO6Jk zedFQpdy=7Qk!3VG6jr#WaLI>&6+@Aafh8h6wW|zAI!TL2PZ1sB+=##F03!y;Vw__> zkg;R6AQM0Dxo!fj8=}E1g)7^>(sF` z=Edq~QL9rj=lGfbo=&z3Tb8ZB1z~KBgmKFc!o|wcMo3x3t^@!@m4LF3;0+ZkalBWv z!os5Sko+KCZE8*f*Z(ukR*dr{JB<0@+Ek z)5y;wSpdQfM(?y8Sn`g{&Z0npjNsWL-?1DB{1Yj_je-AMTM|C7G>+0DhgP}1f_~g2 zJIcsRkj#*#BALZRTiI2=Nh^P;;CztPk@vjx!NBK1dD)uiD<(<~pFC!3`1pIcAva+^ zR>gMk(hECe7DfPq>y}0Q1|&R!1UrWWv4Pc)oJVpI$t5IjB3VR&kvR$xCd!cD?gsw> z@<2LBWmMx}DuE7Dv-{Tpr;Xt^f@r}@XrIC+K+|K`Dng@PEFfOPw&mV zHqe?syI(%{!jk4e>%^m=hYOD|4L9I;OmpGOa5bk2k#|#1`^B`L2BcDn(nmBM(8Y++ zMFT|8V?0y)cqWq^pk6+xgH2WT0K?0wM_F3H#w0*$-Ezr7nxhRUnvBsTaP z?Xb-UxV;LNrx2)BrmE~W*zjSRG)+0Jygfsy|BIJaVBm4T? zxDx%N{EYn$lo7*&I*_jwS(cwkXTFqX|1G`xOsYPUUinhGxL>@oo$qORS^Gz(C&8mv qxgu*%W_l7ldViHmvi7Lcli<;N1<0qMB>1#^VXu7d8ws9b3%>(N&*{DZ literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/ignored_journey.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/ignored_journey.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2427373b21435de393f2a70b5afe9d44e5ee8291 GIT binary patch literal 3363 zcmbtW&2JmW72oe&QY1x5v|&Ydy^-xko7!YtG+#nmSc%=lX`}{-6SQoT?TRxJx7g(} zvrEeqdQbryXl}Ws2On~bY90Dt_d zS{Bj@NM~tzyl$mmb>_asO&poec%4p^c!?i%Vn^YHSG}07M}!8v_*&H2^0#mLtpxP+ zEuRJiC%i#DLRoyL-=&W)wUeZ~+GyIrc9)!@~$K-mBCWwk&@~(RYjs2Q4h37awgG1Vo;Ol#2_ZINa3M&P#o)9 za3cj$dIgmGWv9ZQowj4GNBrd0y;j@nY}4tXc*@3XH~FMGWh0TBYF}~G$GP+Ur*-S= zH1U49;b`1)-HsPh*X2dm4I|PEkT1FJhdnRIMrO8yXwwVa1g>^pI>AFf{-Dv0LfYtd zDPw-;M&NH!mU#7qw%Uy(>^2zfMl6XNGBD;o+HG;w4^#b!o#-9pnBn z^-R6n=NekbO0X5au?gh9G&sBT(F~ghp4EWd*$1~1x<#40+4BR!E7RA<&07HtX(!>* zw|IGQTn&%JH9QF~ARl+V7Ujjz@3>K`)noC#!e?PkuNNflme)!m*5_6T#-O#kg}{%K z-^B@gpU>v3-f)VnjHXqP%pyS}8HOS+!PU~hZ3*Zy14SAx#g>tsb=?WLyDpouartrIaShV2*u(%;5zK1s%_rfmb2RC!Xs=XEj zc7`F_C$XIk*gI|7vA28{Ct{U^d3R}G)4Ko-JKD07Ha(pd+naO?(u9zYJM0Wx4>#BGIJXHq2Y+l4$iBvwkUx*) z0uXL7`eDz9%(XAGr%|8+a1fMu5kBFwx2F}^vlIjK80xS5rq34f|Ne?mDk zvkW8LxjVlRb*TL(d!mAIvz?YRZocjHgUBPyfm5=dAixbowBQIXPKGuNbGxGFR zp|mpLLEPs5@gQW9%!lAXbL>H=xR6H*S+>!MOp4&e5-C4a4l3jBq5!>yMXJJsbIv@U zoAjXQ8nTEiO%9y8k^Ky;XBUC&o)tx4QVkLCJ}-NstU*yhRP3tP>(B9X)3N!Rn7ju~ z3S=!_SW6P-Z}t-ED5nT%RKBWAO5%KmNDIX?|*|=#3aQgwP-5V+-?f z{^CTHzX=0>fOpiX)L#CmkmfBM&a#7J6WL*nAfSRw9Xyup+GH!MI#Oow}i{VA5Ey-B`5VSPzXs9ka={Rjp7Sq11 z4$WG<6@_8csb>j^nYdutbvM@5Z@u&O+H1F96VaexS`w*5ph(!AyQ;_5D`|`Q3-%@` zV|tF?0rH(H%ko#!@;{|#zmitIk**(ApWiDFjk0X~eQ_wkXJ{|V#;49ug3s`!IobHQ aKa}7zTmkaeLdI+IbBDDn-%Icn7xHhS(KjUk literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/payment_request.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/payment_request.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..616b7ae01cb0b9ad5f379f75f3f5b9f7d8190d0a GIT binary patch literal 12414 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 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/payment_request_old_processor.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/payment_request_old_processor.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5129dcc0a17ef057dbd68a58af997134355c14ec GIT binary patch literal 2868 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 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/risk_reassessment.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/risk_reassessment.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e47c68eecf03ea93f810c085394aa37f08d0b799 GIT binary patch literal 2934 zcmbtW&2JM&6yNW)9XoasL-`79_$X{BHk3-O0!2+B0#uSBNGs~9+Af|6*|O_3vtz(f zRizS0?Tu6Efdj`z_*5p^KRi!4Ckt1z^~O}?(-n7C9WpYANmQMjtLD#=6qb63vOKqsvP}pMBxRW)7c=R z@M_KlG$d%hM14Y8GTW@vmq+F~uTPZA_wL;*@p(U_Nr_a;*Mj8sHR>k`O_GS#c(t{Y zmb6jz69xGI-s6?q~pTO}|bWNcK(U$dRYRju)g2f^RF^NTNl6s;qr=MxDA+ePdJlvoHECE2))Uj&Y0tKPNO<6W#s&c;I7Y{ zTeL=*#KR+S-V;4TK8$fMAP^2U=kf(7o^$v-b>ceCiJ4Pn6z0}$Noxcvz}57GNNBae z0^am^e4ExLoa^m(XBOY3BhkqR@FJ5^*US2H}*NTT%i=(T%_paN~+?PhguG+yY{W8O$emhd#%NpN9Q*& z4m;La(CgVA!f-F!fw4MKm$hddrW;@}iQeHlFg?{}x<%3y*xu%_Nd{y+P)Qazoa;sa zmV;Mba#(i@q98dt4MhlY3Cq=U*R{r96lAcPHN0PSv?jiK=%ibE(ck=PLwGJj5>_9lulilZpx$+@T7>}xU+8Znls4l5-Z^Y;fvoTUE!^ zg$X4Aip)-g3rh|=078tuLR9a5LOf^+7;VPQ{C92$1DDO-!FV!5-b1Y~Lr$R$#Ra%u z&5*ZF0p@GPgWIWm!djeO8F4!q0!3kPc(t%&t$1>^cwpVsfy=f%Zmk$&Pfzz`2!3W; zh8SRgOWk-I2c;@?bi+|_9(5?@z)gKTC zdzjpZ$r&6)aRcrIJH!L!A5AsSt}7_4PCfqiO6ybTIs^3y+R$8sHyE@brh`qS>P_O; zcu-|{(ybn}6H*8oK}ohE_`3ofJ1?_vLVM8b%qz*Cv_zH~vAfk=O3+bC)i{dcTB%*e zSPCcSJa1-ldg}Vs$@5dN0@+Yx0g^c;H?@7EFH>h*ZSx$Pf&d6u@)3x?bX8SfCiO9Yb$W>WJUGbGbt*U`m)x=o!^}whaLf3pV zNL5op*Zp*msb++3_ya+Kd(m@a#N7`3 zi%v{uy@0|{pZBOw(0+wFgtBP1Sx5W84W}8)N6f+#+u{^?u#fmp6^Blj@2<9l`qse3>Y<4X%X0F#MbK;P} z<^y3{hXq&~yu!2fB#mrwhQaHu+hB~=T#6~k41^4YU84;Lp%p8~Q?`xAwQZiU?I0u# zAN8zl-)lI2d&abF61uj{uy}bEP}H|wk?IUnkG&;Ux9y(70Q5ebI)LIJig6Gxr8SV! z1}QIu0WH_zC74(H*!SS2W2Y2TccB~y^)jRNki}7%MmF{1a>U$@`XKPj4h9o7Ks=UK6-7_2rli7wA18kqEw`?{F6>|ci8-nW|0Ii zBbjy895Y&1zIWFoQ#V%gQt|Lg;ph%b(OA-UKO60U_UvCN6nB937_HBqbTQ*cRtn=g zFylt++LL!W>r7fJg~=V5NuzcB$(?mP5VJZj)}IA@nC@i(sAQGMi%Pf3HL&PJZF7M6 zTm=SD;32rG22`!tWdNNd3?P#%@Ixe57?b}P*$(0B;NBnr%0b_9h;)>Eh*Me#0*V?BR&Krng#J#dOf_*Te zDd5UA-#v5&N5D#fp{r?-b!0o}Rsr3yVbg0JUw2@*dhy zd=CGeiE?5JLcda&Nb0zgC?}29%+jdUNtDv*<-w8V{Mbt2^m5_gs;)vdnPv%Sge$;(?E0W*+_#*5o5;xp4l6bW(=XU}&?4 zWo%y%CwmHdTTIU5ED8$$2)X2u^p7IzAFWC#j1KF6cP-fpp%ut|XnpgIxWSDcem)Enu{O8#ssw{D!2jTg;z32y6O$-}bo1O{+hKL+Ai Sx~*&SsinfNaUiE>co$;&aleW8A%4)r z`w$;A@jk@w8SdnMF^q@BC>|B#cudKRr0!=L-&=W;-VYpmLUr(Rk!I?cOPS2L1jl&8 z@orUfaE@*}jnC5KS6Ru8|7ba#C*_RmKDtg+q83=`FQ$~JOh>xXYe z4Ou7i>{M-4xp~1h+Fx@y8Hz3pEo_7i0^EWK7eF6u_Sqg+@9%z>`sp2yIEC=A#s2od zjc8`h|F&rr)lYV$NmIFp8{nTy_yBJv_w@mnjOQv`7I~Q9ZCIM9B$U%4JOw>(ZEwU_ zOAy|j$YyW}#{Zo{1lV;CVSr$Ee73trWzNMU-b;)yV~j9F*xW+9j3s%_*jI7^ujKlD zG_MLC)u5!v%ELVSzy++N_;enrqK*WwE1_g`(>#)5+ENf9T8j{Y2oYmh38JvDUR`_7 ziz;2@{DpV~eJK3oF~CooQhI4w)Vg$9xN>YTz1CbmY_Th+L#3n58Mp>>PWMJvN z?~I!|;vp+_(ejqJMQ9&*Bx(fz1usY_5N1*gw!X_xijOAja87avgU=-*5!sPkxhcyyPB|%8X)0o@ zII5d&ro~uwG*@rxZl;+L&uJ&?=9)P%)||XsXcoj+cZ%*ra{|Vh=448`Cz0$6iR5Vd zr4s6GmIOBs+yd1H+_K;nfjg1lP6_TLa7zj9wBVM3J4L4l5-R=aYUS^!q$=~g)#-SF z71&)3%?k*{uLy{m^yRtbjhTT?&us zwoM&^{2x$@Q071Bcj@cdtsv+w*X!Hc+qGcJa;RS;t@>TNLtEiCLn=oAqS`^Blgp0qgDgT)V%q@xl5US0At3U*p-;mB#A&g9qztjjF~o zrrEJvYMMM}nyyEB4vq_^`Ek#3!WlLJs@Now5|DlA6sYuiqrT<2wBGGf#_Z1b9D9?p zz^VnbwN($?Zk^Gt#{$1jeUmyt-Dj;d36R;f`Y!DxU=d?TlnKd81DcR!bz0PMLU|&$jkd=O z5xqvhtQIxAwovQWazfOy{mcTuQ_y8XU4WzjY4~JpZ+XU3>lrnIEgG&g@WL?zd60OW zKuEy7f#_$j6qXd}dOfjz@r!C>Ikg0;<#@i`d5W0@+rX*=dTD2XHMT9^@M&OxZp2bj zZ-slLBq=7c;oIfdzTX>qjnHRyiw^eP5c`jp8cxDWtRVCeC4*%pR7Wzr?GBpm5tJ7z z0Fy`iO$wo|9r$k%5kOsCHn6(>_qPqK)ll0l))#9*Cv+KY+t0y@Vpk|9u}lm#(v40{&Hzw;VK?X zTt#U-i(|hFnYf?gItZ|OPQWuR4JO+TO@^m5 zFF>C`9kV5RB$h?g735EvW}?Xg^fjESBDsm=7Lq!WJ4n8bHuZDo8|wa1KY< zBng5n|2J^@e=41%rqh{|8&c)cZH^*}S&nRQ-KvxH-NzsES)e{^KF_eJCFo?N8V&tfIm7 zsDEb{;gQWDxrAg9$e>^(dVH>Lg$+N~A6tFLvk3bJ;=hRmx6E~DN|0a8j%1KX9QHl} zMZT=!=(|YPk&J}>3i6Qr0>1teAfHNKPS3^hzIaV|YHm0xE`!Gpi}SIk7Ox#cI*5!& zgvFu&T}rqL)%-uMf;K#I7Pv|uxC)wbXcw~sSIHy??kbSt7pa4Z!3`}-CIM9vt}0ij zcsc1Rajyz}#S6)a5r4teZ8ADH%(m5nW}`2v<<2?B_Jf}$-$d_!#EX`=yuh)85wWA( zsomxiSSCO8$xq-u2W0Jy_Mi%12D1q*>{~G6B~gB#`^0<} z3TRYwZw~>k;_BEBQH}_N298Do;U4mk{2IRh83^y*0oNW^MrzS5QH!c^Aj~ZuO-vn? zW{xXMN0s@Lv;y@(*XOiDwX)Yr1OloV3Ir7x@R3iy4)jgVrtk_c!&N&qaCUe?ozl3g5=d93?W$jnlGYNmsHkGoh?e)(j_&K`{1ZTup Qm2V$buKZJiUt!XJ12>KQKmY&$ literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/scm/__pycache__/fine_gdpr_extraction.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/scm/__pycache__/fine_gdpr_extraction.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5d5f28e4b7223a1a7c5ce58be256fa55d054e0e2 GIT binary patch literal 3189 zcmbtW&2QX96t~x3`=1<^1;L-z!bfij=5JKFD5`@$f?~T11ZyIsI(mua^^XARWd%yWT z|5B+GC3v>UvbPM{Z}_MGXo(_kJptvBL?j~nQXn^F8TFi>3zVi3s7+P;S9~qdo4U|d z-w5)}ywEkj5EPq5(Di01C*72Y@jxPZsytJY_|3Ag7QkA}SS!L>0&6*A9TC6{l( z_^T~=)F){Fm^y^AXs*|xuTHh%xHHvgEH5wDkFU-ufAoM-r8qGLf3O&mn-37-a@vd3S%4!H zO?VER&Cr)5+L@bPB z&iByYS)}c_UKHjjZ^>ba#cp?ldCFi795_ny)MO{j=^9Wt?TsqjyCj<|Ldq@T#hUd0S z*dk>Rk_^ISmKHhdpJpcjUFn1jr{K77pL+_pBy@o?d%o-WWR{o2;b%oAxH0Y10M5y! zrwUiwPC&UD1AKV_^{C^x^l6S85WwmBG0z7ycCa+}i?bnQ`x`Tg883@;r|042YiU|A zANR*ozs!~4m7&D(@^z7qbVrq;?C|0ZI7vEG%ADFN^So{2CT*J+Z953DV4#<6`(D@a z(-FhAN$A=(LrUUh@S?u$ip$LKvavVOK5E;Us}J4>ap(|=w?RCWwm?d++(s)5Xrlx8 zV_y41-vcbgPCce>s}TpC2BVn$s6iu}`f(#-ZeLvq{02bEixDbL15n=(XA!910e8LA zVdfaF)%0krX1Y<(~DKOa+TZls=aMljR3Yrjr5%HcQz@BPGFiGATb+*D8Yu zz+&JvD%eM{s=O*_WQIl&fD;LMj$uM)xsj4I8^t|WQH-J32V#KM43TrAm9RQD?l?U^ zbcm(0ahx%Mq6UKJ8NJu_7=Q|Rp%556i`sD%brdI1 zh>V^>&FYKyL5b!-d?&q_INV3V(Nm&;hlh)EOkchEyfWFZ;Mofs02G0h^*0Y~7Bqm1 zVw@FDr!pnPwf;{Dp&g|~gc2Hq5<+u=Hd7dsP$oqvW0_PQ=hk+5ae<72muNG+F>9QU zWlJcUYEna9&JOIVBlPXjl&$Oq=&&K{iIUvk?|V`FWp*Z_;wxTp#JvQvL!{hSF4iyb zLr6NqZTfCRzJRs^4VxFP#xe8eyD_zLJ4mn;t^u(CAMVG3Aq=>J>?pW6>2EtX-Cl`^ zy_5u;wTk}@5U%3h**h3lz~o)jcERKV+E9E7zt>@M?jjU^qqd6-&I>ZI`Y<_vX?*KKUa@GaWgQ%Wrkp)f&m_R>k`PFn=U@NWccLD4WN*G#VBj) z;O1&Q&C+=#TbXDmcuErT7GBn!;P^?@%UQ~+@u8{p8E8?g0IsueQFmQDysf(u$5k=m z0~jIji||H1kk)G-d|yZ|;T15XRf z=-=K>mO|HAATQ`=3*ETOpr0`XY&_rT5vLt{F2hVG&1^qF2%1S<^fdUm1RXm!({VyN zX!qyU#W!js_=X=y8dM#+Qr!)MAZ*uDj$?V8T(Rxht25J|-MM;g8g?K$l3*c$F>$Ej zgTBgNPWtZ^HVpx=V9_lQe<`vozm$&tA)R?C)n7`df0r(9RNq^zZ0qM_{mFrC30~V@ f%VV zmORTR^g#t|pndaO^pHQGg7t?4XdhId56S`ogcd>3w+gxsm#t>lIzRtG-cBR+6Hv`Kfxkl7_Zk$t0u)5;2}jBuSN5O60$i71|VN(^MO1b3&T| zZ8oMI6WSbT$70%Xp&bWpKBmnJ?F48GG(Ye=(V4W0|HPp!nP;3vqZvA(*K7pvs;)KK zbt}PBA2|WtY!d48^u1=I>OHydxgi*6Rgd}vJ3gcip)AWtpGw)$Xg zYlr9Wtv-5a@2qcZ*xPGAUH|z0mZkBeZ8w}cwQZiZ?Rt~6eQalK`?I#=M_(AERbn|1 zhtfF?{rZz~ty!n#R*N#`H9qvc$CQOmDWq<#9M)T9Mq5o524x!9)DO!6bNkI_b-(Pi zi5J?$37vA_*2_(?N;|-1mRcQ_!O>9QhyjY{(n)r5f9>Ro^%u3s3jOaxF)=_3mwf(X zkQXue89=V0BqXYm#F6r<7rBZC8l4(MB^uF*@r81fe3cLmq)L*cXo{rYhu2QV%JR%b zB!j(Qq)oV1yr&K`dlL^K#4F~87ldZBYBK5s00pz!Wae(ob8BW;qh^5_O)n50 z&`Z?6B;I!p0TF~&DYGB9J)ejGaAVCEy|{F!a22z`RUD3|upP7a{aNEu_1ev8eC=(~nfxlokuf+6^+kw}h0qo^Q=!G5IBP-@dJ)OBGbfy!Aj$5O|44V<)aW@Me zi1fjX%%#xz4Q-fJ)~pLVLZ5mr#m!@x$dE86hjq*rqgC%&GzoOjA1)d#HaFJ^YIf-P zz71UDHA#Q^=4uc$T@Q90G110E8#A&oqa~VNbud9jefrdCL^F<}Awq_0jg1!DJ3*x1 zVbhSEEuLA$;BAT6u^CXYt0>+A0Xx*_?NDaI`(Aph*`VfcAu5b#<3Z>7;dQQ)LzP`a zKeH&VgWyRf#h7Dm;Ur%?E#4Sr4pZOXc)5Iz#Br9F<`zzi--!%>X3kO?u!~~M>Bs8yfzmg+ zd0RMI9(HsSjIJG2`bM)igwge3qgj3b;qQOlw^_P%*^HK8M#qJP7?vcO}xfrlg%J_Z>VtfE+Xo)=WI z2^$=+i1k7r(?+jC8NoBNV2%S=#Htu>)S{Ax8{1CDZ#snC0#jB-flKB_E7Du3QOJy- zWd*wkwBR&H;qgP%q4*Wt!48NQ(pQt$`zOl$yO(9^9ew}7ac-`kDywt~2aY&%V!*J3 z(PAuBIL!Z(DmYGh$%0fFu_Gr5)SeooN+xMYR~C+(1ROaE3<_5zcI0#>tOB2ir%F_g zQLcD4{$Vsxt(rrE!J7<0wke@@93cSoyt6|8z z$L)|>i3?h?6s|#m04%f&;|NY-x1q&ndL$9i$+LjiPa{WfmK~#Hv4EaFL?JM6A6p~E z#RsTE(SrL;41D*Fs4C`%ck3;EfAe_K>SJJW`DCnclAk&)-aIMJooNb?g8`+-u{wL; z#xQ`x3}HY81zhs^dmt~itN2@x;cp=^$a7SBDo5&I`)M7`(s?ePiD1ZiZ>P)WSdd*f z$2zu?u$0$@p{}J(sP$M1Ot&m`bXVbtF%megiVhFq%L}*z0|eC9#k+q7x$uV=P%CIr$NOMe!W&08hc^(zgj&`@xxnLhp0;?>3^L&~yu64SychcGza{=fM#A zT%~YCGmJ7%wmJk3X3u3Byhdf|G=K@JTf6_MB>t&_s6f3M{dAPzPov~E>vbq{dbGrn z=rCv7TdSLEkG5Cut-*NWZ$nh7$WVe+1gyk5Mq>9m`F`|=^a0xjV@#At-M1InBSfpX=%gdHH3rE5W0i9+UN#R#$>YcmA%dA9T7BJi1JtfDiBj XkM0tPgH*4r%D0b;i~pA3DFXH%W~$aw literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/scm/fine.py b/es_elt/src/es_elt/xml/audit_data/scm/fine.py new file mode 100644 index 0000000..2cc33ba --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/scm/fine.py @@ -0,0 +1,178 @@ +from __future__ import annotations + +from decimal import Decimal +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDateTime +from xsdata_pydantic.fields import field + +from es_elt.xml.common.headers import HeadersType + +__NAMESPACE__ = "http://www.thales.dc/Fine" + + +class FineStatus(Enum): + ISSUED = "ISSUED" + PAID = "PAID" + CANCELLED = "CANCELLED" + + +class FineAuditExchange(BaseModel): + """ + scm_fines_post: At fine creation scm_str_fine_payment: At fine payment + scm_fine_delete: At fine cancellation Model for audit trace of fines. + + :ivar agent_number: Agent who gave the fine to the fraudulent + traveler + :ivar amount: Amount of the fine. + :ivar closing_date: Date when the fine was set to closed/cancelled + :ivar creation_date: Date when the fine was issued + :ivar device_number: Number of the device that created the fine + :ivar device_owner: Operator of the device that emits the fine + :ivar device_type: Type of the device that emits the fine Dictionary + prefix: DeviceType + :ivar fine_id: Technical id + :ivar fine_number: Number of the fine (device specific number) + :ivar fine_status: Status of the fine: ISSUED means due to be paid, + PAID means paid to the agent when issued or CANCELLED when bo + operator cancelled it Dictionary prefix: FineStatus + :ivar offence_type: Type of offence. + """ + + model_config = ConfigDict(defer_build=True) + agent_number: None | str = field( + default=None, + metadata={ + "name": "AgentNumber", + "type": "Element", + "namespace": "", + }, + ) + amount: None | Decimal = field( + default=None, + metadata={ + "name": "Amount", + "type": "Element", + "namespace": "", + }, + ) + closing_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ClosingDate", + "type": "Element", + "namespace": "", + }, + ) + creation_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "CreationDate", + "type": "Element", + "namespace": "", + }, + ) + device_number: None | str = field( + default=None, + metadata={ + "name": "DeviceNumber", + "type": "Element", + "namespace": "", + }, + ) + device_owner: None | str = field( + default=None, + metadata={ + "name": "DeviceOwner", + "type": "Element", + "namespace": "", + }, + ) + device_type: None | int = field( + default=None, + metadata={ + "name": "DeviceType", + "type": "Element", + "namespace": "", + }, + ) + fine_id: str = field( + metadata={ + "name": "FineId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + fine_number: None | str = field( + default=None, + metadata={ + "name": "FineNumber", + "type": "Element", + "namespace": "", + }, + ) + fine_status: None | FineStatus = field( + default=None, + metadata={ + "name": "FineStatus", + "type": "Element", + "namespace": "", + }, + ) + offence_type: None | str = field( + default=None, + metadata={ + "name": "OffenceType", + "type": "Element", + "namespace": "", + }, + ) + + +class AuditMessageType(BaseModel): + model_config = ConfigDict(defer_build=True) + headers: None | HeadersType = field( + default=None, + metadata={ + "name": "Headers", + "type": "Element", + "namespace": "", + }, + ) + payload: FineAuditExchange = field( + metadata={ + "name": "Payload", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessagesType(BaseModel): + model_config = ConfigDict(defer_build=True) + audit_message: list[AuditMessageType] = field( + default_factory=list, + metadata={ + "name": "AuditMessage", + "type": "Element", + "namespace": "", + }, + ) + fine_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "FineXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/Fine" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/scm/fine_gdpr_extraction.py b/es_elt/src/es_elt/xml/audit_data/scm/fine_gdpr_extraction.py new file mode 100644 index 0000000..94398ca --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/scm/fine_gdpr_extraction.py @@ -0,0 +1,103 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDateTime +from xsdata_pydantic.fields import field + +from es_elt.xml.common.headers import HeadersType + +__NAMESPACE__ = "http://www.thales.dc/FineGdprExtraction" + + +class FineGdprExtractionExchange(BaseModel): + """ + scm_fine_gdpr_get: Audit data about an extraction of personal data of a + fine by an agent. + + :ivar agent_number: Agent who gave the fine to the fraudulent + traveler. + :ivar creation_date: Date when the fine was issued. + :ivar device_number: Id of the device which generated the fine + :ivar fine_number: Id of the exported fine + """ + + model_config = ConfigDict(defer_build=True) + agent_number: None | str = field( + default=None, + metadata={ + "name": "AgentNumber", + "type": "Element", + "namespace": "", + }, + ) + creation_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "CreationDate", + "type": "Element", + "namespace": "", + }, + ) + device_number: None | str = field( + default=None, + metadata={ + "name": "DeviceNumber", + "type": "Element", + "namespace": "", + }, + ) + fine_number: None | str = field( + default=None, + metadata={ + "name": "FineNumber", + "type": "Element", + "namespace": "", + }, + ) + + +class AuditMessageType(BaseModel): + model_config = ConfigDict(defer_build=True) + headers: None | HeadersType = field( + default=None, + metadata={ + "name": "Headers", + "type": "Element", + "namespace": "", + }, + ) + payload: FineGdprExtractionExchange = field( + metadata={ + "name": "Payload", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessagesType(BaseModel): + model_config = ConfigDict(defer_build=True) + audit_message: list[AuditMessageType] = field( + default_factory=list, + metadata={ + "name": "AuditMessage", + "type": "Element", + "namespace": "", + }, + ) + fine_gdpr_extraction_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "FineGdprExtractionXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/FineGdprExtraction" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/scm/orphan_shift.py b/es_elt/src/es_elt/xml/audit_data/scm/orphan_shift.py new file mode 100644 index 0000000..178ec18 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/scm/orphan_shift.py @@ -0,0 +1,136 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +from es_elt.xml.common.headers import HeadersType + +__NAMESPACE__ = "http://www.thales.dc/OrphanShift" + + +class OrphanType(Enum): + AGENT = "AGENT" + CASH_TILL_PERIOD = "CASH_TILL_PERIOD" + + +class OrphanTypes(BaseModel): + """ + :ivar orphan_type: List of reasons for which the statement is + orphan. + """ + + model_config = ConfigDict(defer_build=True) + orphan_type: list[OrphanType] = field( + default_factory=list, + metadata={ + "name": "OrphanType", + "type": "Element", + "namespace": "", + }, + ) + + +class OrphanShiftAuditExchange(BaseModel): + """ + scm_statement_post: At shift statement creation. + + :ivar agent_number: + :ivar business_entity_id: Business Entity attached to the shift + statement (taken from the deviceList) Dictionary prefix: + BusinessEntity + :ivar cash_till_period_number: Associated cash till period number if + relevant + :ivar shift_id: + :ivar orphan_types: + """ + + model_config = ConfigDict(defer_build=True) + agent_number: None | str = field( + default=None, + metadata={ + "name": "AgentNumber", + "type": "Element", + "namespace": "", + }, + ) + business_entity_id: str = field( + metadata={ + "name": "BusinessEntityId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + cash_till_period_number: None | str = field( + default=None, + metadata={ + "name": "CashTillPeriodNumber", + "type": "Element", + "namespace": "", + }, + ) + shift_id: None | str = field( + default=None, + metadata={ + "name": "ShiftId", + "type": "Element", + "namespace": "", + }, + ) + orphan_types: None | OrphanTypes = field( + default=None, + metadata={ + "name": "OrphanTypes", + "type": "Element", + "namespace": "", + }, + ) + + +class AuditMessageType(BaseModel): + model_config = ConfigDict(defer_build=True) + headers: None | HeadersType = field( + default=None, + metadata={ + "name": "Headers", + "type": "Element", + "namespace": "", + }, + ) + payload: OrphanShiftAuditExchange = field( + metadata={ + "name": "Payload", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessagesType(BaseModel): + model_config = ConfigDict(defer_build=True) + audit_message: list[AuditMessageType] = field( + default_factory=list, + metadata={ + "name": "AuditMessage", + "type": "Element", + "namespace": "", + }, + ) + orphan_shift_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "OrphanShiftXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/OrphanShift" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/stf/__init__.py b/es_elt/src/es_elt/xml/audit_data/stf/__init__.py new file mode 100644 index 0000000..43f038f --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/stf/__init__.py @@ -0,0 +1,15 @@ +from es_elt.xml.audit_data.stf.agent_account import ( + AgentAccountAuditExchange, + AgentAccountAuditExchangeAgentProfileList, + AuditMessages, + AuditMessagesType, + AuditMessageType, +) + +__all__ = [ + "AgentAccountAuditExchange", + "AgentAccountAuditExchangeAgentProfileList", + "AuditMessageType", + "AuditMessages", + "AuditMessagesType", +] diff --git a/es_elt/src/es_elt/xml/audit_data/stf/__pycache__/__init__.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/stf/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5bf3853c301d35f7cbff508264e242fc231f1976 GIT binary patch literal 465 zcmZ{hyGjHx6o!+zip#*-2tI*MGkF0Kx3E*O5QJ$$oMdMQl9?gN;%@0v*xUImzCl_m zJ8>0ZD^GU4tc9oeb1t0!e2~X1+eQ#?{H9SDp(kH_NAQ&_4j{Qh9C0j>!X;Kg8K|%f zRa8bQE@O;p#DjZWCi5_lp8Z-LyS-5@T05$$ZVJzoH}+&!O;}qCm;XCj4K8#yZlpME zjCI*+^Gq1SYGK^YpYn3v3pdsj!lrkwPeLxHFM9V8O>69RSFSKsjW7%8_4USe+6Jk|QwCFo+ z4Ot&1Mpxe{Fpysc0t|%GrUfQi^z-G`q3ZZliX)xD9rzz)c0pc3jPXa1;NTsBybhB= KaGUA@j6MMs2#0b2 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/stf/__pycache__/agent_account.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/stf/__pycache__/agent_account.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fde78ce8a6abfaad547a5952c1d9fae11191a809 GIT binary patch literal 4070 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 C`q3Bw literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_entity_created.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_entity_created.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7975d451e8c0a18645f96037f97ab303b1d67332 GIT binary patch literal 3344 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 B!Y}{; literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_order_created.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_order_created.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..941cbd050c18d6a122299a661e55f5f613828dbb GIT binary patch literal 3595 zcmbtWOK%*<5uV4+W0(8la!8S)NHLO4YfWiaOe`c)WWlt=ND4$si5SD#AQ+6Mo8rJT zyX&4=Nz3HG05XtV0^j0;4nCR?e?tC2Eo$IIjFQMFg9CNMY=1I{7Z=x zsQOxs*KQ39?GR{-8Es8yOQ0=hv?D@W0d19z3_Mu<;d<@g=&mmFA*bE$L{8*&+F@Pc z`H!8DE_Dd?dEs`az3M%^&_+M;-UGdtMlISbxDq|9tGI@qR=DF-_(*fquxq)8Y$v&1pZSZ)ew{sC%Q?eE$4- zBU*EO8a9aAJOtim6!t^h_*`OX#6R+WL&gA6sU;JsrThv4)lwCS=7_STz6KjUEe$j} z$q|j{L?Onj+?F}886;0lQn(2?ff_m$m4_ghq%=U4Nk!nQuhgyK*NRw1Y86NgP$L7B zb*ir+G76}%0qV@DsG>lP4^U+?amtD%au$3|4p8S#^;ITQfSN{Bzg$1hr%xR2;xpQg z(ul18xiAAy7=31UFjDq2h%|v1*xgPT-I!U3zy?8|5!RW+3W3i|>GlLLadZgob^d&xCZnJCJVpt)F#{Soumgvy9?UX7PaT!Sk))Z*kQ#VJe5LI{`r7DpnO6@F?hZKe z{7sdO0+fxRI0Ir+;RbBg>G=^m3;)+AmOE`a^ZS{@ndvd}TI@eQVTjo3@R|Zri+I+d+r)d>j{T8;;peEQW29j%(Wt zIhGdzMSa^948-tOvva7g*mj1m06mSSizsGMTte|aipwB2rG1dn+b7MnPC%R8E@jMX zf8={lD2tp%MBTM!6m*-6b~`Kzn>4hkA2mbfro$J3-*kG!i}1^xCZs;RkhRGL5cx<+ zquXa?TolDHyrBgY^M$mhsG7M~kgVx%-ue4TbK}9c*2Jzgy<<)7Oib>KpWDl8wZegF zjOrWr{^;&YhNkaTrRE2_*2NQ;roQoTdvq=ZUAwVUwRWx97`JESz>#KL)3o zYI0`Rx^TkPq`tBIBy_bTn-`ce@_~$394p>2%um!JMUSpk9^8TgrfzbD+_Pnvk{uG;0oMRtL&929&Lln6hP3 z1Y$1@JeW`+4N?)Lr`D^yx`6RrqG9MfrC5$uSOs>m%#Eb7u^R4q1jP)BAAlHKluY&G z##&qox$(&9`yGcc3-J>uFf+K(jrH|ByMoFFiY5w7dNz+jix z3!0Kj!o2n>P!hBwF$0hJz*E1;&cx{dmX{oH;h{`mMy#vzjjMc8aI5G~lD6a1kbDAd z54JV=g(za)lU@W3&>`*DRjvVl0aIVVcp>StcR}#;r!a{9A|&>+*xz!!@W0c8=Wyrj zBlIYe%5eWOL)Y2 z(!I(1)g#Wa!|N+`^=<9Q)W#ANP*w!!ay@taT(L4AJ2;*b6YhiMckqUIA74s4*3CcV z<16@cP$U#l*N;0yW9Bj+i^*NIqF9GF90&1I`d*Q>5BDS#dRi#{@E~3aq09AAteUI6 zsK=mcG8J^(?Dh$EIxfSLj!Whkq!84ohNzs-D#I9?6Q<*Y#Av7U8lrs<1>5k6xb8Ke z*frcv5I}#GFc~v(^5jXopLY48@W*Y@>`7QQ(`nMzvmx|ZvhC%CrNzgO7H%)XSBdH= zcunN3IH;qC_tv}_cMiAMV{m{;5PkyUKdLOtZ=?(VlHPwKHQq><{wd9Wuc)%}ohivb zlXt5>*(e?8w`Be6Umr;DbMUb;EbCwP4d@|0-SGTQqzmwosod16T|4X-T literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_provider_created.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_provider_created.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..66493abe95489125e894c350aee6e176d86d0fa8 GIT binary patch literal 3385 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 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/capping_details.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/capping_details.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e13dd065f58213ff2b122f498eaf02782a5e98b0 GIT binary patch literal 1292 zcmZuxJ#Q387@qy!JNsggk*^VrHgfrkX+?`cW(hFjC8Zl%=^qc&-*d=d#BSTFpk)E zyk!vb8W+v5YM@QO1MrM6!nA~>TA*o&^+ZpNz(~!&tky;15l#Y)kwCu(K?Fu6PX~F% zo?i0;QzzVF<_l|2o9)=J<1m{!%w;BPJvU#p-`QL?$6IXv3Q#Ln=cBB4#acktWU;@b z7EbDYJZXC{R^p#R;YD>QRE!f&W47Y0GcO-{a>N^xho+C5h_h0LS@hpi%{F?OIe+ir zM5<;1YttnV`aV^dsEOV;j=Lvi4>lm(0`t4sHp3;ZoFqv6e z_$`Yt;=hq8oFm8g{ZXEBzbLp6ads_ge8pjD!omqU} zgZ6c%oVA3fJd=t*cqU3$rksFMbg5jyAC6Tw7gsTXj6kdl&Z4p4&fj z{;*}8ZXX%Wd3)#f)4NmRSoYx(@h%nJ~YRANGDV;WS?zpUa_9ZEN^Z>-(DbA5FUoK!)b4D{H&Qup9h raT$DKXP20dzYR^(UXd@}kgr~mFAtW!-sv3KXEpojkN*((R6_p+(A8h4 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/clearing_item_type.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/clearing_item_type.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..56eb87cafb949d249195f62bdf16001afd3dfae3 GIT binary patch literal 10745 zcmdTKO>Z05ahKnpqCO~DU$)nZzc!Z1xK83kPGZXvZ7a2CRkG8XsX?r`PtvwaF7tLN zg+hU-Kmxcu`PBH3Lk~T~h=Klr_FkYD9a=zLAb`-KD0+)w76EeV%-daZNiH1=&4(*M zvyby;XWyGQZ)V=i`*SiGuRM*w@&g`KDi;<10@ z^hMr`OO=XdNQR|h zsIurc58cp8lB#SI`ASV!Dn!?F6+_a#)Uh;(ruvQb*(%iOTUefUcepljd;{fGGFl5eWL#>(RuZ095ajXsjK;i0W(r8R-`g1 z7R^|(Sk`112DB5!;(IkowR__0sYit4B!mR zD7N*gR3Z<3W(t@{HPtAt!6In1Zbr)Rby+f`?Wn5g#=AJ;7HlPC=S<5fFy~EFMx*A2%-YWjh@72s#tVwlwy$%8kT$Nw^v-MR6%*-U@+DQhEIfc10xTj4K5rE zS$vUYn;JD${B7uIsnKn)mbOa!9{Jl9LdknIg%bH8PfsAi4}v#S9Ye^A(T?>q!^NVkm0&$k zIP??(TsnFVfry}Ep}_TU6aju*e+9rt++&|F7OP^LvS*U*;^GLYlS#H+AX{ z(9;_5|E5!DOy#(z=0)WMXkHREk5Tn`QpLc(M&$k`)qp2eTpk3fA*RJ?ao8N5t)c+~ zPlh(c@e)!M7KLf$GSR_m=uB7Llma-fQcYz(FcWj_0MPB9lMPLk!DKlbz=Z?t-_+Di zB11zkU~@=rt}Z?ld>S)AGr}_S7lcj=a}t$>n_CrZFHx}KCByl7i%Jz8r$T5ZW9=ww zOG>4ZR;w7+R{I|+wOJ5A;3MU{|*4!k_gz6w9A%c&U@LCY-lIHn?Cad z?fv6^?)2IH^pP%ub2_xMu$wyW5T(cV!DleH;j&8U(9X4cD-O-Ell$otT{OqQyQJ^0 zyG$1j+uIWS26~=HOHdyW2hGEdKk?q{r@r^S{(rVb=?tuP%QJUuOv-k`TS$WY&Dsf< zv4#7K?TNe?KiHP)xtr#YB?1Ef`Ue1TH-%w04IXqieUlpnN94UxGN5eF<3?eQwU^7p zz;CeWScg0vYl1oHbdze>lPbxa^hlHHkSA52JPKbNV@`TpoG>Tt5MQG86=E1xyx;WI zcj1V}9LPdNRyGwG4m5)0(#qN)(*J(~}2y2+lt++yo#F4)AjHk8svyHEFU<;aD21}E;RIl+ME z+(_|TnHwp3&h6>ZiaScto9fXOrYzlDS-7?EPEN$&2hQRZ9Zr?7hQ<~l6=7-iPHwrm z08&L}m>k2{fk}7?RpMzONyJ(o2u6~Owi%IN7RyXoy-mTH2}U&Q4o;F5jV%R}eUdCd zaD#YUGmA5EI9p6zt6?!EHdB-FYf9DZZ*3oU%rnp>w!D~n77Kk1=4Ayv3)uQ0f<**3 z5&Q_j3WAOpD2F%%zlMK(5KJOk?Ic+3BQC3r;Z1ksB8GOZ@AjQ=LYLRx^a_+-gG1Nu z@XHR-_|g6JR9Ad69@<&Ff8L=HGvDRcrcN~v^RB3D3L>uI`&+Jv3x(wENd68z&ygcR z7m;e3^?pyY9%n9Mph-38NtJ-yXGCU>q&_T;n1d~yZJPYwJ0aV1XYxJm*LQ83JqPhz z7*To^)V6o%$m|Jbs;tnF*^?XilNpsIY%!yaByxm4zWI^o(mvSICZ{_&LjrdTzXqg3B>ke!wcVFL|0ezHWjU=yBG;j zom4bg&j?o`2kq3CrUhjUv+P!UTG%3xq9!tt87uhSIwr1X&z@X2E?yDNy)+F4 zDwdir*`sw{#y4TCSg?lkHH_`)oX$_PQ@F!LszF}eN*ZVtwazMH5)4gZ!zkJH#+HbM zD{Mrw!Ua66LKU@2Dmo}bn982rYjy`bRi{gy}r{IN^cPyD4Mu+uzt00A~9+Xw6 z56!sV><-&>yQt+Zq1m}UVGS&Su>nOb{GhdOumZKf2Ib<~GDj>D1eQIGnd>dM4WUu@ z;25F^_YHJuowz%?ZxrZOx1CiAEyMVFB$cds6_c1Evsx{bwNTC|wY(X?3L1-Y;KohZ zzTm)0;oGr1TFhSvSP>7PAkD$9=ttk4wy8Wcp_|$q@>l>f)oy0=ZLv4c4pOtfQ}$*s zhjQJH+dNh^O*Ml|v}S^JEm{ILlWp=g2Rd(s=-X#{kE4s&9P(HtvHw{Pl?rSp%iaGB zTV(_qg7*;U2xDKvjD~jR@4e{IEbw`rQJrq5THqlvJ+wQPa|q}7>lUG1 zHgwK0b4Zxp9l7KXjvrMeKgqC<1+B%`r2bPlUyn4X()Xs+{%)(1NdPS@>` z&AZ$Q$~7-e;!UTuno*;0(~0^4hkJxwRI@6*0Rnf`Xb?Lh)w&F2Xr)9$xF#6&n$N_4VV%+D_7R+eVxaxju4 zcAP=LZeU3;<9g`em7 z&$+38auc6(!~f!5{G2=eWgx)&9&-S`NN@wM?Iata1RwhJ^#+_)LyaRzK6FoMaPVjd zem;HAXmIdoB+l@m2MY}dSwoGV@>6{1x9|fVjkjU_;TOD)&&E5xmw|As!NH?Z;epMA kJ2p4`3cSR=f^8sT?IEBM8yq|u(>H;~1Mxo`KH2{GF9m?pkpKVy literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/customer_payment_type.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/customer_payment_type.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..139eadf2376cf519829207512b1b34e1a5e31d65 GIT binary patch literal 2861 zcmcguOK%fL9G~?oev&{QJOp$Kw8WJf_W>6R(VApMqb5$|I7qB2ttLC;c*Q=<%s9b4 zxe`6}6TnAk1>d9>4n3qRAt6<5#SN5Hm2&ETc5TNCq3WrY{M&i{pTC*^{9G#K5&RD5 zuKhBL&~K_U{H3FYw%>-vBSaC^9OP<-rm1$qNw`TP8Mc#7%1s+-H)CYNe#)6}vql!$ zX(N|Fw-L=eM0A2BpCluhMm`+P!f1}AN27&azFc^zmXx)iKs?WvMB2V5pqtXYu3Jt7 zxm!fARi82^$S?X{%idnHEeQ+KEt@&?aK0^Nr&_7(?(QzgHgT9(pjKtEE2Qr-zD{~B z^JKHvVOC^HgxcV5R-0M(uxzuD_8sEb)RsLJY8c1FvizXVQ}Y zCK;1Xhxj;m1I1Ig>PyQ_Nrh=oH+D1ulHBV4gdQFA;aBl{_{fTQ5xTO<{VMLc4g z2kb39urYt zS+475D5;7E_Z}W_5Aw9t12V%QS6O>|_uyK32Pek$H1rJ}NYh|~$)TEPJ}8V`Zb2z_ z{{)kR?vT;J?6C(qD8-IcFc<5NG8CMMlQ<~F_!P{B-8b_Z6vyKXy|Ivi#OP)ogdj+V zj@HX3gRE(KkVw-E@}}wfwCkvL(KPROi8Gj)Fiq-PrpXIXPk2#5Nx=yPlM1F3oK$d1 z!L))I1+xm~6r2Y53GD--!*42Ws9%*%hjBQFUpn>{!XT@6BB9 zukOuV?XT^f|NL3%Y}CJS{aNbV-s}hcdeo1mrr+VReqI_BO_Gh?|;xQ@wmBYcXzab!~?RS#@>7yMV$()&;$k zfNqtrAPtqP%j)Ia8zyiih-cK2BJh(rrWHPvxYEey)%c`ojy976ra)8O8XHzj_syxXiae-%3(#JP-so*X04>A>y2rglIk)jnsHa4kIhJ` zv$rjzhvbx7`X{tF|4A-6sqaa#Q|}yp^P4wsp5CXPbvjJ~YsUA( zM+zao=k1vn%eEgZ??C+f!T>ke(JG#N|$STI&L8H-b1M9ABW-7Ea4 zzL70(Pqq;{219(6V&%HCfak%*YbgPEy zxbW`utHaL9kJshO$&)h)*FXx39_<3YP55n6bp?g4P!6CQae1mj1eD;ZcJQW5o(>Wy z23JG+)HszkpubFRZor#~WjD*k`2wBs;I!nJy0;!+$tQ}f9$0)PL}!LO{dJxggPyG*G1t-6J9vRI?%Ri*gO+3yl45q8OWV zRbE6*1Pmej1mGv~uR`^WzX^gtmOuDq{lx`mI{59w^;hlHpS9PjvecZZ+L|$SpSLc} zh^8BLSZHQwx3QP^ioB4}%MwSw)C5ei#QK-!c*6Z84+Dumn%ei(`x(Z{POiGuOlMUT zWrwk0Z`-}K)9brnuj9aXMHaF_|`9fX+!&vF83-DT{l)fY%{Xtg#Bv)UOE3Xzm Zopxr1K_QeGfo-;AQRDIC9|Bty$A1^xKw5)T|S z;b^?zfghlOf8xc12k3-^#2DjE0$w=TJ-dUN*vZs<)%EpPHPus}%HkPGmmnr~X zrIRnc1C-Ne0_*?;kU~JHxQZfiffPd3RWqy-E!15-G+ZO|HDZRAYYD8o#R7N?kntKI z6YF~-hg@!{ZP~>i650yy@uDbZ9t+|q6|Oml{UG#+UEsxsUWylDgb6Rr#?eZ!Iv4m% zaP*Y`6SO(D##nOCaayfbovnEUr*-5zb3y9I&4~F@KVN1CD5viP*Z~;03IcB71tinUxfXdL<{E1!m=`5Z z6VJz@Yo<8sH3{QZh?$2x=56*h;s{T?n&`Hc8(v4Sn&(`^)EC0uD&_;I+dr86+3d}U zOCp`E(LPZ%?U$w^47Vs=Zw3@2TcK6Cp{9)T@`aKt(k^ieLRlz;yaZtwqb8BK7sB-K|$m6{thzazwJE!vQ=z!eshw!hT1wwjRhK7Xs2u_6s=TDurIK)mOYNtW;fCS5! zGOy0Czvi$oaVSn=%2EfX5EJI4)X(8YNE|;7!#HyCy6Z`s7G(x$dc>2qgn0uF2gW|! z{4(HdJvkh!9aIL72S*PE#}0-@PE4&@I@8VT#@3_l#wjp$$n?qrqdeXYK0y z>p5w7{CKd|VH{i=Jt^u!NHvFzt%bLD&!iBY5V^BT8g`Ft;7XG~J1-=&uO632C#1O{%(*q) uxw8B8mT={`q%~oFs*0i3@OHT`xg+eOyf5Q%Q^r6 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/extended_address.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/extended_address.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b2aaff144c88d70653e59fa0afb7a67ac5c88cc1 GIT binary patch literal 2687 zcma);&u`pB6vypd|Je2J=I179l4j$i+mNkb7a;^vsDO~B6(w0kN&#svmg|``mi!BQ zmUN>Y_E4m7%Z&?v0I2;>xb(mwj8qAU1LD>wL6vf1-t0QHgAcXj=b7ivJii%#=h?qi zDw@EKb97*Dl?CB1=){LSXozRuu*OdU5|HQ!uGkSpXy=@qoA2aZsUz`z-jQ9Uqwu!m zsBWQCaEqNH>&qQ2C)^W|@>D=7&Ogf!;&w{CLZkQ(bQ&TpnV#npli0o&HFC80g&E;( zA7O`T8@{(^Ke}UEgmLnojUB{@u`S;+9s3ZY4ZrJ=ut!HOJr8W+;EVb`A;DU!b#QRd zB>Sd=qb9Oin~w?h5Ju|=g*b|=K{5lY4ld%^N)Bd>g^q}XPVQ?q^G=@6A;;#Bf5z^@ z(UEcjmXY*aekKk*3iGH)K`JVsBGP`&KQCR<1ysgGRJqO2AvKagX`C8OP-7WX35~N@ z6A5ZEgDUe_)dV$_K~*?4ouFnis1Z(GOHi{J)F`Ls64ZPKHO8sy32GsO8s}6kK`mxb z6P(f$)KUgD$*JW8bt8kSa;l!7Ze~zZXoao)J3#f6#ws1XA}RAGQ-h|nW6l2F40X#U zy|rZDcLN8z*du8#S8>u6_z^K3!(!VY>1IxH#Svnh3dS~u8LjEN`*sl6-Xq-{h+XIY zE2)@X&+tq)6%o6p?HI#R$!G7`VMP9iJ7$J6*!MkbcwP4)4wE4WY|eorwfTlyNIV;3 z3;SmC!Pe{L8u^Rrm1S;jV`7Fy2Dcj$Ef_p2!=RdBxIXGSn6=A>@m<$+V0x@qgliO- z7XDQ@W8;L2Z(IAmi(5f}!_f9VcWjm`F`EQi`z_)Itq=!(NTL>w4D66r6k2ifvFo%f z-*tVjg@+X-Uaw}*qY_W9!k)3n&Ik(2Q{kk#_G2-eWbJT@nFmnz5Z=R~@vv(r8v$8vC5~iF=p2xwBWK8KqfH{wKiL8{fQotkV>F8sG70L zsKyc%H{y%&{w3@z5P0xc^2ua4(pX12ze`E;OJ zrN4Q!7Bh2;oVlK6=9K>3qx&)QHgWWuJkC-&j;{2#jxQ&_w8EL?G_$1iw~sIL87|Ob znn^Fv!ZMFjOEU{f|I4GpIOn&?r{3UkuB=a;tNip);BiUv$zn`;=Cx_9#q*+!_U|VDBcms{8e5Q#h1eJ-@>hz!s=@&FXmop W!uZGi%DM7H6qRH9UjeRsV*dd#;@9v1 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/external_identifier_exchange.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/external_identifier_exchange.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0dd9df7d8a2435110e5ce3d9ecf4a0cde0c116b7 GIT binary patch literal 2015 zcma)7&1>976d!#{>s{Ni*RDTeC!}d>8Fxi#=^=zt*HMCty%gf+po@?-<5(bRHzRHB zHKn+aK>HV@ha7Tig8iTLl0y%hfqmJ`KOgsjABqIp`Pd%75_v5}ab z39{x{GP;AX{t#h0;t*;#t+5%{Y-qIGEMZ5GT|IwD%P>`mzJjkP3 zn!!+Y(?(*;%=#k8$a)Qvm=#uP=~i_ARutyoplwAY#;4A9p4V?U&d$zGCEpHWl2vf% zxVt%_X%MeslI9V3Qg=7p4$}K1?Ci6HQnx!PgYXy;&I~FC&+{tLz6L*u?32RAGOC8cZ zwjcG+?UU}oEA=Mjln}s|&-n5WQL8kuf4fy2|K6pSdge1hGC&JWI*9?_1nFxeBcfpG zP(J8}(NjUAVFjyL!xGk?sE0=1rel*B*t!XG2(Q9GFBAA-;3D^Gmh55n!CEa0;%JZH z|IWh3b082VTZHE1F#~bo5X%7h)Q|n=oPLX z@%^{x?fdi^H;r--K_BB1C!qkY&+Y;|LNCYXo?ZWS+}U4yx%AOddA3!aYfaC#rY;{_ z+E}5j7$55U?u#M&1R0usJc`EN8RRquPCtCy=02VE_)>$DybqSMNrobqpm5~_8BEYT z1rn%YR|Aa>N!PJ~O>8|;4hwy615#>sQrh(@4e+w?FnEoK#B25_o4J_pUd5f+ zcfW#p%--yqS8!9dmD4N#K2K#Ga!pP6uWGC3vw0cR=kmi;@xuaG-h(gW*@f~cyFXf; zpxU6=pc8;qR=&9IDyCClqtgJkLT9)<%Ym;2H=P0e4H|Jy=V828sMb<)_1mkQbCYC1 zT}PNrUR;DmP`HSx0y?G=cwVT=MYG<-0lX3+1#R@LG{1=@q*6 vJDT_dExtkvN2AO8rM50h<)<5M1YNsuNz$K1Z3JC=VN%kcPXC3V6I}ZTN@e|~ literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/fee.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/fee.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1640d0af78b8b3d2c0aec3bcc867cc7837f1955c GIT binary patch literal 941 zcmZuwJ#W-771+C zHhd|;F+c!m1W+y1G=+7dQzJAgY!H)Lp+)V`u5yz&)D2yUtf6E_RT&EU6W%aU;t`P05;2tU=4aB@Fp7yXuYzcQJ!|WkQg!S7=tI zTsZ3lQ!D}SO<|@H#lqx+91Bn3B9CG$T!#0{gkdB_T#9*wA|5eQ>I*xnWz1c*$0#@x z4YeJW7lf;giz zOM@=PoqWJNDOiQ31cmCj58!-i;q&6Rso?PW`ON&~bo*?2;q2c0*OZJmnmH(x`*2+9R9#q9eu)-@J1g7kuU@RIu1m@4LT$CRI`x4>*Y0xt22a?cOjXkr m4`ujmXqt8b9{vFHKf%%kcyu|rbl4i%cQpIR{{!SyY5WDCdH>r0 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/hal_link.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/hal_link.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4177cb7604085b62da3d653082f991d2193f6cd6 GIT binary patch literal 1078 zcmZuwO-~dt7;fitci9DmjR+zVqlv>|C()ZBMg)`ttj3Sa9BhVZ*PYmzSv%dp8V`HG z1pk0s`~e#HCtf|QO-M*Q7;lnYW5UUHX7MAThqq7L=Y8MjZQp*XR7yaO0p1GVX#jjx zi_>A|0QT=mum>=}kb($$5Gt%uEz&(bGCU(&>(q=a&yv{iYz^E8*xUiwBKp3b$MFgs z+bMik3kQl3KaLab^Dv21M-#=neo8hHOsFU=CvhWuz7hsp^2|m^C_b5Oa^AY-x?5XY zHQw|oNozQ8*L=Dj#xH_AL2m7Qg8i-pdw>8BV&G{{L8b{xP1?S!R1Htp05PzBVC=); zjwyF6Y+?)BxPXiA^@GwMwv9(f0hbpgb;zom!765~QN`+*&X};z5;;r<`{R=KS0sj> z-q9TWq&#%0Z4mA=RZ`tCL;<1Lj|f7dgiw^=HdVNc(95<@hbKifr!7AqA33FCf^lc4GHsO2)!N*GUFk|IL6o3h{(Zb#G&k|;`IS6(@y@~UgC zjxaJ&BQmz?om8pY0ln&tw?%eNVm2ww6ZOQHGzdeR?U3TSFxD7p2z!;1h{Rj~M;C_D zDh%F{(#E8d>;qf+_-)EXA(EA2pZl*$^&}?qujf4{Xyq9tT6t^#7bGtGm2A zGfp`bSwd|v$S*41Ant=n%p~aOE3VI0V;^#%tZmz^X!PH~b0Y HlnMO}W8V>w literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/headers.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/headers.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf06ada7c90c7c1a262d3bfc432dd59ffbf377c6 GIT binary patch literal 1229 zcmZuw-)kL36rS0icW)9BOsr93NbL_?3wNcyNfB$U3N{zPh_G6Q$x1G7U7kj{+*tf_hM7VoIc+%dt zJDs@KMtz9(WbZT@)Ir#PhAAO!=6F$*hMTl3bZ9lfhg{3eQpl|7-zbYw`t3()Vj#~Q zr7{yoYhz=o_o8TLXJ=r>Jd=7LlIT;(g;YA}j_uIzCOZ8X$U`DYOa+OpFNsB@E$D%@ zPrHoRfru+TVGBpN!u#1i@b}?naKt`VE`n>o>wY-b%pD)KRabKB5tJ|FNGi5HNi)&( zz5-0R68GH;7kE)Oj=q~#q1`wJ(wm^*xzrU;WV2MMGLc%dq%4dq4F38eNbyN#*oY^l zRCUwKrQw1bet$kowfVZ-z9SQJ8?UTpGLt!M9EL&DV+@rUYx<1krI=*M=NbEM!n1Bg zVP~6pSd=vymuFE@=6P8}|Ma_cAO#0n zr#-cy-;S^koKpw5wHtbk|9>_*HVK_BosktZwreZ2kLHgz4K|@!3Qac*9kl|pdKuvy z!XmH;?^s^}cy3clpO82I jAa6e*Z#`Wa>@Li_fO-$Y8G&iG>d<$7y!$7Csjd8P8cQwd literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/localized.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/localized.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..af7711ac8f39df8376bc3a545adde008c22d7901 GIT binary patch literal 10203 zcmd6t%WoUU9mjY1CPnH=>tVg07X2WdI8Nf&v17|}<5X4!OHC7^=w`(oMcXVNnO)kU z(Sr&kKyvdXjSfEKSiw5B@ohb0K|cSA&I}DN_zBk-UxZ7FCj8sF z!1E7uk#sIv`OGKp>ZXzUdoi?XS%tS! zsfQ0ACaqP~U}jRwq~`J&)zBX?EmQISiVal03b^g5$!IfeVK7fOd!Fs>{YbwiuCLqCJB zjLNk~{_$}&R|1#uSOO~h_5wm-0K6R^T>N#ebvpGw*N=v*CZe;u4SB)aGgR>QNZE3@2`_Ps60Q^i{ zWQREWw5W5YZOD8GFY=lexBU<3O8=a?3{Sq_z_0m@eZ7Mn!$;6if1JnED4HaiJsmNQ z49y_??c4|Rh4g*bU{(B%?q~7-t@z+pU;kF`!1J&l^!Elk18cKiUfPj@{=oBgsk7(c zJY~#N=_4%U1pBB3dNNAGMJ&;3pFW_E?&hpYH}MImE}uj*h2{*JvtVqmp0hZKdI8xv zG^p%6PhoP8zON!f196JPFQTER0MQAmfqw0H?C=3<+|L^fNBjnoR5WlTIarO$*nTv# zm~hlU)HG_G+NTETKu_<1ZgF@GaIoWOK6Gn<=ma%zKOga$1~Y1*pyxim4>MpRH@Jii za@?T7lW_%eqsd~z@dZRDsDt~-Xm@nT7vZ_z9mJ2p4X$FV(fr!od_?t|zXrd!r!siu zI7$TNg&4{QF;q3W5@INdv!WDd?adX2mzR*%N<(K`qTL>-NphQ+mY$=iv@*lpVy>Du z3cf~v=uQ-m{a|6U5UA~qOr}xHJwq@>D>vYW-@sorglfC+m9H`qQwY`I;Xcr_6Op|& zsKrKyo`T=TI-~g->-P&Vl~^c=u~5<#3mxNhj0L)S>;D@vxrdvfgFWFe^Us0ZQ+Ga2s2X<`0-~WI)t3GIZ8txTA8mkcZgocxRzI z*myMGxm7^aG%7f=&>hB(ekSL21DZG8Iv{Eq9h?{fma<^UGH2=*EPHCjj5Py`RL83bE|hRIb8bZt zHH{*UXS_5WmQV*YAGviv)HFJD*QO3y^nN+>$NQ)R8q2K&qNY*888JbL!b=FJK0p=F zeCbvJQPZg4j1-H-LZPw@`_i6}G%AATiCYmwC#Z;fnZwxzS<3q7>5a~>N;OP~j@ z_x&96p!uD<@rX{a@$Q#TXP6W=%^FP?__lobwJv~xK`QwhU%@LpT<@8 zt4CaA$3mJ$S!XB2z5m!q+z`s;_*a94#E&pHnytFx4vf|lcM!$BenfGxkfss0-#x3j zwsIQ@9EOG*Uf^ZSjpm;y@FFB!-a9f`PvB7y_|GkaM^qR~X&Qx{w=H1@ys|CcNZ<%c zc4!aQFgF_5W~?Ld@I*ayQ$H5V2HKFn)e3kr5wu8aQK9XY?H$ zt0(Ue4iGnvs4f;VpSXaB23Cqzk;9<@?geIt3MEa2UEmD&VP$CVy!$f~x89ZNPf0qw zVbZRxJyba(kc5K)$;!ciWFC)nC?=ih;5h%-qx&-zb`N?~^WjixPwmeK=RPu@D65t8 zABsu`KsXKy_T>J|7M%)F7#<5zOgb0B(ZlWW26-(!bby^@#}sA$=Dpd)g_|?8AWADR z+IFVBQQ8uuJu%u4qHPgc5vOHZTBM{kI$ETnMH*V0pjUHxFQr#8dJmxxoFY&Px+wUd znU`h=8pY^IBY)VlQ}7~mt#Z`kIxj%|V6cI{ z;P6#W;(b1J@~kI>bf1&1U5j-HJ6x>8x{zNi*L8m=w_5*ov0UL=G5=#Rk9e)n-fx9E OyXsT=H9$HiX5A9Eje|Vqzjs}lIiS{%IwlM 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 If=Qg?Ut$X=O8@`> literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/multi_ticketing_versions_audit_exchange.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/multi_ticketing_versions_audit_exchange.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..29c8ba5e4f50a8deb36264c5eef1bc8152de1402 GIT binary patch literal 4312 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 A2mk;8 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/order_status.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/order_status.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..14bace89f3d9f4c3a05a9e1acf01185221cc47e0 GIT binary patch literal 1190 zcmZ8gOKTKC5bmDW&g?^Dj8RlnBnQXC4n9zjAjV_~f?35x4|8cI(;atU9-E#Slf6ZV zpts!gCn)isc=Zqm1VKc+DOnM6vTDY>?8Dd9Rn_&b53N?6z!~zDprsJ<6(74tuL!!` z1L8H|gwv2j)TI<@B~&8SRZCh8wMcjM$Z(DFt%bG7bWNaj*HXwV;l?`QHKA^*l})!^ za!ue`Lf_*y26emf166EVG`u)YGA|2~IEAOyiSx)-3hS&evpdoxIOZM`rVi@iuNR@51b5}t=hHyK;by|9wV z2KbOofOljY{qD>=y(AJ&zb~W=;yYomC}iffGvW7~Eb2Q_^b?t-j!2mZGbfe)F1Z?o zj-NzP5<3Z|#?mskc7GtTp(UWZ6y2?pts^JbX17MpJijN8?TQc8K?5!vy1f9nUx&w} z>=T7PDVs1KcwAK>LgVUtZS!CCTpc(D*SQ+d_r@N#1|2uKISGFTmR&Cz2kLmp`Cb!7 zKy}|aHesOH>dwf4kL@{;dC~;MuC2)y-0}#*QGmk2LZ^Mt7ZOcXxsIYlE5D5ciTS5B z0I15?jaOEsbP5;?ICNYrK{XfiAmoK9#d01&%7`fUEBIE1c`>E zfhtXy0ueI5oKcA$86U^`WYrG1fXSCx=ASjVdcN)wP>Al1q7(OBhLs8(3%pmPumM3$s7q zUYrHK#C@+qA74!|RkkZ?m#dYQNfa%{x>IwV`G-@}9k5r9TN(4=lJA(4)f(KE6JQv7 woVEdes+7{tJQp}!#h2`vuvhxFn@5AH%BP)g~c;9!-4PkCo$IhIWZ_L+Cyc|Uiancu3_5`rgZH+3}~k?Fswp0dokWuFa9mnU@UvjTwZHD z>fUd69ypEegLaFwTWjAh*G_zDjlSr`+<%d`R*R!x@KMJ`Yn5y?yWO?sdb8F2SO_jWb_yF$l1)r9<$FT zb(7_1Q|Ic)Drd8_EHg6+iQJG8l9dPvW7-d-Tp{FX-wjT73WU(uBZQaXtawF2Rl+9# zzn~*Pbo_(ei$i873FF+4z771xj0?9enAfvKnAn^pF&C-LQo;gZr`#Kh&%?m>;xLRO z`=ndKN2DPFSW{01T;7-*WC7{t06XZNV(8}KG`d#b*X9qtXzXjXgZZWH_QCA+muq}( z>@h()4YV-uQ5Wz7=^ml{ZeX|@%AS&&AV*aY0~)^8_D-nk=%4{YQq{+=jZC7(yWJP&MY2tc} z&q`(9`DMAIl0I-7&=DzuAbYs+(4AZhI zlFyrc(dWQtE+4^6WAL7F$$`vF2Gos&?{WF$j%uHOp2}Xyc&nbjZfV{{Rwbm>SZ{7T zY^*dPUQWoo=*dQo%{!wzbeAtdV0qSQ9pF&K7{5V_f1%5Nqg!v#&9~FHx2r>=f){sh T3=vGjg(5a~ul|Q%%KLZ^Q`(r# literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/payment_status.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/payment_status.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..653cc54f683e3fbfb5b054e5098581604030777f GIT binary patch literal 2814 zcmai0&2Jk;6rc6y+Od<8Hf<@T8Y)U_6xl-b0992rO_ny0I98l;*vm5BnZ%>+S7&GA z_-3Rc!L7IQCxF`jge!-zQl&}=A#SY_gp?C+cKr!0Sn}K1w=-{k@AuxkH$PRYWdy%t z+T%<|=vVbJ`sLGscGQKz6GRc!9OP=Irm1np$+%fFn~bwg&dr;7w_p~M_ncF7byJ6N z-YjL%T|^6y5G}Io(`;(fEGJqWv?Z1wYv=mq+T0&%N==LBi0Ao|NbY+fyygrqa%-8m zbccj&)2Gad%d5V(%lFo}Enz}_motZ+T<%I4+-Njo z6htbu;p6Bg44xo{OpPKlLp3u?GiHuv%{5sS~e?m&aBdk zIp43==HvO9Z9XDj0fl7@zZ>>G5x9N7Wo);NHDm1t9?rzX^&?N>E(vjmF%OfyJ;C;f zWOQobw$WNyhea!xvd+|Gwhul<#Busquz+w{pIX%1+Obwzt&R27l{*{8WJexi;1!b~ zaJWr64x3&C3%0kuoCY{S76iiIXB0CoyG&rp1+yh=?F$TwWM}1Thjk@NGL1 z0(Pg7;ND(>AV_lsgS$2hLr{->8@et9@j|Y)1Tz5>F7edMHFi+PlDiE1kzB^M?|Hxw ziGY|lX zi0I?MhgkOOc#{#Y*X0gdp78`i4q!q~nR4|iWwygTMz4+ybs}I7$hV0Yf`IHvnWfAF zB-1&vW~^?kH(wjdk>!8oNT;9JZ?#+FJ%PHRb|zy|7P%KjySv;@NVWkrmkrq!EbRIY z1+u0SZUP#ZOW`JD5}@E~|=1e0~C97>T{{e1%$knIOA%{##SH|T@S&a*6 zrHtoii(jmd>RMb#%TQb#){{7&l!aIyWp!K}hCR+Fgv9y?RkOAb>z3samswU^wk+4D zk)y^H%X$c9c=)AgS=6^JOUyw>5fvq>O3W*DRCCiFZaOXBuk`wD8l8c0f)V>wT28ehpfG=4mFGg3N3NF=(~Va!-ft*vx|lnl8<9 z?O9>0Ey5*2r@Cs@{Zg$QS7#dT%=Y8HuE?HjuljmFQ_G$#&Md8OGD!s7fKaoR6KCNm z&M9#oL|jsV4Fh5`aX~2)e=n*pxnvoJ;dS_jMG%kB;h9gqE2WbzgJMVBWuO2sVRa(z z&{!8NX^s>==q~I_3GA)n66g1c6R~Ek^bZI^84?9Gr2<*U91H3>Tz!PvQGB5E3zju? zVS?PZVkHnF`0SIv+x&QzG literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/payment_trigger_source.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/payment_trigger_source.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..79446d9eaadb82ace56ab704ffc588d277ec49e9 GIT binary patch literal 1681 zcma)6&2Jk;6rb5IufK38PDCrHR&5S(g}mZ|M5v&_b!ibcRbnnHq0wY#60g{=&W@A% z7Nl_CFKGS*Q2L*6;lQC?sZu3`5Vuq@LduCZ>o}>a6gtxW_U)UQ-@Lc;d+(Qey@Fs& z*lzGtN9cF;F&pO8z{f){9wCMp4pD?XjFqj0TBLh=Ve6q0nVuP0o>hDsVJWgb8*I}n zYv>EatbN2vTt9>})bJ{W*9LEyn`hqYxYDZrr53bsUZruINGgLQ&fwGN#-pgE<>k+5 z#(N3lVP5GZ@m8>XJMbkeFt-98vXjFrcXxN&a!5m-wVChUr{jpnav*~3Z7w#F zk?^^%4w?--HSqB=7>^J~9%jhX81{6gc?Q!xlNp``36+@T+2c~n&KECY{g6h$RdHaf z`a4uOy?cXI=gVZ%k<-H+IphxGo6-^7PjI00hOE;1d3!JXq-`B z{f3uF2a2>C?KlIP!jdAZS4q{>8Q*JoI*Mm44IH0_;eSQgp@Q8_LdL~8=l{fbXMKIu zxf6&?I_m-B0NHovn_m-9|LXzS==LG1H{Y4-@Q-sH{ze*)>8QjA(c|QzC>VJ|UtC3J^5~bp>xJXaM|-jselhx9%{BxSOV2h##!P7*@%;g#3p>#9h&&-EW==w<%C9#`M1xZdtL9#-U?Q|?uK^CCm z$gTnGqZgWO+DA=PUD)e9sWj%GaryhZVsW-78hi56of3d1%EIK1ZOZ|M{q8qaJIUK+}xqzh=YV)2|*|#VW}lG&=U`d zU-TlOP85#vHwbyDgMqH*Lly6;l?vX6C;JHC2lS7I&0F{dD$qjBt3NIO_Kv&v)zj-M z&udEu#*waFs!Via+1l&=T6HGKFs*4~im2bJDSdB^neREnY}T7@oD)_WG+W%?D~r=@h7_E7cYh3W}-Xj>87JdrjcnY`I;xv9a&F$p$9>f) zxSF9sJ7*L#=q9512Z$C}_Hj1RX_R8A2GSzSO{C>PsaAe2ht!m)OgzsQMA*I;Kv&hh z(5+>n;tdk8Ri82^DlPh6*S@=CTLK2;x;As@A?^v$UuZOTc6REbM;sQ^snu8~1DAQC zGw3rbaUnrv^x6Ly8jlb|hC-2%p^A~E8AGL6BS%#u4{;P|-q2{lC{oQR(V|hNC8I*i zMs-lBRinz3f%nK~Dnca;&w{m0I9^(A>x&(8Nx#uqz)Ln~mcW#43B1KD5(W(WUEC$M zV|#aTpR>y(6g{8YU&OJ;dZaF&W7iIXcu*1zb{X-4`jn+kyLnq*F&A$&+c)(E+-CPe z76{yhxdit|vp92zU=#}<`yLnvy~G<#> zTh0J1abXju27yh~PMMNHZrgqsj9m)wluxg)-&$K;ZZ%iT=4R*CT6@`Oc9z##3%KRG zwg-k&`I2E-J!XB5MUPFaZxhF+wiw7%gB%mf@7~XO~OeDGZJP2zC-(f=y0Ra^Ig{H_Zf!`@rh$^F)m15Fss)PZok1<-{&G|u)t)F zXaw9EH}AVn!}49%_ZlN&n*vHly+7cxUdABZ3a$e@Krb>gIc@I}n!&?QcW2)ouI|pi zJ6zj+CJ8gFdksKP826tY_pOHJ)}3nss;sxO+ez zcW1ADT}%d@2SG>P0x0V;Zf=FPLnBQdO;A56{LoymO9|MPD-z}4unk$ORy^VYmx_2^ z4ygdqm}6S;rGZO}{DPDpH_fT51`saoDnBbnO1KPfa0TE?^hZX?ee?oJ$fMaezkTPY znZ|JC=hNq&Rp!4@_p+IjrGu<`CO_1_x^{rnTt10PYH8IflJ(tCgdAAU<&`K>8QgBT zT=Yom4=C~A5aaR!mbgBDKaioC<6rgot`o#TL{-ylHCOeG_2!}u`eK5{KBwb2)UG8v z?K+o%NU8)4fW54uC{NK_zoNO{(50v7;a~94skCCI7JYJAzLf F$e)b#=WPH0 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/product_price_with_details.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/product_price_with_details.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7076bb77d1d0b16e8fb79cb954531e42a1e7cebb GIT binary patch literal 5952 zcmcgw-ESMm5x?W{j&~G4B$E1|BukF%)}rH(NZmShk{Y)4;W({SH?|R!fpI-?R}zck zNA`}8CA5H0IDqozxA-9seQ1ja_8-vyp${>NJ}3(q5Ksg~-{Oiz0Y7zSkEHHMs$$wE z1a59PJGXZ`Gy9v_`BOX|mEhMTo8>>JCF!sDr~OksMm`M7lJtp0BqG~VMJ~!R@*z7^ zQHqM-6+2u}i)uwHYT|#`j#TubE_l^8D$!z8@R~hTi4|kOM~d-~bWROrF1Q>mx?38MaDhib)N?%^waNYWwg~I0MX5QVfZ0h7msc@UsNTcN5X5|unzwB-- zP}eHkPRTQrMLwacyHfj}GsMjfD z~GUeoXPt@{I@3^;Cmc0g$}tQ0l6aC$rZ*CzKdLu>Z|2tfwag1YA!QSP%S=iDXUtx z7a)N}pOgXy398`qCkE9UVE7-w)iOAL zIrzUFT>%U|{j1Xmdm0mubM2l(*)8G=$P1v#BMlInWx`c>ja}g?sN0qQ0EfQdM4NlT zc@?>9NV>xG2Pi{=y3TKa92=(Dnf>9+L1x;E)EAL3AfJlJx3v3i8`Lt{j)D&zGuqD0 z-8*fa)c8SWswdo2+RozcC11GXM+H3J!M!CI3F01Ai2O9v3Cu8rqY5RCLc&<)KxjvN zp{+w`8zLN|xgl<}t1{=V012kU>_@(2SKu%BFWK^+xn`Bz8r$;xn6LpYK4{NypCfvR z60Z+>V5&Ou4G-g^Y!QY1;Nu1kAo&0;2O;ev>5KHKb{3jF2j=adM%x#s5i+Vi8{!1t zf(^q^&9=>Fz$?4V$L2w{Z3tU|=6$ZLQF@|<7`mC=LekGb@8AHEb+~#BG&(5^lnn;! zn6@*&oAnt8C+KgWZyZxq;-P8~c@2_)@JwQOwyN}DfvQ2RD4cP0k`h6zLS=n+fJ_=# z=1C|zH^77^;^s0e!iDP?+#K$3CgkZrP07UhgC}6a`f8T# z9}fP8;FEv~t(naB)WOv9b*2tJ$&<8|16xxMhWI~4bBpcrGvw|d=|cP;qYR0I*CQau zAwJZ-MnYiz`QSD(w69c2o!Hms4;2F{-ifx}xqf?dQF_qtK0As12Ox};D4$& zuDnFRM|wuO<5S>TPT*RPZf~W0pQpSiG3n6>ct99@AB@o#2JhhjlE-j4SpEj`#KJ8B zgI)exl;M;y_H5$14+(LO{^tG%j0Dpy^l!e69s_nF;vFPR5UDA~(s$2WiEegrw8QOd`;eVH0j87w$f3VA0sU zZ^iirtAXFc<=|$320-S<$41XFM-{yzU$Azaaa7S_;5v4!mMjJhfK}k2vSD;Z)EuJd zVFG=JTi6J|Ckh*f8-RHpE8=cDdn|hLbZ@*nB4=+8wI0I4frp_SaB}f(BZvhDt0s0I z4I}W)MD7{ct|%d>vf?;v@jdtZaIom0@ zeAO*fz_)fc+d60G1Y*txk?<_&JWI~Dl`g*}l;(m;mtj|qKg)ivt<@^HCxcpWE?n4s z)wgqTg)6x+>{+cf+y;Z56;nWlXAaSwY@KZDTg0lmbqsn_ds(jn^qDbbWy$aw-h7}->o94>(<;6RS_lO1y9$>{;!wWJ| z!HH}nKumZm=)srz+g=y$D*Gioi(Ae4HIT0qS(cwmXTFrC{w7^`F3o)@6`o7qIT*gW z6K`tMvi8R-O$lzzt1;k>rUbX<49bBQazoZ00S~w41dv_O7yKDn`z+U#;MROs2FYV6 R7RA6t;LHD%;3l@)zXAKXmAL=_ literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/provider_status.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/provider_status.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..975b81899f2e1d8fa6b429818de0395eb6972afb GIT binary patch literal 1202 zcmZ8g%}>-o6rbtWc9&g1zVx6R(1Z1`jWHf1MCGG$fei_0VlR`@nRT1=i)jn&4HHcC z#tr`j4g4owJ!lgW5@U=v3~Nj{`KASQnZs}1y!YmPzfX-u4Z-QrEpI|X=$m+49JM6y zX$OdXL=nY43b2i_pe0`lWLqw1*;fM9Rs+q}inrod0^QbuR_&^U77^8U5v?%!KrU_C zwSubyx60H@?m)L@4Ez)-2F?eZFpN?s^`bC=r(%U!U`Tm&&PmvEM46x0=A*Ffy;|_x z6cp69$9#HryOXBzv}tZ_Z8g)5Hs9p(y z3qxEJDs>nK<`cJ=S1vsAn}RH`Og)#2-7iC**iJ;M=i>-#N1!PNSzu_{JXXA-H`I>7;F-8yYVK1Z7oKG-)UwZK!A{XoWO#J+oO;e=K8f zlZ`m!P!3#BZgAkh5!9ahPjJbBLl~(N5<-YuqohL0iFd~K)|)N}OFKKB`OVBbxu%fZeTC#{@$)QW$Jo0`gt zy5qRM?whXT)e=0vpnLR&OQ^*Qi>}i$SFf6eFSt)_>#FY471O40n{JuZB2XD!)H@y1 zS-nbq-LyPtIeL@1q-*#$nQ72ZOurp=9n7?SztgDK*VfiFzpY!;(}+?32-c2<8$pCY znGOEby>C=;G*oG-L}?~Ih9hbw<;D`QvE+k9z%^3|g{DdBVfq2^;%a7~B}+0SOL8Pn z3g0Im7W;ILlxUueTmmknMu$)ZNtI*N*bu5HsY;9*A3~KRbtFbrhfpJA0^*vCQAdYR zqvQpkj>V{{Ayk;@#m&Lf`?E*a5c<( zIzw&OB9!3{b6ciGu}K<8$Ots1vmWX&+A`N0=v_&HS_BjuZMcrlbi>CUWu|Unr)%G# ztbss}vKcTvW z!7U0g6kmHfD8jQJ)|SMYxyQ(=D?bC-JqU_TRIya>5}Y!2fAZ{ zM*HgsXW=!l7AAr18c4bgxj_^bT}7s2SX~0vLLt)+)$1B9DZhU(be}>Z{=P*qla?HJ-&U zW()(3b`di1VQ}UqOx?rOA(%iq5*wEfT|5rig`f+GuKyR#K*|Xdhq^ZgGJlqGM8fGM zYRQ92T=d!vIC~~i`*JPCa~M0iO)=&LjBN-BbdPxn<1f0p753!Czt_ zYMmZW$;d`w0R%r!B+~oJPW8>N^Q;PWHVMUw$mxW(gzmehMV5Jaz>n_{o?Wu24MyNf zEy+_NcAoNk5b8LLhj&F5hU*}1p0nX3;K=oj!m{g7^d*ST=auKO0IxMllTcj_X>y81p2{!xlHD z!|pJS!!I;G6~*+tA^F%!wuyr6!p88sQ~SFSQ_vinl)#;$f#m zdl}={w*m~A5nX3QF)NCfL~%|ObE0@z6!W4uA_^(I2~mSjpr8<;cz3~bUn#qZ(RA)_ zq^2+KDx%0J)#)G4{&J+gdHvV3wVko*Z`IkI>dBpB$9J=-@xp#OJDb@~O>AxKDcN*p zcTAb9OK5HongeL+yZ0jq%}Quy5JH*F>sxaXbKwoiyfVmKfQe>)Xhcvr5gLSGq7Sx? zN6dnHO_fv44^j&%%r(7@E=S<(oWx!n#18FGdrd-T2O%x9`Qi3NKlb@oC3NVd=EX^E zAFb_+qY9pbcm&I}vPe~}uHR*ls#p@*c&^hUx&z{5De;t~9wyg4;cZRI0zTQGF0(*J z3g`SiRp9#{I2DwTLa+P*S$WrzE{PWzuJ4;%Vk6^rf<;K#jn^zW>Ab6>% zL7g4sE(K}$GP?+oiq!6DP&`Shs`^+t{iibbSkWFU=l)PGJxwIk#FLy-d3|$aKl7QY OX13mXs)&DiUjG1M`F9%t literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/refund_contract_audit_exchange.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/refund_contract_audit_exchange.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c27189b67b6020621a6b620e3f8c39765412ef10 GIT binary patch literal 5244 zcmbtY&2JmW72oAIDN>>&%HOiqk{ye(Oxi|M)JEz?k!aU}L@AbB1PqGBiZikn-R07= z%h(iJKn0vbFNJUQ!H1xy7#7f5`$zO*pgkx97%)%-MQ;_PB7jeQZ)TU;mFYBX3GnUg z%5@aJ#dGscYs0+1U^YEu`P8-+43DmvHig&ZhDj}g{XeA!q0C+Dw&|OxP0wrJ zs8%07d|2@|4U4)J(yZR48=V#bX&y70UQ=#K(zJZ2`$`OTNtK35lt%0x=(G_R`-s6l z;xAwne~m;;p-Gb1Nxo41o)q+?Ns6RNhGa?ZS$t=pht7~Z&62_g0QFIWeNZ`p8VaF` zeNY1eH5@{X^g-nXYBYo@^+6Q`YAl30)(15xP{%{46Maxa0(CNkI@JeNB&R_WXF{m) zKB!@G7Elu*l-36|B2ec-sL4L4QGuEYq0aX~mBhv9kD8lC z>pnI9kWiGI2EVpr>r6P6-t@idhPJk8x|)Fu+C$T_v~{YrnL|2FN;G4`qfB#Yio-Zzr+3-}!b+}R$oX&fa8z_9 zCq&#ZKR1}xHo7)#dAdnZI@LNY^FfDdCV@^9;+JX8hUUS54-B!|l$eI@Qf3;K-s;%v zlt~$~OOsszzd(n$dwcu70s;oGf)Im7mTK%P6*5=H_17cX!9sd+rWfw4&V964o7LtQ zmse{GvpunuN~IhUDqX|_KO({g6f{a`AkQDwoR-j2)9?(-k&Yu(?0ccG^?%lL*fT~;CY_?1fUBee-*iNVANsIVHzWp>gq%{qz*|9(- z(bl^?W6ZCvhJ(+G+TF-O8A*PXCF&UrFD3Qo z37*mQmSIy}=Q&-sA<0?T&g=Svj$!#DS$w)}qe-7D`@pBXq18>trqyc9qe#!#uZ2U7cE9)n(0~`N+1aO~%YmeF=(^nK-Qka&4JJj%JlV)X^}e5uE=b4hwyaGqL{e2@;uHH zxDB50;CjJEf%AEcr-9MvSRT*VpcHUaV=Gs8T2%WbI4a}0!@S3bmoSm7iab^qX^fBd z$!)we@1G+P=&>N5L^B~D?4d=l@}WbV>=;-PCyzG|xrFD#IffUck(cpwfV~d+`V2A% z9}bPLN@=4JjEqHoO5!ABxfj6;5Mo;+zBWQvHa_kPk?cofo{!#<5iO<8iFn=`^yT>1 zLq66w?D_C54BRj$AMF!GJS!o$DCIeSH4sjG>@D_N5N=xo{^aY9WAPJxoU zHjHEh2v6%eahkd={EVfrD-R(;E%aHq&$0|c&tw0Pu7@td!15jrq1Un*B(q2=NUk8c zhU5oGeu(5pNNym33PF*+eGFUqfM5)`e}S<7LfMNQPiDTorY3LfDM(UE>FihM|2kUT zUi^A|a<^D|U7FY}jqjd3y_Zgmve3()x}Xezb6{G<_Jv3_zEz2+$ENT@qS48-OM+3eXXCPola9 z1B^f0rMG80^Yj-7XcK8~G<77$_X-*dMh6B(Z#f!X?uy zTvAZ{rAf}eJSWM3z^EkuEU{DQNyv~vK#9Vo8!s1mQJfe{)OC&f6zj1yb`n-m=V`x2 zV`t!%jUzdWg|I=~h;TnQyz_=Q5@8M9 z3E2>==BS?VqQzE${0SQ;kQ`pXWNIj}!2u+Hguja-A1mL+-agfS zy(p(bXdV0-uBjUxufyP)%Hq(6cR2CMiJ?Aurrjk56s1juAJ^oeeGL2tu67l1cEfih zXp2iAW?1eI>H%Lxe2#KOZs8~81-1gW){4BfR{VU%vdCP}_4?dWZFOaCz6R?N$F;~f z!m-2_quYLy`9NN>Z?exo09wgi0rJnds;aM)$#0a?e^+K+DV0~s^f$`Y*Twg@3kRuR qscP!W@_~ZSgAWtKYU)Y%K!L}>G?1rRznxI8yewV#mjX|rvws7JJ*t`j literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/refund_payment_audit.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/refund_payment_audit.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1c561f37282707eca7995004284f1043c4220118 GIT binary patch literal 7217 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 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/stock_entity_exchange.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/stock_entity_exchange.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..51b7c28690eff1b28da243ba337ef5a7c85753e3 GIT binary patch literal 4340 zcmcgw&2QVt6(=Q%`u?yjJC5x*ia!!7=}Oy8+g%8$lQ?m7QlMbFAQ;U!CQ3@` zklt8E4?gT3_LkfB&_7_^y`gt$GXh(Mz`B@4cF{-oqB?2*9?c= z?-6S8+^t@B!+d<(?6`>gjcwgFT>8+oDLke&OllD*%&c#_lywd3E}>o5gle|F-Pts{ zk7+&0XYTbnhGp(hvbN=zUFtaN0CER+yDpy?wt00A2Yt%V3@bloz0XZT*#nr|mIEV| zAGp2F@BRKRwco64x^BPKY(9DNq~UHF7Ihk=(+r`4iFCY0@@(4sk&iSed@WH)lZm7y zel3Z$l3}e9&k`O+OC}_$kmPgane5l3phl%>k|HWelgyu!&$B~x26iM%^49=5DAbGm zLd;Z7rhm_L+{ncIA>Hnf;`flQzAia%i!o^*t?>p3=o)2gDu8H))r zJo3B%i%KoMBaR5eH{l9)Vk=lI>w4%|={h@uy~R78#Zoyi=-NTTd?~$7$f>zQ35_aM z=f7F{$3%1Y-ai{x52oi{R+kQ{=MK)!9;TJ?+;J-1RQHwY{?wIYDV!HOA&fMv+@IMp2@q^v^#AoBUt|M!Wq+(4lOIVmib3!&Y2hV&eezNR5f@^3lpjig9 zQxoht-644I&-gU;BccxB%MXcfB^0aU2)JeJGMXQwxq@cob>6``G>h9-UXUbN zl7m2*AEGmmq_U)ly!TNhk~xLS2~;_Rs>Go3WDI)cOjah&g124ZEJJ!KY<@Zm?R1Q6Ug?h@Z3-YJd<(Q8}DyaKb6TB;h`fd?DZ` zh*k{+2KX@8pw?$}!`yDwqGBO5U=X8+2P^E^Z^SeZQ;j(ycCdAks8D@`2ZA%)C6wqw z=Y-w$eO;nELYRb`g4qQbB+~XBLBYdB4&U2^z;w)(i3rGwu&eF5GMctT_^G(M`c-x`I<|S?mcRd~|3-o$NXE3EYS|_5v@_oBb!qL7wUAuo#R!3T;kHj3 z^v8=467gc_h4ERwZKv9 zy1}2MLFd)oUp<`(FwLLDVVZ#1AG;EO z7A^_U$g~&K-S*R82AKD+3Czf}-xt%q8i3a159K(R5Emd!S3O`=%9aFdM1y42Z&On0 z+(G7p<774vu(*-!`Xt_1Hn!X?1~(R#ggTz-4~PLly2BKB^z`@Cwu556A!In*`=E?x zi>cVbZ`6Z+4H3j0Po_7#yGsKuEDi6%(ufmm!M%lL(BtgsPF8TUWm%jR{zbs@h+RC5 zjRr0_c&vcPqOP}Z-d}(4@y%Q7@Ur4oAoQIec9iUIGS|F&+$#GN`eKf7J^}M>QkLZx z(!#%`%P*wH3u)z*l8_UxRYgu5N?=~)B>9H?veMcu9;*de{U&=X!O!tLn7;;POP19? M)n7^YE8_ou0iNNX%K!iX literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/stock_entity_item.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/stock_entity_item.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..47de3d930e3ffffc13bc7f8a5406f23b0da2c2c4 GIT binary patch literal 1358 zcmaJ>O^X~w7_R>Anc3Ny-5vajiE#~#9i{sw7=sw&B9ZK%W(Da>(dnvn8mm97u3<8Z zhdrzZZ@I;TXHho)#7hny)`CDpM7+7oim)f^t)9`W1`GP_r>dT}>-~7DzwdV2NR1OR z&3>{F`WYt6;WWUQf2hDcL=Z6;%8l4C0GrIrt=P)#*w%B4Ik_9V8r#gv{n%I7iCZRm z7ZLXW5szAj>I@ihd*%nN-v9=N>?B1|ibP~(Q3s}My`9u_yCjs!_Vu#Z%|3Z2ONHV& zyBTFffwh}uny_q-k{g2NJF|+OUK$HgU5TRUbQ+3r!e||mG`c0q^wX_EWMT%)6b@Vt zuK~vV8wKtmieiJH*!&3TfDIL}d1yAA*fJ5diFMyTG!`q4T5*X(T;dU*w7$0PxBq5) zq(gnOa#c|mtnL$7EwZXuy~kMnC$QR@wFa!26RgYL|E07D&Y1TV{hySG5nD4euucd6 zat^ntNVu=aqrjFv#zm4-jAa|+yd)C_cm?CnCJ9^YwBTJ=NlL#%bLEFlKaR#_PNS-# zoM**bEW1s)NJ2r=aU}98;&#K4GdGg)`Nuu$oC* zN4KI5fv1Lk9iXGZl`mU-U12^@W(VX$=q}~>_9SCuB>kl%q_@RruD&TzU`ZPSm$pz^ z;ZPl=Gf(*?6DFjet1^&8Bzw<{%7R|}{NjJ~C0h^`26s^3R2On*%xOI?8QE(u{4#ag z1}mqyNk}XSva20Fm?Szyx!UZj!s>a@;a$jR6-*Bd zcYk#Ey%YFQ6ClJk3Ob;;-HDiRr8o}%2w$Wt)@*Wp1M;*m+*2c)c=E87e$_H z1Qse)g^j90w){(Q(2ne4Ji4~Mb?g0W*SFL$x-4f)b?RSjbpIv~lm}d=dQ+L-EyFM# gqRn5?<%j6yU(oB1`mgPGPu%AX_ipwFQZJp&U!1#f)&Kwi literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/stock_history_action.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/stock_history_action.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dda8b55dfa45fe24a56fd7dd2f534b7f71d8b353 GIT binary patch literal 1845 zcmaJ?NpIUm6dsBcMQz@9JKhq9)F3)BS?%M zJ*fQ{MCf-|oDH#tA)QnOzD5*L$wZcfB?;t!8L(t5d$MdQRuBg*6|3G_F+-MyH6aIa zIDj4_s=h)r#N=by3yE;VV>Q8sS@4{Vwj+t?Utp4u+^A8nHyp#MHR`rlDtf(TB?4~v z3&Upl24$uj$u#QwwQsVuiX#ky`!#0L)Ag$3G(SnD4h{~IPSr4(ourl2j?<_-|FUK~ z4c<;yAZEosiH}l$I@uP&Ys3(iD8d0MVVMT7LS-DJ3RXorA*y1HhH#i_I6}iXN+UQ% zqc~1uc!6G4q7vi+g%rFO=O$e=S7t1fz1USa4?t=zKAo+stKr)u2aK-_kvgY2RbJRNTvD z_0mPC`74TnU{}4)!%g^J#nM2mnak`zpsCB6z4TTt>z{Vc=hIsvv+Pq++%1#hChonkg&rjxRH`twJSLDlQ8xItqB3Ln`ld`~z0^CJjpO8eK2pk7I6NKdeVxlD9D98P>#X-S{;-qp- zdZV7RA<=O(syz^H?QkOEj$JRpfis*p0r++oXMiTq4kYB$>FfTQz< z>_w}_85Ii668lm^>Y?6= zF7}WTRQEiTH5%Yt(iCVD%EH{fc`HZ|%_t-|5=- z^tP9U8z-cY&g(nd>5MModGFdg^x&PJY7hJpe#GyI!0@f@q=5IbBuQ`4>K|zGPxQfC gwDE4_{$aeQj!GLxw|YoSy^XM>9?kxP#N_4iACWiUfB*mh literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/stock_order_exchange.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/stock_order_exchange.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a5ee0c0ca1b5f0194d45a4b067429dc9e813d356 GIT binary patch literal 5566 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 Hkl{Z7h@;F9 literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/transaction_exception_type.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/transaction_exception_type.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f6151c51157bee70ddcd614cb3a26698ac15cc2a GIT binary patch literal 1258 zcmZ`(%TLrm7@z5jb{~QW1mojiNTf!$@#4V{6=5MHuo_q|y-Z4HaGUhSv@7fl6Fm4A zz|o@y{u3`AJYW+N5@U=v3~Nj{`Ay4$kT8eeeEnwTd;Y$Du2xG3R+p}M^AbYe#YbJ0-LHOI$H=R(8TLN}be;!UR5*de{z3DKnls30sIL^Rv=a6s~x$ zr#&}?3+jr;e0uz#m8S7y%UWAotEDZ+XGx8^R+Bqn;<&X2Vo7osiH87$I4S zkRYOMU&s|gR@;tWobWRE;}w8U=t#tH>{zWRU{)M6&b{!N?=3T)I<=I!Eh`OTi?cZ5 zX=1U2Fh8{t?)Jp>z_;8e2%^wR&vGWLmo!Ns>ss95qVG8f=ZSE>iS`C=Y|QOdhu_Zd ztG(lM6;eP83m-KB&nol^>G0ajndRc|fMRMA!0eE*7iRe{FGUel2mszPTu+-r?ylR*Vufoo+2Vy@saV8^xtjP&5T=DO+KjEVn(MW;$o9ZI3ew2YLX0 zsRO=6av@YM*qeh$A$bJw z4*iv|I*os$95pm_`{UTxYu3j6x4ZWbDkIy3`^`)1S zQ+2SHb1@J5eASQjiDF`&@G&qfdY;q(4rPq-KDzS*4gW;<_R;vkz|)OtSCjC_2c?T( Q>y`|xZFl}4*z!F70ldpNV*mgE literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/transit_contract.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/transit_contract.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a1598f5d8001a08318656547166ce2f01c372645 GIT binary patch literal 2780 zcmcgu&2Jk;6rZ)%yZ%g^#7Rrjk2DRX4#B3X0MS+zp)rx$#EBXg=w3!!&!kzjyEe0H zrH&9XQjsX9+}ZsVvH3UxmMochM?K@F+`O251|VIs_H- zQA0hb;X_byAC>MwjU0kX_^44tH6qzDZ)8;%6<)L}W}O-Ko%i+rt+zKJ?WbYDv#m2p z3pYa9@WI4$!*k2r)t_@aUoK^3FG{JcTbxoaPN`L8brba@r61RIv)v=(cZclb=^cEK z->6zVU#oE;4Er6^xXp#D=UiUd$h%f8FLxR`%j;XwB)G7kkWi95wa4z}5HN>~4BbK~H~rvycY&Sc@=OgWIdA4JE63sZ{}4TXEmhEyHYh ziPgf5;>rSDonKq?;>$Oe%0+skxKIGx{4F}aMsKa$q>C$FqVQp{Ov}Zq*D<;QZmFqR_8P21Ky`z0JqhN)82Xp<4d}r2bSNlu@qVm_g2WN@=Vdx| zX^jg*H%oO3h)^6urx<&29K|URTk$r*IIi#}I*dmhe;9=V3F9DbgDk!Zl+Ybu0GTCg zK?l$T<9>Q=W!nDw6Mv`!Tn{e7_!`vF6#;`dE4thY7U&&yz)Y)w9XO6#-6fQvh?@bq zZ5{2-F;I%Uq>C^bFkdz`c&c4`6Ina}pVi(%Z5GAbC@!MF0~S|M3|u3;Jp#ogc%2_X z1ax)@>FiP;on>=A4bAq`(5$j6AA5MM!$WP(JKYbOQkqNKvmMObdEe2Qe$1TGEbV5_ z4S-%91ntVlAAZyU5_Y`degJ+y}#EM_l>hf6WNgVC z@bMV>10KnS4yfenjt~kYh?hBxg~S1&1u^V;qeQb_q@5h_rRBJL8B2al+V*bd zHb~*XFUbA`(B_|T;lN?A6e$uyh+EJOLfR8mc6P&N`|x$Sy1KgRt1AE8>$M521wV?W z3L(Ga$NAD5fu4>*ctSYgG$sl4DMeX{l|=Q`T2^B%(S1EJe53x>;#Ok%Cdj&PDdY~} z#$&=;LOoF%pMJa6nxM6WexdD5+ji$KG_h&b3DPtxf+EV&96mKSEfZU*tgnJx>}FiV zReLK-52A0kqp$!2{U8!CKYM>%6qC;!=jiCDUyOrT=P-+*jdQ^RgmD_7ioTyt5%dcYj-4WzI8sb9S>%q$nTQJ~ zm*KhiD2bggOOh;gikcrLkRX=V4D}~diOo?129duB@R-cIt21}Ld~! zyEE^tf43vo&aE$ztAQ34JsknQBKJP2TYy3fC@0W*xO`P10_c9KoxCiGuY(4N=W0Zs z8W-9YG?U5AO}I0)>~^($r689=xTxe-}9(1kwa^&(;D92pc`BA?f;k?eG>M`aG zcHRB22U{-qt6Q-S`ZDKd=4LZEU&s%@F_t>-1H4cvrO(Jae~|S*$w$w~htHQjo%I%m WPB)I%76i7%l0}VU>mLGJoyUIyJ99N_|kIRJ&chbleWE+ z;WS9gfm?3jCxAA;fWN?n1Bb;@q(}%MZX4|&q&-pX*~iSbvG`yy8YtoVuwWM+yAOR+NQ?nCqXo z3Ehba4f1j;j(Yyro4%KVfztD7Ku+)U({#`@&Eas^Nc(O;lLqn3E_3&3VC~Z=?T!Z2 z<9nPBVJZkGcR_fHC~^dX9FYi)L_|j>lA{pWQK6O+Q5}tx9DSr2dcJri=)2$kQm(^j zdiyS`f4SSy)wETQ!{3P$gMs_w@X=mZd*J}~=nNX@~3GUi7g2mV9KQn!&(uWzQ|z+`j~votYjf@zSN z3G>dy$6;W4aTvytnHK%Vls6ow(DBA##5mOp;CUo(0UV&0qNZratEjp>-aJ~mHU8|V zx-zz=Qe_Er*KT~b#n#R}=ZGVN7KU)r1-vBAeN>QJ0CJ0mVqtmzlQ(ried7O%U@GeP9|H||*8l(j literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/travel_status.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/travel_status.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..066a7a0b12f89de1476c96b8c571eb6ab55241fc GIT binary patch literal 1217 zcmZ8h%WKp?7@x^&v#+*l)fOM9C^Q~6NDn?xv9`-v=q{z*g5)y9%+w9!u}%`}-d0f1 zo45KWDD8jZ)q@6vf{1vl?26En-z0r(ox^W_`R1GNJ^56vmJqBV-Ee0lguaW9gQeyK z4>~|L5k(Yx$j27Of=iy{%a)vR*;9PgQhm+RvTwyJ_`0P7SFNIi8i;DI5G^oyOU`Xt zrA(@Ww8+#$X}MQ2%D;q)fzz@b1YvB)ZWu)HsnmnSH>9-q(2iI$q|8f8^I@>=K3#B~ z7!=fXmw9yWawm?vcT96*W1|*#Y>!1X>X>bAKWE-5m`frjk0D3AzYV5tfM~C6c0!+--7e$Y4IX&z6UJk^7Bi<~#(vl2 ztQ+z;GFe2J7n>1x4(JQtGo8@)!@!KQY)O=*TkH0?XmSR^X>}7+WJkU8-9|fea@SqKNRG&4JH4sAsr7aj7u`F3a3@Wy*Z0%RoQbD3omC7#O)()iw z7zLf`ci~R2Xq3{*Xl;*qKkUu~=pK0&-RVh&ymw;sX06F$o9m$2G88@rJ0BMy?xsai z^{8t*jEnU1Y)^?3CA)SOsHi|x0D$65-h5lkm8L<^7V}8iI^*O?;(9dIIeV74oKZN? zeeg?d@GZ)ms?TjNVJ)NhUkF?n;+jyYz(_EUINA7e;gMeu@^L~&hMtiBLglB0rT~#b zGz;(={gtqK>o*dhp~;IMu6{mc_Lsh%yR=g|^IqANrIV$hten^S^*8s1NKv&sD`BN& zRK$F)Cvn1IKDl_Dslwo$anbfv@Ajx2#ID1|uOJWo%!^2*N)C={*{h4PB+@D&t+{4> zb$M>S4)(IC%VIuW@;&`-{wD78YhYM3IjRBd${6Es=*kat`X{>n4bALK%=W88O~zC2 U7KRA6VWo(*ceno_*s?tS0Yi5regFUf literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/__pycache__/validation_model.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/validation_model.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..47ee7aed00b19652bc3c130317b8c5eb1748cfb6 GIT binary patch literal 1332 zcmZ8h&1)M+6rb5ItyWTPH?o5p;+Qs&YzSHkrH3?>s{ekil6 zI_k*<_t0Bz=|50tasHEDeCWX)2n0e2y*XH=;8Wg={84*Azj^a!=FNNh{oel3XgCPQ zgl@&ZY6!iNi<4na4SYBN;{~FK;sm8Qz*yQ^qNRGED_c*D)C|nj3M{oYl1gd^HrQrR z)zCMHT04kVn7*q|V+M}$+Tg7+^VC}#J8tbCdBnw{7G_yqhGm>*1uTtDHcDMhRKE@j zwvkho2xleF`tg(1I4a?Q*^gO5kFF2Oa(Kt{wzjrfC=PV01qRgvlNx~qwN%EITM@Gtf_?hKlCum$MPAPP%io_q)>0c{ zuKS?3*7e)#WaVCG<$m{JPs}Q7%|G)vo4vNb+FtMa9bvC+cGugz&Z_U)!X_jOQ$~nz z2uX7~N~B#U9%o-A@ngoz zuvM~X;Famn<7}AovhY|zSW`^ua|xU(VHS>`B_NeB)?EFl zdEs(vgOwq-;jr%-dwhhM^18n8 zi*cZ9A377=xMpp4_G(uq$S|#GSu&RI)}@O3qjJPS#aw<5gu$S-xny71!!ZrBGLE?X z`b=|Qcvi?-$;nnrHF}|{5Dh~7_C{y(L3^bG@st!*(&q~~vhPki=SzMA0!yNc7Qlgy rF@A+U{u|A|MYmp|o3Cd--)>AS8-Mh?oFJGc3sr1AkN-t5sXE>R5F$qJ literal 0 HcmV?d00001 diff --git a/es_elt/src/es_elt/xml/common/capping_details.py b/es_elt/src/es_elt/xml/common/capping_details.py new file mode 100644 index 0000000..7c3b2bd --- /dev/null +++ b/es_elt/src/es_elt/xml/common/capping_details.py @@ -0,0 +1,34 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/CappingDetails" + + +class CappingDetails(BaseModel): + """ + :ivar capping_rule_id: Id of the capping rule + :ivar capping_instance_id: Id of the instance of capping rule + """ + + class Meta: + namespace = "http://www.thales.dc/CappingDetails" + + model_config = ConfigDict(defer_build=True) + capping_rule_id: str = field( + metadata={ + "name": "CappingRuleId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + capping_instance_id: str = field( + metadata={ + "name": "CappingInstanceId", + "type": "Element", + "namespace": "", + "required": True, + } + ) diff --git a/es_elt/src/es_elt/xml/common/clearing_item_type.py b/es_elt/src/es_elt/xml/common/clearing_item_type.py new file mode 100644 index 0000000..3ee4ba0 --- /dev/null +++ b/es_elt/src/es_elt/xml/common/clearing_item_type.py @@ -0,0 +1,415 @@ +from __future__ import annotations + +from decimal import Decimal +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +from es_elt.xml.common.localized import ( + LocalizedBusinessEntity, + LocalizedBusinessEntityRoleType, + LocalizedBusinessRole, +) + +__NAMESPACE__ = "http://www.thales.dc/ClearingItemType" + + +class ContractRuleDetailsPtomContractTypes(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + ptom_contract_type: list[int] = field( + default_factory=list, + metadata={ + "name": "PtomContractType", + "type": "Element", + "namespace": "", + }, + ) + + +class FeeData(BaseModel): + """ + :ivar fee_contract_id: The contract as an instance of a fee. + """ + + model_config = ConfigDict(defer_build=True) + fee_contract_id: str = field( + metadata={ + "name": "FeeContractId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class RuleType(Enum): + REFUND = "REFUND" + SALE = "SALE" + USAGE = "USAGE" + + +class ApportionmentItemType(BaseModel): + """ + Results of apportionment calculation. + + :ivar stakeholder_id: The stakeholder involved in the apportionment + :ivar role_type: Retailer, Card Owner, Product Owner, Transporter... + :ivar account: The account to where the money is credited/debited. + :ivar allocated_amount: amount (positive or negative) allocated to + the Clearing Participant + """ + + model_config = ConfigDict(defer_build=True) + stakeholder_id: LocalizedBusinessEntity = field( + metadata={ + "name": "StakeholderId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + role_type: LocalizedBusinessRole = field( + metadata={ + "name": "RoleType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + account: str = field( + metadata={ + "name": "Account", + "type": "Element", + "namespace": "", + "required": True, + } + ) + allocated_amount: Decimal = field( + metadata={ + "name": "AllocatedAmount", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class ContractApportionmentItemType(BaseModel): + """ + Results of apportionment calculation. + + :ivar stakeholder_id: The stakeholder involved in the apportionment + :ivar account: The account to where the money is credited/debited. + :ivar allocated_amount: amount (positive or negative) allocated to + the Clearing Participant + """ + + model_config = ConfigDict(defer_build=True) + stakeholder_id: LocalizedBusinessEntity = field( + metadata={ + "name": "StakeholderId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + account: str = field( + metadata={ + "name": "Account", + "type": "Element", + "namespace": "", + "required": True, + } + ) + allocated_amount: Decimal = field( + metadata={ + "name": "AllocatedAmount", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class ElementarySettlementItemType(BaseModel): + """ + Individual money movement resulting from the apportionment items. + + :ivar payer_id: The stakeholder who will be debited money + :ivar payer_role_type: Retailer, Card Owner, Product Owner, + Transporter... + :ivar payer_account: The account from which the money is debited. + :ivar payee_id: The stakeholder who will be credited money + :ivar payee_role_type: Retailer, Card Owner, Product Owner, + Transporter... + :ivar payee_account: The account to where the money is credited. + :ivar settlement_amount: amount (POSITIVE) to transfer between PAYER + and PAYEE + """ + + model_config = ConfigDict(defer_build=True) + payer_id: LocalizedBusinessEntity = field( + metadata={ + "name": "PayerId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + payer_role_type: LocalizedBusinessEntityRoleType = field( + metadata={ + "name": "PayerRoleType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + payer_account: str = field( + metadata={ + "name": "PayerAccount", + "type": "Element", + "namespace": "", + "required": True, + } + ) + payee_id: LocalizedBusinessEntity = field( + metadata={ + "name": "PayeeId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + payee_role_type: LocalizedBusinessEntityRoleType = field( + metadata={ + "name": "PayeeRoleType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + payee_account: str = field( + metadata={ + "name": "PayeeAccount", + "type": "Element", + "namespace": "", + "required": True, + } + ) + settlement_amount: Decimal = field( + metadata={ + "name": "SettlementAmount", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class SettlementItemType(BaseModel): + """ + Individual money movement resulting from the apportionment items. + + :ivar payer_id: The stakeholder who will be debited money + :ivar payer_account: The account from which the money is debited. + :ivar payee_id: The stakeholder who will be credited money + :ivar payee_account: The account to where the money is credited. + :ivar settlement_amount: amount (POSITIVE) to transfer between PAYER + and PAYEE + """ + + model_config = ConfigDict(defer_build=True) + payer_id: LocalizedBusinessEntity = field( + metadata={ + "name": "PayerId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + payer_account: str = field( + metadata={ + "name": "PayerAccount", + "type": "Element", + "namespace": "", + "required": True, + } + ) + payee_id: LocalizedBusinessEntity = field( + metadata={ + "name": "PayeeId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + payee_account: str = field( + metadata={ + "name": "PayeeAccount", + "type": "Element", + "namespace": "", + "required": True, + } + ) + settlement_amount: Decimal = field( + metadata={ + "name": "SettlementAmount", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class ApportionmentItemsType(BaseModel): + """ + Output from apportionment. + """ + + model_config = ConfigDict(defer_build=True) + apportionment_item: list[ContractApportionmentItemType] = field( + default_factory=list, + metadata={ + "name": "ApportionmentItem", + "type": "Element", + "namespace": "", + }, + ) + + +class ContractRuleDetailsApportionmentItems(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + apportionment_item: list[ApportionmentItemType] = field( + default_factory=list, + metadata={ + "name": "ApportionmentItem", + "type": "Element", + "namespace": "", + }, + ) + + +class ContractRuleDetailsSettlementItems(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + settlement_item: list[ElementarySettlementItemType] = field( + default_factory=list, + metadata={ + "name": "SettlementItem", + "type": "Element", + "namespace": "", + }, + ) + + +class SettlementItemsType(BaseModel): + """ + Individual money transfer. + + The current settlements already take into account what has been done in + previous settlement periods. For instance, if in period n-1, we needed + to give A->B 10, and in current period n we realize that we needed + to give A->B 3, the current audit will only contain a + contractSettlement B->A 7 to compensate. + """ + + model_config = ConfigDict(defer_build=True) + settlement_item: list[SettlementItemType] = field( + default_factory=list, + metadata={ + "name": "SettlementItem", + "type": "Element", + "namespace": "", + }, + ) + + +class ContractRuleDetails(BaseModel): + """ + Results of apportionment calculation. + + :ivar rule_id: The name of the rule + :ivar rule_type: The type of the rule + :ivar part: + :ivar apportionment_items: The apportionment result for this rule. + If the + :ivar settlement_items: Individual money transfer + :ivar error: + :ivar error_message: + :ivar ptom_contract_types: + """ + + model_config = ConfigDict(defer_build=True) + rule_id: str = field( + metadata={ + "name": "RuleId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + rule_type: RuleType = field( + metadata={ + "name": "RuleType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + part: None | str = field( + default=None, + metadata={ + "name": "Part", + "type": "Element", + "namespace": "", + }, + ) + apportionment_items: None | ContractRuleDetailsApportionmentItems = field( + default=None, + metadata={ + "name": "ApportionmentItems", + "type": "Element", + "namespace": "", + }, + ) + settlement_items: None | ContractRuleDetailsSettlementItems = field( + default=None, + metadata={ + "name": "SettlementItems", + "type": "Element", + "namespace": "", + }, + ) + error: None | bool = field( + default=None, + metadata={ + "name": "Error", + "type": "Element", + "namespace": "", + }, + ) + error_message: None | str = field( + default=None, + metadata={ + "name": "ErrorMessage", + "type": "Element", + "namespace": "", + }, + ) + ptom_contract_types: None | ContractRuleDetailsPtomContractTypes = field( + default=None, + metadata={ + "name": "PtomContractTypes", + "type": "Element", + "namespace": "", + }, + ) diff --git a/es_elt/src/es_elt/xml/common/customer_payment_type.py b/es_elt/src/es_elt/xml/common/customer_payment_type.py new file mode 100644 index 0000000..e15dad6 --- /dev/null +++ b/es_elt/src/es_elt/xml/common/customer_payment_type.py @@ -0,0 +1,61 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/CustomerPaymentType" + + +class CustomerPaymentType1(Enum): + """ + :cvar DIRECT_DEBT: Direct debt because of failing pre-authorization + or missing payment means. + :cvar TRAVEL_CHARGE: Request for a payment related to one or many + travels. + :cvar TRAVEL_REVERSAL: Request for reversal (possibly partial) of + one or many previous payments related to travels. + :cvar NOMINAL_AUTHORIZATION: Nominal authorization to check the + validity of the account related to the card and the card itself. + :cvar AUTHORIZATION: Authorization used to trigger risk + reassessment. + :cvar AUTHORIZATION_REVERSAL: Authorization reversal after risk + reassessment approved. + :cvar DEBT_REPAYMENT: Direct payment for clearing debts related to + declined pre-authorizations or requests for payments. + :cvar DEBT_RECOVERY: Automatic payment for clearing debts related to + declined pre-authorizations or requests for payments. + :cvar DEBT_SURPLUS_REVERSAL: Automatic reimbursement when two + interleaving clearings of the same debt reimbursed too much. + :cvar ORDER_CHARGE: Request for a payment related to an order. + :cvar ONLINE_ORDER: Payment triggered by an online order. + :cvar DIRECT_PAYMENT: Direct payment. + :cvar RESET: Reset Payment. + """ + + DIRECT_DEBT = "DIRECT_DEBT" + TRAVEL_CHARGE = "TRAVEL_CHARGE" + TRAVEL_REVERSAL = "TRAVEL_REVERSAL" + NOMINAL_AUTHORIZATION = "NOMINAL_AUTHORIZATION" + AUTHORIZATION = "AUTHORIZATION" + AUTHORIZATION_REVERSAL = "AUTHORIZATION_REVERSAL" + DEBT_REPAYMENT = "DEBT_REPAYMENT" + DEBT_RECOVERY = "DEBT_RECOVERY" + DEBT_SURPLUS_REVERSAL = "DEBT_SURPLUS_REVERSAL" + ORDER_CHARGE = "ORDER_CHARGE" + ONLINE_ORDER = "ONLINE_ORDER" + DIRECT_PAYMENT = "DIRECT_PAYMENT" + RESET = "RESET" + + +class CustomerPaymentType(BaseModel): + class Meta: + namespace = "http://www.thales.dc/CustomerPaymentType" + + model_config = ConfigDict(defer_build=True) + value: CustomerPaymentType1 = field( + metadata={ + "required": True, + } + ) diff --git a/es_elt/src/es_elt/xml/common/deny_action_status.py b/es_elt/src/es_elt/xml/common/deny_action_status.py new file mode 100644 index 0000000..47ab5a2 --- /dev/null +++ b/es_elt/src/es_elt/xml/common/deny_action_status.py @@ -0,0 +1,29 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/DenyActionStatus" + + +class DenyActionStatus1(Enum): + EXPIRED = "EXPIRED" + CANCELLED = "CANCELLED" + COMPLETED = "COMPLETED" + BLOCKED = "BLOCKED" + EXECUTED = "EXECUTED" + ACTIVE = "ACTIVE" + + +class DenyActionStatus(BaseModel): + class Meta: + namespace = "http://www.thales.dc/DenyActionStatus" + + model_config = ConfigDict(defer_build=True) + value: DenyActionStatus1 = field( + metadata={ + "required": True, + } + ) diff --git a/es_elt/src/es_elt/xml/common/discount.py b/es_elt/src/es_elt/xml/common/discount.py new file mode 100644 index 0000000..b33d67f --- /dev/null +++ b/es_elt/src/es_elt/xml/common/discount.py @@ -0,0 +1,36 @@ +from __future__ import annotations + +from decimal import Decimal + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/Discount" + + +class Discount(BaseModel): + model_config = ConfigDict(defer_build=True) + amount: None | Decimal = field( + default=None, + metadata={ + "name": "Amount", + "type": "Element", + "namespace": "", + }, + ) + discount_percentage: None | Decimal = field( + default=None, + metadata={ + "name": "DiscountPercentage", + "type": "Element", + "namespace": "", + }, + ) + discount_type: str = field( + metadata={ + "name": "DiscountType", + "type": "Element", + "namespace": "", + "required": True, + } + ) diff --git a/es_elt/src/es_elt/xml/common/extended_address.py b/es_elt/src/es_elt/xml/common/extended_address.py new file mode 100644 index 0000000..7e7b511 --- /dev/null +++ b/es_elt/src/es_elt/xml/common/extended_address.py @@ -0,0 +1,135 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +from es_elt.xml.common.localized import LocalizedCountry, LocalizedTitle + +__NAMESPACE__ = "http://www.thales.dc/ExtendedAddress" + + +class ExtendedAddress(BaseModel): + """ + :ivar city: + :ivar complement: + :ivar country: + :ivar postal_code: + :ivar state: + :ivar street: + :ivar alias: Shipping address alias + :ivar company_name: + :ivar email_address: + :ivar first_name: + :ivar last_name: + :ivar phone_number: + :ivar title: + """ + + class Meta: + namespace = "http://www.thales.dc/ExtendedAddress" + + model_config = ConfigDict(defer_build=True) + city: None | str = field( + default=None, + metadata={ + "name": "City", + "type": "Element", + "namespace": "", + }, + ) + complement: None | str = field( + default=None, + metadata={ + "name": "Complement", + "type": "Element", + "namespace": "", + }, + ) + country: None | LocalizedCountry = field( + default=None, + metadata={ + "name": "Country", + "type": "Element", + "namespace": "", + }, + ) + postal_code: None | str = field( + default=None, + metadata={ + "name": "PostalCode", + "type": "Element", + "namespace": "", + }, + ) + state: None | str = field( + default=None, + metadata={ + "name": "State", + "type": "Element", + "namespace": "", + }, + ) + street: None | str = field( + default=None, + metadata={ + "name": "Street", + "type": "Element", + "namespace": "", + }, + ) + alias: None | str = field( + default=None, + metadata={ + "name": "Alias", + "type": "Element", + "namespace": "", + }, + ) + company_name: None | str = field( + default=None, + metadata={ + "name": "CompanyName", + "type": "Element", + "namespace": "", + }, + ) + email_address: None | str = field( + default=None, + metadata={ + "name": "EmailAddress", + "type": "Element", + "namespace": "", + }, + ) + first_name: None | str = field( + default=None, + metadata={ + "name": "FirstName", + "type": "Element", + "namespace": "", + }, + ) + last_name: None | str = field( + default=None, + metadata={ + "name": "LastName", + "type": "Element", + "namespace": "", + }, + ) + phone_number: None | str = field( + default=None, + metadata={ + "name": "PhoneNumber", + "type": "Element", + "namespace": "", + }, + ) + title: None | LocalizedTitle = field( + default=None, + metadata={ + "name": "Title", + "type": "Element", + "namespace": "", + }, + ) diff --git a/es_elt/src/es_elt/xml/common/external_identifier_exchange.py b/es_elt/src/es_elt/xml/common/external_identifier_exchange.py new file mode 100644 index 0000000..e73e42f --- /dev/null +++ b/es_elt/src/es_elt/xml/common/external_identifier_exchange.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/ExternalIdentifierExchange" + + +class ExternalIdentifierTypeExchange(Enum): + DEVICE = "DEVICE" + AGENT = "AGENT" + + +class LocalizedExternalIdentifierTypeExchange(BaseModel): + model_config = ConfigDict(defer_build=True) + value: ExternalIdentifierTypeExchange = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class ExternalIdentifierExchange(BaseModel): + class Meta: + namespace = "http://www.thales.dc/ExternalIdentifierExchange" + + model_config = ConfigDict(defer_build=True) + external_identifier_id: None | str = field( + default=None, + metadata={ + "name": "ExternalIdentifierId", + "type": "Element", + "namespace": "", + }, + ) + external_identifier_type: None | LocalizedExternalIdentifierTypeExchange = field( + default=None, + metadata={ + "name": "ExternalIdentifierType", + "type": "Element", + "namespace": "", + }, + ) diff --git a/es_elt/src/es_elt/xml/common/fee.py b/es_elt/src/es_elt/xml/common/fee.py new file mode 100644 index 0000000..0d146fe --- /dev/null +++ b/es_elt/src/es_elt/xml/common/fee.py @@ -0,0 +1,28 @@ +from __future__ import annotations + +from decimal import Decimal + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/Fee" + + +class Fee(BaseModel): + model_config = ConfigDict(defer_build=True) + amount: Decimal = field( + metadata={ + "name": "Amount", + "type": "Element", + "namespace": "", + "required": True, + } + ) + type_value: str = field( + metadata={ + "name": "Type", + "type": "Element", + "namespace": "", + "required": True, + } + ) diff --git a/es_elt/src/es_elt/xml/common/hal_link.py b/es_elt/src/es_elt/xml/common/hal_link.py new file mode 100644 index 0000000..3f86eb9 --- /dev/null +++ b/es_elt/src/es_elt/xml/common/hal_link.py @@ -0,0 +1,29 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/HalLink" + + +class HalLink(BaseModel): + class Meta: + namespace = "http://www.thales.dc/HalLink" + + model_config = ConfigDict(defer_build=True) + href: None | str = field( + default=None, + metadata={ + "name": "Href", + "type": "Element", + "namespace": "", + }, + ) + rel: None | str = field( + default=None, + metadata={ + "name": "Rel", + "type": "Element", + "namespace": "", + }, + ) diff --git a/es_elt/src/es_elt/xml/common/headers.py b/es_elt/src/es_elt/xml/common/headers.py new file mode 100644 index 0000000..09278df --- /dev/null +++ b/es_elt/src/es_elt/xml/common/headers.py @@ -0,0 +1,25 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/Headers" + + +class HeadersType(BaseModel): + model_config = ConfigDict(defer_build=True) + any_element: list[object] = field( + default_factory=list, + metadata={ + "type": "Wildcard", + "namespace": "##any", + "process_contents": "skip", + }, + ) + + +class Headers(HeadersType): + class Meta: + namespace = "http://www.thales.dc/Headers" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/common/localized.py b/es_elt/src/es_elt/xml/common/localized.py new file mode 100644 index 0000000..bdb4092 --- /dev/null +++ b/es_elt/src/es_elt/xml/common/localized.py @@ -0,0 +1,549 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +from es_elt.xml.common.order_status import OrderStatus +from es_elt.xml.common.provider_status import ProviderStatus +from es_elt.xml.common.stock_history_action import StockHistoryAction +from es_elt.xml.common.travel_event_source import TravelEventSource +from es_elt.xml.common.travel_event_type import TravelEventType + +__NAMESPACE__ = "http://www.thales.dc/Localized" + + +class Localized(BaseModel): + class Meta: + namespace = "http://www.thales.dc/Localized" + + model_config = ConfigDict(defer_build=True) + any_element: None | object = field( + default=None, + metadata={ + "type": "Wildcard", + "namespace": "##any", + }, + ) + + +class LocalizedBusinessEntity(BaseModel): + model_config = ConfigDict(defer_build=True) + value: str = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedBusinessEntityInt(BaseModel): + model_config = ConfigDict(defer_build=True) + value: int = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedBusinessEntityRoleType(BaseModel): + model_config = ConfigDict(defer_build=True) + value: str = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedBusinessRole(BaseModel): + model_config = ConfigDict(defer_build=True) + value: str = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedCappingRule(BaseModel): + model_config = ConfigDict(defer_build=True) + value: int = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedCountry(BaseModel): + model_config = ConfigDict(defer_build=True) + value: str = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedDestinationEntityBe(BaseModel): + class Meta: + name = "LocalizedDestinationEntityBE" + + model_config = ConfigDict(defer_build=True) + value: int = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedDestinationEntityType(BaseModel): + model_config = ConfigDict(defer_build=True) + value: int = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedEntityType(BaseModel): + model_config = ConfigDict(defer_build=True) + value: int = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedFarePoint(BaseModel): + model_config = ConfigDict(defer_build=True) + value: int = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedFeeRule(BaseModel): + model_config = ConfigDict(defer_build=True) + value: int = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedItemType(BaseModel): + model_config = ConfigDict(defer_build=True) + value: int = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedJourneyDefinition(BaseModel): + model_config = ConfigDict(defer_build=True) + value: int = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedMediaType(BaseModel): + model_config = ConfigDict(defer_build=True) + value: int = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedMediaTypeId(BaseModel): + model_config = ConfigDict(defer_build=True) + value: int = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedNonTransitProductCode(BaseModel): + model_config = ConfigDict(defer_build=True) + value: int = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedProductCode(BaseModel): + model_config = ConfigDict(defer_build=True) + value: int = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedStockItemType(BaseModel): + model_config = ConfigDict(defer_build=True) + value: int = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedStopPoint(BaseModel): + model_config = ConfigDict(defer_build=True) + value: int = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedSupplementProductCode(BaseModel): + model_config = ConfigDict(defer_build=True) + value: int = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedTitle(BaseModel): + model_config = ConfigDict(defer_build=True) + value: str = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedOrderStatus(BaseModel): + model_config = ConfigDict(defer_build=True) + value: OrderStatus = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedProviderStatus(BaseModel): + model_config = ConfigDict(defer_build=True) + value: ProviderStatus = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedStockHistoryAction(BaseModel): + model_config = ConfigDict(defer_build=True) + value: StockHistoryAction = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedTravelEventSource(BaseModel): + model_config = ConfigDict(defer_build=True) + value: TravelEventSource = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedTravelEventType(BaseModel): + model_config = ConfigDict(defer_build=True) + value: TravelEventType = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) diff --git a/es_elt/src/es_elt/xml/common/media_consumption_adjustment_common.py b/es_elt/src/es_elt/xml/common/media_consumption_adjustment_common.py new file mode 100644 index 0000000..93e674c --- /dev/null +++ b/es_elt/src/es_elt/xml/common/media_consumption_adjustment_common.py @@ -0,0 +1,396 @@ +from __future__ import annotations + +from decimal import Decimal +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDateTime +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/MediaConsumptionAdjustmentCommon" + + +class AdjustmentSource(Enum): + SINGLE = "SINGLE" + BULK = "BULK" + + +class AdjustmentType(Enum): + MISSING = "MISSING" + EXPECTED = "EXPECTED" + EXCESS = "EXCESS" + + +class ExecutionStatus(Enum): + SUCCESS = "SUCCESS" + FAILED = "FAILED" + SKIPPED = "SKIPPED" + + +class MediaConsumptionAdjustmentModificationResult(BaseModel): + """ + :ivar previous_leg_price: Leg price before the adjustment + :ivar recomputed_leg_price: Leg price charge after the adjustment + :ivar leg_price_variation: Variation of price on leg adjusted + :ivar other_legs_price_variation: Variation of price on other legs + :ivar total_price_variation: Total price variation: (Price After + Adjustment) - (Price Before Adjustment) + :ivar reason_code: Reason for the adjustment + :ivar reason_details: Detail reason for the adjustment + """ + + model_config = ConfigDict(defer_build=True) + previous_leg_price: Decimal = field( + metadata={ + "name": "PreviousLegPrice", + "type": "Element", + "namespace": "", + "required": True, + } + ) + recomputed_leg_price: Decimal = field( + metadata={ + "name": "RecomputedLegPrice", + "type": "Element", + "namespace": "", + "required": True, + } + ) + leg_price_variation: Decimal = field( + metadata={ + "name": "LegPriceVariation", + "type": "Element", + "namespace": "", + "required": True, + } + ) + other_legs_price_variation: Decimal = field( + metadata={ + "name": "OtherLegsPriceVariation", + "type": "Element", + "namespace": "", + "required": True, + } + ) + total_price_variation: Decimal = field( + metadata={ + "name": "TotalPriceVariation", + "type": "Element", + "namespace": "", + "required": True, + } + ) + reason_code: str = field( + metadata={ + "name": "ReasonCode", + "type": "Element", + "namespace": "", + "required": True, + } + ) + reason_details: str = field( + metadata={ + "name": "ReasonDetails", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class MediaConsumptionJourneyAdjustmentModificationResult(BaseModel): + """ + :ivar previous_journey_price: Journey price before the adjustment + :ivar recomputed_journey_price: Journey price charge after the + adjustment + :ivar other_journeys_price_variation: Variation of price on other + journeys + :ivar total_price_variation: Total price variation: (Price After + Adjustment) - (Price Before Adjustment) + :ivar reason_code: Reason for the adjustment + :ivar reason_details: Detail reason for the adjustment + """ + + model_config = ConfigDict(defer_build=True) + previous_journey_price: Decimal = field( + metadata={ + "name": "PreviousJourneyPrice", + "type": "Element", + "namespace": "", + "required": True, + } + ) + recomputed_journey_price: Decimal = field( + metadata={ + "name": "RecomputedJourneyPrice", + "type": "Element", + "namespace": "", + "required": True, + } + ) + other_journeys_price_variation: Decimal = field( + metadata={ + "name": "OtherJourneysPriceVariation", + "type": "Element", + "namespace": "", + "required": True, + } + ) + total_price_variation: Decimal = field( + metadata={ + "name": "TotalPriceVariation", + "type": "Element", + "namespace": "", + "required": True, + } + ) + reason_code: str = field( + metadata={ + "name": "ReasonCode", + "type": "Element", + "namespace": "", + "required": True, + } + ) + reason_details: str = field( + metadata={ + "name": "ReasonDetails", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class MediaIdentification(BaseModel): + """ + :ivar media_id: + :ivar media_serial_number: + :ivar media_type_id: Dictionary prefix: MediaType + """ + + model_config = ConfigDict(defer_build=True) + media_id: str = field( + metadata={ + "name": "MediaId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + media_serial_number: str = field( + metadata={ + "name": "MediaSerialNumber", + "type": "Element", + "namespace": "", + "required": True, + } + ) + media_type_id: int = field( + metadata={ + "name": "MediaTypeId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class MediaTypes(BaseModel): + model_config = ConfigDict(defer_build=True) + media_type: list[int] = field( + default_factory=list, + metadata={ + "name": "MediaType", + "type": "Element", + "namespace": "", + "min_occurs": 1, + }, + ) + + +class User(BaseModel): + """ + :ivar realm: Realm of the user + :ivar user_id: Id the user + """ + + model_config = ConfigDict(defer_build=True) + realm: None | str = field( + default=None, + metadata={ + "name": "Realm", + "type": "Element", + "namespace": "", + }, + ) + user_id: None | str = field( + default=None, + metadata={ + "name": "UserId", + "type": "Element", + "namespace": "", + }, + ) + + +class AdjustmentTypes(BaseModel): + model_config = ConfigDict(defer_build=True) + adjustment_type: list[AdjustmentType] = field( + default_factory=list, + metadata={ + "name": "AdjustmentType", + "type": "Element", + "namespace": "", + "min_occurs": 1, + }, + ) + + +class BulkAdjustmentEntryResultError(BaseModel): + model_config = ConfigDict(defer_build=True) + id: str = field( + metadata={ + "name": "Id", + "type": "Element", + "namespace": "", + "required": True, + } + ) + travel_event_id: str = field( + metadata={ + "name": "TravelEventId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + media_id: str = field( + metadata={ + "name": "MediaId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + execution_status: ExecutionStatus = field( + metadata={ + "name": "ExecutionStatus", + "type": "Element", + "namespace": "", + "required": True, + } + ) + adjustment_amount: Decimal = field( + metadata={ + "name": "AdjustmentAmount", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class BulkAdjustmentEntryResultErrors(BaseModel): + model_config = ConfigDict(defer_build=True) + bulk_adjustment_entry_result_error: list[BulkAdjustmentEntryResultError] = field( + default_factory=list, + metadata={ + "name": "BulkAdjustmentEntryResultError", + "type": "Element", + "namespace": "", + "min_occurs": 1, + }, + ) + + +class BulkAdjustmentInformation(BaseModel): + model_config = ConfigDict(defer_build=True) + bulk_id: str = field( + metadata={ + "name": "BulkId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + creation_date: XmlDateTime = field( + metadata={ + "name": "CreationDate", + "type": "Element", + "namespace": "", + "required": True, + } + ) + date_from: XmlDateTime = field( + metadata={ + "name": "DateFrom", + "type": "Element", + "namespace": "", + "required": True, + } + ) + date_to: XmlDateTime = field( + metadata={ + "name": "DateTo", + "type": "Element", + "namespace": "", + "required": True, + } + ) + media_types: MediaTypes = field( + metadata={ + "name": "MediaTypes", + "type": "Element", + "namespace": "", + "required": True, + } + ) + adjustment_types: AdjustmentTypes = field( + metadata={ + "name": "AdjustmentTypes", + "type": "Element", + "namespace": "", + "required": True, + } + ) + reason_code: str = field( + metadata={ + "name": "ReasonCode", + "type": "Element", + "namespace": "", + "required": True, + } + ) + reason_details: None | str = field( + default=None, + metadata={ + "name": "ReasonDetails", + "type": "Element", + "namespace": "", + }, + ) + agent_creator: str = field( + metadata={ + "name": "AgentCreator", + "type": "Element", + "namespace": "", + "required": True, + } + ) + agent_executor: str = field( + metadata={ + "name": "AgentExecutor", + "type": "Element", + "namespace": "", + "required": True, + } + ) + total_adjustment: Decimal = field( + metadata={ + "name": "TotalAdjustment", + "type": "Element", + "namespace": "", + "required": True, + } + ) diff --git a/es_elt/src/es_elt/xml/common/media_identification.py b/es_elt/src/es_elt/xml/common/media_identification.py new file mode 100644 index 0000000..def894f --- /dev/null +++ b/es_elt/src/es_elt/xml/common/media_identification.py @@ -0,0 +1,69 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/MediaIdentification" + + +class MediaOriginType(Enum): + BO_CARD_CENTRIC_MEDIA = "BO_CARD_CENTRIC_MEDIA" + BO_ACCOUNT_BASE_MEDIA = "BO_ACCOUNT_BASE_MEDIA" + REMOTE_MEDIA = "REMOTE_MEDIA" + + +class MediaIdentification(BaseModel): + """ + :ivar media_graphical_number: + :ivar media_identifier: + :ivar media_origin: + :ivar media_serial_number: + :ivar media_type_id: Dictionary prefix: MediaType + """ + + class Meta: + namespace = "http://www.thales.dc/MediaIdentification" + + model_config = ConfigDict(defer_build=True) + media_graphical_number: None | str = field( + default=None, + metadata={ + "name": "MediaGraphicalNumber", + "type": "Element", + "namespace": "", + }, + ) + media_identifier: None | str = field( + default=None, + metadata={ + "name": "MediaIdentifier", + "type": "Element", + "namespace": "", + }, + ) + media_origin: None | MediaOriginType = field( + default=None, + metadata={ + "name": "MediaOrigin", + "type": "Element", + "namespace": "", + }, + ) + media_serial_number: None | str = field( + default=None, + metadata={ + "name": "MediaSerialNumber", + "type": "Element", + "namespace": "", + }, + ) + media_type_id: None | int = field( + default=None, + metadata={ + "name": "MediaTypeId", + "type": "Element", + "namespace": "", + }, + ) diff --git a/es_elt/src/es_elt/xml/common/multi_ticketing_versions_audit_exchange.py b/es_elt/src/es_elt/xml/common/multi_ticketing_versions_audit_exchange.py new file mode 100644 index 0000000..bdb3ec3 --- /dev/null +++ b/es_elt/src/es_elt/xml/common/multi_ticketing_versions_audit_exchange.py @@ -0,0 +1,146 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDateTime, XmlDuration +from xsdata_pydantic.fields import field + +from es_elt.xml.common.headers import HeadersType + +__NAMESPACE__ = "http://www.thales.dc/MultiVersions" + + +class VersionDateAudit(BaseModel): + model_config = ConfigDict(defer_build=True) + version: None | str = field( + default=None, + metadata={ + "name": "Version", + "type": "Element", + "namespace": "", + }, + ) + application_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ApplicationDate", + "type": "Element", + "namespace": "", + }, + ) + + +class MultiTicketingVersionsAuditExchangeVersions(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + version: list[VersionDateAudit] = field( + default_factory=list, + metadata={ + "name": "Version", + "type": "Element", + "namespace": "", + }, + ) + + +class MultiTicketingVersionsAuditExchange(BaseModel): + class Meta: + namespace = "http://www.thales.dc/MultiVersions" + + model_config = ConfigDict(defer_build=True) + date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "Date", + "type": "Element", + "namespace": "", + }, + ) + component: None | str = field( + default=None, + metadata={ + "name": "Component", + "type": "Element", + "namespace": "", + }, + ) + instance: None | str = field( + default=None, + metadata={ + "name": "Instance", + "type": "Element", + "namespace": "", + }, + ) + depth: None | XmlDuration = field( + default=None, + metadata={ + "name": "Depth", + "type": "Element", + "namespace": "", + }, + ) + last_update_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "LastUpdateDate", + "type": "Element", + "namespace": "", + }, + ) + versions: None | MultiTicketingVersionsAuditExchangeVersions = field( + default=None, + metadata={ + "name": "Versions", + "type": "Element", + "namespace": "", + }, + ) + + +class AuditMessageType(BaseModel): + model_config = ConfigDict(defer_build=True) + headers: None | HeadersType = field( + default=None, + metadata={ + "name": "Headers", + "type": "Element", + "namespace": "", + }, + ) + payload: MultiTicketingVersionsAuditExchange = field( + metadata={ + "name": "Payload", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessagesType(BaseModel): + model_config = ConfigDict(defer_build=True) + audit_message: list[AuditMessageType] = field( + default_factory=list, + metadata={ + "name": "AuditMessage", + "type": "Element", + "namespace": "", + }, + ) + multi_versions_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "MultiVersionsXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/MultiVersions" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/common/order_details.py b/es_elt/src/es_elt/xml/common/order_details.py new file mode 100644 index 0000000..7fae6ed --- /dev/null +++ b/es_elt/src/es_elt/xml/common/order_details.py @@ -0,0 +1,129 @@ +from __future__ import annotations + +from decimal import Decimal +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/OrderDetails" + + +class CustomerOrderStatus(Enum): + """ + :cvar CREATED: Order created + :cvar PENDING_VALIDATION: Order pending to be validated + :cvar VALIDATED: Order validated (paid or free) + :cvar COMPLETED: All items of the order are in a final status i.e. + closed or cancelled + """ + + CREATED = "CREATED" + PENDING_VALIDATION = "PENDING_VALIDATION" + VALIDATED = "VALIDATED" + COMPLETED = "COMPLETED" + + +class DeliveryOrderStatus(Enum): + """ + :cvar CREATED: Order item is created + :cvar PENDING: Waiting for order item validation (e.g. operator + evidences verification) + :cvar PENDING_ISSUING: Waiting for the issue of the media (e.g. + media personalization before sending it by mail) + :cvar ON_THE_WAY: Delivery of order item is on the way + :cvar COMPLETED: Order item is delivered + :cvar PENDING_CANCELLATION: Waiting for order item cancellation + (e.g. order item must be refunded) + :cvar CANCELLED: Order item is cancelled + :cvar PENDING_RETRY: Waiting for order item retry + :cvar RETRIED: Order item is retried + :cvar FAILED: Order item is failed, i.e. an error has been returned + and a manual action shall be done to confirm delivery or to + cancel order item + """ + + CREATED = "CREATED" + PENDING = "PENDING" + PENDING_ISSUING = "PENDING_ISSUING" + ON_THE_WAY = "ON_THE_WAY" + COMPLETED = "COMPLETED" + PENDING_CANCELLATION = "PENDING_CANCELLATION" + CANCELLED = "CANCELLED" + PENDING_RETRY = "PENDING_RETRY" + RETRIED = "RETRIED" + FAILED = "FAILED" + + +class OrderItemType(Enum): + MEDIA_SALE = "MEDIA_SALE" + MEDIA_REFUND = "MEDIA_REFUND" + MEDIA_LOSTSTOLEN = "MEDIA_LOSTSTOLEN" + APPLICATION_SALE = "APPLICATION_SALE" + APPLICATION_REFUND = "APPLICATION_REFUND" + APPLICATION_UNBLOCKING = "APPLICATION_UNBLOCKING" + HOLDER_PROFILE_UPDATE = "HOLDER_PROFILE_UPDATE" + PURSE_ACTIVATION = "PURSE_ACTIVATION" + PURSE_RELOAD = "PURSE_RELOAD" + PURSE_REFUND = "PURSE_REFUND" + PURSE_UNBLOCKING = "PURSE_UNBLOCKING" + PURSE_AUTORELOAD_MODIFICATION = "PURSE_AUTORELOAD_MODIFICATION" + CONTRACT_SALE = "CONTRACT_SALE" + CONTRACT_REFUND = "CONTRACT_REFUND" + CONTRACT_UNBLOCKING = "CONTRACT_UNBLOCKING" + CONTRACT_AUTORENEW = "CONTRACT_AUTORENEW" + CONTRACT_AUTORENEW_MODIFICATION = "CONTRACT_AUTORENEW_MODIFICATION" + CONTRACT_SUSPENSION = "CONTRACT_SUSPENSION" + CONTRACT_REACTIVATION = "CONTRACT_REACTIVATION" + CONTRACT_INVALIDATION = "CONTRACT_INVALIDATION" + CONTRACT_TRANSFER = "CONTRACT_TRANSFER" + APPLICATION_ACTIVATION = "APPLICATION_ACTIVATION" + NON_TRANSIT_PRODUCT_SALE = "NON_TRANSIT_PRODUCT_SALE" + DEBT_REPAYMENT = "DEBT_REPAYMENT" + PAY_AS_YOU_GO_MODIFICATION = "PAY_AS_YOU_GO_MODIFICATION" + CARD_RECONSTRUCTION = "CARD_RECONSTRUCTION" + SUPPLEMENT_CONTRACT_SALE = "SUPPLEMENT_CONTRACT_SALE" + CENTRALIZED_PURSE_SALE = "CENTRALIZED_PURSE_SALE" + CENTRALIZED_PURSE_RELOAD = "CENTRALIZED_PURSE_RELOAD" + CENTRALIZED_PURSE_AUTORELOAD_MODIFICATION = ( + "CENTRALIZED_PURSE_AUTORELOAD_MODIFICATION" + ) + + +class PriceIncludingVat(BaseModel): + class Meta: + name = "PriceIncludingVAT" + + model_config = ConfigDict(defer_build=True) + amount_et: None | Decimal = field( + default=None, + metadata={ + "name": "AmountET", + "type": "Element", + "namespace": "", + }, + ) + amount_gst: None | Decimal = field( + default=None, + metadata={ + "name": "AmountGST", + "type": "Element", + "namespace": "", + }, + ) + amount_it: None | Decimal = field( + default=None, + metadata={ + "name": "AmountIT", + "type": "Element", + "namespace": "", + }, + ) + amount_pst: None | Decimal = field( + default=None, + metadata={ + "name": "AmountPST", + "type": "Element", + "namespace": "", + }, + ) diff --git a/es_elt/src/es_elt/xml/common/order_status.py b/es_elt/src/es_elt/xml/common/order_status.py new file mode 100644 index 0000000..577d250 --- /dev/null +++ b/es_elt/src/es_elt/xml/common/order_status.py @@ -0,0 +1,25 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/OrderStatus" + + +class OrderStatus1(Enum): + CREATED = "CREATED" + VALIDATED = "VALIDATED" + + +class OrderStatus(BaseModel): + class Meta: + namespace = "http://www.thales.dc/OrderStatus" + + model_config = ConfigDict(defer_build=True) + value: OrderStatus1 = field( + metadata={ + "required": True, + } + ) diff --git a/es_elt/src/es_elt/xml/common/payment_request_type.py b/es_elt/src/es_elt/xml/common/payment_request_type.py new file mode 100644 index 0000000..dac71da --- /dev/null +++ b/es_elt/src/es_elt/xml/common/payment_request_type.py @@ -0,0 +1,35 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/PaymentRequestType" + + +class PaymentRequestType1(Enum): + """ + :cvar AUTHORIZATION_ONLY: Payment Authorization only + :cvar AUTHORIZATION_AND_SETTLEMENT: Payment Authorization and + settlement + :cvar SETTLEMENT_ONLY: Payment Settlement only + :cvar ORDER_CHARGE: Retail payment + """ + + AUTHORIZATION_ONLY = "AUTHORIZATION_ONLY" + AUTHORIZATION_AND_SETTLEMENT = "AUTHORIZATION_AND_SETTLEMENT" + SETTLEMENT_ONLY = "SETTLEMENT_ONLY" + ORDER_CHARGE = "ORDER_CHARGE" + + +class PaymentRequestType(BaseModel): + class Meta: + namespace = "http://www.thales.dc/PaymentRequestType" + + model_config = ConfigDict(defer_build=True) + value: PaymentRequestType1 = field( + metadata={ + "required": True, + } + ) diff --git a/es_elt/src/es_elt/xml/common/payment_status.py b/es_elt/src/es_elt/xml/common/payment_status.py new file mode 100644 index 0000000..7b7a79c --- /dev/null +++ b/es_elt/src/es_elt/xml/common/payment_status.py @@ -0,0 +1,60 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/PaymentStatus" + + +class PaymentStatus1(Enum): + """ + :cvar SUPERSEDED: Payment amount has been aggregated + :cvar REPAID: A debt has been eventually repaid. + :cvar NOT_APPLICABLE: Payment is not applicable. + :cvar APPROVED: Payment has been approved either directly or the + bank acquirer + :cvar ISSUED: Payment has been issued to the bank acquirer + :cvar PENDING: Payment has not been sent to the bank acquirer + :cvar ERROR: An error has occurred during the payment processing + either transient or permanent (ex. time out, connection broken, + internal error...), and will be retried later according to the + recovery policy. Meanwhile, the payment is considered 'declined' + but the card will NOT been denied. + :cvar DECLINED: Payment has been declined either directly by the PSP + or by the bank acquirer (ex. insufficient credit/threshold), the + card will be denied and a recovery policy will retry further + attempts. + :cvar BLOCKED: Payment has been declined because the card or account + is definitely blocked (ex. card denied by bank or expired). No + automatic recovery will be attempted. The card will be denied. + :cvar RESET: Payment has been RESET because the card or account is + blocked and have now way to be unblocked via traditionnel + channel. + :cvar NOT_SENT: Payment has not been SENT to the PSP. + """ + + SUPERSEDED = "SUPERSEDED" + REPAID = "REPAID" + NOT_APPLICABLE = "NOT_APPLICABLE" + APPROVED = "APPROVED" + ISSUED = "ISSUED" + PENDING = "PENDING" + ERROR = "ERROR" + DECLINED = "DECLINED" + BLOCKED = "BLOCKED" + RESET = "RESET" + NOT_SENT = "NOT_SENT" + + +class PaymentStatus(BaseModel): + class Meta: + namespace = "http://www.thales.dc/PaymentStatus" + + model_config = ConfigDict(defer_build=True) + value: PaymentStatus1 = field( + metadata={ + "required": True, + } + ) diff --git a/es_elt/src/es_elt/xml/common/payment_trigger_source.py b/es_elt/src/es_elt/xml/common/payment_trigger_source.py new file mode 100644 index 0000000..5d547ee --- /dev/null +++ b/es_elt/src/es_elt/xml/common/payment_trigger_source.py @@ -0,0 +1,38 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/PaymentTriggerSource" + + +class PaymentTriggerSource1(Enum): + """ + :cvar MIT: Job trigger the debt recovery, Merchant Initiated + Transaction + :cvar TIT: Emv Tap Trigger debt recovery, Tap Initiated Transaction + :cvar CIT: Api call trigger the debt recovery, CardHolder Initiated + Transaction + :cvar FRR: First Ride Risk Initiated Transaction + :cvar NOT_SENT: First Ride Risk Initiated Transaction + """ + + MIT = "MIT" + TIT = "TIT" + CIT = "CIT" + FRR = "FRR" + NOT_SENT = "NOT_SENT" + + +class PaymentTriggerSource(BaseModel): + class Meta: + namespace = "http://www.thales.dc/PaymentTriggerSource" + + model_config = ConfigDict(defer_build=True) + value: PaymentTriggerSource1 = field( + metadata={ + "required": True, + } + ) diff --git a/es_elt/src/es_elt/xml/common/payment_type.py b/es_elt/src/es_elt/xml/common/payment_type.py new file mode 100644 index 0000000..81cbe23 --- /dev/null +++ b/es_elt/src/es_elt/xml/common/payment_type.py @@ -0,0 +1,54 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/PaymentType" + + +class PaymentType1(Enum): + """ + :cvar DIRECT_DEBT: Direct debt because of failing pre-authorization + or missing payment means. + :cvar TRAVEL_CHARGE: Request for a payment related to one or many + travels. + :cvar TRAVEL_REVERSAL: Request for reversal (possibly partial) of + one or many previous payments related to travels. + :cvar NOMINAL_AUTHORIZATION: Nominal authorization to check the + validity of the account related to the card and the card itself. + :cvar AUTHORIZATION: authorization to check the validity of the + account related to the card and the card itself. + :cvar DEBT_REPAYMENT: Direct payment for clearing debts related to + declined pre-authorizations or requests for payments. + :cvar DEBT_RECOVERY: debt payment for clearing debts related to + declined pre-authorizations or requests for payments. + :cvar DEBT_SURPLUS_REVERSAL: Automatic reimbursement when two + interleaving clearings of the same debt reimbursed too much. + :cvar ORDER_CHARGE: Request for a payment related to an order. + :cvar AUTHORIZATION_REVERSAL: Request for an authorization reversal. + """ + + DIRECT_DEBT = "DIRECT_DEBT" + TRAVEL_CHARGE = "TRAVEL_CHARGE" + TRAVEL_REVERSAL = "TRAVEL_REVERSAL" + NOMINAL_AUTHORIZATION = "NOMINAL_AUTHORIZATION" + AUTHORIZATION = "AUTHORIZATION" + DEBT_REPAYMENT = "DEBT_REPAYMENT" + DEBT_RECOVERY = "DEBT_RECOVERY" + DEBT_SURPLUS_REVERSAL = "DEBT_SURPLUS_REVERSAL" + ORDER_CHARGE = "ORDER_CHARGE" + AUTHORIZATION_REVERSAL = "AUTHORIZATION_REVERSAL" + + +class PaymentType(BaseModel): + class Meta: + namespace = "http://www.thales.dc/PaymentType" + + model_config = ConfigDict(defer_build=True) + value: PaymentType1 = field( + metadata={ + "required": True, + } + ) diff --git a/es_elt/src/es_elt/xml/common/product_price_with_details.py b/es_elt/src/es_elt/xml/common/product_price_with_details.py new file mode 100644 index 0000000..6b7cfd8 --- /dev/null +++ b/es_elt/src/es_elt/xml/common/product_price_with_details.py @@ -0,0 +1,204 @@ +from __future__ import annotations + +from decimal import Decimal + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +from es_elt.xml.common.discount import Discount +from es_elt.xml.common.fee import Fee + +__NAMESPACE__ = "http://www.thales.dc/ProductPriceWithDetails" + + +class RatingExplanationsRatingExplanationCrossedZoneRating(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + crossed_zones: int = field( + metadata={ + "name": "CrossedZones", + "type": "Element", + "namespace": "", + "required": True, + } + ) + crossed_zone_surcharge: Decimal = field( + metadata={ + "name": "CrossedZoneSurcharge", + "type": "Element", + "namespace": "", + "required": True, + } + ) + crossed_zone_surcharge_type: str = field( + metadata={ + "name": "CrossedZoneSurchargeType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class RatingExplanationsRatingExplanationDistanceRating(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + distance: Decimal = field( + metadata={ + "name": "Distance", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class RatingExplanationsRatingExplanationExternalRating(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + reason: None | str = field( + default=None, + metadata={ + "name": "Reason", + "type": "Element", + "namespace": "", + }, + ) + user_id: str = field( + metadata={ + "name": "UserId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + realm: str = field( + metadata={ + "name": "Realm", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class Discounts(BaseModel): + model_config = ConfigDict(defer_build=True) + discount: list[Discount] = field( + default_factory=list, + metadata={ + "name": "Discount", + "type": "Element", + "namespace": "", + }, + ) + + +class Fees(BaseModel): + model_config = ConfigDict(defer_build=True) + fee: list[Fee] = field( + default_factory=list, + metadata={ + "name": "Fee", + "type": "Element", + "namespace": "", + }, + ) + + +class RatingExplanationsRatingExplanation(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + crossed_zone_rating: None | RatingExplanationsRatingExplanationCrossedZoneRating = ( + field( + default=None, + metadata={ + "name": "CrossedZoneRating", + "type": "Element", + "namespace": "", + }, + ) + ) + distance_rating: None | RatingExplanationsRatingExplanationDistanceRating = field( + default=None, + metadata={ + "name": "DistanceRating", + "type": "Element", + "namespace": "", + }, + ) + external_rating: None | RatingExplanationsRatingExplanationExternalRating = field( + default=None, + metadata={ + "name": "ExternalRating", + "type": "Element", + "namespace": "", + }, + ) + + +class RatingExplanations(BaseModel): + model_config = ConfigDict(defer_build=True) + rating_explanation: list[RatingExplanationsRatingExplanation] = field( + default_factory=list, + metadata={ + "name": "RatingExplanation", + "type": "Element", + "namespace": "", + }, + ) + + +class ProductPriceWithDetails(BaseModel): + class Meta: + namespace = "http://www.thales.dc/ProductPriceWithDetails" + + model_config = ConfigDict(defer_build=True) + price: Decimal = field( + metadata={ + "name": "Price", + "type": "Element", + "namespace": "", + "required": True, + } + ) + base_fare: Decimal = field( + metadata={ + "name": "BaseFare", + "type": "Element", + "namespace": "", + "required": True, + } + ) + discounts: None | Discounts = field( + default=None, + metadata={ + "name": "Discounts", + "type": "Element", + "namespace": "", + }, + ) + rating_explanations: None | RatingExplanations = field( + default=None, + metadata={ + "name": "RatingExplanations", + "type": "Element", + "namespace": "", + }, + ) + fees: None | Fees = field( + default=None, + metadata={ + "name": "Fees", + "type": "Element", + "namespace": "", + }, + ) diff --git a/es_elt/src/es_elt/xml/common/provider_status.py b/es_elt/src/es_elt/xml/common/provider_status.py new file mode 100644 index 0000000..a96bfb4 --- /dev/null +++ b/es_elt/src/es_elt/xml/common/provider_status.py @@ -0,0 +1,25 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/ProviderStatus" + + +class ProviderStatus1(Enum): + ENABLE = "ENABLE" + DELETED = "DELETED" + + +class ProviderStatus(BaseModel): + class Meta: + namespace = "http://www.thales.dc/ProviderStatus" + + model_config = ConfigDict(defer_build=True) + value: ProviderStatus1 = field( + metadata={ + "required": True, + } + ) diff --git a/es_elt/src/es_elt/xml/common/rating_detail.py b/es_elt/src/es_elt/xml/common/rating_detail.py new file mode 100644 index 0000000..27bffaa --- /dev/null +++ b/es_elt/src/es_elt/xml/common/rating_detail.py @@ -0,0 +1,105 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDateTime +from xsdata_pydantic.fields import field + +from es_elt.xml.common.capping_details import CappingDetails +from es_elt.xml.common.product_price_with_details import ProductPriceWithDetails + +__NAMESPACE__ = "http://www.thales.dc/RatingDetail" + + +class RatingDetail(BaseModel): + """ + :ivar holder_profile_id: Dictionary prefix: HolderProfile + :ivar contract_serial_number: Contract serial number + :ivar product_code: Dictionary prefix: ProductCode + :ivar counter_balance_current_value: Current counter balance value + if the used contract is a multi ride + :ivar excess_fare: Dictionary prefix: ExcessFare + :ivar product_price_with_details: Price of the leg including details + such as fees, discount and base fare. + :ivar ticketing_version: The ticketing version used for audit + messages. + :ivar capping_details: The details of the capping. + :ivar validity_end_date: Product validity end date used for audit + messages. + """ + + class Meta: + namespace = "http://www.thales.dc/RatingDetail" + + model_config = ConfigDict(defer_build=True) + holder_profile_id: None | int = field( + default=None, + metadata={ + "name": "HolderProfileId", + "type": "Element", + "namespace": "", + }, + ) + contract_serial_number: None | int = field( + default=None, + metadata={ + "name": "ContractSerialNumber", + "type": "Element", + "namespace": "", + }, + ) + product_code: None | int = field( + default=None, + metadata={ + "name": "ProductCode", + "type": "Element", + "namespace": "", + }, + ) + counter_balance_current_value: None | int = field( + default=None, + metadata={ + "name": "CounterBalanceCurrentValue", + "type": "Element", + "namespace": "", + }, + ) + excess_fare: None | bool = field( + default=None, + metadata={ + "name": "ExcessFare", + "type": "Element", + "namespace": "", + }, + ) + product_price_with_details: None | ProductPriceWithDetails = field( + default=None, + metadata={ + "name": "ProductPriceWithDetails", + "type": "Element", + "namespace": "", + }, + ) + ticketing_version: None | str = field( + default=None, + metadata={ + "name": "TicketingVersion", + "type": "Element", + "namespace": "", + }, + ) + capping_details: None | CappingDetails = field( + default=None, + metadata={ + "name": "CappingDetails", + "type": "Element", + "namespace": "", + }, + ) + validity_end_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ValidityEndDate", + "type": "Element", + "namespace": "", + }, + ) diff --git a/es_elt/src/es_elt/xml/common/refund_contract_audit_exchange.py b/es_elt/src/es_elt/xml/common/refund_contract_audit_exchange.py new file mode 100644 index 0000000..0c9e47b --- /dev/null +++ b/es_elt/src/es_elt/xml/common/refund_contract_audit_exchange.py @@ -0,0 +1,186 @@ +from __future__ import annotations + +from decimal import Decimal + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDateTime +from xsdata_pydantic.fields import field + +from es_elt.xml.common.headers import HeadersType + +__NAMESPACE__ = "http://www.thales.dc/RefundContract" + + +class RefundContractAuditExchange(BaseModel): + """ + pom_refund_contract: This audit will be produced after sending closing + contract to mam mam_refund_contract: This audit will be produced after + sending refund order item contract to mam mam_contract_update: This + audit will be produced after sending closing contract to mam. + + :ivar payment_id: The unique identifier of the payment + :ivar media_serial_number: The serial number of the media + :ivar contract_serial_number: The serial number of the contract to + refund + :ivar contract_status: The status of the contract (DISABLE, CLOSED, + ...) + :ivar product_code: The code of the product on the catalog + :ivar refund_order_id: The unique identifier of the refund order + :ivar refund_order_status: The status of the refund order + (NOT_REQUEST, PENDING, COMPLETED, CANCELED) + :ivar refund_status_occurrence_date: The date of this status + :ivar initial_refund_amount: The initial refund amount calculated by + CSS + :ivar final_refund_amount: The final refund amount calculated by MAM + :ivar refund_fee: The fee applicable to refund a product + :ivar final_refund_amount_flag: The fee applicable to refund a + product + """ + + class Meta: + namespace = "http://www.thales.dc/RefundContract" + + model_config = ConfigDict(defer_build=True) + payment_id: None | str = field( + default=None, + metadata={ + "name": "PaymentId", + "type": "Element", + "namespace": "", + }, + ) + media_serial_number: None | str = field( + default=None, + metadata={ + "name": "MediaSerialNumber", + "type": "Element", + "namespace": "", + }, + ) + contract_serial_number: None | str = field( + default=None, + metadata={ + "name": "ContractSerialNumber", + "type": "Element", + "namespace": "", + }, + ) + contract_status: None | str = field( + default=None, + metadata={ + "name": "ContractStatus", + "type": "Element", + "namespace": "", + }, + ) + product_code: None | str = field( + default=None, + metadata={ + "name": "ProductCode", + "type": "Element", + "namespace": "", + }, + ) + refund_order_id: None | str = field( + default=None, + metadata={ + "name": "RefundOrderId", + "type": "Element", + "namespace": "", + }, + ) + refund_order_status: None | str = field( + default=None, + metadata={ + "name": "RefundOrderStatus", + "type": "Element", + "namespace": "", + }, + ) + refund_status_occurrence_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "RefundStatusOccurrenceDate", + "type": "Element", + "namespace": "", + }, + ) + initial_refund_amount: None | Decimal = field( + default=None, + metadata={ + "name": "InitialRefundAmount", + "type": "Element", + "namespace": "", + }, + ) + final_refund_amount: None | Decimal = field( + default=None, + metadata={ + "name": "FinalRefundAmount", + "type": "Element", + "namespace": "", + }, + ) + refund_fee: None | Decimal = field( + default=None, + metadata={ + "name": "RefundFee", + "type": "Element", + "namespace": "", + }, + ) + final_refund_amount_flag: None | bool = field( + default=None, + metadata={ + "name": "FinalRefundAmountFlag", + "type": "Element", + "namespace": "", + }, + ) + + +class AuditMessageType(BaseModel): + model_config = ConfigDict(defer_build=True) + headers: None | HeadersType = field( + default=None, + metadata={ + "name": "Headers", + "type": "Element", + "namespace": "", + }, + ) + payload: RefundContractAuditExchange = field( + metadata={ + "name": "Payload", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AuditMessagesType(BaseModel): + model_config = ConfigDict(defer_build=True) + audit_message: list[AuditMessageType] = field( + default_factory=list, + metadata={ + "name": "AuditMessage", + "type": "Element", + "namespace": "", + }, + ) + refund_contract_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "RefundContractXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/RefundContract" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/common/refund_payment_audit.py b/es_elt/src/es_elt/xml/common/refund_payment_audit.py new file mode 100644 index 0000000..78f51a6 --- /dev/null +++ b/es_elt/src/es_elt/xml/common/refund_payment_audit.py @@ -0,0 +1,306 @@ +from __future__ import annotations + +from decimal import Decimal + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDateTime +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/RefundPaymentAudit" + + +class RefundPaymentAudit(BaseModel): + """ + This audit will be produced after the sending of the payment refund. + + :ivar media_serial_number: The serial number of the media + :ivar contract_serial_number: The serial number of the contract to + refund + :ivar contract_status: The status of the contract (DISABLE, CLOSED, + ...) + :ivar product_code: The code of the product on the catalog + :ivar refund_order_id: The unique identifier of the refund order + :ivar refund_order_status: The status of the refund order + (NOT_REQUEST, PENDING, COMPLETED, CANCELED) + :ivar refund_status_occurrence_date: The date of this status + :ivar initial_refund_amount: The initial refund amount calculated by + CSS + :ivar final_refund_amount: The final refund amount calculated by MAM + :ivar refund_fee: The fee applicate to refund a product + :ivar final_refund_amount_flag: If we have a final refund amount + :ivar refund_payment_status: The payment status (READY, TRIGGERED, + COMPLETED, IN_ERROR, DECLINED) + :ivar payment_method: The type of the payment means (CASH, EMV_CP + (EMV retail Card Present - CP), EMV_CNP (EMV retail Card Non + Present - CNP), INTERNAL/EXTERNAL PURSE, PAYMENT_AGREMENT) + :ivar transaction_id: The unique identifier of the transaction + :ivar authorization_code: That corresponds to the financial + transaction result of this refund + :ivar retail_token: That Retail token corresponds to the ID of the + payment medium used during refund if used + :ivar expiry_date: For EMV retail cards and ABT media with + internal/external purse. Not applicable for Cash + :ivar payment_amount: The refund amount requested + :ivar truncated_pan: Used for EMV + :ivar payment_scheme_identification: EMV (VISA, AMEX, ....) + :ivar payment_account_reference: Payment account reference + :ivar merchant_id: The unique identifier about merchant + :ivar payment_reference2: The identifier of the approved payment + order + :ivar payment_effective_date: Date and time of the financial + transaction recorded at the payment domain + :ivar currency: Currency code according to ISO 4217 + :ivar unique_message_refund_id: Unique Message refund identification + :ivar response_message_date: Response message creation date and time + provided by the payment domain + :ivar response_code: 2 digit codes explaining the response from the + payment domain + :ivar response: The payment response (APPROVED, DECLINED) + :ivar reconciliation_id: reconciliation ID or Payment Gateway + reference + """ + + class Meta: + namespace = "http://www.thales.dc/RefundPaymentAudit" + + model_config = ConfigDict(defer_build=True) + media_serial_number: None | str = field( + default=None, + metadata={ + "name": "MediaSerialNumber", + "type": "Element", + "namespace": "", + }, + ) + contract_serial_number: None | str = field( + default=None, + metadata={ + "name": "ContractSerialNumber", + "type": "Element", + "namespace": "", + }, + ) + contract_status: None | str = field( + default=None, + metadata={ + "name": "ContractStatus", + "type": "Element", + "namespace": "", + }, + ) + product_code: None | str = field( + default=None, + metadata={ + "name": "ProductCode", + "type": "Element", + "namespace": "", + }, + ) + refund_order_id: None | str = field( + default=None, + metadata={ + "name": "RefundOrderId", + "type": "Element", + "namespace": "", + }, + ) + refund_order_status: None | str = field( + default=None, + metadata={ + "name": "RefundOrderStatus", + "type": "Element", + "namespace": "", + }, + ) + refund_status_occurrence_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "RefundStatusOccurrenceDate", + "type": "Element", + "namespace": "", + }, + ) + initial_refund_amount: None | Decimal = field( + default=None, + metadata={ + "name": "InitialRefundAmount", + "type": "Element", + "namespace": "", + }, + ) + final_refund_amount: None | Decimal = field( + default=None, + metadata={ + "name": "FinalRefundAmount", + "type": "Element", + "namespace": "", + }, + ) + refund_fee: None | Decimal = field( + default=None, + metadata={ + "name": "RefundFee", + "type": "Element", + "namespace": "", + }, + ) + final_refund_amount_flag: None | bool = field( + default=None, + metadata={ + "name": "FinalRefundAmountFlag", + "type": "Element", + "namespace": "", + }, + ) + refund_payment_status: None | str = field( + default=None, + metadata={ + "name": "RefundPaymentStatus", + "type": "Element", + "namespace": "", + }, + ) + payment_method: None | str = field( + default=None, + metadata={ + "name": "PaymentMethod", + "type": "Element", + "namespace": "", + }, + ) + transaction_id: None | str = field( + default=None, + metadata={ + "name": "TransactionId", + "type": "Element", + "namespace": "", + }, + ) + authorization_code: None | str = field( + default=None, + metadata={ + "name": "AuthorizationCode", + "type": "Element", + "namespace": "", + }, + ) + retail_token: None | str = field( + default=None, + metadata={ + "name": "RetailToken", + "type": "Element", + "namespace": "", + }, + ) + expiry_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ExpiryDate", + "type": "Element", + "namespace": "", + }, + ) + payment_amount: None | Decimal = field( + default=None, + metadata={ + "name": "PaymentAmount", + "type": "Element", + "namespace": "", + }, + ) + truncated_pan: None | str = field( + default=None, + metadata={ + "name": "TruncatedPan", + "type": "Element", + "namespace": "", + }, + ) + payment_scheme_identification: None | str = field( + default=None, + metadata={ + "name": "PaymentSchemeIdentification", + "type": "Element", + "namespace": "", + }, + ) + payment_account_reference: None | str = field( + default=None, + metadata={ + "name": "PaymentAccountReference", + "type": "Element", + "namespace": "", + }, + ) + merchant_id: None | str = field( + default=None, + metadata={ + "name": "MerchantId", + "type": "Element", + "namespace": "", + }, + ) + payment_reference2: None | str = field( + default=None, + metadata={ + "name": "PaymentReference2", + "type": "Element", + "namespace": "", + }, + ) + payment_effective_date: None | str = field( + default=None, + metadata={ + "name": "PaymentEffectiveDate", + "type": "Element", + "namespace": "", + }, + ) + currency: None | str = field( + default=None, + metadata={ + "name": "Currency", + "type": "Element", + "namespace": "", + }, + ) + unique_message_refund_id: None | str = field( + default=None, + metadata={ + "name": "UniqueMessageRefundId", + "type": "Element", + "namespace": "", + }, + ) + response_message_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ResponseMessageDate", + "type": "Element", + "namespace": "", + }, + ) + response_code: None | str = field( + default=None, + metadata={ + "name": "ResponseCode", + "type": "Element", + "namespace": "", + }, + ) + response: None | str = field( + default=None, + metadata={ + "name": "Response", + "type": "Element", + "namespace": "", + }, + ) + reconciliation_id: None | str = field( + default=None, + metadata={ + "name": "ReconciliationID", + "type": "Element", + "namespace": "", + }, + ) diff --git a/es_elt/src/es_elt/xml/common/stock_entity_exchange.py b/es_elt/src/es_elt/xml/common/stock_entity_exchange.py new file mode 100644 index 0000000..f807a88 --- /dev/null +++ b/es_elt/src/es_elt/xml/common/stock_entity_exchange.py @@ -0,0 +1,154 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDateTime +from xsdata_pydantic.fields import field + +from es_elt.xml.common.external_identifier_exchange import ExternalIdentifierExchange +from es_elt.xml.common.localized import ( + LocalizedBusinessEntityInt, + LocalizedEntityType, + LocalizedProviderStatus, +) +from es_elt.xml.common.stock_entity_item import StockEntityItem + +__NAMESPACE__ = "http://www.thales.dc/StockEntityExchange" + + +class StockEntityExchangeEntityItemList(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + entity_item_list: list[StockEntityItem] = field( + default_factory=list, + metadata={ + "name": "EntityItemList", + "type": "Element", + "namespace": "", + }, + ) + + +class StockEntityExchangeExternalIdentifierList(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + external_identifier_list: list[ExternalIdentifierExchange] = field( + default_factory=list, + metadata={ + "name": "ExternalIdentifierList", + "type": "Element", + "namespace": "", + }, + ) + + +class StockEntityExchange(BaseModel): + """ + :ivar creation_date: + :ivar deletion_date: + :ivar stock_entity_id: + :ivar business_entity: Dictionary prefix: BusinessEntity + :ivar entity_identifier: + :ivar entity_name: + :ivar entity_type: Dictionary prefix: EntityType + :ivar extended_field: + :ivar provider_status: + :ivar entity_item_list: + :ivar external_identifier_list: + """ + + class Meta: + namespace = "http://www.thales.dc/StockEntityExchange" + + model_config = ConfigDict(defer_build=True) + creation_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "CreationDate", + "type": "Element", + "namespace": "", + }, + ) + deletion_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "DeletionDate", + "type": "Element", + "namespace": "", + }, + ) + stock_entity_id: None | str = field( + default=None, + metadata={ + "name": "StockEntityId", + "type": "Element", + "namespace": "", + }, + ) + business_entity: None | LocalizedBusinessEntityInt = field( + default=None, + metadata={ + "name": "BusinessEntity", + "type": "Element", + "namespace": "", + }, + ) + entity_identifier: None | str = field( + default=None, + metadata={ + "name": "EntityIdentifier", + "type": "Element", + "namespace": "", + }, + ) + entity_name: None | str = field( + default=None, + metadata={ + "name": "EntityName", + "type": "Element", + "namespace": "", + }, + ) + entity_type: None | LocalizedEntityType = field( + default=None, + metadata={ + "name": "EntityType", + "type": "Element", + "namespace": "", + }, + ) + extended_field: None | str = field( + default=None, + metadata={ + "name": "ExtendedField", + "type": "Element", + "namespace": "", + }, + ) + provider_status: None | LocalizedProviderStatus = field( + default=None, + metadata={ + "name": "ProviderStatus", + "type": "Element", + "namespace": "", + }, + ) + entity_item_list: None | StockEntityExchangeEntityItemList = field( + default=None, + metadata={ + "name": "EntityItemList", + "type": "Element", + "namespace": "", + }, + ) + external_identifier_list: None | StockEntityExchangeExternalIdentifierList = field( + default=None, + metadata={ + "name": "ExternalIdentifierList", + "type": "Element", + "namespace": "", + }, + ) diff --git a/es_elt/src/es_elt/xml/common/stock_entity_item.py b/es_elt/src/es_elt/xml/common/stock_entity_item.py new file mode 100644 index 0000000..ca02d40 --- /dev/null +++ b/es_elt/src/es_elt/xml/common/stock_entity_item.py @@ -0,0 +1,39 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +from es_elt.xml.common.localized import LocalizedItemType + +__NAMESPACE__ = "http://www.thales.dc/StockEntityItem" + + +class StockEntityItem(BaseModel): + class Meta: + namespace = "http://www.thales.dc/StockEntityItem" + + model_config = ConfigDict(defer_build=True) + item_type: None | LocalizedItemType = field( + default=None, + metadata={ + "name": "ItemType", + "type": "Element", + "namespace": "", + }, + ) + low_stock_threshold: None | int = field( + default=None, + metadata={ + "name": "LowStockThreshold", + "type": "Element", + "namespace": "", + }, + ) + stock_quantity: None | int = field( + default=None, + metadata={ + "name": "StockQuantity", + "type": "Element", + "namespace": "", + }, + ) diff --git a/es_elt/src/es_elt/xml/common/stock_history_action.py b/es_elt/src/es_elt/xml/common/stock_history_action.py new file mode 100644 index 0000000..09a6d49 --- /dev/null +++ b/es_elt/src/es_elt/xml/common/stock_history_action.py @@ -0,0 +1,40 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/StockHistoryAction" + + +class StockHistoryAction1(Enum): + QUANTITY_INCREASE = "QUANTITY_INCREASE" + QUANTITY_DECREASE = "QUANTITY_DECREASE" + STOCK_MOVEMENT = "STOCK_MOVEMENT" + STOCK_ENTITY_CREATION = "STOCK_ENTITY_CREATION" + STOCK_ENTITY_MODIFICATION = "STOCK_ENTITY_MODIFICATION" + STOCK_ENTITY_DELETION = "STOCK_ENTITY_DELETION" + STOCK_PROVIDER_CREATION = "STOCK_PROVIDER_CREATION" + STOCK_PROVIDER_MODIFICATION = "STOCK_PROVIDER_MODIFICATION" + STOCK_PROVIDER_DELETION = "STOCK_PROVIDER_DELETION" + STOCK_ORDER_CREATION = "STOCK_ORDER_CREATION" + STOCK_ORDER_MODIFICATION = "STOCK_ORDER_MODIFICATION" + STOCK_ORDER_VALIDATION = "STOCK_ORDER_VALIDATION" + STOCK_ALREADY_OUT_OF_STOCK = "STOCK_ALREADY_OUT_OF_STOCK" + STOCK_ITEM_NOT_FOUND = "STOCK_ITEM_NOT_FOUND" + STOCK_ENTITY_NOT_FOUND_FOR_DEVICE = "STOCK_ENTITY_NOT_FOUND_FOR_DEVICE" + STOCK_ENTITY_NOT_FOUND_FOR_ITEM = "STOCK_ENTITY_NOT_FOUND_FOR_ITEM" + STOCK_OVER_SOLD = "STOCK_OVER_SOLD" + + +class StockHistoryAction(BaseModel): + class Meta: + namespace = "http://www.thales.dc/StockHistoryAction" + + model_config = ConfigDict(defer_build=True) + value: StockHistoryAction1 = field( + metadata={ + "required": True, + } + ) diff --git a/es_elt/src/es_elt/xml/common/stock_order_exchange.py b/es_elt/src/es_elt/xml/common/stock_order_exchange.py new file mode 100644 index 0000000..e50b9c1 --- /dev/null +++ b/es_elt/src/es_elt/xml/common/stock_order_exchange.py @@ -0,0 +1,232 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDate, XmlDateTime +from xsdata_pydantic.fields import field + +from es_elt.xml.common.extended_address import ExtendedAddress +from es_elt.xml.common.localized import ( + LocalizedMediaType, + LocalizedOrderStatus, + LocalizedStockItemType, +) + +__NAMESPACE__ = "http://www.thales.dc/StockOrderExchange" + + +class StockOrderExchange(BaseModel): + """ + :ivar comment: + :ivar delivery_address: Shipping address + :ivar expected_delivery_date: + :ivar manufacturer_identifier: Identifier of the Business Entity + acting as Media Manufacturer/Supplier + :ivar parcel_quantity: + :ivar quantity_per_parcel: Quantity of media inside a parcel + :ivar stock_item_type: + :ivar sub_conditioning_in_parcel: Sub-conditioning of media (ex. + blister) inside a parcel + :ivar batch_creation_date_time: + :ivar batch_quantity: + :ivar front_artwork_identifier: Graphical artwork to be printed on + the media (Front) surface ; it may include dynamic areas that + will be filled in with specific data + :ivar graphical_number_end_range: + :ivar graphical_number_start_range: + :ivar media_expiry_date: Validity end date assigned to all media + produced for this order + :ivar media_issuer_id: Identifier of the Business Entity acting as + Media Issuer + :ivar media_type: Dictionary prefix: MediaType + :ivar operator_identifier: Identifier of the operator that created + the order + :ivar order_status: + :ivar rear_artwork_identifier: Graphical artwork to be printed on + the media (Rear) surface ; it may include dynamic areas that + will be filled in with specific data + :ivar security_key_set: Security Key set to be used for the media. + Key Set are exchange by security officer via another mean + :ivar stock_order_id: + :ivar validation_date: + """ + + class Meta: + namespace = "http://www.thales.dc/StockOrderExchange" + + model_config = ConfigDict(defer_build=True) + comment: None | str = field( + default=None, + metadata={ + "name": "Comment", + "type": "Element", + "namespace": "", + }, + ) + delivery_address: None | ExtendedAddress = field( + default=None, + metadata={ + "name": "DeliveryAddress", + "type": "Element", + "namespace": "", + }, + ) + expected_delivery_date: None | XmlDate = field( + default=None, + metadata={ + "name": "ExpectedDeliveryDate", + "type": "Element", + "namespace": "", + }, + ) + manufacturer_identifier: None | str = field( + default=None, + metadata={ + "name": "ManufacturerIdentifier", + "type": "Element", + "namespace": "", + }, + ) + parcel_quantity: int = field( + metadata={ + "name": "ParcelQuantity", + "type": "Element", + "namespace": "", + "required": True, + } + ) + quantity_per_parcel: int = field( + metadata={ + "name": "QuantityPerParcel", + "type": "Element", + "namespace": "", + "required": True, + } + ) + stock_item_type: None | LocalizedStockItemType = field( + default=None, + metadata={ + "name": "StockItemType", + "type": "Element", + "namespace": "", + }, + ) + sub_conditioning_in_parcel: None | int = field( + default=None, + metadata={ + "name": "SubConditioningInParcel", + "type": "Element", + "namespace": "", + }, + ) + batch_creation_date_time: None | XmlDateTime = field( + default=None, + metadata={ + "name": "BatchCreationDateTime", + "type": "Element", + "namespace": "", + }, + ) + batch_quantity: None | int = field( + default=None, + metadata={ + "name": "BatchQuantity", + "type": "Element", + "namespace": "", + }, + ) + front_artwork_identifier: None | str = field( + default=None, + metadata={ + "name": "FrontArtworkIdentifier", + "type": "Element", + "namespace": "", + }, + ) + graphical_number_end_range: None | str = field( + default=None, + metadata={ + "name": "GraphicalNumberEndRange", + "type": "Element", + "namespace": "", + }, + ) + graphical_number_start_range: None | str = field( + default=None, + metadata={ + "name": "GraphicalNumberStartRange", + "type": "Element", + "namespace": "", + }, + ) + media_expiry_date: None | XmlDate = field( + default=None, + metadata={ + "name": "MediaExpiryDate", + "type": "Element", + "namespace": "", + }, + ) + media_issuer_id: None | str = field( + default=None, + metadata={ + "name": "MediaIssuerId", + "type": "Element", + "namespace": "", + }, + ) + media_type: None | LocalizedMediaType = field( + default=None, + metadata={ + "name": "MediaType", + "type": "Element", + "namespace": "", + }, + ) + operator_identifier: None | str = field( + default=None, + metadata={ + "name": "OperatorIdentifier", + "type": "Element", + "namespace": "", + }, + ) + order_status: None | LocalizedOrderStatus = field( + default=None, + metadata={ + "name": "OrderStatus", + "type": "Element", + "namespace": "", + }, + ) + rear_artwork_identifier: None | str = field( + default=None, + metadata={ + "name": "RearArtworkIdentifier", + "type": "Element", + "namespace": "", + }, + ) + security_key_set: None | str = field( + default=None, + metadata={ + "name": "SecurityKeySet", + "type": "Element", + "namespace": "", + }, + ) + stock_order_id: None | str = field( + default=None, + metadata={ + "name": "StockOrderId", + "type": "Element", + "namespace": "", + }, + ) + validation_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ValidationDate", + "type": "Element", + "namespace": "", + }, + ) diff --git a/es_elt/src/es_elt/xml/common/stock_provider_exchange.py b/es_elt/src/es_elt/xml/common/stock_provider_exchange.py new file mode 100644 index 0000000..29a0b6c --- /dev/null +++ b/es_elt/src/es_elt/xml/common/stock_provider_exchange.py @@ -0,0 +1,184 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDateTime +from xsdata_pydantic.fields import field + +from es_elt.xml.common.localized import LocalizedCountry + +__NAMESPACE__ = "http://www.thales.dc/StockProviderExchange" + + +class ProviderPhone(BaseModel): + model_config = ConfigDict(defer_build=True) + primary_phone_number: None | str = field( + default=None, + metadata={ + "name": "PrimaryPhoneNumber", + "type": "Element", + "namespace": "", + }, + ) + secondary_phone_number: None | str = field( + default=None, + metadata={ + "name": "SecondaryPhoneNumber", + "type": "Element", + "namespace": "", + }, + ) + + +class Address(BaseModel): + model_config = ConfigDict(defer_build=True) + city: None | str = field( + default=None, + metadata={ + "name": "City", + "type": "Element", + "namespace": "", + }, + ) + complement: None | str = field( + default=None, + metadata={ + "name": "Complement", + "type": "Element", + "namespace": "", + }, + ) + country: None | LocalizedCountry = field( + default=None, + metadata={ + "name": "Country", + "type": "Element", + "namespace": "", + }, + ) + postal_code: None | str = field( + default=None, + metadata={ + "name": "PostalCode", + "type": "Element", + "namespace": "", + }, + ) + state: None | str = field( + default=None, + metadata={ + "name": "State", + "type": "Element", + "namespace": "", + }, + ) + street: None | str = field( + default=None, + metadata={ + "name": "Street", + "type": "Element", + "namespace": "", + }, + ) + + +class StockProviderExchange(BaseModel): + class Meta: + namespace = "http://www.thales.dc/StockProviderExchange" + + model_config = ConfigDict(defer_build=True) + contact_name: None | str = field( + default=None, + metadata={ + "name": "ContactName", + "type": "Element", + "namespace": "", + }, + ) + creation_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "CreationDate", + "type": "Element", + "namespace": "", + }, + ) + deletion_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "DeletionDate", + "type": "Element", + "namespace": "", + }, + ) + email_address: None | str = field( + default=None, + metadata={ + "name": "EmailAddress", + "type": "Element", + "namespace": "", + }, + ) + extended_data: None | str = field( + default=None, + metadata={ + "name": "ExtendedData", + "type": "Element", + "namespace": "", + }, + ) + id: None | str = field( + default=None, + metadata={ + "name": "Id", + "type": "Element", + "namespace": "", + }, + ) + postal_address: None | Address = field( + default=None, + metadata={ + "name": "PostalAddress", + "type": "Element", + "namespace": "", + }, + ) + provider_identifier: str = field( + metadata={ + "name": "ProviderIdentifier", + "type": "Element", + "namespace": "", + "required": True, + } + ) + provider_name: str = field( + metadata={ + "name": "ProviderName", + "type": "Element", + "namespace": "", + "required": True, + } + ) + provider_phone: None | ProviderPhone = field( + default=None, + metadata={ + "name": "ProviderPhone", + "type": "Element", + "namespace": "", + }, + ) + remark: None | str = field( + default=None, + metadata={ + "name": "Remark", + "type": "Element", + "namespace": "", + }, + ) + website: None | str = field( + default=None, + metadata={ + "name": "Website", + "type": "Element", + "namespace": "", + }, + ) diff --git a/es_elt/src/es_elt/xml/common/transaction_exception_type.py b/es_elt/src/es_elt/xml/common/transaction_exception_type.py new file mode 100644 index 0000000..0b48899 --- /dev/null +++ b/es_elt/src/es_elt/xml/common/transaction_exception_type.py @@ -0,0 +1,25 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/TransactionExceptionType" + + +class TransactionExceptionType1(Enum): + SIGNATURE = "SIGNATURE" + FORMAT = "FORMAT" + + +class TransactionExceptionType(BaseModel): + class Meta: + namespace = "http://www.thales.dc/TransactionExceptionType" + + model_config = ConfigDict(defer_build=True) + value: TransactionExceptionType1 = field( + metadata={ + "required": True, + } + ) diff --git a/es_elt/src/es_elt/xml/common/transit_contract.py b/es_elt/src/es_elt/xml/common/transit_contract.py new file mode 100644 index 0000000..1dbd69a --- /dev/null +++ b/es_elt/src/es_elt/xml/common/transit_contract.py @@ -0,0 +1,103 @@ +from __future__ import annotations + +from decimal import Decimal +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/TransitContract" + + +class PriceIncludingVat(BaseModel): + class Meta: + name = "PriceIncludingVAT" + + model_config = ConfigDict(defer_build=True) + amount_it: None | Decimal = field( + default=None, + metadata={ + "name": "AmountIT", + "type": "Element", + "namespace": "", + }, + ) + amount_et: None | Decimal = field( + default=None, + metadata={ + "name": "AmountET", + "type": "Element", + "namespace": "", + }, + ) + amount_pst: None | Decimal = field( + default=None, + metadata={ + "name": "AmountPST", + "type": "Element", + "namespace": "", + }, + ) + amount_gst: None | Decimal = field( + default=None, + metadata={ + "name": "AmountGST", + "type": "Element", + "namespace": "", + }, + ) + + +class ProductFamily(Enum): + PERIOD_PASS = "PERIOD_PASS" + MULTI_RIDE = "MULTI_RIDE" + PAY_AS_YOU_GO = "PAY_AS_YOU_GO" + EXIT_TICKET = "EXIT_TICKET" + MULTI_LEG = "MULTI_LEG" + + +class TransitContract(BaseModel): + class Meta: + namespace = "http://www.thales.dc/TransitContract" + + model_config = ConfigDict(defer_build=True) + contract_serial_number: None | str = field( + default=None, + metadata={ + "name": "ContractSerialNumber", + "type": "Element", + "namespace": "", + }, + ) + product_code: None | int = field( + default=None, + metadata={ + "name": "ProductCode", + "type": "Element", + "namespace": "", + }, + ) + product_family: None | ProductFamily = field( + default=None, + metadata={ + "name": "ProductFamily", + "type": "Element", + "namespace": "", + }, + ) + sale_ordered_item_number: None | str = field( + default=None, + metadata={ + "name": "SaleOrderedItemNumber", + "type": "Element", + "namespace": "", + }, + ) + total_amount: None | PriceIncludingVat = field( + default=None, + metadata={ + "name": "TotalAmount", + "type": "Element", + "namespace": "", + }, + ) diff --git a/es_elt/src/es_elt/xml/common/travel_event_source.py b/es_elt/src/es_elt/xml/common/travel_event_source.py new file mode 100644 index 0000000..617f4e9 --- /dev/null +++ b/es_elt/src/es_elt/xml/common/travel_event_source.py @@ -0,0 +1,28 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/TravelEventSource" + + +class TravelEventSource1(Enum): + DELAY = "DELAY" + ADJUSTMENT = "ADJUSTMENT" + CANCELLATION = "CANCELLATION" + OFFLINE = "OFFLINE" + ONLINE = "ONLINE" + + +class TravelEventSource(BaseModel): + class Meta: + namespace = "http://www.thales.dc/TravelEventSource" + + model_config = ConfigDict(defer_build=True) + value: TravelEventSource1 = field( + metadata={ + "required": True, + } + ) diff --git a/es_elt/src/es_elt/xml/common/travel_event_type.py b/es_elt/src/es_elt/xml/common/travel_event_type.py new file mode 100644 index 0000000..9a168e0 --- /dev/null +++ b/es_elt/src/es_elt/xml/common/travel_event_type.py @@ -0,0 +1,39 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/TravelEventType" + + +class TravelEventType1(Enum): + """ + :cvar VOID: for internal use only, in conjunction with + TravelStatus.NULL + :cvar CHECKPOINT: + :cvar ENTRY: + :cvar INSPECTION: + :cvar EXIT: + :cvar PASSAGE: + """ + + VOID = "VOID" + CHECKPOINT = "CHECKPOINT" + ENTRY = "ENTRY" + INSPECTION = "INSPECTION" + EXIT = "EXIT" + PASSAGE = "PASSAGE" + + +class TravelEventType(BaseModel): + class Meta: + namespace = "http://www.thales.dc/TravelEventType" + + model_config = ConfigDict(defer_build=True) + value: TravelEventType1 = field( + metadata={ + "required": True, + } + ) diff --git a/es_elt/src/es_elt/xml/common/travel_status.py b/es_elt/src/es_elt/xml/common/travel_status.py new file mode 100644 index 0000000..35112a2 --- /dev/null +++ b/es_elt/src/es_elt/xml/common/travel_status.py @@ -0,0 +1,26 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/TravelStatus" + + +class TravelStatus1(Enum): + REGULAR = "REGULAR" + EXPECTED = "EXPECTED" + MISSING = "MISSING" + + +class TravelStatus(BaseModel): + class Meta: + namespace = "http://www.thales.dc/TravelStatus" + + model_config = ConfigDict(defer_build=True) + value: TravelStatus1 = field( + metadata={ + "required": True, + } + ) diff --git a/es_elt/src/es_elt/xml/common/validation_model.py b/es_elt/src/es_elt/xml/common/validation_model.py new file mode 100644 index 0000000..39a46d2 --- /dev/null +++ b/es_elt/src/es_elt/xml/common/validation_model.py @@ -0,0 +1,31 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +__NAMESPACE__ = "http://www.thales.dc/ValidationModel" + + +class ValidationModel1(Enum): + """ + Model of validation. + """ + + OPTIONAL_CHECKOUT = "OPTIONAL_CHECKOUT" + CHECKIN_CHECKOUT = "CHECKIN_CHECKOUT" + STANDALONE = "STANDALONE" + ISOLATED = "ISOLATED" + + +class ValidationModel(BaseModel): + class Meta: + namespace = "http://www.thales.dc/ValidationModel" + + model_config = ConfigDict(defer_build=True) + value: ValidationModel1 = field( + metadata={ + "required": True, + } + ) diff --git a/es_elt/uv.lock b/es_elt/uv.lock new file mode 100644 index 0000000..2a14e50 --- /dev/null +++ b/es_elt/uv.lock @@ -0,0 +1,704 @@ +version = 1 +revision = 3 +requires-python = ">=3.12" + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, +] + +[[package]] +name = "anyio" +version = "4.12.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/96/f0/5eb65b2bb0d09ac6776f2eb54adee6abe8228ea05b20a5ad0e4945de8aac/anyio-4.12.1.tar.gz", hash = "sha256:41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703", size = 228685, upload-time = "2026-01-06T11:45:21.246Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl", hash = "sha256:d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c", size = 113592, upload-time = "2026-01-06T11:45:19.497Z" }, +] + +[[package]] +name = "attrs" +version = "25.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6b/5c/685e6633917e101e5dcb62b9dd76946cbb57c26e133bae9e0cd36033c0a9/attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11", size = 934251, upload-time = "2025-10-06T13:54:44.725Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373", size = 67615, upload-time = "2025-10-06T13:54:43.17Z" }, +] + +[[package]] +name = "certifi" +version = "2026.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/2d/a891ca51311197f6ad14a7ef42e2399f36cf2f9bd44752b3dc4eab60fdc5/certifi-2026.1.4.tar.gz", hash = "sha256:ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120", size = 154268, upload-time = "2026-01-04T02:42:41.825Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl", hash = "sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c", size = 152900, upload-time = "2026-01-04T02:42:40.15Z" }, +] + +[[package]] +name = "click" +version = "8.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/fa/656b739db8587d7b5dfa22e22ed02566950fbfbcdc20311993483657a5c0/click-8.3.1.tar.gz", hash = "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a", size = 295065, upload-time = "2025-11-15T20:45:42.706Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl", hash = "sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6", size = 108274, upload-time = "2025-11-15T20:45:41.139Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "cyclopts" +version = "4.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "docstring-parser" }, + { name = "rich" }, + { name = "rich-rst" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/13/7b/663f3285c1ac0e5d0854bd9db2c87caa6fa3d1a063185e3394a6cdca9151/cyclopts-4.5.0.tar.gz", hash = "sha256:717ac4235548b58d500baf7e688aa4d024caf0ee68f61a012ffd5e29db3099f9", size = 161980, upload-time = "2026-01-16T02:07:16.171Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/a3/2e00fececc34a99ae3a5d5702a5dd29c5371e4ed016647301a2b9bcc1976/cyclopts-4.5.0-py3-none-any.whl", hash = "sha256:305b9aa90a9cd0916f0a450b43e50ad5df9c252680731a0719edfb9b20381bf5", size = 199772, upload-time = "2026-01-16T02:07:14.707Z" }, +] + +[[package]] +name = "docstring-parser" +version = "0.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/9d/c3b43da9515bd270df0f80548d9944e389870713cc1fe2b8fb35fe2bcefd/docstring_parser-0.17.0.tar.gz", hash = "sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912", size = 27442, upload-time = "2025-07-21T07:35:01.868Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl", hash = "sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708", size = 36896, upload-time = "2025-07-21T07:35:00.684Z" }, +] + +[[package]] +name = "docutils" +version = "0.22.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ae/b6/03bb70946330e88ffec97aefd3ea75ba575cb2e762061e0e62a213befee8/docutils-0.22.4.tar.gz", hash = "sha256:4db53b1fde9abecbb74d91230d32ab626d94f6badfc575d6db9194a49df29968", size = 2291750, upload-time = "2025-12-18T19:00:26.443Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl", hash = "sha256:d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de", size = 633196, upload-time = "2025-12-18T19:00:18.077Z" }, +] + +[[package]] +name = "dynaconf" +version = "3.2.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/bd/7a6f84b68268fe1d12e709faec7d293e0c37c9c03bacaf363de41e7e7568/dynaconf-3.2.12.tar.gz", hash = "sha256:29cea583b007d890e6031fa89c0ac489b631c73dbee83bcd5e6f97602c26354e", size = 313801, upload-time = "2025-10-10T19:54:06.164Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/68/51adede38ab2ee9ecfddb8b60a80a42b618a72f1018fcf60974e5d852831/dynaconf-3.2.12-py2.py3-none-any.whl", hash = "sha256:eb2a11865917dff8810c6098cd736b8f4d2f4e39ad914500e2dfbe064b82c499", size = 237788, upload-time = "2025-10-10T19:54:03.731Z" }, +] + +[[package]] +name = "elastic-transport" +version = "9.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "sniffio" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/23/0a/a92140b666afdcb9862a16e4d80873b3c887c1b7e3f17e945fc3460edf1b/elastic_transport-9.2.1.tar.gz", hash = "sha256:97d9abd638ba8aa90faa4ca1bf1a18bde0fe2088fbc8757f2eb7b299f205773d", size = 77403, upload-time = "2025-12-23T11:54:12.849Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/e6/a42b600ae8b808371f740381f6c32050cad93f870d36cc697b8b7006bf7c/elastic_transport-9.2.1-py3-none-any.whl", hash = "sha256:39e1a25e486af34ce7aa1bc9005d1c736f1b6fb04c9b64ea0604ded5a61fc1d4", size = 65327, upload-time = "2025-12-23T11:54:11.681Z" }, +] + +[[package]] +name = "elasticsearch" +version = "9.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "elastic-transport" }, + { name = "python-dateutil" }, + { name = "sniffio" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bc/6c/67bb17ca0035b0cac4cfbbe64e18d120203fef22da66dd4c636563a0ea63/elasticsearch-9.2.1.tar.gz", hash = "sha256:97f473418e8976611349757287ac982acf12f4e305182863d985d5a031c36830", size = 878062, upload-time = "2025-12-23T14:37:31.694Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/d5/84264c29ec67f2f8129676ce11f05defb52f44e97e5f411db9a220f2aa43/elasticsearch-9.2.1-py3-none-any.whl", hash = "sha256:8665f5a0b4d29a7c2772851c05ea8a09279abb7928b7d727524613bd61d75958", size = 963593, upload-time = "2025-12-23T14:37:28.047Z" }, +] + +[[package]] +name = "es-elt" +version = "0.1.4" +source = { editable = "." } +dependencies = [ + { name = "cyclopts" }, + { name = "dynaconf" }, + { name = "elasticsearch" }, + { name = "xsdata-pydantic", extra = ["cli", "lxml"] }, +] + +[package.dev-dependencies] +dev = [ + { name = "isort" }, + { name = "ruff" }, + { name = "taskipy" }, +] + +[package.metadata] +requires-dist = [ + { name = "cyclopts", specifier = ">=4.5.0" }, + { name = "dynaconf", specifier = ">=3.2.12" }, + { name = "elasticsearch", specifier = ">=9.2.1" }, + { name = "xsdata-pydantic", extras = ["cli", "lxml"], specifier = ">=24.5" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "isort", specifier = ">=7.0.0" }, + { name = "ruff", specifier = ">=0.14.13" }, + { name = "taskipy", specifier = ">=1.14.1" }, +] + +[[package]] +name = "idna" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, +] + +[[package]] +name = "isort" +version = "7.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/63/53/4f3c058e3bace40282876f9b553343376ee687f3c35a525dc79dbd450f88/isort-7.0.0.tar.gz", hash = "sha256:5513527951aadb3ac4292a41a16cbc50dd1642432f5e8c20057d414bdafb4187", size = 805049, upload-time = "2025-10-11T13:30:59.107Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/ed/e3705d6d02b4f7aea715a353c8ce193efd0b5db13e204df895d38734c244/isort-7.0.0-py3-none-any.whl", hash = "sha256:1bcabac8bc3c36c7fb7b98a76c8abb18e0f841a3ba81decac7691008592499c1", size = 94672, upload-time = "2025-10-11T13:30:57.665Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "lxml" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/88/262177de60548e5a2bfc46ad28232c9e9cbde697bd94132aeb80364675cb/lxml-6.0.2.tar.gz", hash = "sha256:cd79f3367bd74b317dda655dc8fcfa304d9eb6e4fb06b7168c5cf27f96e0cd62", size = 4073426, upload-time = "2025-09-22T04:04:59.287Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/c8/8ff2bc6b920c84355146cd1ab7d181bc543b89241cfb1ebee824a7c81457/lxml-6.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a59f5448ba2ceccd06995c95ea59a7674a10de0810f2ce90c9006f3cbc044456", size = 8661887, upload-time = "2025-09-22T04:01:17.265Z" }, + { url = "https://files.pythonhosted.org/packages/37/6f/9aae1008083bb501ef63284220ce81638332f9ccbfa53765b2b7502203cf/lxml-6.0.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e8113639f3296706fbac34a30813929e29247718e88173ad849f57ca59754924", size = 4667818, upload-time = "2025-09-22T04:01:19.688Z" }, + { url = "https://files.pythonhosted.org/packages/f1/ca/31fb37f99f37f1536c133476674c10b577e409c0a624384147653e38baf2/lxml-6.0.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a8bef9b9825fa8bc816a6e641bb67219489229ebc648be422af695f6e7a4fa7f", size = 4950807, upload-time = "2025-09-22T04:01:21.487Z" }, + { url = "https://files.pythonhosted.org/packages/da/87/f6cb9442e4bada8aab5ae7e1046264f62fdbeaa6e3f6211b93f4c0dd97f1/lxml-6.0.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:65ea18d710fd14e0186c2f973dc60bb52039a275f82d3c44a0e42b43440ea534", size = 5109179, upload-time = "2025-09-22T04:01:23.32Z" }, + { url = "https://files.pythonhosted.org/packages/c8/20/a7760713e65888db79bbae4f6146a6ae5c04e4a204a3c48896c408cd6ed2/lxml-6.0.2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c371aa98126a0d4c739ca93ceffa0fd7a5d732e3ac66a46e74339acd4d334564", size = 5023044, upload-time = "2025-09-22T04:01:25.118Z" }, + { url = "https://files.pythonhosted.org/packages/a2/b0/7e64e0460fcb36471899f75831509098f3fd7cd02a3833ac517433cb4f8f/lxml-6.0.2-cp312-cp312-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:700efd30c0fa1a3581d80a748157397559396090a51d306ea59a70020223d16f", size = 5359685, upload-time = "2025-09-22T04:01:27.398Z" }, + { url = "https://files.pythonhosted.org/packages/b9/e1/e5df362e9ca4e2f48ed6411bd4b3a0ae737cc842e96877f5bf9428055ab4/lxml-6.0.2-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c33e66d44fe60e72397b487ee92e01da0d09ba2d66df8eae42d77b6d06e5eba0", size = 5654127, upload-time = "2025-09-22T04:01:29.629Z" }, + { url = "https://files.pythonhosted.org/packages/c6/d1/232b3309a02d60f11e71857778bfcd4acbdb86c07db8260caf7d008b08f8/lxml-6.0.2-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90a345bbeaf9d0587a3aaffb7006aa39ccb6ff0e96a57286c0cb2fd1520ea192", size = 5253958, upload-time = "2025-09-22T04:01:31.535Z" }, + { url = "https://files.pythonhosted.org/packages/35/35/d955a070994725c4f7d80583a96cab9c107c57a125b20bb5f708fe941011/lxml-6.0.2-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:064fdadaf7a21af3ed1dcaa106b854077fbeada827c18f72aec9346847cd65d0", size = 4711541, upload-time = "2025-09-22T04:01:33.801Z" }, + { url = "https://files.pythonhosted.org/packages/1e/be/667d17363b38a78c4bd63cfd4b4632029fd68d2c2dc81f25ce9eb5224dd5/lxml-6.0.2-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fbc74f42c3525ac4ffa4b89cbdd00057b6196bcefe8bce794abd42d33a018092", size = 5267426, upload-time = "2025-09-22T04:01:35.639Z" }, + { url = "https://files.pythonhosted.org/packages/ea/47/62c70aa4a1c26569bc958c9ca86af2bb4e1f614e8c04fb2989833874f7ae/lxml-6.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6ddff43f702905a4e32bc24f3f2e2edfe0f8fde3277d481bffb709a4cced7a1f", size = 5064917, upload-time = "2025-09-22T04:01:37.448Z" }, + { url = "https://files.pythonhosted.org/packages/bd/55/6ceddaca353ebd0f1908ef712c597f8570cc9c58130dbb89903198e441fd/lxml-6.0.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6da5185951d72e6f5352166e3da7b0dc27aa70bd1090b0eb3f7f7212b53f1bb8", size = 4788795, upload-time = "2025-09-22T04:01:39.165Z" }, + { url = "https://files.pythonhosted.org/packages/cf/e8/fd63e15da5e3fd4c2146f8bbb3c14e94ab850589beab88e547b2dbce22e1/lxml-6.0.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:57a86e1ebb4020a38d295c04fc79603c7899e0df71588043eb218722dabc087f", size = 5676759, upload-time = "2025-09-22T04:01:41.506Z" }, + { url = "https://files.pythonhosted.org/packages/76/47/b3ec58dc5c374697f5ba37412cd2728f427d056315d124dd4b61da381877/lxml-6.0.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:2047d8234fe735ab77802ce5f2297e410ff40f5238aec569ad7c8e163d7b19a6", size = 5255666, upload-time = "2025-09-22T04:01:43.363Z" }, + { url = "https://files.pythonhosted.org/packages/19/93/03ba725df4c3d72afd9596eef4a37a837ce8e4806010569bedfcd2cb68fd/lxml-6.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6f91fd2b2ea15a6800c8e24418c0775a1694eefc011392da73bc6cef2623b322", size = 5277989, upload-time = "2025-09-22T04:01:45.215Z" }, + { url = "https://files.pythonhosted.org/packages/c6/80/c06de80bfce881d0ad738576f243911fccf992687ae09fd80b734712b39c/lxml-6.0.2-cp312-cp312-win32.whl", hash = "sha256:3ae2ce7d6fedfb3414a2b6c5e20b249c4c607f72cb8d2bb7cc9c6ec7c6f4e849", size = 3611456, upload-time = "2025-09-22T04:01:48.243Z" }, + { url = "https://files.pythonhosted.org/packages/f7/d7/0cdfb6c3e30893463fb3d1e52bc5f5f99684a03c29a0b6b605cfae879cd5/lxml-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:72c87e5ee4e58a8354fb9c7c84cbf95a1c8236c127a5d1b7683f04bed8361e1f", size = 4011793, upload-time = "2025-09-22T04:01:50.042Z" }, + { url = "https://files.pythonhosted.org/packages/ea/7b/93c73c67db235931527301ed3785f849c78991e2e34f3fd9a6663ffda4c5/lxml-6.0.2-cp312-cp312-win_arm64.whl", hash = "sha256:61cb10eeb95570153e0c0e554f58df92ecf5109f75eacad4a95baa709e26c3d6", size = 3672836, upload-time = "2025-09-22T04:01:52.145Z" }, + { url = "https://files.pythonhosted.org/packages/53/fd/4e8f0540608977aea078bf6d79f128e0e2c2bba8af1acf775c30baa70460/lxml-6.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9b33d21594afab46f37ae58dfadd06636f154923c4e8a4d754b0127554eb2e77", size = 8648494, upload-time = "2025-09-22T04:01:54.242Z" }, + { url = "https://files.pythonhosted.org/packages/5d/f4/2a94a3d3dfd6c6b433501b8d470a1960a20ecce93245cf2db1706adf6c19/lxml-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6c8963287d7a4c5c9a432ff487c52e9c5618667179c18a204bdedb27310f022f", size = 4661146, upload-time = "2025-09-22T04:01:56.282Z" }, + { url = "https://files.pythonhosted.org/packages/25/2e/4efa677fa6b322013035d38016f6ae859d06cac67437ca7dc708a6af7028/lxml-6.0.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1941354d92699fb5ffe6ed7b32f9649e43c2feb4b97205f75866f7d21aa91452", size = 4946932, upload-time = "2025-09-22T04:01:58.989Z" }, + { url = "https://files.pythonhosted.org/packages/ce/0f/526e78a6d38d109fdbaa5049c62e1d32fdd70c75fb61c4eadf3045d3d124/lxml-6.0.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bb2f6ca0ae2d983ded09357b84af659c954722bbf04dea98030064996d156048", size = 5100060, upload-time = "2025-09-22T04:02:00.812Z" }, + { url = "https://files.pythonhosted.org/packages/81/76/99de58d81fa702cc0ea7edae4f4640416c2062813a00ff24bd70ac1d9c9b/lxml-6.0.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb2a12d704f180a902d7fa778c6d71f36ceb7b0d317f34cdc76a5d05aa1dd1df", size = 5019000, upload-time = "2025-09-22T04:02:02.671Z" }, + { url = "https://files.pythonhosted.org/packages/b5/35/9e57d25482bc9a9882cb0037fdb9cc18f4b79d85df94fa9d2a89562f1d25/lxml-6.0.2-cp313-cp313-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:6ec0e3f745021bfed19c456647f0298d60a24c9ff86d9d051f52b509663feeb1", size = 5348496, upload-time = "2025-09-22T04:02:04.904Z" }, + { url = "https://files.pythonhosted.org/packages/a6/8e/cb99bd0b83ccc3e8f0f528e9aa1f7a9965dfec08c617070c5db8d63a87ce/lxml-6.0.2-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:846ae9a12d54e368933b9759052d6206a9e8b250291109c48e350c1f1f49d916", size = 5643779, upload-time = "2025-09-22T04:02:06.689Z" }, + { url = "https://files.pythonhosted.org/packages/d0/34/9e591954939276bb679b73773836c6684c22e56d05980e31d52a9a8deb18/lxml-6.0.2-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef9266d2aa545d7374938fb5c484531ef5a2ec7f2d573e62f8ce722c735685fd", size = 5244072, upload-time = "2025-09-22T04:02:08.587Z" }, + { url = "https://files.pythonhosted.org/packages/8d/27/b29ff065f9aaca443ee377aff699714fcbffb371b4fce5ac4ca759e436d5/lxml-6.0.2-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:4077b7c79f31755df33b795dc12119cb557a0106bfdab0d2c2d97bd3cf3dffa6", size = 4718675, upload-time = "2025-09-22T04:02:10.783Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9f/f756f9c2cd27caa1a6ef8c32ae47aadea697f5c2c6d07b0dae133c244fbe/lxml-6.0.2-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a7c5d5e5f1081955358533be077166ee97ed2571d6a66bdba6ec2f609a715d1a", size = 5255171, upload-time = "2025-09-22T04:02:12.631Z" }, + { url = "https://files.pythonhosted.org/packages/61/46/bb85ea42d2cb1bd8395484fd72f38e3389611aa496ac7772da9205bbda0e/lxml-6.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8f8d0cbd0674ee89863a523e6994ac25fd5be9c8486acfc3e5ccea679bad2679", size = 5057175, upload-time = "2025-09-22T04:02:14.718Z" }, + { url = "https://files.pythonhosted.org/packages/95/0c/443fc476dcc8e41577f0af70458c50fe299a97bb6b7505bb1ae09aa7f9ac/lxml-6.0.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2cbcbf6d6e924c28f04a43f3b6f6e272312a090f269eff68a2982e13e5d57659", size = 4785688, upload-time = "2025-09-22T04:02:16.957Z" }, + { url = "https://files.pythonhosted.org/packages/48/78/6ef0b359d45bb9697bc5a626e1992fa5d27aa3f8004b137b2314793b50a0/lxml-6.0.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dfb874cfa53340009af6bdd7e54ebc0d21012a60a4e65d927c2e477112e63484", size = 5660655, upload-time = "2025-09-22T04:02:18.815Z" }, + { url = "https://files.pythonhosted.org/packages/ff/ea/e1d33808f386bc1339d08c0dcada6e4712d4ed8e93fcad5f057070b7988a/lxml-6.0.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:fb8dae0b6b8b7f9e96c26fdd8121522ce5de9bb5538010870bd538683d30e9a2", size = 5247695, upload-time = "2025-09-22T04:02:20.593Z" }, + { url = "https://files.pythonhosted.org/packages/4f/47/eba75dfd8183673725255247a603b4ad606f4ae657b60c6c145b381697da/lxml-6.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:358d9adae670b63e95bc59747c72f4dc97c9ec58881d4627fe0120da0f90d314", size = 5269841, upload-time = "2025-09-22T04:02:22.489Z" }, + { url = "https://files.pythonhosted.org/packages/76/04/5c5e2b8577bc936e219becb2e98cdb1aca14a4921a12995b9d0c523502ae/lxml-6.0.2-cp313-cp313-win32.whl", hash = "sha256:e8cd2415f372e7e5a789d743d133ae474290a90b9023197fd78f32e2dc6873e2", size = 3610700, upload-time = "2025-09-22T04:02:24.465Z" }, + { url = "https://files.pythonhosted.org/packages/fe/0a/4643ccc6bb8b143e9f9640aa54e38255f9d3b45feb2cbe7ae2ca47e8782e/lxml-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:b30d46379644fbfc3ab81f8f82ae4de55179414651f110a1514f0b1f8f6cb2d7", size = 4010347, upload-time = "2025-09-22T04:02:26.286Z" }, + { url = "https://files.pythonhosted.org/packages/31/ef/dcf1d29c3f530577f61e5fe2f1bd72929acf779953668a8a47a479ae6f26/lxml-6.0.2-cp313-cp313-win_arm64.whl", hash = "sha256:13dcecc9946dca97b11b7c40d29fba63b55ab4170d3c0cf8c0c164343b9bfdcf", size = 3671248, upload-time = "2025-09-22T04:02:27.918Z" }, + { url = "https://files.pythonhosted.org/packages/03/15/d4a377b385ab693ce97b472fe0c77c2b16ec79590e688b3ccc71fba19884/lxml-6.0.2-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:b0c732aa23de8f8aec23f4b580d1e52905ef468afb4abeafd3fec77042abb6fe", size = 8659801, upload-time = "2025-09-22T04:02:30.113Z" }, + { url = "https://files.pythonhosted.org/packages/c8/e8/c128e37589463668794d503afaeb003987373c5f94d667124ffd8078bbd9/lxml-6.0.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:4468e3b83e10e0317a89a33d28f7aeba1caa4d1a6fd457d115dd4ffe90c5931d", size = 4659403, upload-time = "2025-09-22T04:02:32.119Z" }, + { url = "https://files.pythonhosted.org/packages/00/ce/74903904339decdf7da7847bb5741fc98a5451b42fc419a86c0c13d26fe2/lxml-6.0.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:abd44571493973bad4598a3be7e1d807ed45aa2adaf7ab92ab7c62609569b17d", size = 4966974, upload-time = "2025-09-22T04:02:34.155Z" }, + { url = "https://files.pythonhosted.org/packages/1f/d3/131dec79ce61c5567fecf82515bd9bc36395df42501b50f7f7f3bd065df0/lxml-6.0.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:370cd78d5855cfbffd57c422851f7d3864e6ae72d0da615fca4dad8c45d375a5", size = 5102953, upload-time = "2025-09-22T04:02:36.054Z" }, + { url = "https://files.pythonhosted.org/packages/3a/ea/a43ba9bb750d4ffdd885f2cd333572f5bb900cd2408b67fdda07e85978a0/lxml-6.0.2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:901e3b4219fa04ef766885fb40fa516a71662a4c61b80c94d25336b4934b71c0", size = 5055054, upload-time = "2025-09-22T04:02:38.154Z" }, + { url = "https://files.pythonhosted.org/packages/60/23/6885b451636ae286c34628f70a7ed1fcc759f8d9ad382d132e1c8d3d9bfd/lxml-6.0.2-cp314-cp314-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:a4bf42d2e4cf52c28cc1812d62426b9503cdb0c87a6de81442626aa7d69707ba", size = 5352421, upload-time = "2025-09-22T04:02:40.413Z" }, + { url = "https://files.pythonhosted.org/packages/48/5b/fc2ddfc94ddbe3eebb8e9af6e3fd65e2feba4967f6a4e9683875c394c2d8/lxml-6.0.2-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2c7fdaa4d7c3d886a42534adec7cfac73860b89b4e5298752f60aa5984641a0", size = 5673684, upload-time = "2025-09-22T04:02:42.288Z" }, + { url = "https://files.pythonhosted.org/packages/29/9c/47293c58cc91769130fbf85531280e8cc7868f7fbb6d92f4670071b9cb3e/lxml-6.0.2-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:98a5e1660dc7de2200b00d53fa00bcd3c35a3608c305d45a7bbcaf29fa16e83d", size = 5252463, upload-time = "2025-09-22T04:02:44.165Z" }, + { url = "https://files.pythonhosted.org/packages/9b/da/ba6eceb830c762b48e711ded880d7e3e89fc6c7323e587c36540b6b23c6b/lxml-6.0.2-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:dc051506c30b609238d79eda75ee9cab3e520570ec8219844a72a46020901e37", size = 4698437, upload-time = "2025-09-22T04:02:46.524Z" }, + { url = "https://files.pythonhosted.org/packages/a5/24/7be3f82cb7990b89118d944b619e53c656c97dc89c28cfb143fdb7cd6f4d/lxml-6.0.2-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8799481bbdd212470d17513a54d568f44416db01250f49449647b5ab5b5dccb9", size = 5269890, upload-time = "2025-09-22T04:02:48.812Z" }, + { url = "https://files.pythonhosted.org/packages/1b/bd/dcfb9ea1e16c665efd7538fc5d5c34071276ce9220e234217682e7d2c4a5/lxml-6.0.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9261bb77c2dab42f3ecd9103951aeca2c40277701eb7e912c545c1b16e0e4917", size = 5097185, upload-time = "2025-09-22T04:02:50.746Z" }, + { url = "https://files.pythonhosted.org/packages/21/04/a60b0ff9314736316f28316b694bccbbabe100f8483ad83852d77fc7468e/lxml-6.0.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:65ac4a01aba353cfa6d5725b95d7aed6356ddc0a3cd734de00124d285b04b64f", size = 4745895, upload-time = "2025-09-22T04:02:52.968Z" }, + { url = "https://files.pythonhosted.org/packages/d6/bd/7d54bd1846e5a310d9c715921c5faa71cf5c0853372adf78aee70c8d7aa2/lxml-6.0.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:b22a07cbb82fea98f8a2fd814f3d1811ff9ed76d0fc6abc84eb21527596e7cc8", size = 5695246, upload-time = "2025-09-22T04:02:54.798Z" }, + { url = "https://files.pythonhosted.org/packages/fd/32/5643d6ab947bc371da21323acb2a6e603cedbe71cb4c99c8254289ab6f4e/lxml-6.0.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:d759cdd7f3e055d6bc8d9bec3ad905227b2e4c785dc16c372eb5b5e83123f48a", size = 5260797, upload-time = "2025-09-22T04:02:57.058Z" }, + { url = "https://files.pythonhosted.org/packages/33/da/34c1ec4cff1eea7d0b4cd44af8411806ed943141804ac9c5d565302afb78/lxml-6.0.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:945da35a48d193d27c188037a05fec5492937f66fb1958c24fc761fb9d40d43c", size = 5277404, upload-time = "2025-09-22T04:02:58.966Z" }, + { url = "https://files.pythonhosted.org/packages/82/57/4eca3e31e54dc89e2c3507e1cd411074a17565fa5ffc437c4ae0a00d439e/lxml-6.0.2-cp314-cp314-win32.whl", hash = "sha256:be3aaa60da67e6153eb15715cc2e19091af5dc75faef8b8a585aea372507384b", size = 3670072, upload-time = "2025-09-22T04:03:38.05Z" }, + { url = "https://files.pythonhosted.org/packages/e3/e0/c96cf13eccd20c9421ba910304dae0f619724dcf1702864fd59dd386404d/lxml-6.0.2-cp314-cp314-win_amd64.whl", hash = "sha256:fa25afbadead523f7001caf0c2382afd272c315a033a7b06336da2637d92d6ed", size = 4080617, upload-time = "2025-09-22T04:03:39.835Z" }, + { url = "https://files.pythonhosted.org/packages/d5/5d/b3f03e22b3d38d6f188ef044900a9b29b2fe0aebb94625ce9fe244011d34/lxml-6.0.2-cp314-cp314-win_arm64.whl", hash = "sha256:063eccf89df5b24e361b123e257e437f9e9878f425ee9aae3144c77faf6da6d8", size = 3754930, upload-time = "2025-09-22T04:03:41.565Z" }, + { url = "https://files.pythonhosted.org/packages/5e/5c/42c2c4c03554580708fc738d13414801f340c04c3eff90d8d2d227145275/lxml-6.0.2-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6162a86d86893d63084faaf4ff937b3daea233e3682fb4474db07395794fa80d", size = 8910380, upload-time = "2025-09-22T04:03:01.645Z" }, + { url = "https://files.pythonhosted.org/packages/bf/4f/12df843e3e10d18d468a7557058f8d3733e8b6e12401f30b1ef29360740f/lxml-6.0.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:414aaa94e974e23a3e92e7ca5b97d10c0cf37b6481f50911032c69eeb3991bba", size = 4775632, upload-time = "2025-09-22T04:03:03.814Z" }, + { url = "https://files.pythonhosted.org/packages/e4/0c/9dc31e6c2d0d418483cbcb469d1f5a582a1cd00a1f4081953d44051f3c50/lxml-6.0.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48461bd21625458dd01e14e2c38dd0aea69addc3c4f960c30d9f59d7f93be601", size = 4975171, upload-time = "2025-09-22T04:03:05.651Z" }, + { url = "https://files.pythonhosted.org/packages/e7/2b/9b870c6ca24c841bdd887504808f0417aa9d8d564114689266f19ddf29c8/lxml-6.0.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:25fcc59afc57d527cfc78a58f40ab4c9b8fd096a9a3f964d2781ffb6eb33f4ed", size = 5110109, upload-time = "2025-09-22T04:03:07.452Z" }, + { url = "https://files.pythonhosted.org/packages/bf/0c/4f5f2a4dd319a178912751564471355d9019e220c20d7db3fb8307ed8582/lxml-6.0.2-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5179c60288204e6ddde3f774a93350177e08876eaf3ab78aa3a3649d43eb7d37", size = 5041061, upload-time = "2025-09-22T04:03:09.297Z" }, + { url = "https://files.pythonhosted.org/packages/12/64/554eed290365267671fe001a20d72d14f468ae4e6acef1e179b039436967/lxml-6.0.2-cp314-cp314t-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:967aab75434de148ec80597b75062d8123cadf2943fb4281f385141e18b21338", size = 5306233, upload-time = "2025-09-22T04:03:11.651Z" }, + { url = "https://files.pythonhosted.org/packages/7a/31/1d748aa275e71802ad9722df32a7a35034246b42c0ecdd8235412c3396ef/lxml-6.0.2-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d100fcc8930d697c6561156c6810ab4a508fb264c8b6779e6e61e2ed5e7558f9", size = 5604739, upload-time = "2025-09-22T04:03:13.592Z" }, + { url = "https://files.pythonhosted.org/packages/8f/41/2c11916bcac09ed561adccacceaedd2bf0e0b25b297ea92aab99fd03d0fa/lxml-6.0.2-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ca59e7e13e5981175b8b3e4ab84d7da57993eeff53c07764dcebda0d0e64ecd", size = 5225119, upload-time = "2025-09-22T04:03:15.408Z" }, + { url = "https://files.pythonhosted.org/packages/99/05/4e5c2873d8f17aa018e6afde417c80cc5d0c33be4854cce3ef5670c49367/lxml-6.0.2-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:957448ac63a42e2e49531b9d6c0fa449a1970dbc32467aaad46f11545be9af1d", size = 4633665, upload-time = "2025-09-22T04:03:17.262Z" }, + { url = "https://files.pythonhosted.org/packages/0f/c9/dcc2da1bebd6275cdc723b515f93edf548b82f36a5458cca3578bc899332/lxml-6.0.2-cp314-cp314t-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b7fc49c37f1786284b12af63152fe1d0990722497e2d5817acfe7a877522f9a9", size = 5234997, upload-time = "2025-09-22T04:03:19.14Z" }, + { url = "https://files.pythonhosted.org/packages/9c/e2/5172e4e7468afca64a37b81dba152fc5d90e30f9c83c7c3213d6a02a5ce4/lxml-6.0.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e19e0643cc936a22e837f79d01a550678da8377d7d801a14487c10c34ee49c7e", size = 5090957, upload-time = "2025-09-22T04:03:21.436Z" }, + { url = "https://files.pythonhosted.org/packages/a5/b3/15461fd3e5cd4ddcb7938b87fc20b14ab113b92312fc97afe65cd7c85de1/lxml-6.0.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:1db01e5cf14345628e0cbe71067204db658e2fb8e51e7f33631f5f4735fefd8d", size = 4764372, upload-time = "2025-09-22T04:03:23.27Z" }, + { url = "https://files.pythonhosted.org/packages/05/33/f310b987c8bf9e61c4dd8e8035c416bd3230098f5e3cfa69fc4232de7059/lxml-6.0.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:875c6b5ab39ad5291588aed6925fac99d0097af0dd62f33c7b43736043d4a2ec", size = 5634653, upload-time = "2025-09-22T04:03:25.767Z" }, + { url = "https://files.pythonhosted.org/packages/70/ff/51c80e75e0bc9382158133bdcf4e339b5886c6ee2418b5199b3f1a61ed6d/lxml-6.0.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:cdcbed9ad19da81c480dfd6dd161886db6096083c9938ead313d94b30aadf272", size = 5233795, upload-time = "2025-09-22T04:03:27.62Z" }, + { url = "https://files.pythonhosted.org/packages/56/4d/4856e897df0d588789dd844dbed9d91782c4ef0b327f96ce53c807e13128/lxml-6.0.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:80dadc234ebc532e09be1975ff538d154a7fa61ea5031c03d25178855544728f", size = 5257023, upload-time = "2025-09-22T04:03:30.056Z" }, + { url = "https://files.pythonhosted.org/packages/0f/85/86766dfebfa87bea0ab78e9ff7a4b4b45225df4b4d3b8cc3c03c5cd68464/lxml-6.0.2-cp314-cp314t-win32.whl", hash = "sha256:da08e7bb297b04e893d91087df19638dc7a6bb858a954b0cc2b9f5053c922312", size = 3911420, upload-time = "2025-09-22T04:03:32.198Z" }, + { url = "https://files.pythonhosted.org/packages/fe/1a/b248b355834c8e32614650b8008c69ffeb0ceb149c793961dd8c0b991bb3/lxml-6.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:252a22982dca42f6155125ac76d3432e548a7625d56f5a273ee78a5057216eca", size = 4406837, upload-time = "2025-09-22T04:03:34.027Z" }, + { url = "https://files.pythonhosted.org/packages/92/aa/df863bcc39c5e0946263454aba394de8a9084dbaff8ad143846b0d844739/lxml-6.0.2-cp314-cp314t-win_arm64.whl", hash = "sha256:bb4c1847b303835d89d785a18801a883436cdfd5dc3d62947f9c49e24f0f5a2c", size = 3822205, upload-time = "2025-09-22T04:03:36.249Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "4.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321, upload-time = "2025-08-11T12:57:51.923Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "mslex" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/97/7022667073c99a0fe028f2e34b9bf76b49a611afd21b02527fbfd92d4cd5/mslex-1.3.0.tar.gz", hash = "sha256:641c887d1d3db610eee2af37a8e5abda3f70b3006cdfd2d0d29dc0d1ae28a85d", size = 11583, upload-time = "2024-10-16T13:16:18.523Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/f2/66bd65ca0139675a0d7b18f0bada6e12b51a984e41a76dbe44761bf1b3ee/mslex-1.3.0-py3-none-any.whl", hash = "sha256:c7074b347201b3466fc077c5692fbce9b5f62a63a51f537a53fbbd02eff2eea4", size = 7820, upload-time = "2024-10-16T13:16:17.566Z" }, +] + +[[package]] +name = "psutil" +version = "6.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1f/5a/07871137bb752428aa4b659f910b399ba6f291156bdea939be3e96cae7cb/psutil-6.1.1.tar.gz", hash = "sha256:cf8496728c18f2d0b45198f06895be52f36611711746b7f30c464b422b50e2f5", size = 508502, upload-time = "2024-12-19T18:21:20.568Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/99/ca79d302be46f7bdd8321089762dd4476ee725fce16fc2b2e1dbba8cac17/psutil-6.1.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:fc0ed7fe2231a444fc219b9c42d0376e0a9a1a72f16c5cfa0f68d19f1a0663e8", size = 247511, upload-time = "2024-12-19T18:21:45.163Z" }, + { url = "https://files.pythonhosted.org/packages/0b/6b/73dbde0dd38f3782905d4587049b9be64d76671042fdcaf60e2430c6796d/psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:0bdd4eab935276290ad3cb718e9809412895ca6b5b334f5a9111ee6d9aff9377", size = 248985, upload-time = "2024-12-19T18:21:49.254Z" }, + { url = "https://files.pythonhosted.org/packages/17/38/c319d31a1d3f88c5b79c68b3116c129e5133f1822157dd6da34043e32ed6/psutil-6.1.1-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6e06c20c05fe95a3d7302d74e7097756d4ba1247975ad6905441ae1b5b66003", size = 284488, upload-time = "2024-12-19T18:21:51.638Z" }, + { url = "https://files.pythonhosted.org/packages/9c/39/0f88a830a1c8a3aba27fededc642da37613c57cbff143412e3536f89784f/psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97f7cb9921fbec4904f522d972f0c0e1f4fabbdd4e0287813b21215074a0f160", size = 287477, upload-time = "2024-12-19T18:21:55.306Z" }, + { url = "https://files.pythonhosted.org/packages/47/da/99f4345d4ddf2845cb5b5bd0d93d554e84542d116934fde07a0c50bd4e9f/psutil-6.1.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33431e84fee02bc84ea36d9e2c4a6d395d479c9dd9bba2376c1f6ee8f3a4e0b3", size = 289017, upload-time = "2024-12-19T18:21:57.875Z" }, + { url = "https://files.pythonhosted.org/packages/38/53/bd755c2896f4461fd4f36fa6a6dcb66a88a9e4b9fd4e5b66a77cf9d4a584/psutil-6.1.1-cp37-abi3-win32.whl", hash = "sha256:eaa912e0b11848c4d9279a93d7e2783df352b082f40111e078388701fd479e53", size = 250602, upload-time = "2024-12-19T18:22:08.808Z" }, + { url = "https://files.pythonhosted.org/packages/7b/d7/7831438e6c3ebbfa6e01a927127a6cb42ad3ab844247f3c5b96bea25d73d/psutil-6.1.1-cp37-abi3-win_amd64.whl", hash = "sha256:f35cfccb065fff93529d2afb4a2e89e363fe63ca1e4a5da22b603a85833c2649", size = 254444, upload-time = "2024-12-19T18:22:11.335Z" }, +] + +[[package]] +name = "pydantic" +version = "2.12.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/69/44/36f1a6e523abc58ae5f928898e4aca2e0ea509b5aa6f6f392a5d882be928/pydantic-2.12.5.tar.gz", hash = "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49", size = 821591, upload-time = "2025-11-26T15:11:46.471Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl", hash = "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d", size = 463580, upload-time = "2025-11-26T15:11:44.605Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.41.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/70/23b021c950c2addd24ec408e9ab05d59b035b39d97cdc1130e1bce647bb6/pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e", size = 460952, upload-time = "2025-11-04T13:43:49.098Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/5d/5f6c63eebb5afee93bcaae4ce9a898f3373ca23df3ccaef086d0233a35a7/pydantic_core-2.41.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7", size = 2110990, upload-time = "2025-11-04T13:39:58.079Z" }, + { url = "https://files.pythonhosted.org/packages/aa/32/9c2e8ccb57c01111e0fd091f236c7b371c1bccea0fa85247ac55b1e2b6b6/pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0", size = 1896003, upload-time = "2025-11-04T13:39:59.956Z" }, + { url = "https://files.pythonhosted.org/packages/68/b8/a01b53cb0e59139fbc9e4fda3e9724ede8de279097179be4ff31f1abb65a/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69", size = 1919200, upload-time = "2025-11-04T13:40:02.241Z" }, + { url = "https://files.pythonhosted.org/packages/38/de/8c36b5198a29bdaade07b5985e80a233a5ac27137846f3bc2d3b40a47360/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75", size = 2052578, upload-time = "2025-11-04T13:40:04.401Z" }, + { url = "https://files.pythonhosted.org/packages/00/b5/0e8e4b5b081eac6cb3dbb7e60a65907549a1ce035a724368c330112adfdd/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05", size = 2208504, upload-time = "2025-11-04T13:40:06.072Z" }, + { url = "https://files.pythonhosted.org/packages/77/56/87a61aad59c7c5b9dc8caad5a41a5545cba3810c3e828708b3d7404f6cef/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc", size = 2335816, upload-time = "2025-11-04T13:40:07.835Z" }, + { url = "https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c", size = 2075366, upload-time = "2025-11-04T13:40:09.804Z" }, + { url = "https://files.pythonhosted.org/packages/d3/43/ebef01f69baa07a482844faaa0a591bad1ef129253ffd0cdaa9d8a7f72d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5", size = 2171698, upload-time = "2025-11-04T13:40:12.004Z" }, + { url = "https://files.pythonhosted.org/packages/b1/87/41f3202e4193e3bacfc2c065fab7706ebe81af46a83d3e27605029c1f5a6/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c", size = 2132603, upload-time = "2025-11-04T13:40:13.868Z" }, + { url = "https://files.pythonhosted.org/packages/49/7d/4c00df99cb12070b6bccdef4a195255e6020a550d572768d92cc54dba91a/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294", size = 2329591, upload-time = "2025-11-04T13:40:15.672Z" }, + { url = "https://files.pythonhosted.org/packages/cc/6a/ebf4b1d65d458f3cda6a7335d141305dfa19bdc61140a884d165a8a1bbc7/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1", size = 2319068, upload-time = "2025-11-04T13:40:17.532Z" }, + { url = "https://files.pythonhosted.org/packages/49/3b/774f2b5cd4192d5ab75870ce4381fd89cf218af999515baf07e7206753f0/pydantic_core-2.41.5-cp312-cp312-win32.whl", hash = "sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d", size = 1985908, upload-time = "2025-11-04T13:40:19.309Z" }, + { url = "https://files.pythonhosted.org/packages/86/45/00173a033c801cacf67c190fef088789394feaf88a98a7035b0e40d53dc9/pydantic_core-2.41.5-cp312-cp312-win_amd64.whl", hash = "sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815", size = 2020145, upload-time = "2025-11-04T13:40:21.548Z" }, + { url = "https://files.pythonhosted.org/packages/f9/22/91fbc821fa6d261b376a3f73809f907cec5ca6025642c463d3488aad22fb/pydantic_core-2.41.5-cp312-cp312-win_arm64.whl", hash = "sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3", size = 1976179, upload-time = "2025-11-04T13:40:23.393Z" }, + { url = "https://files.pythonhosted.org/packages/87/06/8806241ff1f70d9939f9af039c6c35f2360cf16e93c2ca76f184e76b1564/pydantic_core-2.41.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9", size = 2120403, upload-time = "2025-11-04T13:40:25.248Z" }, + { url = "https://files.pythonhosted.org/packages/94/02/abfa0e0bda67faa65fef1c84971c7e45928e108fe24333c81f3bfe35d5f5/pydantic_core-2.41.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34", size = 1896206, upload-time = "2025-11-04T13:40:27.099Z" }, + { url = "https://files.pythonhosted.org/packages/15/df/a4c740c0943e93e6500f9eb23f4ca7ec9bf71b19e608ae5b579678c8d02f/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0", size = 1919307, upload-time = "2025-11-04T13:40:29.806Z" }, + { url = "https://files.pythonhosted.org/packages/9a/e3/6324802931ae1d123528988e0e86587c2072ac2e5394b4bc2bc34b61ff6e/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33", size = 2063258, upload-time = "2025-11-04T13:40:33.544Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d4/2230d7151d4957dd79c3044ea26346c148c98fbf0ee6ebd41056f2d62ab5/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e", size = 2214917, upload-time = "2025-11-04T13:40:35.479Z" }, + { url = "https://files.pythonhosted.org/packages/e6/9f/eaac5df17a3672fef0081b6c1bb0b82b33ee89aa5cec0d7b05f52fd4a1fa/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2", size = 2332186, upload-time = "2025-11-04T13:40:37.436Z" }, + { url = "https://files.pythonhosted.org/packages/cf/4e/35a80cae583a37cf15604b44240e45c05e04e86f9cfd766623149297e971/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586", size = 2073164, upload-time = "2025-11-04T13:40:40.289Z" }, + { url = "https://files.pythonhosted.org/packages/bf/e3/f6e262673c6140dd3305d144d032f7bd5f7497d3871c1428521f19f9efa2/pydantic_core-2.41.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d", size = 2179146, upload-time = "2025-11-04T13:40:42.809Z" }, + { url = "https://files.pythonhosted.org/packages/75/c7/20bd7fc05f0c6ea2056a4565c6f36f8968c0924f19b7d97bbfea55780e73/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740", size = 2137788, upload-time = "2025-11-04T13:40:44.752Z" }, + { url = "https://files.pythonhosted.org/packages/3a/8d/34318ef985c45196e004bc46c6eab2eda437e744c124ef0dbe1ff2c9d06b/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e", size = 2340133, upload-time = "2025-11-04T13:40:46.66Z" }, + { url = "https://files.pythonhosted.org/packages/9c/59/013626bf8c78a5a5d9350d12e7697d3d4de951a75565496abd40ccd46bee/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858", size = 2324852, upload-time = "2025-11-04T13:40:48.575Z" }, + { url = "https://files.pythonhosted.org/packages/1a/d9/c248c103856f807ef70c18a4f986693a46a8ffe1602e5d361485da502d20/pydantic_core-2.41.5-cp313-cp313-win32.whl", hash = "sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36", size = 1994679, upload-time = "2025-11-04T13:40:50.619Z" }, + { url = "https://files.pythonhosted.org/packages/9e/8b/341991b158ddab181cff136acd2552c9f35bd30380422a639c0671e99a91/pydantic_core-2.41.5-cp313-cp313-win_amd64.whl", hash = "sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11", size = 2019766, upload-time = "2025-11-04T13:40:52.631Z" }, + { url = "https://files.pythonhosted.org/packages/73/7d/f2f9db34af103bea3e09735bb40b021788a5e834c81eedb541991badf8f5/pydantic_core-2.41.5-cp313-cp313-win_arm64.whl", hash = "sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd", size = 1981005, upload-time = "2025-11-04T13:40:54.734Z" }, + { url = "https://files.pythonhosted.org/packages/ea/28/46b7c5c9635ae96ea0fbb779e271a38129df2550f763937659ee6c5dbc65/pydantic_core-2.41.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a", size = 2119622, upload-time = "2025-11-04T13:40:56.68Z" }, + { url = "https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14", size = 1891725, upload-time = "2025-11-04T13:40:58.807Z" }, + { url = "https://files.pythonhosted.org/packages/23/04/e89c29e267b8060b40dca97bfc64a19b2a3cf99018167ea1677d96368273/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1", size = 1915040, upload-time = "2025-11-04T13:41:00.853Z" }, + { url = "https://files.pythonhosted.org/packages/84/a3/15a82ac7bd97992a82257f777b3583d3e84bdb06ba6858f745daa2ec8a85/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66", size = 2063691, upload-time = "2025-11-04T13:41:03.504Z" }, + { url = "https://files.pythonhosted.org/packages/74/9b/0046701313c6ef08c0c1cf0e028c67c770a4e1275ca73131563c5f2a310a/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869", size = 2213897, upload-time = "2025-11-04T13:41:05.804Z" }, + { url = "https://files.pythonhosted.org/packages/8a/cd/6bac76ecd1b27e75a95ca3a9a559c643b3afcd2dd62086d4b7a32a18b169/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2", size = 2333302, upload-time = "2025-11-04T13:41:07.809Z" }, + { url = "https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375", size = 2064877, upload-time = "2025-11-04T13:41:09.827Z" }, + { url = "https://files.pythonhosted.org/packages/18/66/e9db17a9a763d72f03de903883c057b2592c09509ccfe468187f2a2eef29/pydantic_core-2.41.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553", size = 2180680, upload-time = "2025-11-04T13:41:12.379Z" }, + { url = "https://files.pythonhosted.org/packages/d3/9e/3ce66cebb929f3ced22be85d4c2399b8e85b622db77dad36b73c5387f8f8/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90", size = 2138960, upload-time = "2025-11-04T13:41:14.627Z" }, + { url = "https://files.pythonhosted.org/packages/a6/62/205a998f4327d2079326b01abee48e502ea739d174f0a89295c481a2272e/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07", size = 2339102, upload-time = "2025-11-04T13:41:16.868Z" }, + { url = "https://files.pythonhosted.org/packages/3c/0d/f05e79471e889d74d3d88f5bd20d0ed189ad94c2423d81ff8d0000aab4ff/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb", size = 2326039, upload-time = "2025-11-04T13:41:18.934Z" }, + { url = "https://files.pythonhosted.org/packages/ec/e1/e08a6208bb100da7e0c4b288eed624a703f4d129bde2da475721a80cab32/pydantic_core-2.41.5-cp314-cp314-win32.whl", hash = "sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23", size = 1995126, upload-time = "2025-11-04T13:41:21.418Z" }, + { url = "https://files.pythonhosted.org/packages/48/5d/56ba7b24e9557f99c9237e29f5c09913c81eeb2f3217e40e922353668092/pydantic_core-2.41.5-cp314-cp314-win_amd64.whl", hash = "sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf", size = 2015489, upload-time = "2025-11-04T13:41:24.076Z" }, + { url = "https://files.pythonhosted.org/packages/4e/bb/f7a190991ec9e3e0ba22e4993d8755bbc4a32925c0b5b42775c03e8148f9/pydantic_core-2.41.5-cp314-cp314-win_arm64.whl", hash = "sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0", size = 1977288, upload-time = "2025-11-04T13:41:26.33Z" }, + { url = "https://files.pythonhosted.org/packages/92/ed/77542d0c51538e32e15afe7899d79efce4b81eee631d99850edc2f5e9349/pydantic_core-2.41.5-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a", size = 2120255, upload-time = "2025-11-04T13:41:28.569Z" }, + { url = "https://files.pythonhosted.org/packages/bb/3d/6913dde84d5be21e284439676168b28d8bbba5600d838b9dca99de0fad71/pydantic_core-2.41.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3", size = 1863760, upload-time = "2025-11-04T13:41:31.055Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f0/e5e6b99d4191da102f2b0eb9687aaa7f5bea5d9964071a84effc3e40f997/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c", size = 1878092, upload-time = "2025-11-04T13:41:33.21Z" }, + { url = "https://files.pythonhosted.org/packages/71/48/36fb760642d568925953bcc8116455513d6e34c4beaa37544118c36aba6d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612", size = 2053385, upload-time = "2025-11-04T13:41:35.508Z" }, + { url = "https://files.pythonhosted.org/packages/20/25/92dc684dd8eb75a234bc1c764b4210cf2646479d54b47bf46061657292a8/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d", size = 2218832, upload-time = "2025-11-04T13:41:37.732Z" }, + { url = "https://files.pythonhosted.org/packages/e2/09/f53e0b05023d3e30357d82eb35835d0f6340ca344720a4599cd663dca599/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9", size = 2327585, upload-time = "2025-11-04T13:41:40Z" }, + { url = "https://files.pythonhosted.org/packages/aa/4e/2ae1aa85d6af35a39b236b1b1641de73f5a6ac4d5a7509f77b814885760c/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660", size = 2041078, upload-time = "2025-11-04T13:41:42.323Z" }, + { url = "https://files.pythonhosted.org/packages/cd/13/2e215f17f0ef326fc72afe94776edb77525142c693767fc347ed6288728d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9", size = 2173914, upload-time = "2025-11-04T13:41:45.221Z" }, + { url = "https://files.pythonhosted.org/packages/02/7a/f999a6dcbcd0e5660bc348a3991c8915ce6599f4f2c6ac22f01d7a10816c/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3", size = 2129560, upload-time = "2025-11-04T13:41:47.474Z" }, + { url = "https://files.pythonhosted.org/packages/3a/b1/6c990ac65e3b4c079a4fb9f5b05f5b013afa0f4ed6780a3dd236d2cbdc64/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf", size = 2329244, upload-time = "2025-11-04T13:41:49.992Z" }, + { url = "https://files.pythonhosted.org/packages/d9/02/3c562f3a51afd4d88fff8dffb1771b30cfdfd79befd9883ee094f5b6c0d8/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470", size = 2331955, upload-time = "2025-11-04T13:41:54.079Z" }, + { url = "https://files.pythonhosted.org/packages/5c/96/5fb7d8c3c17bc8c62fdb031c47d77a1af698f1d7a406b0f79aaa1338f9ad/pydantic_core-2.41.5-cp314-cp314t-win32.whl", hash = "sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa", size = 1988906, upload-time = "2025-11-04T13:41:56.606Z" }, + { url = "https://files.pythonhosted.org/packages/22/ed/182129d83032702912c2e2d8bbe33c036f342cc735737064668585dac28f/pydantic_core-2.41.5-cp314-cp314t-win_amd64.whl", hash = "sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c", size = 1981607, upload-time = "2025-11-04T13:41:58.889Z" }, + { url = "https://files.pythonhosted.org/packages/9f/ed/068e41660b832bb0b1aa5b58011dea2a3fe0ba7861ff38c4d4904c1c1a99/pydantic_core-2.41.5-cp314-cp314t-win_arm64.whl", hash = "sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008", size = 1974769, upload-time = "2025-11-04T13:42:01.186Z" }, + { url = "https://files.pythonhosted.org/packages/09/32/59b0c7e63e277fa7911c2fc70ccfb45ce4b98991e7ef37110663437005af/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd", size = 2110495, upload-time = "2025-11-04T13:42:49.689Z" }, + { url = "https://files.pythonhosted.org/packages/aa/81/05e400037eaf55ad400bcd318c05bb345b57e708887f07ddb2d20e3f0e98/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc", size = 1915388, upload-time = "2025-11-04T13:42:52.215Z" }, + { url = "https://files.pythonhosted.org/packages/6e/0d/e3549b2399f71d56476b77dbf3cf8937cec5cd70536bdc0e374a421d0599/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56", size = 1942879, upload-time = "2025-11-04T13:42:56.483Z" }, + { url = "https://files.pythonhosted.org/packages/f7/07/34573da085946b6a313d7c42f82f16e8920bfd730665de2d11c0c37a74b5/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b", size = 2139017, upload-time = "2025-11-04T13:42:59.471Z" }, +] + +[[package]] +name = "pygments" +version = "2.19.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "rich" +version = "14.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fb/d2/8920e102050a0de7bfabeb4c4614a49248cf8d5d7a8d01885fbb24dc767a/rich-14.2.0.tar.gz", hash = "sha256:73ff50c7c0c1c77c8243079283f4edb376f0f6442433aecb8ce7e6d0b92d1fe4", size = 219990, upload-time = "2025-10-09T14:16:53.064Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl", hash = "sha256:76bc51fe2e57d2b1be1f96c524b890b816e334ab4c1e45888799bfaab0021edd", size = 243393, upload-time = "2025-10-09T14:16:51.245Z" }, +] + +[[package]] +name = "rich-rst" +version = "1.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docutils" }, + { name = "rich" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bc/6d/a506aaa4a9eaa945ed8ab2b7347859f53593864289853c5d6d62b77246e0/rich_rst-1.3.2.tar.gz", hash = "sha256:a1196fdddf1e364b02ec68a05e8ff8f6914fee10fbca2e6b6735f166bb0da8d4", size = 14936, upload-time = "2025-10-14T16:49:45.332Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/2f/b4530fbf948867702d0a3f27de4a6aab1d156f406d72852ab902c4d04de9/rich_rst-1.3.2-py3-none-any.whl", hash = "sha256:a99b4907cbe118cf9d18b0b44de272efa61f15117c61e39ebdc431baf5df722a", size = 12567, upload-time = "2025-10-14T16:49:42.953Z" }, +] + +[[package]] +name = "ruff" +version = "0.14.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/50/0a/1914efb7903174b381ee2ffeebb4253e729de57f114e63595114c8ca451f/ruff-0.14.13.tar.gz", hash = "sha256:83cd6c0763190784b99650a20fec7633c59f6ebe41c5cc9d45ee42749563ad47", size = 6059504, upload-time = "2026-01-15T20:15:16.918Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/ae/0deefbc65ca74b0ab1fd3917f94dc3b398233346a74b8bbb0a916a1a6bf6/ruff-0.14.13-py3-none-linux_armv6l.whl", hash = "sha256:76f62c62cd37c276cb03a275b198c7c15bd1d60c989f944db08a8c1c2dbec18b", size = 13062418, upload-time = "2026-01-15T20:14:50.779Z" }, + { url = "https://files.pythonhosted.org/packages/47/df/5916604faa530a97a3c154c62a81cb6b735c0cb05d1e26d5ad0f0c8ac48a/ruff-0.14.13-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:914a8023ece0528d5cc33f5a684f5f38199bbb566a04815c2c211d8f40b5d0ed", size = 13442344, upload-time = "2026-01-15T20:15:07.94Z" }, + { url = "https://files.pythonhosted.org/packages/4c/f3/e0e694dd69163c3a1671e102aa574a50357536f18a33375050334d5cd517/ruff-0.14.13-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d24899478c35ebfa730597a4a775d430ad0d5631b8647a3ab368c29b7e7bd063", size = 12354720, upload-time = "2026-01-15T20:15:09.854Z" }, + { url = "https://files.pythonhosted.org/packages/c3/e8/67f5fcbbaee25e8fc3b56cc33e9892eca7ffe09f773c8e5907757a7e3bdb/ruff-0.14.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9aaf3870f14d925bbaf18b8a2347ee0ae7d95a2e490e4d4aea6813ed15ebc80e", size = 12774493, upload-time = "2026-01-15T20:15:20.908Z" }, + { url = "https://files.pythonhosted.org/packages/6b/ce/d2e9cb510870b52a9565d885c0d7668cc050e30fa2c8ac3fb1fda15c083d/ruff-0.14.13-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac5b7f63dd3b27cc811850f5ffd8fff845b00ad70e60b043aabf8d6ecc304e09", size = 12815174, upload-time = "2026-01-15T20:15:05.74Z" }, + { url = "https://files.pythonhosted.org/packages/88/00/c38e5da58beebcf4fa32d0ddd993b63dfacefd02ab7922614231330845bf/ruff-0.14.13-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78d2b1097750d90ba82ce4ba676e85230a0ed694178ca5e61aa9b459970b3eb9", size = 13680909, upload-time = "2026-01-15T20:15:14.537Z" }, + { url = "https://files.pythonhosted.org/packages/61/61/cd37c9dd5bd0a3099ba79b2a5899ad417d8f3b04038810b0501a80814fd7/ruff-0.14.13-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:7d0bf87705acbbcb8d4c24b2d77fbb73d40210a95c3903b443cd9e30824a5032", size = 15144215, upload-time = "2026-01-15T20:15:22.886Z" }, + { url = "https://files.pythonhosted.org/packages/56/8a/85502d7edbf98c2df7b8876f316c0157359165e16cdf98507c65c8d07d3d/ruff-0.14.13-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3eb5da8e2c9e9f13431032fdcbe7681de9ceda5835efee3269417c13f1fed5c", size = 14706067, upload-time = "2026-01-15T20:14:48.271Z" }, + { url = "https://files.pythonhosted.org/packages/7e/2f/de0df127feb2ee8c1e54354dc1179b4a23798f0866019528c938ba439aca/ruff-0.14.13-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:642442b42957093811cd8d2140dfadd19c7417030a7a68cf8d51fcdd5f217427", size = 14133916, upload-time = "2026-01-15T20:14:57.357Z" }, + { url = "https://files.pythonhosted.org/packages/0d/77/9b99686bb9fe07a757c82f6f95e555c7a47801a9305576a9c67e0a31d280/ruff-0.14.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4acdf009f32b46f6e8864af19cbf6841eaaed8638e65c8dac845aea0d703c841", size = 13859207, upload-time = "2026-01-15T20:14:55.111Z" }, + { url = "https://files.pythonhosted.org/packages/7d/46/2bdcb34a87a179a4d23022d818c1c236cb40e477faf0d7c9afb6813e5876/ruff-0.14.13-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:591a7f68860ea4e003917d19b5c4f5ac39ff558f162dc753a2c5de897fd5502c", size = 14043686, upload-time = "2026-01-15T20:14:52.841Z" }, + { url = "https://files.pythonhosted.org/packages/1a/a9/5c6a4f56a0512c691cf143371bcf60505ed0f0860f24a85da8bd123b2bf1/ruff-0.14.13-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:774c77e841cc6e046fc3e91623ce0903d1cd07e3a36b1a9fe79b81dab3de506b", size = 12663837, upload-time = "2026-01-15T20:15:18.921Z" }, + { url = "https://files.pythonhosted.org/packages/fe/bb/b920016ece7651fa7fcd335d9d199306665486694d4361547ccb19394c44/ruff-0.14.13-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:61f4e40077a1248436772bb6512db5fc4457fe4c49e7a94ea7c5088655dd21ae", size = 12805867, upload-time = "2026-01-15T20:14:59.272Z" }, + { url = "https://files.pythonhosted.org/packages/7d/b3/0bd909851e5696cd21e32a8fc25727e5f58f1934b3596975503e6e85415c/ruff-0.14.13-py3-none-musllinux_1_2_i686.whl", hash = "sha256:6d02f1428357fae9e98ac7aa94b7e966fd24151088510d32cf6f902d6c09235e", size = 13208528, upload-time = "2026-01-15T20:15:03.732Z" }, + { url = "https://files.pythonhosted.org/packages/3b/3b/e2d94cb613f6bbd5155a75cbe072813756363eba46a3f2177a1fcd0cd670/ruff-0.14.13-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e399341472ce15237be0c0ae5fbceca4b04cd9bebab1a2b2c979e015455d8f0c", size = 13929242, upload-time = "2026-01-15T20:15:11.918Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c5/abd840d4132fd51a12f594934af5eba1d5d27298a6f5b5d6c3be45301caf/ruff-0.14.13-py3-none-win32.whl", hash = "sha256:ef720f529aec113968b45dfdb838ac8934e519711da53a0456038a0efecbd680", size = 12919024, upload-time = "2026-01-15T20:14:43.647Z" }, + { url = "https://files.pythonhosted.org/packages/c2/55/6384b0b8ce731b6e2ade2b5449bf07c0e4c31e8a2e68ea65b3bafadcecc5/ruff-0.14.13-py3-none-win_amd64.whl", hash = "sha256:6070bd026e409734b9257e03e3ef18c6e1a216f0435c6751d7a8ec69cb59abef", size = 14097887, upload-time = "2026-01-15T20:15:01.48Z" }, + { url = "https://files.pythonhosted.org/packages/4d/e1/7348090988095e4e39560cfc2f7555b1b2a7357deba19167b600fdf5215d/ruff-0.14.13-py3-none-win_arm64.whl", hash = "sha256:7ab819e14f1ad9fe39f246cfcc435880ef7a9390d81a2b6ac7e01039083dd247", size = 13080224, upload-time = "2026-01-15T20:14:45.853Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, +] + +[[package]] +name = "taskipy" +version = "1.14.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama" }, + { name = "mslex", marker = "sys_platform == 'win32'" }, + { name = "psutil" }, + { name = "tomli", marker = "python_full_version < '4'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/44/572261df3db9c6c3332f8618fafeb07a578fd18b06673c73f000f3586749/taskipy-1.14.1.tar.gz", hash = "sha256:410fbcf89692dfd4b9f39c2b49e1750b0a7b81affd0e2d7ea8c35f9d6a4774ed", size = 14475, upload-time = "2024-11-26T16:37:46.155Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/55/97/4e4cfb1391c81e926bebe3d68d5231b5dbc3bb41c6ba48349e68a881462d/taskipy-1.14.1-py3-none-any.whl", hash = "sha256:6e361520f29a0fd2159848e953599f9c75b1d0b047461e4965069caeb94908f1", size = 13052, upload-time = "2024-11-26T16:37:44.546Z" }, +] + +[[package]] +name = "tomli" +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/30/31573e9457673ab10aa432461bee537ce6cef177667deca369efb79df071/tomli-2.4.0.tar.gz", hash = "sha256:aa89c3f6c277dd275d8e243ad24f3b5e701491a860d5121f2cdd399fbb31fc9c", size = 17477, upload-time = "2026-01-11T11:22:38.165Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/43/7389a1869f2f26dba52404e1ef13b4784b6b37dac93bac53457e3ff24ca3/tomli-2.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:920b1de295e72887bafa3ad9f7a792f811847d57ea6b1215154030cf131f16b1", size = 154894, upload-time = "2026-01-11T11:21:56.07Z" }, + { url = "https://files.pythonhosted.org/packages/e9/05/2f9bf110b5294132b2edf13fe6ca6ae456204f3d749f623307cbb7a946f2/tomli-2.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7d6d9a4aee98fac3eab4952ad1d73aee87359452d1c086b5ceb43ed02ddb16b8", size = 149053, upload-time = "2026-01-11T11:21:57.467Z" }, + { url = "https://files.pythonhosted.org/packages/e8/41/1eda3ca1abc6f6154a8db4d714a4d35c4ad90adc0bcf700657291593fbf3/tomli-2.4.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:36b9d05b51e65b254ea6c2585b59d2c4cb91c8a3d91d0ed0f17591a29aaea54a", size = 243481, upload-time = "2026-01-11T11:21:58.661Z" }, + { url = "https://files.pythonhosted.org/packages/d2/6d/02ff5ab6c8868b41e7d4b987ce2b5f6a51d3335a70aa144edd999e055a01/tomli-2.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1c8a885b370751837c029ef9bc014f27d80840e48bac415f3412e6593bbc18c1", size = 251720, upload-time = "2026-01-11T11:22:00.178Z" }, + { url = "https://files.pythonhosted.org/packages/7b/57/0405c59a909c45d5b6f146107c6d997825aa87568b042042f7a9c0afed34/tomli-2.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8768715ffc41f0008abe25d808c20c3d990f42b6e2e58305d5da280ae7d1fa3b", size = 247014, upload-time = "2026-01-11T11:22:01.238Z" }, + { url = "https://files.pythonhosted.org/packages/2c/0e/2e37568edd944b4165735687cbaf2fe3648129e440c26d02223672ee0630/tomli-2.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b438885858efd5be02a9a133caf5812b8776ee0c969fea02c45e8e3f296ba51", size = 251820, upload-time = "2026-01-11T11:22:02.727Z" }, + { url = "https://files.pythonhosted.org/packages/5a/1c/ee3b707fdac82aeeb92d1a113f803cf6d0f37bdca0849cb489553e1f417a/tomli-2.4.0-cp312-cp312-win32.whl", hash = "sha256:0408e3de5ec77cc7f81960c362543cbbd91ef883e3138e81b729fc3eea5b9729", size = 97712, upload-time = "2026-01-11T11:22:03.777Z" }, + { url = "https://files.pythonhosted.org/packages/69/13/c07a9177d0b3bab7913299b9278845fc6eaaca14a02667c6be0b0a2270c8/tomli-2.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:685306e2cc7da35be4ee914fd34ab801a6acacb061b6a7abca922aaf9ad368da", size = 108296, upload-time = "2026-01-11T11:22:04.86Z" }, + { url = "https://files.pythonhosted.org/packages/18/27/e267a60bbeeee343bcc279bb9e8fbed0cbe224bc7b2a3dc2975f22809a09/tomli-2.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:5aa48d7c2356055feef06a43611fc401a07337d5b006be13a30f6c58f869e3c3", size = 94553, upload-time = "2026-01-11T11:22:05.854Z" }, + { url = "https://files.pythonhosted.org/packages/34/91/7f65f9809f2936e1f4ce6268ae1903074563603b2a2bd969ebbda802744f/tomli-2.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84d081fbc252d1b6a982e1870660e7330fb8f90f676f6e78b052ad4e64714bf0", size = 154915, upload-time = "2026-01-11T11:22:06.703Z" }, + { url = "https://files.pythonhosted.org/packages/20/aa/64dd73a5a849c2e8f216b755599c511badde80e91e9bc2271baa7b2cdbb1/tomli-2.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9a08144fa4cba33db5255f9b74f0b89888622109bd2776148f2597447f92a94e", size = 149038, upload-time = "2026-01-11T11:22:07.56Z" }, + { url = "https://files.pythonhosted.org/packages/9e/8a/6d38870bd3d52c8d1505ce054469a73f73a0fe62c0eaf5dddf61447e32fa/tomli-2.4.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c73add4bb52a206fd0c0723432db123c0c75c280cbd67174dd9d2db228ebb1b4", size = 242245, upload-time = "2026-01-11T11:22:08.344Z" }, + { url = "https://files.pythonhosted.org/packages/59/bb/8002fadefb64ab2669e5b977df3f5e444febea60e717e755b38bb7c41029/tomli-2.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fb2945cbe303b1419e2706e711b7113da57b7db31ee378d08712d678a34e51e", size = 250335, upload-time = "2026-01-11T11:22:09.951Z" }, + { url = "https://files.pythonhosted.org/packages/a5/3d/4cdb6f791682b2ea916af2de96121b3cb1284d7c203d97d92d6003e91c8d/tomli-2.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bbb1b10aa643d973366dc2cb1ad94f99c1726a02343d43cbc011edbfac579e7c", size = 245962, upload-time = "2026-01-11T11:22:11.27Z" }, + { url = "https://files.pythonhosted.org/packages/f2/4a/5f25789f9a460bd858ba9756ff52d0830d825b458e13f754952dd15fb7bb/tomli-2.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4cbcb367d44a1f0c2be408758b43e1ffb5308abe0ea222897d6bfc8e8281ef2f", size = 250396, upload-time = "2026-01-11T11:22:12.325Z" }, + { url = "https://files.pythonhosted.org/packages/aa/2f/b73a36fea58dfa08e8b3a268750e6853a6aac2a349241a905ebd86f3047a/tomli-2.4.0-cp313-cp313-win32.whl", hash = "sha256:7d49c66a7d5e56ac959cb6fc583aff0651094ec071ba9ad43df785abc2320d86", size = 97530, upload-time = "2026-01-11T11:22:13.865Z" }, + { url = "https://files.pythonhosted.org/packages/3b/af/ca18c134b5d75de7e8dc551c5234eaba2e8e951f6b30139599b53de9c187/tomli-2.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:3cf226acb51d8f1c394c1b310e0e0e61fecdd7adcb78d01e294ac297dd2e7f87", size = 108227, upload-time = "2026-01-11T11:22:15.224Z" }, + { url = "https://files.pythonhosted.org/packages/22/c3/b386b832f209fee8073c8138ec50f27b4460db2fdae9ffe022df89a57f9b/tomli-2.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:d20b797a5c1ad80c516e41bc1fb0443ddb5006e9aaa7bda2d71978346aeb9132", size = 94748, upload-time = "2026-01-11T11:22:16.009Z" }, + { url = "https://files.pythonhosted.org/packages/f3/c4/84047a97eb1004418bc10bdbcfebda209fca6338002eba2dc27cc6d13563/tomli-2.4.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:26ab906a1eb794cd4e103691daa23d95c6919cc2fa9160000ac02370cc9dd3f6", size = 154725, upload-time = "2026-01-11T11:22:17.269Z" }, + { url = "https://files.pythonhosted.org/packages/a8/5d/d39038e646060b9d76274078cddf146ced86dc2b9e8bbf737ad5983609a0/tomli-2.4.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:20cedb4ee43278bc4f2fee6cb50daec836959aadaf948db5172e776dd3d993fc", size = 148901, upload-time = "2026-01-11T11:22:18.287Z" }, + { url = "https://files.pythonhosted.org/packages/73/e5/383be1724cb30f4ce44983d249645684a48c435e1cd4f8b5cded8a816d3c/tomli-2.4.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:39b0b5d1b6dd03684b3fb276407ebed7090bbec989fa55838c98560c01113b66", size = 243375, upload-time = "2026-01-11T11:22:19.154Z" }, + { url = "https://files.pythonhosted.org/packages/31/f0/bea80c17971c8d16d3cc109dc3585b0f2ce1036b5f4a8a183789023574f2/tomli-2.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a26d7ff68dfdb9f87a016ecfd1e1c2bacbe3108f4e0f8bcd2228ef9a766c787d", size = 250639, upload-time = "2026-01-11T11:22:20.168Z" }, + { url = "https://files.pythonhosted.org/packages/2c/8f/2853c36abbb7608e3f945d8a74e32ed3a74ee3a1f468f1ffc7d1cb3abba6/tomli-2.4.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:20ffd184fb1df76a66e34bd1b36b4a4641bd2b82954befa32fe8163e79f1a702", size = 246897, upload-time = "2026-01-11T11:22:21.544Z" }, + { url = "https://files.pythonhosted.org/packages/49/f0/6c05e3196ed5337b9fe7ea003e95fd3819a840b7a0f2bf5a408ef1dad8ed/tomli-2.4.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:75c2f8bbddf170e8effc98f5e9084a8751f8174ea6ccf4fca5398436e0320bc8", size = 254697, upload-time = "2026-01-11T11:22:23.058Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f5/2922ef29c9f2951883525def7429967fc4d8208494e5ab524234f06b688b/tomli-2.4.0-cp314-cp314-win32.whl", hash = "sha256:31d556d079d72db7c584c0627ff3a24c5d3fb4f730221d3444f3efb1b2514776", size = 98567, upload-time = "2026-01-11T11:22:24.033Z" }, + { url = "https://files.pythonhosted.org/packages/7b/31/22b52e2e06dd2a5fdbc3ee73226d763b184ff21fc24e20316a44ccc4d96b/tomli-2.4.0-cp314-cp314-win_amd64.whl", hash = "sha256:43e685b9b2341681907759cf3a04e14d7104b3580f808cfde1dfdb60ada85475", size = 108556, upload-time = "2026-01-11T11:22:25.378Z" }, + { url = "https://files.pythonhosted.org/packages/48/3d/5058dff3255a3d01b705413f64f4306a141a8fd7a251e5a495e3f192a998/tomli-2.4.0-cp314-cp314-win_arm64.whl", hash = "sha256:3d895d56bd3f82ddd6faaff993c275efc2ff38e52322ea264122d72729dca2b2", size = 96014, upload-time = "2026-01-11T11:22:26.138Z" }, + { url = "https://files.pythonhosted.org/packages/b8/4e/75dab8586e268424202d3a1997ef6014919c941b50642a1682df43204c22/tomli-2.4.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:5b5807f3999fb66776dbce568cc9a828544244a8eb84b84b9bafc080c99597b9", size = 163339, upload-time = "2026-01-11T11:22:27.143Z" }, + { url = "https://files.pythonhosted.org/packages/06/e3/b904d9ab1016829a776d97f163f183a48be6a4deb87304d1e0116a349519/tomli-2.4.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c084ad935abe686bd9c898e62a02a19abfc9760b5a79bc29644463eaf2840cb0", size = 159490, upload-time = "2026-01-11T11:22:28.399Z" }, + { url = "https://files.pythonhosted.org/packages/e3/5a/fc3622c8b1ad823e8ea98a35e3c632ee316d48f66f80f9708ceb4f2a0322/tomli-2.4.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f2e3955efea4d1cfbcb87bc321e00dc08d2bcb737fd1d5e398af111d86db5df", size = 269398, upload-time = "2026-01-11T11:22:29.345Z" }, + { url = "https://files.pythonhosted.org/packages/fd/33/62bd6152c8bdd4c305ad9faca48f51d3acb2df1f8791b1477d46ff86e7f8/tomli-2.4.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e0fe8a0b8312acf3a88077a0802565cb09ee34107813bba1c7cd591fa6cfc8d", size = 276515, upload-time = "2026-01-11T11:22:30.327Z" }, + { url = "https://files.pythonhosted.org/packages/4b/ff/ae53619499f5235ee4211e62a8d7982ba9e439a0fb4f2f351a93d67c1dd2/tomli-2.4.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:413540dce94673591859c4c6f794dfeaa845e98bf35d72ed59636f869ef9f86f", size = 273806, upload-time = "2026-01-11T11:22:32.56Z" }, + { url = "https://files.pythonhosted.org/packages/47/71/cbca7787fa68d4d0a9f7072821980b39fbb1b6faeb5f5cf02f4a5559fa28/tomli-2.4.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0dc56fef0e2c1c470aeac5b6ca8cc7b640bb93e92d9803ddaf9ea03e198f5b0b", size = 281340, upload-time = "2026-01-11T11:22:33.505Z" }, + { url = "https://files.pythonhosted.org/packages/f5/00/d595c120963ad42474cf6ee7771ad0d0e8a49d0f01e29576ee9195d9ecdf/tomli-2.4.0-cp314-cp314t-win32.whl", hash = "sha256:d878f2a6707cc9d53a1be1414bbb419e629c3d6e67f69230217bb663e76b5087", size = 108106, upload-time = "2026-01-11T11:22:34.451Z" }, + { url = "https://files.pythonhosted.org/packages/de/69/9aa0c6a505c2f80e519b43764f8b4ba93b5a0bbd2d9a9de6e2b24271b9a5/tomli-2.4.0-cp314-cp314t-win_amd64.whl", hash = "sha256:2add28aacc7425117ff6364fe9e06a183bb0251b03f986df0e78e974047571fd", size = 120504, upload-time = "2026-01-11T11:22:35.764Z" }, + { url = "https://files.pythonhosted.org/packages/b3/9f/f1668c281c58cfae01482f7114a4b88d345e4c140386241a1a24dcc9e7bc/tomli-2.4.0-cp314-cp314t-win_arm64.whl", hash = "sha256:2b1e3b80e1d5e52e40e9b924ec43d81570f0e7d09d11081b797bc4692765a3d4", size = 99561, upload-time = "2026-01-11T11:22:36.624Z" }, + { url = "https://files.pythonhosted.org/packages/23/d1/136eb2cb77520a31e1f64cbae9d33ec6df0d78bdf4160398e86eec8a8754/tomli-2.4.0-py3-none-any.whl", hash = "sha256:1f776e7d669ebceb01dee46484485f43a4048746235e683bcdffacdf1fb4785a", size = 14477, upload-time = "2026-01-11T11:22:37.446Z" }, +] + +[[package]] +name = "toposort" +version = "1.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/69/19/8e955d90985ecbd3b9adb2a759753a6840da2dff3c569d412b2c9217678b/toposort-1.10.tar.gz", hash = "sha256:bfbb479c53d0a696ea7402601f4e693c97b0367837c8898bc6471adfca37a6bd", size = 11132, upload-time = "2023-02-27T13:59:51.834Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/17/57b444fd314d5e1593350b9a31d000e7411ba8e17ce12dc7ad54ca76b810/toposort-1.10-py3-none-any.whl", hash = "sha256:cbdbc0d0bee4d2695ab2ceec97fe0679e9c10eab4b2a87a9372b929e70563a87", size = 8500, upload-time = "2023-02-25T20:07:06.538Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, +] + +[[package]] +name = "urllib3" +version = "2.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" }, +] + +[[package]] +name = "xsdata" +version = "26.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/24/9f/c1b0fa54f2b3f43989015668daddd8bd50d3bf3461ba8b79fdeb8000b27d/xsdata-26.1.tar.gz", hash = "sha256:dcae2c0e5f329f1b4e09a2d148c96941c9556616bb5e3418970a63c5eb2cd831", size = 348523, upload-time = "2026-01-19T19:03:54.347Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/48/37775c15adba3070f0af934a6617696a608a75f2e01be37a454e298cf32c/xsdata-26.1-py3-none-any.whl", hash = "sha256:aa02adf1b75668e7b685f4de3c4507e4aa31af3f2e2210fd45aa2f0e4a637a99", size = 235422, upload-time = "2026-01-19T19:03:52.684Z" }, +] + +[package.optional-dependencies] +cli = [ + { name = "click" }, + { name = "jinja2" }, + { name = "ruff" }, + { name = "toposort" }, +] + +[[package]] +name = "xsdata-pydantic" +version = "24.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "xsdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/85/5e/6bc728d70460d9ad3982d05c3765179e3584fee6fa523d57b242e6e4c50f/xsdata_pydantic-24.5.tar.gz", hash = "sha256:e3c8758133195657ece578537eda6c7ebd8419f77abf6b90fd4ced96e348129b", size = 18763, upload-time = "2024-05-08T17:49:48.28Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/7b/785fe71aa1138d7380ab3926cbb9571896d56544901c320953ff8a586926/xsdata_pydantic-24.5-py3-none-any.whl", hash = "sha256:bb6da7d3445d655640096c65c1b11037153b19df533da89553f24247ef352cd0", size = 8891, upload-time = "2024-05-08T17:49:46.408Z" }, +] + +[package.optional-dependencies] +cli = [ + { name = "xsdata", extra = ["cli"] }, +] +lxml = [ + { name = "lxml" }, +] diff --git a/es_elt/xsd/_jaxb.java.bindings.xsd b/es_elt/xsd/_jaxb.java.bindings.xsd new file mode 100644 index 0000000..1220135 --- /dev/null +++ b/es_elt/xsd/_jaxb.java.bindings.xsd @@ -0,0 +1,19 @@ + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/acm/UserGroup.xsd b/es_elt/xsd/auditData/acm/UserGroup.xsd new file mode 100644 index 0000000..ff488ad --- /dev/null +++ b/es_elt/xsd/auditData/acm/UserGroup.xsd @@ -0,0 +1,77 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + acm_user_group_audit: At userGroup creation, update or delete + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/acm/UserLogin.xsd b/es_elt/xsd/auditData/acm/UserLogin.xsd new file mode 100644 index 0000000..8b17d0e --- /dev/null +++ b/es_elt/xsd/auditData/acm/UserLogin.xsd @@ -0,0 +1,85 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + mam_medias_post: At userGroup creation or update + + + + + + + + + + List of userGroups associated to user + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/alm/ActionList.xsd b/es_elt/xsd/auditData/alm/ActionList.xsd new file mode 100644 index 0000000..4f5d32b --- /dev/null +++ b/es_elt/xsd/auditData/alm/ActionList.xsd @@ -0,0 +1,101 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + alm_actions_post: Creation of an action + alm_action_post: Update, completion or cancellation of an action + + + + + + Dictionary prefix: ActionEntryStatus + + + + + Dictionary prefix: ActionEntryType + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/bpm/ConfigurationParameters.xsd b/es_elt/xsd/auditData/bpm/ConfigurationParameters.xsd new file mode 100644 index 0000000..2d817b0 --- /dev/null +++ b/es_elt/xsd/auditData/bpm/ConfigurationParameters.xsd @@ -0,0 +1,72 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + bpm_raw_param_post: At configuration parameters import + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/bpm/TicketingConfItemCreation.xsd b/es_elt/xsd/auditData/bpm/TicketingConfItemCreation.xsd new file mode 100644 index 0000000..5190b49 --- /dev/null +++ b/es_elt/xsd/auditData/bpm/TicketingConfItemCreation.xsd @@ -0,0 +1,74 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + bpm_ticketing_configurationItem_post: Creation of a ticketing item (fare, time, topo, dico or clearing) + + + + bpm_ticketing_configurationItem_post: At business parameters configuration item creation + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/bpm/TicketingSetCreation.xsd b/es_elt/xsd/auditData/bpm/TicketingSetCreation.xsd new file mode 100644 index 0000000..030ddbe --- /dev/null +++ b/es_elt/xsd/auditData/bpm/TicketingSetCreation.xsd @@ -0,0 +1,113 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 30/08/2023 - Version 1.1.0 + + Add ticketing set status and update date + Make ActivationDateTime optional since only deployed set have one + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + bpm_ticketing_set_approve_post: On approval of ticketing set by an operator + bpm_ticketing_set_reject_post: On rejection of ticketing set by an operator + bpm_ticketing_set_deploy_post: On deployment of ticketing set by an operator + bpm_ticketing_set_post: Creation of a ticketing set + + + + + + + + + + + + List of configuration items contained in the set + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/bpm/TicketingSetPublish.xsd b/es_elt/xsd/auditData/bpm/TicketingSetPublish.xsd new file mode 100644 index 0000000..e54749a --- /dev/null +++ b/es_elt/xsd/auditData/bpm/TicketingSetPublish.xsd @@ -0,0 +1,72 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + bpm_ticketing_set_publication: Publishing of the set to the other components + + + + bpm_ticketing_set_publication: At ticketing set publication + + + + + + + + + diff --git a/es_elt/xsd/auditData/clm/CustomerClaim.xsd b/es_elt/xsd/auditData/clm/CustomerClaim.xsd new file mode 100644 index 0000000..8bb2cd1 --- /dev/null +++ b/es_elt/xsd/auditData/clm/CustomerClaim.xsd @@ -0,0 +1,135 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + clm_customer_claims_post: At claims creation or update + + + + + Whenever an operator answered a customer but shall later come back to him. + + + + + Claim author id + + + + + Claim author type (operator, customer, ...). + + + + + + Dictionary prefix: CustomerClaimType + + + + + Customer account identifier. May be null (DEVICE_DYSFUNCTION case). + + + + + Duration since previous event sent + + + + + The date AFTER which the claim may be processed. + + + + + Dictionary prefix: CustomerClaimStatus + + + + + Last message exchange during the conversation. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/clr/ApportionmentUsingCappingRatioPluginDetails.xsd b/es_elt/xsd/auditData/clr/ApportionmentUsingCappingRatioPluginDetails.xsd new file mode 100644 index 0000000..7800d8f --- /dev/null +++ b/es_elt/xsd/auditData/clr/ApportionmentUsingCappingRatioPluginDetails.xsd @@ -0,0 +1,163 @@ + + + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 22/11/2021 - Version 1.0.0 + + Create the audit message + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 29/11/2024 - Version 1.1.0 + + Add dailyMediaConsumptionId in the ApportionmentUsingCappingRatioPluginDetailsAuditExchange + + + + sprint 218 - 24/07/2025 - Version 1.1.1 + + Change the RoleType from LocalizedBusinessEntityRoleType to LocalizedBusinessRole + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + Details of apportionment using capping ratio plugin for a contractId. + + + + + + The ordering sequence number of this contract's apportionment. + + + + + + + + + + + + Apportionment per leg + + + + + + + + + + + + + + + + + + + Details of apportionment for a leg. + + + + + + Output from apportionment + + + + + + + + + + + + + Details of apportionment for a leg. + + + + + The stakeholder involved in the apportionment + + + + + Retailer, Card Owner, Product Owner, Transporter... + + + + + The account to where the money is credited/debited. + + + + + amount (positive or negative) allocated to the Clearing Participant + + + + + amount (positive or negative) allocated to the Clearing Participant if the apportionment were performed without capping + + + + + diff --git a/es_elt/xsd/auditData/clr/ClearingOperation.xsd b/es_elt/xsd/auditData/clr/ClearingOperation.xsd new file mode 100644 index 0000000..97213da --- /dev/null +++ b/es_elt/xsd/auditData/clr/ClearingOperation.xsd @@ -0,0 +1,99 @@ + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 01/07/2024 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 09/09/2025 - Version 1.0.1 + + Move FeeData to a common xsd (ClearingItemType) + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + Contains information about received transaction (TransactionId, contractId and FeeContractId). + + + + clr:clearing.operation.get: At transaction reception. + + + + + The transaction id (in case of BOMessage/DeviceMessage) + + + + + + The contract Id. + + + + + Fees information + + + + + + + + + + diff --git a/es_elt/xsd/auditData/clr/ContractApportionment.xsd b/es_elt/xsd/auditData/clr/ContractApportionment.xsd new file mode 100644 index 0000000..5425bd5 --- /dev/null +++ b/es_elt/xsd/auditData/clr/ContractApportionment.xsd @@ -0,0 +1,265 @@ + + + + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.1.0 + + - Add the contract rule details + - Remove the ContractApportionmentId (the ContractApportionment is at the contract level so ContractApportionmentId did not have any sense) + - Add ClearingVersion + - Remove the rule name at contract level + - Remove the payerRoleType in Apportionment/Settlement at contract level + - Remove the compensation in Settlement at contract level + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 11/07/2022 - Version 1.2.0 + + - Add ContractSerialNumber + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 17/10/2022 - Version 1.2.1 + + - Add BestEffort in ContractApportionmentAuditExchange + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 03/11/2022 - Version 1.3.0 + + - Rename ApportionedRevenue to AmountToApportion + - see ClearingItemType.xsd file version 1.1.0 + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 03/11/2023 - Version 1.3.1 + + - Add capping product code et journey definition product code to identify the capping/journey definition used in the apportionment. + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 23/04/2024 - Version 1.3.2 + + - Add DailyMediaConsumptions with dailyMediaConsumptionId and legIds. + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + Apportionment of a fraction of contract from a payer to a payee's account during a settlement period. + + + + clr_apportionment_get: At apportionment creation + Apportionment of a fraction of contract from a payer to a payee's account during a settlement period. + + + + + + Sorted rule details + + + + + + + + + + + The total revenue to be apportioned among all the stakeholder + + + + + The contract as an instance of a product, possibly on a media. + + + + + The contract serial number: serial number of the Contract Id. + + + + + The unique identifier of the related event. + + + + + The media holding the contract + + + + + The type of product of the contract instance if it is a non transit product. + Dictionary prefix: NonTransitProductCode + + + + + + The version of the clearing parameters. + + + + + The type of product of the contract instance if it is a transit product. + Dictionary prefix: ProductCode + + + + + The type of product of the contract instance if it is a supplement product. + Dictionary prefix: SupplementProductCode + + + + + The type of capping of the contract instance if it is a capping instance. + Dictionary prefix: CappingRule + + + + + The type of journey definition of the contract instance if it is a journey instance. + Dictionary prefix: JourneyDefinition + + + + + + In case of an apportionment of an amount lower than the revenue: + If true, will perform the apportionment the best way possible. + If false, will do nothing for the apportionment. + + + + + + The ordering sequence number of this contract's apportionment. + + + + + + + DailyMediaConsumptions + + + + + + + + + + + + + + + Id of the daily media consumption that was involved in this payment request + + + + + Legs + + + + + + + + + + + + + + + Unique identifier for a leg. + Between multiple reconstructions, the legId will be kept constant if the leg did not change + + + + + + diff --git a/es_elt/xsd/auditData/clr/FeeContract.xsd b/es_elt/xsd/auditData/clr/FeeContract.xsd new file mode 100644 index 0000000..6139e06 --- /dev/null +++ b/es_elt/xsd/auditData/clr/FeeContract.xsd @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 24/10/2024 - Version 1.0.1 + + Add ChargingModel, ChargingPeriod, TotalNumber, TotalAmount, FeeRuleId + Remove AmountToApportion + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + Allocation of a fee based on a contract from a payer to a payee's account. + + + + clr:fee.contract.get: At fee distribution + Distribution of a fee based on a contract from a payer to a payee's account. + + + + + Output from fee distribution + + + + + + + + + + + Individual money transfer. The current settlements already take into account what has been done in previous settlement periods. + For instance, if in period n-1, we needed to give A->B 10, and in current period n we realize that we needed to give A->B 3, + the current audit will only contain a contractSettlement B->A 7 to compensate. + + + + + + + + + + + The contract as an instance of a fee. + + + + + + + The unique identifier of the related event. + + + + + The charging model of the fee contract (per event, per volume, per total value). + + + + + The charging period of the fee contract (Daily, Weekly, Monthly). + + + + + + + The version of the clearing parameters. + + + + + + + + The ordering sequence number of this contract. + + + + + + + + Results of fee calculation + + + + + The stakeholder involved in the fee + + + + + The account to where the money is credited/debited. + + + + + amount (positive or negative) allocated to the Clearing Participant + + + + + + + + Individual money movement resulting from the fee items + + + + + The stakeholder who will be debited money + + + + + The stakeholder who will be credited money + + + + + amount (POSITIVE) to transfer between PAYER and PAYEE + + + + + diff --git a/es_elt/xsd/auditData/clr/FixedOriginDestinationApportionmentDetails.xsd b/es_elt/xsd/auditData/clr/FixedOriginDestinationApportionmentDetails.xsd new file mode 100644 index 0000000..81ab7b1 --- /dev/null +++ b/es_elt/xsd/auditData/clr/FixedOriginDestinationApportionmentDetails.xsd @@ -0,0 +1,124 @@ + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 22/11/2021 - Version 1.0.0 + + Create the audit message + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Sprint 186 - 22/08/2023 - Version 1.0.1 + + Added leg rule details + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + clr_apportionment_fixed_od_details: Created each time we receive a new event + Details of fixed origin destination apportionment for a contractId. + + + + + + Apportionment per leg + + + + + + + + + + The ordering sequence number of this contract's apportionment. + + + + + + + + Details of apportionment for a leg. + + + + + + Output from apportionment + + + + + + + + + + Details of rule calculation, when several parts are engaged for apportionment's calculation + + + + + + + + + + diff --git a/es_elt/xsd/auditData/clr/FixedOriginDestinationApportionmentErrors.xsd b/es_elt/xsd/auditData/clr/FixedOriginDestinationApportionmentErrors.xsd new file mode 100644 index 0000000..2dbf0c8 --- /dev/null +++ b/es_elt/xsd/auditData/clr/FixedOriginDestinationApportionmentErrors.xsd @@ -0,0 +1,111 @@ + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.1 + + Add new ErrorType: TRANSFER_DISCOUNT_GREATER_THAN_ALLOCATED + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + Apportionment error raised during an apportionment plugin execution. + + + + clr_contract_settlement_get: Apportionment error raised during an apportionment plugin execution. + + + + + + The type of product of the contract instance if it is a transit product. + Dictionary prefix: ProductCode + + + + + The matrix applied for this apportionment. + + + + + + + The total amount (the price of the leg). + + + + + The total revenue to be apportioned among all the stakeholder (this apportionment is a fraction of it) + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/clr/ManualSettlementItemAudit.xsd b/es_elt/xsd/auditData/clr/ManualSettlementItemAudit.xsd new file mode 100644 index 0000000..b8cedb4 --- /dev/null +++ b/es_elt/xsd/auditData/clr/ManualSettlementItemAudit.xsd @@ -0,0 +1,161 @@ + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 24/01/2023 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + clr_manual_settlement_item_post: At manual settlement item creation + clr_manual_settlement_item_put: At manual settlement item update + clr_manual_settlement_item_delete: At manual settlement item delete + + + + + Manual settlement item Id + + + + + The stakeholder who will be debited money + + + + + Retailer, Card Owner, Product Owner, Transporter... + + + + + The account from which the money will be debited. + + + + + The stakeholder who will be credited money + + + + + Retailer, Card Owner, Product Owner, Transporter... + + + + + The account to where the money will be credited. + + + + + The amount of the transfer. + + + + + Date of last change of the settlement item. + + + + + Date of creation of the settlement item. + + + + + Date of creation or update of the settlement item. + + + + + Application date of the settlement item. + + + + + The unique identifier of the user who created ou updated Settlement Item. + + + + + The settlement period id. + + + + + The type of the rule + + + + + The reason of created or modification manual settlement item + + + + + The ordering sequence number of this settlement period. + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/clr/MediaConsumptionsApportionment.xsd b/es_elt/xsd/auditData/clr/MediaConsumptionsApportionment.xsd new file mode 100644 index 0000000..a873580 --- /dev/null +++ b/es_elt/xsd/auditData/clr/MediaConsumptionsApportionment.xsd @@ -0,0 +1,177 @@ + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 23/11/2021 - Version 1.0.0 + + Create MediaConsumptionsApportionment + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 28/11/2022 - Version 1.0.1 + + - add errorCodes to legs + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 11/07/2024 - Version 1.1.0 + + - add journeyId to journey + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 09/09/2025 - Version 1.1.1 + + - add fee contract ids to daily media consumption + + + + + + + + + + + + + + + + + + + + + + + + + + clr_str_media_consumptions_apportionment: After reception of a new journey reconstruction and rating + + + + + Media consumptions + + + + + + + + + + + + + + + Journeys + + + + + + + + + + Fees information + + + + + + + + + + + + + + + Unique identifier for a journey. + Between multiple reconstructions, the journeyId will be kept constant if the journey did not change + + + + + + Legs + + + + + + + + + + + + + + + Unique identifier for a leg. + Between multiple reconstructions, the legId will be kept constant if the leg did not change + + + + + + + This leg is taken into account in this contract. If empty, it means this leg is not taken into account for apportionment purpose + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/clr/SettlementPeriod.xsd b/es_elt/xsd/auditData/clr/SettlementPeriod.xsd new file mode 100644 index 0000000..a8fbcf1 --- /dev/null +++ b/es_elt/xsd/auditData/clr/SettlementPeriod.xsd @@ -0,0 +1,225 @@ + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 15/02/2023 - Version 1.1.0 + + - Add productApportionment (used for contracts apportionment) + - Add manualSettlements (used for apportionment of manual settlements) + - Change apportionment list to contain a synthesis of ( productApportionment + manualSettlements) + + + + 26/06/2024 - Version 1.1.1 + + - Add feeSettlements + + + + + + + + + + + + + + + + + + + + + + + + + + clr_settlement_get: At settlement period creation or update + Apportionments for a settlement period + + + + + Date of computation of the apportionments of the settlement period. + + + + + Closing date of the settlement period. + + + + + Creation date of the settlement period. + + + + + The unique identifier of the related event. + + + + + The settlement period preceding the current one. + + + + + Reference date of the settlement period (used for TFN). Used for displaying/grouping by week to overload creationDate + + + + + + The ordering sequence number of this settlement period. + + + + + The settlement period. + + + + + The signature of this settlement period. + + + + + Apportionment between stakeholders during the settlement period. + + + + + Apportionment between stakeholders during the settlement period. + + + + + Apportionment between stakeholders during the settlement period. + + + + + Fee distribution between stakeholders during the settlement period. + + + + + The balances of operations for each stakeholder during the settlement period. + + + + + + + + + + + + + + + + + + + + + + + + + + + Apportionment from a payer to a payee's account during a settlement period. + + + + + The amount of the transfer. + + + + + The account to where the money will be credited. + + + + + The stakeholder who will be credited money + + + + + The account from which the money will be debited. + + + + + The stakeholder who will be debited money + + + + + + + Total value per stakeholder for a given apportionment (i.e. set of daily media journeys reconstructions) + + + + + + + Aka business entity id + + + + + + + + + + diff --git a/es_elt/xsd/auditData/clr/TransactionApportionment.xsd b/es_elt/xsd/auditData/clr/TransactionApportionment.xsd new file mode 100644 index 0000000..932dad2 --- /dev/null +++ b/es_elt/xsd/auditData/clr/TransactionApportionment.xsd @@ -0,0 +1,164 @@ + + + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 22/08/2024 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + Apportionment of a transaction. + + + + clr_transaction_apportionment_get: At apportionment creation + Apportionment of an independent transaction (stored value debit, stored value credit, ...). + + + + + + + Sorted rule details + + + + + + + + + + + The total revenue to be apportioned among all the stakeholder + + + + + The contract as an instance of a product, possibly on a media. + + + + + The media holding the contract + + + + + + The version of the clearing parameters. + + + + + + In case of an apportionment of an amount lower than the revenue: + If true, will perform the apportionment the best way possible. + If false, will do nothing for the apportionment. + + + + + + The ordering sequence number of this contract's apportionment. + + + + + + + + + Results of apportionment calculation + + + + + The name of the rule + + + + + The apportionment result for this rule. If the + + + + + + + + + + Individual money transfer + + + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/cmm/Customer.xsd b/es_elt/xsd/auditData/cmm/Customer.xsd new file mode 100644 index 0000000..e4dbf45 --- /dev/null +++ b/es_elt/xsd/auditData/cmm/Customer.xsd @@ -0,0 +1,248 @@ + + + + + + + + + + ---------------------------------------------------------------------------------------------------------------- + + + Version List + + + ---------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ---------------------------------------------------------------------------------------------------------------- + + + 13/03/2022 - Version 1.0.1 + + 1st part: Add the customer status + + + + + 10/10/2022 - Version 1.0.2 + + Add the customer preference notification channel configuration. + Add date time, realm (to identify the origin), the customer id or the agent login. + + + + + 23/11/2022 - Version 1.0.3 + + Add customer audit profiles (explicit and implicit). + Add profileId, startDate, expiryDate to profile. + + + + + + + + + + + + + + + + + + + + + + + + + + cmm_customers_post: At customer creation + cmm_customer_put: At customer update + cmm_customer_delete: At customer delete + cmm_customer_status_post: At customer block it's account + cmm_customer_medias_post: At media attachment to a customer + cmm_customer_media_delete: At media detachment from a customer + cmm_customer_profile_post: At profile attached to customer + + + + + Birth date of the customer + + + + + City associated to post code + + + + + Country name + + + + + + + Type of customer : individual or organization + Dictionary prefix: CustomerType + + + + + Nationality (country ISO code) + + + + + Address post code + + + + + State (only USA) + + + + + Title of the customer. Mr, Mrs, Miss + + + + + Monotonic version of the data + + + + + Media attached to customer + + + + + + + + + + Customer Account Status + + + + + + + + Audit Notification + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Customer Profiles + + + + + + + + + To get profile name, please reference to system parameters + + + + + Start date of the profile + + + + + Expiry date of the profile + + + + + Last update date of the profile + + + + + + + + + + + + + + + + + + + + + + + + + + Customer Status enumeration + + + + + + + + + + diff --git a/es_elt/xsd/auditData/cmm/CustomerProfile.xsd b/es_elt/xsd/auditData/cmm/CustomerProfile.xsd new file mode 100644 index 0000000..14780b5 --- /dev/null +++ b/es_elt/xsd/auditData/cmm/CustomerProfile.xsd @@ -0,0 +1,125 @@ + + + + + + + + + + ---------------------------------------------------------------------------------------------------------------- + + + Version List + + + ---------------------------------------------------------------------------------------------------------------- + + + 09/03/2023 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ---------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + cmm_customers_profile_add: At customer profile creation + cmm_customers_profile_edit: At customer profile update + cmm_customers_profile_validation: At customer profile validation + cmm_customers_profile_remove: At customer profile delete + cmm_customers_profile_all_remove: At customer profile delete all + + + + + + + + + Customer Explicit Profile + + + + + + + + + + Customer Implicit Profile + + + + + + + + + + + + + + + + + + + + + + + + + Customer profile status enumeration + + + + + + + + + + + Customer profile type + + + + + + + diff --git a/es_elt/xsd/auditData/cmm/PaymentMeans.xsd b/es_elt/xsd/auditData/cmm/PaymentMeans.xsd new file mode 100644 index 0000000..2bae6cb --- /dev/null +++ b/es_elt/xsd/auditData/cmm/PaymentMeans.xsd @@ -0,0 +1,74 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + cmm_customer_paymentAgreements_post: At payment agreement creation + cmm_customer_paymentAgreement_delete: At payment agreement deletion + Used to export payment means of a customer for analytics. + + + + + + + Monotonic version of the data + + + + + diff --git a/es_elt/xsd/auditData/daq/InvalidDeviceTransaction.xsd b/es_elt/xsd/auditData/daq/InvalidDeviceTransaction.xsd new file mode 100644 index 0000000..4de29cc --- /dev/null +++ b/es_elt/xsd/auditData/daq/InvalidDeviceTransaction.xsd @@ -0,0 +1,95 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + daq_invalid_device_transaction: Represent an exception that happened while a device post a message to DAQ, but its validation failed. + + + + + + + Date and time of transaction's generation + + + + + Sequence number allocated to the transaction by the device (unique by deviceId) + + + + + Device technical identifier + + + + + Unique identifier allocated to the transaction by the device (unique by deviceId). + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/daq/InvalidMessageBatch.xsd b/es_elt/xsd/auditData/daq/InvalidMessageBatch.xsd new file mode 100644 index 0000000..a1112ad --- /dev/null +++ b/es_elt/xsd/auditData/daq/InvalidMessageBatch.xsd @@ -0,0 +1,70 @@ + + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + daq_invalid_message_batch: At reception of an invalid message batch + + + + + + + diff --git a/es_elt/xsd/auditData/daq/TransactionExtendedData.xsd b/es_elt/xsd/auditData/daq/TransactionExtendedData.xsd new file mode 100644 index 0000000..3d8c2c6 --- /dev/null +++ b/es_elt/xsd/auditData/daq/TransactionExtendedData.xsd @@ -0,0 +1,174 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 03/08/2023 - Version 1.1.0 + + Replace EmvTagType enum value OUT_OF_SCOPE by the value OTHER + Note that UNDEFINED is kept for compatibility purpose and should not be used anymore at this point + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/03/2022 - Version 2.0.0 + + Audit is now used by bo messages. This change leads to one breaking change : + - TransactionId property is now mandatory and should be set by the bo in all cases + Other changes: + - BoTransactionUID added + - DeviceId is no more mandatory because some BoMessages are not sent by device + + + + + + + + + + + + + + + + + + + + + + + + + + daq_transaction_extended_data: At media creation + + + + + + + + Issuer Country Code in accordance with ISO 3166 (num-3) + + + + + Transaction Currency Code (from EMV tag 5F2A) according to ISO 4217 + + + + + TODO + + + + + Issuer's name + + + + + Card's sub-type + + + + + Mnemonic according to EMV tag 50 + + + + + Validity end date of the travel event to be processed + + + + + + Transaction unique identifier. All duplicates transactions got the same value. + This field can be used either by device message batches or bo message batches. + It is set by DAQ after transaction hash calculation. + + + + + + + ID set on transactions by Transcity system used for hash calculation. + It allows to identify duplicate bo messages. + + + + + + Unique identifier allocated to the transaction by the device (unique by deviceId) + + + + + Date and time of transaction's generation + + + + + Sequence number allocated to the transaction by the device (unique by deviceId) + + + + + Device technical identifier + + + + + + Type of media used + + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/daq/ValidatorErrors.xsd b/es_elt/xsd/auditData/daq/ValidatorErrors.xsd new file mode 100644 index 0000000..f405d33 --- /dev/null +++ b/es_elt/xsd/auditData/daq/ValidatorErrors.xsd @@ -0,0 +1,78 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + daq_validations_errors_description: Represent an exception that happened while a device post a message to DAQ, but its validation failed. + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/dem/Device.xsd b/es_elt/xsd/auditData/dem/Device.xsd new file mode 100644 index 0000000..1d2e34a --- /dev/null +++ b/es_elt/xsd/auditData/dem/Device.xsd @@ -0,0 +1,177 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + dem_devices_post: At device creation + dem_device_post: At device update + dem_device_configuration_upload_post: At device configuration upload + Used to export payment means of a customer for analytics. + + + + + Dictionary prefix: BusinessEntity + + + + + Device technical identifier + + + + + Device number + + + + + Dictionary prefix: DeviceStatus + + + + + Dictionary prefix: DeviceType + + + + + Duration since discrepancyStatus has changed from/to value = NO_DISCREPANCY + + + + + Dictionary prefix: FarePointId + + + + + Is device mobile or fixed + + + + + Is device offline + + + + + Id of the stock entity to which the device is attached (can be empty) + + + + + List of SAM associated to device + + + + + + + + + + List of tags associated to device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/dem/DeviceConfItemsVersionUpdate.xsd b/es_elt/xsd/auditData/dem/DeviceConfItemsVersionUpdate.xsd new file mode 100644 index 0000000..6573f67 --- /dev/null +++ b/es_elt/xsd/auditData/dem/DeviceConfItemsVersionUpdate.xsd @@ -0,0 +1,85 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + dem_conf_items_version_update: At device configuration items update + + + + + + + Dictionary prefix: FarePointId + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/dlm/DenyAction.xsd b/es_elt/xsd/auditData/dlm/DenyAction.xsd new file mode 100644 index 0000000..795d480 --- /dev/null +++ b/es_elt/xsd/auditData/dlm/DenyAction.xsd @@ -0,0 +1,150 @@ + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 27/04/2022 - Version 1.0.1 + + 1st part: Add deny action list for Media instead of single deny action + + + + 29/08/2022 - Version 1.0.2 + + Add paymentId to audit file that transited from RPE + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + dlm_denyActions_post: At deny action creation + dlm_denyAction_post: At deny action update + + + + + + If true, this deny action is still active (for at least a contract or the media + + + + + + + + + List of deny action for the Media. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/dlm/IssuerDeny.xsd b/es_elt/xsd/auditData/dlm/IssuerDeny.xsd new file mode 100644 index 0000000..3fbcd22 --- /dev/null +++ b/es_elt/xsd/auditData/dlm/IssuerDeny.xsd @@ -0,0 +1,77 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + dlm_issuerDenyEntries_post: At issuer deny action creation + dlm_issuerDenyEntry_status_post: On update of issuer deny action + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/mam/AbtPurse.xsd b/es_elt/xsd/auditData/mam/AbtPurse.xsd new file mode 100644 index 0000000..a1926be --- /dev/null +++ b/es_elt/xsd/auditData/mam/AbtPurse.xsd @@ -0,0 +1,145 @@ + + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 23/06/2025 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + When abt purse is created, reloaded, used to travel or to purchase , when autoReload activated deactivated or reactivated ... + + + + + + In case of centralized purse usage, this is the id of the purse that is used. + + + + + + + + + + + + + The owner of the purse + + + + + + + Id of the user + + + + + The ordering sequence number of this settlement period. + + + + + + The stakeholder who will be debited money + + + + + The sequence of operation on purse incremented for each operation + + + + + Reason of the adjustment + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/mam/BulkAdjustmentExecutionResult.xsd b/es_elt/xsd/auditData/mam/BulkAdjustmentExecutionResult.xsd new file mode 100644 index 0000000..f6d8f0c --- /dev/null +++ b/es_elt/xsd/auditData/mam/BulkAdjustmentExecutionResult.xsd @@ -0,0 +1,74 @@ + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + mam_media_consumption_bulk_adjustment_request_execution_post: When a bulk adjustment process ends + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/mam/BulkAdjustmentExecutionStart.xsd b/es_elt/xsd/auditData/mam/BulkAdjustmentExecutionStart.xsd new file mode 100644 index 0000000..808b5c2 --- /dev/null +++ b/es_elt/xsd/auditData/mam/BulkAdjustmentExecutionStart.xsd @@ -0,0 +1,69 @@ + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + mam_media_consumption_bulk_adjustment_request_execution_post: When a bulk adjustment process starts or content of the processed bulk adjustment + + + + + + + diff --git a/es_elt/xsd/auditData/mam/ContractTransfer.xsd b/es_elt/xsd/auditData/mam/ContractTransfer.xsd new file mode 100644 index 0000000..c888efe --- /dev/null +++ b/es_elt/xsd/auditData/mam/ContractTransfer.xsd @@ -0,0 +1,73 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 12/03/2024 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + mam_order_post: When a contract is transferred from a contract to another + mam_media_consumption_excess_adjustment_post: Any excess adjustment, manual or with bulk + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/mam/DiscardedTravelEvent.xsd b/es_elt/xsd/auditData/mam/DiscardedTravelEvent.xsd new file mode 100644 index 0000000..6e4426b --- /dev/null +++ b/es_elt/xsd/auditData/mam/DiscardedTravelEvent.xsd @@ -0,0 +1,76 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + Initial file + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 29/01/2025 - Version 1.0.1 + + Add reason to fill the reason of discarded travel event if exist + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + mam_reconstruction_discarded_travel_event_post: When we discard a travel event + + + + + + + + + diff --git a/es_elt/xsd/auditData/mam/Media.xsd b/es_elt/xsd/auditData/mam/Media.xsd new file mode 100644 index 0000000..724cab9 --- /dev/null +++ b/es_elt/xsd/auditData/mam/Media.xsd @@ -0,0 +1,111 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + 30/08/2023 - Version 1.0.1 + + add Transit contract data + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + mam_medias_post: At media creation or when a new contract is added + mam_accept_list_post: Media added to accept list + mam_accept_list_delete: Media removed from accept list + cmm_customer_profile_media_post: Copy of a customer profile onto a media or a customer profile is updated and the profile was previously copied onto the media + + + + + + + + + + + Stipulates if the media is in accept List + + + + + Dictionary prefix: MediaStatus + + + + + Dictionary prefix: MediaType + + + + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/mam/MediaConsumptionAdjustment.xsd b/es_elt/xsd/auditData/mam/MediaConsumptionAdjustment.xsd new file mode 100644 index 0000000..c2a9fd3 --- /dev/null +++ b/es_elt/xsd/auditData/mam/MediaConsumptionAdjustment.xsd @@ -0,0 +1,135 @@ + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 03/01/2022 - Version 1.1.0 + + Add information about the adjustment source (Single/Bulk) + Move the Adjustment type from MissingTravelEventAdjustment to MediaConsumptionAdjustmentAuditExchange. Thanks to this change, the adjustment type will be present in case of excess. + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 14/11/2023 - Version 1.2.0 + + Add information about the previous and the recomputed leg id. + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + mam_media_consumption_virtual_adjustment_post: Any adjustment, manual or with bulk + mam_media_consumption_excess_adjustment_post: Any excess adjustment, manual or with bulk + + + + + + + User performing the adjustment + + + + + + + If the adjustment is processed by a bulk adjustment + + + + + + + + + + Transaction Id of the travel event that was previously missing a travel event + + + + + + + + + + + + + + + + + + Transaction Id of the exit travel event for which the excess fare has been adjusted + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/mam/MediaConsumptionAdjustmentCancellation.xsd b/es_elt/xsd/auditData/mam/MediaConsumptionAdjustmentCancellation.xsd new file mode 100644 index 0000000..0d5f968 --- /dev/null +++ b/es_elt/xsd/auditData/mam/MediaConsumptionAdjustmentCancellation.xsd @@ -0,0 +1,117 @@ + + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 14/11/2023 - Version 1.1.0 + + Add information about the previous and the recomputed leg id. + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + mam_media_consumption_virtual_cancellation_post: Cancellation of an adjustment. Only manually + mam_media_consumption_excess_cancellation_post: Cancellation of an excess adjustment. Only manually + + + + + + + + User performing the cancellation + + + + + + + + + + + Transaction Id of the travel event that was previously missing a travel event + + + + + + + + + + + + + + Transaction Id of the exit travel event for which the excess fare has been adjusted + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/mam/MediaConsumptions.xsd b/es_elt/xsd/auditData/mam/MediaConsumptions.xsd new file mode 100644 index 0000000..ea05eaa --- /dev/null +++ b/es_elt/xsd/auditData/mam/MediaConsumptions.xsd @@ -0,0 +1,511 @@ + + + + + + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 04/03/2022 - Version 1.1.0 + + Add ProductPriceWithDetails in RatingDetail + + + + 09/06/2022 - Version 1.2.0 + + Add ticketing version to RatingDetail + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 06/07/2022 - Version 1.3.0 + + Add ContractSerialNumber + CounterBalanceCurrentValue optional fields + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 08/08/2023 - Version 1.3.1 + + Add for travel event duplicate and duplicateOriginalTransactionId information + duplicate for leg + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 24/08/2023 - Version 1.4.0 + + - Add Capping Details in leg rating details + - Add legs evolution to mediaConsumption + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 02/01/2024 - Version 1.4.1 + + - Add JourneyRatingDetail in Journey + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 02/01/2024 - Version 1.4.2 + + - Add Discounts and fees in JourneyRatingDetail + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 17/06/2024 - Version 1.4.3 + + - Add TravelEventId in TravelEvent + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 10/07/2024 - Version 1.4.4 + + - Add JourneyId in Journey + - Add journeys evolution to mediaConsumption + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 10/10/2024 - Version 1.4.5 + + - Add ValidationModel in TravelEvent + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 20/11/2024 - Version 1.4.6 + + - Add Expired in Leg + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + mam_str_media_consumptions: After a journey reconstruction and rating + + + + + Media consumptions + + + + + + + + + + + + + + Dictionary prefix: CommercialId + + + + + + + + + Dictionary prefix: MediaType + + + + + + + Journeys + + + + + + + + + + Dictionary prefix: ModifiedJourneys + + + + + + + + + + + Dictionary prefix: ModifiedLegs + + + + + + + + + + + + + + + + + Legs + + + + + + + + + + + + + + + + + + + + + Unique identifier for a leg. + Between multiple reconstructions, the legId will be kept constant if the leg did not change + + + + + + Dictionary prefix: BusinessEntity + + + + + + + + Dictionary prefix: TransportMode + + + + + Dictionary prefix: TravelStatus + + + + + + + + True if the travel event was not taken into account in the rating because it was seen as expired (received too late or on a reconstructed media) + + + + + Travel events + + + + + + + + + + Dictionary prefix: StopPoint + + + + + Dictionary prefix: FarePoint + + + + + Dictionary prefix: AccessStatus + AccessStatus will always be filled in case of the TravelEvent comes from a device otherwise this field is not present + + + + + + Dictionary prefix: TravelEventType + + + + + Dictionary prefix: ValidationModel + + + + + Dictionary prefix: TravelEventSource + TravelEventSource will always be filled in case of the TravelEvent comes from a device otherwise this field is not + present + + + + + + Dictionary prefix: TravelStatus + + + + + TransactionId will always be filled in case of the TravelEvent comes from a device offline transaction. Can be empty if + the event is a virtual one (adjustment) or comes from the online API + + + + + + + + + + + + + + + + + ProductRatingDetails + + + + + + + + + + + + + + + ProductFare + + + + + + + + + + + + + + + + LegIds + + + + + + + + + + + + CrossedZones + + + + + + + + + + + + Transport modes managed in the system + + + + + + + + + + + + + + + + Dictionary prefix: AddedLegs + + + + + + + + + Dictionary prefix: AddedJourneys + + + + + + + + + + + Dictionary prefix: AddedLeg + + + + + + + + + Dictionary prefix: AddedJourney + + + + + + + + + Dictionary prefix: RemovedLegs + + + + + + + + + Dictionary prefix: RemovedJourneys + + + + + + + + + + + Dictionary prefix: RemovedLeg + + + + + + + + + Dictionary prefix: RemovedJourney + + + + + + diff --git a/es_elt/xsd/auditData/mam/MediaDenyAccessNotification.xsd b/es_elt/xsd/auditData/mam/MediaDenyAccessNotification.xsd new file mode 100644 index 0000000..bbfc60d --- /dev/null +++ b/es_elt/xsd/auditData/mam/MediaDenyAccessNotification.xsd @@ -0,0 +1,71 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 28/05/2025 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + cmm_customer_media_deny_access: Deny access notification for media + + + + + + + + + + diff --git a/es_elt/xsd/auditData/mam/MediaGraceExpiryNotification.xsd b/es_elt/xsd/auditData/mam/MediaGraceExpiryNotification.xsd new file mode 100644 index 0000000..3348a88 --- /dev/null +++ b/es_elt/xsd/auditData/mam/MediaGraceExpiryNotification.xsd @@ -0,0 +1,71 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 25/06/2025 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + cmm_customer_media_grace_expiry: Grace expiry notification for media + + + + + + + + + + \ No newline at end of file diff --git a/es_elt/xsd/auditData/mam/MediaNoSaleExpiryNotification.xsd b/es_elt/xsd/auditData/mam/MediaNoSaleExpiryNotification.xsd new file mode 100644 index 0000000..8d4e1b0 --- /dev/null +++ b/es_elt/xsd/auditData/mam/MediaNoSaleExpiryNotification.xsd @@ -0,0 +1,71 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 03/06/2025 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + cmm_customer_media_deny_access: Deny access notification for media + + + + + + + + + + \ No newline at end of file diff --git a/es_elt/xsd/auditData/mam/MediaProfileExpiryNotification.xsd b/es_elt/xsd/auditData/mam/MediaProfileExpiryNotification.xsd new file mode 100644 index 0000000..f9c66a6 --- /dev/null +++ b/es_elt/xsd/auditData/mam/MediaProfileExpiryNotification.xsd @@ -0,0 +1,70 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 20/12/2023 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + cmm_customer_media_profile_expiry: Profile about to expire on media + + + + + + + + + + diff --git a/es_elt/xsd/auditData/mam/MediaReconstruction.xsd b/es_elt/xsd/auditData/mam/MediaReconstruction.xsd new file mode 100644 index 0000000..dafded5 --- /dev/null +++ b/es_elt/xsd/auditData/mam/MediaReconstruction.xsd @@ -0,0 +1,74 @@ + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 05/12/2024 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + mam_media_reconstruction_post: At media reconstruction + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/mam/PurseUsage.xsd b/es_elt/xsd/auditData/mam/PurseUsage.xsd new file mode 100644 index 0000000..3381557 --- /dev/null +++ b/es_elt/xsd/auditData/mam/PurseUsage.xsd @@ -0,0 +1,99 @@ + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 27/05/2024 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + mam_media_purse_usage: When purse is reloaded, used to travel or reloaded after reconstruction + + + + + + + + In case of centralized purse usage, this is the id of the purse that is used. + + + + + The ordering sequence number of this purse usage audit exchange. + + + + + + + + + + + + + + + + Depending on the action leading to the change of purse, one of the following will be filled in + + + + + + + + diff --git a/es_elt/xsd/auditData/mam/TravelEvent.xsd b/es_elt/xsd/auditData/mam/TravelEvent.xsd new file mode 100644 index 0000000..4c802b0 --- /dev/null +++ b/es_elt/xsd/auditData/mam/TravelEvent.xsd @@ -0,0 +1,102 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 17/06/2024 - Version 1.0.1 + + Add the transactionId + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + mam_reconstruction_inspection_post: At fraudulent inspection detection + mam_reconstruction_inspection_post: At fraudulent inspection removal + mam_reconstruction_missing_post: At missing travel event detection + mam_reconstruction_missing_post: At missing travel event removal + + + + + + + + + Stipulates if the event is now solved (ie an event occurred to replace the missing or the fraudulent inspection) + + + + + + + + In case of Missing, this is the Id of the travel event not missing of the leg. In case of Inspection, this is the id of + the inspection travel event + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/pom/CustomerOrder.xsd b/es_elt/xsd/auditData/pom/CustomerOrder.xsd new file mode 100644 index 0000000..1b58afa --- /dev/null +++ b/es_elt/xsd/auditData/pom/CustomerOrder.xsd @@ -0,0 +1,183 @@ + + + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + sprint 186 - 29/08/2023 - Version 1.0.1 + + add refund data to order items (contractSerialNumber, refundAmount, refundFee, FinalRefundAmountFlag) + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 187 -22/09/2023 - Version 1.0.2 + + Add user info to track Agent's action + + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 205 - 15/10/2024 - Version 1.0.3 + + add Payment Means Id for PAY_AS_YOU_GO_MODIFICATION + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + pom_orders_post: At order update + + + + + + + + Dictionary prefix: CustomerOrderStatus + + + + + + + + + + + + + + + + + + + Realm of the user + + + + + Id the user + + + + + + + + + + + + Dictionary prefix: DeliveryOrderStatus + + + + + Dictionary prefix: DeliveryOrderStatus + + + + + + + + The serial number of the contract to refund + + + + + The initial refund amount calculated by CSS + + + + + The final refund amount calculated by MAM + + + + + The fee applicate to refund a product + + + + + If we have a final refund amount + + + + + The payment means Id (When a Payment Agreement is attached to a media) + + + + + + diff --git a/es_elt/xsd/auditData/pom/OrderItem.xsd b/es_elt/xsd/auditData/pom/OrderItem.xsd new file mode 100644 index 0000000..94dffdb --- /dev/null +++ b/es_elt/xsd/auditData/pom/OrderItem.xsd @@ -0,0 +1,142 @@ + + + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + sprint 186 - 29/08/2023 - Version 1.0.1 + + add refund data to order items (contractSerialNumber, refundAmount, refundFee, FinalRefundAmountFlag) + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + sprint 205 - 15/10/2024 - Version 1.0.2 + + add Payment Means Id for PAY_AS_YOU_GO_MODIFICATION + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + pom_order_item_put: At order item update + + + + + + Dictionary prefix: CustomerOrderStatus + + + + + + + + + Dictionary prefix: DeliveryOrderStatus + + + + + Dictionary prefix: DeliveryOrderStatus + + + + + + + + The serial number of the contract to refund + + + + + The initial refund amount calculated by CSS + + + + + The final refund amount calculated by MAM + + + + + The fee applied to refund a product + + + + + If we have a final refund amount + + + + + The payment means Id (When a Payment Agreement is attached to a media) + + + + + + diff --git a/es_elt/xsd/auditData/pom/RefundPayment.xsd b/es_elt/xsd/auditData/pom/RefundPayment.xsd new file mode 100644 index 0000000..59bf876 --- /dev/null +++ b/es_elt/xsd/auditData/pom/RefundPayment.xsd @@ -0,0 +1,66 @@ + + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 01/06/2023 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + pom_refund_payment: At POM payment update + + + + + + + + + + diff --git a/es_elt/xsd/auditData/pom/RefundPaymentRequest.xsd b/es_elt/xsd/auditData/pom/RefundPaymentRequest.xsd new file mode 100644 index 0000000..c7e7112 --- /dev/null +++ b/es_elt/xsd/auditData/pom/RefundPaymentRequest.xsd @@ -0,0 +1,66 @@ + + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 01/06/2023 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + pom_refund_payment_request: POM payment request creation for refund before sending it to Payment Gateway + + + + + + + + + + diff --git a/es_elt/xsd/auditData/pom/RefundPaymentResponse.xsd b/es_elt/xsd/auditData/pom/RefundPaymentResponse.xsd new file mode 100644 index 0000000..c4584a8 --- /dev/null +++ b/es_elt/xsd/auditData/pom/RefundPaymentResponse.xsd @@ -0,0 +1,65 @@ + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 01/06/2023 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + pom_refund_payment_response: Payment response from Payment Gateway fro refund + + + + + + + + + + diff --git a/es_elt/xsd/auditData/rpe/BadDebt.xsd b/es_elt/xsd/auditData/rpe/BadDebt.xsd new file mode 100644 index 0000000..2f4a279 --- /dev/null +++ b/es_elt/xsd/auditData/rpe/BadDebt.xsd @@ -0,0 +1,87 @@ + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + 10/08/2022 - Version 1.0.1 + + Add MediaSerialNumber to BadDebtAuditExchange + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + rpe_media_debt_post: After a bad debt detection or removal + + + + + + + + + The aggregated reason of the debt + + + + + Stipulates if the bad debt is now solved (ie a debt repayment happened) + + + + + diff --git a/es_elt/xsd/auditData/rpe/DebtRecoveryAttempt.xsd b/es_elt/xsd/auditData/rpe/DebtRecoveryAttempt.xsd new file mode 100644 index 0000000..9d15352 --- /dev/null +++ b/es_elt/xsd/auditData/rpe/DebtRecoveryAttempt.xsd @@ -0,0 +1,72 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + rpe_payments_recovery_post: After a debt recovery attempt + + + + + + + Identifier of the declined payment to be recovered. + + + + + diff --git a/es_elt/xsd/auditData/rpe/DebtRepayment.xsd b/es_elt/xsd/auditData/rpe/DebtRepayment.xsd new file mode 100644 index 0000000..da3716d --- /dev/null +++ b/es_elt/xsd/auditData/rpe/DebtRepayment.xsd @@ -0,0 +1,146 @@ + + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + rpe_payments_payment_post: After a sale server debt repayment or any recovery that settles a debt + + + + + + In case of debt surplus reversal, contains the reference to the initial debt repayment or recovery with surplus. + + + + + + + When the payment is less than the actual debt. + + + + + + A reference of the payment which paid the debt. + + + + + To distinguish between an automatic recovery from a direct payment + + + + + When the payment covers more than the actual debt. + + + + + Daily media consumptions involved in payment request + + + + + + + + + + + + + + Id of the daily media consumption that was involved in this payment request + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Id of the leg + + + + + diff --git a/es_elt/xsd/auditData/rpe/DebtRepaymentResponse.xsd b/es_elt/xsd/auditData/rpe/DebtRepaymentResponse.xsd new file mode 100644 index 0000000..047e33d --- /dev/null +++ b/es_elt/xsd/auditData/rpe/DebtRepaymentResponse.xsd @@ -0,0 +1,91 @@ + + + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 02/07/2024 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + rpe_debt_repayment_post: After a sale server debt repayment + + + + + + Payment ids of debt covered by the debt repayment + + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/rpe/IgnoredJourney.xsd b/es_elt/xsd/auditData/rpe/IgnoredJourney.xsd new file mode 100644 index 0000000..4c6c2ed --- /dev/null +++ b/es_elt/xsd/auditData/rpe/IgnoredJourney.xsd @@ -0,0 +1,76 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 21/08/2024 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + rpe_media_consumption_ignored: All journey ids ignored when first travel event of the journey is before the hard reset date + + + + + + All ignored journeys + + + + + + + + + + diff --git a/es_elt/xsd/auditData/rpe/PaymentRequest.xsd b/es_elt/xsd/auditData/rpe/PaymentRequest.xsd new file mode 100644 index 0000000..3db8b89 --- /dev/null +++ b/es_elt/xsd/auditData/rpe/PaymentRequest.xsd @@ -0,0 +1,237 @@ + + + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 02/08/2022 - Version 1.1.0 + + Add field PaymentSchemeIdentification + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 23/08/2023 - Version 1.2.0 + + Add field SequenceNumber + + + + 09/12/2024 - Version 1.2.1 + + Add customer id field when a payment mean is used + + + + + + + + + + + + + + + + + + + + + + + + + + rpe_media_payment_request: sent after each Payment Request (Nominal/Settlement/DebtRecovery) + + + + + + + In case of PaymentRequest linked to travel, there will always be the MediaSerialNumber of the corresponding card. + The MediaSerialNumber can be empty if the PaymentRequest is linked to autorenew/autoreload or online shopping with a payment means. + In this case, the paymentMeansId will be specified. + + + + + + + + + + + + + + + + + + + + + + + + + If a payment means was used for this settlement, the paymentMeansId related. + This can happen for autorenew/autoreload or online shopping with a payment means. + This can also happen for PayAsYouGo traveling with a payment agreement. + + + + + + + + Customer id linked to the payment mean used for the payment + + + + + + + Specifies if the payment request was a debt recovery or not. + + + + + + + Specifies if the payment request was a last MIT debt recovery. + + + + + + + Specifies if the payment request is the first debt recovery before plan debt recovery. + + + + + + + Payment trigger source : can be trigger by job, api call, a emv card tap or first ride risk + + + + + + + The type of payment request: + -AUTHORIZATION_ONLY: there will only be an authorization. + -AUTHORIZATION_AND_SETTLEMENT: there will be an authorization and then a settlement (if the authorization is approved). + -SETTLEMENT_ONLY: there will only be a settlement. + + + + + + Sequence number for each request for tracking and mapping purposes + + + + + Daily media consumptions involved in payment request + + + + + + + + + + retry count for payment request + + + + + + + + + + Id of the daily media consumption that was involved in this payment request + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Id of the leg + + + + + diff --git a/es_elt/xsd/auditData/rpe/PaymentRequestOldProcessor.xsd b/es_elt/xsd/auditData/rpe/PaymentRequestOldProcessor.xsd new file mode 100644 index 0000000..44e5217 --- /dev/null +++ b/es_elt/xsd/auditData/rpe/PaymentRequestOldProcessor.xsd @@ -0,0 +1,71 @@ + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 03/11/2022 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + + rpe_payment_request_old_processor: after payment/debt request error ( no response from PG) + + + + + + + + + diff --git a/es_elt/xsd/auditData/rpe/PaymentResponse.xsd b/es_elt/xsd/auditData/rpe/PaymentResponse.xsd new file mode 100644 index 0000000..4bfdd7d --- /dev/null +++ b/es_elt/xsd/auditData/rpe/PaymentResponse.xsd @@ -0,0 +1,280 @@ + + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 02/08/2022 - Version 1.1.0 + + Add field PaymentSchemeIdentification + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 23/03/2023 - Version 1.2.0 + + Modify field type for ResponseCode + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 23/08/2023 - Version 1.3.0 + + Add field SequenceNumber + + + + 12/09/2023 - Version 1.4.0 + + Add auto-renewed contract data fields (OrderNumber, ProductCode, StartValidityDate, EndValidityDate, ContractExpiryDate) + + + + 21/06/2024 - Version 1.4.1 + + add operation id to identify the agent who trigger the reset payment + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + rpe_media_settlement_post: This audit will be produced after the reception of the response from one PaymentRequest + rpe_media_payment_response: This audit will be produced after the reception of the response from one PaymentRequest + + + + + + The unique identifier of the related customer account (may be null) + + + + + + In case of PaymentRequest linked to travel, there will always be the MediaSerialNumber of the corresponding card. + The MediaSerialNumber can be empty if the PaymentRequest is linked to autorenew/autoreload or online shopping with a payment means. + In this case, the paymentMeansId will be specified. + + + + + + Currency code according to ISO 4217. + + + + + Identifier of the request. + + + + + Carries the Acquirer Bank Response Code(s) + + + + + Bank authorization reference number that can be used to discuss directly with bank. It can be display in IFS MMI of + payment history. + + + + + + Type of action to be performed. + + + + + Capture possible provided by the Payment Gateway to define if payment is first ride risk eligible. + + + + + Media type e.g. EMV + + + + + Identifier of the connected IFS system. Shall come from the request. + + + + + + OperatorId to identify the agent who trigger the reset payment. + + + + + + + + If a payment means was used for this settlement, the paymentMeansId related + + + + + if a payment was unrecoverable then we approved a cit/tap payment request for this payment + + + + + + Overall status of the payment resource. If the payment was divided in two phases (authorization and settlement), + both status are also present + + + + + + If the corresponding payment request contained an authorization, here is the status of the authorization + + + + + + If the corresponding payment request contained a settlement, here is the status of the settlement + + + + + + + Id produced by the Payment gateway adaptor in order to allow reconciliation in reporting + + + + + Approval Code used for reconciliation + + + + + Authorisation Code used for reconciliation and debt recovery + + + + + Sequence number for each response for tracking and mapping purposes + + + + + Response Reason from Payment Gateway + + + + + Code explaining the response from the Payment domain. + + + + + auto-renewed contract data + + + + + True when a payment was received after . + + + + + + + + + auto renewed contract order number. + + + + + auto renewed contract product code + + + + + start date of the renewed contract + + + + + end date of the renewed contract + + + + + expiry date of the old contract + + + + + diff --git a/es_elt/xsd/auditData/rpe/RiskReassessment.xsd b/es_elt/xsd/auditData/rpe/RiskReassessment.xsd new file mode 100644 index 0000000..bada54a --- /dev/null +++ b/es_elt/xsd/auditData/rpe/RiskReassessment.xsd @@ -0,0 +1,75 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 31/01/2022 - Version 1.0.0 + + Risk Reassessment for blocked media if not on debt + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + rpe_payments_recovery_post: After a debt recovery attempt + + + + + + Agent ID of the operator creating the movement + + + + + Security Token + + + + + diff --git a/es_elt/xsd/auditData/rpe/UnblockMediaAttempt.xsd b/es_elt/xsd/auditData/rpe/UnblockMediaAttempt.xsd new file mode 100644 index 0000000..2a3e747 --- /dev/null +++ b/es_elt/xsd/auditData/rpe/UnblockMediaAttempt.xsd @@ -0,0 +1,77 @@ + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 19/09/2022 - Version 1.0.0 + + + ----------------------------------------------------------------------------------------------------------------------- + + + 17/11/2022 - Version 1.1.0 + + Add OperatorId and mediaSerialNumber to audit. + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + rpe_media_unblock_media_post: After a unblock media attempt + + + + + + + + + + diff --git a/es_elt/xsd/auditData/scm/Fine.xsd b/es_elt/xsd/auditData/scm/Fine.xsd new file mode 100644 index 0000000..939422a --- /dev/null +++ b/es_elt/xsd/auditData/scm/Fine.xsd @@ -0,0 +1,134 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + scm_fines_post: At fine creation + scm_str_fine_payment: At fine payment + scm_fine_delete: At fine cancellation + Model for audit trace of fines + + + + + Agent who gave the fine to the fraudulent traveler + + + + + Amount of the fine. + + + + + Date when the fine was set to closed/cancelled + + + + + Date when the fine was issued + + + + + Number of the device that created the fine + + + + + Operator of the device that emits the fine + + + + + Type of the device that emits the fine + Dictionary prefix: DeviceType + + + + + Technical id + + + + + Number of the fine (device specific number) + + + + + Status of the fine: ISSUED means due to be paid, PAID means paid to the agent when issued or CANCELLED when bo operator + cancelled it + + Dictionary prefix: FineStatus + + + + + Type of offence. + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/scm/FineGdprExtraction.xsd b/es_elt/xsd/auditData/scm/FineGdprExtraction.xsd new file mode 100644 index 0000000..76964aa --- /dev/null +++ b/es_elt/xsd/auditData/scm/FineGdprExtraction.xsd @@ -0,0 +1,85 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + scm_fine_gdpr_get: Audit data about an extraction of personal data of a fine by an agent. + + + + + Agent who gave the fine to the fraudulent traveler. + + + + + Date when the fine was issued. + + + + + Id of the device which generated the fine + + + + + Id of the exported fine + + + + + diff --git a/es_elt/xsd/auditData/scm/OrphanShift.xsd b/es_elt/xsd/auditData/scm/OrphanShift.xsd new file mode 100644 index 0000000..904f9e5 --- /dev/null +++ b/es_elt/xsd/auditData/scm/OrphanShift.xsd @@ -0,0 +1,94 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + scm_statement_post: At shift statement creation + + + + + + Business Entity attached to the shift statement (taken from the deviceList) + Dictionary prefix: BusinessEntity + + + + + Associated cash till period number if relevant + + + + + + + + + + + List of reasons for which the statement is orphan. + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/stf/AgentAccount.xsd b/es_elt/xsd/auditData/stf/AgentAccount.xsd new file mode 100644 index 0000000..d645869 --- /dev/null +++ b/es_elt/xsd/auditData/stf/AgentAccount.xsd @@ -0,0 +1,85 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + stf_agents_post: At agent creation + stf_agent_put: At agent update + stf_agent_delete: At agent deletion + stf_agent_enable_post: At agent enabling + stf_agent_disable_post: At agent disabling + + + + + + + Technical unique identifier of the Agent account + + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/stk/LowStock.xsd b/es_elt/xsd/auditData/stk/LowStock.xsd new file mode 100644 index 0000000..cfe76c1 --- /dev/null +++ b/es_elt/xsd/auditData/stk/LowStock.xsd @@ -0,0 +1,84 @@ + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + stk_entity_post: After a stock update triggering a low stock + + + + + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/stk/StockEntityCreated.xsd b/es_elt/xsd/auditData/stk/StockEntityCreated.xsd new file mode 100644 index 0000000..1a6cfc4 --- /dev/null +++ b/es_elt/xsd/auditData/stk/StockEntityCreated.xsd @@ -0,0 +1,76 @@ + + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + stk_entities_post: At stock entity creation + stk_entity_post: At stock entity update + stk_entity_delete: At stock entity deletion + + + + + + + + + + diff --git a/es_elt/xsd/auditData/stk/StockMovement.xsd b/es_elt/xsd/auditData/stk/StockMovement.xsd new file mode 100644 index 0000000..1d39810 --- /dev/null +++ b/es_elt/xsd/auditData/stk/StockMovement.xsd @@ -0,0 +1,145 @@ + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + stk_movement_device_post: At stock movement + + + + + + + Agent ID of the operator creating the movement + + + + + Business entity of the stock entity receiving the stock + + + + + Destination stock entity ID of the stock entity receiving the stock + + + + + Destination stock entity identifier of the stock entity receiving the stock + + + + + Destination stock entity name of the stock entity receiving the stock + + + + + Destination stock entity type of the stock entity receiving the stock + + + + + Total stock quantity of the stock entity after receiving the stock + + + + + + Quantity change of the movement concerned by the event + + + + + Business entity of the stock entity moving out the stock + + + + + Source stock entity Id of the stock entity receiving the stock + + + + + Source stock entity identifier of the stock entity moving out the stock + + + + + Stock entity identifier of the source stock entity moving out the stock + + + + + Stock entity type of the source stock entity moving out the stock + + + + + Total stock quantity of the source stock entity after moving out the stock + + + + + Type identifier of the stock item concerned by the event + + + + + diff --git a/es_elt/xsd/auditData/stk/StockOperation.xsd b/es_elt/xsd/auditData/stk/StockOperation.xsd new file mode 100644 index 0000000..f1088b8 --- /dev/null +++ b/es_elt/xsd/auditData/stk/StockOperation.xsd @@ -0,0 +1,122 @@ + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + stk_movement_device_post: At stock movement + + + + + + the destination stock entity to where the items are added. + + + + + the type of items (usually a sub-type of media) contained in both stock entities for which the operation occurred. + + + + + + the number of items subtracted from the source stock and added to the destination stock. + + + + + the source stock entity from which the items are subtracted. + + + + + + + the current value of the destination stock item entity after the operation. + + + + + As movements are relative values, the caller shall provide a global unique identifier for each of its own movement + request to enforce idempotency on failure and retries. + + + + + + + the current value of the source stock item entity after the operation. + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/stk/StockOrderCreated.xsd b/es_elt/xsd/auditData/stk/StockOrderCreated.xsd new file mode 100644 index 0000000..1bb8644 --- /dev/null +++ b/es_elt/xsd/auditData/stk/StockOrderCreated.xsd @@ -0,0 +1,78 @@ + + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + stk_order_validate_post: At stock order validation + stk_order_put: At stock order update + stk_order_post: At stock order creation + + + + + + + + + + + + diff --git a/es_elt/xsd/auditData/stk/StockProviderCreated.xsd b/es_elt/xsd/auditData/stk/StockProviderCreated.xsd new file mode 100644 index 0000000..8cb34bb --- /dev/null +++ b/es_elt/xsd/auditData/stk/StockProviderCreated.xsd @@ -0,0 +1,76 @@ + + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + stk_provider_post: At stock provider creation + stk_provider_put: At stock provider update + stk_provider_delete: At stock provider deletion + + + + + + + + + + diff --git a/es_elt/xsd/auditData/stk/StockUpdateError.xsd b/es_elt/xsd/auditData/stk/StockUpdateError.xsd new file mode 100644 index 0000000..2521d72 --- /dev/null +++ b/es_elt/xsd/auditData/stk/StockUpdateError.xsd @@ -0,0 +1,72 @@ + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + stk_stock_update_error_post: After an error of stock update + + + + + + + + + + diff --git a/es_elt/xsd/auditData/stk/StockUpdated.xsd b/es_elt/xsd/auditData/stk/StockUpdated.xsd new file mode 100644 index 0000000..36d668e --- /dev/null +++ b/es_elt/xsd/auditData/stk/StockUpdated.xsd @@ -0,0 +1,72 @@ + + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 04/11/2021 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + stk_entity_post: At stock update + + + + + + + + + + diff --git a/es_elt/xsd/common/CappingDetails.xsd b/es_elt/xsd/common/CappingDetails.xsd new file mode 100644 index 0000000..5c12a78 --- /dev/null +++ b/es_elt/xsd/common/CappingDetails.xsd @@ -0,0 +1,26 @@ + + + + + + + + + Id of the capping rule + + + + + Id of the instance of capping rule + + + + + diff --git a/es_elt/xsd/common/ClearingItemType.xsd b/es_elt/xsd/common/ClearingItemType.xsd new file mode 100644 index 0000000..6f966e2 --- /dev/null +++ b/es_elt/xsd/common/ClearingItemType.xsd @@ -0,0 +1,291 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 22/11/2021 - Version 1.0.0 + + Factorize ApportionmentItemType + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 17/10/2022 - Version 1.0.1 + + Add error boolean in ContractRuleDetails + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 03/11/2022 - Version 1.1.0 + + - Rename RuleName to RuleId + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 22/05/2023 - Version 1.1.1 + + Add rule type Refund + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Sprint 186 - 22/08/2023 - Version 1.1.2 + + Added optional "Part" for contract rule detail, use to store whenever contract is part of base fare calculation, excess fare calculation. + Also added "ErrorMessage" for contract rule detail in order to add information about what gone wrong. + + + + Sprint 218 - 24/07/2025 - Version 1.1.3 + + Change the RoleType from LocalizedBusinessEntityRoleType to LocalizedBusinessRole + + + + ----------------------------------------------------------------------------------------------------------------------- + + + 09/09/2025 - Version 1.1.3 + + Add Fee Data object + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + Results of apportionment calculation + + + + + The stakeholder involved in the apportionment + + + + + Retailer, Card Owner, Product Owner, Transporter... + + + + + The account to where the money is credited/debited. + + + + + amount (positive or negative) allocated to the Clearing Participant + + + + + + + Results of apportionment calculation + + + + + The name of the rule + + + + + The type of the rule + + + + + + The apportionment result for this rule. If the + + + + + + + + + + Individual money transfer + + + + + + + + + + + + + + + + + + + + + + + + + + + + Individual money movement resulting from the apportionment items + + + + + The stakeholder who will be debited money + + + + + Retailer, Card Owner, Product Owner, Transporter... + + + + + The account from which the money is debited. + + + + + The stakeholder who will be credited money + + + + + Retailer, Card Owner, Product Owner, Transporter... + + + + + The account to where the money is credited. + + + + + amount (POSITIVE) to transfer between PAYER and PAYEE + + + + + + + Output from apportionment + + + + + + + + Results of apportionment calculation + + + + + The stakeholder involved in the apportionment + + + + + The account to where the money is credited/debited. + + + + + amount (positive or negative) allocated to the Clearing Participant + + + + + + + + Individual money transfer. The current settlements already take into account what has been done in previous settlement periods. + For instance, if in period n-1, we needed to give A->B 10, and in current period n we realize that we needed to give A->B 3, + the current audit will only contain a contractSettlement B->A 7 to compensate. + + + + + + + + + Individual money movement resulting from the apportionment items + + + + + The stakeholder who will be debited money + + + + + The account from which the money is debited. + + + + + The stakeholder who will be credited money + + + + + The account to where the money is credited. + + + + + amount (POSITIVE) to transfer between PAYER and PAYEE + + + + + + + + + The contract as an instance of a fee. + + + + + diff --git a/es_elt/xsd/common/CustomerPaymentType.xsd b/es_elt/xsd/common/CustomerPaymentType.xsd new file mode 100644 index 0000000..fc5c2b9 --- /dev/null +++ b/es_elt/xsd/common/CustomerPaymentType.xsd @@ -0,0 +1,106 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + Direct debt because of failing pre-authorization or missing payment means. + + + + + Request for a payment related to one or many travels. + + + + + Request for reversal (possibly partial) of one or many previous payments related to travels. + + + + + Nominal authorization to check the validity of the account related to the card and the card itself. + + + + + Authorization used to trigger risk reassessment. + + + + + Authorization reversal after risk reassessment approved. + + + + + Direct payment for clearing debts related to declined pre-authorizations or requests for payments. + + + + + Automatic payment for clearing debts related to declined pre-authorizations or requests for payments. + + + + + Automatic reimbursement when two interleaving clearings of the same debt reimbursed too much. + + + + + Request for a payment related to an order. + + + + + Payment triggered by an online order. + + + + + Direct payment. + + + + + Reset Payment. + + + + + diff --git a/es_elt/xsd/common/DenyActionStatus.xsd b/es_elt/xsd/common/DenyActionStatus.xsd new file mode 100644 index 0000000..aa9d716 --- /dev/null +++ b/es_elt/xsd/common/DenyActionStatus.xsd @@ -0,0 +1,47 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/common/Discount.xsd b/es_elt/xsd/common/Discount.xsd new file mode 100644 index 0000000..7b07fc6 --- /dev/null +++ b/es_elt/xsd/common/Discount.xsd @@ -0,0 +1,42 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + diff --git a/es_elt/xsd/common/ExtendedAddress.xsd b/es_elt/xsd/common/ExtendedAddress.xsd new file mode 100644 index 0000000..2735d65 --- /dev/null +++ b/es_elt/xsd/common/ExtendedAddress.xsd @@ -0,0 +1,64 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + Shipping address alias + + + + + + + + + + + diff --git a/es_elt/xsd/common/ExternalIdentifierExchange.xsd b/es_elt/xsd/common/ExternalIdentifierExchange.xsd new file mode 100644 index 0000000..f5d049e --- /dev/null +++ b/es_elt/xsd/common/ExternalIdentifierExchange.xsd @@ -0,0 +1,55 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/common/Fee.xsd b/es_elt/xsd/common/Fee.xsd new file mode 100644 index 0000000..3790c75 --- /dev/null +++ b/es_elt/xsd/common/Fee.xsd @@ -0,0 +1,41 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + diff --git a/es_elt/xsd/common/HalLink.xsd b/es_elt/xsd/common/HalLink.xsd new file mode 100644 index 0000000..6a772bd --- /dev/null +++ b/es_elt/xsd/common/HalLink.xsd @@ -0,0 +1,43 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + diff --git a/es_elt/xsd/common/Headers.xsd b/es_elt/xsd/common/Headers.xsd new file mode 100644 index 0000000..74116cb --- /dev/null +++ b/es_elt/xsd/common/Headers.xsd @@ -0,0 +1,43 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + diff --git a/es_elt/xsd/common/Localized.xsd b/es_elt/xsd/common/Localized.xsd new file mode 100644 index 0000000..17b24f5 --- /dev/null +++ b/es_elt/xsd/common/Localized.xsd @@ -0,0 +1,212 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + sprint 218 - 24/07/2025 - Version 1.0.2 + + add BusinessRole type for RoleType + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/common/MediaConsumptionAdjustmentCommon.xsd b/es_elt/xsd/common/MediaConsumptionAdjustmentCommon.xsd new file mode 100644 index 0000000..3f25826 --- /dev/null +++ b/es_elt/xsd/common/MediaConsumptionAdjustmentCommon.xsd @@ -0,0 +1,195 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + sprint 186 - 23/08/2023 - Version 1.1.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + Dictionary prefix: MediaType + + + + + + + + + Realm of the user + + + + + Id the user + + + + + + + + + Leg price before the adjustment + + + + + Leg price charge after the adjustment + + + + + Variation of price on leg adjusted + + + + + Variation of price on other legs + + + + + Total price variation: (Price After Adjustment) - (Price Before Adjustment) + + + + + Reason for the adjustment + + + + + Detail reason for the adjustment + + + + + + + + + Journey price before the adjustment + + + + + Journey price charge after the adjustment + + + + + Variation of price on other journeys + + + + + Total price variation: (Price After Adjustment) - (Price Before Adjustment) + + + + + Reason for the adjustment + + + + + Detail reason for the adjustment + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/common/MediaIdentification.xsd b/es_elt/xsd/common/MediaIdentification.xsd new file mode 100644 index 0000000..c86471d --- /dev/null +++ b/es_elt/xsd/common/MediaIdentification.xsd @@ -0,0 +1,57 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + Dictionary prefix: MediaType + + + + + + + + + + + + diff --git a/es_elt/xsd/common/MultiTicketingVersionsAuditExchange.xsd b/es_elt/xsd/common/MultiTicketingVersionsAuditExchange.xsd new file mode 100644 index 0000000..def206e --- /dev/null +++ b/es_elt/xsd/common/MultiTicketingVersionsAuditExchange.xsd @@ -0,0 +1,77 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/common/OrderDetails.xsd b/es_elt/xsd/common/OrderDetails.xsd new file mode 100644 index 0000000..7a89f0f --- /dev/null +++ b/es_elt/xsd/common/OrderDetails.xsd @@ -0,0 +1,167 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + + sprint 186 - 06/09/2023 - Version 1.0.0 + + First version + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + 24/09/2025 - Version 1.0.1 + + Add new DeliveryOrderStatus (PENDING_RETRY, RETRIED) + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + Order created + + + + + Order pending to be validated + + + + + Order validated (paid or free) + + + + + All items of the order are in a final status i.e. closed or cancelled + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Order item is created + + + + + Waiting for order item validation (e.g. operator evidences verification) + + + + + Waiting for the issue of the media (e.g. media personalization before sending it by mail) + + + + + Delivery of order item is on the way + + + + + Order item is delivered + + + + + Waiting for order item cancellation (e.g. order item must be refunded) + + + + + Order item is cancelled + + + + + Waiting for order item retry + + + + + Order item is retried + + + + + Order item is failed, i.e. an error has been returned and a manual action shall be done to confirm delivery or to cancel + order item + + + + + + diff --git a/es_elt/xsd/common/OrderStatus.xsd b/es_elt/xsd/common/OrderStatus.xsd new file mode 100644 index 0000000..795938d --- /dev/null +++ b/es_elt/xsd/common/OrderStatus.xsd @@ -0,0 +1,40 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + diff --git a/es_elt/xsd/common/PaymentRequestType.xsd b/es_elt/xsd/common/PaymentRequestType.xsd new file mode 100644 index 0000000..1076e0e --- /dev/null +++ b/es_elt/xsd/common/PaymentRequestType.xsd @@ -0,0 +1,58 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + Payment Authorization only + + + + + Payment Authorization and settlement + + + + + Payment Settlement only + + + + + Retail payment + + + + + diff --git a/es_elt/xsd/common/PaymentStatus.xsd b/es_elt/xsd/common/PaymentStatus.xsd new file mode 100644 index 0000000..c64100e --- /dev/null +++ b/es_elt/xsd/common/PaymentStatus.xsd @@ -0,0 +1,116 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + sprint 201 - 19/07/2024 - Version 1.0.2 + + add not sent to payment status + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + Note that the values of the enumeration are in their order of priority for aggregation. + + Note also that the value REPAID shall never appear as an aggregated status as the repaid debt compensation + shall always be accompanied with an approved repayment compensation. + + + + + + + + Payment amount has been aggregated + + + + + A debt has been eventually repaid. + + + + + Payment is not applicable. + + + + + Payment has been approved either directly or the bank acquirer + + + + + Payment has been issued to the bank acquirer + + + + + Payment has not been sent to the bank acquirer + + + + + An error has occurred during the payment processing either transient or permanent (ex. time out, connection broken, + internal error...), and will be retried later according to the recovery policy. Meanwhile, the payment is considered 'declined' but the + card will NOT been denied. + + + + + + Payment has been declined either directly by the PSP or by the bank acquirer (ex. insufficient credit/threshold), the card + will be denied and a recovery policy will retry further attempts. + + + + + + Payment has been declined because the card or account is definitely blocked (ex. card denied by bank or expired). No + automatic recovery will be attempted. The card will be denied. + + + + + + Payment has been RESET because the card or account is blocked and have now way to be unblocked via traditionnel channel. + + + + + + Payment has not been SENT to the PSP. + + + + + + diff --git a/es_elt/xsd/common/PaymentTriggerSource.xsd b/es_elt/xsd/common/PaymentTriggerSource.xsd new file mode 100644 index 0000000..fd24a65 --- /dev/null +++ b/es_elt/xsd/common/PaymentTriggerSource.xsd @@ -0,0 +1,69 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + sprint 201 - 19/07/2024 - Version 1.0.2 + + add not sent trigger source + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + Job trigger the debt recovery, Merchant Initiated Transaction + + + + + Emv Tap Trigger debt recovery, Tap Initiated Transaction + + + + + Api call trigger the debt recovery, CardHolder Initiated Transaction + + + + + First Ride Risk Initiated Transaction + + + + + First Ride Risk Initiated Transaction + + + + + diff --git a/es_elt/xsd/common/PaymentType.xsd b/es_elt/xsd/common/PaymentType.xsd new file mode 100644 index 0000000..6f7db3d --- /dev/null +++ b/es_elt/xsd/common/PaymentType.xsd @@ -0,0 +1,97 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 188 - 09/10/2023 - Version 1.0.2 + + add missing enum AUTHORIZATION_REVERSAL to correspond a enum on BO + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + Direct debt because of failing pre-authorization or missing payment means. + + + + + Request for a payment related to one or many travels. + + + + + Request for reversal (possibly partial) of one or many previous payments related to travels. + + + + + Nominal authorization to check the validity of the account related to the card and the card itself. + + + + + authorization to check the validity of the account related to the card and the card itself. + + + + + Direct payment for clearing debts related to declined pre-authorizations or requests for payments. + + + + + debt payment for clearing debts related to declined pre-authorizations or requests for payments. + + + + + Automatic reimbursement when two interleaving clearings of the same debt reimbursed too much. + + + + + Request for a payment related to an order. + + + + + Request for an authorization reversal. + + + + + diff --git a/es_elt/xsd/common/ProductPriceWithDetails.xsd b/es_elt/xsd/common/ProductPriceWithDetails.xsd new file mode 100644 index 0000000..609f6c2 --- /dev/null +++ b/es_elt/xsd/common/ProductPriceWithDetails.xsd @@ -0,0 +1,103 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + sprint 218 - 23/08/2025 - Version 1.0.2 + + add rating explanations + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/common/ProviderStatus.xsd b/es_elt/xsd/common/ProviderStatus.xsd new file mode 100644 index 0000000..e28ba54 --- /dev/null +++ b/es_elt/xsd/common/ProviderStatus.xsd @@ -0,0 +1,40 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + diff --git a/es_elt/xsd/common/RatingDetail.xsd b/es_elt/xsd/common/RatingDetail.xsd new file mode 100644 index 0000000..3d21195 --- /dev/null +++ b/es_elt/xsd/common/RatingDetail.xsd @@ -0,0 +1,89 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + Dictionary prefix: HolderProfile + + + + + Contract serial number + + + + + Dictionary prefix: ProductCode + + + + + Current counter balance value if the used contract is a multi ride + + + + + Dictionary prefix: ExcessFare + + + + + Price of the leg including details such as fees, discount and base fare. + + + + + The ticketing version used for audit messages. + + + + + The details of the capping. + + + + + Product validity end date used for audit messages. + + + + + diff --git a/es_elt/xsd/common/RefundContractAuditExchange.xsd b/es_elt/xsd/common/RefundContractAuditExchange.xsd new file mode 100644 index 0000000..67101e5 --- /dev/null +++ b/es_elt/xsd/common/RefundContractAuditExchange.xsd @@ -0,0 +1,138 @@ + + + + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 01/06/2023 - Version 1.0.0 + + 1st part: Add the AuditMessages, AuditMessage, Headers and Payload element for the XML validation + 2nd part: Add version to xsd schema + + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + pom_refund_contract: This audit will be produced after sending closing contract to mam + mam_refund_contract: This audit will be produced after sending refund order item contract to mam + mam_contract_update: This audit will be produced after sending closing contract to mam + + + + + + The unique identifier of the payment + + + + + The serial number of the media + + + + + The serial number of the contract to refund + + + + + The status of the contract (DISABLE, CLOSED, ...) + + + + + The code of the product on the catalog + + + + + The unique identifier of the refund order + + + + + The status of the refund order (NOT_REQUEST, PENDING, COMPLETED, CANCELED) + + + + + The date of this status + + + + + The initial refund amount calculated by CSS + + + + + The final refund amount calculated by MAM + + + + + The fee applicable to refund a product + + + + + The fee applicable to refund a product + + + + + diff --git a/es_elt/xsd/common/RefundPaymentAudit.xsd b/es_elt/xsd/common/RefundPaymentAudit.xsd new file mode 100644 index 0000000..30ebc10 --- /dev/null +++ b/es_elt/xsd/common/RefundPaymentAudit.xsd @@ -0,0 +1,201 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + 08/08/2023 - Version 1.1 + + Add payment response (APPROVED, DECLINED) + + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 186 - 23/08/2023 - Version 1.1.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + This audit will be produced after the sending of the payment refund + + + + + The serial number of the media + + + + + The serial number of the contract to refund + + + + + The status of the contract (DISABLE, CLOSED, ...) + + + + + The code of the product on the catalog + + + + + The unique identifier of the refund order + + + + + The status of the refund order (NOT_REQUEST, PENDING, COMPLETED, CANCELED) + + + + + The date of this status + + + + + The initial refund amount calculated by CSS + + + + + The final refund amount calculated by MAM + + + + + The fee applicate to refund a product + + + + + If we have a final refund amount + + + + + The payment status (READY, TRIGGERED, COMPLETED, IN_ERROR, DECLINED) + + + + + The type of the payment means (CASH, EMV_CP (EMV retail Card Present - CP), EMV_CNP (EMV retail Card Non Present - CNP), INTERNAL/EXTERNAL PURSE, PAYMENT_AGREMENT) + + + + + The unique identifier of the transaction + + + + + That corresponds to the financial transaction result of this refund + + + + + That Retail token corresponds to the ID of the payment medium used during refund if used + + + + + For EMV retail cards and ABT media with internal/external purse. Not applicable for Cash + + + + + The refund amount requested + + + + + Used for EMV + + + + + EMV (VISA, AMEX, ....) + + + + + Payment account reference + + + + + The unique identifier about merchant + + + + + The identifier of the approved payment order + + + + + Date and time of the financial transaction recorded at the payment domain + + + + + Currency code according to ISO 4217 + + + + + Unique Message refund identification + + + + + Response message creation date and time provided by the payment domain + + + + + 2 digit codes explaining the response from the payment domain + + + + + The payment response (APPROVED, DECLINED) + + + + + reconciliation ID or Payment Gateway reference + + + + + diff --git a/es_elt/xsd/common/StockEntityExchange.xsd b/es_elt/xsd/common/StockEntityExchange.xsd new file mode 100644 index 0000000..c16d70f --- /dev/null +++ b/es_elt/xsd/common/StockEntityExchange.xsd @@ -0,0 +1,78 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + Dictionary prefix: BusinessEntity + + + + + + + Dictionary prefix: EntityType + + + + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/common/StockEntityItem.xsd b/es_elt/xsd/common/StockEntityItem.xsd new file mode 100644 index 0000000..565be12 --- /dev/null +++ b/es_elt/xsd/common/StockEntityItem.xsd @@ -0,0 +1,46 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/common/StockHistoryAction.xsd b/es_elt/xsd/common/StockHistoryAction.xsd new file mode 100644 index 0000000..f232bb6 --- /dev/null +++ b/es_elt/xsd/common/StockHistoryAction.xsd @@ -0,0 +1,55 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/common/StockOrderExchange.xsd b/es_elt/xsd/common/StockOrderExchange.xsd new file mode 100644 index 0000000..92acd15 --- /dev/null +++ b/es_elt/xsd/common/StockOrderExchange.xsd @@ -0,0 +1,116 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + Shipping address + + + + + + Identifier of the Business Entity acting as Media Manufacturer/Supplier + + + + + + Quantity of media inside a parcel + + + + + + Sub-conditioning of media (ex. blister) inside a parcel + + + + + + + Graphical artwork to be printed on the media (Front) surface ; it may include dynamic areas that will be filled in + with specific data + + + + + + + + Validity end date assigned to all media produced for this order + + + + + Identifier of the Business Entity acting as Media Issuer + + + + + Dictionary prefix: MediaType + + + + + Identifier of the operator that created the order + + + + + + Graphical artwork to be printed on the media (Rear) surface ; it may include dynamic areas that will be filled in + with specific data + + + + + + Security Key set to be used for the media. Key Set are exchange by security officer via another mean + + + + + + + + diff --git a/es_elt/xsd/common/StockProviderExchange.xsd b/es_elt/xsd/common/StockProviderExchange.xsd new file mode 100644 index 0000000..8d828d4 --- /dev/null +++ b/es_elt/xsd/common/StockProviderExchange.xsd @@ -0,0 +1,71 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/common/TransactionExceptionType.xsd b/es_elt/xsd/common/TransactionExceptionType.xsd new file mode 100644 index 0000000..bef3758 --- /dev/null +++ b/es_elt/xsd/common/TransactionExceptionType.xsd @@ -0,0 +1,40 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + diff --git a/es_elt/xsd/common/TransitContract.xsd b/es_elt/xsd/common/TransitContract.xsd new file mode 100644 index 0000000..09cc6df --- /dev/null +++ b/es_elt/xsd/common/TransitContract.xsd @@ -0,0 +1,63 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + Transit Contract + + + ----------------------------------------------------------------------------------------------------------------------- + + + + sprint 186 - 30/08/2023 - Version 1.0.1 + + Transit contract sale audit + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/es_elt/xsd/common/TravelEventSource.xsd b/es_elt/xsd/common/TravelEventSource.xsd new file mode 100644 index 0000000..eb09a2c --- /dev/null +++ b/es_elt/xsd/common/TravelEventSource.xsd @@ -0,0 +1,43 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + diff --git a/es_elt/xsd/common/TravelEventType.xsd b/es_elt/xsd/common/TravelEventType.xsd new file mode 100644 index 0000000..ece15c9 --- /dev/null +++ b/es_elt/xsd/common/TravelEventType.xsd @@ -0,0 +1,48 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + for internal use only, in conjunction with TravelStatus.NULL + + + + + + + + + + diff --git a/es_elt/xsd/common/TravelStatus.xsd b/es_elt/xsd/common/TravelStatus.xsd new file mode 100644 index 0000000..68b7175 --- /dev/null +++ b/es_elt/xsd/common/TravelStatus.xsd @@ -0,0 +1,41 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 186 - 23/08/2023 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + + + + + + diff --git a/es_elt/xsd/common/ValidationModel.xsd b/es_elt/xsd/common/ValidationModel.xsd new file mode 100644 index 0000000..155bb9e --- /dev/null +++ b/es_elt/xsd/common/ValidationModel.xsd @@ -0,0 +1,45 @@ + + + + + + + ----------------------------------------------------------------------------------------------------------------------- + + + Version List + + + ----------------------------------------------------------------------------------------------------------------------- + + + sprint 205 - 10/10/2024 - Version 1.0.1 + + change versioning and add documentation to respect XSD versioning format + + + + ----------------------------------------------------------------------------------------------------------------------- + + + + + + + Model of validation + + + + + + + + + diff --git a/sds/app/.sds-api.yaml.kate-swp b/sds/app/.sds-api.yaml.kate-swp deleted file mode 100644 index d369cb500fc5d91d7d83ca28f6ac536610e021a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 662 zcmYk%yGp}Q9LMpKUel(RT$(n$r)a@Jiij=>Zi*KWwDjXxm=^3D0=pTLPR#y?v;EaUm(;yymQzFo%Kvn^vx>wE9(?b&`>OCel> z`{&)q{4$wLl8a@5m|e2Y!8qL-QwJl#2g57|LcpXi9D|B4GtO!VI*t2!$Oc zEnx!$!aneYQ{V|Fz!iF+DQtpp5!?B|FU>u9nSx5zpUgj5&!@I diff --git a/sds/app/sds-api.yaml b/sds/app/sds-api.yaml index de3add9..5050f24 100644 --- a/sds/app/sds-api.yaml +++ b/sds/app/sds-api.yaml @@ -1,37 +1,3 @@ -# -# api: -# image: registry.dev.k8s.transcity/sds/api:latest -# ports: -# - "13000:3000" -# depends_on: -# puppeteer: -# condition: service_started -# postgres: -# condition: service_healthy -# environment: -# SERVER_PORT: 3000 -# EVENTS_TURNIT_ENABLED: "false" -# EVENTS_AZURE_ENABLED: "false" -# SDS_PUPPETEER_API_URL: "http://puppeteer:3000" -# PRINT_REPORT_URL: "http://admin:3000" -# REDIS_HOST: "redis" -# ELASTICSEARCH_URL: "https://elastic:fkBqGedfBM@elasticsearch:9200" -# DATABASE_URL: "postgres://postgres:postgres@postgres:5432/postgres" -# KEYCLOAK_URL: "https://keycloak.alpha.k8s.transcity" -# KEYCLOAK_AGENTS_REALM: sds-agents -# KEYCLOAK_THIRD_PARTY_REALM: sds-third-parties -# KEYCLOAK_CUSTOMERS_REALM: sds-customers -# KEYCLOAK_RETAILERS_REALM: sds-retailers -# AZ_STORAGE_CONNECTION_STRING: "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/#K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://azurite:10000/devstoreaccount1;" -# NODE_EXTRA_CA_CERTS: /etc/ssl/certs/ca-certificates.crt -# healthcheck: -# test: ["CMD", "wget", "--spider", "http://127.0.0.1:3000/health"] -# interval: 5s -# timeout: 2s -# retries: 10 -# volumes: -# - '/etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt' -# --- apiVersion: db-caretaker.dev/v1alpha1 kind: Database diff --git a/sds/base/elasticsearch.yaml b/sds/base/elasticsearch.yaml index fd57390..1884be1 100644 --- a/sds/base/elasticsearch.yaml +++ b/sds/base/elasticsearch.yaml @@ -261,6 +261,10 @@ spec: value: "-Xms2g -Xmx2g" - name: xpack.security.enabled value: "false" + - name: http.cors.enabled + value: "true" + - name: http.cors.allow-origin + value: '*' volumeMounts: - name: "elasticsearch-master" mountPath: /usr/share/elasticsearch/data diff --git a/superset-image/Dockerfile b/superset-image/Dockerfile new file mode 100644 index 0000000..d07ca69 --- /dev/null +++ b/superset-image/Dockerfile @@ -0,0 +1,31 @@ +FROM apache/superset:5.0.0 + +USER root + +# Set environment variable for Playwright +ENV PLAYWRIGHT_BROWSERS_PATH=/usr/local/share/playwright-browsers + +# Install packages using uv into the virtual environment +RUN . /app/.venv/bin/activate && \ + uv pip install \ + # install psycopg2 for using PostgreSQL metadata store - could be a MySQL package if using that backend: + psycopg2-binary \ + clickhouse-connect>=0.6.8 \ + elasticsearch-dbapi \ + Authlib \ + # openpyxl to be able to upload Excel files + openpyxl \ + # Pillow for Alerts & Reports to generate PDFs of dashboards + Pillow \ + # install Playwright for taking screenshots for Alerts & Reports. This assumes the feature flag PLAYWRIGHT_REPORTS_AND_THUMBNAILS is enabled + # That feature flag will default to True starting in 6.0.0 + # Playwright works only with Chrome. + # If you are still using Selenium instead of Playwright, you would instead install here the selenium package and a headless browser & webdriver + playwright \ + && playwright install-deps \ + && PLAYWRIGHT_BROWSERS_PATH=/usr/local/share/playwright-browsers playwright install chromium + +# Switch back to the superset user +USER superset + +CMD ["/app/docker/entrypoints/run-server.sh"] diff --git a/superset-values-ref.yaml b/superset-values-ref.yaml new file mode 100644 index 0000000..191f2bf --- /dev/null +++ b/superset-values-ref.yaml @@ -0,0 +1,902 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Default values for superset. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +# A README is automatically generated from this file to document it, +# using helm-docs (see https://github.com/norwoodj/helm-docs) +# To update it, install helm-docs and run helm-docs from the root of this chart + +# -- Provide a name to override the name of the chart +nameOverride: ~ +# -- Provide a name to override the full names of resources +fullnameOverride: ~ + +# -- Labels to be added to all resources +extraLabels: {} + +# -- User ID directive. This user must have enough permissions to run the bootstrap script +# Running containers as root is not recommended in production. Change this to another UID - e.g. 1000 to be more secure +runAsUser: 0 + +# -- Specify rather or not helm should create the secret described in `secret-env.yaml` template +secretEnv: + # -- Change to false in order to support externally created secret (Binami "Sealed Secrets" for Kubernetes or External Secrets Operator) + # note: when externally creating the secret, the chart still expects to pull values from a secret with the name of the release defaults to `release-name-superset-env` - full logic located in _helpers.tpl file: `define "superset.fullname"` + create: true + +# -- Specify service account name to be used +serviceAccountName: ~ +serviceAccount: + # -- Create custom service account for Superset. If create: true and serviceAccountName is not provided, `superset.fullname` will be used. + create: false + annotations: {} + +# -- Install additional packages and do any other bootstrap configuration in this script +# For production clusters it's recommended to build own image with this step done in CI +# @default -- see `values.yaml` +bootstrapScript: | + #!/bin/bash + if [ ! -f ~/bootstrap ]; then echo "Running Superset with uid {{ .Values.runAsUser }}" > ~/bootstrap; fi + +# -- The name of the secret which we will use to generate a superset_config.py file +# Note: this secret must have the key superset_config.py in it and can include other files as well +configFromSecret: '{{ template "superset.fullname" . }}-config' + +# -- The name of the secret which we will use to populate env vars in deployed pods +# This can be useful for secret keys, etc. +envFromSecret: '{{ template "superset.fullname" . }}-env' +# -- This can be a list of templated strings +envFromSecrets: [] + +# -- Extra environment variables that will be passed into pods +extraEnv: {} + # Different gunicorn settings, refer to the gunicorn documentation + # https://docs.gunicorn.org/en/stable/settings.html# + # These variables are used as Flags at the gunicorn startup + # https://github.com/apache/superset/blob/master/docker/run-server.sh#L22 + # Extend timeout to allow long running queries. + # GUNICORN_TIMEOUT: 300 + # Increase the gunicorn worker amount, can improve performance drastically + # See: https://docs.gunicorn.org/en/stable/design.html#how-many-workers + # SERVER_WORKER_AMOUNT: 4 + # WORKER_MAX_REQUESTS: 0 + # WORKER_MAX_REQUESTS_JITTER: 0 + # SERVER_THREADS_AMOUNT: 20 + # GUNICORN_KEEPALIVE: 2 + # SERVER_LIMIT_REQUEST_LINE: 0 + # SERVER_LIMIT_REQUEST_FIELD_SIZE: 0 + + # OAUTH_HOME_DOMAIN: .. + # # If a whitelist is not set, any address that can use your OAuth2 endpoint will be able to login. + # # this includes any random Gmail address if your OAuth2 Web App is set to External. + # OAUTH_WHITELIST_REGEX: ... + +# -- Extra environment variables in RAW format that will be passed into pods +extraEnvRaw: [] + # Load DB password from other secret (e.g. for zalando operator) + # - name: DB_PASS + # valueFrom: + # secretKeyRef: + # name: superset.superset-postgres.credentials.postgresql.acid.zalan.do + # key: password + +# -- Extra environment variables to pass as secrets +extraSecretEnv: {} + # MAPBOX_API_KEY: ... + # # Google API Keys: https://console.cloud.google.com/apis/credentials + # GOOGLE_KEY: ... + # GOOGLE_SECRET: ... + # # Generate your own secret key for encryption. Use openssl rand -base64 42 to generate a good key + # SUPERSET_SECRET_KEY: 'CHANGE_ME_TO_A_COMPLEX_RANDOM_SECRET' + +# -- Extra files to be mounted as ConfigMap on the path specified in `extraConfigMountPath` +extraConfigs: {} + # import_datasources.yaml: | + # databases: + # - allow_file_upload: true + # allow_ctas: true + # allow_cvas: true + # database_name: example-db + # extra: "{\r\n \"metadata_params\": {},\r\n \"engine_params\": {},\r\n \"\ + # metadata_cache_timeout\": {},\r\n \"schemas_allowed_for_file_upload\": []\r\n\ + # }" + # sqlalchemy_uri: example://example-db.local + # tables: [] + +# -- Extra files to be mounted as Secrets on the path specified in `configMountPath` +extraSecrets: {} + +extraVolumes: [] + # - name: customConfig + # configMap: + # name: '{{ template "superset.fullname" . }}-custom-config' + # - name: additionalSecret + # secret: + # secretName: my-secret + # defaultMode: 0600 + +extraVolumeMounts: [] + # - name: customConfig + # mountPath: /mnt/config + # readOnly: true + # - name: additionalSecret: + # mountPath: /mnt/secret + +# -- A dictionary of overrides to append at the end of superset_config.py - the name does not matter +# WARNING: the order is not guaranteed +# Files can be passed as helm --set-file configOverrides.my-override=my-file.py +configOverrides: {} + # extend_timeout: | + # # Extend timeout to allow long running queries. + # SUPERSET_WEBSERVER_TIMEOUT = ... + # enable_oauth: | + # from flask_appbuilder.security.manager import (AUTH_DB, AUTH_OAUTH) + # AUTH_TYPE = AUTH_OAUTH + # OAUTH_PROVIDERS = [ + # { + # "name": "google", + # "whitelist": [ os.getenv("OAUTH_WHITELIST_REGEX", "") ], + # "icon": "fa-google", + # "token_key": "access_token", + # "remote_app": { + # "client_id": os.environ.get("GOOGLE_KEY"), + # "client_secret": os.environ.get("GOOGLE_SECRET"), + # "api_base_url": "https://www.googleapis.com/oauth2/v2/", + # "client_kwargs": {"scope": "email profile"}, + # "request_token_url": None, + # "access_token_url": "https://accounts.google.com/o/oauth2/token", + # "authorize_url": "https://accounts.google.com/o/oauth2/auth", + # "authorize_params": {"hd": os.getenv("OAUTH_HOME_DOMAIN", "")} + # } + # } + # ] + # # Map Authlib roles to superset roles + # AUTH_ROLE_ADMIN = 'Admin' + # AUTH_ROLE_PUBLIC = 'Public' + # # Will allow user self registration, allowing to create Flask users from Authorized User + # AUTH_USER_REGISTRATION = True + # # The default user self registration role + # AUTH_USER_REGISTRATION_ROLE = "Admin" + # secret: | + # # Generate your own secret key for encryption. Use `openssl rand -base64 42` to generate a good key + # SECRET_KEY = 'CHANGE_ME_TO_A_COMPLEX_RANDOM_SECRET' + +# -- Same as above but the values are files +configOverridesFiles: {} + # extend_timeout: extend_timeout.py + # enable_oauth: enable_oauth.py + +configMountPath: "/app/pythonpath" + +extraConfigMountPath: "/app/configs" + +image: + repository: apachesuperset.docker.scarf.sh/apache/superset + tag: ~ + pullPolicy: IfNotPresent + +imagePullSecrets: [] + +initImage: + repository: apache/superset + tag: dockerize + pullPolicy: IfNotPresent + +service: + type: ClusterIP + port: 8088 + annotations: {} + # cloud.google.com/load-balancer-type: "Internal" + loadBalancerIP: ~ + nodePort: + # -- (int) + http: nil + +ingress: + enabled: false + ingressClassName: ~ + annotations: {} + # kubernetes.io/tls-acme: "true" + ## Extend timeout to allow long running queries. + # nginx.ingress.kubernetes.io/proxy-connect-timeout: "300" + # nginx.ingress.kubernetes.io/proxy-read-timeout: "300" + # nginx.ingress.kubernetes.io/proxy-send-timeout: "300" + path: / + pathType: ImplementationSpecific + hosts: + - chart-example.local + tls: [] + extraHostsRaw: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # The limits below will apply to all Superset components. To set individual resource limitations refer to the pod specific values below. + # The pod specific values will overwrite anything that is set here. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +# -- Custom hostAliases for all superset pods +## https://kubernetes.io/docs/tasks/network/customize-hosts-file-for-pods/ +hostAliases: [] +# - hostnames: +# - nodns.my.lan +# ip: 18.27.36.45 + +# Superset node configuration +supersetNode: + replicas: + enabled: true + replicaCount: 1 + autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + # targetMemoryUtilizationPercentage: 80 + # -- Sets the [pod disruption budget](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) for supersetNode pods + podDisruptionBudget: + # -- Whether the pod disruption budget should be created + enabled: false + # -- If set, maxUnavailable must not be set - see https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget + minAvailable: 1 + # -- If set, minAvailable must not be set - see https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget + maxUnavailable: 1 + + # -- Startup command + # @default -- See `values.yaml` + command: + - "/bin/sh" + - "-c" + - ". {{ .Values.configMountPath }}/superset_bootstrap.sh; /usr/bin/run-server.sh" + connections: + # -- Change in case of bringing your own redis and then also set redis.enabled:false + redis_host: "{{ .Release.Name }}-redis-headless" + redis_port: "6379" + redis_user: "" + # redis_password: superset + redis_cache_db: "1" + redis_celery_db: "0" + # Or SSL port is usually 6380 + # Update following for using Redis with SSL + redis_ssl: + enabled: false + ssl_cert_reqs: CERT_NONE + # You need to change below configuration incase bringing own PostgresSQL instance and also set postgresql.enabled:false + # -- Database type for Superset metadata (Supported types: "postgresql", "mysql") + db_type: "postgresql" + db_host: "{{ .Release.Name }}-postgresql" + db_port: "5432" + db_user: superset + db_pass: superset + db_name: superset + env: {} + # -- If true, forces deployment to reload on each upgrade + forceReload: false + # -- Init containers + # @default -- a container waiting for postgres + initContainers: + - name: wait-for-postgres + image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}" + imagePullPolicy: "{{ .Values.initImage.pullPolicy }}" + envFrom: + - secretRef: + name: "{{ tpl .Values.envFromSecret . }}" + command: + - /bin/sh + - -c + - dockerize -wait "tcp://$DB_HOST:$DB_PORT" -timeout 120s + + # -- Launch additional containers into supersetNode pod + extraContainers: [] + # -- Annotations to be added to supersetNode deployment + deploymentAnnotations: {} + # -- Labels to be added to supersetNode deployment + deploymentLabels: {} + # -- Affinity to be added to supersetNode deployment + affinity: {} + # -- TopologySpreadConstrains to be added to supersetNode deployments + topologySpreadConstraints: [] + # -- Annotations to be added to supersetNode pods + podAnnotations: {} + # -- Labels to be added to supersetNode pods + podLabels: {} + startupProbe: + httpGet: + path: /health + port: http + initialDelaySeconds: 15 + timeoutSeconds: 1 + failureThreshold: 60 + periodSeconds: 5 + successThreshold: 1 + livenessProbe: + httpGet: + path: /health + port: http + initialDelaySeconds: 15 + timeoutSeconds: 1 + failureThreshold: 3 + periodSeconds: 15 + successThreshold: 1 + readinessProbe: + httpGet: + path: /health + port: http + initialDelaySeconds: 15 + timeoutSeconds: 1 + failureThreshold: 3 + periodSeconds: 15 + successThreshold: 1 + # -- Resource settings for the supersetNode pods - these settings overwrite might existing values from the global resources object defined above. + resources: {} + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + podSecurityContext: {} + containerSecurityContext: {} + strategy: {} + # type: RollingUpdate + # rollingUpdate: + # maxSurge: 25% + # maxUnavailable: 25% + +# Superset Celery worker configuration +supersetWorker: + replicas: + enabled: true + replicaCount: 1 + autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + # targetMemoryUtilizationPercentage: 80 + # -- Sets the [pod disruption budget](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) for supersetWorker pods + podDisruptionBudget: + # -- Whether the pod disruption budget should be created + enabled: false + # -- If set, maxUnavailable must not be set - see https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget + minAvailable: 1 + # -- If set, minAvailable must not be set - see https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget + maxUnavailable: 1 + # -- Worker startup command + # @default -- a `celery worker` command + command: + - "/bin/sh" + - "-c" + - ". {{ .Values.configMountPath }}/superset_bootstrap.sh; celery --app=superset.tasks.celery_app:app worker" + # -- If true, forces deployment to reload on each upgrade + forceReload: false + # -- Init container + # @default -- a container waiting for postgres and redis + initContainers: + - name: wait-for-postgres-redis + image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}" + imagePullPolicy: "{{ .Values.initImage.pullPolicy }}" + envFrom: + - secretRef: + name: "{{ tpl .Values.envFromSecret . }}" + command: + - /bin/sh + - -c + - dockerize -wait "tcp://$DB_HOST:$DB_PORT" -wait "tcp://$REDIS_HOST:$REDIS_PORT" -timeout 120s + # -- Launch additional containers into supersetWorker pod + extraContainers: [] + # -- Annotations to be added to supersetWorker deployment + deploymentAnnotations: {} + # -- Labels to be added to supersetWorker deployment + deploymentLabels: {} + # -- Affinity to be added to supersetWorker deployment + affinity: {} + # -- TopologySpreadConstrains to be added to supersetWorker deployments + topologySpreadConstraints: [] + # -- Annotations to be added to supersetWorker pods + podAnnotations: {} + # -- Labels to be added to supersetWorker pods + podLabels: {} + # -- Resource settings for the supersetWorker pods - these settings overwrite might existing values from the global resources object defined above. + resources: {} + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + podSecurityContext: {} + containerSecurityContext: {} + strategy: {} + # type: RollingUpdate + # rollingUpdate: + # maxSurge: 25% + # maxUnavailable: 25% + livenessProbe: + exec: + # -- Liveness probe command + # @default -- a `celery inspect ping` command + command: + - sh + - -c + - celery -A superset.tasks.celery_app:app inspect ping -d celery@$HOSTNAME + initialDelaySeconds: 120 + timeoutSeconds: 60 + failureThreshold: 3 + periodSeconds: 60 + successThreshold: 1 + # -- No startup/readiness probes by default since we don't really care about its startup time (it doesn't serve traffic) + startupProbe: {} + # -- No startup/readiness probes by default since we don't really care about its startup time (it doesn't serve traffic) + readinessProbe: {} + # -- Set priorityClassName for supersetWorker pods + priorityClassName: ~ + +# Superset beat configuration (to trigger scheduled jobs like reports) +supersetCeleryBeat: + # -- This is only required if you intend to use alerts and reports + enabled: false + # -- Sets the [pod disruption budget](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) for supersetCeleryBeat pods + podDisruptionBudget: + # -- Whether the pod disruption budget should be created + enabled: false + # -- If set, maxUnavailable must not be set - see https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget + minAvailable: 1 + # -- If set, minAvailable must not be set - see https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget + maxUnavailable: 1 + # -- Command + # @default -- a `celery beat` command + command: + - "/bin/sh" + - "-c" + - ". {{ .Values.configMountPath }}/superset_bootstrap.sh; celery --app=superset.tasks.celery_app:app beat --pidfile /tmp/celerybeat.pid --schedule /tmp/celerybeat-schedule" + # -- If true, forces deployment to reload on each upgrade + forceReload: false + # -- List of init containers + # @default -- a container waiting for postgres + initContainers: + - name: wait-for-postgres-redis + image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}" + imagePullPolicy: "{{ .Values.initImage.pullPolicy }}" + envFrom: + - secretRef: + name: "{{ tpl .Values.envFromSecret . }}" + command: + - /bin/sh + - -c + - dockerize -wait "tcp://$DB_HOST:$DB_PORT" -wait "tcp://$REDIS_HOST:$REDIS_PORT" -timeout 120s + # -- Launch additional containers into supersetCeleryBeat pods + extraContainers: [] + # -- Annotations to be added to supersetCeleryBeat deployment + deploymentAnnotations: {} + # -- Affinity to be added to supersetCeleryBeat deployment + affinity: {} + # -- TopologySpreadConstrains to be added to supersetCeleryBeat deployments + topologySpreadConstraints: [] + # -- Annotations to be added to supersetCeleryBeat pods + podAnnotations: {} + # -- Labels to be added to supersetCeleryBeat pods + podLabels: {} + # -- Resource settings for the CeleryBeat pods - these settings overwrite might existing values from the global resources object defined above. + resources: {} + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + podSecurityContext: {} + containerSecurityContext: {} + # -- Set priorityClassName for CeleryBeat pods + priorityClassName: ~ + +supersetCeleryFlower: + # -- Enables a Celery flower deployment (management UI to monitor celery jobs) + # WARNING: on superset 1.x, this requires a Superset image that has `flower<1.0.0` installed (which is NOT the case of the default images) + # flower>=1.0.0 requires Celery 5+ which Superset 1.5 does not support + enabled: false + replicaCount: 1 + # -- Sets the [pod disruption budget](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) for supersetCeleryFlower pods + podDisruptionBudget: + # -- Whether the pod disruption budget should be created + enabled: false + # -- If set, maxUnavailable must not be set - see https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget + minAvailable: 1 + # -- If set, minAvailable must not be set - see https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget + maxUnavailable: 1 + # -- Command + # @default -- a `celery flower` command + command: + - "/bin/sh" + - "-c" + - "celery --app=superset.tasks.celery_app:app flower" + service: + type: ClusterIP + annotations: {} + loadBalancerIP: ~ + port: 5555 + nodePort: + # -- (int) + http: nil + startupProbe: + httpGet: + path: /api/workers + port: flower + initialDelaySeconds: 5 + timeoutSeconds: 1 + failureThreshold: 60 + periodSeconds: 5 + successThreshold: 1 + livenessProbe: + httpGet: + path: /api/workers + port: flower + initialDelaySeconds: 5 + timeoutSeconds: 1 + failureThreshold: 3 + periodSeconds: 5 + successThreshold: 1 + readinessProbe: + httpGet: + path: /api/workers + port: flower + initialDelaySeconds: 5 + timeoutSeconds: 1 + failureThreshold: 3 + periodSeconds: 5 + successThreshold: 1 + # -- List of init containers + # @default -- a container waiting for postgres and redis + initContainers: + - name: wait-for-postgres-redis + image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}" + imagePullPolicy: "{{ .Values.initImage.pullPolicy }}" + envFrom: + - secretRef: + name: "{{ tpl .Values.envFromSecret . }}" + command: + - /bin/sh + - -c + - dockerize -wait "tcp://$DB_HOST:$DB_PORT" -wait "tcp://$REDIS_HOST:$REDIS_PORT" -timeout 120s + # -- Launch additional containers into supersetCeleryFlower pods + extraContainers: [] + # -- Annotations to be added to supersetCeleryFlower deployment + deploymentAnnotations: {} + # -- Affinity to be added to supersetCeleryFlower deployment + affinity: {} + # -- TopologySpreadConstrains to be added to supersetCeleryFlower deployments + topologySpreadConstraints: [] + # -- Annotations to be added to supersetCeleryFlower pods + podAnnotations: {} + # -- Labels to be added to supersetCeleryFlower pods + podLabels: {} + # -- Resource settings for the CeleryBeat pods - these settings overwrite might existing values from the global resources object defined above. + resources: {} + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + podSecurityContext: {} + containerSecurityContext: {} + # -- Set priorityClassName for supersetCeleryFlower pods + priorityClassName: ~ + +supersetWebsockets: + # -- This is only required if you intend to use `GLOBAL_ASYNC_QUERIES` in `ws` mode + # see https://superset.apache.org/docs/contributing/misc#async-chart-queries + enabled: false + replicaCount: 1 + # -- Sets the [pod disruption budget](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) for supersetWebsockets pods + podDisruptionBudget: + # -- Whether the pod disruption budget should be created + enabled: false + # -- If set, maxUnavailable must not be set - see https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget + minAvailable: 1 + # -- If set, minAvailable must not be set - see https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget + maxUnavailable: 1 + ingress: + path: /ws + pathType: Prefix + image: + # -- There is no official image (yet), this one is community-supported + repository: oneacrefund/superset-websocket + tag: latest + pullPolicy: IfNotPresent + # -- The config.json to pass to the server, see https://github.com/apache/superset/tree/master/superset-websocket + # Note that the configuration can also read from environment variables (which will have priority), see https://github.com/apache/superset/blob/master/superset-websocket/src/config.ts for a list of supported variables + # @default -- see `values.yaml` + config: + { + "port": 8080, + "logLevel": "debug", + "logToFile": false, + "logFilename": "app.log", + "statsd": { "host": "127.0.0.1", "port": 8125, "globalTags": [] }, + "redis": + { + "port": 6379, + "host": "127.0.0.1", + "password": "", + "db": 0, + "ssl": false, + }, + "redisStreamPrefix": "async-events-", + "jwtSecret": "CHANGE-ME", + "jwtCookieName": "async-token", + } + service: + type: ClusterIP + annotations: {} + loadBalancerIP: ~ + port: 8080 + nodePort: + # -- (int) + http: nil + command: [] + resources: {} + # -- Launch additional containers into supersetWebsockets pods + extraContainers: [] + deploymentAnnotations: {} + # -- Affinity to be added to supersetWebsockets deployment + affinity: {} + # -- TopologySpreadConstrains to be added to supersetWebsockets deployments + topologySpreadConstraints: [] + podAnnotations: {} + podLabels: {} + strategy: {} + podSecurityContext: {} + containerSecurityContext: {} + startupProbe: + httpGet: + path: /health + port: ws + initialDelaySeconds: 5 + timeoutSeconds: 1 + failureThreshold: 60 + periodSeconds: 5 + successThreshold: 1 + livenessProbe: + httpGet: + path: /health + port: ws + initialDelaySeconds: 5 + timeoutSeconds: 1 + failureThreshold: 3 + periodSeconds: 5 + successThreshold: 1 + readinessProbe: + httpGet: + path: /health + port: ws + initialDelaySeconds: 5 + timeoutSeconds: 1 + failureThreshold: 3 + periodSeconds: 5 + successThreshold: 1 + # -- Set priorityClassName for supersetWebsockets pods + priorityClassName: ~ + +init: + # Configure resources + # Warning: fab command consumes a lot of ram and can + # cause the process to be killed due to OOM if it exceeds limit + # Make sure you are giving a strong password for the admin user creation( else make sure you are changing after setup) + # Also change the admin email to your own custom email. + resources: {} + # limits: + # cpu: + # memory: + # requests: + # cpu: + # memory: + # -- Command + # @default -- a `superset_init.sh` command + command: + - "/bin/sh" + - "-c" + - ". {{ .Values.configMountPath }}/superset_bootstrap.sh; . {{ .Values.configMountPath }}/superset_init.sh" + enabled: true + jobAnnotations: + "helm.sh/hook": post-install,post-upgrade + "helm.sh/hook-delete-policy": "before-hook-creation" + loadExamples: false + createAdmin: true + adminUser: + username: admin + firstname: Superset + lastname: Admin + email: admin@superset.com + password: admin + # -- List of initContainers + # @default -- a container waiting for postgres + initContainers: + - name: wait-for-postgres + image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}" + imagePullPolicy: "{{ .Values.initImage.pullPolicy }}" + envFrom: + - secretRef: + name: "{{ tpl .Values.envFromSecret . }}" + command: + - /bin/sh + - -c + - dockerize -wait "tcp://$DB_HOST:$DB_PORT" -timeout 120s + # -- A Superset init script + # @default -- a script to create admin user and initialize roles + initscript: |- + #!/bin/sh + set -eu + echo "Upgrading DB schema..." + superset db upgrade + echo "Initializing roles..." + superset init + {{ if .Values.init.createAdmin }} + echo "Creating admin user..." + superset fab create-admin \ + --username {{ .Values.init.adminUser.username }} \ + --firstname {{ .Values.init.adminUser.firstname }} \ + --lastname {{ .Values.init.adminUser.lastname }} \ + --email {{ .Values.init.adminUser.email }} \ + --password {{ .Values.init.adminUser.password }} \ + || true + {{- end }} + {{ if .Values.init.loadExamples }} + echo "Loading examples..." + superset load_examples + {{- end }} + if [ -f "{{ .Values.extraConfigMountPath }}/import_datasources.yaml" ]; then + echo "Importing database connections.... " + superset import_datasources -p {{ .Values.extraConfigMountPath }}/import_datasources.yaml + fi + # -- Launch additional containers into init job pod + extraContainers: [] + ## Annotations to be added to init job pods + podAnnotations: {} + # Labels to be added to init job pods + podLabels: {} + podSecurityContext: {} + containerSecurityContext: {} + ## Tolerations to be added to init job pods + tolerations: [] + ## Affinity to be added to init job pods + affinity: {} + # -- TopologySpreadConstrains to be added to init job + topologySpreadConstraints: [] + # -- Set priorityClassName for init job pods + priorityClassName: ~ + +# -- Configuration values for the postgresql dependency. +# ref: https://github.com/bitnami/charts/tree/main/bitnami/postgresql +# @default -- see `values.yaml` +postgresql: + ## + ## Use the PostgreSQL chart dependency. + ## Set to false if bringing your own PostgreSQL. + enabled: true + + ## Authentication parameters + auth: + ## The name of an existing secret that contains the postgres password. + existingSecret: + ## PostgreSQL name for a custom user to create + username: superset + ## PostgreSQL password for the custom user to create. Ignored if `auth.existingSecret` with key `password` is provided + password: superset + ## PostgreSQL name for a custom database to create + database: superset + + image: + tag: "14.17.0-debian-12-r3" + + ## PostgreSQL Primary parameters + primary: + ## + ## Persistent Volume Storage configuration. + ## ref: https://kubernetes.io/docs/user-guide/persistent-volumes + persistence: + ## + ## Enable PostgreSQL persistence using Persistent Volume Claims. + enabled: true + ## + ## Persistent class + # storageClass: classname + ## + ## Access modes: + accessModes: + - ReadWriteOnce + ## PostgreSQL port + service: + ports: + postgresql: "5432" + +# -- Configuration values for the Redis dependency. +# ref: https://github.com/bitnami/charts/blob/master/bitnami/redis +# More documentation can be found here: https://artifacthub.io/packages/helm/bitnami/redis +# @default -- see `values.yaml` +redis: + ## + ## Use the redis chart dependency. + ## + ## If you are bringing your own redis, you can set the host in supersetNode.connections.redis_host + ## + ## Set to false if bringing your own redis. + enabled: true + ## + ## Set architecture to standalone/replication + architecture: standalone + ## + ## Auth configuration: + ## + auth: + ## Enable password authentication + enabled: false + ## The name of an existing secret that contains the redis password. + existingSecret: "" + ## Name of the key containing the secret. + existingSecretKey: "" + ## Redis password + password: superset + ## + ## Master configuration + ## + master: + ## + ## Image configuration + # image: + ## + ## docker registry secret names (list) + # pullSecrets: nil + ## + ## Configure persistence + persistence: + ## + ## Use a PVC to persist data. + enabled: false + ## + ## Persistent class + # storageClass: classname + ## + ## Access mode: + accessModes: + - ReadWriteOnce + +nodeSelector: {} + +tolerations: [] + +affinity: {} + +# -- TopologySpreadConstrains to be added to all deployments +topologySpreadConstraints: [] + +# -- Set priorityClassName for superset pods +priorityClassName: ~ + diff --git a/superset-values.yaml b/superset-values.yaml new file mode 100644 index 0000000..28cd90a --- /dev/null +++ b/superset-values.yaml @@ -0,0 +1,74 @@ + +image: + repository: registry.dev.k8s.transcity/reports/superset + pullPolicy: Always + + +ingress: + enabled: true + ingressClassName: ~ + annotations: + cert-manager.io/cluster-issuer: admin + cert-manager.io/common-name: superset.alpha.k8s.transcity + cert-manager.io/private-key-algorithm: ECDSA + forecastle.stakater.com/appName: Superset + forecastle.stakater.com/expose: 'true' + forecastle.stakater.com/group: Reports + forecastle.stakater.com/instance: admin + path: / + pathType: Prefix + hosts: + - superset.alpha.k8s.transcity + tls: + - hosts: + - superset.alpha.k8s.transcity + secretName: superset-tls + extraHostsRaw: [] + +extraSecretEnv: + SUPERSET_SECRET_KEY: "S737pQg5i1sIMx+rGm5i2N1WuP4ZP3fuQkcZ9lN8U8DJphVLkiFao5Uh" + +redis: + enabled: false +postgresql: + enabled: false + +supersetNode: + connections: + # -- Change in case of bringing your own redis and then also set redis.enabled:false + redis_host: "valkey" + redis_port: "6379" + redis_user: "" + # redis_password: superset + redis_cache_db: "1" + redis_celery_db: "0" + # Or SSL port is usually 6380 + # Update following for using Redis with SSL + redis_ssl: + enabled: false + ssl_cert_reqs: CERT_NONE + # You need to change below configuration incase bringing own PostgresSQL instance and also set postgresql.enabled:false + # -- Database type for Superset metadata (Supported types: "postgresql", "mysql") + db_type: "postgresql" + db_host: "superset-server" + db_port: "5432" + db_user: superset-user + db_pass: superset-pass + db_name: superset-db + +supersetCeleryBeat: + # -- This is only required if you intend to use alerts and reports + enabled: true + +supersetCeleryFlower: + # -- Enables a Celery flower deployment (management UI to monitor celery jobs) + # WARNING: on superset 1.x, this requires a Superset image that has `flower<1.0.0` installed (which is NOT the case of the default images) + # flower>=1.0.0 requires Celery 5+ which Superset 1.5 does not support + enabled: false + replicaCount: 1 + +supersetWebsockets: + # -- This is only required if you intend to use `GLOBAL_ASYNC_QUERIES` in `ws` mode + # see https://superset.apache.org/docs/contributing/misc#async-chart-queries + enabled: false + replicaCount: 1 diff --git a/superset/app/database.yaml b/superset/app/database.yaml new file mode 100644 index 0000000..ab3bca9 --- /dev/null +++ b/superset/app/database.yaml @@ -0,0 +1,105 @@ +apiVersion: kubegres.reactive-tech.io/v1 +kind: Kubegres +metadata: + name: superset-db +spec: + + replicas: 2 + image: postgres:18.0 + + database: + size: "40Gi" + storageClassName: "standard" + + backup: + schedule: "0 */1 * * *" + pvcName: superset-db-backup + volumeMount: /var/lib/backup + + env: + - name: POSTGRES_PASSWORD + valueFrom: + secretKeyRef: + name: superset-db-credentials + key: superUserPassword + + - name: POSTGRES_REPLICATION_PASSWORD + valueFrom: + secretKeyRef: + name: superset-db-credentials + key: replicationUserPassword + scheduler: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchExpressions: + - key: app + operator: In + values: + - superset-db + topologyKey: kubernetes.io/hostname + weight: 100 +--- +apiVersion: v1 +kind: Secret +metadata: + name: superset-db-credentials +type: Opaque +stringData: + superUserPassword: superset-admin + replicationUserPassword: superset-replication +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: superset-db-backup +spec: + storageClassName: "critical" + accessModes: + - ReadWriteOnce + resources: + requests: + storage: "200Mi" +--- +apiVersion: db-caretaker.dev/v1alpha1 +kind: DatabaseServer +metadata: + name: superset-db +spec: + connection: + driver: postgres + host: superset-db.reports-superset + user: + value: postgres + password: + secretKeyRef: + name: superset-db-credentials + key: superUserPassword +--- +apiVersion: db-caretaker.dev/v1alpha1 +kind: Database +metadata: + name: superset +spec: + serverRef: + name: superset-db + name: superset + dropOnDelete: true +--- +apiVersion: db-caretaker.dev/v1alpha1 +kind: DatabaseUser +metadata: + name: superset +spec: + databaseRef: + name: superset + login: superset + role: dbowner + + secretHostKey: DB_HOST + secretDatabaseKey: DB_NAME + secretPortKey: DB_PORT + secretUserKey: DB_USER + secretPasswordKey: DB_PASS diff --git a/superset/app/kustomization.yaml b/superset/app/kustomization.yaml new file mode 100644 index 0000000..9de242a --- /dev/null +++ b/superset/app/kustomization.yaml @@ -0,0 +1,61 @@ +namespace: reports-superset +resources: +- ../base +- namespace.yaml +- database.yaml + +patches: +- patch: |- + - op: remove + path: /stringData/DB_HOST + - op: remove + path: /stringData/DB_PORT + - op: remove + path: /stringData/DB_NAME + - op: remove + path: /stringData/DB_USER + - op: remove + path: /stringData/DB_PASS + target: + version: v1 + kind: Secret + name: superset-env +- patch: |- + - op: add + path: /spec/template/spec/containers/0/envFrom/- + value: + secretRef: + name: "superset-db-user" + target: + group: apps + version: v1 + kind: Deployment + labelSelector: "release=superset" + +- patch: |- + - op: add + path: /spec/template/spec/initContainers/0/envFrom/- + value: + secretRef: + name: "superset-db-user" + target: + group: apps + version: v1 + kind: Deployment + name: superset(-celerybeat|-flower|-worker)? + +- patch: |- + - op: add + path: /spec/template/spec/containers/0/envFrom/- + value: + secretRef: + name: "superset-db-user" + - op: add + path: /spec/template/spec/initContainers/0/envFrom/- + value: + secretRef: + name: "superset-db-user" + target: + group: batch + version: v1 + kind: Job diff --git a/superset/app/namespace.yaml b/superset/app/namespace.yaml new file mode 100644 index 0000000..47ef3b1 --- /dev/null +++ b/superset/app/namespace.yaml @@ -0,0 +1,8 @@ + +apiVersion: v1 +kind: Namespace +metadata: + labels: + kubernetes.io/metadata.name: reports-superset + name: reports-superset + diff --git a/superset/base/kustomization.yaml b/superset/base/kustomization.yaml new file mode 100644 index 0000000..b4b082e --- /dev/null +++ b/superset/base/kustomization.yaml @@ -0,0 +1,3 @@ +resources: +- valkey.yaml +- superset.yaml diff --git a/superset/base/superset.yaml b/superset/base/superset.yaml new file mode 100644 index 0000000..08c9345 --- /dev/null +++ b/superset/base/superset.yaml @@ -0,0 +1,472 @@ +--- +# Source: superset/templates/secret-env.yaml +apiVersion: v1 +kind: Secret +metadata: + name: superset-env + namespace: reports-superset + labels: + app: superset + chart: superset-0.15.2 + release: "superset" + heritage: "Helm" +type: Opaque +stringData: + REDIS_HOST: "valkey" + REDIS_USER: "" + REDIS_PORT: "6379" + REDIS_PROTO: "redis" + REDIS_DB: "1" + REDIS_CELERY_DB: "0" + DB_HOST: "superset-server" + DB_PORT: "5432" + DB_USER: "superset-user" + DB_PASS: "superset-pass" + DB_NAME: "superset-db" + SUPERSET_SECRET_KEY: "S737pQg5i1sIMx+rGm5i2N1WuP4ZP3fuQkcZ9lN8U8DJphVLkiFao5Uh" +--- +# Source: superset/templates/secret-superset-config.yaml +apiVersion: v1 +kind: Secret +metadata: + name: superset-config + namespace: reports-superset + labels: + app: superset + chart: superset-0.15.2 + release: "superset" + heritage: "Helm" +type: Opaque +stringData: + superset_config.py: | + + import os + from flask_caching.backends.rediscache import RedisCache + + def env(key, default=None): + return os.getenv(key, default) + + # Redis Base URL + REDIS_BASE_URL=f"{env('REDIS_PROTO')}://{env('REDIS_HOST')}:{env('REDIS_PORT')}" + + # Redis URL Params + REDIS_URL_PARAMS = "" + + # Build Redis URLs + CACHE_REDIS_URL = f"{REDIS_BASE_URL}/{env('REDIS_DB', 1)}{REDIS_URL_PARAMS}" + CELERY_REDIS_URL = f"{REDIS_BASE_URL}/{env('REDIS_CELERY_DB', 0)}{REDIS_URL_PARAMS}" + + MAPBOX_API_KEY = env('MAPBOX_API_KEY', '') + CACHE_CONFIG = { + 'CACHE_TYPE': 'RedisCache', + 'CACHE_DEFAULT_TIMEOUT': 300, + 'CACHE_KEY_PREFIX': 'superset_', + 'CACHE_REDIS_URL': CACHE_REDIS_URL, + } + DATA_CACHE_CONFIG = CACHE_CONFIG + + + if os.getenv("SQLALCHEMY_DATABASE_URI"): + SQLALCHEMY_DATABASE_URI = os.getenv("SQLALCHEMY_DATABASE_URI") + else: + SQLALCHEMY_DATABASE_URI = f"postgresql+psycopg2://{os.getenv('DB_USER')}:{os.getenv('DB_PASS')}@{os.getenv('DB_HOST')}:{os.getenv('DB_PORT')}/{os.getenv('DB_NAME')}" + + SQLALCHEMY_TRACK_MODIFICATIONS = True + + class CeleryConfig: + imports = ("superset.sql_lab", ) + broker_url = CELERY_REDIS_URL + result_backend = CELERY_REDIS_URL + + CELERY_CONFIG = CeleryConfig + RESULTS_BACKEND = RedisCache( + host=env('REDIS_HOST'), + port=env('REDIS_PORT'), + key_prefix='superset_results', + ) + + + + + superset_init.sh: | + #!/bin/sh + set -eu + echo "Upgrading DB schema..." + superset db upgrade + echo "Initializing roles..." + superset init + + echo "Creating admin user..." + superset fab create-admin \ + --username admin \ + --firstname Superset \ + --lastname Admin \ + --email admin@superset.com \ + --password admin \ + || true + + if [ -f "/app/configs/import_datasources.yaml" ]; then + echo "Importing database connections.... " + superset import_datasources -p /app/configs/import_datasources.yaml + fi + superset_bootstrap.sh: | + #!/bin/bash + if [ ! -f ~/bootstrap ]; then echo "Running Superset with uid 0" > ~/bootstrap; fi +--- +# Source: superset/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: superset + namespace: reports-superset + labels: + app: superset + chart: superset-0.15.2 + release: superset + heritage: Helm +spec: + type: ClusterIP + ports: + - port: 8088 + targetPort: http + protocol: TCP + name: http + selector: + app: superset + release: superset +--- +# Source: superset/templates/deployment-beat.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: superset-celerybeat + namespace: reports-superset + labels: + app: superset-celerybeat + chart: superset-0.15.2 + release: superset + heritage: Helm +spec: + # This must be a singleton + replicas: 1 + selector: + matchLabels: + app: superset-celerybeat + release: superset + template: + metadata: + annotations: + checksum/superset_config.py: 7c2be7b498705f47dbb4e27b852f68352f3b47b0d10ec15959ef2f5616f0e4d0 + checksum/superset_bootstrap.sh: dc9a47141051ced34960c313860a55e03eb48c1fa36a0ed25c03ad60cd3b5c48 + checksum/connections: 0cda20857b58c1cc042f2f6128f279790c0113c8b54544abeef2125c3aaf89e3 + checksum/extraConfigs: 44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a + checksum/extraSecrets: 44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a + checksum/extraSecretEnv: cf425cecd61214dd2a8e0a09e410c147105e5d93a4e4ccbfe5b4a1bf8da5aacb + checksum/configOverrides: 44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a + checksum/configOverridesFiles: 44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a + labels: + app: "superset-celerybeat" + release: superset + spec: + securityContext: + runAsUser: 0 + initContainers: + - command: + - /bin/sh + - -c + - dockerize -wait "tcp://$DB_HOST:$DB_PORT" -wait "tcp://$REDIS_HOST:$REDIS_PORT" + -timeout 120s + envFrom: + - secretRef: + name: 'superset-env' + image: 'apache/superset:dockerize' + imagePullPolicy: 'IfNotPresent' + name: wait-for-postgres-redis + containers: + - name: "superset-celerybeat" + image: "registry.dev.k8s.transcity/reports/superset:5.0.0" + imagePullPolicy: Always + command: ["/bin/sh","-c",". /app/pythonpath/superset_bootstrap.sh; celery --app=superset.tasks.celery_app:app beat --pidfile /tmp/celerybeat.pid --schedule /tmp/celerybeat-schedule"] + env: + - name: "SUPERSET_PORT" + value: "8088" + envFrom: + - secretRef: + name: "superset-env" + volumeMounts: + - name: superset-config + mountPath: "/app/pythonpath" + readOnly: true + resources: + {} + volumes: + - name: superset-config + secret: + secretName: superset-config +--- +# Source: superset/templates/deployment-worker.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: superset-worker + namespace: reports-superset + labels: + app: superset-worker + chart: superset-0.15.2 + release: superset + heritage: Helm +spec: + replicas: 1 + selector: + matchLabels: + app: superset-worker + release: superset + template: + metadata: + annotations: + checksum/superset_config.py: 7c2be7b498705f47dbb4e27b852f68352f3b47b0d10ec15959ef2f5616f0e4d0 + checksum/superset_bootstrap.sh: dc9a47141051ced34960c313860a55e03eb48c1fa36a0ed25c03ad60cd3b5c48 + checksum/connections: 0cda20857b58c1cc042f2f6128f279790c0113c8b54544abeef2125c3aaf89e3 + checksum/extraConfigs: 44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a + checksum/extraSecrets: 44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a + checksum/extraSecretEnv: cf425cecd61214dd2a8e0a09e410c147105e5d93a4e4ccbfe5b4a1bf8da5aacb + checksum/configOverrides: 44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a + checksum/configOverridesFiles: 44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a + labels: + app: superset-worker + release: superset + spec: + securityContext: + runAsUser: 0 + initContainers: + - command: + - /bin/sh + - -c + - dockerize -wait "tcp://$DB_HOST:$DB_PORT" -wait "tcp://$REDIS_HOST:$REDIS_PORT" + -timeout 120s + envFrom: + - secretRef: + name: 'superset-env' + image: 'apache/superset:dockerize' + imagePullPolicy: 'IfNotPresent' + name: wait-for-postgres-redis + containers: + - name: superset + image: "registry.dev.k8s.transcity/reports/superset:5.0.0" + imagePullPolicy: Always + command: ["/bin/sh","-c",". /app/pythonpath/superset_bootstrap.sh; celery --app=superset.tasks.celery_app:app worker"] + env: + - name: "SUPERSET_PORT" + value: "8088" + envFrom: + - secretRef: + name: "superset-env" + volumeMounts: + - name: superset-config + mountPath: "/app/pythonpath" + readOnly: true + livenessProbe: + exec: + command: + - sh + - -c + - celery -A superset.tasks.celery_app:app inspect ping -d celery@$HOSTNAME + failureThreshold: 3 + initialDelaySeconds: 120 + periodSeconds: 60 + successThreshold: 1 + timeoutSeconds: 60 + resources: + {} + volumes: + - name: superset-config + secret: + secretName: superset-config +--- +# Source: superset/templates/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: superset + namespace: reports-superset + labels: + app: superset + chart: superset-0.15.2 + release: superset + heritage: Helm +spec: + replicas: 1 + selector: + matchLabels: + app: superset + release: superset + template: + metadata: + annotations: + # Force reload on config changes + checksum/superset_config.py: 7c2be7b498705f47dbb4e27b852f68352f3b47b0d10ec15959ef2f5616f0e4d0 + checksum/superset_init.sh: e6b1e8eac1f7a79a07a6c72a0e2ee6e09654eeb439c6bbe61bfd676917c41e02 + checksum/superset_bootstrap.sh: dc9a47141051ced34960c313860a55e03eb48c1fa36a0ed25c03ad60cd3b5c48 + checksum/connections: 0cda20857b58c1cc042f2f6128f279790c0113c8b54544abeef2125c3aaf89e3 + checksum/extraConfigs: 44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a + checksum/extraSecrets: 44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a + checksum/extraSecretEnv: cf425cecd61214dd2a8e0a09e410c147105e5d93a4e4ccbfe5b4a1bf8da5aacb + checksum/configOverrides: 44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a + checksum/configOverridesFiles: 44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a + labels: + app: superset + release: superset + spec: + securityContext: + runAsUser: 0 + initContainers: + - command: + - /bin/sh + - -c + - dockerize -wait "tcp://$DB_HOST:$DB_PORT" -timeout 120s + envFrom: + - secretRef: + name: 'superset-env' + image: 'apache/superset:dockerize' + imagePullPolicy: 'IfNotPresent' + name: wait-for-postgres + containers: + - name: superset + image: "registry.dev.k8s.transcity/reports/superset:5.0.0" + imagePullPolicy: Always + command: ["/bin/sh","-c",". /app/pythonpath/superset_bootstrap.sh; /usr/bin/run-server.sh"] + env: + - name: "SUPERSET_PORT" + value: "8088" + envFrom: + - secretRef: + name: "superset-env" + volumeMounts: + - name: superset-config + mountPath: "/app/pythonpath" + readOnly: true + ports: + - name: http + containerPort: 8088 + protocol: TCP + startupProbe: + failureThreshold: 60 + httpGet: + path: /health + port: http + initialDelaySeconds: 15 + periodSeconds: 5 + successThreshold: 1 + timeoutSeconds: 1 + readinessProbe: + failureThreshold: 3 + httpGet: + path: /health + port: http + initialDelaySeconds: 15 + periodSeconds: 15 + successThreshold: 1 + timeoutSeconds: 1 + livenessProbe: + failureThreshold: 3 + httpGet: + path: /health + port: http + initialDelaySeconds: 15 + periodSeconds: 15 + successThreshold: 1 + timeoutSeconds: 1 + resources: + {} + volumes: + - name: superset-config + secret: + secretName: superset-config +--- +# Source: superset/templates/ingress.yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: superset + namespace: reports-superset + labels: + app: superset + chart: superset-0.15.2 + release: superset + heritage: Helm + annotations: + cert-manager.io/cluster-issuer: admin + cert-manager.io/common-name: superset.alpha.k8s.transcity + cert-manager.io/private-key-algorithm: ECDSA + forecastle.stakater.com/appName: Superset + forecastle.stakater.com/expose: "true" + forecastle.stakater.com/group: Reports + forecastle.stakater.com/instance: admin +spec: + tls: + - hosts: + - superset.alpha.k8s.transcity + secretName: superset-tls + rules: + - host: superset.alpha.k8s.transcity + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: superset + port: + name: http +--- +# Source: superset/templates/init-job.yaml +apiVersion: batch/v1 +kind: Job +metadata: + name: superset-init-db + namespace: reports-superset + labels: + app: superset + chart: superset-0.15.2 + release: superset + heritage: Helm + annotations: + helm.sh/hook: post-install,post-upgrade + helm.sh/hook-delete-policy: before-hook-creation +spec: + template: + metadata: + name: superset-init-db + spec: + securityContext: + runAsUser: 0 + initContainers: + - command: + - /bin/sh + - -c + - dockerize -wait "tcp://$DB_HOST:$DB_PORT" -timeout 120s + envFrom: + - secretRef: + name: 'superset-env' + image: 'apache/superset:dockerize' + imagePullPolicy: 'IfNotPresent' + name: wait-for-postgres + containers: + - name: superset-init-db + image: "registry.dev.k8s.transcity/reports/superset:5.0.0" + envFrom: + - secretRef: + name: superset-env + imagePullPolicy: Always + volumeMounts: + - name: superset-config + mountPath: "/app/pythonpath" + readOnly: true + command: ["/bin/sh","-c",". /app/pythonpath/superset_bootstrap.sh; . /app/pythonpath/superset_init.sh"] + resources: + {} + volumes: + - name: superset-config + secret: + secretName: superset-config + restartPolicy: Never diff --git a/superset/base/valkey.yaml b/superset/base/valkey.yaml new file mode 100644 index 0000000..eabbf15 --- /dev/null +++ b/superset/base/valkey.yaml @@ -0,0 +1,191 @@ +--- +# Source: valkey/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: valkey + labels: + helm.sh/chart: valkey-0.9.3 + app.kubernetes.io/name: valkey + app.kubernetes.io/instance: valkey + app.kubernetes.io/version: "9.0.1" + app.kubernetes.io/managed-by: Helm +automountServiceAccountToken: false +--- +# Source: valkey/templates/init_config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: valkey-init-scripts + labels: + helm.sh/chart: valkey-0.9.3 + app.kubernetes.io/name: valkey + app.kubernetes.io/instance: valkey + app.kubernetes.io/version: "9.0.1" + app.kubernetes.io/managed-by: Helm +data: + init.sh: |- + #!/bin/sh + set -eu + + # Default config paths + VALKEY_CONFIG=${VALKEY_CONFIG_PATH:-/data/conf/valkey.conf} + + LOGFILE="/data/init.log" + DATA_DIR="/data/conf" + + # Logging function (outputs to stderr and file) + log() { + echo "$(date) $1" | tee -a "$LOGFILE" >&2 + } + + # Clean old log if requested + if [ "${KEEP_OLD_LOGS:-false}" != "true" ]; then + rm -f "$LOGFILE" + fi + + if [ -f "$LOGFILE" ]; then + log "Detected restart of this instance ($HOSTNAME)" + fi + + log "Creating configuration in $DATA_DIR..." + mkdir -p "$DATA_DIR" + rm -f "$VALKEY_CONFIG" + + + # Base valkey.conf + log "Generating base valkey.conf" + { + echo "port 6379" + echo "protected-mode no" + echo "bind * -::*" + echo "dir /data" + } >>"$VALKEY_CONFIG" + + # Append extra configs if present + if [ -f /usr/local/etc/valkey/valkey.conf ]; then + log "Appending /usr/local/etc/valkey/valkey.conf" + cat /usr/local/etc/valkey/valkey.conf >>"$VALKEY_CONFIG" + fi + if [ -d /extravalkeyconfigs ]; then + log "Appending files in /extravalkeyconfigs/" + cat /extravalkeyconfigs/* >>"$VALKEY_CONFIG" + fi +--- +# Source: valkey/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: valkey + labels: + helm.sh/chart: valkey-0.9.3 + app.kubernetes.io/name: valkey + app.kubernetes.io/instance: valkey + app.kubernetes.io/version: "9.0.1" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: primary +spec: + type: ClusterIP + ports: + - port: 6379 + targetPort: tcp + protocol: TCP + name: tcp + selector: + app.kubernetes.io/name: valkey + app.kubernetes.io/instance: valkey +--- +# Source: valkey/templates/deploy_valkey.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: valkey + labels: + helm.sh/chart: valkey-0.9.3 + app.kubernetes.io/name: valkey + app.kubernetes.io/instance: valkey + app.kubernetes.io/version: "9.0.1" + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + strategy: + type: RollingUpdate + selector: + matchLabels: + app.kubernetes.io/name: valkey + app.kubernetes.io/instance: valkey + template: + metadata: + labels: + app.kubernetes.io/name: valkey + app.kubernetes.io/instance: valkey + annotations: + checksum/initconfig: 085c7380f8b46ec02c949176200b2290 + spec: + + automountServiceAccountToken: false + serviceAccountName: valkey + securityContext: + fsGroup: 1000 + runAsGroup: 1000 + runAsUser: 1000 + initContainers: + - name: valkey-init + image: docker.io/valkey/valkey:9.0.1 + imagePullPolicy: IfNotPresent + securityContext: + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + runAsUser: 1000 + command: [ "/scripts/init.sh" ] + volumeMounts: + - name: valkey-data + mountPath: /data + - name: scripts + mountPath: /scripts + containers: + - name: valkey + image: docker.io/valkey/valkey:9.0.1 + imagePullPolicy: IfNotPresent + command: [ "valkey-server" ] + args: [ "/data/conf/valkey.conf" ] + securityContext: + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + runAsUser: 1000 + env: + - name: VALKEY_LOGLEVEL + value: "notice" + ports: + - name: tcp + containerPort: 6379 + protocol: TCP + startupProbe: + exec: + command: [ "sh", "-c", "valkey-cli ping" ] + livenessProbe: + exec: + command: [ "sh", "-c", "valkey-cli ping" ] + resources: + limits: + cpu: 500m + memory: 1Gi + requests: + cpu: 100m + memory: 128Mi + volumeMounts: + - name: valkey-data + mountPath: /data + volumes: + - name: scripts + configMap: + name: valkey-init-scripts + defaultMode: 0555 + - name: valkey-data + emptyDir: {} diff --git a/superset/local/kustomization.yaml b/superset/local/kustomization.yaml new file mode 100644 index 0000000..6fe1b10 --- /dev/null +++ b/superset/local/kustomization.yaml @@ -0,0 +1,78 @@ +resources: +- ../app + +images: +- name: registry.dev.k8s.transcity/reports/superset + newName: 767397786784.dkr.ecr.eu-west-3.amazonaws.com/reports/superset +#- name: registry.dev.k8s.transcity/sds/ui-admin +# newName: 767397786784.dkr.ecr.eu-west-3.amazonaws.com/sds/ui-admin +#- name: registry.dev.k8s.transcity/sds/puppeteer +# newName: 767397786784.dkr.ecr.eu-west-3.amazonaws.com/sds/puppeteer + +patches: +#- patch: |- +# apiVersion: apps/v1 +# kind: Deployment +# metadata: +# name: sds-api +# spec: +# template: +# spec: +# containers: +# - name: api +# env: +# - name: KEYCLOAK_URL +# value: "https://keycloak.demo.aws.myseamlesstravel.com" +#- patch: |- +# apiVersion: apps/v1 +# kind: Deployment +# metadata: +# name: sds-ui-admin +# spec: +# template: +# spec: +# containers: +# - name: api +# env: +# - name: KEYCLOAK_URL +# value: "https://keycloak.demo.aws.myseamlesstravel.com" +- patch: |- + - op: replace + path: /metadata/annotations/cert-manager.io~1common-name + value: superset.demo.aws.myseamlesstravel.com + - op: replace + path: /spec/rules/0/host + value: superset.demo.aws.myseamlesstravel.com + - op: replace + path: /spec/tls/0/hosts/0 + value: superset.demo.aws.myseamlesstravel.com + target: + group: networking.k8s.io + version: v1 + kind: Ingress + name: superset + +- target: + kind: StatefulSet + patch: |- + apiVersion: apps/v1 + kind: StatefulSet + metadata: + name: all + spec: + template: + spec: + nodeSelector: + "workload": "transcity-pg" +- target: + kind: Deployment + patch: |- + apiVersion: apps/v1 + kind: Deployment + metadata: + name: all + spec: + template: + spec: + nodeSelector: + "workload": "transcity-pg"