We will review your sales process and propose an architecture
Catalog, orders, payments and accounting-system data exchange mapped before development begins.
An e-commerce system manages a product from its catalog page through payment and delivery. Below are the system's modules, the processes it covers, and its connections to CRM, ERP, warehouse and POS systems.
E-commerce software — a system that stores product, price and inventory data, accepts online orders, processes payments, and sends each order for fulfillment by the warehouse, delivery operation and accounting system.
Unlike a conventional website, it works with business records rather than pages: product, price, inventory, order, payment, shipment and return, each with its own status and history. The same order can originate in an app, a vending machine, through a manager or on a marketplace.
It is the operational layer behind a storefront, not the storefront itself. You can replace the storefront or add another one without rebuilding the underlying records.
Six reasons businesses implement an e-commerce platform. Without one, each task is handled manually through spreadsheets, messages and phone calls.
Specifications, images, prices and inventory are stored in one place and distributed to every sales channel. The website, app and POS always agree.
Orders are created, checked and paid automatically around the clock. People step in only when judgment is required, such as an unusual delivery, a disputed return or a wholesale order.
Reserving stock at checkout prevents the same item from being sold twice. Cancellations caused by missing warehouse stock become exceptional rather than routine.
Prices and discounts are governed by rules instead of manual edits to product pages. Repricing a catalog with thousands of items takes minutes and can be rolled back.
Orders, payments and shipments reach accounting and warehouse systems without re-entry. Reconciliation is no longer a separate task.
You can see what customers buy, what they search for but cannot find, where they leave checkout, and which products they return. Assortment decisions are based on data.
Automation does not mean replacing a salesperson with a robot. It means turning repetitive operations into rules that the system applies consistently and records in its history.
A rule remains active until its conditions change. Control is preserved: every automated action has an author, timestamp and previous value in the audit log.
Operations that become automatic:
| Time | What the system did automatically |
|---|---|
| 09:41 | 18% markup: recalculated 1 240 items |
| 10:00 | “15% off tea” promotion started on schedule |
| 10:03 | Order No. 14 190 declined: 2 items returned to stock |
| 10:06 | Low stock for SKU 77-1043: purchasing team notified |
Catalog — a structured repository of product data: what is sold, how products differ, and which attributes customers use to find them.
A working catalog includes:
The catalog's basic unit is a product item with a unique stock keeping unit (SKU): immutable identifiers, an editable description, and linked images, documents, prices and inventory records.
Bulk operations use import and export through a file, an API or an accounting-system feed. Every import is validated first: what will be created, changed or rejected, and why.
Rejected: duplicate SKU — 9, required “Brand” attribute missing — 5, unknown category — 3. No rows are written to the catalog until the import is confirmed.
Price — not a field on a product page, but the result of applying rules at the time of a request. A product can have several prices at once, and the system selects the applicable one.
This means prices do not need to be edited across thousands of product pages. Changing a rule or base price list is enough.
Pricing layers:
Every price change is recorded: who made it, when, under which rule and what the previous value was. This history supports margin reports and investigations of disputed orders.
Rules are resolved by priority instead of being added blindly. A typical item-price calculation follows this sequence:
Compatibility is explicit: which discounts can be combined, which are mutually exclusive, and the minimum permitted price. The minimum-price rule prevents several individually valid discounts from making an item unprofitable when combined.
Promotion — a rule the system automatically applies to eligible orders. Promo code — the same type of rule, activated by the customer with a code word. Both are defined in the same way: conditions, mechanics, schedule and restrictions.
What the order must contain: products, a category or brand, a minimum value, a delivery method, a customer segment, a sales channel, a time of day or a day of the week.
Percentage, fixed amount, new price, discount on the cheapest item in a set, free delivery, gift, or points instead of a discount.
Start and end dates, recurring windows such as every Friday, and automatic activation and deactivation without staff involvement.
Overall usage limit, per-customer limit, one-time personal codes, exclusion from other promotions, and a minimum item price.
One shared code for a campaign or a batch of unique recipient codes. A batch can be exported as a file and tracked code by code.
For every promotion you can see the number of orders, total discount, revenue and margin after discounts, as well as how many codes were redeemed and how many remain.
Cart — a draft order: a set of items that creates no commitment for either the customer or the store. Stock is not reserved and prices are not fixed, so the cart is recalculated whenever it is opened.
Recalculation checks four things: each product is still on sale, sufficient stock is available, the price has not changed, and discounts remain valid. The customer sees any changes before paying, not after the charge.
A cart must be able to:
Checkout total: 3 items, KGS 11 640. Both discrepancies are shown to the customer before payment, not after the charge.
Lists that do not initiate a purchase sit alongside the cart: favorites, waitlist, specification comparison and repeat order. They are intentionally separate so the order total remains unambiguous.
Most carts never become orders. The system stores them with timestamps and can bring customers back through an email or messenger reminder, a link that restores the cart, or a personalized offer.
A reminder is sent once per event and does not become a mailing campaign; an unsubscribe costs more than the recovered order is worth.
Order — a document that fixes the purchased items, checkout-time prices, customer, delivery terms and payment terms. The order then moves through a finite set of statuses, with every transition recorded.
Prices and discounts are fixed at checkout. A later price change or the end of a promotion does not affect an existing order; otherwise the amount due would no longer match the receipt.
Checkout step by step:
Typical statuses: new → awaiting payment → paid → picking → handed to delivery → delivered → completed. Cancellation and return branches run alongside the main flow. The set is configured for the company's process, but remains finite and explicit.
Editing an order is a separate, permission-controlled operation: adding an item, substituting a product, changing a quantity, collecting an additional payment or issuing a partial refund. Every edit preserves the previous version of the order contents.
Contact center — not a separate application, but a workspace built over the same order queue. An operator sees the same records as the customer sees in their account, plus restricted operations: editing order contents, granting a discount within an authorized limit, releasing a reservation and issuing a refund.
An inquiry is a record with a status and history, just like an order. It has a channel, subject, related order, assignee and response deadline. A conversation is therefore not lost between shifts, and its outcome remains visible on the customer record.
How an inquiry is handled:
Outbound work follows the same model: confirming an order before picking, calling about an unusual delivery, recovering an abandoned cart, or following up on a disputed return. Every interaction is written to the same history as incoming inquiries.

