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 0000000..5c0487f Binary files /dev/null and b/es_elt/src/es_elt/__pycache__/__init__.cpython-312.pyc differ 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 0000000..4d93c73 Binary files /dev/null and b/es_elt/src/es_elt/__pycache__/config.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/__pycache__/main.cpython-312.pyc b/es_elt/src/es_elt/__pycache__/main.cpython-312.pyc new file mode 100644 index 0000000..b09f9a2 Binary files /dev/null and b/es_elt/src/es_elt/__pycache__/main.cpython-312.pyc differ 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 0000000..e9a0bb4 Binary files /dev/null and b/es_elt/src/es_elt/xml/__pycache__/__init__.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/__init__.py b/es_elt/src/es_elt/xml/audit_data/__init__.py new file mode 100644 index 0000000..b2a4ba5 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/__init__.py @@ -0,0 +1 @@ +# nothing here diff --git a/es_elt/src/es_elt/xml/audit_data/__pycache__/__init__.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..ffd6045 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/__pycache__/__init__.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/acm/__init__.py b/es_elt/src/es_elt/xml/audit_data/acm/__init__.py new file mode 100644 index 0000000..bd7422a --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/acm/__init__.py @@ -0,0 +1,35 @@ +from es_elt.xml.audit_data.acm.user_group import ActionStatus +from es_elt.xml.audit_data.acm.user_group import AuditMessages as GroupAuditMessages +from es_elt.xml.audit_data.acm.user_group import ( + AuditMessagesType as GroupAuditMessagesType, +) +from es_elt.xml.audit_data.acm.user_group import ( + AuditMessageType as GroupAuditMessageType, +) +from es_elt.xml.audit_data.acm.user_group import UserGroupAuditExchange +from es_elt.xml.audit_data.acm.user_login import AuditMessages as LoginAuditMessages +from es_elt.xml.audit_data.acm.user_login import ( + AuditMessagesType as LoginAuditMessagesType, +) +from es_elt.xml.audit_data.acm.user_login import ( + AuditMessageType as LoginAuditMessageType, +) +from es_elt.xml.audit_data.acm.user_login import ( + ConnexionStatus, + UserLoginAuditExchange, + UserLoginAuditExchangeUserGroups, +) + +__all__ = [ + "ActionStatus", + "GroupAuditMessageType", + "GroupAuditMessages", + "GroupAuditMessagesType", + "UserGroupAuditExchange", + "LoginAuditMessageType", + "LoginAuditMessages", + "LoginAuditMessagesType", + "ConnexionStatus", + "UserLoginAuditExchange", + "UserLoginAuditExchangeUserGroups", +] diff --git a/es_elt/src/es_elt/xml/audit_data/acm/__pycache__/__init__.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/acm/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..9d13368 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/acm/__pycache__/__init__.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/acm/__pycache__/user_group.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/acm/__pycache__/user_group.cpython-312.pyc new file mode 100644 index 0000000..545a443 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/acm/__pycache__/user_group.cpython-312.pyc differ 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 0000000..3251a2b Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/acm/__pycache__/user_login.cpython-312.pyc differ 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 0000000..fbd45b3 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/alm/__pycache__/__init__.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/alm/__pycache__/action_list.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/alm/__pycache__/action_list.cpython-312.pyc new file mode 100644 index 0000000..e80762b Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/alm/__pycache__/action_list.cpython-312.pyc differ 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 0000000..862e363 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/bpm/__pycache__/__init__.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/bpm/__pycache__/configuration_parameters.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/bpm/__pycache__/configuration_parameters.cpython-312.pyc new file mode 100644 index 0000000..9272c61 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/bpm/__pycache__/configuration_parameters.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/bpm/__pycache__/ticketing_conf_item_creation.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/bpm/__pycache__/ticketing_conf_item_creation.cpython-312.pyc new file mode 100644 index 0000000..1130546 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/bpm/__pycache__/ticketing_conf_item_creation.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/bpm/__pycache__/ticketing_set_creation.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/bpm/__pycache__/ticketing_set_creation.cpython-312.pyc new file mode 100644 index 0000000..455b460 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/bpm/__pycache__/ticketing_set_creation.cpython-312.pyc differ 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 0000000..c7ffff4 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/bpm/__pycache__/ticketing_set_publish.cpython-312.pyc differ 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 0000000..ad7d7c1 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/clm/__pycache__/__init__.cpython-312.pyc differ 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 0000000..ae95486 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/clm/__pycache__/customer_claim.cpython-312.pyc differ 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 0000000..3f94e00 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/__init__.cpython-312.pyc differ 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 0000000..ebd3f4b Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/apportionment_using_capping_ratio_plugin_details.cpython-312.pyc differ 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 0000000..46192ad Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/clearing_operation.cpython-312.pyc differ 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 0000000..ba8942d Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/contract_apportionment.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/fee_contract.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/fee_contract.cpython-312.pyc new file mode 100644 index 0000000..864e70f Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/fee_contract.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/fixed_origin_destination_apportionment_details.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/fixed_origin_destination_apportionment_details.cpython-312.pyc new file mode 100644 index 0000000..7f60524 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/fixed_origin_destination_apportionment_details.cpython-312.pyc differ 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 0000000..aa72d98 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/fixed_origin_destination_apportionment_errors.cpython-312.pyc differ 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 0000000..f024a9f Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/manual_settlement_item_audit.cpython-312.pyc differ 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 0000000..482e9f3 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/media_consumptions_apportionment.cpython-312.pyc differ 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 0000000..312efdd Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/settlement_period.cpython-312.pyc differ 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 0000000..2d7892e Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/clr/__pycache__/transaction_apportionment.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/clr/apportionment_using_capping_ratio_plugin_details.py b/es_elt/src/es_elt/xml/audit_data/clr/apportionment_using_capping_ratio_plugin_details.py new file mode 100644 index 0000000..917fe16 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/clr/apportionment_using_capping_ratio_plugin_details.py @@ -0,0 +1,260 @@ +from __future__ import annotations + +from decimal import Decimal + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +from es_elt.xml.common.headers import HeadersType +from es_elt.xml.common.localized import LocalizedBusinessEntity, LocalizedBusinessRole + +__NAMESPACE__ = "http://www.thales.dc/ApportionmentUsingCappingRatioPluginDetails" + + +class CappingRatioApportionmentItemType(BaseModel): + """ + Details of apportionment for a leg. + + :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 + :ivar allocated_amount_without_capping: amount (positive or + negative) allocated to the Clearing Participant if the + apportionment were performed without capping + """ + + 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, + } + ) + allocated_amount_without_capping: Decimal = field( + metadata={ + "name": "AllocatedAmountWithoutCapping", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LegApportionmentApportionmentItems(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + apportionment_item: list[CappingRatioApportionmentItemType] = field( + default_factory=list, + metadata={ + "name": "ApportionmentItem", + "type": "Element", + "namespace": "", + }, + ) + + +class LegApportionment(BaseModel): + """ + Details of apportionment for a leg. + + :ivar leg_id: + :ivar apportionment_items: Output from apportionment + """ + + model_config = ConfigDict(defer_build=True) + leg_id: str = field( + metadata={ + "name": "LegId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + apportionment_items: None | LegApportionmentApportionmentItems = field( + default=None, + metadata={ + "name": "ApportionmentItems", + "type": "Element", + "namespace": "", + }, + ) + + +class ApportionmentUsingCappingRatioPluginDetailsAuditExchangeDailyMediaConsumptionsDailyMediaConsumptionLegApportionments( + BaseModel +): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + leg_apportionment: list[LegApportionment] = field( + default_factory=list, + metadata={ + "name": "LegApportionment", + "type": "Element", + "namespace": "", + }, + ) + + +class ApportionmentUsingCappingRatioPluginDetailsAuditExchangeDailyMediaConsumptionsDailyMediaConsumption( + BaseModel +): + """ + :ivar daily_media_consumption_id: + :ivar leg_apportionments: Apportionment per leg + """ + + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + daily_media_consumption_id: str = field( + metadata={ + "name": "DailyMediaConsumptionId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + leg_apportionments: ApportionmentUsingCappingRatioPluginDetailsAuditExchangeDailyMediaConsumptionsDailyMediaConsumptionLegApportionments = field( + metadata={ + "name": "LegApportionments", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class ApportionmentUsingCappingRatioPluginDetailsAuditExchangeDailyMediaConsumptions( + BaseModel +): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + daily_media_consumption: list[ + ApportionmentUsingCappingRatioPluginDetailsAuditExchangeDailyMediaConsumptionsDailyMediaConsumption + ] = field( + default_factory=list, + metadata={ + "name": "DailyMediaConsumption", + "type": "Element", + "namespace": "", + }, + ) + + +class ApportionmentUsingCappingRatioPluginDetailsAuditExchange(BaseModel): + """ + Details of apportionment using capping ratio plugin for a contractId. + + :ivar contract_id: + :ivar sequence: The ordering sequence number of this contract's + apportionment. + :ivar daily_media_consumptions: + """ + + model_config = ConfigDict(defer_build=True) + contract_id: str = field( + metadata={ + "name": "ContractId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + sequence: int = field( + metadata={ + "name": "Sequence", + "type": "Element", + "namespace": "", + "required": True, + } + ) + daily_media_consumptions: ApportionmentUsingCappingRatioPluginDetailsAuditExchangeDailyMediaConsumptions = field( + metadata={ + "name": "DailyMediaConsumptions", + "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: ApportionmentUsingCappingRatioPluginDetailsAuditExchange = 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": "", + }, + ) + apportionment_using_capping_ratio_plugin_details_xsd_version: str = field( + const=True, + default="1.1", + metadata={ + "name": "ApportionmentUsingCappingRatioPluginDetailsXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/ApportionmentUsingCappingRatioPluginDetails" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/clr/clearing_operation.py b/es_elt/src/es_elt/xml/audit_data/clr/clearing_operation.py new file mode 100644 index 0000000..dd479ca --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/clr/clearing_operation.py @@ -0,0 +1,108 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +from es_elt.xml.common.clearing_item_type import FeeData +from es_elt.xml.common.headers import HeadersType + +__NAMESPACE__ = "http://www.thales.dc/ClearingOperation" + + +class ClearingOperationAuditExchangeFees(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + fee: list[FeeData] = field( + default_factory=list, + metadata={ + "name": "Fee", + "type": "Element", + "namespace": "", + }, + ) + + +class ClearingOperationAuditExchange(BaseModel): + """ + clr:clearing.operation.get: At transaction reception. + + :ivar transaction_id: The transaction id (in case of + BOMessage/DeviceMessage) + :ivar contract_id: The contract Id. + :ivar fees: Fees information + """ + + model_config = ConfigDict(defer_build=True) + transaction_id: str = field( + metadata={ + "name": "TransactionId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + contract_id: str = field( + metadata={ + "name": "ContractId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + fees: None | ClearingOperationAuditExchangeFees = field( + default=None, + metadata={ + "name": "Fees", + "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: ClearingOperationAuditExchange = 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": "", + }, + ) + clearing_operation_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "ClearingOperationXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/ClearingOperation" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/clr/contract_apportionment.py b/es_elt/src/es_elt/xml/audit_data/clr/contract_apportionment.py new file mode 100644 index 0000000..858a814 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/clr/contract_apportionment.py @@ -0,0 +1,371 @@ +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.clearing_item_type import ( + ApportionmentItemsType, + ContractRuleDetails, + SettlementItemsType, +) +from es_elt.xml.common.headers import HeadersType +from es_elt.xml.common.localized import ( + LocalizedCappingRule, + LocalizedJourneyDefinition, + LocalizedNonTransitProductCode, + LocalizedProductCode, + LocalizedSupplementProductCode, +) +from es_elt.xml.common.media_identification import MediaIdentification + +__NAMESPACE__ = "http://www.thales.dc/ContractApportionment" + + +class Leg(BaseModel): + """ + :ivar leg_id: Unique identifier for a leg. Between multiple + reconstructions, the legId will be kept constant if the leg did + not change + """ + + model_config = ConfigDict(defer_build=True) + leg_id: str = field( + metadata={ + "name": "LegId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class ContractApportionmentAuditExchangeContractRuleDetails(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + contract_rule_detail: list[ContractRuleDetails] = field( + default_factory=list, + metadata={ + "name": "ContractRuleDetail", + "type": "Element", + "namespace": "", + }, + ) + + +class DailyMediaConsumptionLegs(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + leg: list[Leg] = field( + default_factory=list, + metadata={ + "name": "Leg", + "type": "Element", + "namespace": "", + }, + ) + + +class DailyMediaConsumption(BaseModel): + """ + :ivar daily_media_consumption_id: Id of the daily media consumption + that was involved in this payment request + :ivar legs: Legs + """ + + model_config = ConfigDict(defer_build=True) + daily_media_consumption_id: str = field( + metadata={ + "name": "DailyMediaConsumptionId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + legs: None | DailyMediaConsumptionLegs = field( + default=None, + metadata={ + "name": "Legs", + "type": "Element", + "namespace": "", + }, + ) + + +class ContractApportionmentAuditExchangeDailyMediaConsumptions(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + daily_media_consumption: list[DailyMediaConsumption] = field( + default_factory=list, + metadata={ + "name": "DailyMediaConsumption", + "type": "Element", + "namespace": "", + }, + ) + + +class ContractApportionmentAuditExchange(BaseModel): + """ + clr_apportionment_get: At apportionment creation Apportionment of a + fraction of contract from a payer to a payee's account during a + settlement period. + + :ivar apportionment_items: + :ivar contract_rule_details: Sorted rule details + :ivar settlement_items: + :ivar amount_to_apportion: The total revenue to be apportioned among + all the stakeholder + :ivar contract_id: The contract as an instance of a product, + possibly on a media. + :ivar contract_serial_number: The contract serial number: serial + number of the Contract Id. + :ivar creation_event_id: The unique identifier of the related event. + :ivar media_identification: The media holding the contract + :ivar non_transit_product_code: The type of product of the contract + instance if it is a non transit product. Dictionary prefix: + NonTransitProductCode + :ivar processing_date: + :ivar clearing_version: The version of the clearing parameters. + :ivar product_code: The type of product of the contract instance if + it is a transit product. Dictionary prefix: ProductCode + :ivar supplement_product_code: The type of product of the contract + instance if it is a supplement product. Dictionary prefix: + SupplementProductCode + :ivar capping_product_code: The type of capping of the contract + instance if it is a capping instance. Dictionary prefix: + CappingRule + :ivar journey_product_code: The type of journey definition of the + contract instance if it is a journey instance. Dictionary + prefix: JourneyDefinition + :ivar best_effort: 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. + :ivar sequence: The ordering sequence number of this contract's + apportionment. + :ivar settlement_period_id: + :ivar settlement_period_creation_date_time: + :ivar daily_media_consumptions: DailyMediaConsumptions + """ + + model_config = ConfigDict(defer_build=True) + apportionment_items: None | ApportionmentItemsType = field( + default=None, + metadata={ + "name": "ApportionmentItems", + "type": "Element", + "namespace": "", + }, + ) + contract_rule_details: ( + None | ContractApportionmentAuditExchangeContractRuleDetails + ) = field( + default=None, + metadata={ + "name": "ContractRuleDetails", + "type": "Element", + "namespace": "", + }, + ) + settlement_items: None | SettlementItemsType = field( + default=None, + metadata={ + "name": "SettlementItems", + "type": "Element", + "namespace": "", + }, + ) + amount_to_apportion: Decimal = field( + metadata={ + "name": "AmountToApportion", + "type": "Element", + "namespace": "", + "required": True, + } + ) + contract_id: str = field( + metadata={ + "name": "ContractId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + contract_serial_number: None | str = field( + default=None, + metadata={ + "name": "ContractSerialNumber", + "type": "Element", + "namespace": "", + }, + ) + creation_event_id: str = field( + metadata={ + "name": "CreationEventId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + media_identification: None | MediaIdentification = field( + default=None, + metadata={ + "name": "MediaIdentification", + "type": "Element", + "namespace": "", + }, + ) + non_transit_product_code: None | LocalizedNonTransitProductCode = field( + default=None, + metadata={ + "name": "NonTransitProductCode", + "type": "Element", + "namespace": "", + }, + ) + processing_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ProcessingDate", + "type": "Element", + "namespace": "", + }, + ) + clearing_version: str = field( + metadata={ + "name": "ClearingVersion", + "type": "Element", + "namespace": "", + "required": True, + } + ) + product_code: None | LocalizedProductCode = field( + default=None, + metadata={ + "name": "ProductCode", + "type": "Element", + "namespace": "", + }, + ) + supplement_product_code: None | LocalizedSupplementProductCode = field( + default=None, + metadata={ + "name": "SupplementProductCode", + "type": "Element", + "namespace": "", + }, + ) + capping_product_code: None | LocalizedCappingRule = field( + default=None, + metadata={ + "name": "CappingProductCode", + "type": "Element", + "namespace": "", + }, + ) + journey_product_code: None | LocalizedJourneyDefinition = field( + default=None, + metadata={ + "name": "JourneyProductCode", + "type": "Element", + "namespace": "", + }, + ) + best_effort: None | bool = field( + default=None, + metadata={ + "name": "BestEffort", + "type": "Element", + "namespace": "", + }, + ) + sequence: int = field( + metadata={ + "name": "Sequence", + "type": "Element", + "namespace": "", + "required": True, + } + ) + settlement_period_id: str = field( + metadata={ + "name": "SettlementPeriodId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + settlement_period_creation_date_time: XmlDateTime = field( + metadata={ + "name": "SettlementPeriodCreationDateTime", + "type": "Element", + "namespace": "", + "required": True, + } + ) + daily_media_consumptions: ( + None | ContractApportionmentAuditExchangeDailyMediaConsumptions + ) = field( + default=None, + metadata={ + "name": "DailyMediaConsumptions", + "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: ContractApportionmentAuditExchange = 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": "", + }, + ) + contract_apportionment_xsd_version: str = field( + const=True, + default="1.3", + metadata={ + "name": "ContractApportionmentXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/ContractApportionment" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/clr/fee_contract.py b/es_elt/src/es_elt/xml/audit_data/clr/fee_contract.py new file mode 100644 index 0000000..1d9ebc4 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/clr/fee_contract.py @@ -0,0 +1,315 @@ +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 +from es_elt.xml.common.localized import LocalizedBusinessEntity + +__NAMESPACE__ = "http://www.thales.dc/FeeContract" + + +class FeeContractItemType(BaseModel): + """ + Results of fee calculation. + + :ivar stakeholder_id: The stakeholder involved in the fee + :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 FeeSettlementItemType(BaseModel): + """ + Individual money movement resulting from the fee items. + + :ivar payer_id: The stakeholder who will be debited money + :ivar payee_id: The stakeholder who will be credited money + :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, + } + ) + payee_id: LocalizedBusinessEntity = field( + metadata={ + "name": "PayeeId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + settlement_amount: Decimal = field( + metadata={ + "name": "SettlementAmount", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class FeeContractExchangeFeeItems(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + fee_item: list[FeeContractItemType] = field( + default_factory=list, + metadata={ + "name": "FeeItem", + "type": "Element", + "namespace": "", + }, + ) + + +class FeeContractExchangeSettlementItems(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + settlement_item: list[FeeSettlementItemType] = field( + default_factory=list, + metadata={ + "name": "SettlementItem", + "type": "Element", + "namespace": "", + }, + ) + + +class FeeContractExchange(BaseModel): + """ + clr:fee.contract.get: At fee distribution Distribution of a fee based + on a contract from a payer to a payee's account. + + :ivar fee_items: Output from fee distribution + :ivar settlement_items: 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. + :ivar fee_contract_id: The contract as an instance of a fee. + :ivar fee_context_id: + :ivar fee_rule_id: + :ivar creation_event_id: The unique identifier of the related event. + :ivar charging_model: The charging model of the fee contract (per + event, per volume, per total value). + :ivar charging_period: The charging period of the fee contract + (Daily, Weekly, Monthly). + :ivar application_date: + :ivar processing_date: + :ivar clearing_version: The version of the clearing parameters. + :ivar settlement_period_id: + :ivar total_number: + :ivar total_amount: + :ivar sequence: The ordering sequence number of this contract. + """ + + model_config = ConfigDict(defer_build=True) + fee_items: None | FeeContractExchangeFeeItems = field( + default=None, + metadata={ + "name": "FeeItems", + "type": "Element", + "namespace": "", + }, + ) + settlement_items: None | FeeContractExchangeSettlementItems = field( + default=None, + metadata={ + "name": "SettlementItems", + "type": "Element", + "namespace": "", + }, + ) + fee_contract_id: str = field( + metadata={ + "name": "FeeContractId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + fee_context_id: str = field( + metadata={ + "name": "FeeContextId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + fee_rule_id: str = field( + metadata={ + "name": "FeeRuleId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + creation_event_id: str = field( + metadata={ + "name": "CreationEventId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + charging_model: str = field( + metadata={ + "name": "ChargingModel", + "type": "Element", + "namespace": "", + "required": True, + } + ) + charging_period: str = field( + metadata={ + "name": "ChargingPeriod", + "type": "Element", + "namespace": "", + "required": True, + } + ) + application_date: XmlDateTime = field( + metadata={ + "name": "ApplicationDate", + "type": "Element", + "namespace": "", + "required": True, + } + ) + processing_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ProcessingDate", + "type": "Element", + "namespace": "", + }, + ) + clearing_version: str = field( + metadata={ + "name": "ClearingVersion", + "type": "Element", + "namespace": "", + "required": True, + } + ) + settlement_period_id: str = field( + metadata={ + "name": "SettlementPeriodId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + total_number: None | int = field( + default=None, + metadata={ + "name": "TotalNumber", + "type": "Element", + "namespace": "", + }, + ) + total_amount: Decimal = field( + metadata={ + "name": "TotalAmount", + "type": "Element", + "namespace": "", + "required": True, + } + ) + sequence: int = field( + metadata={ + "name": "Sequence", + "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: FeeContractExchange = 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": "", + }, + ) + fee_contract_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "FeeContractXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/FeeContract" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/clr/fixed_origin_destination_apportionment_details.py b/es_elt/src/es_elt/xml/audit_data/clr/fixed_origin_destination_apportionment_details.py new file mode 100644 index 0000000..7ca129f --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/clr/fixed_origin_destination_apportionment_details.py @@ -0,0 +1,182 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +from es_elt.xml.common.clearing_item_type import ( + ApportionmentItemType, + ContractRuleDetails, +) +from es_elt.xml.common.headers import HeadersType + +__NAMESPACE__ = "http://www.thales.dc/FixedOriginDestinationApportionmentDetails" + + +class LegApportionmentApportionmentItems(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 LegApportionmentLegRuleDetails(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + leg_rule_detail: list[ContractRuleDetails] = field( + default_factory=list, + metadata={ + "name": "LegRuleDetail", + "type": "Element", + "namespace": "", + }, + ) + + +class LegApportionment(BaseModel): + """ + Details of apportionment for a leg. + + :ivar leg_id: + :ivar apportionment_items: Output from apportionment + :ivar leg_rule_details: Details of rule calculation, when several + parts are engaged for apportionment's calculation + """ + + model_config = ConfigDict(defer_build=True) + leg_id: str = field( + metadata={ + "name": "LegId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + apportionment_items: None | LegApportionmentApportionmentItems = field( + default=None, + metadata={ + "name": "ApportionmentItems", + "type": "Element", + "namespace": "", + }, + ) + leg_rule_details: None | LegApportionmentLegRuleDetails = field( + default=None, + metadata={ + "name": "LegRuleDetails", + "type": "Element", + "namespace": "", + }, + ) + + +class FixedOriginDestinationApportionmentDetailsAuditExchangeLegApportionments( + BaseModel +): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + leg_apportionment: list[LegApportionment] = field( + default_factory=list, + metadata={ + "name": "LegApportionment", + "type": "Element", + "namespace": "", + }, + ) + + +class FixedOriginDestinationApportionmentDetailsAuditExchange(BaseModel): + """ + clr_apportionment_fixed_od_details: Created each time we receive a new + event Details of fixed origin destination apportionment for a + contractId. + + :ivar contract_id: + :ivar leg_apportionments: Apportionment per leg + :ivar sequence: The ordering sequence number of this contract's + apportionment. + """ + + model_config = ConfigDict(defer_build=True) + contract_id: str = field( + metadata={ + "name": "ContractId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + leg_apportionments: FixedOriginDestinationApportionmentDetailsAuditExchangeLegApportionments = field( + metadata={ + "name": "LegApportionments", + "type": "Element", + "namespace": "", + "required": True, + } + ) + sequence: int = field( + metadata={ + "name": "Sequence", + "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: FixedOriginDestinationApportionmentDetailsAuditExchange = 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": "", + }, + ) + fixed_origin_destination_apportionment_details_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "FixedOriginDestinationApportionmentDetailsXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/FixedOriginDestinationApportionmentDetails" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/clr/fixed_origin_destination_apportionment_errors.py b/es_elt/src/es_elt/xml/audit_data/clr/fixed_origin_destination_apportionment_errors.py new file mode 100644 index 0000000..5e0c3bd --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/clr/fixed_origin_destination_apportionment_errors.py @@ -0,0 +1,151 @@ +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.headers import HeadersType +from es_elt.xml.common.localized import LocalizedProductCode + +__NAMESPACE__ = "http://www.thales.dc/FixedOriginDestinationApportionmentErrors" + + +class ApportionmentErrorType(Enum): + MISSING_DATA_FOR_APPORTIONMENT = "MISSING_DATA_FOR_APPORTIONMENT" + TOTAL_AND_REVENUE_AMOUNT_DIFFERENT = "TOTAL_AND_REVENUE_AMOUNT_DIFFERENT" + TRANSFER_DISCOUNT_GREATER_THAN_ALLOCATED = ( + "TRANSFER_DISCOUNT_GREATER_THAN_ALLOCATED" + ) + + +class FixedOriginDestinationApportionmentErrorsAuditExchange(BaseModel): + """ + clr_contract_settlement_get: Apportionment error raised during an + apportionment plugin execution. + + :ivar error_type: + :ivar product_code: The type of product of the contract instance if + it is a transit product. Dictionary prefix: ProductCode + :ivar table_id: The matrix applied for this apportionment. + :ivar origin_point_id: + :ivar destination_point_id: + :ivar amount: The total amount (the price of the leg). + :ivar apportioned_revenue: The total revenue to be apportioned among + all the stakeholder (this apportionment is a fraction of it) + :ivar media_serial_number: + """ + + model_config = ConfigDict(defer_build=True) + error_type: ApportionmentErrorType = field( + metadata={ + "name": "ErrorType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + product_code: None | LocalizedProductCode = field( + default=None, + metadata={ + "name": "ProductCode", + "type": "Element", + "namespace": "", + }, + ) + table_id: None | str = field( + default=None, + metadata={ + "name": "TableId", + "type": "Element", + "namespace": "", + }, + ) + origin_point_id: None | str = field( + default=None, + metadata={ + "name": "OriginPointId", + "type": "Element", + "namespace": "", + }, + ) + destination_point_id: None | str = field( + default=None, + metadata={ + "name": "DestinationPointId", + "type": "Element", + "namespace": "", + }, + ) + amount: None | Decimal = field( + default=None, + metadata={ + "name": "Amount", + "type": "Element", + "namespace": "", + }, + ) + apportioned_revenue: None | Decimal = field( + default=None, + metadata={ + "name": "ApportionedRevenue", + "type": "Element", + "namespace": "", + }, + ) + media_serial_number: None | str = field( + default=None, + metadata={ + "name": "MediaSerialNumber", + "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: FixedOriginDestinationApportionmentErrorsAuditExchange = 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": "", + }, + ) + fixed_origin_destination_apportionment_errors_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "FixedOriginDestinationApportionmentErrorsXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/FixedOriginDestinationApportionmentErrors" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/clr/manual_settlement_item_audit.py b/es_elt/src/es_elt/xml/audit_data/clr/manual_settlement_item_audit.py new file mode 100644 index 0000000..597810f --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/clr/manual_settlement_item_audit.py @@ -0,0 +1,242 @@ +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 +from es_elt.xml.common.localized import ( + LocalizedBusinessEntity, + LocalizedBusinessEntityRoleType, +) + +__NAMESPACE__ = "http://www.thales.dc/ManualSettlementItemAudit" + + +class ManualSettlementItemStatus(Enum): + PENDING = "PENDING" + CANCELLED = "CANCELLED" + SETTLED = "SETTLED" + + +class ManualSettlementItemExchange(BaseModel): + """ + 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. + + :ivar manual_settlement_item_id: Manual settlement item Id + :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 will be + 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 will be + credited. + :ivar amount: The amount of the transfer. + :ivar last_modification_date: Date of last change of the settlement + item. + :ivar creation_date: Date of creation of the settlement item. + :ivar execution_date: Date of creation or update of the settlement + item. + :ivar application_date: Application date of the settlement item. + :ivar user_id: The unique identifier of the user who created ou + updated Settlement Item. + :ivar clearing_period: The settlement period id. + :ivar manual_settlement_item_status: The type of the rule + :ivar reason: The reason of created or modification manual + settlement item + :ivar sequence: The ordering sequence number of this settlement + period. + """ + + model_config = ConfigDict(defer_build=True) + manual_settlement_item_id: str = field( + metadata={ + "name": "ManualSettlementItemId", + "type": "Element", + "namespace": "", + "required": 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, + } + ) + amount: None | Decimal = field( + default=None, + metadata={ + "name": "Amount", + "type": "Element", + "namespace": "", + }, + ) + last_modification_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "LastModificationDate", + "type": "Element", + "namespace": "", + }, + ) + creation_date: XmlDateTime = field( + metadata={ + "name": "CreationDate", + "type": "Element", + "namespace": "", + "required": True, + } + ) + execution_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ExecutionDate", + "type": "Element", + "namespace": "", + }, + ) + application_date: XmlDateTime = field( + metadata={ + "name": "ApplicationDate", + "type": "Element", + "namespace": "", + "required": True, + } + ) + user_id: str = field( + metadata={ + "name": "UserId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + clearing_period: None | str = field( + default=None, + metadata={ + "name": "ClearingPeriod", + "type": "Element", + "namespace": "", + }, + ) + manual_settlement_item_status: ManualSettlementItemStatus = field( + metadata={ + "name": "ManualSettlementItemStatus", + "type": "Element", + "namespace": "", + "required": True, + } + ) + reason: None | str = field( + default=None, + metadata={ + "name": "Reason", + "type": "Element", + "namespace": "", + }, + ) + sequence: None | int = field( + default=None, + metadata={ + "name": "Sequence", + "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: ManualSettlementItemExchange = 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": "", + }, + ) + manual_settlement_item_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "ManualSettlementItemXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/ManualSettlementItemAudit" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/clr/media_consumptions_apportionment.py b/es_elt/src/es_elt/xml/audit_data/clr/media_consumptions_apportionment.py new file mode 100644 index 0000000..7eafa01 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/clr/media_consumptions_apportionment.py @@ -0,0 +1,253 @@ +from __future__ import annotations + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +from es_elt.xml.common.clearing_item_type import FeeData +from es_elt.xml.common.headers import HeadersType + +__NAMESPACE__ = "http://www.thales.dc/MediaConsumptionsApportionment" + + +class LegErrorCodes(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + error_code: list[str] = field( + default_factory=list, + metadata={ + "name": "ErrorCode", + "type": "Element", + "namespace": "", + }, + ) + + +class Leg(BaseModel): + """ + :ivar leg_id: Unique identifier for a leg. Between multiple + reconstructions, the legId will be kept constant if the leg did + not change + :ivar contract_id: This leg is taken into account in this contract. + If empty, it means this leg is not taken into account for + apportionment purpose + :ivar error_codes: + """ + + model_config = ConfigDict(defer_build=True) + leg_id: str = field( + metadata={ + "name": "LegId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + contract_id: None | str = field( + default=None, + metadata={ + "name": "ContractId", + "type": "Element", + "namespace": "", + }, + ) + error_codes: None | LegErrorCodes = field( + default=None, + metadata={ + "name": "ErrorCodes", + "type": "Element", + "namespace": "", + }, + ) + + +class MediaConsumptionApportionmentFees(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + fee: list[FeeData] = field( + default_factory=list, + metadata={ + "name": "Fee", + "type": "Element", + "namespace": "", + }, + ) + + +class JourneyLegs(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + leg: list[Leg] = field( + default_factory=list, + metadata={ + "name": "Leg", + "type": "Element", + "namespace": "", + }, + ) + + +class Journey(BaseModel): + """ + :ivar journey_id: Unique identifier for a journey. Between multiple + reconstructions, the journeyId will be kept constant if the + journey did not change + :ivar legs: Legs + """ + + model_config = ConfigDict(defer_build=True) + journey_id: str = field( + metadata={ + "name": "JourneyId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + legs: None | JourneyLegs = field( + default=None, + metadata={ + "name": "Legs", + "type": "Element", + "namespace": "", + }, + ) + + +class MediaConsumptionApportionmentJourneys(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + journey: list[Journey] = field( + default_factory=list, + metadata={ + "name": "Journey", + "type": "Element", + "namespace": "", + }, + ) + + +class MediaConsumptionApportionment(BaseModel): + """ + :ivar daily_media_consumption_id: + :ivar journeys: Journeys + :ivar fees: Fees information + """ + + model_config = ConfigDict(defer_build=True) + daily_media_consumption_id: str = field( + metadata={ + "name": "DailyMediaConsumptionId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + journeys: None | MediaConsumptionApportionmentJourneys = field( + default=None, + metadata={ + "name": "Journeys", + "type": "Element", + "namespace": "", + }, + ) + fees: None | MediaConsumptionApportionmentFees = field( + default=None, + metadata={ + "name": "Fees", + "type": "Element", + "namespace": "", + }, + ) + + +class MediaConsumptionsApportionmentAuditExchangeMediaConsumptionApportionments( + BaseModel +): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + media_consumption_apportionment: list[MediaConsumptionApportionment] = field( + default_factory=list, + metadata={ + "name": "MediaConsumptionApportionment", + "type": "Element", + "namespace": "", + }, + ) + + +class MediaConsumptionsApportionmentAuditExchange(BaseModel): + """ + clr_str_media_consumptions_apportionment: After reception of a new + journey reconstruction and rating. + + :ivar media_consumption_apportionments: Media consumptions + """ + + model_config = ConfigDict(defer_build=True) + media_consumption_apportionments: ( + None | MediaConsumptionsApportionmentAuditExchangeMediaConsumptionApportionments + ) = field( + default=None, + metadata={ + "name": "MediaConsumptionApportionments", + "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: MediaConsumptionsApportionmentAuditExchange = 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": "", + }, + ) + media_consumptions_apportionment_xsd_version: str = field( + const=True, + default="1.1", + metadata={ + "name": "MediaConsumptionsApportionmentXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/MediaConsumptionsApportionment" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/clr/settlement_period.py b/es_elt/src/es_elt/xml/audit_data/clr/settlement_period.py new file mode 100644 index 0000000..7eb80d5 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/clr/settlement_period.py @@ -0,0 +1,360 @@ +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 +from es_elt.xml.common.localized import LocalizedBusinessEntity + +__NAMESPACE__ = "http://www.thales.dc/SettlementPeriod" + + +class SettlementPeriodApportionmentExchange(BaseModel): + """ + Apportionment from a payer to a payee's account during a settlement + period. + + :ivar amount: The amount of the transfer. + :ivar payee_account: The account to where the money will be + credited. + :ivar payee_id: The stakeholder who will be credited money + :ivar payer_account: The account from which the money will be + debited. + :ivar payer_id: The stakeholder who will be debited money + """ + + model_config = ConfigDict(defer_build=True) + amount: None | Decimal = field( + default=None, + metadata={ + "name": "Amount", + "type": "Element", + "namespace": "", + }, + ) + payee_account: None | str = field( + default=None, + metadata={ + "name": "PayeeAccount", + "type": "Element", + "namespace": "", + }, + ) + payee_id: None | LocalizedBusinessEntity = field( + default=None, + metadata={ + "name": "PayeeId", + "type": "Element", + "namespace": "", + }, + ) + payer_account: None | str = field( + default=None, + metadata={ + "name": "PayerAccount", + "type": "Element", + "namespace": "", + }, + ) + payer_id: None | LocalizedBusinessEntity = field( + default=None, + metadata={ + "name": "PayerId", + "type": "Element", + "namespace": "", + }, + ) + + +class StakeholderAccountBalanceExchange(BaseModel): + """ + Total value per stakeholder for a given apportionment (i.e. set of + daily media journeys reconstructions). + + :ivar account: + :ivar amount: + :ivar stakeholder_id: Aka business entity id + """ + + model_config = ConfigDict(defer_build=True) + account: None | str = field( + default=None, + metadata={ + "name": "Account", + "type": "Element", + "namespace": "", + }, + ) + amount: None | Decimal = field( + default=None, + metadata={ + "name": "Amount", + "type": "Element", + "namespace": "", + }, + ) + stakeholder_id: None | LocalizedBusinessEntity = field( + default=None, + metadata={ + "name": "StakeholderId", + "type": "Element", + "namespace": "", + }, + ) + + +class Balances(BaseModel): + model_config = ConfigDict(defer_build=True) + balance: list[StakeholderAccountBalanceExchange] = field( + default_factory=list, + metadata={ + "name": "Balance", + "type": "Element", + "namespace": "", + }, + ) + + +class FeeSettlements(BaseModel): + model_config = ConfigDict(defer_build=True) + fee_settlement: list[SettlementPeriodApportionmentExchange] = field( + default_factory=list, + metadata={ + "name": "FeeSettlement", + "type": "Element", + "namespace": "", + }, + ) + + +class ManualSettlements(BaseModel): + model_config = ConfigDict(defer_build=True) + manual_settlement: list[SettlementPeriodApportionmentExchange] = field( + default_factory=list, + metadata={ + "name": "ManualSettlement", + "type": "Element", + "namespace": "", + }, + ) + + +class ProductApportionments(BaseModel): + model_config = ConfigDict(defer_build=True) + product_apportionment: list[SettlementPeriodApportionmentExchange] = field( + default_factory=list, + metadata={ + "name": "ProductApportionment", + "type": "Element", + "namespace": "", + }, + ) + + +class Settlements(BaseModel): + model_config = ConfigDict(defer_build=True) + settlement: list[SettlementPeriodApportionmentExchange] = field( + default_factory=list, + metadata={ + "name": "Settlement", + "type": "Element", + "namespace": "", + }, + ) + + +class SettlementPeriodExchange(BaseModel): + """ + clr_settlement_get: At settlement period creation or update + Apportionments for a settlement period. + + :ivar clearing_date_time: Date of computation of the apportionments + of the settlement period. + :ivar closing_date_time: Closing date of the settlement period. + :ivar creation_date_time: Creation date of the settlement period. + :ivar creation_event_id: The unique identifier of the related event. + :ivar previous_clearing_period_id: The settlement period preceding + the current one. + :ivar reference_date_time: Reference date of the settlement period + (used for TFN). Used for displaying/grouping by week to overload + creationDate + :ivar sequence: The ordering sequence number of this settlement + period. + :ivar clearing_period_id: The settlement period. + :ivar signature: The signature of this settlement period. + :ivar settlements: Apportionment between stakeholders during the + settlement period. + :ivar product_apportionments: Apportionment between stakeholders + during the settlement period. + :ivar manual_settlements: Apportionment between stakeholders during + the settlement period. + :ivar fee_settlements: Fee distribution between stakeholders during + the settlement period. + :ivar balances: The balances of operations for each stakeholder + during the settlement period. + """ + + model_config = ConfigDict(defer_build=True) + clearing_date_time: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ClearingDateTime", + "type": "Element", + "namespace": "", + }, + ) + closing_date_time: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ClosingDateTime", + "type": "Element", + "namespace": "", + }, + ) + creation_date_time: None | XmlDateTime = field( + default=None, + metadata={ + "name": "CreationDateTime", + "type": "Element", + "namespace": "", + }, + ) + creation_event_id: None | str = field( + default=None, + metadata={ + "name": "CreationEventId", + "type": "Element", + "namespace": "", + }, + ) + previous_clearing_period_id: None | str = field( + default=None, + metadata={ + "name": "PreviousClearingPeriodId", + "type": "Element", + "namespace": "", + }, + ) + reference_date_time: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ReferenceDateTime", + "type": "Element", + "namespace": "", + }, + ) + sequence: None | int = field( + default=None, + metadata={ + "name": "Sequence", + "type": "Element", + "namespace": "", + }, + ) + clearing_period_id: None | str = field( + default=None, + metadata={ + "name": "ClearingPeriodId", + "type": "Element", + "namespace": "", + }, + ) + signature: None | bytes = field( + default=None, + metadata={ + "name": "Signature", + "type": "Element", + "namespace": "", + "format": "base64", + }, + ) + settlements: None | Settlements = field( + default=None, + metadata={ + "name": "Settlements", + "type": "Element", + "namespace": "", + }, + ) + product_apportionments: None | ProductApportionments = field( + default=None, + metadata={ + "name": "ProductApportionments", + "type": "Element", + "namespace": "", + }, + ) + manual_settlements: None | ManualSettlements = field( + default=None, + metadata={ + "name": "ManualSettlements", + "type": "Element", + "namespace": "", + }, + ) + fee_settlements: None | FeeSettlements = field( + default=None, + metadata={ + "name": "FeeSettlements", + "type": "Element", + "namespace": "", + }, + ) + balances: None | Balances = field( + default=None, + metadata={ + "name": "Balances", + "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: SettlementPeriodExchange = 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": "", + }, + ) + settlement_period_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "SettlementPeriodXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/SettlementPeriod" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/clr/transaction_apportionment.py b/es_elt/src/es_elt/xml/audit_data/clr/transaction_apportionment.py new file mode 100644 index 0000000..3846bff --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/clr/transaction_apportionment.py @@ -0,0 +1,325 @@ +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.clearing_item_type import ( + ApportionmentItemsType, + ApportionmentItemType, + ElementarySettlementItemType, + SettlementItemsType, +) +from es_elt.xml.common.headers import HeadersType +from es_elt.xml.common.media_identification import MediaIdentification + +__NAMESPACE__ = "http://www.thales.dc/TransactionApportionment" + + +class TransactionRuleDetailPtomContractTypes(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 TransactionRuleDetailApportionmentItems(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 TransactionRuleDetailSettlementItems(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 TransactionRuleDetail(BaseModel): + """ + Results of apportionment calculation. + + :ivar rule_id: The name of the rule + :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, + } + ) + apportionment_items: None | TransactionRuleDetailApportionmentItems = field( + default=None, + metadata={ + "name": "ApportionmentItems", + "type": "Element", + "namespace": "", + }, + ) + settlement_items: None | TransactionRuleDetailSettlementItems = 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 | TransactionRuleDetailPtomContractTypes = field( + default=None, + metadata={ + "name": "PtomContractTypes", + "type": "Element", + "namespace": "", + }, + ) + + +class TransactionApportionmentAuditExchangeTransactionRuleDetails(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + transaction_rule_detail: list[TransactionRuleDetail] = field( + default_factory=list, + metadata={ + "name": "TransactionRuleDetail", + "type": "Element", + "namespace": "", + }, + ) + + +class TransactionApportionmentAuditExchange(BaseModel): + """ + clr_transaction_apportionment_get: At apportionment creation + Apportionment of an independent transaction (stored value debit, stored + value credit, ...). + + :ivar transaction_type: + :ivar apportionment_items: + :ivar transaction_rule_details: Sorted rule details + :ivar settlement_items: + :ivar amount_to_apportion: The total revenue to be apportioned among + all the stakeholder + :ivar transaction_context_id: The contract as an instance of a + product, possibly on a media. + :ivar media_identification: The media holding the contract + :ivar processing_date: + :ivar clearing_version: The version of the clearing parameters. + :ivar best_effort: 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. + :ivar sequence: The ordering sequence number of this contract's + apportionment. + :ivar settlement_period_id: + :ivar settlement_period_creation_date_time: + """ + + model_config = ConfigDict(defer_build=True) + transaction_type: None | str = field( + default=None, + metadata={ + "name": "TransactionType", + "type": "Element", + "namespace": "", + }, + ) + apportionment_items: None | ApportionmentItemsType = field( + default=None, + metadata={ + "name": "ApportionmentItems", + "type": "Element", + "namespace": "", + }, + ) + transaction_rule_details: ( + None | TransactionApportionmentAuditExchangeTransactionRuleDetails + ) = field( + default=None, + metadata={ + "name": "TransactionRuleDetails", + "type": "Element", + "namespace": "", + }, + ) + settlement_items: None | SettlementItemsType = field( + default=None, + metadata={ + "name": "SettlementItems", + "type": "Element", + "namespace": "", + }, + ) + amount_to_apportion: Decimal = field( + metadata={ + "name": "AmountToApportion", + "type": "Element", + "namespace": "", + "required": True, + } + ) + transaction_context_id: str = field( + metadata={ + "name": "TransactionContextId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + media_identification: None | MediaIdentification = field( + default=None, + metadata={ + "name": "MediaIdentification", + "type": "Element", + "namespace": "", + }, + ) + processing_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ProcessingDate", + "type": "Element", + "namespace": "", + }, + ) + clearing_version: str = field( + metadata={ + "name": "ClearingVersion", + "type": "Element", + "namespace": "", + "required": True, + } + ) + best_effort: None | bool = field( + default=None, + metadata={ + "name": "BestEffort", + "type": "Element", + "namespace": "", + }, + ) + sequence: int = field( + metadata={ + "name": "Sequence", + "type": "Element", + "namespace": "", + "required": True, + } + ) + settlement_period_id: str = field( + metadata={ + "name": "SettlementPeriodId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + settlement_period_creation_date_time: XmlDateTime = field( + metadata={ + "name": "SettlementPeriodCreationDateTime", + "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: TransactionApportionmentAuditExchange = 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": "", + }, + ) + transaction_apportionment_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "TransactionApportionmentXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/TransactionApportionment" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/cmm/__init__.py b/es_elt/src/es_elt/xml/audit_data/cmm/__init__.py new file mode 100644 index 0000000..ee8e514 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/cmm/__init__.py @@ -0,0 +1,71 @@ +from es_elt.xml.audit_data.cmm.customer import AuditMessages as AuditMessages +from es_elt.xml.audit_data.cmm.customer import AuditMessagesType as AuditMessagesType +from es_elt.xml.audit_data.cmm.customer import AuditMessageType as AuditMessageType +from es_elt.xml.audit_data.cmm.customer import ( + CustomerAccountAuditExchange, + CustomerAccountAuditExchangeAttachedMedia, + CustomerAccountAuditExchangeCustomerProfiles, + CustomerAccountAuditExchangeCustomerProfilesCustomerProfile, + CustomerAccountAuditExchangeNotificationChannelConfigurations, + CustomerAccountAuditExchangeNotificationChannelConfigurationsNotificationChannelConfiguration, + CustomerAccountAuditExchangeNotificationChannelConfigurationsNotificationChannelConfigurationNotificationChannelTypeConfigurations, + CustomerAccountAuditExchangeNotificationChannelConfigurationsNotificationChannelConfigurationNotificationChannelTypeConfigurationsNotificationChannelTypeConfiguration, + CustomerMedia, + CustomerStatus, + CustomerType, +) +from es_elt.xml.audit_data.cmm.customer_profile import ( + AuditMessages as ProfileAuditMessages, +) +from es_elt.xml.audit_data.cmm.customer_profile import ( + AuditMessagesType as ProfileAuditMessagesType, +) +from es_elt.xml.audit_data.cmm.customer_profile import ( + AuditMessageType as ProfileAuditMessageType, +) +from es_elt.xml.audit_data.cmm.customer_profile import ( + CustomerExplicitProfileAudit, + CustomerProfileAuditExchange, + CustomerProfileAuditExchangeCustomerExplicitProfiles, + CustomerProfileAuditExchangeCustomerImplicitProfileAudit, + ProfileStatus, +) +from es_elt.xml.audit_data.cmm.payment_means import ( + AuditMessages as PaymentMeansAuditMessages, +) +from es_elt.xml.audit_data.cmm.payment_means import ( + AuditMessagesType as PaymentMeansAuditMessagesType, +) +from es_elt.xml.audit_data.cmm.payment_means import ( + AuditMessageType as PaymentMeansAuditMessageType, +) +from es_elt.xml.audit_data.cmm.payment_means import PaymentMeansAuditExchange + +__all__ = [ + "AuditMessageType", + "AuditMessages", + "AuditMessagesType", + "CustomerAccountAuditExchange", + "CustomerAccountAuditExchangeAttachedMedia", + "CustomerAccountAuditExchangeCustomerProfiles", + "CustomerAccountAuditExchangeCustomerProfilesCustomerProfile", + "CustomerAccountAuditExchangeNotificationChannelConfigurations", + "CustomerAccountAuditExchangeNotificationChannelConfigurationsNotificationChannelConfiguration", + "CustomerAccountAuditExchangeNotificationChannelConfigurationsNotificationChannelConfigurationNotificationChannelTypeConfigurations", + "CustomerAccountAuditExchangeNotificationChannelConfigurationsNotificationChannelConfigurationNotificationChannelTypeConfigurationsNotificationChannelTypeConfiguration", + "CustomerMedia", + "CustomerStatus", + "CustomerType", + "ProfileAuditMessageType", + "ProfileAuditMessages", + "ProfileAuditMessagesType", + "CustomerExplicitProfileAudit", + "CustomerProfileAuditExchange", + "CustomerProfileAuditExchangeCustomerExplicitProfiles", + "CustomerProfileAuditExchangeCustomerImplicitProfileAudit", + "ProfileStatus", + "PaymentMeansAuditMessageType", + "PaymentMeansAuditMessages", + "PaymentMeansAuditMessagesType", + "PaymentMeansAuditExchange", +] diff --git a/es_elt/src/es_elt/xml/audit_data/cmm/__pycache__/__init__.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/cmm/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..b2e27eb Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/cmm/__pycache__/__init__.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/cmm/__pycache__/customer.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/cmm/__pycache__/customer.cpython-312.pyc new file mode 100644 index 0000000..b5d9436 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/cmm/__pycache__/customer.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/cmm/__pycache__/customer_profile.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/cmm/__pycache__/customer_profile.cpython-312.pyc new file mode 100644 index 0000000..4ebe863 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/cmm/__pycache__/customer_profile.cpython-312.pyc differ 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 0000000..74b5a0c Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/cmm/__pycache__/payment_means.cpython-312.pyc differ 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 0000000..289b11c Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/daq/__pycache__/__init__.cpython-312.pyc differ 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 0000000..ffe9612 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/daq/__pycache__/invalid_device_transaction.cpython-312.pyc differ 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 0000000..8282d38 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/daq/__pycache__/invalid_message_batch.cpython-312.pyc differ 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 0000000..cfacb11 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/daq/__pycache__/transaction_extended_data.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/daq/__pycache__/validator_errors.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/daq/__pycache__/validator_errors.cpython-312.pyc new file mode 100644 index 0000000..544558d Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/daq/__pycache__/validator_errors.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/daq/invalid_device_transaction.py b/es_elt/src/es_elt/xml/audit_data/daq/invalid_device_transaction.py new file mode 100644 index 0000000..069a9a0 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/daq/invalid_device_transaction.py @@ -0,0 +1,146 @@ +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/InvalidDeviceTransaction" + + +class InvalidDeviceTransactionErrorCodes(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + error_code: list[str] = field( + default_factory=list, + metadata={ + "name": "ErrorCode", + "type": "Element", + "namespace": "", + }, + ) + + +class InvalidDeviceTransaction(BaseModel): + """ + daq_invalid_device_transaction: Represent an exception that happened + while a device post a message to DAQ, but its validation failed. + + :ivar message: + :ivar transaction_id: + :ivar generation_date: Date and time of transaction's generation + :ivar device_tsn: Sequence number allocated to the transaction by + the device (unique by deviceId) + :ivar device_id: Device technical identifier + :ivar device_transaction_uid: Unique identifier allocated to the + transaction by the device (unique by deviceId). + :ivar error_codes: + """ + + model_config = ConfigDict(defer_build=True) + message: None | str = field( + default=None, + metadata={ + "name": "Message", + "type": "Element", + "namespace": "", + }, + ) + transaction_id: str = field( + metadata={ + "name": "TransactionId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + generation_date: XmlDateTime = field( + metadata={ + "name": "GenerationDate", + "type": "Element", + "namespace": "", + "required": True, + } + ) + device_tsn: None | int = field( + default=None, + metadata={ + "name": "DeviceTSN", + "type": "Element", + "namespace": "", + }, + ) + device_id: str = field( + metadata={ + "name": "DeviceId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + device_transaction_uid: None | str = field( + default=None, + metadata={ + "name": "DeviceTransactionUid", + "type": "Element", + "namespace": "", + }, + ) + error_codes: None | InvalidDeviceTransactionErrorCodes = field( + default=None, + metadata={ + "name": "ErrorCodes", + "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: InvalidDeviceTransaction = 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": "", + }, + ) + invalid_device_transaction_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "InvalidDeviceTransactionXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/InvalidDeviceTransaction" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/daq/invalid_message_batch.py b/es_elt/src/es_elt/xml/audit_data/daq/invalid_message_batch.py new file mode 100644 index 0000000..51e1b81 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/daq/invalid_message_batch.py @@ -0,0 +1,80 @@ +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.transaction_exception_type import TransactionExceptionType + +__NAMESPACE__ = "http://www.thales.dc/InvalidMessageBatch" + + +class InvalidMessageBatchAuditExchange(BaseModel): + """ + daq_invalid_message_batch: At reception of an invalid message batch. + """ + + model_config = ConfigDict(defer_build=True) + exception_type: TransactionExceptionType = field( + metadata={ + "name": "ExceptionType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + raw: str = field( + metadata={ + "name": "Raw", + "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: InvalidMessageBatchAuditExchange = 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": "", + }, + ) + invalid_message_batch_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "InvalidMessageBatchXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/InvalidMessageBatch" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/daq/transaction_extended_data.py b/es_elt/src/es_elt/xml/audit_data/daq/transaction_extended_data.py new file mode 100644 index 0000000..d54b6b9 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/daq/transaction_extended_data.py @@ -0,0 +1,228 @@ +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/TransactionExtendedData" + + +class EmvTagType(Enum): + PLASTIC_CARD = "PLASTIC_CARD" + MOBILE = "MOBILE" + WEARABLE = "WEARABLE" + UNREFERENCED = "UNREFERENCED" + OTHER = "OTHER" + + +class TransactionExtendedDataAuditExchange(BaseModel): + """ + :ivar media_serial_number: + :ivar issuer_country_code: Issuer Country Code in accordance with + ISO 3166 (num-3) + :ivar transaction_currency_code: Transaction Currency Code (from EMV + tag 5F2A) according to ISO 4217 + :ivar payment_account_reference: TODO + :ivar issuer_name: Issuer's name + :ivar card_sub_type: Card's sub-type + :ivar payment_scheme_identification_mnemonic: Mnemonic according to + EMV tag 50 + :ivar expiry_date: Validity end date of the travel event to be + processed + :ivar transaction_id: 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. + :ivar bo_transaction_uid: ID set on transactions by Transcity system + used for hash calculation. It allows to identify duplicate bo + messages. + :ivar device_transaction_uid: Unique identifier allocated to the + transaction by the device (unique by deviceId) + :ivar generation_date: Date and time of transaction's generation + :ivar device_tsn: Sequence number allocated to the transaction by + the device (unique by deviceId) + :ivar device_id: Device technical identifier + :ivar ticketing_version: + :ivar form_factor: Type of media used + """ + + model_config = ConfigDict(defer_build=True) + media_serial_number: None | str = field( + default=None, + metadata={ + "name": "MediaSerialNumber", + "type": "Element", + "namespace": "", + }, + ) + issuer_country_code: None | int = field( + default=None, + metadata={ + "name": "IssuerCountryCode", + "type": "Element", + "namespace": "", + }, + ) + transaction_currency_code: None | str = field( + default=None, + metadata={ + "name": "TransactionCurrencyCode", + "type": "Element", + "namespace": "", + }, + ) + payment_account_reference: None | str = field( + default=None, + metadata={ + "name": "PaymentAccountReference", + "type": "Element", + "namespace": "", + }, + ) + issuer_name: None | str = field( + default=None, + metadata={ + "name": "IssuerName", + "type": "Element", + "namespace": "", + }, + ) + card_sub_type: None | str = field( + default=None, + metadata={ + "name": "CardSubType", + "type": "Element", + "namespace": "", + }, + ) + payment_scheme_identification_mnemonic: None | str = field( + default=None, + metadata={ + "name": "PaymentSchemeIdentificationMnemonic", + "type": "Element", + "namespace": "", + }, + ) + expiry_date: None | XmlDate = field( + default=None, + metadata={ + "name": "ExpiryDate", + "type": "Element", + "namespace": "", + }, + ) + transaction_id: str = field( + metadata={ + "name": "TransactionId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + bo_transaction_uid: None | str = field( + default=None, + metadata={ + "name": "BoTransactionUID", + "type": "Element", + "namespace": "", + }, + ) + device_transaction_uid: None | str = field( + default=None, + metadata={ + "name": "DeviceTransactionUID", + "type": "Element", + "namespace": "", + }, + ) + generation_date: XmlDateTime = field( + metadata={ + "name": "GenerationDate", + "type": "Element", + "namespace": "", + "required": True, + } + ) + device_tsn: None | int = field( + default=None, + metadata={ + "name": "DeviceTSN", + "type": "Element", + "namespace": "", + }, + ) + device_id: None | str = field( + default=None, + metadata={ + "name": "DeviceId", + "type": "Element", + "namespace": "", + }, + ) + ticketing_version: None | str = field( + default=None, + metadata={ + "name": "TicketingVersion", + "type": "Element", + "namespace": "", + }, + ) + form_factor: None | EmvTagType = field( + default=None, + metadata={ + "name": "FormFactor", + "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: TransactionExtendedDataAuditExchange = 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": "", + }, + ) + transaction_extended_data_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "TransactionExtendedDataXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/TransactionExtendedData" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/daq/validator_errors.py b/es_elt/src/es_elt/xml/audit_data/daq/validator_errors.py new file mode 100644 index 0000000..eaa8f37 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/daq/validator_errors.py @@ -0,0 +1,108 @@ +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/ValidatorErrors" + + +class ValidatorErrorExchange(BaseModel): + model_config = ConfigDict(defer_build=True) + code: str = field( + metadata={ + "name": "Code", + "type": "Element", + "namespace": "", + "required": True, + } + ) + description: str = field( + metadata={ + "name": "Description", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class ValidatorErrorsExchangeValidatorErrorExchanges(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + validator_error_exchange: list[ValidatorErrorExchange] = field( + default_factory=list, + metadata={ + "name": "ValidatorErrorExchange", + "type": "Element", + "namespace": "", + }, + ) + + +class ValidatorErrorsExchange(BaseModel): + """ + daq_validations_errors_description: Represent an exception that + happened while a device post a message to DAQ, but its validation + failed. + """ + + model_config = ConfigDict(defer_build=True) + validator_error_exchanges: ValidatorErrorsExchangeValidatorErrorExchanges = field( + metadata={ + "name": "ValidatorErrorExchanges", + "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: ValidatorErrorsExchange = 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": "", + }, + ) + validator_errors_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "ValidatorErrorsXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/ValidatorErrors" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/dem/__init__.py b/es_elt/src/es_elt/xml/audit_data/dem/__init__.py new file mode 100644 index 0000000..eb5ceef --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/dem/__init__.py @@ -0,0 +1,49 @@ +from es_elt.xml.audit_data.dem.device import AuditMessages as AuditMessages +from es_elt.xml.audit_data.dem.device import AuditMessagesType as AuditMessagesType +from es_elt.xml.audit_data.dem.device import AuditMessageType as AuditMessageType +from es_elt.xml.audit_data.dem.device import ( + DeviceAuditExchange, + DeviceAuditExchangeDeviceSamData, + DeviceAuditExchangeTags, + DeviceSam, + DeviceSamStatus, + DeviceSamType, + DeviceStatus, + LocalizedDeviceSamStatus, + LocalizedDeviceSamType, +) +from es_elt.xml.audit_data.dem.device_conf_items_version_update import ( + AuditMessages as ConfItemsVersionUpdateAuditMessages, +) +from es_elt.xml.audit_data.dem.device_conf_items_version_update import ( + AuditMessagesType as ConfItemsVersionUpdateAuditMessagesType, +) +from es_elt.xml.audit_data.dem.device_conf_items_version_update import ( + AuditMessageType as ConfItemsVersionUpdateAuditMessageType, +) +from es_elt.xml.audit_data.dem.device_conf_items_version_update import ( + DeviceConfItemsVersionUpdateAuditExchange, + DeviceConfItemVersion, + DeviceConfItemVersions, +) + +__all__ = [ + "AuditMessageType", + "AuditMessages", + "AuditMessagesType", + "DeviceAuditExchange", + "DeviceAuditExchangeDeviceSamData", + "DeviceAuditExchangeTags", + "DeviceSam", + "DeviceSamStatus", + "DeviceSamType", + "DeviceStatus", + "LocalizedDeviceSamStatus", + "LocalizedDeviceSamType", + "ConfItemsVersionUpdateAuditMessageType", + "ConfItemsVersionUpdateAuditMessages", + "ConfItemsVersionUpdateAuditMessagesType", + "DeviceConfItemVersion", + "DeviceConfItemVersions", + "DeviceConfItemsVersionUpdateAuditExchange", +] diff --git a/es_elt/src/es_elt/xml/audit_data/dem/__pycache__/__init__.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/dem/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..c4ac548 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/dem/__pycache__/__init__.cpython-312.pyc differ 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 0000000..7f93341 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/dem/__pycache__/device.cpython-312.pyc differ 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 0000000..2e7b08e Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/dem/__pycache__/device_conf_items_version_update.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/dem/device.py b/es_elt/src/es_elt/xml/audit_data/dem/device.py new file mode 100644 index 0000000..cea5613 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/dem/device.py @@ -0,0 +1,294 @@ +from __future__ import annotations + +from enum import Enum + +from pydantic import BaseModel, ConfigDict +from xsdata.models.datatype import XmlDuration +from xsdata_pydantic.fields import field + +from es_elt.xml.common.headers import HeadersType + +__NAMESPACE__ = "http://www.thales.dc/Device" + + +class DeviceAuditExchangeTags(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + tag: list[str] = field( + default_factory=list, + metadata={ + "name": "Tag", + "type": "Element", + "namespace": "", + }, + ) + + +class DeviceSamStatus(Enum): + UNKNOWN = "UNKNOWN" + VALID = "VALID" + REVOKED = "REVOKED" + + +class DeviceSamType(Enum): + TICKETING = "TICKETING" + BANKING = "BANKING" + + +class DeviceStatus(Enum): + IN_OPERATION = "IN_OPERATION" + OUT_OF_OPERATION = "OUT_OF_OPERATION" + DENIED = "DENIED" + + +class LocalizedDeviceSamStatus(BaseModel): + model_config = ConfigDict(defer_build=True) + value: DeviceSamStatus = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LocalizedDeviceSamType(BaseModel): + model_config = ConfigDict(defer_build=True) + value: DeviceSamType = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class DeviceSam(BaseModel): + model_config = ConfigDict(defer_build=True) + device_sam_id: None | str = field( + default=None, + metadata={ + "name": "DeviceSamId", + "type": "Element", + "namespace": "", + }, + ) + device_sam_status: None | LocalizedDeviceSamStatus = field( + default=None, + metadata={ + "name": "DeviceSamStatus", + "type": "Element", + "namespace": "", + }, + ) + device_sam_type: None | LocalizedDeviceSamType = field( + default=None, + metadata={ + "name": "DeviceSamType", + "type": "Element", + "namespace": "", + }, + ) + + +class DeviceAuditExchangeDeviceSamData(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + device_sam_data: list[DeviceSam] = field( + default_factory=list, + metadata={ + "name": "DeviceSamData", + "type": "Element", + "namespace": "", + }, + ) + + +class DeviceAuditExchange(BaseModel): + """ + 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. + + :ivar business_entity_id: Dictionary prefix: BusinessEntity + :ivar device_id: Device technical identifier + :ivar device_number: Device number + :ivar device_status: Dictionary prefix: DeviceStatus + :ivar device_type_id: Dictionary prefix: DeviceType + :ivar discrepancy_duration: Duration since discrepancyStatus has + changed from/to value = NO_DISCREPANCY + :ivar fare_point_id: Dictionary prefix: FarePointId + :ivar mobile: Is device mobile or fixed + :ivar offline: Is device offline + :ivar stock_entity_id: Id of the stock entity to which the device is + attached (can be empty) + :ivar device_sam_data: List of SAM associated to device + :ivar tags: List of tags associated to device + """ + + model_config = ConfigDict(defer_build=True) + business_entity_id: str = field( + metadata={ + "name": "BusinessEntityId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + device_id: str = field( + metadata={ + "name": "DeviceId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + device_number: str = field( + metadata={ + "name": "DeviceNumber", + "type": "Element", + "namespace": "", + "required": True, + } + ) + device_status: DeviceStatus = field( + metadata={ + "name": "DeviceStatus", + "type": "Element", + "namespace": "", + "required": True, + } + ) + device_type_id: int = field( + metadata={ + "name": "DeviceTypeId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + discrepancy_duration: None | XmlDuration = field( + default=None, + metadata={ + "name": "DiscrepancyDuration", + "type": "Element", + "namespace": "", + }, + ) + fare_point_id: int = field( + metadata={ + "name": "FarePointId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + mobile: bool = field( + metadata={ + "name": "Mobile", + "type": "Element", + "namespace": "", + "required": True, + } + ) + offline: bool = field( + metadata={ + "name": "Offline", + "type": "Element", + "namespace": "", + "required": True, + } + ) + stock_entity_id: None | str = field( + default=None, + metadata={ + "name": "StockEntityId", + "type": "Element", + "namespace": "", + }, + ) + device_sam_data: None | DeviceAuditExchangeDeviceSamData = field( + default=None, + metadata={ + "name": "DeviceSamData", + "type": "Element", + "namespace": "", + }, + ) + tags: None | DeviceAuditExchangeTags = field( + default=None, + metadata={ + "name": "Tags", + "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: DeviceAuditExchange = 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": "", + }, + ) + device_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "DeviceXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/Device" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/dem/device_conf_items_version_update.py b/es_elt/src/es_elt/xml/audit_data/dem/device_conf_items_version_update.py new file mode 100644 index 0000000..1ee682b --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/dem/device_conf_items_version_update.py @@ -0,0 +1,143 @@ +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/DeviceConfItemsVersionUpdate" + + +class DeviceConfItemVersion(BaseModel): + model_config = ConfigDict(defer_build=True) + conf_item_type: str = field( + metadata={ + "name": "ConfItemType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + conf_item_version: str = field( + metadata={ + "name": "ConfItemVersion", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class DeviceConfItemVersions(BaseModel): + model_config = ConfigDict(defer_build=True) + device_conf_item_version: list[DeviceConfItemVersion] = field( + default_factory=list, + metadata={ + "name": "DeviceConfItemVersion", + "type": "Element", + "namespace": "", + "min_occurs": 1, + }, + ) + + +class DeviceConfItemsVersionUpdateAuditExchange(BaseModel): + """ + dem_conf_items_version_update: At device configuration items update. + + :ivar device_id: + :ivar device_name: + :ivar fare_point_id: Dictionary prefix: FarePointId + :ivar reception_date: + :ivar device_conf_item_versions: + """ + + model_config = ConfigDict(defer_build=True) + device_id: str = field( + metadata={ + "name": "DeviceId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + device_name: str = field( + metadata={ + "name": "DeviceName", + "type": "Element", + "namespace": "", + "required": True, + } + ) + fare_point_id: int = field( + metadata={ + "name": "FarePointId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + reception_date: XmlDateTime = field( + metadata={ + "name": "ReceptionDate", + "type": "Element", + "namespace": "", + "required": True, + } + ) + device_conf_item_versions: None | DeviceConfItemVersions = field( + default=None, + metadata={ + "name": "DeviceConfItemVersions", + "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: DeviceConfItemsVersionUpdateAuditExchange = 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": "", + }, + ) + device_conf_items_version_update_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "DeviceConfItemsVersionUpdateXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/DeviceConfItemsVersionUpdate" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/dlm/__init__.py b/es_elt/src/es_elt/xml/audit_data/dlm/__init__.py new file mode 100644 index 0000000..3fd7482 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/dlm/__init__.py @@ -0,0 +1,45 @@ +from es_elt.xml.audit_data.dlm.deny_action import AuditMessages as ActionAuditMessages +from es_elt.xml.audit_data.dlm.deny_action import ( + AuditMessagesType as ActionAuditMessagesType, +) +from es_elt.xml.audit_data.dlm.deny_action import ( + AuditMessageType as ActionAuditMessageType, +) +from es_elt.xml.audit_data.dlm.deny_action import ( + ContractDenyActionExchange, + DenyActionAuditExchange, + DenyActionAuditExchangeContractsDenied, + DenyActionAuditExchangeMediaDenyActionsInformation, + LocalizedDenyActionStatus, + LocalizedDenyReasonCode, + MediaDenyActionExchange, + MediaDenyActionInformationExchange, +) +from es_elt.xml.audit_data.dlm.issuer_deny import ActionStatus +from es_elt.xml.audit_data.dlm.issuer_deny import AuditMessages as IssuerAuditMessages +from es_elt.xml.audit_data.dlm.issuer_deny import ( + AuditMessagesType as IssuerAuditMessagesType, +) +from es_elt.xml.audit_data.dlm.issuer_deny import ( + AuditMessageType as IssuerAuditMessageType, +) +from es_elt.xml.audit_data.dlm.issuer_deny import IssuerDenyAuditExchange + +__all__ = [ + "ActionAuditMessageType", + "ActionAuditMessages", + "ActionAuditMessagesType", + "ContractDenyActionExchange", + "DenyActionAuditExchange", + "DenyActionAuditExchangeContractsDenied", + "DenyActionAuditExchangeMediaDenyActionsInformation", + "LocalizedDenyActionStatus", + "LocalizedDenyReasonCode", + "MediaDenyActionExchange", + "MediaDenyActionInformationExchange", + "ActionStatus", + "IssuerAuditMessageType", + "IssuerAuditMessages", + "IssuerAuditMessagesType", + "IssuerDenyAuditExchange", +] diff --git a/es_elt/src/es_elt/xml/audit_data/dlm/__pycache__/__init__.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/dlm/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..422a9d2 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/dlm/__pycache__/__init__.cpython-312.pyc differ 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 0000000..fa752e7 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/dlm/__pycache__/deny_action.cpython-312.pyc differ 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 0000000..8492640 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/dlm/__pycache__/issuer_deny.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/dlm/deny_action.py b/es_elt/src/es_elt/xml/audit_data/dlm/deny_action.py new file mode 100644 index 0000000..d486d2f --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/dlm/deny_action.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.deny_action_status import DenyActionStatus +from es_elt.xml.common.headers import HeadersType + +__NAMESPACE__ = "http://www.thales.dc/DenyAction" + + +class LocalizedDenyReasonCode(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 ContractDenyActionExchange(BaseModel): + model_config = ConfigDict(defer_build=True) + action_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ActionDate", + "type": "Element", + "namespace": "", + }, + ) + contract_deny_list_sequence_number: None | int = field( + default=None, + metadata={ + "name": "ContractDenyListSequenceNumber", + "type": "Element", + "namespace": "", + }, + ) + contract_serial_number: int = field( + metadata={ + "name": "ContractSerialNumber", + "type": "Element", + "namespace": "", + "required": True, + } + ) + deny_reason: None | LocalizedDenyReasonCode = field( + default=None, + metadata={ + "name": "DenyReason", + "type": "Element", + "namespace": "", + }, + ) + invalidation_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "InvalidationDate", + "type": "Element", + "namespace": "", + }, + ) + reactivation_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ReactivationDate", + "type": "Element", + "namespace": "", + }, + ) + suspension_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "SuspensionDate", + "type": "Element", + "namespace": "", + }, + ) + + +class LocalizedDenyActionStatus(BaseModel): + model_config = ConfigDict(defer_build=True) + value: None | DenyActionStatus = field( + default=None, + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + }, + ) + label: None | str = field( + default=None, + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + }, + ) + + +class DenyActionAuditExchangeContractsDenied(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + contracts_denied: list[ContractDenyActionExchange] = field( + default_factory=list, + metadata={ + "name": "ContractsDenied", + "type": "Element", + "namespace": "", + }, + ) + + +class MediaDenyActionInformationExchange(BaseModel): + model_config = ConfigDict(defer_build=True) + deny_reason: None | LocalizedDenyReasonCode = field( + default=None, + metadata={ + "name": "DenyReason", + "type": "Element", + "namespace": "", + }, + ) + status: None | LocalizedDenyActionStatus = field( + default=None, + metadata={ + "name": "Status", + "type": "Element", + "namespace": "", + }, + ) + + +class MediaDenyActionExchange(BaseModel): + model_config = ConfigDict(defer_build=True) + media_deny_action_information: None | MediaDenyActionInformationExchange = field( + default=None, + metadata={ + "name": "MediaDenyActionInformation", + "type": "Element", + "namespace": "", + }, + ) + occurrence_date_time: None | XmlDateTime = field( + default=None, + metadata={ + "name": "OccurrenceDateTime", + "type": "Element", + "namespace": "", + }, + ) + observation_date_time: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ObservationDateTime", + "type": "Element", + "namespace": "", + }, + ) + + +class DenyActionAuditExchangeMediaDenyActionsInformation(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + media_deny_actions_information: list[MediaDenyActionExchange] = field( + default_factory=list, + metadata={ + "name": "MediaDenyActionsInformation", + "type": "Element", + "namespace": "", + }, + ) + + +class DenyActionAuditExchange(BaseModel): + """ + :ivar active: If true, this deny action is still active (for at + least a contract or the media + :ivar closure_date: + :ivar creation_date: + :ivar deny_action_id: + :ivar payment_id: + :ivar media_deny_actions_information: List of deny action for the + Media. + :ivar media_id: + :ivar media_serial_number: + :ivar contracts_denied: + """ + + model_config = ConfigDict(defer_build=True) + active: bool = field( + metadata={ + "name": "Active", + "type": "Element", + "namespace": "", + "required": True, + } + ) + closure_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ClosureDate", + "type": "Element", + "namespace": "", + }, + ) + creation_date: XmlDateTime = field( + metadata={ + "name": "CreationDate", + "type": "Element", + "namespace": "", + "required": True, + } + ) + deny_action_id: str = field( + metadata={ + "name": "DenyActionId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + payment_id: None | str = field( + default=None, + metadata={ + "name": "PaymentId", + "type": "Element", + "namespace": "", + }, + ) + media_deny_actions_information: ( + None | DenyActionAuditExchangeMediaDenyActionsInformation + ) = field( + default=None, + metadata={ + "name": "MediaDenyActionsInformation", + "type": "Element", + "namespace": "", + }, + ) + media_id: None | str = field( + default=None, + metadata={ + "name": "MediaId", + "type": "Element", + "namespace": "", + }, + ) + media_serial_number: str = field( + metadata={ + "name": "MediaSerialNumber", + "type": "Element", + "namespace": "", + "required": True, + } + ) + contracts_denied: None | DenyActionAuditExchangeContractsDenied = field( + default=None, + metadata={ + "name": "ContractsDenied", + "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: DenyActionAuditExchange = 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": "", + }, + ) + deny_action_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "DenyActionXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/DenyAction" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/dlm/issuer_deny.py b/es_elt/src/es_elt/xml/audit_data/dlm/issuer_deny.py new file mode 100644 index 0000000..d7b4aac --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/dlm/issuer_deny.py @@ -0,0 +1,99 @@ +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/IssuerDeny" + + +class ActionStatus(Enum): + ACTIVE = "ACTIVE" + CANCELED = "CANCELED" + + +class IssuerDenyAuditExchange(BaseModel): + model_config = ConfigDict(defer_build=True) + modification_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ModificationDate", + "type": "Element", + "namespace": "", + }, + ) + agent_number: None | str = field( + default=None, + metadata={ + "name": "AgentNumber", + "type": "Element", + "namespace": "", + }, + ) + card_issuer_number: str = field( + metadata={ + "name": "CardIssuerNumber", + "type": "Element", + "namespace": "", + "required": True, + } + ) + 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: IssuerDenyAuditExchange = 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": "", + }, + ) + issuer_deny_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "IssuerDenyXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/IssuerDeny" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/mam/__init__.py b/es_elt/src/es_elt/xml/audit_data/mam/__init__.py new file mode 100644 index 0000000..1bad9f0 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/mam/__init__.py @@ -0,0 +1,324 @@ +from es_elt.xml.audit_data.mam.abt_purse import AbtPurseAuditExchange +from es_elt.xml.audit_data.mam.abt_purse import AuditMessages as AbtPurseAuditMessages +from es_elt.xml.audit_data.mam.abt_purse import ( + AuditMessagesType as AbtPurseAuditMessagesType, +) +from es_elt.xml.audit_data.mam.abt_purse import ( + AuditMessageType as AbtPurseAuditMessageType, +) +from es_elt.xml.audit_data.mam.abt_purse import OperationType, PurseFamily +from es_elt.xml.audit_data.mam.bulk_adjustment_execution_result import ( + AuditMessages as BulkAdjustmentExecutionResultAuditMessages, +) +from es_elt.xml.audit_data.mam.bulk_adjustment_execution_result import ( + AuditMessagesType as BulkAdjustmentExecutionResultAuditMessagesType, +) +from es_elt.xml.audit_data.mam.bulk_adjustment_execution_result import ( + AuditMessageType as BulkAdjustmentExecutionResultAuditMessageType, +) +from es_elt.xml.audit_data.mam.bulk_adjustment_execution_result import ( + BulkAdjustmentExecutionResultAuditExchange, +) +from es_elt.xml.audit_data.mam.bulk_adjustment_execution_start import ( + AuditMessages as StartAuditMessages, +) +from es_elt.xml.audit_data.mam.bulk_adjustment_execution_start import ( + AuditMessagesType as StartAuditMessagesType, +) +from es_elt.xml.audit_data.mam.bulk_adjustment_execution_start import ( + AuditMessageType as StartAuditMessageType, +) +from es_elt.xml.audit_data.mam.bulk_adjustment_execution_start import ( + BulkAdjustmentExecutionStartAuditExchange, +) +from es_elt.xml.audit_data.mam.contract_transfer import ( + AuditMessages as ContractTransferAuditMessages, +) +from es_elt.xml.audit_data.mam.contract_transfer import ( + AuditMessagesType as ContractTransferAuditMessagesType, +) +from es_elt.xml.audit_data.mam.contract_transfer import ( + AuditMessageType as ContractTransferAuditMessageType, +) +from es_elt.xml.audit_data.mam.contract_transfer import ContractTransferAuditExchange +from es_elt.xml.audit_data.mam.discarded_travel_event import ( + AuditMessages as DiscardedTravelEventAuditMessages, +) +from es_elt.xml.audit_data.mam.discarded_travel_event import ( + AuditMessagesType as DiscardedTravelEventAuditMessagesType, +) +from es_elt.xml.audit_data.mam.discarded_travel_event import ( + AuditMessageType as DiscardedTravelEventAuditMessageType, +) +from es_elt.xml.audit_data.mam.discarded_travel_event import ( + DiscardedTravelEventAuditExchange, +) +from es_elt.xml.audit_data.mam.media import AuditMessages as MediaAuditMessages +from es_elt.xml.audit_data.mam.media import AuditMessagesType as MediaAuditMessagesType +from es_elt.xml.audit_data.mam.media import AuditMessageType as MediaAuditMessageType +from es_elt.xml.audit_data.mam.media import ( + MediaAuditExchange, + MediaStatus, + TransitContracts, +) +from es_elt.xml.audit_data.mam.media_consumption_adjustment import ( + AuditMessages as ConsumptionAdjustmentAuditMessages, +) +from es_elt.xml.audit_data.mam.media_consumption_adjustment import ( + AuditMessagesType as ConsumptionAdjustmentAuditMessagesType, +) +from es_elt.xml.audit_data.mam.media_consumption_adjustment import ( + AuditMessageType as ConsumptionAdjustmentAuditMessageType, +) +from es_elt.xml.audit_data.mam.media_consumption_adjustment import ( + MediaConsumptionAdjustmentAuditExchange, + MediaConsumptionAdjustmentAuditExchangeExcessFareAdjustment, + MediaConsumptionAdjustmentAuditExchangeMissingTravelEventAdjustment, +) +from es_elt.xml.audit_data.mam.media_consumption_adjustment_cancellation import ( + AuditMessages as CancellationAuditMessages, +) +from es_elt.xml.audit_data.mam.media_consumption_adjustment_cancellation import ( + AuditMessagesType as CancellationAuditMessagesType, +) +from es_elt.xml.audit_data.mam.media_consumption_adjustment_cancellation import ( + AuditMessageType as CancellationAuditMessageType, +) +from es_elt.xml.audit_data.mam.media_consumption_adjustment_cancellation import ( + MediaConsumptionAdjustmentCancellationAuditExchange, + MediaConsumptionAdjustmentCancellationAuditExchangeExcessFareAdjustment, + MediaConsumptionAdjustmentCancellationAuditExchangeMissingTravelEventAdjustment, +) +from es_elt.xml.audit_data.mam.media_consumptions import ( + AccessStatus, + AddedJourney, + AddedJourneys, + AddedLeg, + AddedLegs, +) +from es_elt.xml.audit_data.mam.media_consumptions import ( + AuditMessages as ConsumptionsAuditMessages, +) +from es_elt.xml.audit_data.mam.media_consumptions import ( + AuditMessagesType as ConsumptionsAuditMessagesType, +) +from es_elt.xml.audit_data.mam.media_consumptions import ( + AuditMessageType as ConsumptionsAuditMessageType, +) +from es_elt.xml.audit_data.mam.media_consumptions import ( + Journey, + JourneyLegs, + JourneyRatingDetail, + JourneyRatingDetailProductRatingDetails, + Leg, + MediaConsumptionExchange, + MediaConsumptionExchangeJourneys, + MediaConsumptionExchangeModifiedJourneys, + MediaConsumptionExchangeModifiedLegs, + MediaConsumptionListAuditExchange, + MediaConsumptionListAuditExchangeMediaConsumptions, + ProductFare, + ProductFareCrossedZones, + ProductFareLegIds, + ProductRatingDetail, + ProductRatingDetailProductFares, + RemovedJourney, + RemovedJourneys, + RemovedLeg, + RemovedLegs, + TravelEvent, + TravelEvents, +) +from es_elt.xml.audit_data.mam.media_deny_access_notification import ( + AuditMessages as DenyAccessNotificationAuditMessages, +) +from es_elt.xml.audit_data.mam.media_deny_access_notification import ( + AuditMessagesType as DenyAccessNotificationAuditMessagesType, +) +from es_elt.xml.audit_data.mam.media_deny_access_notification import ( + AuditMessageType as DenyAccessNotificationAuditMessageType, +) +from es_elt.xml.audit_data.mam.media_deny_access_notification import ( + MediaDenyAccessNotificationAuditExchange, +) +from es_elt.xml.audit_data.mam.media_grace_expiry_notification import ( + AuditMessages as GraceExpiryAuditMessages, +) +from es_elt.xml.audit_data.mam.media_grace_expiry_notification import ( + AuditMessagesType as GraceExpiryAuditMessagesType, +) +from es_elt.xml.audit_data.mam.media_grace_expiry_notification import ( + AuditMessageType as GraceExpiryAuditMessageType, +) +from es_elt.xml.audit_data.mam.media_grace_expiry_notification import ( + MediaGraceExpiryNotificationAuditExchange, +) +from es_elt.xml.audit_data.mam.media_no_sale_expiry_notification import ( + AuditMessages as NoSaleAuditMessages, +) +from es_elt.xml.audit_data.mam.media_no_sale_expiry_notification import ( + AuditMessagesType as NoSaleAuditMessagesType, +) +from es_elt.xml.audit_data.mam.media_no_sale_expiry_notification import ( + AuditMessageType as NoSaleAuditMessageType, +) +from es_elt.xml.audit_data.mam.media_no_sale_expiry_notification import ( + MediaNoSaleExpiryNotificationAuditExchange, +) +from es_elt.xml.audit_data.mam.media_profile_expiry_notification import ( + AuditMessages as ProfileAuditMessages, +) +from es_elt.xml.audit_data.mam.media_profile_expiry_notification import ( + AuditMessagesType as ProfileAuditMessagesType, +) +from es_elt.xml.audit_data.mam.media_profile_expiry_notification import ( + AuditMessageType as ProfileAuditMessageType, +) +from es_elt.xml.audit_data.mam.media_profile_expiry_notification import ( + ProfileExpiryDateNotificationAuditExchange, +) +from es_elt.xml.audit_data.mam.media_reconstruction import ( + AuditMessages as ReconstructionAuditMessages, +) +from es_elt.xml.audit_data.mam.media_reconstruction import ( + AuditMessagesType as ReconstructionAuditMessagesType, +) +from es_elt.xml.audit_data.mam.media_reconstruction import ( + AuditMessageType as ReconstructionAuditMessageType, +) +from es_elt.xml.audit_data.mam.media_reconstruction import ( + Media, + MediaReconstructionAuditExchange, +) +from es_elt.xml.audit_data.mam.purse_usage import ( + AuditMessages as PurseUsageAuditMessages, +) +from es_elt.xml.audit_data.mam.purse_usage import ( + AuditMessagesType as PurseUsageAuditMessagesType, +) +from es_elt.xml.audit_data.mam.purse_usage import ( + AuditMessageType as PurseUsageAuditMessageType, +) +from es_elt.xml.audit_data.mam.purse_usage import ( + PurseOrigin, + PurseUsageAuditExchange, + PurseUsageType, +) +from es_elt.xml.audit_data.mam.travel_event import ( + AuditMessages as TravelEventAuditMessages, +) +from es_elt.xml.audit_data.mam.travel_event import ( + AuditMessagesType as TravelEventAuditMessagesType, +) +from es_elt.xml.audit_data.mam.travel_event import ( + AuditMessageType as TravelEventAuditMessageType, +) +from es_elt.xml.audit_data.mam.travel_event import ( + TravelEventAuditExchange, + TravelEventAuditType, +) + +__all__ = [ + "AbtPurseAuditExchange", + "AbtPurseAuditMessageType", + "AbtPurseAuditMessages", + "AbtPurseAuditMessagesType", + "OperationType", + "PurseFamily", + "BulkAdjustmentExecutionResultAuditMessageType", + "BulkAdjustmentExecutionResultAuditMessages", + "BulkAdjustmentExecutionResultAuditMessagesType", + "BulkAdjustmentExecutionResultAuditExchange", + "StartAuditMessageType", + "StartAuditMessages", + "StartAuditMessagesType", + "BulkAdjustmentExecutionStartAuditExchange", + "ContractTransferAuditMessageType", + "ContractTransferAuditMessages", + "ContractTransferAuditMessagesType", + "ContractTransferAuditExchange", + "DiscardedTravelEventAuditMessageType", + "DiscardedTravelEventAuditMessages", + "DiscardedTravelEventAuditMessagesType", + "DiscardedTravelEventAuditExchange", + "MediaAuditMessageType", + "MediaAuditMessages", + "MediaAuditMessagesType", + "MediaAuditExchange", + "MediaStatus", + "TransitContracts", + "ConsumptionAdjustmentAuditMessageType", + "ConsumptionAdjustmentAuditMessages", + "ConsumptionAdjustmentAuditMessagesType", + "MediaConsumptionAdjustmentAuditExchange", + "MediaConsumptionAdjustmentAuditExchangeExcessFareAdjustment", + "MediaConsumptionAdjustmentAuditExchangeMissingTravelEventAdjustment", + "CancellationAuditMessageType", + "CancellationAuditMessages", + "CancellationAuditMessagesType", + "MediaConsumptionAdjustmentCancellationAuditExchange", + "MediaConsumptionAdjustmentCancellationAuditExchangeExcessFareAdjustment", + "MediaConsumptionAdjustmentCancellationAuditExchangeMissingTravelEventAdjustment", + "AccessStatus", + "AddedJourney", + "AddedJourneys", + "AddedLeg", + "AddedLegs", + "ConsumptionsAuditMessageType", + "ConsumptionsAuditMessages", + "ConsumptionsAuditMessagesType", + "Journey", + "JourneyRatingDetail", + "JourneyRatingDetailProductRatingDetails", + "JourneyLegs", + "Leg", + "MediaConsumptionExchange", + "MediaConsumptionExchangeJourneys", + "MediaConsumptionExchangeModifiedJourneys", + "MediaConsumptionExchangeModifiedLegs", + "MediaConsumptionListAuditExchange", + "MediaConsumptionListAuditExchangeMediaConsumptions", + "ProductFare", + "ProductFareCrossedZones", + "ProductFareLegIds", + "ProductRatingDetail", + "ProductRatingDetailProductFares", + "RemovedJourney", + "RemovedJourneys", + "RemovedLeg", + "RemovedLegs", + "TravelEvent", + "TravelEvents", + "DenyAccessNotificationAuditMessageType", + "DenyAccessNotificationAuditMessages", + "DenyAccessNotificationAuditMessagesType", + "MediaDenyAccessNotificationAuditExchange", + "GraceExpiryAuditMessageType", + "GraceExpiryAuditMessages", + "GraceExpiryAuditMessagesType", + "MediaGraceExpiryNotificationAuditExchange", + "NoSaleAuditMessageType", + "NoSaleAuditMessages", + "NoSaleAuditMessagesType", + "MediaNoSaleExpiryNotificationAuditExchange", + "ProfileAuditMessageType", + "ProfileAuditMessages", + "ProfileAuditMessagesType", + "ProfileExpiryDateNotificationAuditExchange", + "ReconstructionAuditMessageType", + "ReconstructionAuditMessages", + "ReconstructionAuditMessagesType", + "Media", + "MediaReconstructionAuditExchange", + "PurseUsageAuditMessageType", + "PurseUsageAuditMessages", + "PurseUsageAuditMessagesType", + "PurseOrigin", + "PurseUsageAuditExchange", + "PurseUsageType", + "TravelEventAuditMessageType", + "TravelEventAuditMessages", + "TravelEventAuditMessagesType", + "TravelEventAuditExchange", + "TravelEventAuditType", +] diff --git a/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/__init__.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..c6ec050 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/__init__.cpython-312.pyc differ 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 0000000..3eeabe9 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/abt_purse.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/bulk_adjustment_execution_result.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/bulk_adjustment_execution_result.cpython-312.pyc new file mode 100644 index 0000000..d1f5aba Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/bulk_adjustment_execution_result.cpython-312.pyc differ 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 0000000..f736479 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/bulk_adjustment_execution_start.cpython-312.pyc differ 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 0000000..931d880 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/contract_transfer.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/discarded_travel_event.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/discarded_travel_event.cpython-312.pyc new file mode 100644 index 0000000..d462e77 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/discarded_travel_event.cpython-312.pyc differ 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 0000000..d655fda Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_consumption_adjustment.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_consumption_adjustment.cpython-312.pyc new file mode 100644 index 0000000..43a97ac Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_consumption_adjustment.cpython-312.pyc differ 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 0000000..d4a8552 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_consumption_adjustment_cancellation.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_consumptions.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_consumptions.cpython-312.pyc new file mode 100644 index 0000000..a125e23 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_consumptions.cpython-312.pyc differ 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 0000000..d6b13c1 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_deny_access_notification.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_grace_expiry_notification.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_grace_expiry_notification.cpython-312.pyc new file mode 100644 index 0000000..6f9595e Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_grace_expiry_notification.cpython-312.pyc differ 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 0000000..f015cd1 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_no_sale_expiry_notification.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_profile_expiry_notification.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_profile_expiry_notification.cpython-312.pyc new file mode 100644 index 0000000..1833da1 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_profile_expiry_notification.cpython-312.pyc differ 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 0000000..1278125 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/media_reconstruction.cpython-312.pyc differ 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 0000000..193afa8 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/purse_usage.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/travel_event.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/travel_event.cpython-312.pyc new file mode 100644 index 0000000..a0d714e Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/mam/__pycache__/travel_event.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/mam/abt_purse.py b/es_elt/src/es_elt/xml/audit_data/mam/abt_purse.py new file mode 100644 index 0000000..bbc0054 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/mam/abt_purse.py @@ -0,0 +1,272 @@ +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 +from es_elt.xml.common.media_identification import MediaIdentification + +__NAMESPACE__ = "http://www.thales.dc/AbtPurse" + + +class OperationType(Enum): + ADJUSTMENT = "ADJUSTMENT" + AUTO_RELOAD_ACTIVATED = "AUTO_RELOAD_ACTIVATED" + AUTO_RELOAD_CANCELLED = "AUTO_RELOAD_CANCELLED" + AUTO_RELOAD_COMPLETED = "AUTO_RELOAD_COMPLETED" + AUTO_RELOAD_DEACTIVATED = "AUTO_RELOAD_DEACTIVATED" + AUTO_RELOAD_DECLINED = "AUTO_RELOAD_DECLINED" + AUTO_RELOAD_DISABLED = "AUTO_RELOAD_DISABLED" + AUTO_RELOAD_REQUESTED = "AUTO_RELOAD_REQUESTED" + AUTO_RELOAD_REACTIVATION_REQUESTED = "AUTO_RELOAD_REACTIVATION_REQUESTED" + RELOAD = "RELOAD" + MEDIA_ATTACHMENT = "MEDIA_ATTACHMENT" + CREATION = "CREATION" + MEDIA_DETACHMENT = "MEDIA_DETACHMENT" + FUNDING = "FUNDING" + REFUND = "REFUND" + PURCHASE = "PURCHASE" + TRAVEL_CHARGE = "TRAVEL_CHARGE" + PAYMENT_AGREEMENT_REPLACED = "PAYMENT_AGREEMENT_REPLACED" + CUSTOMER_ATTACHMENT = "CUSTOMER_ATTACHMENT" + CUSTOMER_DETACHMENT = "CUSTOMER_DETACHMENT" + + +class PurseFamily(Enum): + CENTRALIZED = "CENTRALIZED" + INDIVIDUAL = "INDIVIDUAL" + + +class AbtPurseAuditExchange(BaseModel): + """ + When abt purse is created, reloaded, used to travel or to purchase , + when autoReload activated deactivated or reactivated ... + + :ivar occurrence_date: + :ivar purse_id: In case of centralized purse usage, this is the id + of the purse that is used. + :ivar purse_family: + :ivar operation_type: + :ivar purse_balance_amount_before: + :ivar purse_balance_amount_after: + :ivar auto_reload_amount: + :ivar amount: + :ivar auto_reload_threshold: + :ivar payment_means_type: + :ivar purse_owner: The owner of the purse + :ivar purse_type_ticketing_id: + :ivar media: + :ivar user_id: Id of the user + :ivar ordered_item_id: The ordering sequence number of this + settlement period. + :ivar customer_id: + :ivar retailer_be: The stakeholder who will be debited money + :ivar operation_sequence_number: The sequence of operation on purse + incremented for each operation + :ivar reason: Reason of the adjustment + """ + + model_config = ConfigDict(defer_build=True) + occurrence_date: XmlDateTime = field( + metadata={ + "name": "OccurrenceDate", + "type": "Element", + "namespace": "", + "required": True, + } + ) + purse_id: str = field( + metadata={ + "name": "PurseId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + purse_family: PurseFamily = field( + metadata={ + "name": "PurseFamily", + "type": "Element", + "namespace": "", + "required": True, + } + ) + operation_type: OperationType = field( + metadata={ + "name": "OperationType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + purse_balance_amount_before: Decimal = field( + metadata={ + "name": "PurseBalanceAmountBefore", + "type": "Element", + "namespace": "", + "required": True, + } + ) + purse_balance_amount_after: Decimal = field( + metadata={ + "name": "PurseBalanceAmountAfter", + "type": "Element", + "namespace": "", + "required": True, + } + ) + auto_reload_amount: None | Decimal = field( + default=None, + metadata={ + "name": "AutoReloadAmount", + "type": "Element", + "namespace": "", + }, + ) + amount: None | Decimal = field( + default=None, + metadata={ + "name": "Amount", + "type": "Element", + "namespace": "", + }, + ) + auto_reload_threshold: None | Decimal = field( + default=None, + metadata={ + "name": "AutoReloadThreshold", + "type": "Element", + "namespace": "", + }, + ) + payment_means_type: None | str = field( + default=None, + metadata={ + "name": "PaymentMeansType", + "type": "Element", + "namespace": "", + }, + ) + purse_owner: None | str = field( + default=None, + metadata={ + "name": "PurseOwner", + "type": "Element", + "namespace": "", + }, + ) + purse_type_ticketing_id: None | int = field( + default=None, + metadata={ + "name": "PurseTypeTicketingId", + "type": "Element", + "namespace": "", + }, + ) + media: None | MediaIdentification = field( + default=None, + metadata={ + "name": "Media", + "type": "Element", + "namespace": "", + }, + ) + user_id: None | str = field( + default=None, + metadata={ + "name": "UserId", + "type": "Element", + "namespace": "", + }, + ) + ordered_item_id: None | int = field( + default=None, + metadata={ + "name": "OrderedItemId", + "type": "Element", + "namespace": "", + }, + ) + customer_id: None | str = field( + default=None, + metadata={ + "name": "CustomerId", + "type": "Element", + "namespace": "", + }, + ) + retailer_be: None | str = field( + default=None, + metadata={ + "name": "RetailerBE", + "type": "Element", + "namespace": "", + }, + ) + operation_sequence_number: int = field( + metadata={ + "name": "OperationSequenceNumber", + "type": "Element", + "namespace": "", + "required": True, + } + ) + reason: None | str = field( + default=None, + metadata={ + "name": "Reason", + "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: AbtPurseAuditExchange = 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": "", + }, + ) + abt_purse_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "AbtPurseXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/AbtPurse" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/mam/bulk_adjustment_execution_result.py b/es_elt/src/es_elt/xml/audit_data/mam/bulk_adjustment_execution_result.py new file mode 100644 index 0000000..d9ee07c --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/mam/bulk_adjustment_execution_result.py @@ -0,0 +1,127 @@ +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 +from es_elt.xml.common.media_consumption_adjustment_common import ( + BulkAdjustmentEntryResultErrors, + BulkAdjustmentInformation, +) + +__NAMESPACE__ = "http://www.thales.dc/BulkAdjustmentExecutionResult" + + +class BulkAdjustmentExecutionResultAuditExchange(BaseModel): + """ + mam_media_consumption_bulk_adjustment_request_execution_post: When a + bulk adjustment process ends. + """ + + model_config = ConfigDict(defer_build=True) + end_date_time: XmlDateTime = field( + metadata={ + "name": "EndDateTime", + "type": "Element", + "namespace": "", + "required": True, + } + ) + bulk_adjustment_data: BulkAdjustmentInformation = field( + metadata={ + "name": "BulkAdjustmentData", + "type": "Element", + "namespace": "", + "required": True, + } + ) + bulk_adjustment_entry_result_errors: BulkAdjustmentEntryResultErrors = field( + metadata={ + "name": "BulkAdjustmentEntryResultErrors", + "type": "Element", + "namespace": "", + "required": True, + } + ) + effective_adjustment_total_amount: Decimal = field( + metadata={ + "name": "EffectiveAdjustmentTotalAmount", + "type": "Element", + "namespace": "", + "required": True, + } + ) + nb_entry_completed: int = field( + metadata={ + "name": "NbEntryCompleted", + "type": "Element", + "namespace": "", + "required": True, + } + ) + nb_entry_skipped: int = field( + metadata={ + "name": "NbEntrySkipped", + "type": "Element", + "namespace": "", + "required": True, + } + ) + nb_entry_failed: int = field( + metadata={ + "name": "NbEntryFailed", + "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: BulkAdjustmentExecutionResultAuditExchange = 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": "", + }, + ) + bulk_adjustment_execution_result_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "BulkAdjustmentExecutionResultXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/BulkAdjustmentExecutionResult" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/mam/bulk_adjustment_execution_start.py b/es_elt/src/es_elt/xml/audit_data/mam/bulk_adjustment_execution_start.py new file mode 100644 index 0000000..4581e9b --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/mam/bulk_adjustment_execution_start.py @@ -0,0 +1,85 @@ +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 +from es_elt.xml.common.media_consumption_adjustment_common import ( + BulkAdjustmentInformation, +) + +__NAMESPACE__ = "http://www.thales.dc/BulkAdjustmentExecutionStart" + + +class BulkAdjustmentExecutionStartAuditExchange(BaseModel): + """ + mam_media_consumption_bulk_adjustment_request_execution_post: When a + bulk adjustment process starts or content of the processed bulk + adjustment. + """ + + model_config = ConfigDict(defer_build=True) + start_date_time: XmlDateTime = field( + metadata={ + "name": "StartDateTime", + "type": "Element", + "namespace": "", + "required": True, + } + ) + bulk_adjustment_data: BulkAdjustmentInformation = field( + metadata={ + "name": "BulkAdjustmentData", + "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: BulkAdjustmentExecutionStartAuditExchange = 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": "", + }, + ) + bulk_adjustment_execution_start_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "BulkAdjustmentExecutionStartXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/BulkAdjustmentExecutionStart" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/mam/contract_transfer.py b/es_elt/src/es_elt/xml/audit_data/mam/contract_transfer.py new file mode 100644 index 0000000..c2bd3b0 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/mam/contract_transfer.py @@ -0,0 +1,122 @@ +from __future__ import annotations + +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/ContractTransfer" + + +class ContractTransferAuditExchange(BaseModel): + """ + 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. + """ + + model_config = ConfigDict(defer_build=True) + origin_media_serial_number: None | str = field( + default=None, + metadata={ + "name": "OriginMediaSerialNumber", + "type": "Element", + "namespace": "", + }, + ) + origin_media_type: None | int = field( + default=None, + metadata={ + "name": "OriginMediaType", + "type": "Element", + "namespace": "", + }, + ) + unique_contract_number: None | str = field( + default=None, + metadata={ + "name": "UniqueContractNumber", + "type": "Element", + "namespace": "", + }, + ) + destination_media_serial_number: None | str = field( + default=None, + metadata={ + "name": "DestinationMediaSerialNumber", + "type": "Element", + "namespace": "", + }, + ) + destination_media_type: None | int = field( + default=None, + metadata={ + "name": "DestinationMediaType", + "type": "Element", + "namespace": "", + }, + ) + contract_transfer_date: None | XmlDate = field( + default=None, + metadata={ + "name": "ContractTransferDate", + "type": "Element", + "namespace": "", + }, + ) + order_item_id: None | int = field( + default=None, + metadata={ + "name": "OrderItemId", + "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: ContractTransferAuditExchange = 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": "", + }, + ) + contract_transfer_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "ContractTransferXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/ContractTransfer" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/mam/discarded_travel_event.py b/es_elt/src/es_elt/xml/audit_data/mam/discarded_travel_event.py new file mode 100644 index 0000000..77bff5b --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/mam/discarded_travel_event.py @@ -0,0 +1,97 @@ +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/DiscardedTravelEvent" + + +class DiscardedTravelEventAuditExchange(BaseModel): + """ + mam_reconstruction_discarded_travel_event_post: When we discard a + travel event. + """ + + model_config = ConfigDict(defer_build=True) + transaction_id: None | str = field( + default=None, + metadata={ + "name": "TransactionId", + "type": "Element", + "namespace": "", + }, + ) + media_id: None | str = field( + default=None, + metadata={ + "name": "MediaId", + "type": "Element", + "namespace": "", + }, + ) + occurrence_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "OccurrenceDate", + "type": "Element", + "namespace": "", + }, + ) + reason: None | str = field( + default=None, + metadata={ + "name": "Reason", + "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: DiscardedTravelEventAuditExchange = 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": "", + }, + ) + discarded_travel_event_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "DiscardedTravelEventXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/DiscardedTravelEvent" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/mam/media.py b/es_elt/src/es_elt/xml/audit_data/mam/media.py new file mode 100644 index 0000000..5be2b9d --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/mam/media.py @@ -0,0 +1,168 @@ +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 +from es_elt.xml.common.transit_contract import TransitContract + +__NAMESPACE__ = "http://www.thales.dc/Media" + + +class MediaStatus(Enum): + INITIALIZED = "INITIALIZED" + ENABLED = "ENABLED" + DENIED = "DENIED" + BLOCKED = "BLOCKED" + EXPIRED = "EXPIRED" + CLOSED = "CLOSED" + + +class TransitContracts(BaseModel): + model_config = ConfigDict(defer_build=True) + transit_contract: list[TransitContract] = field( + default_factory=list, + metadata={ + "name": "TransitContract", + "type": "Element", + "namespace": "", + }, + ) + + +class MediaAuditExchange(BaseModel): + """ + :ivar expiry_date: + :ivar media_graphical_number: + :ivar media_id: + :ivar media_serial_number: + :ivar seq_id: + :ivar in_accept_list: Stipulates if the media is in accept List + :ivar media_status: Dictionary prefix: MediaStatus + :ivar media_type_id: Dictionary prefix: MediaType + :ivar transit_contracts: + """ + + model_config = ConfigDict(defer_build=True) + expiry_date: None | XmlDate = field( + default=None, + metadata={ + "name": "ExpiryDate", + "type": "Element", + "namespace": "", + }, + ) + media_graphical_number: None | str = field( + default=None, + metadata={ + "name": "MediaGraphicalNumber", + "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": "", + }, + ) + seq_id: None | int = field( + default=None, + metadata={ + "name": "SeqId", + "type": "Element", + "namespace": "", + }, + ) + in_accept_list: bool = field( + metadata={ + "name": "InAcceptList", + "type": "Element", + "namespace": "", + "required": True, + } + ) + media_status: None | MediaStatus = field( + default=None, + metadata={ + "name": "MediaStatus", + "type": "Element", + "namespace": "", + }, + ) + media_type_id: None | int = field( + default=None, + metadata={ + "name": "MediaTypeId", + "type": "Element", + "namespace": "", + }, + ) + transit_contracts: None | TransitContracts = field( + default=None, + metadata={ + "name": "TransitContracts", + "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: MediaAuditExchange = 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": "", + }, + ) + media_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "MediaXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/Media" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/mam/media_consumption_adjustment.py b/es_elt/src/es_elt/xml/audit_data/mam/media_consumption_adjustment.py new file mode 100644 index 0000000..c94051e --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/mam/media_consumption_adjustment.py @@ -0,0 +1,312 @@ +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 +from es_elt.xml.common.media_consumption_adjustment_common import ( + AdjustmentSource, + AdjustmentType, + MediaConsumptionAdjustmentModificationResult, + MediaConsumptionJourneyAdjustmentModificationResult, + MediaIdentification, + User, +) + +__NAMESPACE__ = "http://www.thales.dc/MediaConsumptionAdjustment" + + +class MediaConsumptionAdjustmentAuditExchangeExcessFareAdjustment(BaseModel): + """ + :ivar adjusted_travel_event_transaction_id: Transaction Id of the + exit travel event for which the excess fare has been adjusted + :ivar daily_media_consumption_id: + :ivar previous_leg_id: + :ivar recomputed_leg_id: + :ivar free_excess: + """ + + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + adjusted_travel_event_transaction_id: str = field( + metadata={ + "name": "AdjustedTravelEventTransactionId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + daily_media_consumption_id: str = field( + metadata={ + "name": "DailyMediaConsumptionId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + previous_leg_id: str = field( + metadata={ + "name": "PreviousLegId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + recomputed_leg_id: str = field( + metadata={ + "name": "RecomputedLegId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + free_excess: bool = field( + metadata={ + "name": "FreeExcess", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class MediaConsumptionAdjustmentAuditExchangeMissingTravelEventAdjustment(BaseModel): + """ + :ivar existing_travel_event_transaction_id: Transaction Id of the + travel event that was previously missing a travel event + :ivar adjusted_occurrence_date: + :ivar adjusted_fare_point_id: + :ivar adjusted_stop_point_id: + :ivar daily_media_consumption_id: + :ivar previous_leg_id: + :ivar recomputed_leg_id: + :ivar free_virtual: + """ + + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + existing_travel_event_transaction_id: str = field( + metadata={ + "name": "ExistingTravelEventTransactionId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + adjusted_occurrence_date: XmlDateTime = field( + metadata={ + "name": "AdjustedOccurrenceDate", + "type": "Element", + "namespace": "", + "required": True, + } + ) + adjusted_fare_point_id: int = field( + metadata={ + "name": "AdjustedFarePointId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + adjusted_stop_point_id: int = field( + metadata={ + "name": "AdjustedStopPointId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + daily_media_consumption_id: str = field( + metadata={ + "name": "DailyMediaConsumptionId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + previous_leg_id: str = field( + metadata={ + "name": "PreviousLegId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + recomputed_leg_id: str = field( + metadata={ + "name": "RecomputedLegId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + free_virtual: bool = field( + metadata={ + "name": "FreeVirtual", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class MediaConsumptionAdjustmentAuditExchange(BaseModel): + """ + 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. + + :ivar adjustment_date: + :ivar media_identification: + :ivar user: User performing the adjustment + :ivar adjustment_type: + :ivar adjustment_source: + :ivar bulk_id: If the adjustment is processed by a bulk adjustment + :ivar media_consumption_adjustment_modification_result: + :ivar media_consumption_journey_adjustment_modification_result: + :ivar missing_travel_event_adjustment: + :ivar excess_fare_adjustment: + """ + + model_config = ConfigDict(defer_build=True) + adjustment_date: XmlDateTime = field( + metadata={ + "name": "AdjustmentDate", + "type": "Element", + "namespace": "", + "required": True, + } + ) + media_identification: MediaIdentification = field( + metadata={ + "name": "MediaIdentification", + "type": "Element", + "namespace": "", + "required": True, + } + ) + user: User = field( + metadata={ + "name": "User", + "type": "Element", + "namespace": "", + "required": True, + } + ) + adjustment_type: AdjustmentType = field( + metadata={ + "name": "AdjustmentType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + adjustment_source: AdjustmentSource = field( + metadata={ + "name": "AdjustmentSource", + "type": "Element", + "namespace": "", + "required": True, + } + ) + bulk_id: None | str = field( + default=None, + metadata={ + "name": "BulkId", + "type": "Element", + "namespace": "", + }, + ) + media_consumption_adjustment_modification_result: ( + None | MediaConsumptionAdjustmentModificationResult + ) = field( + default=None, + metadata={ + "name": "MediaConsumptionAdjustmentModificationResult", + "type": "Element", + "namespace": "", + }, + ) + media_consumption_journey_adjustment_modification_result: ( + None | MediaConsumptionJourneyAdjustmentModificationResult + ) = field( + default=None, + metadata={ + "name": "MediaConsumptionJourneyAdjustmentModificationResult", + "type": "Element", + "namespace": "", + }, + ) + missing_travel_event_adjustment: ( + None | MediaConsumptionAdjustmentAuditExchangeMissingTravelEventAdjustment + ) = field( + default=None, + metadata={ + "name": "MissingTravelEventAdjustment", + "type": "Element", + "namespace": "", + }, + ) + excess_fare_adjustment: ( + None | MediaConsumptionAdjustmentAuditExchangeExcessFareAdjustment + ) = field( + default=None, + metadata={ + "name": "ExcessFareAdjustment", + "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: MediaConsumptionAdjustmentAuditExchange = 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": "", + }, + ) + media_consumption_adjustment_xsd_version: str = field( + const=True, + default="1.2", + metadata={ + "name": "MediaConsumptionAdjustmentXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/MediaConsumptionAdjustment" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/mam/media_consumption_adjustment_cancellation.py b/es_elt/src/es_elt/xml/audit_data/mam/media_consumption_adjustment_cancellation.py new file mode 100644 index 0000000..36e00ea --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/mam/media_consumption_adjustment_cancellation.py @@ -0,0 +1,255 @@ +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 +from es_elt.xml.common.media_consumption_adjustment_common import ( + AdjustmentType, + MediaConsumptionAdjustmentModificationResult, + MediaConsumptionJourneyAdjustmentModificationResult, + MediaIdentification, + User, +) + +__NAMESPACE__ = "http://www.thales.dc/MediaConsumptionAdjustmentCancellation" + + +class MediaConsumptionAdjustmentCancellationAuditExchangeExcessFareAdjustment( + BaseModel +): + """ + :ivar adjusted_travel_event_transaction_id: Transaction Id of the + exit travel event for which the excess fare has been adjusted + :ivar daily_media_consumption_id: + :ivar previous_leg_id: + :ivar recomputed_leg_id: + """ + + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + adjusted_travel_event_transaction_id: str = field( + metadata={ + "name": "AdjustedTravelEventTransactionId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + daily_media_consumption_id: str = field( + metadata={ + "name": "DailyMediaConsumptionId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + previous_leg_id: str = field( + metadata={ + "name": "PreviousLegId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + recomputed_leg_id: str = field( + metadata={ + "name": "RecomputedLegId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class MediaConsumptionAdjustmentCancellationAuditExchangeMissingTravelEventAdjustment( + BaseModel +): + """ + :ivar adjustment_type: + :ivar existing_travel_event_transaction_id: Transaction Id of the + travel event that was previously missing a travel event + :ivar daily_media_consumption_id: + :ivar previous_leg_id: + :ivar recomputed_leg_id: + """ + + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + adjustment_type: AdjustmentType = field( + metadata={ + "name": "AdjustmentType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + existing_travel_event_transaction_id: str = field( + metadata={ + "name": "ExistingTravelEventTransactionId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + daily_media_consumption_id: str = field( + metadata={ + "name": "DailyMediaConsumptionId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + previous_leg_id: str = field( + metadata={ + "name": "PreviousLegId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + recomputed_leg_id: str = field( + metadata={ + "name": "RecomputedLegId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class MediaConsumptionAdjustmentCancellationAuditExchange(BaseModel): + """ + 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. + + :ivar cancellation_date: + :ivar media_identification: + :ivar user: User performing the cancellation + :ivar media_consumption_adjustment_modification_result: + :ivar media_consumption_journey_adjustment_modification_result: + :ivar missing_travel_event_adjustment: + :ivar excess_fare_adjustment: + """ + + model_config = ConfigDict(defer_build=True) + cancellation_date: XmlDateTime = field( + metadata={ + "name": "CancellationDate", + "type": "Element", + "namespace": "", + "required": True, + } + ) + media_identification: MediaIdentification = field( + metadata={ + "name": "MediaIdentification", + "type": "Element", + "namespace": "", + "required": True, + } + ) + user: User = field( + metadata={ + "name": "User", + "type": "Element", + "namespace": "", + "required": True, + } + ) + media_consumption_adjustment_modification_result: ( + None | MediaConsumptionAdjustmentModificationResult + ) = field( + default=None, + metadata={ + "name": "MediaConsumptionAdjustmentModificationResult", + "type": "Element", + "namespace": "", + }, + ) + media_consumption_journey_adjustment_modification_result: ( + None | MediaConsumptionJourneyAdjustmentModificationResult + ) = field( + default=None, + metadata={ + "name": "MediaConsumptionJourneyAdjustmentModificationResult", + "type": "Element", + "namespace": "", + }, + ) + missing_travel_event_adjustment: ( + None + | MediaConsumptionAdjustmentCancellationAuditExchangeMissingTravelEventAdjustment + ) = field( + default=None, + metadata={ + "name": "MissingTravelEventAdjustment", + "type": "Element", + "namespace": "", + }, + ) + excess_fare_adjustment: ( + None | MediaConsumptionAdjustmentCancellationAuditExchangeExcessFareAdjustment + ) = field( + default=None, + metadata={ + "name": "ExcessFareAdjustment", + "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: MediaConsumptionAdjustmentCancellationAuditExchange = 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": "", + }, + ) + media_consumption_adjustment_cancellation_xsd_version: str = field( + const=True, + default="1.1", + metadata={ + "name": "MediaConsumptionAdjustmentCancellationXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/MediaConsumptionAdjustmentCancellation" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/mam/media_consumptions.py b/es_elt/src/es_elt/xml/audit_data/mam/media_consumptions.py new file mode 100644 index 0000000..0b5f7b3 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/mam/media_consumptions.py @@ -0,0 +1,899 @@ +from __future__ import annotations + +from decimal import Decimal +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 +from es_elt.xml.common.product_price_with_details import ( + Discounts, + Fees, + ProductPriceWithDetails, +) +from es_elt.xml.common.rating_detail import RatingDetail +from es_elt.xml.common.travel_event_source import TravelEventSource +from es_elt.xml.common.travel_event_type import TravelEventType +from es_elt.xml.common.travel_status import TravelStatus +from es_elt.xml.common.validation_model import ValidationModel + +__NAMESPACE__ = "http://www.thales.dc/MediaConsumptions" + + +class AccessStatus(Enum): + GRANTED = "GRANTED" + DENIED = "DENIED" + + +class AddedJourney(BaseModel): + model_config = ConfigDict(defer_build=True) + journey_id: str = field( + metadata={ + "name": "JourneyId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AddedLeg(BaseModel): + model_config = ConfigDict(defer_build=True) + leg_id: str = field( + metadata={ + "name": "LegId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class ProductFareCrossedZones(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + crossed_zone: list[int] = field( + default_factory=list, + metadata={ + "name": "CrossedZone", + "type": "Element", + "namespace": "", + }, + ) + + +class ProductFareLegIds(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + leg_id: list[str] = field( + default_factory=list, + metadata={ + "name": "LegId", + "type": "Element", + "namespace": "", + }, + ) + + +class RemovedJourney(BaseModel): + model_config = ConfigDict(defer_build=True) + journey_id: str = field( + metadata={ + "name": "JourneyId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class RemovedLeg(BaseModel): + model_config = ConfigDict(defer_build=True) + leg_id: str = field( + metadata={ + "name": "LegId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class AddedJourneys(BaseModel): + """ + Dictionary prefix: AddedJourneys. + """ + + model_config = ConfigDict(defer_build=True) + added_journey: list[AddedJourney] = field( + default_factory=list, + metadata={ + "name": "AddedJourney", + "type": "Element", + "namespace": "", + }, + ) + + +class AddedLegs(BaseModel): + """ + Dictionary prefix: AddedLegs. + """ + + model_config = ConfigDict(defer_build=True) + added_leg: list[AddedLeg] = field( + default_factory=list, + metadata={ + "name": "AddedLeg", + "type": "Element", + "namespace": "", + }, + ) + + +class ProductFare(BaseModel): + """ + :ivar leg_ids: LegIds + :ivar base_fare_type: + :ivar price: + :ivar crossed_zones: CrossedZones + """ + + model_config = ConfigDict(defer_build=True) + leg_ids: None | ProductFareLegIds = field( + default=None, + metadata={ + "name": "LegIds", + "type": "Element", + "namespace": "", + }, + ) + base_fare_type: str = field( + metadata={ + "name": "BaseFareType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + price: Decimal = field( + metadata={ + "name": "Price", + "type": "Element", + "namespace": "", + "required": True, + } + ) + crossed_zones: None | ProductFareCrossedZones = field( + default=None, + metadata={ + "name": "CrossedZones", + "type": "Element", + "namespace": "", + }, + ) + + +class RemovedJourneys(BaseModel): + """ + Dictionary prefix: RemovedJourneys. + """ + + model_config = ConfigDict(defer_build=True) + removed_journey: list[RemovedJourney] = field( + default_factory=list, + metadata={ + "name": "RemovedJourney", + "type": "Element", + "namespace": "", + }, + ) + + +class RemovedLegs(BaseModel): + """ + Dictionary prefix: RemovedLegs. + """ + + model_config = ConfigDict(defer_build=True) + removed_leg: list[RemovedLeg] = field( + default_factory=list, + metadata={ + "name": "RemovedLeg", + "type": "Element", + "namespace": "", + }, + ) + + +class TravelEvent(BaseModel): + """ + :ivar occurrence_date: + :ivar stop_point_id: Dictionary prefix: StopPoint + :ivar fare_point_id: Dictionary prefix: FarePoint + :ivar access_status: Dictionary prefix: AccessStatus AccessStatus + will always be filled in case of the TravelEvent comes from a + device otherwise this field is not present + :ivar travel_event_type: Dictionary prefix: TravelEventType + :ivar validation_model: Dictionary prefix: ValidationModel + :ivar travel_event_source: Dictionary prefix: TravelEventSource + TravelEventSource will always be filled in case of the + TravelEvent comes from a device otherwise this field is not + present + :ivar travel_status: Dictionary prefix: TravelStatus + :ivar transaction_id: 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 + :ivar travel_event_id: + :ivar inclusion_order: + :ivar inclusion_date: + :ivar override_excess_fare: + :ivar duplicate: + :ivar duplicate_original_transaction_id: + """ + + model_config = ConfigDict(defer_build=True) + occurrence_date: XmlDateTime = field( + metadata={ + "name": "OccurrenceDate", + "type": "Element", + "namespace": "", + "required": True, + } + ) + stop_point_id: None | int = field( + default=None, + metadata={ + "name": "StopPointId", + "type": "Element", + "namespace": "", + }, + ) + fare_point_id: None | int = field( + default=None, + metadata={ + "name": "FarePointId", + "type": "Element", + "namespace": "", + }, + ) + access_status: None | AccessStatus = field( + default=None, + metadata={ + "name": "AccessStatus", + "type": "Element", + "namespace": "", + }, + ) + travel_event_type: TravelEventType = field( + metadata={ + "name": "TravelEventType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + validation_model: ValidationModel = field( + metadata={ + "name": "ValidationModel", + "type": "Element", + "namespace": "", + "required": True, + } + ) + travel_event_source: None | TravelEventSource = field( + default=None, + metadata={ + "name": "TravelEventSource", + "type": "Element", + "namespace": "", + }, + ) + travel_status: TravelStatus = field( + metadata={ + "name": "TravelStatus", + "type": "Element", + "namespace": "", + "required": True, + } + ) + transaction_id: None | str = field( + default=None, + metadata={ + "name": "TransactionId", + "type": "Element", + "namespace": "", + }, + ) + travel_event_id: None | str = field( + default=None, + metadata={ + "name": "TravelEventId", + "type": "Element", + "namespace": "", + }, + ) + inclusion_order: int = field( + metadata={ + "name": "InclusionOrder", + "type": "Element", + "namespace": "", + "required": True, + } + ) + inclusion_date: XmlDateTime = field( + metadata={ + "name": "InclusionDate", + "type": "Element", + "namespace": "", + "required": True, + } + ) + override_excess_fare: bool = field( + metadata={ + "name": "OverrideExcessFare", + "type": "Element", + "namespace": "", + "required": True, + } + ) + duplicate: bool = field( + metadata={ + "name": "Duplicate", + "type": "Element", + "namespace": "", + "required": True, + } + ) + duplicate_original_transaction_id: None | str = field( + default=None, + metadata={ + "name": "DuplicateOriginalTransactionId", + "type": "Element", + "namespace": "", + }, + ) + + +class MediaConsumptionExchangeModifiedJourneys(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + added_journeys: AddedJourneys = field( + metadata={ + "name": "AddedJourneys", + "type": "Element", + "namespace": "", + "required": True, + } + ) + removed_journeys: RemovedJourneys = field( + metadata={ + "name": "RemovedJourneys", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class MediaConsumptionExchangeModifiedLegs(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + added_legs: AddedLegs = field( + metadata={ + "name": "AddedLegs", + "type": "Element", + "namespace": "", + "required": True, + } + ) + removed_legs: RemovedLegs = field( + metadata={ + "name": "RemovedLegs", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class ProductRatingDetailProductFares(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + product_fare: list[ProductFare] = field( + default_factory=list, + metadata={ + "name": "ProductFare", + "type": "Element", + "namespace": "", + }, + ) + + +class TravelEvents(BaseModel): + model_config = ConfigDict(defer_build=True) + travel_event: list[TravelEvent] = field( + default_factory=list, + metadata={ + "name": "TravelEvent", + "type": "Element", + "namespace": "", + }, + ) + + +class Leg(BaseModel): + """ + :ivar leg_id: Unique identifier for a leg. Between multiple + reconstructions, the legId will be kept constant if the leg did + not change + :ivar business_entity: Dictionary prefix: BusinessEntity + :ivar line_id: + :ivar rating_detail: + :ivar total_charge: + :ivar transport_mode: Dictionary prefix: TransportMode + :ivar travel_status: Dictionary prefix: TravelStatus + :ivar excess_fare: + :ivar override_excess_fare: + :ivar duplicate: + :ivar expired: 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) + :ivar travel_events: Travel events + """ + + model_config = ConfigDict(defer_build=True) + leg_id: str = field( + metadata={ + "name": "LegId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + business_entity: None | str = field( + default=None, + metadata={ + "name": "BusinessEntity", + "type": "Element", + "namespace": "", + }, + ) + line_id: None | str = field( + default=None, + metadata={ + "name": "LineId", + "type": "Element", + "namespace": "", + }, + ) + rating_detail: None | RatingDetail = field( + default=None, + metadata={ + "name": "RatingDetail", + "type": "Element", + "namespace": "", + }, + ) + total_charge: None | Decimal = field( + default=None, + metadata={ + "name": "TotalCharge", + "type": "Element", + "namespace": "", + }, + ) + transport_mode: None | str = field( + default=None, + metadata={ + "name": "TransportMode", + "type": "Element", + "namespace": "", + "max_length": 255, + }, + ) + travel_status: None | TravelStatus = field( + default=None, + metadata={ + "name": "TravelStatus", + "type": "Element", + "namespace": "", + }, + ) + excess_fare: bool = field( + metadata={ + "name": "ExcessFare", + "type": "Element", + "namespace": "", + "required": True, + } + ) + override_excess_fare: bool = field( + metadata={ + "name": "OverrideExcessFare", + "type": "Element", + "namespace": "", + "required": True, + } + ) + duplicate: bool = field( + metadata={ + "name": "Duplicate", + "type": "Element", + "namespace": "", + "required": True, + } + ) + expired: None | bool = field( + default=None, + metadata={ + "name": "Expired", + "type": "Element", + "namespace": "", + }, + ) + travel_events: None | TravelEvents = field( + default=None, + metadata={ + "name": "TravelEvents", + "type": "Element", + "namespace": "", + }, + ) + + +class ProductRatingDetail(BaseModel): + """ + :ivar product_code: + :ivar product_fares: ProductFare + :ivar discounts: + :ivar fees: + """ + + model_config = ConfigDict(defer_build=True) + product_code: int = field( + metadata={ + "name": "ProductCode", + "type": "Element", + "namespace": "", + "required": True, + } + ) + product_fares: None | ProductRatingDetailProductFares = field( + default=None, + metadata={ + "name": "ProductFares", + "type": "Element", + "namespace": "", + }, + ) + discounts: None | Discounts = field( + default=None, + metadata={ + "name": "Discounts", + "type": "Element", + "namespace": "", + }, + ) + fees: None | Fees = field( + default=None, + metadata={ + "name": "Fees", + "type": "Element", + "namespace": "", + }, + ) + + +class JourneyRatingDetailProductRatingDetails(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + product_rating_detail: list[ProductRatingDetail] = field( + default_factory=list, + metadata={ + "name": "ProductRatingDetail", + "type": "Element", + "namespace": "", + }, + ) + + +class JourneyLegs(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + leg: list[Leg] = field( + default_factory=list, + metadata={ + "name": "Leg", + "type": "Element", + "namespace": "", + }, + ) + + +class JourneyRatingDetail(BaseModel): + """ + :ivar product_price_with_details: + :ivar product_rating_details: ProductRatingDetails + """ + + model_config = ConfigDict(defer_build=True) + product_price_with_details: None | ProductPriceWithDetails = field( + default=None, + metadata={ + "name": "ProductPriceWithDetails", + "type": "Element", + "namespace": "", + }, + ) + product_rating_details: None | JourneyRatingDetailProductRatingDetails = field( + default=None, + metadata={ + "name": "ProductRatingDetails", + "type": "Element", + "namespace": "", + }, + ) + + +class Journey(BaseModel): + """ + :ivar journey_id: + :ivar total_charge: + :ivar legs: Legs + :ivar rating_detail: + """ + + model_config = ConfigDict(defer_build=True) + journey_id: None | str = field( + default=None, + metadata={ + "name": "JourneyId", + "type": "Element", + "namespace": "", + }, + ) + total_charge: None | Decimal = field( + default=None, + metadata={ + "name": "TotalCharge", + "type": "Element", + "namespace": "", + }, + ) + legs: None | JourneyLegs = field( + default=None, + metadata={ + "name": "Legs", + "type": "Element", + "namespace": "", + }, + ) + rating_detail: None | JourneyRatingDetail = field( + default=None, + metadata={ + "name": "RatingDetail", + "type": "Element", + "namespace": "", + }, + ) + + +class MediaConsumptionExchangeJourneys(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + journey: list[Journey] = field( + default_factory=list, + metadata={ + "name": "Journey", + "type": "Element", + "namespace": "", + }, + ) + + +class MediaConsumptionExchange(BaseModel): + """ + :ivar commercial_id: Dictionary prefix: CommercialId + :ivar daily_media_consumption_id: + :ivar creation_date: + :ivar media_id: + :ivar media_serial_number: + :ivar media_type_id: Dictionary prefix: MediaType + :ivar sequence: + :ivar travel_day: + :ivar journeys: Journeys + :ivar modified_journeys: Dictionary prefix: ModifiedJourneys + :ivar modified_legs: Dictionary prefix: ModifiedLegs + """ + + model_config = ConfigDict(defer_build=True) + commercial_id: None | int = field( + default=None, + metadata={ + "name": "CommercialId", + "type": "Element", + "namespace": "", + }, + ) + daily_media_consumption_id: str = field( + metadata={ + "name": "DailyMediaConsumptionId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + creation_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "CreationDate", + "type": "Element", + "namespace": "", + }, + ) + 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, + } + ) + sequence: int = field( + metadata={ + "name": "Sequence", + "type": "Element", + "namespace": "", + "required": True, + } + ) + travel_day: XmlDate = field( + metadata={ + "name": "TravelDay", + "type": "Element", + "namespace": "", + "required": True, + } + ) + journeys: None | MediaConsumptionExchangeJourneys = field( + default=None, + metadata={ + "name": "Journeys", + "type": "Element", + "namespace": "", + }, + ) + modified_journeys: None | MediaConsumptionExchangeModifiedJourneys = field( + default=None, + metadata={ + "name": "ModifiedJourneys", + "type": "Element", + "namespace": "", + }, + ) + modified_legs: None | MediaConsumptionExchangeModifiedLegs = field( + default=None, + metadata={ + "name": "ModifiedLegs", + "type": "Element", + "namespace": "", + }, + ) + + +class MediaConsumptionListAuditExchangeMediaConsumptions(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + media_consumption: list[MediaConsumptionExchange] = field( + default_factory=list, + metadata={ + "name": "MediaConsumption", + "type": "Element", + "namespace": "", + }, + ) + + +class MediaConsumptionListAuditExchange(BaseModel): + """ + mam_str_media_consumptions: After a journey reconstruction and rating. + + :ivar media_consumptions: Media consumptions + """ + + model_config = ConfigDict(defer_build=True) + media_consumptions: None | MediaConsumptionListAuditExchangeMediaConsumptions = ( + field( + default=None, + metadata={ + "name": "MediaConsumptions", + "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: MediaConsumptionListAuditExchange = 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": "", + }, + ) + media_consumptions_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "MediaConsumptionsXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/MediaConsumptions" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/mam/media_deny_access_notification.py b/es_elt/src/es_elt/xml/audit_data/mam/media_deny_access_notification.py new file mode 100644 index 0000000..8abb6f3 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/mam/media_deny_access_notification.py @@ -0,0 +1,104 @@ +from __future__ import annotations + +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/MediaDenyAccessNotification" + + +class MediaDenyAccessNotificationAuditExchange(BaseModel): + """ + cmm_customer_media_deny_access: Deny access notification for media. + """ + + model_config = ConfigDict(defer_build=True) + customer_id: None | str = field( + default=None, + metadata={ + "name": "CustomerId", + "type": "Element", + "namespace": "", + }, + ) + media_id: None | str = field( + default=None, + metadata={ + "name": "MediaId", + "type": "Element", + "namespace": "", + }, + ) + graphical_number: None | str = field( + default=None, + metadata={ + "name": "GraphicalNumber", + "type": "Element", + "namespace": "", + }, + ) + deny_access_date: None | XmlDate = field( + default=None, + metadata={ + "name": "DenyAccessDate", + "type": "Element", + "namespace": "", + }, + ) + notification_date: None | XmlDate = field( + default=None, + metadata={ + "name": "NotificationDate", + "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: MediaDenyAccessNotificationAuditExchange = 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": "", + }, + ) + deny_access_media_notification_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "DenyAccessMediaNotificationXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/MediaDenyAccessNotification" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/mam/media_grace_expiry_notification.py b/es_elt/src/es_elt/xml/audit_data/mam/media_grace_expiry_notification.py new file mode 100644 index 0000000..6691016 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/mam/media_grace_expiry_notification.py @@ -0,0 +1,104 @@ +from __future__ import annotations + +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/MediaGraceExpiryNotification" + + +class MediaGraceExpiryNotificationAuditExchange(BaseModel): + """ + cmm_customer_media_grace_expiry: Grace expiry notification for media. + """ + + model_config = ConfigDict(defer_build=True) + customer_id: None | str = field( + default=None, + metadata={ + "name": "CustomerId", + "type": "Element", + "namespace": "", + }, + ) + media_id: None | str = field( + default=None, + metadata={ + "name": "MediaId", + "type": "Element", + "namespace": "", + }, + ) + graphical_number: None | str = field( + default=None, + metadata={ + "name": "GraphicalNumber", + "type": "Element", + "namespace": "", + }, + ) + grace_expiry_date: None | XmlDate = field( + default=None, + metadata={ + "name": "GraceExpiryDate", + "type": "Element", + "namespace": "", + }, + ) + notification_date: None | XmlDate = field( + default=None, + metadata={ + "name": "NotificationDate", + "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: MediaGraceExpiryNotificationAuditExchange = 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": "", + }, + ) + grace_expiry_media_notification_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "GraceExpiryMediaNotificationXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/MediaGraceExpiryNotification" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/mam/media_no_sale_expiry_notification.py b/es_elt/src/es_elt/xml/audit_data/mam/media_no_sale_expiry_notification.py new file mode 100644 index 0000000..28cf8c7 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/mam/media_no_sale_expiry_notification.py @@ -0,0 +1,104 @@ +from __future__ import annotations + +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/MediaNoSaleExpiryNotification" + + +class MediaNoSaleExpiryNotificationAuditExchange(BaseModel): + """ + cmm_customer_media_deny_access: Deny access notification for media. + """ + + model_config = ConfigDict(defer_build=True) + customer_id: None | str = field( + default=None, + metadata={ + "name": "CustomerId", + "type": "Element", + "namespace": "", + }, + ) + media_id: None | str = field( + default=None, + metadata={ + "name": "MediaId", + "type": "Element", + "namespace": "", + }, + ) + graphical_number: None | str = field( + default=None, + metadata={ + "name": "GraphicalNumber", + "type": "Element", + "namespace": "", + }, + ) + no_sale_expiry_date: None | XmlDate = field( + default=None, + metadata={ + "name": "NoSaleExpiryDate", + "type": "Element", + "namespace": "", + }, + ) + notification_date: None | XmlDate = field( + default=None, + metadata={ + "name": "NotificationDate", + "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: MediaNoSaleExpiryNotificationAuditExchange = 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": "", + }, + ) + media_no_sale_expiry_notification_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "MediaNoSaleExpiryNotificationXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/MediaNoSaleExpiryNotification" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/mam/media_profile_expiry_notification.py b/es_elt/src/es_elt/xml/audit_data/mam/media_profile_expiry_notification.py new file mode 100644 index 0000000..2fbbd8e --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/mam/media_profile_expiry_notification.py @@ -0,0 +1,104 @@ +from __future__ import annotations + +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/MediaProfileExpiryNotification" + + +class ProfileExpiryDateNotificationAuditExchange(BaseModel): + """ + cmm_customer_media_profile_expiry: Profile about to expire on media. + """ + + model_config = ConfigDict(defer_build=True) + customer_id: None | str = field( + default=None, + metadata={ + "name": "CustomerId", + "type": "Element", + "namespace": "", + }, + ) + deletion_date: None | XmlDate = field( + default=None, + metadata={ + "name": "DeletionDate", + "type": "Element", + "namespace": "", + }, + ) + media_id: None | str = field( + default=None, + metadata={ + "name": "MediaId", + "type": "Element", + "namespace": "", + }, + ) + profile_id: None | int = field( + default=None, + metadata={ + "name": "ProfileId", + "type": "Element", + "namespace": "", + }, + ) + notification_date: None | XmlDate = field( + default=None, + metadata={ + "name": "NotificationDate", + "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: ProfileExpiryDateNotificationAuditExchange = 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": "", + }, + ) + media_profile_expiry_notification_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "MediaProfileExpiryNotificationXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/MediaProfileExpiryNotification" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/mam/media_reconstruction.py b/es_elt/src/es_elt/xml/audit_data/mam/media_reconstruction.py new file mode 100644 index 0000000..491dc51 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/mam/media_reconstruction.py @@ -0,0 +1,111 @@ +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/MediaReconstruction" + + +class Media(BaseModel): + model_config = ConfigDict(defer_build=True) + media_id: str = field( + metadata={ + "name": "MediaId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + media_graphical_number: str = field( + metadata={ + "name": "MediaGraphicalNumber", + "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 MediaReconstructionAuditExchange(BaseModel): + model_config = ConfigDict(defer_build=True) + origin_media: Media = field( + metadata={ + "name": "OriginMedia", + "type": "Element", + "namespace": "", + "required": True, + } + ) + destination_media: Media = field( + metadata={ + "name": "DestinationMedia", + "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: MediaReconstructionAuditExchange = 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": "", + }, + ) + media_reconstruction_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "MediaReconstructionXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/MediaReconstruction" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/mam/purse_usage.py b/es_elt/src/es_elt/xml/audit_data/mam/purse_usage.py new file mode 100644 index 0000000..35a495d --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/mam/purse_usage.py @@ -0,0 +1,181 @@ +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.headers import HeadersType +from es_elt.xml.common.media_identification import MediaIdentification + +__NAMESPACE__ = "http://www.thales.dc/PurseUsage" + + +class PurseOrigin(BaseModel): + """ + Depending on the action leading to the change of purse, one of the + following will be filled in. + """ + + model_config = ConfigDict(defer_build=True) + order_number: None | str = field( + default=None, + metadata={ + "name": "OrderNumber", + "type": "Element", + "namespace": "", + }, + ) + travel_event_id: None | str = field( + default=None, + metadata={ + "name": "TravelEventId", + "type": "Element", + "namespace": "", + }, + ) + transaction_id: None | str = field( + default=None, + metadata={ + "name": "TransactionId", + "type": "Element", + "namespace": "", + }, + ) + + +class PurseUsageType(Enum): + PURSE_RELOAD = "PURSE_RELOAD" + PURSE_CONSUMPTION = "PURSE_CONSUMPTION" + + +class PurseUsageAuditExchange(BaseModel): + """ + mam_media_purse_usage: When purse is reloaded, used to travel or + reloaded after reconstruction. + + :ivar media: + :ivar purse_usage_type: + :ivar purse_origin: + :ivar purse_id: In case of centralized purse usage, this is the id + of the purse that is used. + :ivar sequence: The ordering sequence number of this purse usage + audit exchange. + :ivar purse_usage_amount: + :ivar purse_balance_amount_before: + :ivar purse_balance_amount_after: + """ + + model_config = ConfigDict(defer_build=True) + media: MediaIdentification = field( + metadata={ + "name": "Media", + "type": "Element", + "namespace": "", + "required": True, + } + ) + purse_usage_type: PurseUsageType = field( + metadata={ + "name": "PurseUsageType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + purse_origin: PurseOrigin = field( + metadata={ + "name": "PurseOrigin", + "type": "Element", + "namespace": "", + "required": True, + } + ) + purse_id: None | str = field( + default=None, + metadata={ + "name": "PurseId", + "type": "Element", + "namespace": "", + }, + ) + sequence: int = field( + metadata={ + "name": "Sequence", + "type": "Element", + "namespace": "", + "required": True, + } + ) + purse_usage_amount: Decimal = field( + metadata={ + "name": "PurseUsageAmount", + "type": "Element", + "namespace": "", + "required": True, + } + ) + purse_balance_amount_before: Decimal = field( + metadata={ + "name": "PurseBalanceAmountBefore", + "type": "Element", + "namespace": "", + "required": True, + } + ) + purse_balance_amount_after: Decimal = field( + metadata={ + "name": "PurseBalanceAmountAfter", + "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: PurseUsageAuditExchange = 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": "", + }, + ) + purse_usage_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "PurseUsageXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/PurseUsage" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/mam/travel_event.py b/es_elt/src/es_elt/xml/audit_data/mam/travel_event.py new file mode 100644 index 0000000..b8c02a0 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/mam/travel_event.py @@ -0,0 +1,159 @@ +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/TravelEvent" + + +class TravelEventAuditType(Enum): + INSPECTION = "INSPECTION" + MISSING = "MISSING" + + +class TravelEventAuditExchange(BaseModel): + """ + 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. + + :ivar customer_id: + :ivar media_graphical_number: + :ivar media_id: + :ivar occurrence_date: + :ivar solved: Stipulates if the event is now solved (ie an event + occurred to replace the missing or the fraudulent inspection) + :ivar travel_day: + :ivar travel_event_audit_type: + :ivar travel_event_id: 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 + :ivar transaction_id: + """ + + model_config = ConfigDict(defer_build=True) + customer_id: None | str = field( + default=None, + metadata={ + "name": "CustomerId", + "type": "Element", + "namespace": "", + }, + ) + media_graphical_number: None | str = field( + default=None, + metadata={ + "name": "MediaGraphicalNumber", + "type": "Element", + "namespace": "", + }, + ) + media_id: None | str = field( + default=None, + metadata={ + "name": "MediaId", + "type": "Element", + "namespace": "", + }, + ) + occurrence_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "OccurrenceDate", + "type": "Element", + "namespace": "", + }, + ) + solved: bool = field( + metadata={ + "name": "Solved", + "type": "Element", + "namespace": "", + "required": True, + } + ) + travel_day: None | XmlDate = field( + default=None, + metadata={ + "name": "TravelDay", + "type": "Element", + "namespace": "", + }, + ) + travel_event_audit_type: None | TravelEventAuditType = field( + default=None, + metadata={ + "name": "TravelEventAuditType", + "type": "Element", + "namespace": "", + }, + ) + travel_event_id: None | str = field( + default=None, + metadata={ + "name": "TravelEventId", + "type": "Element", + "namespace": "", + }, + ) + transaction_id: None | str = field( + default=None, + metadata={ + "name": "TransactionId", + "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: TravelEventAuditExchange = 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": "", + }, + ) + travel_event_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "TravelEventXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/TravelEvent" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/pom/__init__.py b/es_elt/src/es_elt/xml/audit_data/pom/__init__.py new file mode 100644 index 0000000..fabed74 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/pom/__init__.py @@ -0,0 +1,73 @@ +from es_elt.xml.audit_data.pom.customer_order import ( + AuditMessages as CustomerAuditMessages, +) +from es_elt.xml.audit_data.pom.customer_order import ( + AuditMessagesType as CustomerAuditMessagesType, +) +from es_elt.xml.audit_data.pom.customer_order import ( + AuditMessageType as CustomerAuditMessageType, +) +from es_elt.xml.audit_data.pom.customer_order import ( + CustomerOrderAuditExchange, + Item, + Items, + User, +) +from es_elt.xml.audit_data.pom.order_item import AuditMessages as ItemAuditMessages +from es_elt.xml.audit_data.pom.order_item import ( + AuditMessagesType as ItemAuditMessagesType, +) +from es_elt.xml.audit_data.pom.order_item import ( + AuditMessageType as ItemAuditMessageType, +) +from es_elt.xml.audit_data.pom.order_item import OrderItemAuditExchange +from es_elt.xml.audit_data.pom.refund_payment import ( + AuditMessages as RefundPaymentAuditMessages, +) +from es_elt.xml.audit_data.pom.refund_payment import ( + AuditMessagesType as RefundPaymentAuditMessagesType, +) +from es_elt.xml.audit_data.pom.refund_payment import ( + AuditMessageType as RefundPaymentAuditMessageType, +) +from es_elt.xml.audit_data.pom.refund_payment_request import ( + AuditMessages as RequestAuditMessages, +) +from es_elt.xml.audit_data.pom.refund_payment_request import ( + AuditMessagesType as RequestAuditMessagesType, +) +from es_elt.xml.audit_data.pom.refund_payment_request import ( + AuditMessageType as RequestAuditMessageType, +) +from es_elt.xml.audit_data.pom.refund_payment_response import ( + AuditMessages as ResponseAuditMessages, +) +from es_elt.xml.audit_data.pom.refund_payment_response import ( + AuditMessagesType as ResponseAuditMessagesType, +) +from es_elt.xml.audit_data.pom.refund_payment_response import ( + AuditMessageType as ResponseAuditMessageType, +) + +__all__ = [ + "CustomerAuditMessageType", + "CustomerAuditMessages", + "CustomerAuditMessagesType", + "CustomerOrderAuditExchange", + "Item", + "Items", + "User", + "ItemAuditMessageType", + "ItemAuditMessages", + "ItemAuditMessagesType", + "OrderItemAuditExchange", + "RefundPaymentAuditMessageType", + "RefundPaymentAuditMessages", + "RefundPaymentAuditMessagesType", + "RequestAuditMessageType", + "RequestAuditMessages", + "RequestAuditMessagesType", + "ResponseAuditMessageType", + "ResponseAuditMessages", + "ResponseAuditMessagesType", +] diff --git a/es_elt/src/es_elt/xml/audit_data/pom/__pycache__/__init__.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/pom/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..0146e68 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/pom/__pycache__/__init__.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/pom/__pycache__/customer_order.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/pom/__pycache__/customer_order.cpython-312.pyc new file mode 100644 index 0000000..b818581 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/pom/__pycache__/customer_order.cpython-312.pyc differ 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 0000000..73c22ba Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/pom/__pycache__/order_item.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/pom/__pycache__/refund_payment.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/pom/__pycache__/refund_payment.cpython-312.pyc new file mode 100644 index 0000000..34c8087 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/pom/__pycache__/refund_payment.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/pom/__pycache__/refund_payment_request.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/pom/__pycache__/refund_payment_request.cpython-312.pyc new file mode 100644 index 0000000..1477e6f Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/pom/__pycache__/refund_payment_request.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/pom/__pycache__/refund_payment_response.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/pom/__pycache__/refund_payment_response.cpython-312.pyc new file mode 100644 index 0000000..9c29cad Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/pom/__pycache__/refund_payment_response.cpython-312.pyc differ 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 0000000..1b61931 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/__init__.cpython-312.pyc differ 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 0000000..6f0e775 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/bad_debt.cpython-312.pyc differ 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 0000000..b5b32ec Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/debt_recovery_attempt.cpython-312.pyc differ 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 0000000..98ad15d Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/debt_repayment.cpython-312.pyc differ 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 0000000..3724695 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/debt_repayment_response.cpython-312.pyc differ 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 0000000..2427373 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/ignored_journey.cpython-312.pyc differ 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 0000000..616b7ae Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/payment_request.cpython-312.pyc differ 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 0000000..5129dcc Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/payment_request_old_processor.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/payment_response.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/payment_response.cpython-312.pyc new file mode 100644 index 0000000..c50e2df Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/payment_response.cpython-312.pyc differ 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 0000000..e47c68e Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/risk_reassessment.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/unblock_media_attempt.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/unblock_media_attempt.cpython-312.pyc new file mode 100644 index 0000000..1e57c15 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/rpe/__pycache__/unblock_media_attempt.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/rpe/bad_debt.py b/es_elt/src/es_elt/xml/audit_data/rpe/bad_debt.py new file mode 100644 index 0000000..1b9b74d --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/rpe/bad_debt.py @@ -0,0 +1,120 @@ +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.payment_status import PaymentStatus + +__NAMESPACE__ = "http://www.thales.dc/BadDebt" + + +class BadDebtAuditExchange(BaseModel): + """ + rpe_media_debt_post: After a bad debt detection or removal. + + :ivar media_graphical_number: + :ivar media_id: + :ivar media_serial_number: + :ivar payment_id: + :ivar payment_status: The aggregated reason of the debt + :ivar solved: Stipulates if the bad debt is now solved (ie a debt + repayment happened) + """ + + model_config = ConfigDict(defer_build=True) + media_graphical_number: None | str = field( + default=None, + metadata={ + "name": "MediaGraphicalNumber", + "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": "", + }, + ) + payment_id: None | str = field( + default=None, + metadata={ + "name": "PaymentId", + "type": "Element", + "namespace": "", + }, + ) + payment_status: None | PaymentStatus = field( + default=None, + metadata={ + "name": "PaymentStatus", + "type": "Element", + "namespace": "", + }, + ) + solved: bool = field( + metadata={ + "name": "Solved", + "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: BadDebtAuditExchange = 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": "", + }, + ) + bad_debt_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "BadDebtXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/BadDebt" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/rpe/debt_recovery_attempt.py b/es_elt/src/es_elt/xml/audit_data/rpe/debt_recovery_attempt.py new file mode 100644 index 0000000..9336a67 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/rpe/debt_recovery_attempt.py @@ -0,0 +1,94 @@ +from __future__ import annotations + +from decimal import Decimal + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +from es_elt.xml.common.headers import HeadersType + +__NAMESPACE__ = "http://www.thales.dc/DebtRecoveryAttempt" + + +class DebtRecoveryAttemptAuditExchange(BaseModel): + """ + rpe_payments_recovery_post: After a debt recovery attempt. + + :ivar amount: + :ivar media_id: + :ivar payment_id: Identifier of the declined payment to be + recovered. + """ + + model_config = ConfigDict(defer_build=True) + amount: Decimal = field( + metadata={ + "name": "Amount", + "type": "Element", + "namespace": "", + "required": True, + } + ) + media_id: None | str = field( + default=None, + metadata={ + "name": "MediaId", + "type": "Element", + "namespace": "", + }, + ) + payment_id: str = field( + metadata={ + "name": "PaymentId", + "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: DebtRecoveryAttemptAuditExchange = 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": "", + }, + ) + debt_recovery_attempt_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "DebtRecoveryAttemptXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/DebtRecoveryAttempt" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/rpe/debt_repayment.py b/es_elt/src/es_elt/xml/audit_data/rpe/debt_repayment.py new file mode 100644 index 0000000..1674bea --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/rpe/debt_repayment.py @@ -0,0 +1,267 @@ +from __future__ import annotations + +from decimal import Decimal + +from pydantic import BaseModel, ConfigDict +from xsdata_pydantic.fields import field + +from es_elt.xml.common.hal_link import HalLink +from es_elt.xml.common.headers import HeadersType +from es_elt.xml.common.payment_type import PaymentType + +__NAMESPACE__ = "http://www.thales.dc/DebtRepayment" + + +class Leg(BaseModel): + """ + :ivar leg_id: Id of the leg + """ + + model_config = ConfigDict(defer_build=True) + leg_id: str = field( + metadata={ + "name": "LegId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class DailyMediaConsumptionModifiedLegsAddedLegs(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + added_leg: list[Leg] = field( + default_factory=list, + metadata={ + "name": "AddedLeg", + "type": "Element", + "namespace": "", + }, + ) + + +class DailyMediaConsumptionModifiedLegsRemovedLegs(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + removed_leg: list[Leg] = field( + default_factory=list, + metadata={ + "name": "RemovedLeg", + "type": "Element", + "namespace": "", + }, + ) + + +class DailyMediaConsumptionModifiedLegs(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + added_legs: None | DailyMediaConsumptionModifiedLegsAddedLegs = field( + default=None, + metadata={ + "name": "AddedLegs", + "type": "Element", + "namespace": "", + }, + ) + removed_legs: None | DailyMediaConsumptionModifiedLegsRemovedLegs = field( + default=None, + metadata={ + "name": "RemovedLegs", + "type": "Element", + "namespace": "", + }, + ) + + +class DailyMediaConsumption(BaseModel): + """ + :ivar daily_media_consumption_id: Id of the daily media consumption + that was involved in this payment request + :ivar modified_legs: + """ + + model_config = ConfigDict(defer_build=True) + daily_media_consumption_id: str = field( + metadata={ + "name": "DailyMediaConsumptionId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + modified_legs: None | DailyMediaConsumptionModifiedLegs = field( + default=None, + metadata={ + "name": "ModifiedLegs", + "type": "Element", + "namespace": "", + }, + ) + + +class DebtRepaymentAuditExchangeInvolvedDailyMediaConsumptions(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + involved_daily_media_consumption: list[DailyMediaConsumption] = field( + default_factory=list, + metadata={ + "name": "InvolvedDailyMediaConsumption", + "type": "Element", + "namespace": "", + }, + ) + + +class DebtRepaymentAuditExchange(BaseModel): + """ + rpe_payments_payment_post: After a sale server debt repayment or any + recovery that settles a debt. + + :ivar amount: + :ivar debt_surplus_settlement_id: In case of debt surplus reversal, + contains the reference to the initial debt repayment or recovery + with surplus. + :ivar media_id: + :ivar missing: When the payment is less than the actual debt. + :ivar payment_id: + :ivar payment_reference: A reference of the payment which paid the + debt. + :ivar payment_type: To distinguish between an automatic recovery + from a direct payment + :ivar surplus: When the payment covers more than the actual debt. + :ivar involved_daily_media_consumptions: Daily media consumptions + involved in payment request + """ + + model_config = ConfigDict(defer_build=True) + amount: Decimal = field( + metadata={ + "name": "Amount", + "type": "Element", + "namespace": "", + "required": True, + } + ) + debt_surplus_settlement_id: None | str = field( + default=None, + metadata={ + "name": "DebtSurplusSettlementId", + "type": "Element", + "namespace": "", + }, + ) + media_id: None | str = field( + default=None, + metadata={ + "name": "MediaId", + "type": "Element", + "namespace": "", + }, + ) + missing: None | Decimal = field( + default=None, + metadata={ + "name": "Missing", + "type": "Element", + "namespace": "", + }, + ) + payment_id: str = field( + metadata={ + "name": "PaymentId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + payment_reference: None | HalLink = field( + default=None, + metadata={ + "name": "PaymentReference", + "type": "Element", + "namespace": "", + }, + ) + payment_type: PaymentType = field( + metadata={ + "name": "PaymentType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + surplus: None | Decimal = field( + default=None, + metadata={ + "name": "Surplus", + "type": "Element", + "namespace": "", + }, + ) + involved_daily_media_consumptions: ( + None | DebtRepaymentAuditExchangeInvolvedDailyMediaConsumptions + ) = field( + default=None, + metadata={ + "name": "InvolvedDailyMediaConsumptions", + "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: DebtRepaymentAuditExchange = 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": "", + }, + ) + debt_repayment_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "DebtRepaymentXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/DebtRepayment" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/rpe/debt_repayment_response.py b/es_elt/src/es_elt/xml/audit_data/rpe/debt_repayment_response.py new file mode 100644 index 0000000..f193882 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/rpe/debt_repayment_response.py @@ -0,0 +1,137 @@ +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/DebtRepaymentResponse" + + +class DebtRepaymentResponseAuditExchangeDebtIds(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + debt_id: list[str] = field( + default_factory=list, + metadata={ + "name": "DebtId", + "type": "Element", + "namespace": "", + "min_occurs": 1, + }, + ) + + +class DebtRepaymentResponseAuditExchange(BaseModel): + """ + rpe_debt_repayment_post: After a sale server debt repayment. + + :ivar payment_id: + :ivar debt_ids: Payment ids of debt covered by the debt repayment + :ivar amount: + :ivar media_id: + :ivar reception_date_time: + :ivar order_item_number: + """ + + model_config = ConfigDict(defer_build=True) + payment_id: str = field( + metadata={ + "name": "PaymentId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + debt_ids: DebtRepaymentResponseAuditExchangeDebtIds = field( + metadata={ + "name": "DebtIds", + "type": "Element", + "namespace": "", + "required": True, + } + ) + amount: Decimal = field( + metadata={ + "name": "Amount", + "type": "Element", + "namespace": "", + "required": True, + } + ) + media_id: None | str = field( + default=None, + metadata={ + "name": "MediaId", + "type": "Element", + "namespace": "", + }, + ) + reception_date_time: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ReceptionDateTime", + "type": "Element", + "namespace": "", + }, + ) + order_item_number: str = field( + metadata={ + "name": "OrderItemNumber", + "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: DebtRepaymentResponseAuditExchange = 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": "", + }, + ) + debt_repayment_response_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "DebtRepaymentResponseXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/DebtRepaymentResponse" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/rpe/ignored_journey.py b/es_elt/src/es_elt/xml/audit_data/rpe/ignored_journey.py new file mode 100644 index 0000000..2a70931 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/rpe/ignored_journey.py @@ -0,0 +1,99 @@ +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/IgnoredJourney" + + +class IgnoredJourneyAuditExchangeIgnoredJourneys(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + ignored_journey: list[str] = field( + default_factory=list, + metadata={ + "name": "IgnoredJourney", + "type": "Element", + "namespace": "", + "min_occurs": 1, + }, + ) + + +class IgnoredJourneyAuditExchange(BaseModel): + """ + rpe_media_consumption_ignored: All journey ids ignored when first + travel event of the journey is before the hard reset date. + + :ivar media_id: + :ivar ignored_journeys: All ignored journeys + """ + + model_config = ConfigDict(defer_build=True) + media_id: str = field( + metadata={ + "name": "MediaId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + ignored_journeys: IgnoredJourneyAuditExchangeIgnoredJourneys = field( + metadata={ + "name": "IgnoredJourneys", + "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: IgnoredJourneyAuditExchange = 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": "", + }, + ) + ignored_journey_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "IgnoredJourneyXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/IgnoredJourney" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/rpe/payment_request.py b/es_elt/src/es_elt/xml/audit_data/rpe/payment_request.py new file mode 100644 index 0000000..33c44a5 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/rpe/payment_request.py @@ -0,0 +1,482 @@ +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.customer_payment_type import CustomerPaymentType +from es_elt.xml.common.headers import HeadersType +from es_elt.xml.common.payment_request_type import PaymentRequestType +from es_elt.xml.common.payment_trigger_source import PaymentTriggerSource + +__NAMESPACE__ = "http://www.thales.dc/PaymentRequest" + + +class Leg(BaseModel): + """ + :ivar leg_id: Id of the leg + """ + + model_config = ConfigDict(defer_build=True) + leg_id: str = field( + metadata={ + "name": "LegId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class DailyMediaConsumptionModifiedLegsAddedLegs(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + added_leg: list[Leg] = field( + default_factory=list, + metadata={ + "name": "AddedLeg", + "type": "Element", + "namespace": "", + }, + ) + + +class DailyMediaConsumptionModifiedLegsRemovedLegs(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + removed_leg: list[Leg] = field( + default_factory=list, + metadata={ + "name": "RemovedLeg", + "type": "Element", + "namespace": "", + }, + ) + + +class DailyMediaConsumptionModifiedLegs(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + added_legs: None | DailyMediaConsumptionModifiedLegsAddedLegs = field( + default=None, + metadata={ + "name": "AddedLegs", + "type": "Element", + "namespace": "", + }, + ) + removed_legs: None | DailyMediaConsumptionModifiedLegsRemovedLegs = field( + default=None, + metadata={ + "name": "RemovedLegs", + "type": "Element", + "namespace": "", + }, + ) + + +class DailyMediaConsumption(BaseModel): + """ + :ivar daily_media_consumption_id: Id of the daily media consumption + that was involved in this payment request + :ivar modified_legs: + """ + + model_config = ConfigDict(defer_build=True) + daily_media_consumption_id: str = field( + metadata={ + "name": "DailyMediaConsumptionId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + modified_legs: None | DailyMediaConsumptionModifiedLegs = field( + default=None, + metadata={ + "name": "ModifiedLegs", + "type": "Element", + "namespace": "", + }, + ) + + +class PaymentRequestAuditExchangeInvolvedDailyMediaConsumptions(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + involved_daily_media_consumption: list[DailyMediaConsumption] = field( + default_factory=list, + metadata={ + "name": "InvolvedDailyMediaConsumption", + "type": "Element", + "namespace": "", + }, + ) + + +class PaymentRequestAuditExchange(BaseModel): + """ + rpe_media_payment_request: sent after each Payment Request + (Nominal/Settlement/DebtRecovery). + + :ivar amount: + :ivar media_serial_number: 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. + :ivar media_id: + :ivar media_type: + :ivar message_id: + :ivar merchant_id: + :ivar currency_code: + :ivar security_token: + :ivar operation_type: + :ivar mode: + :ivar first_travel_event_date_time: + :ivar last_travel_event_date_time: + :ivar authorization_code: + :ivar settlement_label: + :ivar payment_gateway_blob: + :ivar occurrence_date: + :ivar payment_scheme_identification: + :ivar payment_id: + :ivar debt_reference_id: + :ivar payment_type: + :ivar payment_means_id: 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. + :ivar payment_means_type: + :ivar customer_id: Customer id linked to the payment mean used for + the payment + :ivar is_debt_recovery: Specifies if the payment request was a debt + recovery or not. + :ivar is_last_attempt: Specifies if the payment request was a last + MIT debt recovery. + :ivar is_first_debit_attempt: Specifies if the payment request is + the first debt recovery before plan debt recovery. + :ivar payment_trigger_source: Payment trigger source : can be + trigger by job, api call, a emv card tap or first ride risk + :ivar payment_request_type: 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. + :ivar sequence_number: Sequence number for each request for tracking + and mapping purposes + :ivar involved_daily_media_consumptions: Daily media consumptions + involved in payment request + :ivar retry_count: retry count for payment request + """ + + model_config = ConfigDict(defer_build=True) + amount: Decimal = field( + metadata={ + "name": "Amount", + "type": "Element", + "namespace": "", + "required": True, + } + ) + media_serial_number: None | str = field( + default=None, + metadata={ + "name": "MediaSerialNumber", + "type": "Element", + "namespace": "", + }, + ) + media_id: None | str = field( + default=None, + metadata={ + "name": "MediaId", + "type": "Element", + "namespace": "", + }, + ) + media_type: None | str = field( + default=None, + metadata={ + "name": "MediaType", + "type": "Element", + "namespace": "", + }, + ) + message_id: None | str = field( + default=None, + metadata={ + "name": "MessageId", + "type": "Element", + "namespace": "", + }, + ) + merchant_id: None | str = field( + default=None, + metadata={ + "name": "MerchantId", + "type": "Element", + "namespace": "", + }, + ) + currency_code: None | str = field( + default=None, + metadata={ + "name": "CurrencyCode", + "type": "Element", + "namespace": "", + }, + ) + security_token: None | str = field( + default=None, + metadata={ + "name": "SecurityToken", + "type": "Element", + "namespace": "", + }, + ) + operation_type: None | str = field( + default=None, + metadata={ + "name": "OperationType", + "type": "Element", + "namespace": "", + }, + ) + mode: None | str = field( + default=None, + metadata={ + "name": "Mode", + "type": "Element", + "namespace": "", + }, + ) + first_travel_event_date_time: None | XmlDateTime = field( + default=None, + metadata={ + "name": "FirstTravelEventDateTime", + "type": "Element", + "namespace": "", + }, + ) + last_travel_event_date_time: None | XmlDateTime = field( + default=None, + metadata={ + "name": "LastTravelEventDateTime", + "type": "Element", + "namespace": "", + }, + ) + authorization_code: None | str = field( + default=None, + metadata={ + "name": "AuthorizationCode", + "type": "Element", + "namespace": "", + }, + ) + settlement_label: None | str = field( + default=None, + metadata={ + "name": "SettlementLabel", + "type": "Element", + "namespace": "", + }, + ) + payment_gateway_blob: None | str = field( + default=None, + metadata={ + "name": "PaymentGatewayBlob", + "type": "Element", + "namespace": "", + }, + ) + occurrence_date: XmlDateTime = field( + metadata={ + "name": "OccurrenceDate", + "type": "Element", + "namespace": "", + "required": True, + } + ) + payment_scheme_identification: None | str = field( + default=None, + metadata={ + "name": "PaymentSchemeIdentification", + "type": "Element", + "namespace": "", + }, + ) + payment_id: str = field( + metadata={ + "name": "PaymentId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + debt_reference_id: None | str = field( + default=None, + metadata={ + "name": "DebtReferenceId", + "type": "Element", + "namespace": "", + }, + ) + payment_type: CustomerPaymentType = field( + metadata={ + "name": "PaymentType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + payment_means_id: None | str = field( + default=None, + metadata={ + "name": "PaymentMeansId", + "type": "Element", + "namespace": "", + }, + ) + payment_means_type: None | str = field( + default=None, + metadata={ + "name": "PaymentMeansType", + "type": "Element", + "namespace": "", + }, + ) + customer_id: None | str = field( + default=None, + metadata={ + "name": "CustomerId", + "type": "Element", + "namespace": "", + }, + ) + is_debt_recovery: bool = field( + metadata={ + "name": "IsDebtRecovery", + "type": "Element", + "namespace": "", + "required": True, + } + ) + is_last_attempt: bool = field( + metadata={ + "name": "IsLastAttempt", + "type": "Element", + "namespace": "", + "required": True, + } + ) + is_first_debit_attempt: bool = field( + metadata={ + "name": "IsFirstDebitAttempt", + "type": "Element", + "namespace": "", + "required": True, + } + ) + payment_trigger_source: None | PaymentTriggerSource = field( + default=None, + metadata={ + "name": "PaymentTriggerSource", + "type": "Element", + "namespace": "", + }, + ) + payment_request_type: PaymentRequestType = field( + metadata={ + "name": "PaymentRequestType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + sequence_number: None | int = field( + default=None, + metadata={ + "name": "SequenceNumber", + "type": "Element", + "namespace": "", + }, + ) + involved_daily_media_consumptions: ( + None | PaymentRequestAuditExchangeInvolvedDailyMediaConsumptions + ) = field( + default=None, + metadata={ + "name": "InvolvedDailyMediaConsumptions", + "type": "Element", + "namespace": "", + }, + ) + retry_count: None | int = field( + default=None, + metadata={ + "name": "RetryCount", + "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: PaymentRequestAuditExchange = 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_request_xsd_version: str = field( + const=True, + default="1.1", + metadata={ + "name": "PaymentRequestXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/PaymentRequest" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/rpe/payment_request_old_processor.py b/es_elt/src/es_elt/xml/audit_data/rpe/payment_request_old_processor.py new file mode 100644 index 0000000..feef723 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/rpe/payment_request_old_processor.py @@ -0,0 +1,89 @@ +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/PaymentRequestOldProcessor" + + +class PaymentRequestOldProcessorAuditExchange(BaseModel): + """ + rpe_payment_request_old_processor: after payment/debt request error ( + no response from PG). + """ + + model_config = ConfigDict(defer_build=True) + occurrence_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "OccurrenceDate", + "type": "Element", + "namespace": "", + }, + ) + media_id: None | str = field( + default=None, + metadata={ + "name": "MediaId", + "type": "Element", + "namespace": "", + }, + ) + payment_id: None | str = field( + default=None, + metadata={ + "name": "PaymentId", + "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: PaymentRequestOldProcessorAuditExchange = 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_request_old_processor_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "PaymentRequestOldProcessorXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/PaymentRequestOldProcessor" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/rpe/payment_response.py b/es_elt/src/es_elt/xml/audit_data/rpe/payment_response.py new file mode 100644 index 0000000..56037f9 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/rpe/payment_response.py @@ -0,0 +1,426 @@ +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.customer_payment_type import CustomerPaymentType +from es_elt.xml.common.headers import HeadersType +from es_elt.xml.common.payment_status import PaymentStatus + +__NAMESPACE__ = "http://www.thales.dc/PaymentResponse" + + +class AutoRenewedContract(BaseModel): + """ + :ivar order_number: auto renewed contract order number. + :ivar product_code: auto renewed contract product code + :ivar start_validity_date: start date of the renewed contract + :ivar end_validity_date: end date of the renewed contract + :ivar contract_expiry_date: expiry date of the old contract + """ + + model_config = ConfigDict(defer_build=True) + order_number: str = field( + metadata={ + "name": "OrderNumber", + "type": "Element", + "namespace": "", + "required": True, + } + ) + product_code: int = field( + metadata={ + "name": "ProductCode", + "type": "Element", + "namespace": "", + "required": True, + } + ) + start_validity_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "StartValidityDate", + "type": "Element", + "namespace": "", + }, + ) + end_validity_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "EndValidityDate", + "type": "Element", + "namespace": "", + }, + ) + contract_expiry_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "ContractExpiryDate", + "type": "Element", + "namespace": "", + }, + ) + + +class PaymentResponseAuditExchange(BaseModel): + """ + 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. + + :ivar amount: + :ivar customer_id: The unique identifier of the related customer + account (may be null) + :ivar media_serial_number: 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. + :ivar currency_code: Currency code according to ISO 4217. + :ivar request_id: Identifier of the request. + :ivar detail_response_code: Carries the Acquirer Bank Response + Code(s) + :ivar authorization_token: Bank authorization reference number that + can be used to discuss directly with bank. It can be display in + IFS MMI of payment history. + :ivar authorization_type: Type of action to be performed. + :ivar capture_possible: Capture possible provided by the Payment + Gateway to define if payment is first ride risk eligible. + :ivar media_type: Media type e.g. EMV + :ivar ifs_id: Identifier of the connected IFS system. Shall come + from the request. + :ivar media_id: + :ivar operator_id: OperatorId to identify the agent who trigger the + reset payment. + :ivar occurrence_date: + :ivar payment_scheme_identification: + :ivar payment_id: + :ivar payment_means_id: If a payment means was used for this + settlement, the paymentMeansId related + :ivar was_unrecoverable: if a payment was unrecoverable then we + approved a cit/tap payment request for this payment + :ivar payment_means_type: + :ivar payment_status: Overall status of the payment resource. If the + payment was divided in two phases (authorization and + settlement), both status are also present + :ivar authorization_status: If the corresponding payment request + contained an authorization, here is the status of the + authorization + :ivar settlement_status: If the corresponding payment request + contained a settlement, here is the status of the settlement + :ivar payment_type: + :ivar reconciliation_id: Id produced by the Payment gateway adaptor + in order to allow reconciliation in reporting + :ivar approval_code: Approval Code used for reconciliation + :ivar authorization_code: Authorisation Code used for reconciliation + and debt recovery + :ivar sequence_number: Sequence number for each response for + tracking and mapping purposes + :ivar response_reason: Response Reason from Payment Gateway + :ivar response_code: Code explaining the response from the Payment + domain. + :ivar auto_renewed_contract: auto-renewed contract data + :ivar skipped_payment: True when a payment was received after . + """ + + model_config = ConfigDict(defer_build=True) + amount: None | Decimal = field( + default=None, + metadata={ + "name": "Amount", + "type": "Element", + "namespace": "", + }, + ) + customer_id: None | str = field( + default=None, + metadata={ + "name": "CustomerId", + "type": "Element", + "namespace": "", + }, + ) + media_serial_number: None | str = field( + default=None, + metadata={ + "name": "MediaSerialNumber", + "type": "Element", + "namespace": "", + }, + ) + currency_code: None | int = field( + default=None, + metadata={ + "name": "CurrencyCode", + "type": "Element", + "namespace": "", + }, + ) + request_id: None | str = field( + default=None, + metadata={ + "name": "RequestId", + "type": "Element", + "namespace": "", + }, + ) + detail_response_code: None | int = field( + default=None, + metadata={ + "name": "DetailResponseCode", + "type": "Element", + "namespace": "", + }, + ) + authorization_token: None | str = field( + default=None, + metadata={ + "name": "AuthorizationToken", + "type": "Element", + "namespace": "", + }, + ) + authorization_type: None | str = field( + default=None, + metadata={ + "name": "AuthorizationType", + "type": "Element", + "namespace": "", + }, + ) + capture_possible: None | bool = field( + default=None, + metadata={ + "name": "CapturePossible", + "type": "Element", + "namespace": "", + }, + ) + media_type: None | str = field( + default=None, + metadata={ + "name": "MediaType", + "type": "Element", + "namespace": "", + }, + ) + ifs_id: None | str = field( + default=None, + metadata={ + "name": "IfsId", + "type": "Element", + "namespace": "", + }, + ) + media_id: None | str = field( + default=None, + metadata={ + "name": "MediaId", + "type": "Element", + "namespace": "", + }, + ) + operator_id: None | str = field( + default=None, + metadata={ + "name": "OperatorId", + "type": "Element", + "namespace": "", + }, + ) + occurrence_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "OccurrenceDate", + "type": "Element", + "namespace": "", + }, + ) + payment_scheme_identification: None | str = field( + default=None, + metadata={ + "name": "PaymentSchemeIdentification", + "type": "Element", + "namespace": "", + }, + ) + payment_id: None | str = field( + default=None, + metadata={ + "name": "PaymentId", + "type": "Element", + "namespace": "", + }, + ) + payment_means_id: None | str = field( + default=None, + metadata={ + "name": "PaymentMeansId", + "type": "Element", + "namespace": "", + }, + ) + was_unrecoverable: None | bool = field( + default=None, + metadata={ + "name": "WasUnrecoverable", + "type": "Element", + "namespace": "", + }, + ) + payment_means_type: None | str = field( + default=None, + metadata={ + "name": "PaymentMeansType", + "type": "Element", + "namespace": "", + }, + ) + payment_status: PaymentStatus = field( + metadata={ + "name": "PaymentStatus", + "type": "Element", + "namespace": "", + "required": True, + } + ) + authorization_status: None | PaymentStatus = field( + default=None, + metadata={ + "name": "AuthorizationStatus", + "type": "Element", + "namespace": "", + }, + ) + settlement_status: None | PaymentStatus = field( + default=None, + metadata={ + "name": "SettlementStatus", + "type": "Element", + "namespace": "", + }, + ) + payment_type: None | CustomerPaymentType = field( + default=None, + metadata={ + "name": "PaymentType", + "type": "Element", + "namespace": "", + }, + ) + reconciliation_id: None | str = field( + default=None, + metadata={ + "name": "ReconciliationId", + "type": "Element", + "namespace": "", + }, + ) + approval_code: None | str = field( + default=None, + metadata={ + "name": "ApprovalCode", + "type": "Element", + "namespace": "", + }, + ) + authorization_code: None | str = field( + default=None, + metadata={ + "name": "AuthorizationCode", + "type": "Element", + "namespace": "", + }, + ) + sequence_number: None | int = field( + default=None, + metadata={ + "name": "SequenceNumber", + "type": "Element", + "namespace": "", + }, + ) + response_reason: None | str = field( + default=None, + metadata={ + "name": "ResponseReason", + "type": "Element", + "namespace": "", + }, + ) + response_code: None | str = field( + default=None, + metadata={ + "name": "ResponseCode", + "type": "Element", + "namespace": "", + }, + ) + auto_renewed_contract: None | AutoRenewedContract = field( + default=None, + metadata={ + "name": "AutoRenewedContract", + "type": "Element", + "namespace": "", + }, + ) + skipped_payment: None | bool = field( + default=None, + metadata={ + "name": "SkippedPayment", + "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: PaymentResponseAuditExchange = 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_response_xsd_version: str = field( + const=True, + default="1.1", + metadata={ + "name": "PaymentResponseXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/PaymentResponse" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/rpe/risk_reassessment.py b/es_elt/src/es_elt/xml/audit_data/rpe/risk_reassessment.py new file mode 100644 index 0000000..d4a1f97 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/rpe/risk_reassessment.py @@ -0,0 +1,92 @@ +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/RiskReassessment" + + +class RiskReassessmentAuditExchange(BaseModel): + """ + rpe_payments_recovery_post: After a debt recovery attempt. + + :ivar generation_date: + :ivar agent_id: Agent ID of the operator creating the movement + :ivar security_token: Security Token + """ + + model_config = ConfigDict(defer_build=True) + generation_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "GenerationDate", + "type": "Element", + "namespace": "", + }, + ) + agent_id: None | str = field( + default=None, + metadata={ + "name": "AgentId", + "type": "Element", + "namespace": "", + }, + ) + security_token: str = field( + metadata={ + "name": "SecurityToken", + "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: RiskReassessmentAuditExchange = 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": "", + }, + ) + risk_reassessment_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "RiskReassessmentXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/RiskReassessment" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/rpe/unblock_media_attempt.py b/es_elt/src/es_elt/xml/audit_data/rpe/unblock_media_attempt.py new file mode 100644 index 0000000..7841f1d --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/rpe/unblock_media_attempt.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.headers import HeadersType +from es_elt.xml.common.payment_type import PaymentType + +__NAMESPACE__ = "http://www.thales.dc/UnblockMediaAttempt" + + +class UnblockMediaAttemptAuditExchange(BaseModel): + """ + rpe_media_unblock_media_post: After a unblock media attempt. + """ + + 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, + } + ) + operator_id: str = field( + metadata={ + "name": "OperatorId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + payment_type: PaymentType = field( + metadata={ + "name": "PaymentType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + occurrence_date: XmlDateTime = field( + metadata={ + "name": "OccurrenceDate", + "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: UnblockMediaAttemptAuditExchange = 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": "", + }, + ) + unblock_media_attempt_xsd_version: str = field( + const=True, + default="1.1", + metadata={ + "name": "UnblockMediaAttemptXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/UnblockMediaAttempt" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/scm/__init__.py b/es_elt/src/es_elt/xml/audit_data/scm/__init__.py new file mode 100644 index 0000000..35becef --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/scm/__init__.py @@ -0,0 +1,46 @@ +from es_elt.xml.audit_data.scm.fine import AuditMessages as AuditMessages +from es_elt.xml.audit_data.scm.fine import AuditMessagesType as AuditMessagesType +from es_elt.xml.audit_data.scm.fine import AuditMessageType as AuditMessageType +from es_elt.xml.audit_data.scm.fine import FineAuditExchange, FineStatus +from es_elt.xml.audit_data.scm.fine_gdpr_extraction import ( + AuditMessages as GdprExtractionAuditMessages, +) +from es_elt.xml.audit_data.scm.fine_gdpr_extraction import ( + AuditMessagesType as GdprExtractionAuditMessagesType, +) +from es_elt.xml.audit_data.scm.fine_gdpr_extraction import ( + AuditMessageType as GdprExtractionAuditMessageType, +) +from es_elt.xml.audit_data.scm.fine_gdpr_extraction import FineGdprExtractionExchange +from es_elt.xml.audit_data.scm.orphan_shift import ( + AuditMessages as OrphanShiftAuditMessages, +) +from es_elt.xml.audit_data.scm.orphan_shift import ( + AuditMessagesType as OrphanShiftAuditMessagesType, +) +from es_elt.xml.audit_data.scm.orphan_shift import ( + AuditMessageType as OrphanShiftAuditMessageType, +) +from es_elt.xml.audit_data.scm.orphan_shift import ( + OrphanShiftAuditExchange, + OrphanType, + OrphanTypes, +) + +__all__ = [ + "AuditMessageType", + "AuditMessages", + "AuditMessagesType", + "FineAuditExchange", + "FineStatus", + "GdprExtractionAuditMessageType", + "GdprExtractionAuditMessages", + "GdprExtractionAuditMessagesType", + "FineGdprExtractionExchange", + "OrphanShiftAuditMessageType", + "OrphanShiftAuditMessages", + "OrphanShiftAuditMessagesType", + "OrphanShiftAuditExchange", + "OrphanType", + "OrphanTypes", +] diff --git a/es_elt/src/es_elt/xml/audit_data/scm/__pycache__/__init__.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/scm/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..6963f6f Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/scm/__pycache__/__init__.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/scm/__pycache__/fine.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/scm/__pycache__/fine.cpython-312.pyc new file mode 100644 index 0000000..6dacf9c Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/scm/__pycache__/fine.cpython-312.pyc differ 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 0000000..5d5f28e Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/scm/__pycache__/fine_gdpr_extraction.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/scm/__pycache__/orphan_shift.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/scm/__pycache__/orphan_shift.cpython-312.pyc new file mode 100644 index 0000000..754741f Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/scm/__pycache__/orphan_shift.cpython-312.pyc differ 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 0000000..5bf3853 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/stf/__pycache__/__init__.cpython-312.pyc differ 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 0000000..fde78ce Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/stf/__pycache__/agent_account.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/stf/agent_account.py b/es_elt/src/es_elt/xml/audit_data/stf/agent_account.py new file mode 100644 index 0000000..7324e26 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/stf/agent_account.py @@ -0,0 +1,136 @@ +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/AgentAccount" + + +class AgentAccountAuditExchangeAgentProfileList(BaseModel): + class Meta: + global_type = False + + model_config = ConfigDict(defer_build=True) + agent_profile_list: list[int] = field( + default_factory=list, + metadata={ + "name": "AgentProfileList", + "type": "Element", + "namespace": "", + }, + ) + + +class AgentAccountAuditExchange(BaseModel): + """ + 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. + + :ivar creation_date: + :ivar deletion_date: + :ivar id: Technical unique identifier of the Agent account + :ivar last_modification_date: + :ivar status: + :ivar agent_profile_list: + """ + + 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": "", + }, + ) + id: None | str = field( + default=None, + metadata={ + "name": "Id", + "type": "Element", + "namespace": "", + }, + ) + last_modification_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "LastModificationDate", + "type": "Element", + "namespace": "", + }, + ) + status: int = field( + metadata={ + "name": "Status", + "type": "Element", + "namespace": "", + "required": True, + } + ) + agent_profile_list: None | AgentAccountAuditExchangeAgentProfileList = field( + default=None, + metadata={ + "name": "AgentProfileList", + "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: AgentAccountAuditExchange = 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": "", + }, + ) + agent_account_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "AgentAccountXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/AgentAccount" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/stk/__init__.py b/es_elt/src/es_elt/xml/audit_data/stk/__init__.py new file mode 100644 index 0000000..6538505 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/stk/__init__.py @@ -0,0 +1,127 @@ +from es_elt.xml.audit_data.stk.low_stock import AuditMessages as LowAuditMessages +from es_elt.xml.audit_data.stk.low_stock import ( + AuditMessagesType as LowAuditMessagesType, +) +from es_elt.xml.audit_data.stk.low_stock import AuditMessageType as LowAuditMessageType +from es_elt.xml.audit_data.stk.low_stock import ( + LowStockAuditExchange, + LowStockItemExchange, + LowStockItems, +) +from es_elt.xml.audit_data.stk.stock_entity_created import ( + AuditMessages as EntityCreatedAuditMessages, +) +from es_elt.xml.audit_data.stk.stock_entity_created import ( + AuditMessagesType as EntityCreatedAuditMessagesType, +) +from es_elt.xml.audit_data.stk.stock_entity_created import ( + AuditMessageType as EntityCreatedAuditMessageType, +) +from es_elt.xml.audit_data.stk.stock_entity_created import ( + StockEntityCreatedEventExchange, +) +from es_elt.xml.audit_data.stk.stock_movement import ( + AuditMessages as MovementAuditMessages, +) +from es_elt.xml.audit_data.stk.stock_movement import ( + AuditMessagesType as MovementAuditMessagesType, +) +from es_elt.xml.audit_data.stk.stock_movement import ( + AuditMessageType as MovementAuditMessageType, +) +from es_elt.xml.audit_data.stk.stock_movement import StockMovementEventExchange +from es_elt.xml.audit_data.stk.stock_operation import ( + AuditMessages as OperationAuditMessages, +) +from es_elt.xml.audit_data.stk.stock_operation import ( + AuditMessagesType as OperationAuditMessagesType, +) +from es_elt.xml.audit_data.stk.stock_operation import ( + AuditMessageType as OperationAuditMessageType, +) +from es_elt.xml.audit_data.stk.stock_operation import ( + LocalizedStockOperationType, + StockOperationExchange, + StockOperationType, +) +from es_elt.xml.audit_data.stk.stock_order_created import ( + AuditMessages as OrderCreatedAuditMessages, +) +from es_elt.xml.audit_data.stk.stock_order_created import ( + AuditMessagesType as OrderCreatedAuditMessagesType, +) +from es_elt.xml.audit_data.stk.stock_order_created import ( + AuditMessageType as OrderCreatedAuditMessageType, +) +from es_elt.xml.audit_data.stk.stock_order_created import StockOrderCreatedEventExchange +from es_elt.xml.audit_data.stk.stock_provider_created import ( + AuditMessages as ProviderAuditMessages, +) +from es_elt.xml.audit_data.stk.stock_provider_created import ( + AuditMessagesType as ProviderAuditMessagesType, +) +from es_elt.xml.audit_data.stk.stock_provider_created import ( + AuditMessageType as ProviderAuditMessageType, +) +from es_elt.xml.audit_data.stk.stock_provider_created import ( + StockProviderCreatedEventExchange, +) +from es_elt.xml.audit_data.stk.stock_update_error import ( + AuditMessages as UpdateErrorAuditMessages, +) +from es_elt.xml.audit_data.stk.stock_update_error import ( + AuditMessagesType as UpdateErrorAuditMessagesType, +) +from es_elt.xml.audit_data.stk.stock_update_error import ( + AuditMessageType as UpdateErrorAuditMessageType, +) +from es_elt.xml.audit_data.stk.stock_update_error import StockUpdateErrorExchange +from es_elt.xml.audit_data.stk.stock_updated import ( + AuditMessages as UpdatedAuditMessages, +) +from es_elt.xml.audit_data.stk.stock_updated import ( + AuditMessagesType as UpdatedAuditMessagesType, +) +from es_elt.xml.audit_data.stk.stock_updated import ( + AuditMessageType as UpdatedAuditMessageType, +) +from es_elt.xml.audit_data.stk.stock_updated import StockUpdatedEventExchange + +__all__ = [ + "LowAuditMessageType", + "LowAuditMessages", + "LowAuditMessagesType", + "LowStockAuditExchange", + "LowStockItemExchange", + "LowStockItems", + "EntityCreatedAuditMessageType", + "EntityCreatedAuditMessages", + "EntityCreatedAuditMessagesType", + "StockEntityCreatedEventExchange", + "MovementAuditMessageType", + "MovementAuditMessages", + "MovementAuditMessagesType", + "StockMovementEventExchange", + "OperationAuditMessageType", + "OperationAuditMessages", + "OperationAuditMessagesType", + "LocalizedStockOperationType", + "StockOperationExchange", + "StockOperationType", + "OrderCreatedAuditMessageType", + "OrderCreatedAuditMessages", + "OrderCreatedAuditMessagesType", + "StockOrderCreatedEventExchange", + "ProviderAuditMessageType", + "ProviderAuditMessages", + "ProviderAuditMessagesType", + "StockProviderCreatedEventExchange", + "UpdateErrorAuditMessageType", + "UpdateErrorAuditMessages", + "UpdateErrorAuditMessagesType", + "StockUpdateErrorExchange", + "UpdatedAuditMessageType", + "UpdatedAuditMessages", + "UpdatedAuditMessagesType", + "StockUpdatedEventExchange", +] diff --git a/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/__init__.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..a53f58e Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/__init__.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/low_stock.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/low_stock.cpython-312.pyc new file mode 100644 index 0000000..3ca0cbe Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/low_stock.cpython-312.pyc differ 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 0000000..7975d45 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_entity_created.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_movement.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_movement.cpython-312.pyc new file mode 100644 index 0000000..9215390 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_movement.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_operation.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_operation.cpython-312.pyc new file mode 100644 index 0000000..d969146 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_operation.cpython-312.pyc differ 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 0000000..941cbd0 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_order_created.cpython-312.pyc differ 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 0000000..66493ab Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_provider_created.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_update_error.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_update_error.cpython-312.pyc new file mode 100644 index 0000000..6eff8e5 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_update_error.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_updated.cpython-312.pyc b/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_updated.cpython-312.pyc new file mode 100644 index 0000000..2490726 Binary files /dev/null and b/es_elt/src/es_elt/xml/audit_data/stk/__pycache__/stock_updated.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/audit_data/stk/low_stock.py b/es_elt/src/es_elt/xml/audit_data/stk/low_stock.py new file mode 100644 index 0000000..d50dc6f --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/stk/low_stock.py @@ -0,0 +1,148 @@ +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.localized import ( + LocalizedBusinessEntityInt, + LocalizedEntityType, + LocalizedItemType, +) + +__NAMESPACE__ = "http://www.thales.dc/LowStock" + + +class LowStockItemExchange(BaseModel): + model_config = ConfigDict(defer_build=True) + item_type: LocalizedItemType = field( + metadata={ + "name": "ItemType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + quantity: int = field( + metadata={ + "name": "Quantity", + "type": "Element", + "namespace": "", + "required": True, + } + ) + threshold: int = field( + metadata={ + "name": "Threshold", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class LowStockItems(BaseModel): + model_config = ConfigDict(defer_build=True) + low_stock_item: list[LowStockItemExchange] = field( + default_factory=list, + metadata={ + "name": "LowStockItem", + "type": "Element", + "namespace": "", + }, + ) + + +class LowStockAuditExchange(BaseModel): + """ + stk_entity_post: After a stock update triggering a low stock. + """ + + model_config = ConfigDict(defer_build=True) + business_entity: LocalizedBusinessEntityInt = field( + metadata={ + "name": "BusinessEntity", + "type": "Element", + "namespace": "", + "required": True, + } + ) + entity_identifier: str = field( + metadata={ + "name": "EntityIdentifier", + "type": "Element", + "namespace": "", + "required": True, + } + ) + entity_name: str = field( + metadata={ + "name": "EntityName", + "type": "Element", + "namespace": "", + "required": True, + } + ) + entity_type: LocalizedEntityType = field( + metadata={ + "name": "EntityType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + low_stock_items: None | LowStockItems = field( + default=None, + metadata={ + "name": "LowStockItems", + "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: LowStockAuditExchange = 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": "", + }, + ) + low_stock_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "LowStockXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/LowStock" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/stk/stock_entity_created.py b/es_elt/src/es_elt/xml/audit_data/stk/stock_entity_created.py new file mode 100644 index 0000000..1a094df --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/stk/stock_entity_created.py @@ -0,0 +1,107 @@ +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 +from es_elt.xml.common.localized import LocalizedStockHistoryAction +from es_elt.xml.common.stock_entity_exchange import StockEntityExchange + +__NAMESPACE__ = "http://www.thales.dc/StockEntityCreated" + + +class StockEntityCreatedEventExchange(BaseModel): + """ + stk_entities_post: At stock entity creation stk_entity_post: At stock + entity update stk_entity_delete: At stock entity deletion. + """ + + model_config = ConfigDict(defer_build=True) + occurrence_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "OccurrenceDate", + "type": "Element", + "namespace": "", + }, + ) + stock_history_action: LocalizedStockHistoryAction = field( + metadata={ + "name": "StockHistoryAction", + "type": "Element", + "namespace": "", + "required": True, + } + ) + stock_entity_detail: None | StockEntityExchange = field( + default=None, + metadata={ + "name": "StockEntityDetail", + "type": "Element", + "namespace": "", + }, + ) + stock_entity_id: str = field( + metadata={ + "name": "StockEntityId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + stock_entity_identifier: str = field( + metadata={ + "name": "StockEntityIdentifier", + "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: StockEntityCreatedEventExchange = 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": "", + }, + ) + stock_entity_created_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "StockEntityCreatedXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/StockEntityCreated" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/stk/stock_movement.py b/es_elt/src/es_elt/xml/audit_data/stk/stock_movement.py new file mode 100644 index 0000000..79b244e --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/stk/stock_movement.py @@ -0,0 +1,247 @@ +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 +from es_elt.xml.common.localized import ( + LocalizedDestinationEntityBe, + LocalizedDestinationEntityType, + LocalizedStockHistoryAction, + LocalizedStockItemType, +) + +__NAMESPACE__ = "http://www.thales.dc/StockMovement" + + +class StockMovementEventExchange(BaseModel): + """ + stk_movement_device_post: At stock movement. + + :ivar occurrence_date: + :ivar stock_history_action: + :ivar agent_id: Agent ID of the operator creating the movement + :ivar destination_entity_be: Business entity of the stock entity + receiving the stock + :ivar destination_entity_id: Destination stock entity ID of the + stock entity receiving the stock + :ivar destination_entity_identifier: Destination stock entity + identifier of the stock entity receiving the stock + :ivar destination_entity_name: Destination stock entity name of the + stock entity receiving the stock + :ivar destination_entity_type: Destination stock entity type of the + stock entity receiving the stock + :ivar destination_item_quantity: Total stock quantity of the stock + entity after receiving the stock + :ivar movement_id: + :ivar movement_quantity: Quantity change of the movement concerned + by the event + :ivar source_entity_be: Business entity of the stock entity moving + out the stock + :ivar source_entity_id: Source stock entity Id of the stock entity + receiving the stock + :ivar source_entity_identifier: Source stock entity identifier of + the stock entity moving out the stock + :ivar source_entity_name: Stock entity identifier of the source + stock entity moving out the stock + :ivar source_entity_type: Stock entity type of the source stock + entity moving out the stock + :ivar source_item_quantity: Total stock quantity of the source stock + entity after moving out the stock + :ivar stock_item_type: Type identifier of the stock item concerned + by the event + """ + + model_config = ConfigDict(defer_build=True) + occurrence_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "OccurrenceDate", + "type": "Element", + "namespace": "", + }, + ) + stock_history_action: None | LocalizedStockHistoryAction = field( + default=None, + metadata={ + "name": "StockHistoryAction", + "type": "Element", + "namespace": "", + }, + ) + agent_id: None | str = field( + default=None, + metadata={ + "name": "AgentId", + "type": "Element", + "namespace": "", + }, + ) + destination_entity_be: None | LocalizedDestinationEntityBe = field( + default=None, + metadata={ + "name": "DestinationEntityBE", + "type": "Element", + "namespace": "", + }, + ) + destination_entity_id: str = field( + metadata={ + "name": "DestinationEntityId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + destination_entity_identifier: str = field( + metadata={ + "name": "DestinationEntityIdentifier", + "type": "Element", + "namespace": "", + "required": True, + } + ) + destination_entity_name: None | str = field( + default=None, + metadata={ + "name": "DestinationEntityName", + "type": "Element", + "namespace": "", + }, + ) + destination_entity_type: None | LocalizedDestinationEntityType = field( + default=None, + metadata={ + "name": "DestinationEntityType", + "type": "Element", + "namespace": "", + }, + ) + destination_item_quantity: int = field( + metadata={ + "name": "DestinationItemQuantity", + "type": "Element", + "namespace": "", + "required": True, + } + ) + movement_id: str = field( + metadata={ + "name": "MovementId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + movement_quantity: int = field( + metadata={ + "name": "MovementQuantity", + "type": "Element", + "namespace": "", + "required": True, + } + ) + source_entity_be: None | int = field( + default=None, + metadata={ + "name": "SourceEntityBE", + "type": "Element", + "namespace": "", + }, + ) + source_entity_id: str = field( + metadata={ + "name": "SourceEntityId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + source_entity_identifier: str = field( + metadata={ + "name": "SourceEntityIdentifier", + "type": "Element", + "namespace": "", + "required": True, + } + ) + source_entity_name: None | str = field( + default=None, + metadata={ + "name": "SourceEntityName", + "type": "Element", + "namespace": "", + }, + ) + source_entity_type: None | int = field( + default=None, + metadata={ + "name": "SourceEntityType", + "type": "Element", + "namespace": "", + }, + ) + source_item_quantity: int = field( + metadata={ + "name": "SourceItemQuantity", + "type": "Element", + "namespace": "", + "required": True, + } + ) + stock_item_type: LocalizedStockItemType = field( + metadata={ + "name": "StockItemType", + "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: StockMovementEventExchange = 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": "", + }, + ) + stock_movement_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "StockMovementXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/StockMovement" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/stk/stock_operation.py b/es_elt/src/es_elt/xml/audit_data/stk/stock_operation.py new file mode 100644 index 0000000..8829b8a --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/stk/stock_operation.py @@ -0,0 +1,203 @@ +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 +from es_elt.xml.common.localized import LocalizedStockItemType + +__NAMESPACE__ = "http://www.thales.dc/StockOperation" + + +class StockOperationType(Enum): + MOVEMENT = "MOVEMENT" + ADJUSTMENT = "ADJUSTMENT" + IMPORT = "IMPORT" + + +class LocalizedStockOperationType(BaseModel): + model_config = ConfigDict(defer_build=True) + value: StockOperationType = field( + metadata={ + "name": "Value", + "type": "Element", + "namespace": "", + "required": True, + } + ) + label: str = field( + metadata={ + "name": "Label", + "type": "Element", + "namespace": "", + "required": True, + } + ) + + +class StockOperationExchange(BaseModel): + """ + stk_movement_device_post: At stock movement. + + :ivar comment: + :ivar dest_entity: the destination stock entity to where the items + are added. + :ivar item_type: the type of items (usually a sub-type of media) + contained in both stock entities for which the operation + occurred. + :ivar quantity_moved: the number of items subtracted from the source + stock and added to the destination stock. + :ivar source_entity: the source stock entity from which the items + are subtracted. + :ivar agent_id: + :ivar creation_date: + :ivar stock_dest_quantity: the current value of the destination + stock item entity after the operation. + :ivar stock_operation_id: 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. + :ivar stock_operation_type: + :ivar stock_source_quantity: the current value of the source stock + item entity after the operation. + """ + + model_config = ConfigDict(defer_build=True) + comment: None | str = field( + default=None, + metadata={ + "name": "Comment", + "type": "Element", + "namespace": "", + }, + ) + dest_entity: None | str = field( + default=None, + metadata={ + "name": "DestEntity", + "type": "Element", + "namespace": "", + }, + ) + item_type: None | LocalizedStockItemType = field( + default=None, + metadata={ + "name": "ItemType", + "type": "Element", + "namespace": "", + }, + ) + quantity_moved: None | int = field( + default=None, + metadata={ + "name": "QuantityMoved", + "type": "Element", + "namespace": "", + }, + ) + source_entity: None | str = field( + default=None, + metadata={ + "name": "SourceEntity", + "type": "Element", + "namespace": "", + }, + ) + agent_id: None | str = field( + default=None, + metadata={ + "name": "AgentId", + "type": "Element", + "namespace": "", + }, + ) + creation_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "CreationDate", + "type": "Element", + "namespace": "", + }, + ) + stock_dest_quantity: None | int = field( + default=None, + metadata={ + "name": "StockDestQuantity", + "type": "Element", + "namespace": "", + }, + ) + stock_operation_id: None | str = field( + default=None, + metadata={ + "name": "StockOperationId", + "type": "Element", + "namespace": "", + }, + ) + stock_operation_type: None | LocalizedStockOperationType = field( + default=None, + metadata={ + "name": "StockOperationType", + "type": "Element", + "namespace": "", + }, + ) + stock_source_quantity: None | int = field( + default=None, + metadata={ + "name": "StockSourceQuantity", + "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: StockOperationExchange = 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": "", + }, + ) + stock_operation_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "StockOperationXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/StockOperation" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/stk/stock_order_created.py b/es_elt/src/es_elt/xml/audit_data/stk/stock_order_created.py new file mode 100644 index 0000000..3b25629 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/stk/stock_order_created.py @@ -0,0 +1,126 @@ +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 +from es_elt.xml.common.localized import ( + LocalizedStockHistoryAction, + LocalizedStockItemType, +) +from es_elt.xml.common.stock_order_exchange import StockOrderExchange + +__NAMESPACE__ = "http://www.thales.dc/StockOrderCreated" + + +class StockOrderCreatedEventExchange(BaseModel): + """ + stk_order_validate_post: At stock order validation stk_order_put: At + stock order update stk_order_post: At stock order creation. + """ + + model_config = ConfigDict(defer_build=True) + quantity: int = field( + metadata={ + "name": "Quantity", + "type": "Element", + "namespace": "", + "required": True, + } + ) + stock_item_type: LocalizedStockItemType = field( + metadata={ + "name": "StockItemType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + stock_order_detail: None | StockOrderExchange = field( + default=None, + metadata={ + "name": "StockOrderDetail", + "type": "Element", + "namespace": "", + }, + ) + stock_order_id: str = field( + metadata={ + "name": "StockOrderId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + stock_provider_identifier: str = field( + metadata={ + "name": "StockProviderIdentifier", + "type": "Element", + "namespace": "", + "required": True, + } + ) + occurrence_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "OccurrenceDate", + "type": "Element", + "namespace": "", + }, + ) + stock_history_action: LocalizedStockHistoryAction = field( + metadata={ + "name": "StockHistoryAction", + "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: StockOrderCreatedEventExchange = 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": "", + }, + ) + stock_order_created_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "StockOrderCreatedXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/StockOrderCreated" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/stk/stock_provider_created.py b/es_elt/src/es_elt/xml/audit_data/stk/stock_provider_created.py new file mode 100644 index 0000000..6e5e62e --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/stk/stock_provider_created.py @@ -0,0 +1,107 @@ +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 +from es_elt.xml.common.localized import LocalizedStockHistoryAction +from es_elt.xml.common.stock_provider_exchange import StockProviderExchange + +__NAMESPACE__ = "http://www.thales.dc/StockProviderCreated" + + +class StockProviderCreatedEventExchange(BaseModel): + """ + stk_provider_post: At stock provider creation stk_provider_put: At + stock provider update stk_provider_delete: At stock provider deletion. + """ + + model_config = ConfigDict(defer_build=True) + occurrence_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "OccurrenceDate", + "type": "Element", + "namespace": "", + }, + ) + stock_history_action: LocalizedStockHistoryAction = field( + metadata={ + "name": "StockHistoryAction", + "type": "Element", + "namespace": "", + "required": True, + } + ) + stock_provider_detail: None | StockProviderExchange = field( + default=None, + metadata={ + "name": "StockProviderDetail", + "type": "Element", + "namespace": "", + }, + ) + stock_provider_id: str = field( + metadata={ + "name": "StockProviderId", + "type": "Element", + "namespace": "", + "required": True, + } + ) + stock_provider_identifier: str = field( + metadata={ + "name": "StockProviderIdentifier", + "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: StockProviderCreatedEventExchange = 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": "", + }, + ) + stock_provider_created_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "StockProviderCreatedXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/StockProviderCreated" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/stk/stock_update_error.py b/es_elt/src/es_elt/xml/audit_data/stk/stock_update_error.py new file mode 100644 index 0000000..703ef6b --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/stk/stock_update_error.py @@ -0,0 +1,108 @@ +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 +from es_elt.xml.common.localized import ( + LocalizedStockHistoryAction, + LocalizedStockItemType, +) + +__NAMESPACE__ = "http://www.thales.dc/StockUpdateError" + + +class StockUpdateErrorExchange(BaseModel): + """ + stk_stock_update_error_post: After an error of stock update. + """ + + model_config = ConfigDict(defer_build=True) + occurrence_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "OccurrenceDate", + "type": "Element", + "namespace": "", + }, + ) + stock_history_action: LocalizedStockHistoryAction = field( + metadata={ + "name": "StockHistoryAction", + "type": "Element", + "namespace": "", + "required": True, + } + ) + stock_item_type: LocalizedStockItemType = field( + metadata={ + "name": "StockItemType", + "type": "Element", + "namespace": "", + "required": True, + } + ) + media_serial_number: None | str = field( + default=None, + metadata={ + "name": "MediaSerialNumber", + "type": "Element", + "namespace": "", + }, + ) + stock_entity_identifier: None | str = field( + default=None, + metadata={ + "name": "StockEntityIdentifier", + "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: StockUpdateErrorExchange = 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": "", + }, + ) + stock_update_error_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "StockUpdateErrorXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/StockUpdateError" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/audit_data/stk/stock_updated.py b/es_elt/src/es_elt/xml/audit_data/stk/stock_updated.py new file mode 100644 index 0000000..16fb642 --- /dev/null +++ b/es_elt/src/es_elt/xml/audit_data/stk/stock_updated.py @@ -0,0 +1,108 @@ +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 +from es_elt.xml.common.localized import ( + LocalizedStockHistoryAction, + LocalizedStockItemType, +) + +__NAMESPACE__ = "http://www.thales.dc/StockUpdated" + + +class StockUpdatedEventExchange(BaseModel): + """ + stk_entity_post: At stock update. + """ + + model_config = ConfigDict(defer_build=True) + occurrence_date: None | XmlDateTime = field( + default=None, + metadata={ + "name": "OccurrenceDate", + "type": "Element", + "namespace": "", + }, + ) + stock_history_action: LocalizedStockHistoryAction = field( + metadata={ + "name": "StockHistoryAction", + "type": "Element", + "namespace": "", + "required": True, + } + ) + quantity: int = field( + metadata={ + "name": "Quantity", + "type": "Element", + "namespace": "", + "required": True, + } + ) + stock_entity_identifier: None | str = field( + default=None, + metadata={ + "name": "StockEntityIdentifier", + "type": "Element", + "namespace": "", + }, + ) + stock_item_type: LocalizedStockItemType = field( + metadata={ + "name": "StockItemType", + "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: StockUpdatedEventExchange = 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": "", + }, + ) + stock_updated_xsd_version: str = field( + const=True, + default="1.0", + metadata={ + "name": "StockUpdatedXsdVersion", + "type": "Attribute", + }, + ) + + +class AuditMessages(AuditMessagesType): + class Meta: + namespace = "http://www.thales.dc/StockUpdated" + + model_config = ConfigDict(defer_build=True) diff --git a/es_elt/src/es_elt/xml/common/__init__.py b/es_elt/src/es_elt/xml/common/__init__.py new file mode 100644 index 0000000..c47dcf2 --- /dev/null +++ b/es_elt/src/es_elt/xml/common/__init__.py @@ -0,0 +1,291 @@ +from es_elt.xml.common.capping_details import CappingDetails +from es_elt.xml.common.clearing_item_type import ( + ApportionmentItemsType, + ApportionmentItemType, + ContractApportionmentItemType, + ContractRuleDetails, + ContractRuleDetailsApportionmentItems, + ContractRuleDetailsPtomContractTypes, + ContractRuleDetailsSettlementItems, + ElementarySettlementItemType, + FeeData, + RuleType, + SettlementItemsType, + SettlementItemType, +) +from es_elt.xml.common.customer_payment_type import ( + CustomerPaymentType, + CustomerPaymentType1, +) +from es_elt.xml.common.deny_action_status import DenyActionStatus, DenyActionStatus1 +from es_elt.xml.common.discount import Discount +from es_elt.xml.common.extended_address import ExtendedAddress +from es_elt.xml.common.external_identifier_exchange import ( + ExternalIdentifierExchange, + ExternalIdentifierTypeExchange, + LocalizedExternalIdentifierTypeExchange, +) +from es_elt.xml.common.fee import Fee +from es_elt.xml.common.hal_link import HalLink +from es_elt.xml.common.headers import Headers, HeadersType +from es_elt.xml.common.localized import ( + Localized, + LocalizedBusinessEntity, + LocalizedBusinessEntityInt, + LocalizedBusinessEntityRoleType, + LocalizedBusinessRole, + LocalizedCappingRule, + LocalizedCountry, + LocalizedDestinationEntityBe, + LocalizedDestinationEntityType, + LocalizedEntityType, + LocalizedFarePoint, + LocalizedFeeRule, + LocalizedItemType, + LocalizedJourneyDefinition, + LocalizedMediaType, + LocalizedMediaTypeId, + LocalizedNonTransitProductCode, + LocalizedOrderStatus, + LocalizedProductCode, + LocalizedProviderStatus, + LocalizedStockHistoryAction, + LocalizedStockItemType, + LocalizedStopPoint, + LocalizedSupplementProductCode, + LocalizedTitle, + LocalizedTravelEventSource, + LocalizedTravelEventType, +) +from es_elt.xml.common.media_consumption_adjustment_common import ( + AdjustmentSource, + AdjustmentType, + AdjustmentTypes, + BulkAdjustmentEntryResultError, + BulkAdjustmentEntryResultErrors, + BulkAdjustmentInformation, + ExecutionStatus, + MediaConsumptionAdjustmentModificationResult, + MediaConsumptionJourneyAdjustmentModificationResult, +) +from es_elt.xml.common.media_consumption_adjustment_common import ( + MediaIdentification as ConsumptionAdjustmentMediaIdentification, +) +from es_elt.xml.common.media_consumption_adjustment_common import MediaTypes, User +from es_elt.xml.common.media_identification import ( + MediaIdentification as IdentificationMediaIdentification, +) +from es_elt.xml.common.media_identification import MediaOriginType +from es_elt.xml.common.multi_ticketing_versions_audit_exchange import ( + AuditMessages as MultiTicketingVersionsAuditMessages, +) +from es_elt.xml.common.multi_ticketing_versions_audit_exchange import ( + AuditMessagesType as MultiTicketingVersionsAuditMessagesType, +) +from es_elt.xml.common.multi_ticketing_versions_audit_exchange import ( + AuditMessageType as MultiTicketingVersionsAuditMessageType, +) +from es_elt.xml.common.multi_ticketing_versions_audit_exchange import ( + MultiTicketingVersionsAuditExchange, + MultiTicketingVersionsAuditExchangeVersions, + VersionDateAudit, +) +from es_elt.xml.common.order_details import ( + CustomerOrderStatus, + DeliveryOrderStatus, + OrderItemType, +) +from es_elt.xml.common.order_details import ( + PriceIncludingVat as OrderDetailsPriceIncludingVat, +) +from es_elt.xml.common.order_status import OrderStatus, OrderStatus1 +from es_elt.xml.common.payment_request_type import ( + PaymentRequestType, + PaymentRequestType1, +) +from es_elt.xml.common.payment_status import PaymentStatus, PaymentStatus1 +from es_elt.xml.common.payment_trigger_source import ( + PaymentTriggerSource, + PaymentTriggerSource1, +) +from es_elt.xml.common.payment_type import PaymentType, PaymentType1 +from es_elt.xml.common.product_price_with_details import ( + Discounts, + Fees, + ProductPriceWithDetails, + RatingExplanations, + RatingExplanationsRatingExplanation, + RatingExplanationsRatingExplanationCrossedZoneRating, + RatingExplanationsRatingExplanationDistanceRating, + RatingExplanationsRatingExplanationExternalRating, +) +from es_elt.xml.common.provider_status import ProviderStatus, ProviderStatus1 +from es_elt.xml.common.rating_detail import RatingDetail +from es_elt.xml.common.refund_contract_audit_exchange import ( + AuditMessages as RefundContractAuditMessages, +) +from es_elt.xml.common.refund_contract_audit_exchange import ( + AuditMessagesType as RefundContractAuditMessagesType, +) +from es_elt.xml.common.refund_contract_audit_exchange import ( + AuditMessageType as RefundContractAuditMessageType, +) +from es_elt.xml.common.refund_contract_audit_exchange import RefundContractAuditExchange +from es_elt.xml.common.refund_payment_audit import RefundPaymentAudit +from es_elt.xml.common.stock_entity_exchange import ( + StockEntityExchange, + StockEntityExchangeEntityItemList, + StockEntityExchangeExternalIdentifierList, +) +from es_elt.xml.common.stock_entity_item import StockEntityItem +from es_elt.xml.common.stock_history_action import ( + StockHistoryAction, + StockHistoryAction1, +) +from es_elt.xml.common.stock_order_exchange import StockOrderExchange +from es_elt.xml.common.stock_provider_exchange import ( + Address, + ProviderPhone, + StockProviderExchange, +) +from es_elt.xml.common.transaction_exception_type import ( + TransactionExceptionType, + TransactionExceptionType1, +) +from es_elt.xml.common.transit_contract import ( + PriceIncludingVat as TransitContractPriceIncludingVat, +) +from es_elt.xml.common.transit_contract import ProductFamily, TransitContract +from es_elt.xml.common.travel_event_source import TravelEventSource, TravelEventSource1 +from es_elt.xml.common.travel_event_type import TravelEventType, TravelEventType1 +from es_elt.xml.common.travel_status import TravelStatus, TravelStatus1 +from es_elt.xml.common.validation_model import ValidationModel, ValidationModel1 + +__all__ = [ + "CappingDetails", + "ApportionmentItemType", + "ApportionmentItemsType", + "ContractApportionmentItemType", + "ContractRuleDetails", + "ContractRuleDetailsApportionmentItems", + "ContractRuleDetailsPtomContractTypes", + "ContractRuleDetailsSettlementItems", + "ElementarySettlementItemType", + "FeeData", + "RuleType", + "SettlementItemType", + "SettlementItemsType", + "CustomerPaymentType", + "CustomerPaymentType1", + "DenyActionStatus", + "DenyActionStatus1", + "Discount", + "ExtendedAddress", + "ExternalIdentifierExchange", + "ExternalIdentifierTypeExchange", + "LocalizedExternalIdentifierTypeExchange", + "Fee", + "HalLink", + "Headers", + "HeadersType", + "Localized", + "LocalizedBusinessEntity", + "LocalizedBusinessEntityInt", + "LocalizedBusinessEntityRoleType", + "LocalizedBusinessRole", + "LocalizedCappingRule", + "LocalizedCountry", + "LocalizedDestinationEntityBe", + "LocalizedDestinationEntityType", + "LocalizedEntityType", + "LocalizedFarePoint", + "LocalizedFeeRule", + "LocalizedItemType", + "LocalizedJourneyDefinition", + "LocalizedMediaType", + "LocalizedMediaTypeId", + "LocalizedNonTransitProductCode", + "LocalizedOrderStatus", + "LocalizedProductCode", + "LocalizedProviderStatus", + "LocalizedStockHistoryAction", + "LocalizedStockItemType", + "LocalizedStopPoint", + "LocalizedSupplementProductCode", + "LocalizedTitle", + "LocalizedTravelEventSource", + "LocalizedTravelEventType", + "AdjustmentSource", + "AdjustmentType", + "AdjustmentTypes", + "BulkAdjustmentEntryResultError", + "BulkAdjustmentEntryResultErrors", + "BulkAdjustmentInformation", + "ExecutionStatus", + "MediaConsumptionAdjustmentModificationResult", + "MediaConsumptionJourneyAdjustmentModificationResult", + "ConsumptionAdjustmentMediaIdentification", + "MediaTypes", + "User", + "IdentificationMediaIdentification", + "MediaOriginType", + "MultiTicketingVersionsAuditMessageType", + "MultiTicketingVersionsAuditMessages", + "MultiTicketingVersionsAuditMessagesType", + "MultiTicketingVersionsAuditExchange", + "MultiTicketingVersionsAuditExchangeVersions", + "VersionDateAudit", + "CustomerOrderStatus", + "DeliveryOrderStatus", + "OrderItemType", + "OrderDetailsPriceIncludingVat", + "OrderStatus", + "OrderStatus1", + "PaymentRequestType", + "PaymentRequestType1", + "PaymentStatus", + "PaymentStatus1", + "PaymentTriggerSource", + "PaymentTriggerSource1", + "PaymentType", + "PaymentType1", + "Discounts", + "Fees", + "ProductPriceWithDetails", + "RatingExplanations", + "RatingExplanationsRatingExplanation", + "RatingExplanationsRatingExplanationCrossedZoneRating", + "RatingExplanationsRatingExplanationDistanceRating", + "RatingExplanationsRatingExplanationExternalRating", + "ProviderStatus", + "ProviderStatus1", + "RatingDetail", + "RefundContractAuditMessageType", + "RefundContractAuditMessages", + "RefundContractAuditMessagesType", + "RefundContractAuditExchange", + "RefundPaymentAudit", + "StockEntityExchange", + "StockEntityExchangeEntityItemList", + "StockEntityExchangeExternalIdentifierList", + "StockEntityItem", + "StockHistoryAction", + "StockHistoryAction1", + "StockOrderExchange", + "Address", + "ProviderPhone", + "StockProviderExchange", + "TransactionExceptionType", + "TransactionExceptionType1", + "TransitContractPriceIncludingVat", + "ProductFamily", + "TransitContract", + "TravelEventSource", + "TravelEventSource1", + "TravelEventType", + "TravelEventType1", + "TravelStatus", + "TravelStatus1", + "ValidationModel", + "ValidationModel1", +] diff --git a/es_elt/src/es_elt/xml/common/__pycache__/__init__.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..7c10074 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/__init__.cpython-312.pyc differ 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 0000000..e13dd06 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/capping_details.cpython-312.pyc differ 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 0000000..56eb87c Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/clearing_item_type.cpython-312.pyc differ 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 0000000..139eadf Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/customer_payment_type.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/common/__pycache__/deny_action_status.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/deny_action_status.cpython-312.pyc new file mode 100644 index 0000000..1084fd2 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/deny_action_status.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/common/__pycache__/discount.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/discount.cpython-312.pyc new file mode 100644 index 0000000..139273a Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/discount.cpython-312.pyc differ 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 0000000..b2aaff1 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/extended_address.cpython-312.pyc differ 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 0000000..0dd9df7 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/external_identifier_exchange.cpython-312.pyc differ 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 0000000..1640d0a Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/fee.cpython-312.pyc differ 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 0000000..4177cb7 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/hal_link.cpython-312.pyc differ 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 0000000..cf06ada Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/headers.cpython-312.pyc differ 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 0000000..af7711a Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/localized.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/common/__pycache__/media_consumption_adjustment_common.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/media_consumption_adjustment_common.cpython-312.pyc new file mode 100644 index 0000000..4c04ef7 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/media_consumption_adjustment_common.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/common/__pycache__/media_identification.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/media_identification.cpython-312.pyc new file mode 100644 index 0000000..1253aee Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/media_identification.cpython-312.pyc differ 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 0000000..29c8ba5 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/multi_ticketing_versions_audit_exchange.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/common/__pycache__/order_details.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/order_details.cpython-312.pyc new file mode 100644 index 0000000..8cbf455 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/order_details.cpython-312.pyc differ 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 0000000..14bace8 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/order_status.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/common/__pycache__/payment_request_type.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/payment_request_type.cpython-312.pyc new file mode 100644 index 0000000..846a980 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/payment_request_type.cpython-312.pyc differ 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 0000000..653cc54 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/payment_status.cpython-312.pyc differ 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 0000000..79446d9 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/payment_trigger_source.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/common/__pycache__/payment_type.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/payment_type.cpython-312.pyc new file mode 100644 index 0000000..4dde29e Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/payment_type.cpython-312.pyc differ 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 0000000..7076bb7 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/product_price_with_details.cpython-312.pyc differ 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 0000000..975b818 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/provider_status.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/common/__pycache__/rating_detail.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/rating_detail.cpython-312.pyc new file mode 100644 index 0000000..347ca9c Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/rating_detail.cpython-312.pyc differ 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 0000000..c27189b Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/refund_contract_audit_exchange.cpython-312.pyc differ 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 0000000..1c561f3 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/refund_payment_audit.cpython-312.pyc differ 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 0000000..51b7c28 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/stock_entity_exchange.cpython-312.pyc differ 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 0000000..47de3d9 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/stock_entity_item.cpython-312.pyc differ 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 0000000..dda8b55 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/stock_history_action.cpython-312.pyc differ 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 0000000..a5ee0c0 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/stock_order_exchange.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/common/__pycache__/stock_provider_exchange.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/stock_provider_exchange.cpython-312.pyc new file mode 100644 index 0000000..920c992 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/stock_provider_exchange.cpython-312.pyc differ 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 0000000..f6151c5 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/transaction_exception_type.cpython-312.pyc differ 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 0000000..a1598f5 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/transit_contract.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/common/__pycache__/travel_event_source.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/travel_event_source.cpython-312.pyc new file mode 100644 index 0000000..46f6d90 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/travel_event_source.cpython-312.pyc differ diff --git a/es_elt/src/es_elt/xml/common/__pycache__/travel_event_type.cpython-312.pyc b/es_elt/src/es_elt/xml/common/__pycache__/travel_event_type.cpython-312.pyc new file mode 100644 index 0000000..d707eba Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/travel_event_type.cpython-312.pyc differ 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 0000000..066a7a0 Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/travel_status.cpython-312.pyc differ 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 0000000..47ee7ae Binary files /dev/null and b/es_elt/src/es_elt/xml/common/__pycache__/validation_model.cpython-312.pyc differ 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 d369cb5..0000000 Binary files a/sds/app/.sds-api.yaml.kate-swp and /dev/null differ 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"