58 min readIntelligence & insights

Implementation Guide: Forecast raw material needs based on demand signals and current inventory

Step-by-step implementation guide for deploying AI to forecast raw material needs based on demand signals and current inventory for Manufacturing clients.

Hardware Procurement

Dell PowerEdge T360 Tower Server

Dell TechnologiesPET360-BASE-CONFIGQty: 1

$2,674 MSP cost (configured with SSD storage) / $3,475 suggested resale

On-premises server to host the client's ERP database (if on-prem), run the data staging ETL pipeline, cache synchronized inventory/sales data, and serve as the local integration hub between ERP and the Katana SaaS platform. Configured with Intel Xeon E-2488 (8 cores), 64 GB DDR5 ECC RAM, 2×960 GB SAS SSD in RAID 1, and iDRAC9 Enterprise for remote management.

APC Smart-UPS 1500VA LCD RM 2U

APC (Schneider Electric)SMT1500RM2UQty: 1

$750 MSP cost / $975 suggested resale

Uninterruptible power supply to protect the on-premises server from power fluctuations common in manufacturing environments. Provides 15–20 minutes of runtime for graceful shutdown during outages, preventing database corruption in the ERP and staging databases.

Network Switch Upgrade

CiscoCBS350-8T-E-2GQty: 1

$280 MSP cost / $365 suggested resale

Managed switch to segment the server and ERP traffic on a dedicated VLAN, ensuring stable low-latency communication between the ERP database and the integration middleware. Also provides QoS for API traffic to the Katana cloud platform.

Backup NAS - Synology DiskStation DS224+

SynologyDS224+Qty: 1

$300 MSP cost (diskless) + $260 for 2×4TB WD Red Plus / $730 suggested resale (with drives)

Local backup target for nightly ERP database dumps and forecasting configuration exports. Provides 3-2-1 backup compliance when paired with cloud backup. Stores historical data archives for model retraining.

Software Procurement

$359/month (billed annually at $4,308/year) - includes unlimited users

Core cloud MRP platform providing real-time inventory management, bill of materials management, production scheduling, and sales order tracking. Serves as the primary system of record for inventory levels and production data that feeds the forecasting engine.

$199/month ($2,388/year) - add-on to Standard or higher plan

AI-powered demand forecasting module that analyzes historical sales, seasonal patterns, and current inventory to predict future raw material needs up to 24 months ahead. Generates automated reorder suggestions based on BOM explosion against demand forecasts.

Microsoft Windows Server 2025 Standard

MicrosoftPerpetual (OEM with server)Qty: 1

$996.64 one-time (16-core base license)

Operating system for the Dell PowerEdge T360 server hosting the local ERP database, data staging SQL Server instance, and integration middleware services.

Microsoft SQL Server 2022 Standard

MicrosoftSQL Server 2022 StandardQty: 1 server license + CALs as needed

$3,945 one-time (server license) + $230/CAL / Resale at $5,130 + $300/CAL

Database engine for the on-premises data staging layer. Stores synchronized ERP data, historical demand records, and acts as the ETL processing engine for data cleansing before feeding the Katana API.

Starting at $249/month for 2,500 tasks

iPaaS middleware to orchestrate bidirectional data synchronization between the on-premises ERP, SQL Server staging database, and Katana Cloud Manufacturing. Provides pre-built connectors for major ERPs (SAP, NetSuite, QuickBooks, Dynamics), handles error logging, retry logic, and transformation mapping.

Microsoft Power BI Pro

MicrosoftPer-seat SaaSQty: 3-5 users

$10/user/month (typically 3-5 users: $30-$50/month)

Business intelligence dashboards for forecast accuracy monitoring, inventory health scorecards, supplier performance tracking, and executive KPI reporting. Connects to both the SQL staging database and Katana APIs for comprehensive visualization.

Free

Automated backup of the Windows Server, SQL databases, and configuration data to the Synology NAS and optional cloud target. Ensures recovery capability for the data staging infrastructure.

Prerequisites

  • Functional ERP or inventory management system with minimum 12 months (ideally 24+ months) of historical sales order and purchase order data accessible via API, ODBC, or CSV export
  • Accurate and maintained Bill of Materials (BOM) for all finished goods, including raw material components, quantities per unit, and unit of measure standardization
  • Documented supplier lead times for all raw material categories (minimum: average lead time per supplier; ideal: lead time variability data)
  • Stable internet connection with minimum 25 Mbps download / 10 Mbps upload for SaaS platform synchronization
  • Network infrastructure supporting VLAN segmentation (or willingness to upgrade switching as specified in hardware procurement)
  • Dedicated electrical circuit and rack/shelf space for the on-premises server in a climate-controlled area (not on the production floor)
  • Client-side subject matter expert (SME) identified — typically the Production Manager, Purchasing Manager, or Materials Planner — available for 4-6 hours per week during implementation
  • Current inventory count completed within the last 30 days, or willingness to conduct a physical inventory count before go-live
  • SKU naming convention documented and consistent across ERP, warehouse labels, and supplier communications — or budget additional 2 weeks for SKU rationalization
  • Administrative credentials for the existing ERP system and any connected accounting software (QuickBooks, Xero, etc.)
  • Client approval of data processing agreement covering cloud storage of their inventory, sales, and supplier data in the Katana platform (hosted on AWS infrastructure)
  • Defined user roles and access levels: who can view forecasts, who can approve purchase orders, who can modify BOM structures

Installation Steps

Step 1: Site Survey and Data Quality Audit

Conduct a thorough on-site assessment of the client's current manufacturing planning process, ERP system capabilities, data quality, and infrastructure readiness. This is the most critical phase — poor data quality is the #1 cause of forecasting project failure. Document all data sources, assess BOM accuracy, sample historical data for completeness, and identify gaps. Create a data quality scorecard rating each data dimension (completeness, accuracy, consistency, timeliness) on a 1-5 scale.

