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
- Existing phantom jobs generate reports.
- A scheduled extractor reads PH and HOLD records.
- Structured facts are extracted into JSON.
- An AI agent generates role-specific summaries.
- 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
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
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
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
}
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"
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())
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"]
}
}
}
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"])
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)