Streaming data for real time AI. A practical lesson in ai data and model operations for banking and payments practitioners.
Plain language meaning
Streaming data for real time AI explains how banks use event streams from channels, core systems, fraud tools, account services and operational platforms to support immediate scoring, alerting and decision support while preserving ordering, idempotency, quality and resilience.
This topic is about real-time banking event data for AI. It is not about treating every Kafka topic, API event or queue message as trustworthy just because it moves quickly.
In a real bank, this topic cannot be handled as a loose data-science or technology idea. It affects customer outcomes, fraud and AML control, operational queues, service continuity, privacy, security, model governance, audit replay, management reporting and regulatory confidence. AI should improve speed and quality, but the bank must still prove source data, permitted use, approved logic, human accountability, fallback handling and retained evidence.
Where it sits in the banking AI journey
This card belongs to AI Data and Model Operations. The working flow is Bank event, Stream contract, Real time features, AI score or alert, and Monitored action.
Read the flow as a bank operating model. Each stage needs a source system, a data owner, a timing rule, a quality gate, a model or rule boundary, an exception path, a customer-impact view, a fallback option, a monitoring requirement and a retained record. That is what separates useful AI adoption from uncontrolled automation.
Banking data and evidence
The important data points are event ID, event time, customer ID, account ID, amount, channel, sequence number, and consumer offset. These items matter because they can influence risk scoring, operational repair, fraud action, AML triage, customer treatment, reporting, model monitoring and management decisions.
The evidence pack should include event schema, consumer log, offset record, DLQ report, latency metric, replay result, and alert audit trail. A strong bank can replay the journey from source data to transformed input, AI output, rule result, human action, system outcome and monitoring result. A weak bank only knows that a process ran and hopes the process was right.
Controls that make AI adoption safe
The core controls are schema contract, idempotency key, ordering rule, late-event handling, dead-letter queue, stream monitoring, and replay procedure. These controls keep the topic anchored to banking purpose, approved policy, data governance, model-risk expectations, operational resilience, customer fairness, privacy, security and auditability.
The practical design should define what AI may recommend, what it must never decide alone, which deterministic rule remains authoritative, who owns thresholds and overrides, how degraded service is handled, how customer harm is detected and what evidence is retained. Without that control design, faster AI can simply make weak processes fail faster.
Architecture and data-operation lens
Banking AI depends on the architecture around it. Storage, streams, feature definitions, training sets, model versions, thresholds, feedback labels and rollback paths must be governed before the bank relies on AI output. The model is only one part of the control chain.
A bank-grade design connects channels, source systems, core records, payment hubs where relevant, fraud systems, AML platforms, case tools, data platforms, feature stores, model-serving endpoints, policy engines, audit logs and management dashboards. It also records degraded operation, recovery actions and lessons learned.
Regulatory and governance lens
Federal Reserve SR 26-2, dated 17 April 2026, gives revised model-risk guidance for traditional models and non-generative AI models used by banking organisations, including development, validation, monitoring, change control and governance.
The Federal Reserve's 2026 model-risk guidance states that generative and agentic AI are outside that guidance, while broader bank risk-management and governance practices still need to control tools and processes not covered by the guidance.
NIST AI RMF 1.0 uses Govern, Map, Measure and Manage functions for AI risk management, and NIST AI 600-1 adds generative-AI risk actions for source grounding, content provenance, data protection, cybersecurity and human oversight.
FFIEC Architecture, Infrastructure and Operations guidance expects financial-institution technology environments to be governed, resilient, secure, monitored, documented and aligned to business risk, including emerging technologies such as artificial intelligence and machine learning.
BCBS 239 remains current for effective risk data aggregation and risk reporting, and the Basel Committee's January 2026 newsletter reiterates the importance of accurate, comprehensive and timely data capabilities in banks.
FFIEC BSA/AML examination guidance expects suspicious activity monitoring systems and supporting technology to be risk-based, explainable by management, independently tested where appropriate and aligned to the bank's risk profile.
FinCEN's 12 June 2026 Section 314(b) materials clarify information sharing for possible terrorist activity, money laundering and fraud-related specified unlawful activity within the statutory safe-harbor framework for participating financial institutions.
OFAC's Framework for Compliance Commitments describes sanctions compliance programme components including management commitment, risk assessment, internal controls, testing and auditing, and training.
Diagram walkthrough
Read the diagram from left to right as Bank event, Stream contract, Real time features, AI score or alert, and Monitored action. It is a banking control map. The point is to show how data, AI or ML output, rules, human action, operational routing and audit evidence should connect.
Use it as a 30-minute study method. For each box, ask which system creates the data, which definition is used, which model or rule acts, what can go wrong, who can override it, how a fallback works, which customer or regulatory impact exists and what record proves the final state.
Most important mistake to avoid
The common failure is assuming streaming means truth. In a bank, a fast event can still be duplicated, late, incomplete, out of order, unauthorised or disconnected from the booking and reporting record.
The correction is disciplined scope. Keep the chapter anchored to banking purpose, prove the data path, make ownership visible, test failure behaviour, record the evidence and make the final outcome explainable without relying on memory, assumptions or developer-only knowledge.
A late event in a live fraud window
A card authorization reaches a fraud service at 10:15. Its feature counts attempts observed in the preceding ten minutes. A mobile transaction made at 10:12 arrives at 10:16 because an upstream queue was delayed. The 10:15 decision cannot use the event it had not received. The streaming system needs to record both the event's business time and arrival time so a later analysis does not pretend production had a complete view.
Define the window boundary, deduplication key, event states and maximum tolerated lateness. A retry of the same authorization must not create two payment actions. A delayed cancellation may need a new event that corrects an aggregate without erasing the original. A stale feature should have its own status, distinct from a genuinely zero count. The policy owner decides whether the payment can proceed under another control, wait, or enter a review queue when the stream is unhealthy.
Test a burst of traffic, out-of-order events, duplicate messages, a broken feature source and recovery after backlog. Measure end-to-end age and the proportion of decisions using fallback, not only the model endpoint's response time. A fast prediction against stale state is still a poor production result. An offline replay should use the availability cut-off for each original decision, while later labels and corrected events are used to evaluate outcomes. The NIST AI RMF playbook treats monitoring and data provenance as context-dependent risk-management work, not a universal latency standard.
Streaming is a sequence of business facts
Streaming moves new events through a processing system soon after they occur. In banking AI it can update fraud velocity, detect unusual account activity, enrich payment decisions and prioritize operational cases. The useful question is not whether the technology is called a stream; it is whether the right business facts reach the model before its decision deadline with a known freshness and completeness state.
An event should have a stable business ID, type, source, event time, recorded time, schema version and payload meaning. A payment instruction, status change, settlement, return and retry are different facts. If the same transfer generates several messages, a model feature must know which are eligible. A card authorization event and later clearing item have different amounts and timing. The stream processor should not infer business meaning from arrival order alone.
Real-time AI rarely relies on a single stream. It may combine current payment data, prior transaction history, customer and beneficiary reference, device activity and policy changes. Each source has its own lag and quality. A model can respond in 40 milliseconds while one critical input is an hour old. The feature response should include enough timestamp and validity information for the policy layer to decide whether to use it.
Event time and processing time
Event time is when the business event occurred; processing time is when a consumer handled it. A mobile instruction can arrive after a network delay. A source database can publish a change after commit. A replay after outage can deliver old events quickly. Aggregating by processing time can produce different velocity counts from aggregating by event time. State which time the feature uses and why.
A watermark estimates how far event-time processing has progressed. Late events beyond an allowed window can be quarantined, applied to corrected analytics or used to update future state under a documented policy. They cannot change a payment decision that was already executed. Preserve the original feature snapshot and treat a recomputed historical value as a separate analytical view. This prevents later backfill from making a past model call appear better informed than it was.
Window boundaries need precise definitions. For a payment at 10:00:00, "prior hour" might cover 09:00:00 inclusive to just before 10:00:00. The current instruction should not count itself unless the feature specifically says so. Test midnight, timezone changes, same-timestamp events and delayed updates. If a source's clock is unreliable, use a governed fallback or availability-time rule rather than assuming perfect ordering.
Delivery and duplicates
Many streaming systems deliver at least once. A consumer may process a message and crash before acknowledging it, then process it again after restart. Use event IDs and business instruction IDs to make aggregation idempotent. A technical retry of one payment is not two transfers, although retry count can be a separate useful feature. Deduplication rules should be documented and tested against legitimate repeated payments with the same amount and beneficiary.
Exactly-once processing inside one component does not ensure exactly one banking action. A model may be called twice, a case may be opened twice or a payment command may be retried after a network timeout. Keep business instruction, model attempt, decision and execution IDs distinct and reconcile them. A late score should not trigger a new action after fallback has already released or held a payment.
Ordering is typically guaranteed only within a partition. If events for the same account are spread across partitions, a consumer may see a return before settlement or an update before creation. Choose partition keys that support the feature's entity and ordering needs, while accounting for hot keys. Define how impossible status transitions are buffered, rejected or resolved from an authoritative source.
Stateful features
Fraud velocity features maintain state: count and value of transfers in the prior hour, number of new beneficiaries, unusual device changes or recent failed attempts. State needs a valid starting point. A processor restarted with an empty counter can make active accounts look inactive. Restore from a versioned snapshot and resume from a known event offset, then verify continuity and sample values before serving normal decisions.
State can grow without bound if the key or retention policy is wrong. Choose windows and expiry based on the use case, and keep enough history for recovery. A long-term customer baseline may be built in batch while the stream supplies recent changes. The model should receive both with timestamps. A fresh short-window count does not make a stale long-term baseline safe.
Partition skew matters. A large merchant or corporate customer can generate many events under one key, increasing lag for that entity while global throughput remains acceptable. Monitor lag and state size per critical partition, not only system average. Consider aggregation and sharding strategies with explicit consistency tradeoffs. Stress test peak payment days and correlated customer activity.
Enrichment and reference data
Streams often enrich events with customer, account, product or beneficiary references. These relationships change over time. An as-of join should use the reference state valid and available at the decision time. A later customer merge should not silently rewrite the earlier input. Preserve mapping version and match status. If a reference update arrives after a payment, decide whether it changes future features and whether past decisions need impact review.
An unmatched customer or beneficiary should not be interpreted as a new entity without evidence. It may reflect a source migration, stale reference feed or true novelty. Use separate states and an approved model or policy path. A streaming feature that joins only matched records can exclude suspicious or thin-file activity, biasing both serving and later evaluation.
Currency and product enrichment have their own clocks. An exchange rate applied to a cross-currency payment needs a rate source and timestamp. A product-code mapping can change with a bank migration. A policy classification may become effective at a particular date. Record these versions and monitor unknown codes. Successful message parsing is not proof of correct enrichment.
Schema and semantic evolution
A schema registry can reject incompatible payloads, but a field can keep its type while its meaning changes. A status code can be repurposed; an amount can switch units; a customer ID can acquire a new namespace. Stream consumers should validate ranges, status transitions and reference mappings. Compare feature and decision results across planned source releases on representative traffic.
Version events and transformations. A consumer supporting old and new messages should say which rule applies to each version. A rollback to old code can fail if the source has already advanced to a new schema. Keep migration and compatibility tests, including archived event replay. A model trained on a feature's old semantics must be evaluated before consuming its new meaning.
Malformed messages need an explicit dead-letter or quarantine path with owner and alert. Do not silently drop high-value instructions because an optional field is invalid. Measure rejected events and affected decisions by source, channel and segment. Quarantining a record prevents bad input from reaching the model but does not resolve the underlying banking action; the source or operations team must handle it.
Latency budgets
End-to-end latency includes source publication, broker transit, validation, state update, feature read, model inference, policy evaluation, logging and payment-hub action. A model's inference metric is only one part. Define a decision deadline and measure tail latency under load. Reserve time for mandatory checks and evidence capture. A retry should be bounded so it does not consume the entire budget.
Backpressure occurs when events arrive faster than consumers process them. Queue depth can rise while individual processing remains fast on messages that have already been read. Monitor the oldest unprocessed event and lag by partition. If lag exceeds the feature freshness limit, invoke the approved degraded path. Scaling consumers may help only if partitions and state distribution permit it.
Service restoration can create a burst of replayed events. Separate recomputing feature state from re-executing business commands. Throttle catch-up if downstream systems would be overwhelmed, and keep the feature invalid until its watermark is trustworthy. A green endpoint during catch-up is not evidence that decisions are based on current data.
Fraud decision example
At 12:00 a customer instructs a transfer to a newly added beneficiary. The stream processor has counted distinct accepted outgoing instructions over the preceding hour and recorded the latest source watermark. The feature service returns count, amount sum, beneficiary age and validity flags. The model scores the request. The policy service applies an approved threshold and independent controls, then the payment hub records the actual action.
At 12:02 a broker partition stalls. A source monitor and feature-age check detect that only some accounts are affected. Future requests for those accounts follow an approved fallback; unaffected accounts can continue if dependencies and policy permit. The decision journal identifies both populations. A system-wide "model available" alert would not detect the partial data failure.
At 12:10 the partition resumes and replays events. Deduplication prevents double counting. The bank recomputes feature values for the incident window and compares them with original snapshots. It reviews actions with meaningful differences and reconciles cases and payments. It does not replay payment commands or replace the historical feature record.
AML and case example
Streaming transaction-monitoring rules can create alerts while a model ranks them for investigation. The model may use recent activity, network relationships and prior case context. If ranking is unavailable, underlying alerts should still be generated and retained. An approved queue order and escalation plan can sustain investigation within capacity limits. The bank must measure backlog age and priority, not simply count alerts.
A later case disposition is an outcome for model evaluation, not a feature available when the alert first arrived. If the same case is updated repeatedly, the stream should preserve transitions without treating every update as a new independent alert. An entity-resolution correction can change network features; reverse lineage should find affected ranks and cases. Mandatory screening and legal holds remain separate from statistical prioritization.
Observability and reconciliation
Monitor source arrival, partition lag, duplicate ratio, invalid messages, state restore status, feature age, model outcomes, fallback rate, queue age and final business actions. Alert thresholds should be linked to response owners and risk. A sudden fall in fraud score can stem from true behavior or an empty feature state; trace to source and transformation before retraining a model.
Reconcile business instructions against stream events, feature requests and payment outcomes. Expected counts differ because pre-score rejects, retries and pending cases exist. Define the relationships and investigate unmatched IDs. A complete evidence trail includes model timeouts and decisions made under fallback. An immutable stream with missing business actions is not a complete audit record.
Test reverse lineage. Given a defective customer mapping version or stalled partition, enumerate decisions that consumed its outputs, group by policy action and review actual customer effects. Store source references and feature snapshots under controlled access. Aggregate drift charts cannot substitute for an affected-decision list.
Security and resilience
Streaming payloads can contain sensitive account, payment and case information. Encrypt transport and storage, limit consumer identities, monitor exports and keep retention appropriate to the use. Derived features and pseudonymous keys can still identify customers when linked. A development topic should not be an unrestricted copy of production narratives. Apply controls to dead-letter queues and replay environments too.
Plan for broker, processor, feature store and reference-service outages independently. A circuit breaker should protect upstream capacity, but it also needs an approved business fallback. A shared region can fail multiple dependencies at once. Test recovery from checkpoints, corrupted state, network partitions and logging sink failures. A fallback that relies on the same unavailable interface is not independent.
Document who can activate and end a degraded mode, which transactions it covers and how cases are reconciled afterward. A manual queue has finite capacity. A rule-only payment path can change fraud exposure and customer friction. Measure both during drills and actual incidents. Restoration requires data validity and downstream reconciliation, not just an API health check.
Acceptance exercise
Create a six-event test stream: a payment instruction, its technical retry, a second legitimate payment, a late status update, a beneficiary-reference correction and a reversal. State event and ingestion times, IDs and schema versions. Calculate expected feature values at two decision cutoffs. Inject a consumer restart and a duplicate delivery. Verify that online state, offline point-in-time replay and the original decision journal agree under the defined availability rules.
Then stall one partition while another remains healthy. Show that freshness checks identify the affected population and that the policy invokes the correct limited path. After replay, enumerate decisions made during the gap and compare corrected values without changing executed payments. These tests establish whether the stream is a trustworthy input to real-time AI rather than merely a fast transport.
Window computation patterns
A tumbling window partitions time into fixed, nonoverlapping intervals, such as each minute. It is efficient for monitoring volume, but a payment at 12:00:01 and one at 11:59:59 fall into different windows even though they are two seconds apart. A sliding window evaluates a moving interval and is often better for velocity at a decision timestamp. A session window groups activity separated by less than a chosen inactivity gap. Each pattern answers a different banking question; document boundaries and the behavior at sparse or bursty activity.
For a fraud feature counting transfers in the past 60 minutes, a sliding window should use distinct business instructions and exclude the current request. A tumbling-hour count can miss an attack spanning an hour boundary. For operational reporting, minute buckets may be adequate, with a separate alert on total volume. For a customer session, repeated login attempts may form a session, but a device or credential change can complicate identity. Test calculations by hand around boundaries before trusting a streaming library's defaults.
State expiry is part of the definition. If a counter stores only 60 minutes of events, its behavior after a restart or clock correction depends on how old state is restored. A bank may keep a longer lookback for replay and a shorter serving view. Define memory limits and what happens when a key exceeds them. Dropping the oldest events because a hot key is too large can produce a falsely low count.
Joins between streams
Some use cases join two streams, such as payment instructions and device events. Events may arrive in either order. Define a time interval and matching key for the join, with a status when one side is missing. A device event received after a payment decision cannot be treated as if it had been available to the model at authorization time. A later analytic join may help investigate the case, but it is not the original serving input.
Joining authorization to settlement or return needs a different horizon. A return can arrive days later and belongs to outcome analysis, not the live authorization feature. Link with business IDs and expected lifecycle states. Avoid a broad timestamp-and-amount join that can match unrelated similar transfers. Track unmatched records and ambiguity rates.
Reference updates can arrive as a stream too. A beneficiary directory may mark a payee as newly trusted after verification. If the update reaches one feature processor before another, two models could see different reference states. Use versioned update events or a consistent snapshot protocol, and record which version each decision consumed. A strong consistency requirement for a legal hold may call for a different architecture from an eventually consistent behavioral feature.
Backpressure and load shedding
When arrival exceeds processing capacity, a consumer can lag, buffer or reject. A fraud decision cannot simply wait indefinitely. Define which traffic can be delayed, which uses an approved fallback and which must pause. Dropping low-priority telemetry is different from dropping payment events. If a model-serving queue sheds requests, record every unscored eligible instruction and its actual policy action. Do not let an error counter stand in for business reconciliation.
Autoscaling may take time and may not help when a single partition is the bottleneck. Test peak distributions, not only total messages per second. A fraud attack can itself create a skewed burst against one customer or beneficiary, exactly when the model needs accurate velocity. Design protective limits and independent detection for conditions that overwhelm a stateful feature.
Use bounded retry with backoff for transient downstream failures. Unlimited retries can amplify a vendor outage and block newer messages. Dead-letter records need an owner, priority and route back to the business process. Reintroducing them after repair should update analytical and future feature state without duplicating earlier decisions. Reconciliation should prove this separation.
Data integrity attacks and malformed content
An adversary may try to manipulate event-driven features by splitting payments, creating many accounts or staging innocuous activity before a larger transfer. A velocity feature at one account level can miss activity across linked entities. Entity resolution and multiple time windows can help, but uncertain links should not become hard facts. Review adversarial scenarios and monitor feature shifts after attackers adapt.
Malformed payloads can also arise from ordinary source defects. An impossible currency, negative amount under the wrong event type or invalid account key should trigger validation. A payment narrative may contain untrusted text that later enters an LLM summarizer; keep it as data, not instructions. Quarantine or mark invalid fields under an approved decision path. A parser accepting a string is not evidence that the bank understands its content.
Protect message integrity and producer identity. Only authorized source systems should publish to critical topics; consumers should verify schemas and event origin. A forged or duplicated customer event could change risk features even if no payment ledger posting occurred. Reconcile to authoritative transaction systems and investigate orphan events.
Monitoring model effects
Track feature distributions and model scores alongside stream health. If score distribution changes sharply, inspect freshness, counts, category mappings and source volume before changing the model. A data defect can resemble concept drift. Conversely, a stream can be technically healthy while customer behavior changes and model performance degrades. Outcome labels mature later, so combine leading quality checks with subsequent fraud or case results.
Measure decision effects of degraded data: what share of eligible payments used fallback, how many were held, how long cases waited, and which customer groups were affected. A low average fallback rate can still be concentrated in a region or channel. Preserve the denominator and segment definitions. After an incident, compare corrected features and actual actions to prioritize remediation rather than asserting that every score difference was harmful.
For an AML ranking stream, monitor alert creation independently from ranking success. If the model fails, cases should still be generated by the underlying controls where required. Queue age and analyst capacity then determine operational risk. A healthy ranking endpoint with a missing alert feed is a separate failure that model metrics may not reveal.
Deployment and rollback
Roll out a new stream transformation with a shadow consumer on representative events. Compare deduplicated business IDs, state values, feature age, model scores and policy outcomes. Include duplicates, reversals, late arrivals and reference changes. Shadow outputs must not execute customer actions. Review outliers before switching serving traffic.
Rollback can be complex when state schema changes. An old consumer may not understand the new checkpoint, and replay may require retained source events. Plan compatible state migration and a limited-mode window. Record which decisions used old and new feature versions. A code rollback that serves an empty counter is worse than a controlled pause.
After switching, reconcile live request and action populations and continue heightened monitoring for a defined period. Train operations to recognize a partial partition failure and feature-staleness alert. Keep a known affected-decision query ready. The release is complete when the bank can explain actual decisions under both normal and degraded stream conditions, not when the deployment tool reports success.
Review of a single instruction
Choose a payment with a high fraud score. Trace the source instruction and its event version, the partition and offset, customer mapping, events in the velocity window, reference updates, feature-store timestamp, model request and policy action. Check whether any later event or outcome accidentally entered the feature. Repeat with a low score during a source delay. If the low value came from an empty or stale state, the real defect is data availability, not necessarily model calibration.
Finally, ask whether the operations team could identify every similarly affected instruction within the incident period. If only aggregate lag is available, add decision-level feature validity and reverse-lineage evidence. Real-time AI needs real-time knowledge of when its data is no longer trustworthy.
Controlled replay example
Suppose a processor failed at 15:00 and resumed at 15:20. Its checkpoint says it last committed offset 500, while the source topic now reaches offset 900. Before replay, the incident owner marks feature state for the affected partition invalid. Live payment requests use the approved limited path. The processor restores a snapshot at offset 480, reprocesses events 481 through 900 and deduplicates those already reflected in state. It verifies counts against source business IDs, checks the watermark and compares sample online features with independent calculations.
The team then queries payment decisions from 15:00 to the point of verified freshness. For each, it records whether a valid score, stale score or fallback was used, the final payment action and any case status. It can compute what the corrected feature would have been, but that value is marked counterfactual. A payment that was already settled is not sent through authorization again. An unresolved case is reconciled against the actual payment state before any analyst action.
If the snapshot was corrupt, the team may need to rebuild from an earlier trusted point, extending the degraded interval. The runbook should define the maximum tolerable recovery time and manual queue capacity. A green processor metric while rebuilding is not a reason to end fallback. Only validated state, source continuity, model input checks and business reconciliation justify normal operation.
Record the evidence: checkpoint and source offsets, snapshot version, deduplication totals, failed records, feature comparisons, affected decision list and approvals to enter and exit limited mode. A later incident review can ask whether the lag monitor detected the defect early enough, whether the queue was manageable and whether customers experienced unnecessary holds or risky releases. That review improves both the stream and the AI decision policy. Repeat the exercise after a partitioning or source-schema change. The previous successful recovery test no longer proves that the new consumer and checkpoint format will restore correctly. Include an independent reviewer who can follow the decision journal without relying on the stream team's memory. Record which partitions were never affected so the impact analysis does not overstate the customer population. Compare restored counters with an independent source control total before reactivating automatic scoring. Preserve that comparison with the incident record; a checkpoint alone cannot prove every business event was counted once.
Offset and business-ID reconciliation
A stream consumer restarts after processing offset 500 but before committing its checkpoint. It receives events 480 through 520 again. Deduplication by business instruction and event version prevents a duplicate transfer from incrementing the fraud counter twice. The team compares source event totals, distinct instruction IDs and feature state before restoring normal scoring.
A late event at offset 510 has an event time before a payment scored at 10:03, but arrived after that decision. The original score cannot be explained using the later event. Store the actual vector and watermark, and compute a separate corrected view for impact review. If a partition still lags, affected customers use the approved fallback while other partitions may continue. This exercise tests the real decision boundary, not merely broker throughput. Add a hot-key customer whose burst saturates one partition while global lag remains low. Monitor the oldest event and feature age for that key. If its freshness limit fails, route only affected requests through the approved policy and document the customer impact, instead of declaring the whole stream healthy.
This application uses JavaScript for the full interactive experience. This text summary is served for accessibility and search indexing.