ERP data quality assessment queries for sales orders, BOM coverage, and inventory accuracy
sql
-- Connect to client ERP database and run data quality assessment queries
-- Sample query for SQL Server / PostgreSQL based ERPs:

-- Check historical sales order completeness (should return <5% nulls)
SELECT COUNT(*) as total_orders, SUM(CASE WHEN product_sku IS NULL OR quantity IS NULL OR order_date IS NULL THEN 1 ELSE 0 END) as incomplete_orders, ROUND(SUM(CASE WHEN product_sku IS NULL OR quantity IS NULL OR order_date IS NULL THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) as pct_incomplete FROM sales_orders WHERE order_date >= DATEADD(YEAR, -2, GETDATE());

-- Check BOM coverage (all finished goods should have BOM records)
SELECT fg.sku, fg.product_name, CASE WHEN b.parent_sku IS NULL THEN 'MISSING BOM' ELSE 'OK' END as bom_status FROM finished_goods fg LEFT JOIN bom_records b ON fg.sku = b.parent_sku GROUP BY fg.sku, fg.product_name, b.parent_sku;

-- Assess inventory record accuracy
SELECT COUNT(*) as total_items, SUM(CASE WHEN last_count_date < DATEADD(MONTH, -6, GETDATE()) THEN 1 ELSE 0 END) as stale_counts, SUM(CASE WHEN quantity_on_hand < 0 THEN 1 ELSE 0 END) as negative_inventory FROM inventory_master;
Note

Allow 2-3 full days on-site for this phase. Bring a manufacturing-knowledgeable consultant if your team lacks MRP domain expertise. If the data quality scorecard averages below 3.0, add 2-4 weeks to the project timeline for data remediation. Common issues in SMB manufacturers: inconsistent units of measure (lbs vs kg), duplicate SKUs from historical system migrations, and BOMs that don't match actual production recipes.

Step 2: Server Hardware Installation and Base Configuration

Rack or position the Dell PowerEdge T360 server, connect UPS, install the managed switch, and configure the base operating system. Set up VLANs to isolate server traffic from production floor devices. Configure iDRAC9 for remote management access by the MSP.

1
After physical installation and POST verification, configure iDRAC9 via web browser (default IP: 192.168.0.120)
2
Set static IP for iDRAC on management VLAN
3
Configure RAID 1 via PERC controller during BIOS setup
4
Install Windows Server 2025 Standard from USB media
5
Post-install: Set static IP, hostname, join domain if applicable
PowerShell - Initial server configuration
powershell
Rename-Computer -NewName 'MFG-FORECAST-SVR' -Restart

# After restart:
New-NetIPAddress -InterfaceAlias 'Ethernet' -IPAddress 192.168.10.10 -PrefixLength 24 -DefaultGateway 192.168.10.1
Set-DnsClientServerAddress -InterfaceAlias 'Ethernet' -ServerAddresses 192.168.10.1,8.8.8.8

# Enable Windows Remote Management for MSP RMM
Enable-PSRemoting -Force
Set-Item WSMan:\localhost\Client\TrustedHosts -Value '*' -Force

# Install Windows Updates
Install-Module PSWindowsUpdate -Force
Get-WindowsUpdate -Install -AcceptAll -AutoReboot

# Configure Windows Firewall for SQL Server
New-NetFirewallRule -DisplayName 'SQL Server' -Direction Inbound -Protocol TCP -LocalPort 1433 -Action Allow
New-NetFirewallRule -DisplayName 'SQL Server Browser' -Direction Inbound -Protocol UDP -LocalPort 1434 -Action Allow
1
Configure Cisco CBS350 switch via CLI using a console cable
Cisco CBS350 - VLAN configuration via CLI
cisco-ios
enable
configure terminal
vlan 10
name SERVER-VLAN
exit
vlan 20
name CLIENT-VLAN
exit
interface GigabitEthernet1
switchport mode access
switchport access vlan 10
exit
Note

Ensure the server is NOT placed on the manufacturing production floor due to dust, vibration, and temperature concerns. A closet or small server room with adequate cooling is required. If the client lacks a suitable location, consider a dust-rated enclosure (Tripp Lite SRQ12UBWM wall-mount, ~$400). Test UPS connectivity and configure auto-shutdown via APC PowerChute software.

Step 3: SQL Server Installation and Data Staging Database Setup

Install Microsoft SQL Server 2022 Standard on the server and create the staging database schema. This database serves as the central hub for cleansed, normalized data from the ERP before it's pushed to Katana via API. It also stores historical forecast results for accuracy tracking.

1
Mount SQL Server 2022 ISO and run setup
2
Choose: New SQL Server stand-alone installation
3
Feature Selection: Database Engine Services, Full-Text Search
4
Instance: Default (MSSQLSERVER)
5
Authentication: Mixed Mode (set strong SA password)
6
Add current Windows user as SQL Admin
7
Post-install: Open SQL Server Configuration Manager
8
Navigate to SQL Server Network Configuration > Protocols > Enable TCP/IP
9
Restart SQL Server service
10
Connect via SSMS and create staging database
Create ManufacturingForecast staging database with core tables and indexes
sql
CREATE DATABASE ManufacturingForecast;
GO
USE ManufacturingForecast;
GO

-- Core staging tables
CREATE TABLE stg_SalesOrders (
    SalesOrderID NVARCHAR(50) PRIMARY KEY,
    OrderDate DATE NOT NULL,
    CustomerID NVARCHAR(50),
    ProductSKU NVARCHAR(100) NOT NULL,
    ProductName NVARCHAR(255),
    Quantity DECIMAL(18,4) NOT NULL,
    UnitOfMeasure NVARCHAR(20),
    UnitPrice DECIMAL(18,4),
    ShipDate DATE,
    SourceSystem NVARCHAR(50),
    SyncTimestamp DATETIME2 DEFAULT GETDATE()
);

CREATE TABLE stg_BillOfMaterials (
    BOMID INT IDENTITY(1,1) PRIMARY KEY,
    FinishedGoodSKU NVARCHAR(100) NOT NULL,
    FinishedGoodName NVARCHAR(255),
    RawMaterialSKU NVARCHAR(100) NOT NULL,
    RawMaterialName NVARCHAR(255),
    QuantityPer DECIMAL(18,6) NOT NULL,
    UnitOfMeasure NVARCHAR(20),
    ScrapFactor DECIMAL(5,4) DEFAULT 0,
    IsActive BIT DEFAULT 1,
    LastUpdated DATETIME2 DEFAULT GETDATE()
);

CREATE TABLE stg_InventoryLevels (
    InventoryID INT IDENTITY(1,1) PRIMARY KEY,
    SKU NVARCHAR(100) NOT NULL,
    ItemName NVARCHAR(255),
    ItemType NVARCHAR(20) CHECK (ItemType IN ('RAW','WIP','FG')),
    QuantityOnHand DECIMAL(18,4),
    QuantityAllocated DECIMAL(18,4) DEFAULT 0,
    QuantityAvailable AS (QuantityOnHand - QuantityAllocated),
    ReorderPoint DECIMAL(18,4),
    SafetyStock DECIMAL(18,4),
    WarehouseLocation NVARCHAR(100),
    LastCountDate DATE,
    SyncTimestamp DATETIME2 DEFAULT GETDATE()
);

CREATE TABLE stg_SupplierLeadTimes (
    SupplierLeadTimeID INT IDENTITY(1,1) PRIMARY KEY,
    SupplierID NVARCHAR(50) NOT NULL,
    SupplierName NVARCHAR(255),
    RawMaterialSKU NVARCHAR(100) NOT NULL,
    AvgLeadTimeDays INT NOT NULL,
    MinLeadTimeDays INT,
    MaxLeadTimeDays INT,
    MinOrderQuantity DECIMAL(18,4),
    UnitCost DECIMAL(18,4),
    Currency NVARCHAR(3) DEFAULT 'USD',
    LastUpdated DATETIME2 DEFAULT GETDATE()
);

CREATE TABLE fact_ForecastResults (
    ForecastID INT IDENTITY(1,1) PRIMARY KEY,
    ForecastDate DATE NOT NULL,
    SKU NVARCHAR(100) NOT NULL,
    ForecastPeriodStart DATE NOT NULL,
    ForecastPeriodEnd DATE NOT NULL,
    ForecastedDemand DECIMAL(18,4),
    ActualDemand DECIMAL(18,4),
    ForecastSource NVARCHAR(50),
    MAPE DECIMAL(8,4),
    CreatedTimestamp DATETIME2 DEFAULT GETDATE()
);

CREATE TABLE dim_SKUMapping (
    MappingID INT IDENTITY(1,1) PRIMARY KEY,
    ERPSourceSKU NVARCHAR(100) NOT NULL,
    KatanaSKU NVARCHAR(100) NOT NULL,
    ItemName NVARCHAR(255),
    Category NVARCHAR(100),
    IsActive BIT DEFAULT 1
);

-- Create indexes for common query patterns
CREATE INDEX IX_SalesOrders_Date_SKU ON stg_SalesOrders(OrderDate, ProductSKU);
CREATE INDEX IX_BOM_FG_SKU ON stg_BillOfMaterials(FinishedGoodSKU);
CREATE INDEX IX_Inventory_SKU ON stg_InventoryLevels(SKU);
CREATE INDEX IX_Forecast_SKU_Date ON fact_ForecastResults(SKU, ForecastPeriodStart);
Note

If the client's ERP is cloud-based (e.g., NetSuite, cloud Dynamics 365), the SQL staging database still adds value as a local data warehouse for historical analysis, forecast accuracy tracking, and Power BI reporting. For clients with very small data volumes (<1,000 SKUs, <10,000 orders/year), SQL Server Express (free) may suffice instead of Standard edition.

Step 4: ERP Data Extraction and Initial Data Cleansing

Extract historical data from the client's ERP system and load it into the staging database. This step involves mapping ERP fields to the staging schema, handling data type conversions, deduplicating records, standardizing units of measure, and resolving BOM inconsistencies. This is typically the most time-intensive phase of the project. ``` # Example: Extracting data from QuickBooks Desktop via ODBC # First, install QuickBooks ODBC driver (QODBC by CData) # Python script for ERP data extractio...

Step 5: Katana Cloud Manufacturing Platform Setup

Create and configure the Katana Cloud Manufacturing account, set up the organizational structure, import the cleansed master data (products, BOMs, materials, suppliers), and configure warehouse locations and inventory tracking. This establishes the foundational MRP system before activating the forecasting add-on.

1
Create Katana account at https://katanamrp.com/signup — Select Standard plan ($359/mo annual billing) — Add Planning & Forecasting add-on ($199/mo)
2
Organization Settings (Settings > General): Company name, address, timezone; Default currency: USD; Default UOM: Set to client's primary unit
3
Import Products via CSV — Use Katana CSV import: Items > Import — Map columns to Katana fields
4
Import BOMs (Recipes in Katana terminology) — Navigate to Items > Select finished good > Recipe tab — Add ingredients (raw materials) with quantities per unit — Include scrap/waste factor if applicable
5
Configure Suppliers — Navigate to Contacts > Suppliers — Add each supplier with: Contact details, Default lead time (days), Minimum order quantities, Payment terms
6
Set up Warehouse Locations — Settings > Locations — Add physical locations matching client's warehouse zones
7
Import Opening Inventory — Stock > Inventory adjustments > Import — Upload current stock levels per location
8
API Key Generation for Integration — Settings > API > Generate API key — Store securely (needed for Workato integration)
Product CSV import format for Katana (Items > Import)
csv
product_name,sku,category,type,unit_of_measure,cost
'Steel Rod 10mm',RM-STEEL-10MM,Raw Materials,material,KG,2.45
'Aluminum Sheet 2mm',RM-ALUM-2MM,Raw Materials,material,EA,15.80
'Widget Assembly A',FG-WIDGET-A,Finished Goods,product,EA,45.00
Test Katana API connectivity
bash
# base URL: https://api.katanamrp.com/v1/

curl -X GET 'https://api.katanamrp.com/v1/products' -H 'Authorization: Bearer <your_api_key>' -H 'Content-Type: application/json'
Note

Katana offers a 14-day free trial — use this period for the MSP to validate the setup before the client commits financially. The CSV import feature handles bulk data loading but has format requirements — test with 10-20 records first before full import. For clients with 500+ SKUs, request Katana's onboarding assistance (included with Standard plan). Katana's API has rate limits of 50 requests/second — design integrations accordingly.

Step 6: Workato Integration Platform Configuration

Set up the Workato iPaaS to orchestrate bidirectional data synchronization between the on-premises ERP/staging database and Katana Cloud Manufacturing. This creates the automated data pipeline that keeps inventory levels, sales orders, and BOM changes synchronized in near-real-time.

1
Create Workato account at https://www.workato.com — Select Starter plan ($249/mo)
2
Install Workato On-Prem Agent on the server (Required for connecting to on-premises SQL Server) — Download from: https://docs.workato.com/on-prem/agents/setup.html

On Windows Server, run PowerShell as Administrator:

Download and extract the Workato On-Prem Agent package
powershell
mkdir C:\Workato\Agent
cd C:\Workato\Agent
Invoke-WebRequest -Uri 'https://files.workato.com/opa/workato-agent-windows.zip' -OutFile 'workato-agent.zip'
Expand-Archive -Path 'workato-agent.zip' -DestinationPath .

Configure agent connection profile by editing config\config.yml:

Workato On-Prem Agent connection profile — config\config.yml
yaml
database:
  staging_db:
    adapter: sqlserver
    host: localhost
    port: 1433
    database: ManufacturingForecast
    username: etl_user
    password: <encrypted_password>

Start the agent as a Windows Service:

Install and start Workato Agent as a Windows Service
bat
.\bin\install-service.bat
net start WorkatoAgent
1
Configure Workato Recipes (workflows):

Recipe 1: Sync Sales Orders (ERP → Staging → Katana)

  • Trigger: Scheduled every 15 minutes
  • Step a: Query staging DB for new/updated sales orders since last sync
  • Step b: Transform data to Katana sales order format
  • Step c: POST to Katana API: /v1/sales_orders
  • Step d: Log sync results to fact_SyncLog table

Recipe 2: Sync Inventory Levels (Katana → Staging DB)

  • Trigger: Scheduled every 30 minutes
  • Step a: GET from Katana API: /v1/stock_movements
  • Step b: Transform and map to staging schema
  • Step c: UPSERT to stg_InventoryLevels table
  • Step d: Trigger Power BI dataset refresh if threshold breached

Recipe 3: BOM Change Sync (ERP → Katana)

  • Trigger: On change detected in ERP BOM table
  • Step a: Detect BOM modifications in staging DB
  • Step b: Transform to Katana recipe format
  • Step c: PUT to Katana API: /v1/recipes/{id}
  • Step d: Alert MSP if BOM change impacts active forecasts

Error Handling Configuration (All Recipes)

  • Retry 3 times with exponential backoff (30s, 60s, 120s)
  • On permanent failure: send email to msp-alerts@<msp-domain>.com
  • Log all errors to staging DB error table
Note

Workato's on-prem agent requires Java Runtime Environment (JRE) 11 or higher — install OpenJDK 11 on the server before deploying the agent. For clients with very simple ERP setups (e.g., QuickBooks + spreadsheets), Katana's native QuickBooks integration may eliminate the need for Workato entirely.

Step 7: Activate and Configure Katana Planning & Forecasting

Enable the Planning & Forecasting add-on in Katana, configure forecasting parameters, set planning horizons, define reorder rules, and run the initial demand forecast. The AI model will analyze the imported historical sales data to generate demand predictions and raw material requirement calculations via BOM explosion. ``` # In Katana web interface: # 1. Navigate to Settings > Subscriptions > Add Planning & Forecasting # Confirm add-on activation ($199/mo) # 2. Configure Forecast Settings ...

Step 8: Power BI Dashboard Configuration

Set up Power BI dashboards that provide the client's management team with real-time visibility into forecast accuracy, inventory health, raw material requirements, and supplier performance. Connect Power BI to both the SQL staging database (for historical trend analysis) and the Katana API (for current state). ``` # 1. Install Power BI Desktop on planner workstations # Download from: https://powerbi.microsoft.com/desktop # 2. Create data connections in Power BI Desktop: # SQL Server connectio...

Step 9: Parallel Running and User Acceptance Testing

Run the AI forecasting system in parallel with the client's existing planning process for 2-4 weeks. Compare AI-generated purchase recommendations against what the planner would have ordered manually. This builds confidence, identifies gaps, and allows fine-tuning before going live. ``` # Create parallel comparison tracking spreadsheet or use this SQL view: CREATE VIEW vw_ForecastComparison AS SELECT f.SKU, f.ForecastPeriodStart, f.ForecastedDemand AS AI_Forecast, m.ManualFore...

Step 10: Go-Live Cutover and Production Deployment

Transition from parallel running to the AI system as the primary forecasting and replenishment recommendation engine. Configure automated alerts, finalize user permissions, enable automated purchase order suggestion workflows, and establish the ongoing operational cadence.

1
Finalize Katana configuration based on parallel run learnings — adjust safety stock levels for items where AI was under-forecasting, and add manual overrides/adjustments for items with known future demand changes.
2
Configure automated alerts in Katana: navigate to Planning > Alerts and set up: Stockout warning (trigger when projected stock < safety stock within lead time), Reorder notification (trigger when it's time to place a PO based on lead time), and Forecast deviation (alert when actual demand deviates >20% from forecast).
3
Set up email notifications: navigate to Settings > Notifications and route alerts to purchasing@client.com and production@client.com.
4
Create a Workato recipe for automated PO suggestions: Trigger daily at 7:00 AM — (a) GET /v1/purchase_order_suggestions from Katana API, (b) filter for items where suggested order date is within 7 days, (c) format as email digest with quantities, suppliers, and estimated costs, (d) send to purchasing manager, (e) log suggestions to staging DB for tracking.
5
Lock down user permissions in Katana: navigate to Settings > Team > Edit roles — Production Manager: Full access to forecasting + recipes; Purchasing Manager: Full access to POs + supplier management; Floor Supervisors: Read-only access to production schedules; Executives: Read-only access to dashboards.
6
Configure scheduled data sync monitoring by creating a SQL Agent job to check sync health (see script below).
SQL stored procedure to monitor forecast data sync health, scheduled every 30 minutes via SQL Agent
sql
CREATE PROCEDURE sp_CheckSyncHealth AS
BEGIN
    DECLARE @LastSync DATETIME2, @HoursSinceSync INT;
    SELECT @LastSync = MAX(SyncTimestamp) FROM stg_SalesOrders;
    SET @HoursSinceSync = DATEDIFF(HOUR, @LastSync, GETDATE());
    
    IF @HoursSinceSync > 2
    BEGIN
        -- Integration sync has stalled
        EXEC msdb.dbo.sp_send_dbmail
            @profile_name = 'MSP Alerts',
            @recipients = 'alerts@msp-domain.com',
            @subject = 'ALERT: Forecast data sync stalled',
            @body = 'Sales order sync has not run for over 2 hours. Check Workato recipes and on-prem agent status.';
    END
END;

-- Schedule to run every 30 minutes via SQL Agent
EXEC sp_add_job @job_name = 'Monitor Forecast Sync Health';
Note

Plan the go-live for a Monday morning so the MSP team has the full work week to support any issues. Have the MSP's primary technician on-site or available via remote session for the first 3 days post-go-live. Create a simple one-page 'quick start guide' laminated card for the purchasing manager's desk with: how to view today's recommendations, how to create a PO from a suggestion, and who to call if something looks wrong. Keep the manual forecasting spreadsheet accessible (read-only) for 30 days as a fallback reference.

Custom AI Components

Demand Signal Aggregator

Type: integration A Python-based ETL service that runs on the on-premises server, extracting data from multiple demand signal sources (ERP sales orders, CRM pipeline opportunities, customer forecasts, and historical shipments), normalizing and cleansing the data, and loading it into the SQL staging database. This component handles the critical data quality layer between raw ERP data and the forecasting platform. Implementation: ``` # File: C:\ForecastETL\demand_signal_aggregator.py # ...

BOM Explosion Forecast Calculator

Type: workflow

A SQL stored procedure that takes the finished goods demand forecast from Katana and explodes it through the bill of materials to calculate net raw material requirements. It accounts for current inventory, safety stock levels, pending purchase orders, and WIP allocations to generate actionable net requirement quantities per raw material per time period.

Implementation:

Deploy to ManufacturingForecast database
sql
-- BOM explosion of demand forecast into raw material requirements. Schedule:
-- Run daily after Katana forecast sync completes.

-- File: Deploy to ManufacturingForecast database
-- Purpose: BOM explosion of demand forecast into raw material requirements
-- Schedule: Run daily after Katana forecast sync completes

CREATE OR ALTER PROCEDURE sp_CalculateRawMaterialRequirements
    @ForecastHorizonMonths INT = 6,
    @IncludeSafetyStock BIT = 1
AS
BEGIN
    SET NOCOUNT ON;
    
    -- Create temp table for results
    IF OBJECT_ID('tempdb..#MaterialRequirements') IS NOT NULL
        DROP TABLE #MaterialRequirements;
    
    CREATE TABLE #MaterialRequirements (
        RawMaterialSKU NVARCHAR(100),
        RawMaterialName NVARCHAR(255),
        PeriodStart DATE,
        PeriodEnd DATE,
        GrossRequirement DECIMAL(18,4),
        ScrapAllowance DECIMAL(18,4),
        TotalGrossRequirement DECIMAL(18,4),
        CurrentOnHand DECIMAL(18,4),
        PendingPOQuantity DECIMAL(18,4),
        AllocatedToWIP DECIMAL(18,4),
        SafetyStockReq DECIMAL(18,4),
        NetRequirement DECIMAL(18,4),
        SuggestedOrderQty DECIMAL(18,4),
        SuggestedOrderDate DATE,
        SupplierID NVARCHAR(50),
        SupplierName NVARCHAR(255),
        EstimatedCost DECIMAL(18,4),
        UnitOfMeasure NVARCHAR(20)
    );
    
    -- Step 1: Get demand forecast per finished good per period
    -- (Sourced from Katana API sync into fact_ForecastResults)
    DECLARE @StartDate DATE = DATEADD(DAY, 1-DAY(GETDATE()), GETDATE()); -- First of current month
    DECLARE @EndDate DATE = DATEADD(MONTH, @ForecastHorizonMonths, @StartDate);
    
    ;WITH ForecastedDemand AS (
        SELECT 
            SKU AS FinishedGoodSKU,
            ForecastPeriodStart,
            ForecastPeriodEnd,
            ForecastedDemand
        FROM fact_ForecastResults
        WHERE ForecastPeriodStart >= @StartDate
          AND ForecastPeriodStart < @EndDate
          AND ForecastSource = 'KATANA_AI'
          AND ForecastDate = (
              SELECT MAX(ForecastDate) FROM fact_ForecastResults 
              WHERE ForecastSource = 'KATANA_AI'
          )
    ),
    
    -- Step 2: Explode BOM - multiply FG demand by raw material quantity per unit
    ExplodedBOM AS (
        SELECT 
            b.RawMaterialSKU,
            b.RawMaterialName,
            b.UnitOfMeasure,
            fd.ForecastPeriodStart,
            fd.ForecastPeriodEnd,
            SUM(fd.ForecastedDemand * b.QuantityPer) AS GrossRequirement,
            SUM(fd.ForecastedDemand * b.QuantityPer * b.ScrapFactor) AS ScrapAllowance
        FROM ForecastedDemand fd
        INNER JOIN stg_BillOfMaterials b ON fd.FinishedGoodSKU = b.FinishedGoodSKU
        WHERE b.IsActive = 1
        GROUP BY b.RawMaterialSKU, b.RawMaterialName, b.UnitOfMeasure,
                 fd.ForecastPeriodStart, fd.ForecastPeriodEnd
    ),
    
    -- Step 3: Get current inventory and allocations
    CurrentInventory AS (
        SELECT 
            SKU,
            SUM(QuantityOnHand) AS OnHand,
            SUM(QuantityAllocated) AS Allocated,
            MAX(SafetyStock) AS SafetyStock
        FROM stg_InventoryLevels
        WHERE ItemType = 'RAW'
        GROUP BY SKU
    ),
    
    -- Step 4: Get preferred supplier info
    PreferredSupplier AS (
        SELECT 
            RawMaterialSKU,
            SupplierID,
            SupplierName,
            AvgLeadTimeDays,
            MinOrderQuantity,
            UnitCost,
            ROW_NUMBER() OVER (PARTITION BY RawMaterialSKU ORDER BY UnitCost ASC) AS SupplierRank
        FROM stg_SupplierLeadTimes
    )
    
    -- Step 5: Calculate net requirements
    INSERT INTO #MaterialRequirements
    SELECT 
        eb.RawMaterialSKU,
        eb.RawMaterialName,
        eb.ForecastPeriodStart,
        eb.ForecastPeriodEnd,
        eb.GrossRequirement,
        eb.ScrapAllowance,
        eb.GrossRequirement + eb.ScrapAllowance AS TotalGrossRequirement,
        COALESCE(ci.OnHand, 0) AS CurrentOnHand,
        0 AS PendingPOQuantity, -- Populated from Katana PO sync
        COALESCE(ci.Allocated, 0) AS AllocatedToWIP,
        CASE WHEN @IncludeSafetyStock = 1 THEN COALESCE(ci.SafetyStock, 0) ELSE 0 END AS SafetyStockReq,
        -- Net Requirement = Gross + Scrap + Safety Stock - On Hand + Allocated - Pending POs
        GREATEST(
            (eb.GrossRequirement + eb.ScrapAllowance 
             + CASE WHEN @IncludeSafetyStock = 1 THEN COALESCE(ci.SafetyStock, 0) ELSE 0 END)
            - (COALESCE(ci.OnHand, 0) - COALESCE(ci.Allocated, 0))
            - 0, -- PendingPOQuantity placeholder
            0
        ) AS NetRequirement,
        -- Round up to supplier MOQ
        CASE 
            WHEN GREATEST(
                (eb.GrossRequirement + eb.ScrapAllowance 
                 + CASE WHEN @IncludeSafetyStock = 1 THEN COALESCE(ci.SafetyStock, 0) ELSE 0 END)
                - (COALESCE(ci.OnHand, 0) - COALESCE(ci.Allocated, 0)),
                0
            ) = 0 THEN 0
            ELSE CEILING(
                GREATEST(
                    (eb.GrossRequirement + eb.ScrapAllowance 
                     + CASE WHEN @IncludeSafetyStock = 1 THEN COALESCE(ci.SafetyStock, 0) ELSE 0 END)
                    - (COALESCE(ci.OnHand, 0) - COALESCE(ci.Allocated, 0)),
                    0
                ) / NULLIF(COALESCE(ps.MinOrderQuantity, 1), 0)
            ) * COALESCE(ps.MinOrderQuantity, 1)
        END AS SuggestedOrderQty,
        -- Suggested order date = period start minus supplier lead time
        DATEADD(DAY, -COALESCE(ps.AvgLeadTimeDays, 14), eb.ForecastPeriodStart) AS SuggestedOrderDate,
        ps.SupplierID,
        ps.SupplierName,
        COALESCE(ps.UnitCost, 0) * GREATEST(
            (eb.GrossRequirement + eb.ScrapAllowance 
             + CASE WHEN @IncludeSafetyStock = 1 THEN COALESCE(ci.SafetyStock, 0) ELSE 0 END)
            - (COALESCE(ci.OnHand, 0) - COALESCE(ci.Allocated, 0)),
            0
        ) AS EstimatedCost,
        eb.UnitOfMeasure
    FROM ExplodedBOM eb
    LEFT JOIN CurrentInventory ci ON eb.RawMaterialSKU = ci.SKU
    LEFT JOIN PreferredSupplier ps ON eb.RawMaterialSKU = ps.RawMaterialSKU AND ps.SupplierRank = 1;
    
    -- Output: Items that need ordering NOW (suggested order date within 14 days)
    SELECT * FROM #MaterialRequirements
    WHERE SuggestedOrderDate <= DATEADD(DAY, 14, GETDATE())
      AND NetRequirement > 0
    ORDER BY SuggestedOrderDate ASC;
    
    -- Persist results for Power BI reporting
    INSERT INTO fact_MaterialRequirements (RawMaterialSKU, RawMaterialName, PeriodStart, PeriodEnd,
        GrossRequirement, NetRequirement, SuggestedOrderQty, SuggestedOrderDate,
        SupplierName, EstimatedCost, CalculatedDate)
    SELECT RawMaterialSKU, RawMaterialName, PeriodStart, PeriodEnd,
        TotalGrossRequirement, NetRequirement, SuggestedOrderQty, SuggestedOrderDate,
        SupplierName, EstimatedCost, GETDATE()
    FROM #MaterialRequirements
    WHERE NetRequirement > 0;
    
    DROP TABLE #MaterialRequirements;
END;
GO

-- Create the persistence table if it doesn't exist
IF OBJECT_ID('fact_MaterialRequirements') IS NULL
BEGIN
    CREATE TABLE fact_MaterialRequirements (
        RequirementID INT IDENTITY(1,1) PRIMARY KEY,
        RawMaterialSKU NVARCHAR(100),
        RawMaterialName NVARCHAR(255),
        PeriodStart DATE,
        PeriodEnd DATE,
        GrossRequirement DECIMAL(18,4),
        NetRequirement DECIMAL(18,4),
        SuggestedOrderQty DECIMAL(18,4),
        SuggestedOrderDate DATE,
        SupplierName NVARCHAR(255),
        EstimatedCost DECIMAL(18,4),
        CalculatedDate DATETIME2 DEFAULT GETDATE()
    );
    CREATE INDEX IX_MatReq_SKU_Date ON fact_MaterialRequirements(RawMaterialSKU, PeriodStart);
END;
GO

Forecast Accuracy Monitor

Type: agent A Python service that runs weekly to compare forecasted demand against actual demand once the forecast period has elapsed. It calculates MAPE (Mean Absolute Percentage Error), bias, and tracking signal per SKU and per product category. When accuracy degrades below configurable thresholds, it sends alerts to the MSP and client, enabling proactive model retuning before business impact occurs. Implementation: ``` # File: C:\ForecastETL\forecast_accuracy_monitor.py # Schedule:...

Katana Forecast Sync Bridge

Type: integration A Python integration service that bridges the Katana Planning & Forecasting API with the on-premises SQL staging database. It pulls forecast results from Katana, stores them locally for Power BI reporting and accuracy tracking, and pushes updated inventory snapshots from the staging database back to Katana to keep the forecasting model's inputs current. Implementation: ``` # File: C:\ForecastETL\katana_sync_bridge.py # Schedule: Windows Task Scheduler, every 30 minut...

Daily Purchase Recommendation Digest

Type: prompt A templated email digest generator that combines the BOM explosion results with supplier information to produce a clear, actionable daily purchasing recommendation report. Sent to the purchasing manager every morning, it lists what to order, from whom, how much, and by when. Implementation: ``` # File: C:\ForecastETL\purchase_digest.py # Schedule: Windows Task Scheduler, daily at 7:00 AM # Requirements: pip install pyodbc jinja2 smtplib import pyodbc import os from datet...

Testing & Validation

Client Handoff

The client handoff should be conducted as a structured half-day session (4 hours) with all key stakeholders present: Purchasing Manager, Production Manager, Plant Manager/Owner, and any material planners who will use the system daily.

Training Topics (2.5 hours hands-on)

1
Katana Daily Workflow (45 min): How to view and interpret demand forecasts, navigate the planning dashboard, review and approve suggested purchase orders, adjust forecasts manually when needed (e.g., known large upcoming orders or customer cancellations), and update BOM records when recipes change.
2
Understanding the Daily Digest Email (20 min): Walk through each section of the purchase recommendation email, explain urgency levels, demonstrate how to trace a recommendation back to the underlying forecast and BOM data.
3
Power BI Dashboard Training (30 min): Navigate each dashboard page, interpret KPI cards, use date filters and drill-through, set up personal email alerts for specific threshold breaches, access from mobile devices.
4
When to Override the AI (20 min): Scenarios where human judgment should supersede AI recommendations — new product launches with no history, known one-time orders, supplier disruptions, seasonal events the AI hasn't seen yet. How to enter manual forecast adjustments.
5
Escalation Procedures (15 min): When to contact the MSP (sync failures, accuracy degradation, system errors), when to contact Katana support (platform bugs, feature questions), when to handle internally (BOM updates, supplier changes, inventory adjustments).

Documentation Package to Leave Behind

  • Quick Start Card (laminated, desk reference): Daily workflow checklist, key URLs, login info, support contacts
  • System Architecture Diagram: One-page visual showing data flow from ERP → Staging DB → Katana → Forecasts → Purchase Recommendations
  • User Guide (20-30 pages PDF): Step-by-step screenshots for all common tasks in Katana and Power BI
  • Runbook for MSP (internal): Server credentials, database schemas, ETL schedule, monitoring thresholds, Workato recipe documentation, Katana API key location, escalation contacts
  • Data Dictionary: Field mappings between ERP, staging database, and Katana for troubleshooting sync issues
  • BOM Maintenance Guide: How to add new products, update recipes, add new raw materials, set up new suppliers

Success Criteria Review (30 min discussion)

Maintenance

Ongoing MSP Responsibilities and Cadence:

Daily (Automated)

  • Monitor ETL pipeline execution via sync health check stored procedure (sp_CheckSyncHealth runs every 30 minutes)
  • Review any error alerts from Workato integration recipes — respond within 4 business hours for data sync failures
  • Verify the daily purchase digest email was generated and sent (check logs at C:\ForecastETL\logs\)

Weekly

  • Review the Forecast Accuracy Monitor output every Monday — investigate any SKUs with MAPE >25%
  • Check Workato task consumption to ensure usage stays within plan limits (2,500 tasks/month on Starter)
  • Verify SQL Server backup completion on the Synology NAS (Veeam job logs)
  • Review Windows Server event logs for disk space, memory, and CPU anomalies via RMM tool

Monthly

  • Generate and review a monthly forecast accuracy report with the client's Purchasing Manager (30-minute call)
  • Apply Windows Server security patches during a scheduled maintenance window (monthly Patch Tuesday + 1 week)
  • Check for Katana platform updates and review release notes for any breaking API changes
  • Review SQL staging database size and archive records older than 36 months to cold storage
  • Validate that supplier lead times in the system still match actual lead times (request client confirmation)

Quarterly (Quarterly Business Review - QBR)

  • Present a comprehensive forecast accuracy report: MAPE trends, bias analysis, top/bottom performing SKU categories
  • Review ROI metrics: stockout reduction, inventory carrying cost changes, expedited shipping cost reduction
  • Identify new demand signal sources to incorporate (e.g., customer forecasts, promotional calendars, seasonal adjustments)
  • Evaluate whether BOM structures need updating based on production changes
  • Assess whether the forecasting horizon or review frequency needs adjustment
  • Review Katana subscription tier — upgrade to Professional ($799/mo) if client has grown past 500 active SKUs
  • Recommend model retuning if MAPE has drifted above 25% for 2+ consecutive months

Annually

  • Full system health check: server hardware diagnostics, database index rebuilds, ETL performance optimization
  • Katana license renewal coordination and pricing review
  • Power BI dashboard refresh: add new KPIs, update visualizations based on client feedback
  • Disaster recovery test: restore from backup to verify RTO < 4 hours
  • Review and update the data processing agreement and compliance posture (especially for CMMC/ITAR clients)

Model Retraining Triggers (initiate within 1 week of detection)

  • MAPE exceeds 30% for 3 consecutive weeks across all SKUs
  • Client adds >20% new SKUs or discontinues >20% existing products
  • Major demand pattern shift (e.g., lost/gained a large customer, entered new market segment)
  • Client changes production processes significantly (new equipment, different batch sizes)
  • Supplier base changes significantly (new suppliers, different lead times)

SLA Considerations

  • Data sync uptime target: 99% (max 7.2 hours downtime per month)
  • Alert response time: Critical alerts (sync failure, data loss risk) within 2 hours; Warning alerts within 1 business day
  • Forecast accuracy commitment: Maintain overall MAPE below 25% within 6 months of go-live; if sustained above 30%, MSP will conduct root cause analysis at no additional charge
  • System restoration RTO: 4 hours for SQL staging database; Katana SaaS is vendor-managed (99.9% SLA from Katana)

Escalation Path

1
Tier 1 (Client Self-Service): Katana UI questions, BOM updates, manual forecast adjustments → Client's trained power user
2
Tier 2 (MSP Help Desk): Sync failures, data discrepancies, dashboard issues, user account management → MSP support team (response within 4 hours)
3
Tier 3 (MSP Engineering): ETL pipeline failures, database issues, integration breakdowns, accuracy degradation → MSP senior engineer (response within 2 hours for critical)
4
Tier 4 (Vendor Escalation): Katana platform bugs → Katana support; Workato issues → Workato support; SQL Server issues → Microsoft support

Alternatives

Odoo MRP with Built-in Demand Planning (Budget Option)

For budget-constrained SMBs under $2M revenue, deploy Odoo Enterprise MRP module as the all-in-one ERP and forecasting solution. Odoo provides manufacturing resource planning, inventory management, BOM management, and basic demand forecasting from historical sales data — all in a single open-source platform at $24.90-$37.40 per user per month. This eliminates the need for separate forecasting software, middleware (Workato), and in many cases the on-premises server (Odoo can be fully cloud-hosted).

Microsoft Dynamics 365 Business Central with Native Forecasting (Microsoft Ecosystem)

For clients already invested in the Microsoft ecosystem (Microsoft 365, Azure AD, Outlook/Teams), deploy Dynamics 365 Business Central Premium ($100-$110/user/month) as the ERP with its built-in MRP and MPS (Master Production Schedule) capabilities. Business Central natively integrates demand forecasts into planning, automatically generating production and purchasing recommendations based on sales orders, forecasts, and BOMs. Enhance with Azure Machine Learning AutoML for custom time-series forecasting models if the native forecasting isn't sophisticated enough.

Note

Avoid for manufacturers happy with their current ERP who only need bolt-on forecasting. MSP advantage: Microsoft CSP margins of 15-20% on all licenses, plus strong recurring managed services opportunity. Implementation timeline is longer (3-6 months for full ERP deployment).

Datup AI Demand Planning (Best-in-Class AI, Quick Deployment)

For data-mature manufacturers wanting the most advanced AI forecasting without building custom models, deploy Datup as a dedicated AI demand planning layer on top of the existing ERP. Datup uses deep learning models specifically trained for supply chain forecasting, claims 95%+ forecast accuracy, and connects to existing ERP/WMS/TMS systems. It goes live in approximately 5 weeks with no implementation fees and no user limits. Tradeoffs: Cost: Custom quote-based pricing (typically $500-$2,00...

Custom Azure ML AutoML Build (Maximum Flexibility)

For manufacturers with unique forecasting requirements, complex multi-echelon supply chains, or data science resources, build a custom forecasting solution using Azure Machine Learning's AutoML time-series forecasting capabilities. This approach provides maximum control over model selection, feature engineering, and integration architecture. Azure AutoML evaluates multiple algorithms (ARIMA, Prophet, ForecastTCN, etc.) and automatically selects the best-performing model per SKU. Tradeoffs: ...

Cin7 Core with ForesightAI (Omnichannel Manufacturers)

For manufacturers that also sell through multiple channels (direct, wholesale, e-commerce), deploy Cin7 Core with its ForesightAI demand prediction module. Cin7 predicts demand up to 24 months ahead with automated reordering and offers 450+ integrations with sales channels, 3PLs, and accounting platforms. The Advanced Manufacturing module ($599/mo) adds full MRP with production planning.

Want early access to the full toolkit?