The store neither retains card details nor processes a payment itself. It directs the customer to a payment provider, receives the result and links the operation to the order. Everything else concerns managing the payment lifecycle.
| Order | Operation | Amount | Status |
|---|---|---|---|
| 14 208 | Authorization | 12 480 | Authorized |
| 14 201 | Capture | 6 350 | Completed |
| 14 177 | Refund | 2 100 | Completed |
| 14 206 | Authorization reversal | 3 940 | Released |
| 14 209 | Bank decline 05 | 890 | Retry |
Authorization released without a refund transaction because the item was unavailable in the warehouse. Retrying a request with the same idempotency key does not create a second row.
Bank card, QR or instant payment system, digital wallets, payment on delivery, bank transfer for legal entities, installments and credit, or loyalty points.
Authorization comes first: the amount is held on the card but not charged. It is captured after the order is picked. If an item is unavailable, the hold is released without a refund transaction.
The operation result arrives as a separate server-to-server request, not when the customer returns to the website. Closing the browser does not interrupt payment; the status is updated from the notification.
Retrying the same payment request does not create a second payment. Every operation has a key that both the provider and the system use to identify duplicates.
After online payment, the connected POS system creates a fiscal receipt and sends it to the customer. A return receipt is generated for refunded items.
Operations in the system are matched daily against the provider register and bank statement. Discrepancies enter a separate queue for manual investigation.
Available inventory — the quantity available for sale at this moment. It is not the physical warehouse quantity: some units are reserved for orders, in transit, or blocked as damaged.
Available for sale = physical stock − reservations − blocked stock + confirmed inbound stock, where pre-ordering is permitted.
With several warehouses and locations, inventory is calculated separately for each one. The storefront displays the total across warehouses able to deliver to the selected region.
Data exchange methods:
Every reservation has an expiry time. An order that is not paid on time releases the product back for sale; otherwise abandoned carts consume all available inventory.
| Warehouse | Physical | Reserved | Damaged | Available |
|---|---|---|---|---|
| Central | 1 420 | 310 | 24 | 1 086 |
| Vostok store | 96 | 12 | — | 84 |
| Pickup point No. 3 | 40 | 8 | 2 | 30 |
| Inbound stock | 600 | — | — | 600 |
| Available for sale | 2 156 | 330 | 26 | 1 800 |
Physical is the quantity physically in stock; damaged is the blocked quantity. Inbound stock counts as available only where pre-ordering is permitted. The storefront shows the total across warehouses that can deliver to the selected region.
Delivery is defined by three objects: delivery method, zone and rate. A return is a reverse process with its own document, not a cancellation backdated after the fact.
Courier to an address, pickup point, parcel locker, store pickup, freight carrier for oversized goods, or digital delivery for electronic products.
The price depends on region, weight, volume and order value. Rules define the free-delivery threshold and surcharges for upstairs delivery or oversized items.
Dates and time windows are calculated from warehouse hours, picking time and the carrier schedule. Full slots close automatically.
The order is sent to the carrier through an API. The system receives a tracking number and movement statuses and displays them in the customer account.
The customer selects items and a reason. The system checks the return period and eligibility for the product type, then creates a document with instructions.
After receipt, the product is returned to available inventory or written off as damaged. Funds go back to the original payment method and a return receipt is created.
Partial returns are normal: one item out of five may be returned. Returns are therefore calculated item by item, and an order-level discount is allocated proportionally; otherwise the refund would not match the receipt.
Warehouse worker — an employee who physically moves products: receives a delivery, places it in a bin, picks order items and hands the packed box to a courier. The system does not learn about these actions from an employee's report; every operation is confirmed by scanning a barcode.
The distinction matters. Marking “done” in a list confirms intent; a scan confirms a fact: a specific SKU, bin, employee and second-accurate timestamp. A mistyped SKU surfaces during inventory a month later; the app rejects an incorrect barcode immediately.
Tasks during a warehouse shift:
Every scan is an inventory posting: the bin balance changes when the operation happens, not at the end of the day when paperwork is entered. The storefront, POS and contact center read the same inventory, so “available online, missing on the shelf” stops being a normal occurrence.
Picking accuracy — 99.4%: 7 scans were blocked during the shift, and every error was corrected immediately. The figures come from the same inventory postings, not a separate time sheet.
Courier — the final fulfillment link and the only employee a customer meets in person. The app has two jobs: guide the courier through the route and record handover conclusively, without follow-up calls to establish what happened.
The key operation is scanning a QR code at handover. The code is printed on the order label or shown by the customer on a screen. The scan answers questions that would otherwise become a dispute: was this the correct order, was it handed to the correct recipient, and at what minute?
Dispatcher works at the other end of the same application: building routes by zone, weight, volume and delivery window, assigning couriers, monitoring the shift map, and resolving failures such as delay, unreachable customer or refusal at the door.
Courier shift step by step:

