Rate Sheet Agent
Internal quoting no longer waits on re-keying carrier PDFs — sheets become ERP-aligned lane JSON (24+ processed in production).
Role: Senior software developer · primary engineer · Apr 2026 – Present · internal quoting (no public demo)
PDF · XLSX · EML → lane JSON
Problem
Freight forwarding and quoting teams receive carrier rates as PDFs, spreadsheets, and emails. Layouts differ by line and NVOCC, and downstream ERP quoting needs consistent lanes, equipment rates, surcharge inclusion, validity windows, and canonical charge codes. Re-keying those sheets by hand is slow and easy to get wrong. This service accepts an upload, runs extraction asynchronously, and returns a single lane-centric JSON contract that quoting systems can consume.
Role
At Shipsoft I was the primary engineer on the Rate Sheet Agent: HTTP ingest and job lifecycle, Celery workers, the four-pass extraction pipeline that replaced a CrewAI prototype, carrier-specific profiles, the ERP charge catalog, PostgreSQL job and gazetteer storage, and the regression suite. A colleague bootstrapped the early Redis/repo baseline. The API is live in production for internal quoting only.
What I built
- Async submit-and-poll REST API for PDF, XLSX, MSG, and EML uploads, with optional bearer auth and OpenAPI docs.
- Two-process deploy (API + dedicated extraction worker) on Redis/Celery, targeted at AWS Elastic Beanstalk or EC2.
- Four-pass pipeline: offline evidence extraction, chunk classification, deterministic candidates (ports, equipment, currency, surcharges), then budgeted LLM normalization with schema validation and review flags.
- Layered carrier profiles so major ocean carriers get the right table, prompt, and charge rules.
- Canonical charge catalog mapped to the company’s ERP charge master, including applicability and inclusion semantics for quoting.
- Optional PostgreSQL job store plus an offline UN/LOCODE gazetteer to enrich origin/destination country and location codes.
- Broad pytest coverage across carriers, catalog mapping, job cancellation, and token-budget behavior; legacy CrewAI path kept only for parity during cutover.
Stack
Python 3.12/3.13, FastAPI, Uvicorn, Pydantic, Celery, Redis, SQLAlchemy, PostgreSQL, OpenAI, pdfplumber, PyMuPDF, openpyxl, BeautifulSoup, extract-msg, AWS Elastic Beanstalk/EC2.
Related
Feeds Shipsoft 2.0 internal quoting rather than replacing the multi-tenant CRM. Sister pipeline: Enquiry Agent (email → CRM enquiry).