Stine Seed Portal — Modernizing a National Seed Company from AS/400 to Enterprise Web
HOME - case studies - stine seed sales portal
Stine Seed Portal — Modernizing a National Seed Company from AS/400 to Enterprise Web

Industry
Agriculture & Seed Technology
Region
United States
Project Type
Legacy Modernization (AS/400 → Web)
Timeline
24 Months
Team Size
8 Engineers
Platforms
Web (Angular + ASP.NET Core)
Client Overview
Stine Seed Company is one of America's largest and most respected independent seed companies, headquartered in Iowa — renowned for decades of breakthrough research producing high-yielding corn and soybean varieties sold through a national network of dealer accounts across the United States. Stine operates a complex commercial model: a multi-tier field sales organization of ISRs, DSMs, and RSMs manages thousands of dealer relationships; a production network of seed growers and conditioners supplies inventory across the country; and a financial team handles accounts receivable, wholesale transactions, grower settlements, and GL reporting — all operating on an annual company year cycle.
For decades, this entire operation ran on an IBM AS/400 COBOL system — a platform that, while reliable, could no longer support the speed, visibility, and cross-team collaboration that Stine's growing operations required. The system was opaque to anyone without terminal access, produced reports that required manual interpretation, and had no ability to support a distributed field sales team working remotely across the country.
Challenges & Problem Statement
Stine's AS/400 system was deeply embedded in every aspect of the business — from order entry and pricing to inventory tracking, AR management, and month-end financial close. Replacing it without disrupting an active, revenue-generating sales operation created several critical business constraints:
- Zero tolerance for business rule regression: Stine's pricing model — stacking volume discounts, region discounts, JD discounts, dealer price adjustments, tech fees, and early payment credits — had been encoded in COBOL over decades. Any deviation in recalculated prices would directly affect dealer relationships and revenue recognition.
- Operations span the full annual seed cycle: From early prospect management and order opening, through inventory bagging and shipment, to AR collection and year-end close — the platform had to support every stage of Stine's 12-month business cycle without gaps.
- Field sales team needed remote access: ISRs working in the field had no way to place or check orders outside the office on the AS/400. A separate, lightweight sales application was needed for field-facing order entry and account visibility.
- 80+ report formats in active use: Stine's operations team, finance team, conditioners, and growers all depended on specific printed report formats — Bill of Lading, grower settlement, aged trial balance, order status, GL entries, and more — that had to be faithfully reproduced in the new system.
- Accounts receivable carried real financial risk: With a large dealer network carrying open balances across the season, AR aging, late charge calculation, and payment application had to be accurate and auditable — any errors had direct cash flow consequences.
- Annual company year transitions had to be seamless: Each year, products, pricing, feature availability, and account assignments change. The platform had to support Stine's operations team managing these transitions independently, without requiring developer involvement for each new sales season.
Project Overview
TTPL designed and delivered the Stine Seed Portal — a full-stack enterprise platform that retired Stine Seed Company's IBM AS/400 COBOL system and replaced it with two modern Angular web applications backed by a layered ASP.NET Core API and Azure SQL. The platform covers six major operational domains: CRM and dealer account management, seed ordering and shipment operations, production and inventory management, accounts receivable and financial management, wholesale operations, and system administration.
The backend architecture spans dedicated project layers — StinePortal.Core (feature modules and services), StinePortal.Models, StinePortal.Database, and a standalone StinePortal.Core.ReCalc pricing engine — plus a separate SalesPortal.Api for ISR-facing operations. Over 100 API controllers and 80+ QuestPDF-generated report types power every aspect of Stine's annual seed sales cycle, deployed on Azure through Docker containers, Terraform-provisioned infrastructure, and independent Azure DevOps CI/CD pipelines.
Approach
TTPL treated the Stine Portal as a legacy modernization project first — not a greenfield build. Before writing a line of new code, the team studied Stine's AS/400 module maps, COBOL menu structures, table definitions, and business requirement documents to fully understand what the existing system did. Every pricing rule, inventory movement, AR calculation, and report format was documented before being re-implemented in C#.
The architecture was organized around business domains rather than technical layers. The StinePortal.Core project groups 70+ feature modules — Account, Order, Inventory, Grower, Conditioner, AR, Wholesale, Shipment, and more — each containing its own service logic, validators, and data access patterns. A separate StinePortal.Core.ReCalc project encapsulates the pricing recalculation engine, keeping its complex multi-discount computation pipeline isolated from day-to-day CRUD operations.
The two-API strategy was a deliberate architectural decision: the main StinePortal.Api serves the full operational surface for internal Stine staff, while the lighter SalesPortal.Api gives ISR field users a dedicated, independently deployable interface for order entry and account management. Both share the same Core layer and Azure SQL database, eliminating data duplication while allowing independent release cycles.
PDF report development used QuestPDF throughout — each of the 80+ reports has its own dedicated helper class with a data pipeline, aggregation logic, and layout definition. This structure made it feasible to build, test, and iterate on complex reports like the Aged Trial Balance, Grower Settlement, or Bill of Lading without risking regressions in unrelated reports.
Solution Delivered
ReCalc Pricing Engine — Multi-Layer Discount Computation
A standalone StinePortal.Core.ReCalc project handles Stine's multi-layer pricing recalculation. Customer-level prices are computed by applying a defined sequence of discount and adjustment rules — volume discounts, region discounts, JD discounts, special pricing programs, dealer price adjustments, tech fees, and early payment credits — against base prices across a customer's full order portfolio. The engine reconciles payment adjustments and shipment corrections, then regenerates the GL entries for all affected orders. A Recalculate GL Print report is produced for Stine's finance team at the close of each pricing cycle. This engine faithfully replicates the core financial calculation logic of Stine's legacy AS/400 COBOL system in a testable, maintainable C# architecture.
Accounts Receivable & Financial Management
A full AR module manages Stine's dealer receivables lifecycle. Account statements are generated per dealer showing open balances, payments, and aging detail. The Aged Trial Balance report surfaces outstanding receivables across aging buckets (current, 30, 60, 90+ days) for the full dealer network. Open invoice management tracks individual invoices, payment applications, and outstanding balances. Late charges are calculated and applied following configurable rules. Payment recording covers cash receipts, credit memos, and adjustments with full audit trails. GL entries are generated for all financial transactions and exported for Stine's accounting team. All AR documents and reports are produced as precisely formatted PDFs via QuestPDF.
CRM — Dealer Account & Prospect Management
The CRM module is the commercial core of the portal. Dealer accounts are managed across company years — covering account details, DSM/RSM territory assignments, acreage data, ownership, contact information, trait provider licenses, and zone codes. Each account's full order history is accessible from the account view. The prospect pipeline gives ISRs a structured workflow: importing prospects from external files, assigning them, logging weekly visits, tracking ISR visit activity, and progressing prospects through status stages. A CRM dashboard gives ISRs and managers live visibility into their accounts, visit logs, and pipeline health. Account transfers between ISRs follow a controlled process with a full activity audit trail.
Order Management & Shipment Operations
The ordering module supports placement by product (browsing the full catalog and allocating quantities per account) and by conditioner (ordering against a specific conditioner's available inventory). Orders are header/detail records with per-line pricing computed through the ReCalc engine. Shipment operations cover shipping requests, Bill of Lading generation in multiple formats (detail, YTD, by BL type, inventory by lot, worksheet), return shipments, transfer shipments, and post-shipment reporting. The ISR Sales Portal provides a dedicated, streamlined interface for field-facing order entry and available hybrid visibility — independently deployable from the main portal.
Production — Grower, Conditioner & Multi-Type Inventory
The Production module manages Stine's supply chain from the seed variety level down to physical inventory at conditioners and elevators. Grower profiles cover contracts, trait provider licenses, location assignments, pricing, premium liability, and production estimates — with grower settlement and pricing reports generated as formatted PDFs. Conditioner profiles manage agreements, contacts, location assignments, package type authorizations, and max volume reporting per company year. Inventory is tracked across multiple physical states — bagged, bulk, delivered at plant, and elevator — each with its own lifecycle, germination scores, seed sample records, trait test results, and bin codes. The Bagging Approval workflow authorizes seed lots for bagging with approval stages and seed quality scoring.
Wholesale Operations
A dedicated wholesale module manages Stine's wholesale seed transactions independently from the dealer ordering system. Wholesale shipments are created, tracked, and invoiced with per-shipment payment recording. Wholesale term files define the pricing and payment terms applicable to wholesale accounts. Transaction history is maintained with full audit trails. All wholesale documents — shipment invoices, payment confirmations, and wholesale purchase statement reports — are generated as QuestPDF-formatted PDFs that match the output format Stine's wholesale customers expect.
80+ QuestPDF Reports Suite
The platform generates over 80 distinct structured PDF reports using QuestPDF, each with its own dedicated helper class containing a data pipeline, aggregation logic, and layout definition. Report categories span: Bill of Lading (detail, YTD, by BL type, inventory by lot, worksheet), Order reports (order status, order summary, orders vs supply, orders by RSM/DSM/product, hardbox), Inventory reports (bagged summary, available corn/soybean, inventory valuation, conditioner available inventory), Grower reports (contract, settlement, premium liability, production estimates, pricing), AR reports (aged trial balance, account statement, late charge, GL entries, open invoices), Conditioner reports (contract, account summary, settlement), Shipment reports (shipment, shipping request, post-shipment, transfer), and Wholesale reports (purchase statement, shipment invoice, payment). Every report faithfully reproduces the output format of the AS/400 reports that Stine's staff, growers, conditioners, and dealers relied on.
USPS Address Validation, Company Year Engine & Permission Model
All dealer, grower, conditioner, and contact addresses are validated against the USPS Address Validation API at entry — ensuring accurate, deliverable addresses for mailing labels, shipping requests, and financial correspondence. A Census service resolves geographic boundary data (FIPS codes, state/county/township) for territory and region management. The Business Feature system lets Stine's operations team enable or disable platform capabilities per company year through the admin portal with no code changes — managing annual sales cycle transitions independently. Access control uses a multi-layer permission model: role-level permissions gate modules and actions; user-level overrides allow fine-grained adjustments; job assignments scope ISRs, DSMs, and RSMs to their territory and account data — enforced at both Angular route guard and API authorization middleware layers.
Result
The Stine Seed Portal retired a 30+ year IBM AS/400 COBOL system and replaced it with a modern, two-application enterprise platform serving Stine Seed Company's full commercial and financial operations. Dealer accounts, seed ordering, production inventory, accounts receivable, wholesale transactions, grower settlements, and conditioner partnerships are now managed through a unified digital system — accessible from any device, by authorized users across Stine's national network.
The ReCalc pricing engine faithfully reproduces Stine's legacy multi-layer discount calculations with no business rule regressions. The 80+ QuestPDF report suite gives Stine's operations, finance, and field teams the same report formats they depended on from the AS/400 — now generated on demand from a web browser. ISR field users have a dedicated sales portal for remote order entry and account management. The platform is live on Azure across multiple environments, with independent CI/CD pipelines for each application ensuring reliable, low-risk deployments at every stage of Stine's annual sales cycle.
Client Benefits
Complete AS/400 COBOL Replacement with Zero Business Rule Loss
Every pricing calculation, inventory movement, AR rule, and report format from Stine's legacy system was faithfully re-implemented — giving the operations team a modern platform without any regression in the business logic they depended on.
ReCalc Pricing Engine with GL Reconciliation
Stine's multi-layer discount model — volume, region, JD, dealer adjustments, tech fees, and payment credits — is computed accurately and automatically, with GL entries regenerated at each pricing cycle and a full recalculation print report for the finance team.
Full Accounts Receivable Visibility
AR statements, aged trial balance, open invoices, late charges, and payment history are all accessible in real time — giving Stine's finance team live visibility into dealer receivables that the AS/400 could not provide.
80+ On-Demand PDF Reports
Every report Stine's operations, finance, grower, and conditioner teams relied on is now generated on demand through a web browser — in the same format they recognized from the AS/400, with accurate data and no manual intervention.
ISR Field Portal for Remote Order Entry
A dedicated, independently deployed ISR Sales Portal gives Stine's field sales team remote access to order entry, account management, and available hybrid lookup — capabilities that were impossible on the AS/400 outside the office.
Annual Cycle Transitions Without Developer Involvement
Stine's operations team manages company year transitions — new products, updated pricing, feature availability, ordering windows — through the admin portal without requiring developer deployments, dramatically reducing release risk at the start of each season.
Client Feedback
"Moving off our AS/400 system was something we knew we needed but were nervous about. TTPL understood our business rules deeply enough that we never had to worry about pricing being wrong or reports not matching what we expected. The new system handles everything our old one did — and now our ISRs can actually use it in the field."
- Thomas R. Callahan, VP of Operations, Stine Seed Company
Technologies Used