The status set by the courier is the same status the customer sees in their account and the operator sees on the order. There is no separate “courier log”: one event is shared by all three parties.
Warehouse workers and couriers use different apps in different places, but manage the same order. They are connected by six shared rules, not end-of-day reports.
The pick task, packing list and route sheet are not independent documents; they are different views of one order. An item added by an operator reaches the warehouse worker without re-entry.
Products pass from warehouse to courier and from courier to customer by scanning. At any moment, the system shows who physically holds the order and since what minute.
The person who performed an action records it at the place it happened. Dispatch does not copy statuses manually, so the fact and its record are not separated by several hours.
Both apps write operations to a local queue and forward them when connectivity returns. Every operation has a key, so retrying does not create a second pick or a second handover.
A receiving shortage, wrong item, breakage or partial refusal at the address becomes a separate record with a reason and responsible person, not a silent inventory adjustment.
Items picked per hour, picking accuracy, share of deliveries within the promised window, time at the address and partial-refusal rate. Workload and bonuses are calculated from these facts, not impressions.
This determines the implementation requirement: warehouse and delivery must join the system together. A warehouse app without a courier app provides an accurate balance that disappears from view as soon as the order is dispatched.
Customer account — access to the customer's own data without contacting an operator: orders, documents, addresses, payment methods and returns. Every question answered in the account is a call that never reaches support.
The account stores no separate copy of the data. It displays the same records an operator sees in the administration panel, limited to that customer and to operations the customer is permitted to perform.
It includes:
A B2B account is more complex: an organization has several employees with different permissions. A buyer prepares the order, a manager approves it and an accountant retrieves the closing documents. There is one order, but the actions are separated.
Sign-in by one-time code or password, a second factor for payments and contact changes, and a session log that can disconnect an unfamiliar device. An email or phone change is confirmed through both the old and new contact.
The operator sees the same records on the order: events are shared, with no separate log for the customer account. The receipt and waybill are available under Documents.
Integration — an agreed data exchange with an external system: what is transferred, in which format, how often, who owns the data and what happens when something fails.
Systems commonly connected:

