From cb2eb2e789419299804c160facca10eb797b9ce9 Mon Sep 17 00:00:00 2001 From: Christoph Langer Date: Fri, 14 Aug 2026 13:40:36 +0200 Subject: [PATCH 1/2] Better implementation of SWAP transactions --- pytr/event.py | 51 ++++--- ...plit2.json => reverse_split_new_isin.json} | 0 ...plit3.json => reverse_split_old_isin.json} | 0 tests/events/tausch_informative.json | 48 +++++++ ...n => tausch_informative_no_eventType.json} | 0 tests/events/tausch_new_isin.json | 124 ++++++++++++++++++ tests/events/tausch_old_isin.json | 124 ++++++++++++++++++ tests/test_events.py | 44 ++++--- 8 files changed, 357 insertions(+), 34 deletions(-) rename tests/events/{reverse_split2.json => reverse_split_new_isin.json} (100%) rename tests/events/{reverse_split3.json => reverse_split_old_isin.json} (100%) create mode 100644 tests/events/tausch_informative.json rename tests/events/{tausch_no_eventType.json => tausch_informative_no_eventType.json} (100%) create mode 100644 tests/events/tausch_new_isin.json create mode 100644 tests/events/tausch_old_isin.json diff --git a/pytr/event.py b/pytr/event.py index 37a032e8..6a018de2 100644 --- a/pytr/event.py +++ b/pytr/event.py @@ -155,6 +155,7 @@ class PPEventType(EventType): # Swap "Aufruf von Zwischenpapieren": PPEventType.SWAP, "Reverse Split": PPEventType.SWAP, + "Tausch": PPEventType.SWAP, "Teilrückzahlung ohne Reduzierung des Poolfaktors": PPEventType.SWAP, "Zusammenschluss": PPEventType.SWAP, # Taxes @@ -313,6 +314,14 @@ class PPEventType(EventType): "Worldline": "FR0011981968", } +# Known ISIN renames/swaps: old ISIN -> new ISIN. +# Used to resolve paired TR swap events (one event per ISIN) into a single SWAP transaction. +_swap_old_to_new_isin: dict[str, str] = { + "DE0005785604": "DE000FRE5EN2", # Fresenius SE ISIN change 2026-08 + "IE000BI8OT95": "LU1781541179", # MSCI World USD (Acc) fund change + "US4385161066": "US4385162056", # Honeywell International reverse split 2026 +} + logger = None @@ -619,6 +628,7 @@ def from_dict(cls, event_dict: Dict[Any, Any]): "Aktiensplit", "Bonusaktien", "Reverse Split", + "Tausch", "Teilrückzahlung ohne Reduzierung des Poolfaktors", "Zusammenschluss", ] @@ -682,11 +692,12 @@ def from_dict(cls, event_dict: Dict[Any, Any]): isin2 = isin isin = _note_to_isin.get(note, isin2) if note else isin2 elif event_type == PPEventType.SWAP: - if note == "Honeywell International": - isin2 = isin - isin = "US4385161066" - elif note == "MSCI World USD (Acc)" and isin == "LU1781541179": - isin2 = "IE000BI8OT95" + if isin in _swap_old_to_new_isin: + isin2 = _swap_old_to_new_isin[isin] + elif isin in _swap_old_to_new_isin.values(): + # Duplicate event for the new ISIN side — suppress it; the old-ISIN event is canonical + event_type = None + ignoreEvent = True else: isin2 = (_swap_note_to_isin_overrides.get(note) or _note_to_isin.get(note, note)) if note else None @@ -750,19 +761,23 @@ def from_dict(cls, event_dict: Dict[Any, Any]): elif isin == "LU3170240538": note = "Apollo" - if event_type is PPEventType.SWAP and uebersicht_dict: - foundentfernt = False - for item in uebersicht_dict.get("data", []): - ititle = item.get("title") - if ititle == "Aktien entfernt": - foundentfernt = True - if not foundentfernt: - event_type = ConditionalEventType.TRADE_INVOICE - isin2 = None - if title == "WORLDLINE S.A. ANR": - title = "Worldline" - isin = "FR0011981968" - note = None + if event_type is PPEventType.SWAP: + if not uebersicht_dict: + event_type = None + ignoreEvent = True + else: + foundentfernt = False + for item in uebersicht_dict.get("data", []): + ititle = item.get("title") + if ititle == "Aktien entfernt": + foundentfernt = True + if not foundentfernt: + event_type = ConditionalEventType.TRADE_INVOICE + isin2 = None + if title == "WORLDLINE S.A. ANR": + title = "Worldline" + isin = "FR0011981968" + note = None if ( subtitle == "Zusammenschluss" diff --git a/tests/events/reverse_split2.json b/tests/events/reverse_split_new_isin.json similarity index 100% rename from tests/events/reverse_split2.json rename to tests/events/reverse_split_new_isin.json diff --git a/tests/events/reverse_split3.json b/tests/events/reverse_split_old_isin.json similarity index 100% rename from tests/events/reverse_split3.json rename to tests/events/reverse_split_old_isin.json diff --git a/tests/events/tausch_informative.json b/tests/events/tausch_informative.json new file mode 100644 index 00000000..67120f11 --- /dev/null +++ b/tests/events/tausch_informative.json @@ -0,0 +1,48 @@ +{ + "id": "bbf2affb-30ab-45bd-a7d6-d3047360e905", + "timestamp": "2025-11-04T08:59:35.225+0000", + "title": "L'Oreal", + "icon": "logos/FR0000120321/v2", + "subtitle": "Tausch", + "action": { + "type": "timelineDetail", + "payload": "bbf2affb-30ab-45bd-a7d6-d3047360e905" + }, + "source": "timelineActivity", + "details": { + "id": "bbf2affb-30ab-45bd-a7d6-d3047360e905", + "sections": [ + { + "title": "Du hast eine Kapitalmaßnahme erhalten", + "data": { + "icon": "logos/FR0000120321/v2", + "timestamp": "2025-11-04T08:59:35.225Z", + "status": "executed" + }, + "type": "header" + }, + { + "title": "Information", + "text": "Das beigefügte Dokument enthält wichtige Informationen zu deiner L'Oreal-Investition. Bitte überprüfe das Dokument.", + "type": "text" + }, + { + "title": "Dokumente", + "data": [ + { + "title": "Kapitalmaßnahmen", + "detail": "04.11.2025", + "action": { + "payload": "", + "type": "browserModal" + }, + "id": "e68a0462-3569-4eea-a33c-f5b10154986a", + "postboxType": "CA_GENERIC_OPTIONS_NOTIFICATION" + } + ], + "type": "documents" + } + ] + }, + "eventType": "SSP_CORPORATE_ACTION_INFORMATIVE" +} diff --git a/tests/events/tausch_no_eventType.json b/tests/events/tausch_informative_no_eventType.json similarity index 100% rename from tests/events/tausch_no_eventType.json rename to tests/events/tausch_informative_no_eventType.json diff --git a/tests/events/tausch_new_isin.json b/tests/events/tausch_new_isin.json new file mode 100644 index 00000000..bf100abd --- /dev/null +++ b/tests/events/tausch_new_isin.json @@ -0,0 +1,124 @@ +{ + "id": "cb25d019-05f3-3a6c-8785-e410b70df9cd", + "timestamp": "2026-08-13T15:22:52.025+0000", + "title": "Fresenius SE & Co. KGaA Namens-Aktien o.N.", + "icon": "logos/DE000FRE5EN2/v2", + "subtitle": "Tausch", + "action": { + "type": "timelineDetail", + "payload": "cb25d019-05f3-3a6c-8785-e410b70df9cd" + }, + "trailing": null, + "eventType": "SSP_CORPORATE_ACTION_NO_CASH", + "hidden": false, + "deleted": false, + "source": "timelineActivity", + "details": { + "id": "cb25d019-05f3-3a6c-8785-e410b70df9cd", + "sections": [ + { + "title": "Deine Aktien waren von einer Kapitalmaßnahme betroffen", + "data": { + "icon": { + "asset": "logos/DE000FRE5EN2/v2", + "badge": null + }, + "subtitleText": "13 Aug. · 15:22", + "status": "executed" + }, + "type": "header" + }, + { + "title": "Übersicht", + "data": [ + { + "title": "Status", + "detail": { + "text": "Ausgeführt", + "functionalStyle": "EXECUTED", + "type": "status" + }, + "style": "plain" + }, + { + "title": "Orderart", + "detail": { + "text": "Tausch", + "displayValue": { + "text": "Tausch", + "textDataSensitivity": "PUBLIC" + }, + "type": "text" + }, + "style": "plain" + }, + { + "title": "Wertpapier", + "detail": { + "text": "Fresenius", + "displayValue": { + "text": "Fresenius", + "textDataSensitivity": "PUBLIC" + }, + "type": "text" + }, + "style": "plain" + }, + { + "title": "Aktien entfernt", + "detail": { + "text": "5.431472", + "displayValue": { + "text": "5.431472", + "textDataSensitivity": "PUBLIC" + }, + "type": "text" + }, + "style": "plain" + }, + { + "title": "Wertpapier", + "detail": { + "text": "Fresenius SE & Co. KGaA Namens-Aktien o.N.", + "displayValue": { + "text": "Fresenius SE & Co. KGaA Namens-Aktien o.N.", + "textDataSensitivity": "PUBLIC" + }, + "type": "text" + }, + "style": "plain" + }, + { + "title": "Aktien hinzugefügt", + "detail": { + "text": "5.431472", + "displayValue": { + "text": "5.431472", + "textDataSensitivity": "PUBLIC" + }, + "type": "text" + }, + "style": "plain" + } + ], + "type": "table" + }, + { + "title": "Dokumente", + "data": [ + { + "title": "Dokumente", + "detail": "13.08.2026", + "action": { + "payload": "https://traderepublic-postbox-platform-production.s3.eu-central-1.amazonaws.com/timeline/postbox/2026/8/13/0d8878ab/pb178663471063817474809665823.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEC8aDGV1LWNlbnRyYWwtMSJGMEQCIBQ5PyGOkR5LjRsc1CTT1nE16lFpNrgJPsfX9E04PFw7AiADvrH8eTLAl4dLTRc7bjJBi5FuB0ms5zwtC7Ar%2BASoRCqeBQj4%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAQaDDgzMDAwNjQ0MjI2MCIMP5lDk1NjaXoUJAEPKvIEBl9fO36UtV1PFbu1FNdk9iystAz5TrC3Zk2NSGERA5jThqkTsw8faSGDDcJ2evzfyISUTlFg%2F2WE%2Fyi0QSUisdFpiNPLJZnqyW00P83KnCAFWBjdu4R%2BpIz5ETvxUE%2FqLpvwd%2Fj%2F3X9yEwufXj1MJU%2BJrE9IiMGa434qUc1sTBRVARQEzANxGaHHLdzcmAetKSCNRZviSbqKuLT4MT%2Fd%2FYu%2FZ3QlkphOgrC4ePWbNdLWTg8cHe%2Bw8h%2BOEtyoQJIJP2cuenpN07x0rwvTmxCjdCE2C1XecYK3SEbm9y0yOeAumXSPT25xOZO%2FdbqDunmBhme%2BIoOOjBQz4EzbO8k3MqeJ%2FrbfiOqfiQL5aCG7LQRCSwG2gI%2F4Ve34sMQOjw2RewkeRDJhHaIpxHVs55sW%2FA0%2FGNjNuq9Of8XxV2L0tjq0CU3L%2BiiPn2Jz7NO4Y2tC0fUAfp%2B6MoNG1H51Qsq7CTGtdSjvfDE6hGYGxsJ73drNdgbtOwt9QpNSdof9zKFDr80n4wtkRj3ROtb0VAXd2PNAn0wPjVFICSmtzU4GuGOn0xEnxkj5RBzkXDd9RBE6C7ZOJNgZnruVW5dhIMxZ%2F8rzWBl25WoOdwNvRKm4epPrg%2BQzR7Ec0cEe4vItdB8G9maa0uTLimYTck8i5bNOImjcN%2F%2FPeLU%2BGyzUs3ldYcHifNhf7q4pHT2AZ1LTkkog%2B%2F1%2FEqHWy4NEYs8FREvqQLWzFHj%2BVXM%2FtxTuuiGwlONiEefxiDIh8beJfXoQAGPByXZUuDuFTI6utD4HdlgWuVEq1%2BUCWD6fu0AJUNd4GDhyapdz2HcKrm2aAYujMsBt94MwuID70wY6mgGdKA%2FwFOHmvQno5YSvqSd1vSW6aaLebZYrDPF2sfCy1KJq5men51%2BZRRKFOuB7fXXsvWEdmSCXEky26hRBAgH2uF0l3W2CltNhWVfTI%2BICdHjBCICWvnGUMVyPackkBFGvB4HWbBJVSUD6oMc9%2BBMwT3HKyJPQJbMixQLNatakJ7fPEfmphFcdbtfoc3maGFRR5nukDFYzYzk%2B&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20260814T080539Z&X-Amz-SignedHeaders=host&X-Amz-Expires=900&X-Amz-Credential=ASIA4CQB5HEKJSEZ6Z2L%2F20260814%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Signature=c1938cd10790fd50a3c5487673072cd84f6b6e48d513c3d3d6f1c9180413d74b", + "type": "browserModal" + }, + "id": "5310c3d8-e7b5-4ad7-97fb-a48b39f5f579", + "postboxType": "CA_SECURITIES_INVOICE" + } + ], + "type": "documents" + } + ] + } +} diff --git a/tests/events/tausch_old_isin.json b/tests/events/tausch_old_isin.json new file mode 100644 index 00000000..97ef5510 --- /dev/null +++ b/tests/events/tausch_old_isin.json @@ -0,0 +1,124 @@ +{ + "id": "d569e3ae-4a62-3bda-9798-4b21ff0a5820", + "timestamp": "2026-08-13T15:22:52.025+0000", + "title": "Fresenius", + "icon": "logos/DE0005785604/v2", + "subtitle": "Tausch", + "action": { + "type": "timelineDetail", + "payload": "d569e3ae-4a62-3bda-9798-4b21ff0a5820" + }, + "trailing": null, + "eventType": "SSP_CORPORATE_ACTION_NO_CASH", + "hidden": false, + "deleted": false, + "source": "timelineActivity", + "details": { + "id": "d569e3ae-4a62-3bda-9798-4b21ff0a5820", + "sections": [ + { + "title": "Deine Aktien waren von einer Kapitalmaßnahme betroffen", + "data": { + "icon": { + "asset": "logos/DE0005785604/v2", + "badge": null + }, + "subtitleText": "13 Aug. · 15:22", + "status": "executed" + }, + "type": "header" + }, + { + "title": "Übersicht", + "data": [ + { + "title": "Status", + "detail": { + "text": "Ausgeführt", + "functionalStyle": "EXECUTED", + "type": "status" + }, + "style": "plain" + }, + { + "title": "Orderart", + "detail": { + "text": "Tausch", + "displayValue": { + "text": "Tausch", + "textDataSensitivity": "PUBLIC" + }, + "type": "text" + }, + "style": "plain" + }, + { + "title": "Wertpapier", + "detail": { + "text": "Fresenius", + "displayValue": { + "text": "Fresenius", + "textDataSensitivity": "PUBLIC" + }, + "type": "text" + }, + "style": "plain" + }, + { + "title": "Aktien entfernt", + "detail": { + "text": "5.431472", + "displayValue": { + "text": "5.431472", + "textDataSensitivity": "PUBLIC" + }, + "type": "text" + }, + "style": "plain" + }, + { + "title": "Wertpapier", + "detail": { + "text": "Fresenius SE & Co. KGaA Namens-Aktien o.N.", + "displayValue": { + "text": "Fresenius SE & Co. KGaA Namens-Aktien o.N.", + "textDataSensitivity": "PUBLIC" + }, + "type": "text" + }, + "style": "plain" + }, + { + "title": "Aktien hinzugefügt", + "detail": { + "text": "5.431472", + "displayValue": { + "text": "5.431472", + "textDataSensitivity": "PUBLIC" + }, + "type": "text" + }, + "style": "plain" + } + ], + "type": "table" + }, + { + "title": "Dokumente", + "data": [ + { + "title": "Dokumente", + "detail": "13.08.2026", + "action": { + "payload": "https://traderepublic-postbox-platform-production.s3.eu-central-1.amazonaws.com/timeline/postbox/2026/8/13/0d8878ab/pb1786634710573297902901548.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEC8aDGV1LWNlbnRyYWwtMSJHMEUCIQDKeo6fChOCwOtcrykZpDipoAZleie60Mdslocn7%2FP2VgIgAoJyaUZL1qAfYQ19rh6d2sRPM5ZziKp%2Buw16Bpof3f4qngUI%2BP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAEGgw4MzAwMDY0NDIyNjAiDKUKAVBJ5fnCLN%2By0iryBAFJ5ux5P%2F2R%2F2bDlcDk7cwskQ88IpxRI42b5jfFkYAD4RGNrCWZd%2FiEBPPA2SCi6qipIb5xO%2B0KkJMPxLNpcHrX6%2FFrMGAf1rMTFo8tEsKZZLwgZh16ZpE7MqBpQEtmnDJhX%2BFsORP8qHjSTQn30eEQRwyilotJThLc9yqKsNquI63ueBfxnUYnv4flnUbnh6D5eboqHB2G4yiafBfvQwHBmDCZ%2Bo%2FoR%2BURl%2BGLv1tP7kSKmGbmDgajJkwFbS9H4AD9eC3t22VsT991JTh6xxnW5gRIJV9exDSdZG3Dkpr5JUgE8oN7wPCnRgy3CHynum1%2FleeAdzsYjcgCRhoNen1JWR8hFusoT3zEWZ9AyhonKu%2FSoL6ZGKQDu1h2tjzfqC5r06JJRTaFnEULyw7cbAQdH3dllH8fTz1osSx9w1Q%2BVzTsimszo95FN5A4%2BVpGmZDpAUL5EixhQtwiAAh1YEYpijjBQt0%2BKUFdFovz5K9ZeR7g5Nwe0284WDA2WpcPXtsjETJ23UK8IMw7TpBKHGLko8O6gi0uk1SSRI4xcRNYQzsJz5IGTjaPCFm7xbruhIrhG7mbXDgsRUOkAmzA2%2F9CmJZhtBcDZ9CvRhnavsObeI6Pr2yVcHPxETpjalZrOQH9xVW5qO3vM%2F6LcU9%2BUgc0YGVegulccT6wcY%2FWehdqpTTPxjQSr76df1mr8clPF1OnuP9KgIhQZm7fu5rSou%2FlCD5G3B863qZ3nvXYfOMSnrVaF4cHh9rZLsvG%2FSF2RDQJ2pBQDON0jtNryEDfQeS8jthhyhsMP1rrnT2yG4E0ylFHKML%2BDPAvDYms6qvuR%2FthMNCA%2B9MGOpkBdBNjrTUo8sBmi5ciQWOxC0RD0MZeL9rLdDf3VWPNbEDnUWxBMuwW2fSEP7L5Xyhonlvlio9MBkkmTmqJ%2Flg8%2FnIDASdaLUQ7h9NwXesGGBIZoh00OmXpb8WPO1qYG%2B%2B2vO8jKEAf%2FwviHRq0W%2FOXfiz2JipAP7CQEUEQ9bqx0o4Jo7opLEOF6OOJUBSwSkMsd%2By%2FsBc0rHDc&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20260814T080539Z&X-Amz-SignedHeaders=host&X-Amz-Expires=900&X-Amz-Credential=ASIA4CQB5HEKIPNQ2EKX%2F20260814%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Signature=a45750a74915cce6dc6ec2230f4849cd1456e1ebd67925fda1c6d7f54e66add5", + "type": "browserModal" + }, + "id": "22b5d029-0f5c-46ad-b07f-c5ad0ae11ee2", + "postboxType": "CA_SECURITIES_INVOICE" + } + ], + "type": "documents" + } + ] + } +} diff --git a/tests/test_events.py b/tests/test_events.py index 0953c79c..11bc668e 100644 --- a/tests/test_events.py +++ b/tests/test_events.py @@ -1626,7 +1626,7 @@ ], }, { - "filename": "reverse_split2.json", + "filename": "reverse_split_old_isin.json", "event_type": PPEventType.SWAP, "title": "Honeywell International", "isin": "US4385161066", @@ -1649,28 +1649,36 @@ ], }, { - "filename": "reverse_split3.json", + "filename": "reverse_split_new_isin.json", + "event_type": None, # new-ISIN side of a paired swap — suppressed in favour of reverse_split_old_isin.json + }, + { + "filename": "tausch_old_isin.json", "event_type": PPEventType.SWAP, - "title": "Honeywell International", - "isin": "US4385161066", - "isin2": "US4385161066", - "shares": 0.966682, - "shares2": 0.483341, + "title": "Fresenius", + "isin": "DE0005785604", + "isin2": "DE000FRE5EN2", + "shares": 5.431472, + "shares2": 5.431472, "value": 0, - "note": "Honeywell International", + "note": "Fresenius SE & Co. KGaA Namens-Aktien o.N.", "transactions": [ { - "Datum": "2026-06-30T16:46:52", + "Datum": "2026-08-13T15:22:52", "Typ": "Swap", "Wert": 0, - "Notiz": "Honeywell International", - "ISIN": "US4385161066", - "Stück": 0.966682, - "ISIN2": "US4385161066", - "Stück2": 0.483341, + "Notiz": "Fresenius", + "ISIN": "DE0005785604", + "Stück": 5.431472, + "ISIN2": "DE000FRE5EN2", + "Stück2": 5.431472, }, ], }, + { + "filename": "tausch_new_isin.json", + "event_type": None, # new-ISIN side of a paired swap — suppressed in favour of tausch_old_isin.json + }, { "filename": "saveback.json", "event_type": ConditionalEventType.SAVEBACK, @@ -1924,8 +1932,12 @@ ], }, { - "filename": "tausch_no_eventType.json", - "title": "L'Oreal", + "filename": "tausch_informative_no_eventType.json", + "event_type": None, + }, + { + "filename": "tausch_informative.json", + "event_type": None, }, { "filename": "teilrueckzahlung.json", From 9deed040feb6b05ac327aaa4fec17742431edfdf Mon Sep 17 00:00:00 2001 From: Christoph Langer Date: Fri, 14 Aug 2026 16:30:41 +0200 Subject: [PATCH 2/2] Sanitize test data --- tests/events/tausch_new_isin.json | 2 +- tests/events/tausch_old_isin.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/events/tausch_new_isin.json b/tests/events/tausch_new_isin.json index bf100abd..d40147c0 100644 --- a/tests/events/tausch_new_isin.json +++ b/tests/events/tausch_new_isin.json @@ -110,7 +110,7 @@ "title": "Dokumente", "detail": "13.08.2026", "action": { - "payload": "https://traderepublic-postbox-platform-production.s3.eu-central-1.amazonaws.com/timeline/postbox/2026/8/13/0d8878ab/pb178663471063817474809665823.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEC8aDGV1LWNlbnRyYWwtMSJGMEQCIBQ5PyGOkR5LjRsc1CTT1nE16lFpNrgJPsfX9E04PFw7AiADvrH8eTLAl4dLTRc7bjJBi5FuB0ms5zwtC7Ar%2BASoRCqeBQj4%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAQaDDgzMDAwNjQ0MjI2MCIMP5lDk1NjaXoUJAEPKvIEBl9fO36UtV1PFbu1FNdk9iystAz5TrC3Zk2NSGERA5jThqkTsw8faSGDDcJ2evzfyISUTlFg%2F2WE%2Fyi0QSUisdFpiNPLJZnqyW00P83KnCAFWBjdu4R%2BpIz5ETvxUE%2FqLpvwd%2Fj%2F3X9yEwufXj1MJU%2BJrE9IiMGa434qUc1sTBRVARQEzANxGaHHLdzcmAetKSCNRZviSbqKuLT4MT%2Fd%2FYu%2FZ3QlkphOgrC4ePWbNdLWTg8cHe%2Bw8h%2BOEtyoQJIJP2cuenpN07x0rwvTmxCjdCE2C1XecYK3SEbm9y0yOeAumXSPT25xOZO%2FdbqDunmBhme%2BIoOOjBQz4EzbO8k3MqeJ%2FrbfiOqfiQL5aCG7LQRCSwG2gI%2F4Ve34sMQOjw2RewkeRDJhHaIpxHVs55sW%2FA0%2FGNjNuq9Of8XxV2L0tjq0CU3L%2BiiPn2Jz7NO4Y2tC0fUAfp%2B6MoNG1H51Qsq7CTGtdSjvfDE6hGYGxsJ73drNdgbtOwt9QpNSdof9zKFDr80n4wtkRj3ROtb0VAXd2PNAn0wPjVFICSmtzU4GuGOn0xEnxkj5RBzkXDd9RBE6C7ZOJNgZnruVW5dhIMxZ%2F8rzWBl25WoOdwNvRKm4epPrg%2BQzR7Ec0cEe4vItdB8G9maa0uTLimYTck8i5bNOImjcN%2F%2FPeLU%2BGyzUs3ldYcHifNhf7q4pHT2AZ1LTkkog%2B%2F1%2FEqHWy4NEYs8FREvqQLWzFHj%2BVXM%2FtxTuuiGwlONiEefxiDIh8beJfXoQAGPByXZUuDuFTI6utD4HdlgWuVEq1%2BUCWD6fu0AJUNd4GDhyapdz2HcKrm2aAYujMsBt94MwuID70wY6mgGdKA%2FwFOHmvQno5YSvqSd1vSW6aaLebZYrDPF2sfCy1KJq5men51%2BZRRKFOuB7fXXsvWEdmSCXEky26hRBAgH2uF0l3W2CltNhWVfTI%2BICdHjBCICWvnGUMVyPackkBFGvB4HWbBJVSUD6oMc9%2BBMwT3HKyJPQJbMixQLNatakJ7fPEfmphFcdbtfoc3maGFRR5nukDFYzYzk%2B&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20260814T080539Z&X-Amz-SignedHeaders=host&X-Amz-Expires=900&X-Amz-Credential=ASIA4CQB5HEKJSEZ6Z2L%2F20260814%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Signature=c1938cd10790fd50a3c5487673072cd84f6b6e48d513c3d3d6f1c9180413d74b", + "payload": "https://example.com/document.pdf", "type": "browserModal" }, "id": "5310c3d8-e7b5-4ad7-97fb-a48b39f5f579", diff --git a/tests/events/tausch_old_isin.json b/tests/events/tausch_old_isin.json index 97ef5510..e8023feb 100644 --- a/tests/events/tausch_old_isin.json +++ b/tests/events/tausch_old_isin.json @@ -110,7 +110,7 @@ "title": "Dokumente", "detail": "13.08.2026", "action": { - "payload": "https://traderepublic-postbox-platform-production.s3.eu-central-1.amazonaws.com/timeline/postbox/2026/8/13/0d8878ab/pb1786634710573297902901548.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEC8aDGV1LWNlbnRyYWwtMSJHMEUCIQDKeo6fChOCwOtcrykZpDipoAZleie60Mdslocn7%2FP2VgIgAoJyaUZL1qAfYQ19rh6d2sRPM5ZziKp%2Buw16Bpof3f4qngUI%2BP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAEGgw4MzAwMDY0NDIyNjAiDKUKAVBJ5fnCLN%2By0iryBAFJ5ux5P%2F2R%2F2bDlcDk7cwskQ88IpxRI42b5jfFkYAD4RGNrCWZd%2FiEBPPA2SCi6qipIb5xO%2B0KkJMPxLNpcHrX6%2FFrMGAf1rMTFo8tEsKZZLwgZh16ZpE7MqBpQEtmnDJhX%2BFsORP8qHjSTQn30eEQRwyilotJThLc9yqKsNquI63ueBfxnUYnv4flnUbnh6D5eboqHB2G4yiafBfvQwHBmDCZ%2Bo%2FoR%2BURl%2BGLv1tP7kSKmGbmDgajJkwFbS9H4AD9eC3t22VsT991JTh6xxnW5gRIJV9exDSdZG3Dkpr5JUgE8oN7wPCnRgy3CHynum1%2FleeAdzsYjcgCRhoNen1JWR8hFusoT3zEWZ9AyhonKu%2FSoL6ZGKQDu1h2tjzfqC5r06JJRTaFnEULyw7cbAQdH3dllH8fTz1osSx9w1Q%2BVzTsimszo95FN5A4%2BVpGmZDpAUL5EixhQtwiAAh1YEYpijjBQt0%2BKUFdFovz5K9ZeR7g5Nwe0284WDA2WpcPXtsjETJ23UK8IMw7TpBKHGLko8O6gi0uk1SSRI4xcRNYQzsJz5IGTjaPCFm7xbruhIrhG7mbXDgsRUOkAmzA2%2F9CmJZhtBcDZ9CvRhnavsObeI6Pr2yVcHPxETpjalZrOQH9xVW5qO3vM%2F6LcU9%2BUgc0YGVegulccT6wcY%2FWehdqpTTPxjQSr76df1mr8clPF1OnuP9KgIhQZm7fu5rSou%2FlCD5G3B863qZ3nvXYfOMSnrVaF4cHh9rZLsvG%2FSF2RDQJ2pBQDON0jtNryEDfQeS8jthhyhsMP1rrnT2yG4E0ylFHKML%2BDPAvDYms6qvuR%2FthMNCA%2B9MGOpkBdBNjrTUo8sBmi5ciQWOxC0RD0MZeL9rLdDf3VWPNbEDnUWxBMuwW2fSEP7L5Xyhonlvlio9MBkkmTmqJ%2Flg8%2FnIDASdaLUQ7h9NwXesGGBIZoh00OmXpb8WPO1qYG%2B%2B2vO8jKEAf%2FwviHRq0W%2FOXfiz2JipAP7CQEUEQ9bqx0o4Jo7opLEOF6OOJUBSwSkMsd%2By%2FsBc0rHDc&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20260814T080539Z&X-Amz-SignedHeaders=host&X-Amz-Expires=900&X-Amz-Credential=ASIA4CQB5HEKIPNQ2EKX%2F20260814%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Signature=a45750a74915cce6dc6ec2230f4849cd1456e1ebd67925fda1c6d7f54e66add5", + "payload": "https://example.com/document.pdf", "type": "browserModal" }, "id": "22b5d029-0f5c-46ad-b07f-c5ad0ae11ee2",