DEV Community

Deepa K.K
Deepa K.K

Posted on

Turning MultiValue Batch Reports into AI-Powered Morning Briefings

We Don't disrupt Our MultiValue System. We Let AI Read Its Reports.

Our MultiValue server has been running nightly batch jobs for years. They are stable, reliable, and trusted. Every night, phantom jobs generate operational reports and place them into PH and HOLD exactly as they always have.

We are not replacing the current system.

Instead, we are adding a thin AI layer on top of it.

The new pipeline reads the same overnight reports, extracts structured facts, understands relationships across multiple reports, and delivers a clear, role-specific morning digest to managers, finance teams, warehouse staff, and executives. Existing BASIC programs, PROC jobs, and phantom schedules remain unchanged.

The batch jobs continue to run exactly as before. The only difference is what happens next.

From Raw Text to Intelligent Summary

Why This Matters

Most organizations already have valuable information hidden inside overnight reports. The challenge is not generating the data; it is getting the right information to the right people at the right time.

The AI digest provides:

  • Faster visibility into operational issues
  • Cross-report insights that traditional reports cannot easily reveal
  • Decision-focused summaries tailored to different business roles

What the AI Layer Adds

Faster Visibility

A warehouse manager can receive a reorder alert by morning with product names, shortage quantities, and vendor details summarized in email by morning. The information already existed in the report; now it arrives earlier and in a more actionable format.

Cross-Report Insight

Traditional reports show one business view at a time. The AI digest can connect information across multiple reports.

For example, a product may appear in:

  • A reorder report
  • An overstock report
  • An open orders report

Viewing these relationships together often reveals the real operational problem.

Decision-Oriented Summaries

Reports provide numbers.

The AI digest provides context.

Instead of presenting isolated figures, it highlights the business situation and identifies the actions that matter most today.

A Pattern That Works Across Industries

The same approach applies wherever MultiValue systems generate nightly operational reports.

Industry What runs in PH / HOLD every night Who should receive the digest
Distribution & Wholesale Inventory valuation, reorder alerts, AR aging, slow-movers, open orders GM, warehouse manager, purchasing, sales manager
Healthcare Patient billing, insurance AR, supply consumption, appointment fill rates, claims outstanding Revenue cycle manager, CFO, operations director
Manufacturing WIP status, material consumption, scrap rates, machine downtime, production variance Plant manager, production scheduler, quality manager
Financial Services Daily Finish Reports, Trial Balance report, Loan aging, collections pipeline, disbursements, compliance flags, portfolio health Branch manager, collections manager, compliance officer
Retail & POS Daily sales by category, stock movement, margin analysis, returns, shrinkage Store manager, buyer, loss prevention
Property Management Rent roll, lease expiry pipeline, maintenance work orders, vacancy rate, arrears Property manager, asset manager, landlord reporting
Education ERP Enrolment figures, fee collection, outstanding balances, attendance, timetable conflicts Registrar, finance director, academic head
Government & Public Sector Case volumes, processing backlogs, compliance deadlines, budget consumption Department head, compliance officer, finance

The reports already exist. The AI layer simply makes them more accessible and useful.

Example Workflow

Overnight Processing

  1. Existing phantom jobs generate reports.
  2. A scheduled extractor reads PH and HOLD records.
  3. Structured facts are extracted into JSON.
  4. An AI agent generates role-specific summaries.
  5. Personalized digests are delivered automatically by email.

No changes are required to existing MultiValue business logic.

What the digest looks like

Using our working example — a produce distribution company running a MultiValue server — here is what currently lives in PH (phantom jobs) and HOLD (spooled reports) every morning:

INVENTORY REORDER REPORT                 Date: 06-07-2026   Time: 04:48pm
============================================================================================
Product   Name                      OnHand     Min   Short  ToOrder     Est. Value
--------------------------------------------------------------------------------------------
5972      Red Tomatoes                8999   10001    1002     2002     $43,803.76
4309      Butter Beans                  15    1001     986     1086     $76,128.60
1055      Pears                         45     180     135      153     $13,376.79
1701      Piñon Nuts                    50     150     100      115      $3,297.05
--------------------------------------------------------------------------------------------
Products needing reorder : 8
Estimated reorder value  : $143,273.02
Enter fullscreen mode Exit fullscreen mode
SLOW-MOVING / OVERSTOCK REPORT          Run: 06-07-2026  04:48pm
================================================================================
 Rank  Product Name                      OnHand  SoldYr  Excess     Excess Val