The key integration decision is data ownership. An owner system is assigned to every entity: product master data and prices come from ERP, customers from CRM, inventory from the warehouse, and orders originate in e-commerce. Editing one field in both systems creates permanent discrepancies, so bidirectional ownership is avoided.
| System | Data transferred | Messages | Result |
|---|---|---|---|
| ERP | product master, prices | 4 120 | No errors |
| Warehouse | inventory, reservations | 18 640 | 2 retries |
| CRM | customers, segments | 1 305 | No errors |
| Marketplace | orders, inventory | 2 470 | 1 under review |
An integration does not usually fail at launch; it fails six months later when an external system is updated, a channel goes down for an hour, or an unexpected value enters a reference list. Six rules determine whether the exchange survives such events.
Checkout does not wait for an external system. A message enters a queue and is processed separately, so an unavailable warehouse does not stop sales.
A failed delivery is retried at increasing intervals. A message that still fails after every attempt enters an investigation queue instead of disappearing.
A redelivered message does not create a second order or deduct inventory twice. The recipient identifies a duplicate by its operation key.
A format change is released as a new version while the old one continues working. External consumers migrate on their own schedule.
Every message is stored with its body, time, result and attempt count. Incident investigation relies on the log, not memory.
Key figures are reconciled regularly: orders, payment amounts and inventory. A discrepancy becomes a task instead of being discovered during inventory.
Catalog and orders
Payments
Inventory and warehouse
Analytics
Analytics is built from first-party sales and behavior data, not only external traffic counters. A traffic counter knows about page views; the system knows about money, products and returns.
Reports can be sliced by period, sales channel, category, brand, warehouse, region, customer segment or promotion. Every metric is available in each dimension and can be exported to a file or data warehouse.
The steepest drop is between cart and checkout. Registration, delivery calculation and payment methods are the first areas to investigate.
Security rests on three principles: payment data never enters the store's system, personal data is stored sparingly and under control, and every action involving money or orders leaves an audit trail.
Card numbers are entered on the certified provider's side and never enter the store's system. A token, not a card number, is stored for repeat charges.
All traffic uses HTTPS. Sensitive database fields are encrypted, and encrypted backups are stored separately from the production environment.
Role-based access: a content manager cannot see payments, and an operator cannot change prices. Administrative access requires two-factor authentication.
Who changed a price, canceled an order or exported the customer database. Records are immutable and stored separately from operational data.
Only the minimum necessary data is collected, with a retention period, deletion on request, and dated, sourced consent for processing and campaigns.
Rate limiting, protection against form enumeration, controls on promo-code reuse, and order fraud checks before picking.
Recovery is a separate discipline. Backups are useless until restoration has been tested: a test deployment runs on a schedule, not for the first time during an incident.
Scaling is the ability to grow without a rewrite. Three quantities grow: catalog size, concurrent visitors and orders per hour.
The catalog is limited by search and filtering, peak traffic by page delivery, and order volume by the database and external integrations. Each requires a different solution, introduced when necessary.
Techniques used in practice:
| Metric | Measured | Threshold |
|---|---|---|
| Catalog response, p95 | 180 ms | 400 ms |
| Peak orders per hour | 3 000 | 2 400 |
| Responses served from cache | 86% | 70% |
| Catalog reindexing | 9 min | 20 min |
| Backup restoration | 22 min | 60 min |
The system is assembled from modules, each responsible for its own data and operations, with explicit connections between them. It can launch in stages: catalog and orders first, followed by loyalty, analytics and external channels.
Product items, SKUs, descriptions, publication statuses, product-page versions and an archive of discontinued products.
Section tree, products linked to several branches, sorting, and landing pages for collections and seasonal sections.
A typed property directory with display rules, forming the basis for filters, comparison and marketplace exports.
Sizes, colors and volumes on one product page with separate SKUs and inventory. Bundles that deduct several component items.
Images, videos and documents, automatic generation of formats and resolutions, watermarks and product associations.
Price lists, markup rules, volume tiers, personalized and contract prices, currencies, rounding, taxes and history.
Trigger conditions, discount mechanics, schedules, limits, code-batch generation, compatibility and minimum price.
Cross-device cart, price and availability recalculation, checkout steps, guest orders and abandoned-cart recovery.
One order queue for every channel, statuses and transitions, content changes, additional payments, split shipments and cancellations.
Provider connections, authorization and capture, partial and full refunds, notification handling and reconciliation.
Sales and return receipts, online POS exchange, receipt delivery to the customer and monitoring of unsent documents.
Inventory by warehouse, expiring reservations, damaged-stock blocks, delivery and return receiving, and low-stock thresholds.
Delivery methods, zones, rates, windows and slots, shipment creation, status tracking and document printing.
Item-level requests, eligibility and deadline checks, receiving, refunds, return to inventory or damaged-stock write-off.
Accounts, addresses, legal entities and contracts, order history, segments and consent to data processing.
Points, tiers, earning and redemption rules, point expiry, personalized offers and referrals.
Search index, morphology and synonyms, typo handling, attribute filters, sorting and zero-result queries.
Related and similar products, “frequently bought together,” curated collections and order-history-based rules.
Pages, articles, banners, meta tags and page URLs, product structured data, sitemap and product feeds.
Event-driven email, SMS, messenger and push notifications, message templates, scheduling and delivery log.
Sales, margin, inventory, funnel and return reports, custom dimensions, exports and data marts.
Exchange with CRM, ERP, warehouse, POS, payment and logistics services, and marketplaces. API, webhooks and queues.
Roles and permissions by section and operation, two-factor authentication and an employee activity log.
Several storefronts on one core, multiple languages and currencies, several legal entities and warehouses, and regional support.
The entire system is not launched in one release. The sequence below reflects dependencies: every step relies on data created by the previous one.
Current processes, reference data and data-owner systems. The result is an entity model and integration map.
Product-master migration, attribute and category configuration, and price and inventory exchange. Validation against real data.
Checkout, statuses, payment provider, fiscal receipts and handoff to fulfillment. Initial launch with part of the assortment.
Delivery and returns, loyalty, analytics and new sales channels. Each area is a separate, measured release.
Tell us what is already in place: accounting system, warehouse, POS and current storefront. We will review the process and propose a solution architecture.