Component relationships
Input boundary and event semantics
FastAPI exposes direct lookups and batch imports to the React frontend. Container, transport-document and Booking identifiers select distinct carrier API parameters. Batches accept one Container or CBL column; validation and workflow detection occur before creating the run.
The API responses are retained, transformed through Pandas into tabular events and projected into operational milestones. Planned, estimated and actual events keep their types; arrival at a destination port does not establish warehouse delivery.
Current generations and immutable audit
A stateful SQLite history store owns short transactions, request/result records and generation publication. Each batch workflow has an independent current generation; new work is staged before an atomic publication. A failed run leaves the preceding generation intact.
Partial runs may publish successful results while retaining request failures. Direct-search records remain separate from batch state. Reopened runs expose stored results and request-level diagnostics; raw response bodies are served separately rather than embedded in history-list responses.
User-driven refresh and saved views
A submitted import or refresh performs lookup, normalization and persistence, with progress exposed to the interface. Refresh, relaunch and export are explicit user actions. Reading history or filtering a saved view starts no carrier request.
Current workflows retain their filters, column order and selected container. Exports follow the displayed filtered rows and columns. The application presents event and milestone tables; it does not implement a separate graphical shipment timeline.