--------------------------------------------------------------------------------
    1  4303  Black Beans                  10620     165   10455  $1,132,590.15
    2  4054  Jalapeños                     8987     217    8770  $1,131,330.00
    3  9663  Chinese Cabbage               9395     224    9171    $910,221.75
    4  9632  Mandarin Oranges             10729     140   10589    $899,006.10
  ...154 more lines...
TOTAL (158 overstocked)                          $37,044,938.10
Enter fullscreen mode Exit fullscreen mode
ACCOUNTS RECEIVABLE REPORT                        Run: 06-07-2026  04:48pm
====================================================================================================
CustID  Customer Name              Orders    Ship Balance   Order Balance    Credit Limit    Status
----------------------------------------------------------------------------------------------------
7777    Betterway Store                 3       $9,598.69       $9,847.69      $20,000.00        OK
9999    Utotem Convenience              6      $21,336.36      $22,751.36      $32,000.00        OK
6873    Ko-Z Korner Store               6      $17,512.10      $18,468.26      $28,000.00        OK
Enter fullscreen mode Exit fullscreen mode

This is what the AI digest turns that data into, delivered to each audience at every morning.

Sample AI-generated digest report

How it is built — Tried it using Rocket U2 (Unidata and Universe Test servers - Demo accounts) and local On Prem LLM AI agent.

The diagram below shows the complete pipeline from overnight batch run to morning email delivery. The key boundary to notice is the one in the middle: raw PH and HOLD text stays entirely on the server side. Only few tokens of clean structured JSON cross the network to the client LLM.

Component 1 — JSON extraction schema

Every PH and HOLD report gets one schema entry. A single generic parser handles all of them. Adding a new report means adding one entry — no code changes to anything else.

# schema_registry.py — the only file that changes between domains
SCHEMAS = {
    "INV_REORDER": {
        "entity_fields": {
            "PRODUCT":  ["product_id", "name"],
            "QUANTITY": ["on_hand", "shortage", "to_order"],
            "MONEY":    ["est_value"],
        },
        "row_pattern": r'^(?P<product_id>\d{4})\s+(?P<name>[\w\s]+?)\s{2,}...',
        "alerts": [
            {"field": "shortage", "op": ">", "value": 100, "severity": "HIGH"},
            {"field": "on_hand",  "op": "=", "value": 0,   "severity": "CRITICAL"},
        ],
    },
    # SLOW_MOVING, RECEIVABLES, MONTHLY_SALES follow the same pattern
}
Enter fullscreen mode Exit fullscreen mode

Component 2 — Nightly extractor

Runs at 03:00, triggered by cron or directly from MultiValue BASIC:

! From our existing batch program — fires after reports complete
EXECUTE "python3 /opt/digest/nightly_extractor.py"
Enter fullscreen mode Exit fullscreen mode

Reads each PH and HOLD record via the MultiValue Python API, runs schema-driven extraction, tags entities with spaCy, builds a cross-document NetworkX entity graph (products and customers appearing across multiple reports), and saves a single immutable JSON file. That file is the audit record — every number the LLM later narrates traces back to an exact PH and HOLD entry.

Component 3 — REST API

Create a REST FastAPI server. Returns the pre-computed JSON for any date. Zero computation at request time — pure file read, under 50ms.

@router.get("/digest/{run_date}")
def get_digest(run_date: str, token=Depends(verify_jwt)):
    path = OUTPUT_DIR / f"digest_{run_date.replace('-','')}.json"
    if not path.exists():
        raise HTTPException(404, "No digest for this date — extractor runs at 03:00")
    return json.loads(path.read_text())
Enter fullscreen mode Exit fullscreen mode

Component 4 — Extracted JSON

What crosses the network. Real output from the produce distribution example.

