Architecture Diagrams

This diagram shows the most common enterprise architecture used by Viare clients.

Overview

Use these architecture diagrams to help plan how Viare can fit into your existing architectures, or use them as a guideline for assisting in future planning.

Standard Retail Architecture

Smaller, or less complex retailers typically employ a single core system, with relatively few additional systems. In the most basic architecture, an ERP provides the vast majority of line-of-business functions, including inventory control, purchasing, POS, and master data management for products, customers and sales.

In this architecture, specialist systems handle functions outside of the scope of the ERP.

Typically, these include eCommerce, CRM & OMS. Viare works exceptionally well in this environment, and has been used to insulate ERP from eCommerce operations, which can help smooth and reduce loads during heavy sales periods.

ℹ️

We have excluded CRM from the below diagram for clarity.

C4Context
    Enterprise_Boundary(b0, "Common Retail System") {
        Person(customer, "Retail Customer", "A customer of the retailer.")
        System_Boundary(rms, "Retail Management Systems"){
                System(ecom, "eCommerce System", "Provides online shopping portal.")
                System(erp, "Enterprise Resource Planning", "Provides core retail line of business functions.")
        }
        System_Boundary(boms, "Viare"){        
                System(oms, "Order Management System", "Provides dedicated order management functionality.")

        }
    }


    Rel(customer, ecom, "Places orders.", "Internet")
    
    Rel(ecom,oms,"Sends orders to be fulfilled", "API")
    Rel(oms,erp,"Reports sales data", "API")
    Rel(erp, oms, "Provides master product <br/>and inventory updates", "API")
    BiRel(ecom, erp, "Master Data", "API")
    
    UpdateRelStyle(customer,ecom, $offsetY="-40")
        UpdateRelStyle(ecom, erp, $offsetX="-30", $offsetY="-30")
    
    UpdateRelStyle(oms, erp, $offsetX="-70", $offsetY="-10")
    UpdateRelStyle(ecom,oms, $offsetX="-160", $offsetY="-30")
    UpdateRelStyle(erp,oms, $offsetX="70", $offsetY="-50")

    UpdateLayoutConfig($c4ShapeInRow="2", $c4BoundaryInRow="1")

Advanced Retail Architecture

Larger or more sophisticated retailers usually employ similar core systems to the above, bringing in a more diverse set of specialist systems to perform key functions.

In the diagram below, only the common core fulfilment connections are shown. In complex environments like this, supplemental point-to-point flows and integration hubs are used between many of the systems illustrated. We have omitted these for clarity.

This diagram shows the common systems and connections to OMS.

C4Context
    Enterprise_Boundary(b0, "Common Retail System") {
        Person(customer, "Retail Customer", "A customer of the retailer.")
		
        System_Boundary(channels, "Sales Channels"){
			System(ecom, "eCommerce System", "Provides online shopping portal.")
			System(app, "Mobile App", "Customer Loyalty and Shopping  functions.")
			System(moto, "MOTO", "Mail Order/Telephone Order functions.")
			System(pos, "POS", "Provides point of sale functions instore.")
        }

        System_Boundary(rms, "Retail Management Systems"){
			System(crm, "Customer Relationship / Loyalty", "Provides core customer<br/>communications & segmentation.")

			System(oms, "Order Management System", "Provides dedicated order management workflows and functions.")
			System(pim, "PIM / PLM", "Support product information & lifecycle management.")

			System(wms, "WMS", "Manages warehousing and stock movement operations.")
			System(bi, "Reporting & BI", "Provides reporting and analytics for business performance analysis.")
			System(erp, "Enterprise Resource Planning", "Provides core retail Line-of-Business functions.")


		}

        System_Boundary(fulfilment, "Fulfilment Systems"){        
			System(dsv, "3PL & Dropship Vendors", "Provides direct to customer fulfilment of orders.")
			System(fms, "Freight Management Systems", "Coordinates pricing and booking of freight.")
        }
    }

    Rel(customer, ecom, "Places orders.", "Internet")
	Rel(customer, app, "Places orders.", "Mobile")
    Rel(customer, moto, "Places orders.", "Phone")
    Rel(customer, pos, "Places orders.", "In Store")

    
      

	Rel(oms, fms, "Freight consignment, booking and manifesting.", "API")
	Rel(oms, dsv, "Orders.", "API")
    Rel(pim, oms,"Product Master", "API")


	Rel(oms, wms, "Stock Transfers", "API")
	Rel(wms, oms, "Inventory Position", "API")


    Rel(ecom,oms,"Sends orders to be fulfilled", "API")
    Rel(app,oms,"Sends orders to be fulfilled", "API")
    Rel(moto,oms,"Sends orders to be fulfilled", "API")
	Rel(pos,oms,"Endless aisle.", "API")
	
    
	
	Rel(oms,bi,"Reporting and Performance", "API")


	Rel(erp, oms, "Product master &<br/> inventory updates", "API")
  	Rel(oms, erp, "Completed Sales", "API")
  
    Rel(oms, crm, "Fulfilment Events", "API")
    
    UpdateRelStyle(customer, pos, $offsetX="275", $offsetY="50")
    UpdateRelStyle(customer, ecom, $offsetY="50")
    UpdateRelStyle(customer, app, $offsetY="50")
    UpdateRelStyle(customer, moto, $offsetY="50")
    UpdateRelStyle(oms, crm, $offsetX="-45")
    UpdateRelStyle(pim, oms, $offsetX="-40")
    UpdateRelStyle(erp, oms, $offsetX="100")
    UpdateRelStyle(oms, erp, $offsetX="-100", $offsetY="-10")
    UpdateRelStyle(oms, bi, $offsetX="-80", $offsetY="-10")
    UpdateRelStyle(wms, oms, $offsetX="-120", $offsetY="-10")
    UpdateRelStyle(oms, wms, $offsetX="-15", $offsetY="-10")
    

    UpdateLayoutConfig($c4ShapeInRow="4", $c4BoundaryInRow="1")