{
  "facts": {
    "reorder":    { "count": 8, "total_value": 143273.02,
                    "items": [{"name":"Butter Beans","shortage":986,"est_value":76128.60}] },
    "overstock":  { "count": 158, "total_excess": 37044938.10 },
    "receivables":{ "customers": 106, "total_balance": 1368842.78, "over_limit": [] }
  },
  "alerts": [
    {"severity":"CRITICAL","message":"Cherimoya ZERO STOCK — SKU 1307"},
    {"severity":"HIGH",    "message":"Butter Beans critically short — 986 units"}
  ],
  "entity_graph": {
    "nodes": 1705, "cross_report_edges": 674,
    "customers_in_multiple_reports": {
      "Betterway Store": ["OPEN_ORDERS","RECEIVABLES"]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Fits local LLM model, no cloud required.

Component 5 — Autonomous AI agent

Runs at every morning in business days. Fetches the JSON, decides which alerts are relevant per audience, generates role-tailored narrative, renders HTML, and sends email.

AUDIENCES = {
    "executive":  {"recipients":["gm@co.com"],        "lens":"Revenue impact and top 3 actions only."},
    "operations": {"recipients":["warehouse@co.com"],  "lens":"Every alert. Full product names and quantities."},
    "finance":    {"recipients":["finance@co.com"],    "lens":"AR balances and credit utilisation only."},
}

for audience, cfg in AUDIENCES.items():
    narrative = ollama.chat(
        model="llama3",
        messages=[
            {"role":"system","content":"Use ONLY the provided numbers. End with 3 PRIORITY ACTIONS."},
            {"role":"user",  "content": f"{cfg['lens']}\n\n{json.dumps(facts)}"},
        ],
        options={"temperature": 0.2}
    )
    send_email(render_html(narrative, facts, alerts), cfg["recipients"])
Enter fullscreen mode Exit fullscreen mode

The agent autonomously decides which severity level each audience receives, whether to skip an audience if no relevant alerts exist, and what tone to use. The GM gets three bullets. The warehouse manager gets every product line. Finance gets AR only.
.

Benefits

Before After
Reports read by a few specialists Information reaches decision makers
Siloed reports Cross-report intelligence
Manual briefings Automated morning digests
Limited visibility Role-specific insights
Reactive decisions Earlier action

Beyond Daily Morning Briefings

While AI-generated morning briefings provide a quick summary of overnight batch processing results, the same architecture can evolve into a more intelligent operational assistant for MultiValue environments.

Because the AI agent receives structured JSON data extracted from existing PH and HOLD files, it can perform tasks beyond simple summarization.

Trend Analysis

The AI agent can compare current results with historical data and identify emerging trends.

Examples:

Inventory shortages increasing week-over-week
Growing accounts receivable balances
Rising transaction volumes
Recurring operational bottlenecks

Rather than reporting numbers, the AI can explain what is changing and why it matters.

Predictive Insights

By analyzing historical patterns, the AI agent can provide early warnings before issues become critical.

Examples:

Products likely to go out of stock within the next few days
Customers approaching credit limits
Growing payment exception trends
Potential workload spikes for support teams

This shifts operations from reactive monitoring to proactive management.

Data Quality Validation

The AI agent can act as an additional validation layer by checking report consistency and identifying anomalies such as:

Missing data
Unexpected value changes
Report format variations
Totals that do not reconcile

This helps improve confidence in nightly processing results.

Intelligent Recommendations

Instead of only describing issues, the AI agent can suggest possible actions.

For example:

Reorder inventory from preferred suppliers
Escalate high-risk accounts
Prioritize critical exceptions
Create operational follow-up tasks

This transforms reports into actionable business intelligence.

Conversational Operations Assistant

Future implementations could allow users to interact directly with the summarized data.

Examples:

Why did shortages increase today?
Which customers contributed most to overdue balances?
Show me the top five operational risks from last night's processing.

What This Changes

This approach modernizes a MultiValue environment without disrupting the systems that already work.

The batch jobs remain untouched.

The reports remain intact.

The operational knowledge built over years remains valuable.

What changes is accessibility: the right people receive the right information, in the right format, at the right time.

That is modernization without a rewrite.

Final Thoughts

Many MultiValue environments already possess the data needed to drive better decisions. The opportunity is not to replace existing systems, but to make their output more accessible and actionable.

By combining structured extraction, lightweight APIs, and local AI models, organizations can transform overnight reports into business-ready morning briefings without changing the applications that already work.

Modernization does not always require replacement.

Sometimes it simply means making existing information easier to use.

Top comments (0)