From 45eeaedea42f1baea6dcb3ad7d61bce425e4af47 Mon Sep 17 00:00:00 2001 From: Gary Jones Date: Mon, 20 Jul 2026 17:11:50 +0000 Subject: [PATCH 1/5] Co-Authored-By: CoderFlow Learn more: https://coderflow.ai --- docs/example.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 docs/example.md diff --git a/docs/example.md b/docs/example.md new file mode 100644 index 00000000..fb9539f9 --- /dev/null +++ b/docs/example.md @@ -0,0 +1,3 @@ +# Example + +This is a sample document in the `docs` folder. From 6110360b53297295b13bc563e6526306ca02d1f0 Mon Sep 17 00:00:00 2001 From: Roger Betancourt Date: Thu, 6 Aug 2026 02:06:14 +0000 Subject: [PATCH 2/5] Add BD-branded Genie skin (bdmedical) and an offline skin preview harness Rebuild the bdmedical Genie skin for the BD prospect. The folder had been copied from Skyline and renamed but never re-skinned: start.html was still titled "Genie - Skyline Skin" and loaded all five images from genie skins/skyline/, and bdmedical.css was Skyline's orange/black stylesheet verbatim. Brand values come from the CSS custom properties published by www.bd.com (clientlib-base) rather than a third-party colour site, which still quotes BD's pre-rebrand palette: navy #060A3D, boosted blue #044ED7, boosted orange #FF6E00, teal #39BEAB, plus BD's published FS Albert Pro fallback chain. BD's two official logo SVGs are included; FS Albert Pro is licensed and is not redistributed. htdocs/profoundui/userdata/genie skins/bdmedical/ - start.html: BD navy masthead with the white BD lockup, product name, tagline and a live "Signed in as" slot, over an orange/blue accent rule; BD footer. Paths repointed at bdmedical/ with a ?v=1 cache-buster. The required div#5250 and the css/script ordering rules are preserved. - bdmedical.css: full rewrite on BD tokens - brand typography, gradients, shadows, transitions, pill CTAs, focus rings, a pui-bd-animation spinner and a responsive breakpoint. All 5250 attribute classes A20-A3E are retained and remapped to BD hues while keeping their semantic distinctions, so colour-coded applications read the same as before. - bd-brandkit.js (new): the behaviour, as a reusable module with no skin name, field ids or wording baked in. Loaded between genie.js and custom.js so it can be relocated to /profoundui/userdata/js/shared/ and shared across skins. Rebuilds the sign-on screen, sizing the card from the live field bounding box so the normal and 128-character-password layouts both work without a second set of coordinates; rebuilds the function-key buttons as a flex-wrapped pill bar from pui.genie.afterInit, since Genie's own buttons are absolutely positioned and cannot be given spacing in CSS. - custom.js: reduced to a thin per-skin config layer. - adjusted columns custom.js: regenerated to match, ids shifted one column left. Without this, enabling adjustColumns would silently revert the sign-on screen to Skyline branding. - bd-logo.svg, bd-logo-white.svg: BD's official marks. - README.md: deploy steps, palette reference and the reasoning behind the non-obvious decisions. config.js is left untouched - it is Genie Administrator-managed. It still carries Skyline's hiColor (#DD5700); changing that to #044ED7 is a Genie Administrator change, not a source edit. Three defects found and fixed while rendering the skin: - "#5250" is an invalid CSS selector (an id selector cannot start with a digit), so those rules were being discarded silently, dropping white-space: nowrap from 5250 fields. Now [id="5250"]. - The card's own ".bd-signon-card div" reset outranked its bare child class selectors, collapsing the heading padding. Child rules now carry the parent class so they win on specificity, rather than using !important. - Subfile columns collided because the stock skin only monospaced INPUT fields and left output fields on the proportional body font, while Genie lays fields out on a fixed ~8px character grid. The 5250 area now uses the same 13px monospace the stock skin already used for inputs; chrome keeps the BD brand font. Sign-on layout is computed rather than inherited from the stock skin's fixed pixel offsets: the card is centred in the 5250 container and the form is laid out inside it. .insideDiv also gets auto margins - it is 675px inside a 775px .middleDiv and as a plain block sat flush left, pushing every screen 50px left of the page centre. And BDGenie.sizeButtonToLabel clears the inline width Genie writes onto each button it creates, which combined with the skin's padding and border-box sizing was clipping "Sign in" to "Sign"; CSS cannot fix that because an inline style wins. The rebuilt function-key bar anchors below the lowest still-visible field (BDGenie.contentBottom) rather than at the row the original prompts occupied. Function-key prompts routinely share a row with real text - the IBM i Main Menu puts F23=Set initial menu on row 24 next to the IBM copyright line - and the bar is taller than the rows it replaces, so anchored at the old top its second row of pills landed on that text. BDGenie.reserveRoomFor then grows .middleDiv if the bar extends past it, so it cannot collide with the page footer either; applyDisplaySizing resets that height on every screen. Add a dynamic "Actions" menu to the masthead, built from the current screen's function keys. The hamburger button and panel are static chrome in start.html; bd-brandkit.js fills the panel per screen and hides the toggle on screens with no function keys. Each row shows the key badge and its description, parsed out of the "Fnn=Text" prompt, and clicking one calls pressKey - the same path the green screen uses. Click-outside and Escape dismiss it, Up/Down move between items, and the keyboard handler is registered in the capture phase so Escape and the arrows reach the menu rather than Genie's 5250 key handling - but only while the menu is open, so ordinary typing is unaffected. rebuildFkeyBar is split into collectFunctionKeys (scan and de-duplicate) plus renderFkeyBar and renderFkeyMenu, so both affordances read the same data. buildFkeyBar and buildFkeyMenu are independent switches; custom.js turns the bar off, so function keys are surfaced through the menu alone rather than duplicating the same list in two places. The menu lives in its own strip (.bd-screenbar) directly above the terminal, width-matched to .insideDiv (675px) rather than the wider .middleDiv that wraps it, so the button's right edge lines up exactly with the right edge of the screen and the panel opens over the content. In the masthead it was correct but far away - the header runs to 1400px against a 675px terminal. The strip reserves a min-height so the terminal does not shift vertically between screens with and without function keys, and the toggle is restyled for the light page background now that it no longer sits on the navy masthead. .bd-header gets z-index 100 and .bd-screenbar z-index 60. 5250 fields carry z-index 10-40 in the root stacking context (.insideDiv is position:relative with z-index auto, which does not create one), so without those the menu panel painted underneath the terminal text. Below the terminal's own fixed width the page scrolls sideways, so at that breakpoint the panel anchors left rather than right to stay on screen. Self-host JetBrains Mono for the terminal (fonts/JetBrainsMono-latin.woff2, 31 KB variable 100-800 latin subset, SIL OFL 1.1 with the licence alongside it). The skin previously relied on a system monospace stack, which lands on whatever each workstation happens to have - frequently Courier New - so the look varied per machine. Chosen for a tall x-height and unambiguous 0/O and 1/l/I; the old system stack remains as a fallback. Three properties were measured rather than assumed, and the harness now asserts them on every screen: the advance is exactly 0.6em (7.8px at 13px, which the browser rounds to Genie's 8px cell, so 80 columns measure exactly 640px), weight 700 has the same advance as 400, and no sequence ligates. 13px is the ceiling for this face: 8 / 0.6 = 13.33px. liga/clig/calt are disabled on the terminal and on inputs. JetBrains Mono is a coding face and the IBM i command line is literally "===>". Measured, this subset does not ligate that sequence even with features on, so the suppression is insurance against a future font swap rather than a fix. start.html's cache-buster is at ?v=6. tools/genie-skin-preview/ Offline harness that serves a skin with a stand-in genie.js drawing synthetic 5250 screens from real Genie field ids, runs the skin's customize() and pui.genie.afterInit, then screenshots and probes the DOM. Covers the standard, 128-character-password and column-adjusted sign-on screens, an application screen with function keys, the IBM i Main Menu, and a narrow viewport. It also drives the Actions menu with real clicks and key presses, asserting the item list, the toggle's offset from the terminal's own rectangle, that the panel is topmost via elementFromPoint, that Escape restores focus, and that clicking a row fires pressKey with that row's key. It also measures the terminal font: that it resolves, its advance, that 80 columns fit the grid, and that "===>" and ". . . ." occupy their exact cell counts. All six screens pass with no page errors, console errors or failed requests. It is a stand-in, not Profound UI, so it verifies the skin's own markup and layout, not a live Genie session. The mock reproduces Genie's inline button widths, without which the harness sized buttons to their labels and missed the clipping seen on the real server. It also probes card-centre against page-centre, flags any button whose scrollWidth exceeds its clientWidth, and intersects the function-key bar against every visible 5250 field - so all three reported defects now fail the harness rather than reaching a browser. Co-Authored-By: CoderFlow Learn more: https://coderflow.ai --- .../userdata/genie skins/bdmedical/README.md | 200 +++ .../bdmedical/adjusted columns custom.js | 55 + .../genie skins/bdmedical/bd-brandkit.js | 698 +++++++++ .../genie skins/bdmedical/bd-logo-white.svg | 30 + .../genie skins/bdmedical/bd-logo.svg | 6 + .../genie skins/bdmedical/bdmedical.css | 1365 +++++++++++++++++ .../userdata/genie skins/bdmedical/config.js | 1 + .../userdata/genie skins/bdmedical/custom.js | 57 + .../bdmedical/fonts/JetBrainsMono-latin.woff2 | Bin 0 -> 31432 bytes .../genie skins/bdmedical/fonts/OFL.txt | 93 ++ .../userdata/genie skins/bdmedical/start.html | 76 + tools/genie-skin-preview/README.md | 53 + tools/genie-skin-preview/mock/genie.js | 272 ++++ tools/genie-skin-preview/mock/profoundui.css | 1 + tools/genie-skin-preview/preview.js | 233 +++ 15 files changed, 3140 insertions(+) create mode 100644 htdocs/profoundui/userdata/genie skins/bdmedical/README.md create mode 100644 htdocs/profoundui/userdata/genie skins/bdmedical/adjusted columns custom.js create mode 100644 htdocs/profoundui/userdata/genie skins/bdmedical/bd-brandkit.js create mode 100644 htdocs/profoundui/userdata/genie skins/bdmedical/bd-logo-white.svg create mode 100644 htdocs/profoundui/userdata/genie skins/bdmedical/bd-logo.svg create mode 100644 htdocs/profoundui/userdata/genie skins/bdmedical/bdmedical.css create mode 100644 htdocs/profoundui/userdata/genie skins/bdmedical/config.js create mode 100644 htdocs/profoundui/userdata/genie skins/bdmedical/custom.js create mode 100644 htdocs/profoundui/userdata/genie skins/bdmedical/fonts/JetBrainsMono-latin.woff2 create mode 100644 htdocs/profoundui/userdata/genie skins/bdmedical/fonts/OFL.txt create mode 100644 htdocs/profoundui/userdata/genie skins/bdmedical/start.html create mode 100644 tools/genie-skin-preview/README.md create mode 100644 tools/genie-skin-preview/mock/genie.js create mode 100644 tools/genie-skin-preview/mock/profoundui.css create mode 100644 tools/genie-skin-preview/preview.js diff --git a/htdocs/profoundui/userdata/genie skins/bdmedical/README.md b/htdocs/profoundui/userdata/genie skins/bdmedical/README.md new file mode 100644 index 00000000..3a5b8afd --- /dev/null +++ b/htdocs/profoundui/userdata/genie skins/bdmedical/README.md @@ -0,0 +1,200 @@ +# BD Medical — Genie skin + +A Profound UI Genie skin branded for **BD (Becton, Dickinson and Company)**, built +for prospect demos. Derived from the stock **Skyline** skin, then re-skinned end to +end against BD's live design system. + +## Deploying + +Copy this whole folder to the IFS of the Genie instance: + +``` +/www//htdocs/profoundui/userdata/genie skins/bdmedical/ +``` + +Launch with `http://:/profoundui/Genie?skin=bdmedical`, or set +**bdmedical** as the default skin in the Genie Administrator (Global options → +Default Skin). + +Every asset URL in `start.html` carries a `?v=` cache-buster (currently `v=6`). +**Bump that number on every edit** — several PUI/Apache instances serve skin +`.css`/`.js` with no cache-control headers, so browsers otherwise keep serving the +previous copy and the edit looks like it did nothing. + +## Files + +| File | Purpose | +|---|---| +| `start.html` | Page shell: BD masthead, the Actions menu strip above the screen, footer, and the required `
`. | +| `bdmedical.css` | Whole stylesheet: BD palette, typography, 5250 attribute-byte mapping, sign-on card, function-key bar, Actions menu, loading spinner. | +| `bd-brandkit.js` | Reusable, skin-agnostic behaviour module (sign-on rebuild, function-key bar and menu, session info, display sizing). Hardcodes no skin name, no field ids, no wording. | +| `custom.js` | Thin per-skin config: folder path, wording, and the sign-on field ids for the standard layout. | +| `adjusted columns custom.js` | Same, for the column-adjusted layout (every field id shifted one column left). Swap in for `custom.js` when `config.js` has `"adjustColumns": true`. | +| `config.js` | Genie Administrator-managed settings. Not part of the visual skin — see the note below. | +| `bd-logo-white.svg` | Official BD logo lockup, all-white, for the navy masthead. | +| `bd-logo.svg` | Official BD logo, full colour, for the sign-on card. | +| `fonts/JetBrainsMono-latin.woff2` | Self-hosted terminal typeface (31 KB, variable 100–800, latin subset). | +| `fonts/OFL.txt` | SIL Open Font License 1.1 for JetBrains Mono. | + +Load order in `start.html` matters and must not change: +`profoundui.css` → `bdmedical.css`, then `genie.js` → `bd-brandkit.js` → `custom.js`. + +`bd-brandkit.js` is deliberately free of skin-specific values, so it can be +relocated verbatim to `/profoundui/userdata/js/shared/` and shared with other +skins; only the ` + + + + + + + + +
+ +
+ +
+
+ +
+
+
Enterprise Systems
+
Advancing the world of health™
+
+
+
+
+
+ +
+ + +
+ + +
+ +
+ + + +
+ +
+ +
+ +
+ + + + diff --git a/tools/genie-skin-preview/README.md b/tools/genie-skin-preview/README.md new file mode 100644 index 00000000..f8493544 --- /dev/null +++ b/tools/genie-skin-preview/README.md @@ -0,0 +1,53 @@ +# Genie skin preview harness + +Renders a Genie skin offline — no IBM i, no Profound UI instance, no manual +browser session — so a skin can be checked before it is deployed. + +It serves the skin folder over `http://127.0.0.1:8799` with a stand-in +`genie.js` that draws synthetic 5250 screens using real Genie field ids +(`D__` / `I__`) and real attribute classes (`A20`…`A3E`), +runs the skin's own `customize()` and `pui.genie.afterInit`, then screenshots +each screen and probes the resulting DOM. + +## Running + +```sh +npm i playwright-core +npx playwright install chromium --only-shell +node tools/genie-skin-preview/preview.js [skinName] [outDir] +``` + +Defaults: skin `bdmedical`, output `tools/genie-skin-preview/out/`. + +## What it checks + +Screenshots plus a JSON probe per screen: whether the sign-on card was built and +where, whether the function-key bar was built and how many original buttons it +hid, the header session text, that the loading-spinner class resolves to a real +`@keyframes`, the computed colour of each attribute class, and whether the page +overflows horizontally. Any page error, console error, failed request or HTTP +4xx/5xx is collected and printed at the end. + +Cases currently covered: standard sign-on, 128-character-password sign-on, +column-adjusted sign-on (loads `adjusted columns custom.js` in place of +`custom.js`), an application/subfile screen with function keys, and that same +screen at a narrow viewport. + +## Limits + +`mock/genie.js` is a stand-in, not Profound UI. It implements only the helper +API a `custom.js` actually calls (`detectScreen`, `getObj`, `get`, +`hideElement(s)`, `changeElementValue`, `changeElementClass`, +`setDOMAttribute`, `moveElement`, `newElement`, `pressKey`, and the `pui.genie` +state a skin reads). `mock/profoundui.css` is an empty stub, so widget styling +that comes from the real `profoundui.css` is not represented. Field ids and +`pui.multX`/`multY` are assumed to be the common 80×24 values. + +Treat a pass here as "the skin's own HTML/CSS/JS is internally correct and lays +out as intended" — not as a substitute for loading it in a real Genie session. + +## Adding screens + +Add a `renderXxx()` function in `mock/genie.js`, dispatch it from the +`DOMContentLoaded` handler on a new `?screen=` value, and add a case to the +`cases` array in `preview.js`. diff --git a/tools/genie-skin-preview/mock/genie.js b/tools/genie-skin-preview/mock/genie.js new file mode 100644 index 00000000..8b720a51 --- /dev/null +++ b/tools/genie-skin-preview/mock/genie.js @@ -0,0 +1,272 @@ +/* Local test harness only - a stand-in for Profound UI's genie.js. + Implements just enough of the runtime API that a skin's custom.js exercises, + plus two synthetic 5250 screens rendered with real Genie-style field ids. */ + +var multX = 8, multY = 23; + +var pui = { + genie: { + displaySize: 80, + config: { useAjax: false }, + middleDiv: null, + alertMsg: "", + afterInit: null, + isCustomized: false + }, + "loading animation": {}, + "appJob": { user: "MSCHUTT" }, + getWindowSize: function() { return { width: window.innerWidth, height: window.innerHeight }; } +}; + +function getObj(id) { return document.getElementById(id); } +function get(id) { var o = getObj(id); return o == null ? "" : (o.value != null && o.tagName == "INPUT" ? o.value : o.textContent); } +function pressKey(k) { console.log("pressKey(" + k + ")"); } + +function detectScreen() { + for (var i = 0; i < arguments.length; i += 2) { + var o = getObj(arguments[i]); + if (o == null) return false; + if (o.textContent != arguments[i + 1]) return false; + } + return true; +} + +function hideElement(id) { var o = getObj(id); if (o) o.style.visibility = "hidden"; } +function hideElements() { for (var i = 0; i < arguments.length; i++) hideElement(arguments[i]); } +function changeElementValue(id, v) { var o = getObj(id); if (o) { if (o.tagName == "INPUT") o.value = v; else o.innerHTML = v; } } +function changeElementClass(id, c) { var o = getObj(id); if (o) o.className = c; } +function setDOMAttribute(id, a, v) { var o = getObj(id); if (o && a == "transparent" && v) o.style.background = "transparent"; } +function moveElement(id, row, col) { var o = getObj(id); if (o) { o.style.top = ((row - 1) * multY) + "px"; o.style.left = ((col - 1) * multX) + "px"; } } + +function newElement(a, b, c, d, e) { + var host = getObj("5250"), el; + if (typeof a == "string") { // newElement(type, content, id) + el = a == "img" ? document.createElement("img") : document.createElement(a); + if (a == "img") el.src = b; else el.innerHTML = b == null ? "" : b; + if (c) el.id = c; + el.style.position = "absolute"; + host.appendChild(el); + return el; + } + var row = a, col = b, type = c, value = d, id = e; // newElement(row, col, type, value, id) + if (type == "button") { + el = document.createElement("input"); el.type = "button"; el.value = value; el.className = "button"; + el.style.width = (String(value).length * multX) + "px"; // Genie writes an inline width + } + else if (type == "img") { el = document.createElement("img"); el.src = value; } + else { el = document.createElement(type); el.innerHTML = value; } + if (id) el.id = id; + el.style.position = "absolute"; + el.style.top = ((row - 1) * multY) + "px"; + el.style.left = ((col - 1) * multX) + "px"; + host.appendChild(el); + return el; +} + +/* ---------------------------------------------------------------- screens */ + +function fld(tag, row, col, text, cls, id, widthChars) { + var host = getObj("5250"); + var el = document.createElement(tag); + el.id = id || (tag == "input" ? "I_" : "D_") + row + "_" + col; + if (tag == "input") { el.type = "text"; el.value = text; el.className = cls || "input A26"; el.style.width = ((widthChars || text.length || 10) * multX) + "px"; el.fieldInfo = { size: widthChars || 10 }; } + else { el.textContent = text; el.className = cls || "A20"; } + el.style.position = "absolute"; + el.style.top = ((row - 1) * multY) + "px"; + el.style.left = ((col - 1) * multX) + "px"; + host.appendChild(el); + return el; +} + +function renderSignOn() { + fld("div", 1, 23, " Sign On", "A22"); + fld("div", 2, 48, "System . . . . . :", "A20"); + fld("div", 2, 70, "IDEV", "A22"); + fld("div", 3, 48, "Subsystem . . . . :", "A20"); + fld("div", 3, 70, "QINTER", "A22"); + fld("div", 4, 48, "Display . . . . . :", "A20"); + fld("div", 4, 70, "QPADEV0012", "A22"); + fld("div", 6, 17, "User . . . . . . . . . . . . . .", "A20"); + fld("input", 6, 53, "", "input A26", "I_6_53", 10); + fld("div", 7, 17, "Password . . . . . . . . . . . .", "A20"); + fld("input", 7, 53, "", "input A27", "I_7_53", 10); + fld("div", 8, 17, "Program/procedure . . . . . . . .", "A20"); + fld("input", 8, 53, "", "input A26", "I_8_53", 10); + fld("div", 9, 17, "Menu . . . . . . . . . . . . . .", "A20"); + fld("input", 9, 53, "", "input A26", "I_9_53", 10); + fld("div", 10, 17, "Current library . . . . . . . . .", "A20"); + fld("input", 10, 53, "", "input A26", "I_10_53", 10); + fld("div", 11, 17, "", "A20", "D_11_17"); + fld("input", 11, 53, "", "input A26", "I_11_53", 10); + fld("div", 12, 17, "", "A20", "D_12_17"); + fld("input", 12, 53, "", "input A26", "I_12_53", 10); + fld("div", 24, 1, "CPF1107 - Password not correct for user profile.", "A28", "D_24_1"); + fld("div", 24, 40, "(C) COPYRIGHT IBM CORP. 1980, 2024.", "A20", "D_24_40"); + + var quit = document.createElement("input"); + quit.type = "button"; quit.value = "Quit"; quit.className = "button"; quit.id = "quit_button"; + quit.style.position = "absolute"; quit.style.top = (11 * multY) + "px"; quit.style.left = (49 * multX) + "px"; + quit.style.width = (4 * multX) + "px"; // Genie writes an inline width + getObj("5250").appendChild(quit); +} + +function renderSignOn128() { + renderSignOn(); + getObj("I_7_53").fieldInfo.size = 52; + fld("input", 8, 1, "", "input A27", "I_8_1", 52).fieldInfo.size = 52; + fld("input", 9, 1, "", "input A27", "I_9_1", 24).fieldInfo.size = 24; +} + +/* Same sign-on screen as renderSignOn(), with every field id shifted one + column left - the layout Genie produces when column adjustment is on. */ +function renderSignOnAdj() { + fld("div", 1, 22, " Sign On", "A22", "D_1_22"); + fld("div", 2, 47, "System . . . . . :", "A20", "D_2_47"); + fld("div", 2, 69, "IDEV", "A22", "D_2_69"); + fld("div", 3, 47, "Subsystem . . . . :", "A20", "D_3_47"); + fld("div", 3, 69, "QINTER", "A22", "D_3_69"); + fld("div", 4, 47, "Display . . . . . :", "A20", "D_4_47"); + fld("div", 4, 69, "QPADEV0012", "A22", "D_4_69"); + fld("div", 6, 16, "User . . . . . . . . . . . . . .", "A20", "D_6_16"); + fld("input", 6, 52, "", "input A26", "I_6_52", 10); + fld("div", 7, 16, "Password . . . . . . . . . . . .", "A20", "D_7_16"); + fld("input", 7, 52, "", "input A27", "I_7_52", 10); + fld("div", 8, 16, "Program/procedure . . . . . . . .", "A20", "D_8_16"); + fld("input", 8, 52, "", "input A26", "I_8_52", 10); + fld("div", 9, 16, "Menu . . . . . . . . . . . . . .", "A20", "D_9_16"); + fld("input", 9, 52, "", "input A26", "I_9_52", 10); + fld("div", 10, 16, "Current library . . . . . . . . .", "A20", "D_10_16"); + fld("input", 10, 52, "", "input A26", "I_10_52", 10); + fld("div", 11, 16, "", "A20", "D_11_16"); + fld("input", 11, 52, "", "input A26", "I_11_52", 10); + fld("div", 12, 16, "", "A20", "D_12_16"); + fld("input", 12, 52, "", "input A26", "I_12_52", 10); + fld("div", 24, 0, "CPF1120 - User profile does not exist.", "A28", "D_24_0"); + fld("div", 24, 39, "(C) COPYRIGHT IBM CORP. 1980, 2024.", "A20", "D_24_39"); + + var quit = document.createElement("input"); + quit.type = "button"; quit.value = "Quit"; quit.className = "button"; quit.id = "quit_button"; + quit.style.position = "absolute"; quit.style.top = (11 * multY) + "px"; quit.style.left = (48 * multX) + "px"; + quit.style.width = (4 * multX) + "px"; // Genie writes an inline width + getObj("5250").appendChild(quit); +} + +function renderAppScreen() { + fld("div", 1, 2, "WRKCUST", "A20"); + fld("div", 1, 28, "Work with Customers", "A22"); + fld("div", 1, 66, "10/08/26", "A20"); + fld("div", 2, 66, "14:22:07", "A20"); + fld("div", 3, 2, "Type options, press Enter.", "A20"); + fld("div", 4, 4, "2=Change 4=Delete 5=Display 8=Order history", "A3A"); + + fld("div", 6, 2, "Opt", "A22"); + fld("div", 6, 7, "Customer", "A22"); + fld("div", 6, 18, "Name", "A22"); + fld("div", 6, 46, "Territory", "A22"); + fld("div", 6, 58, "Balance", "A22"); + fld("div", 6, 70, "Status", "A22"); + fld("div", 7, 2, "___ ________ ___________________________ __________ __________ _________", "A30"); + + var rows = [ + ["10041", "Grand River Hospital", "ON-CENTRAL", "48,210.55", "ACTIVE", "A20"], + ["10058", "CHU de Quebec", "QC-EAST", "12,904.00", "ACTIVE", "A20"], + ["10063", "Alberta Health Services", "AB-SOUTH", "301,772.18", "HOLD", "A32"], + ["10077", "Vancouver Coastal Health", "BC-WEST", "0.00", "ACTIVE", "A20"], + ["10094", "Winnipeg Regional HA", "MB-CENTRAL", "88,145.90", "OVERDUE", "A28"], + ["10102", "Nova Scotia Health", "NS-EAST", "5,600.25", "ACTIVE", "A20"], + ["10118", "Saskatchewan Cancer Agency", "SK-NORTH", "27,330.00", "REVIEW", "A30"], + ["10125", "Horizon Health Network", "NB-EAST", "9,875.40", "ACTIVE", "A20"] + ]; + for (var i = 0; i < rows.length; i++) { + var r = 8 + i; + fld("input", r, 3, "", "input A26", "I_" + r + "_3", 2); + fld("div", r, 7, rows[i][0], "A20"); + fld("div", r, 18, rows[i][1], "A20"); + fld("div", r, 46, rows[i][2], "A20"); + fld("div", r, 58, rows[i][3].padStart(11, " "), "A20"); + fld("div", r, 70, rows[i][4], rows[i][5]); + } + + fld("div", 18, 2, "Position to customer . . . .", "A20"); + fld("input", 18, 32, "", "input A26", "I_18_32", 8); + fld("div", 19, 2, "Territory . . . . . . . . . .", "A20"); + fld("input", 19, 32, "", "input A26", "I_19_32", 10); + fld("div", 21, 2, "Customer 10094 is past due 62 days.", "A28"); + fld("div", 22, 2, "More...", "A22"); + + // Genie renders each "Fnn=Text" prompt as its own absolutely-positioned + // button at that prompt's original column - exactly what this reproduces. + var keys = [ + ["F3", "F3=Exit", 2], ["F5", "F5=Refresh", 12], ["F6", "F6=Create", 26], + ["F9", "F9=Retrieve", 40], ["F11", "F11=Alt view", 55], ["F12", "F12=Cancel", 70], + ["F17", "F17=Subset", 2], ["F21", "F21=Print list", 16], ["F24", "F24=More keys", 33] + ]; + for (var k = 0; k < keys.length; k++) { + var b = document.createElement("input"); + b.type = "button"; b.value = keys[k][1]; b.className = "button"; b.fkey = keys[k][0]; + b.style.position = "absolute"; + b.style.top = ((k < 6 ? 23 : 24) - 1) * multY + "px"; + b.style.left = (keys[k][2] - 1) * multX + "px"; + getObj("5250").appendChild(b); + } +} + +/* The IBM i Main Menu: function-key prompts on rows 23 AND 24, with the IBM + copyright line sharing row 24. This is the shape that exposes a rebuilt + function-key bar overlapping real screen text. */ +function renderMainMenu() { + fld("div", 1, 2, "MAIN", "A3A"); + fld("div", 1, 31, "IBM i Main Menu", "A22"); + fld("div", 2, 57, "System:", "A20"); + fld("div", 2, 68, "PROFND01", "A22"); + fld("div", 3, 2, "Select one of the following:", "A3A"); + + var opts = [ + "1. User tasks", "2. Office tasks", "3. General system tasks", + "4. Files, libraries, and folders", "5. Programming", "6. Communications", + "7. Define or change the system", "8. Problem handling", "9. Display a menu", + "10. Information Assistant options", "11. IBM i Access tasks" + ]; + for (var i = 0; i < opts.length; i++) { + var el = fld("div", 5 + i, 7, "", "A20", "D_" + (5 + i) + "_7"); + el.innerHTML = '' + opts[i] + ''; // Genie makes menu options clickable + } + var so = fld("div", 18, 7, "", "A20", "D_18_7"); + so.innerHTML = '90. Sign off'; + + fld("div", 20, 2, "Selection or command", "A20"); + fld("div", 21, 2, "===>", "A20"); + fld("input", 21, 7, "", "input A26", "I_21_7", 74); + fld("input", 22, 1, "", "input A26", "I_22_1", 80); + + // Row 24 carries BOTH an F23 prompt (col 1) and the copyright (col 40). + fld("div", 24, 40, "(C) COPYRIGHT IBM CORP. 1980, 2018.", "A20", "D_24_40"); + + var keys = [ + ["F3", "F3=Exit", 1, 23], ["F4", "F4=Prompt", 10, 23], ["F9", "F9=Retrieve", 23, 23], + ["F12", "F12=Cancel", 37, 23], ["F13", "F13=Information Assistant", 51, 23], + ["F23", "F23=Set initial menu", 1, 24] + ]; + for (var k = 0; k < keys.length; k++) { + var b = document.createElement("input"); + b.type = "button"; b.value = keys[k][1]; b.className = "button"; b.fkey = keys[k][0]; + b.style.position = "absolute"; + b.style.top = ((keys[k][3] - 1) * multY) + "px"; + b.style.left = ((keys[k][2] - 1) * multX) + "px"; + b.style.width = (String(keys[k][1]).length * multX) + "px"; + getObj("5250").appendChild(b); + } +} + +window.addEventListener("DOMContentLoaded", function() { + var screenName = new URLSearchParams(location.search).get("screen") || "signon"; + pui.genie.middleDiv = getObj("middle"); + if (screenName == "signon") renderSignOn(); + else if (screenName == "signon128") renderSignOn128(); + else if (screenName == "signonadj") renderSignOnAdj(); + else if (screenName == "mainmenu") renderMainMenu(); + else renderAppScreen(); + getObj("5250").style.visibility = "visible"; // genie.js reveals it after render + if (typeof customize == "function") customize(); + if (typeof pui.genie.afterInit == "function") pui.genie.afterInit(); +}); diff --git a/tools/genie-skin-preview/mock/profoundui.css b/tools/genie-skin-preview/mock/profoundui.css new file mode 100644 index 00000000..4e1b425d --- /dev/null +++ b/tools/genie-skin-preview/mock/profoundui.css @@ -0,0 +1 @@ +/* harness stub for profoundui.css */ diff --git a/tools/genie-skin-preview/preview.js b/tools/genie-skin-preview/preview.js new file mode 100644 index 00000000..ac7beffc --- /dev/null +++ b/tools/genie-skin-preview/preview.js @@ -0,0 +1,233 @@ +const http = require('http'); +const fs = require('fs'); +const path = require('path'); +const { chromium } = require('playwright-core'); + +/* Offline preview harness for Genie skins. + * + * Serves a skin folder over HTTP with a stand-in genie.js (mock/genie.js) that + * renders synthetic 5250 screens using real Genie field ids, then screenshots + * the result and probes the DOM. Lets a skin be checked without an IBM i, a + * Profound UI instance, or a browser session. + * + * npm i playwright-core && npx playwright install chromium --only-shell + * node tools/genie-skin-preview/preview.js [skinName] [outDir] + * + * Screens are defined in mock/genie.js; add one there for any screen shape you + * want to check. + */ + +const SKIN_NAME = process.argv[2] || 'bdmedical'; +const REPO = path.resolve(__dirname, '..', '..'); +const SKIN = path.join(REPO, 'htdocs', 'profoundui', 'userdata', 'genie skins', SKIN_NAME); +const MOCK = path.join(__dirname, 'mock'); +const OUT = process.argv[3] || path.join(__dirname, 'out'); +const URL_BASE = '/profoundui/userdata/genie skins/' + SKIN_NAME + '/'; +fs.mkdirSync(OUT, { recursive: true }); +if (!fs.existsSync(SKIN)) { console.error('no such skin: ' + SKIN); process.exit(1); } + +let VARIANT = 'standard'; +const TYPES = { '.html': 'text/html', '.css': 'text/css', '.js': 'application/javascript', + '.svg': 'image/svg+xml', '.woff2': 'font/woff2', '.woff': 'font/woff', '.ttf': 'font/ttf' }; + +function resolve(url) { + const p = decodeURIComponent(url.split('?')[0]); + // must come before the skin-folder catch-all below + if (p.endsWith('/custom.js') && VARIANT === 'adjusted') return path.join(SKIN, 'adjusted columns custom.js'); + if (p.startsWith(URL_BASE)) return path.join(SKIN, p.replace(URL_BASE, '')); + if (p === '/profoundui/proddata/js/genie.js') return path.join(MOCK, 'genie.js'); + if (p === '/profoundui/proddata/css/profoundui.css') return path.join(MOCK, 'profoundui.css'); + if (p === '/' || p === '/index.html') return path.join(SKIN, 'start.html'); + return null; +} + +const server = http.createServer((req, res) => { + const file = resolve(req.url); + if (file == null || !fs.existsSync(file)) { res.writeHead(404); res.end('not found ' + req.url); return; } + res.writeHead(200, { 'Content-Type': TYPES[path.extname(file)] || 'text/plain', 'Cache-Control': 'no-store' }); + res.end(fs.readFileSync(file)); +}); + +(async () => { + await new Promise(r => server.listen(8799, r)); + const browser = await chromium.launch(); + const page = await browser.newPage({ viewport: { width: 1280, height: 900 }, deviceScaleFactor: 2 }); + + const errors = []; + page.on('pageerror', e => errors.push('PAGEERROR: ' + e.message)); + page.on('console', m => { if (m.type() === 'error') errors.push('CONSOLE: ' + m.text()); }); + page.on('requestfailed', r => errors.push('REQFAILED: ' + r.url() + ' ' + (r.failure() || {}).errorText)); + page.on('response', r => { if (r.status() >= 400) errors.push('HTTP ' + r.status() + ' ' + r.url()); }); + + const cases = [ + { screen: 'signon', variant: 'standard', vp: { width: 1280, height: 900 }, name: 'signon' }, + { screen: 'app', variant: 'standard', vp: { width: 1280, height: 900 }, name: 'app' }, + { screen: 'signon128', variant: 'standard', vp: { width: 1280, height: 900 }, name: 'signon128' }, + { screen: 'signonadj', variant: 'adjusted', vp: { width: 1280, height: 900 }, name: 'signon-adjusted' }, + { screen: 'mainmenu', variant: 'standard', vp: { width: 1280, height: 900 }, name: 'mainmenu' }, + { screen: 'app', variant: 'standard', vp: { width: 760, height: 900 }, name: 'app-narrow' } + ]; + for (const tc of cases) { + const screen = tc.screen; + VARIANT = tc.variant; + await page.setViewportSize(tc.vp); + await page.goto(`http://127.0.0.1:8799/?screen=${screen}`, { waitUntil: 'networkidle' }); + await page.waitForTimeout(350); + await page.screenshot({ path: path.join(OUT, `${tc.name}.png`), fullPage: true }); + + const probe = await page.evaluate(() => { + const q = id => document.getElementById(id); + const card = q('bd_signon_card'); + const bar = q('bdFkeyBar'); + const cs = el => el ? getComputedStyle(el) : null; + return { + cardPresent: !!card, + cardRect: card ? card.getBoundingClientRect() : null, + cardZ: card ? card.style.zIndex : null, + loginRect: q('login_button') ? q('login_button').getBoundingClientRect() : null, + quitRect: q('quit_button') ? q('quit_button').getBoundingClientRect() : null, + barPresent: !!bar, + barButtons: bar ? Array.from(bar.querySelectorAll('input')).map(b => b.value) : [], + barRect: bar ? bar.getBoundingClientRect() : null, + hiddenOriginals: Array.from(document.querySelectorAll('[id="5250"] > input[type=button]')) + .filter(b => b.style.visibility === 'hidden').length, + headerMeta: q('bdSessionInfo') ? q('bdSessionInfo').textContent : null, + menuToggleVisible: q('bdMenuToggle') ? !q('bdMenuToggle').hidden : null, + // The Actions button should sit just above the terminal and share its + // right edge, not float off at the edge of a full-width header. + menuVsTerminal: (() => { + const t = q('bdMenuToggle'), five = q('5250'); + if (!t || t.hidden || !five) return null; + const tr = t.getBoundingClientRect(), fr = five.getBoundingClientRect(); + return { rightOffset: Math.round(fr.right - tr.right), gapAbove: Math.round(fr.top - tr.bottom) }; + })(), + menuCount: q('bdMenuCount') ? q('bdMenuCount').textContent : null, + menuItems: q('bdMenuPanel') + ? Array.from(q('bdMenuPanel').querySelectorAll('.bd-menu-item')) + .map(i => i.querySelector('.bd-menu-item__key').textContent + '|' + + i.querySelector('.bd-menu-item__text').textContent) + : null, + spinnerAnim: (() => { const d = document.createElement('div'); d.className = 'pui-bd-animation'; + document.body.appendChild(d); const s = getComputedStyle(d, ':before').animationName; d.remove(); return s; })(), + sampleColors: ['A20', 'A22', 'A28', 'A3A', 'A30', 'A32', 'A38'].map(c => { + const el = document.querySelector('[id="5250"] div.' + c); + return c + '=' + (el ? cs(el).color : 'n/a'); + }), + // The rebuilt function-key bar must not sit on top of any visible + // 5250 field - on screens like the IBM i Main Menu, real text shares + // the rows the original fkey prompts occupied. + barOverlaps: (() => { + const b = q('bdFkeyBar'); if (!b) return []; + const br = b.getBoundingClientRect(); + const hits = []; + Array.from(q('5250').children).forEach(el => { + if (el === b) return; + if (el.style.visibility === 'hidden' || el.style.display === 'none') return; + const r = el.getBoundingClientRect(); + if (r.width === 0 && r.height === 0) return; + if (r.left < br.right && r.right > br.left && r.top < br.bottom && r.bottom > br.top) { + hits.push((el.id || el.tagName) + ':' + JSON.stringify(el.textContent || el.value).slice(0, 40)); + } + }); + return hits; + })(), + barBottomVsMiddle: (() => { + const b = q('bdFkeyBar'); const m = document.getElementById('middle'); + if (!b || !m) return null; + return Math.round(b.getBoundingClientRect().bottom - m.getBoundingClientRect().bottom); + })(), + // Terminal typeface: it must actually load, must fit inside Genie's + // 8px character cell, and must not ligate - a coding font that + // ligates "===>" or "!=" would collapse several cells into one glyph + // and break the fixed grid. + terminalFont: (() => { + const five = q('5250'); + if (!five) return null; + const cs = getComputedStyle(five); + const probe = document.createElement('span'); + probe.style.cssText = 'position:absolute;visibility:hidden;white-space:pre;'; + probe.style.font = cs.fontSize + '/' + cs.lineHeight + ' ' + cs.fontFamily; + probe.style.fontVariantLigatures = cs.fontVariantLigatures; + probe.style.fontFeatureSettings = cs.fontFeatureSettings; + five.appendChild(probe); + const measure = t => { probe.textContent = t; return probe.getBoundingClientRect().width; }; + const one = measure('M'); + const eighty = measure('M'.repeat(80)); + const arrow = measure('===>'); + const dots = measure('. . . .'); + probe.remove(); + return { + family: cs.fontFamily.split(',')[0].replace(/"/g, ''), + size: cs.fontSize, + loaded: document.fonts ? document.fonts.check('13px "JetBrains Mono"') : null, + advance: Math.round(one * 100) / 100, + eightyCols: Math.round(eighty * 10) / 10, + fitsGrid: eighty <= 640, + ligatureFree: Math.abs(arrow - one * 4) < 0.5 && Math.abs(dots - one * 7) < 0.5 + }; + })(), + docScrollWidth: document.documentElement.scrollWidth, + pageCenter: document.documentElement.clientWidth / 2, + cardCenter: card ? (card.getBoundingClientRect().left + card.getBoundingClientRect().width / 2) : null, + buttonLabels: ['login_button', 'quit_button'].map(id => { + const b = q(id); if (!b) return id + '=absent'; + // scrollWidth > clientWidth means the label is being clipped + return id + ' w=' + Math.round(b.getBoundingClientRect().width) + + ' inlineW=' + (b.style.width || 'unset') + + ' clipped=' + (b.scrollWidth > b.clientWidth + 1); + }), + fiveRect: q('5250').getBoundingClientRect() + }; + }); + console.log('=== ' + tc.name + ' ==='); + console.log(JSON.stringify(probe, null, 1)); + + if (probe.menuToggleVisible) { + await page.click('#bdMenuToggle'); + await page.waitForTimeout(200); + await page.screenshot({ path: path.join(OUT, `${tc.name}-menu-open.png`), fullPage: true }); + + const open = await page.evaluate(() => { + const panel = document.getElementById('bdMenuPanel'); + const toggle = document.getElementById('bdMenuToggle'); + const r = panel.getBoundingClientRect(); + // Is the panel actually the topmost thing at its own centre? If a 5250 + // field paints over it, elementFromPoint returns that field instead. + const hit = document.elementFromPoint(r.left + r.width / 2, r.top + 24); + return { + panelVisible: !panel.hidden && r.height > 0, + ariaExpanded: toggle.getAttribute('aria-expanded'), + focusedItem: document.activeElement && document.activeElement.className.indexOf('bd-menu-item') >= 0, + topmostAtPanel: hit ? (hit.closest('#bdMenuPanel') ? 'panel' : (hit.id || hit.className || hit.tagName)) : 'none', + withinViewport: r.right <= document.documentElement.clientWidth + 1 && r.left >= -1 + }; + }); + console.log(' menu-open: ' + JSON.stringify(open)); + + // Escape must close it and hand focus back to the toggle. + await page.keyboard.press('Escape'); + await page.waitForTimeout(120); + console.log(' after-escape: ' + JSON.stringify(await page.evaluate(() => ({ + closed: document.getElementById('bdMenuPanel').hidden, + focusBackOnToggle: document.activeElement === document.getElementById('bdMenuToggle') + })))); + + // Clicking an item must fire pressKey with the right key. + await page.evaluate(() => { window.__pressed = []; const o = window.pressKey; + window.pressKey = function(k) { window.__pressed.push(k); return o.apply(this, arguments); }; }); + await page.click('#bdMenuToggle'); + await page.waitForTimeout(120); + await page.click('#bdMenuPanel .bd-menu-item:nth-child(2)'); + await page.waitForTimeout(120); + console.log(' item-click: ' + JSON.stringify(await page.evaluate(() => ({ + pressed: window.__pressed, + closedAfterClick: document.getElementById('bdMenuPanel').hidden + })))); + } + } + + console.log('=== errors ==='); + console.log(errors.length ? errors.join('\n') : '(none)'); + await browser.close(); + server.close(); +})(); From 9dd4189c358653c637c73152ed75bcce2db8558f Mon Sep 17 00:00:00 2001 From: Gary Jones Date: Tue, 18 Aug 2026 06:29:23 +0000 Subject: [PATCH 3/5] Add .gitignore to psact-report tool directory Excludes __pycache__/ and *.pyc. A compiled bytecode file from local py_compile runs had been picked up into the index alongside the tool sources; it has been unstaged and is now ignored. Co-Authored-By: CoderFlow Learn more: https://coderflow.ai --- tools/psact-report/.gitignore | 2 + tools/psact-report/README.md | 205 +++++ tools/psact-report/psact_report.py | 1171 ++++++++++++++++++++++++++++ 3 files changed, 1378 insertions(+) create mode 100644 tools/psact-report/.gitignore create mode 100644 tools/psact-report/README.md create mode 100644 tools/psact-report/psact_report.py diff --git a/tools/psact-report/.gitignore b/tools/psact-report/.gitignore new file mode 100644 index 00000000..7a60b85e --- /dev/null +++ b/tools/psact-report/.gitignore @@ -0,0 +1,2 @@ +__pycache__/ +*.pyc diff --git a/tools/psact-report/README.md b/tools/psact-report/README.md new file mode 100644 index 00000000..737ccfe4 --- /dev/null +++ b/tools/psact-report/README.md @@ -0,0 +1,205 @@ +# PSACT daily activity report + +Generates the presales team's morning report from Jira project **PSACT** +(plus any rollup projects it points at) and renders three artefacts. + +## Usage + +```bash +python3 psact_report.py # today, mode chosen from weekday +python3 psact_report.py --date 2026-08-10 # back-dated run +python3 psact_report.py --mode weekly # force weekly recap +python3 psact_report.py --outdir /task-output +python3 psact_report.py --force # run at a weekend +``` + +Exits without producing anything on Saturday and Sunday unless `--force` is +given. + +## Modes + +| Weekday | Mode | Window | +| --- | --- | --- | +| Monday | `weekly` | previous 7 days — recap of the week just ended | +| Tue–Fri | `daily` | the prior day only | +| Sat/Sun | skipped | — | + +The window is **half-open**: `[start, today)`. Work done this morning is not +reported under yesterday's heading. Day boundaries are computed in +`America/New_York`, not UTC — in UTC a 9pm EDT comment falls on the following +calendar day and would be filed under the wrong date. + +## Outputs + +| File | Purpose | +| --- | --- | +| `psact-report-.html` | Rich version — animated, expandable sections. Open in a browser. | +| `psact-report-.email.html` | Email-safe — no JS, table layout, inline styles. Survives Gmail/Outlook. | +| `psact-report-.md` | Markdown digest for the archive. | + +Two HTML files exist because **email clients strip `") + + theme_js = ( + "") + + return f""" + + +PSACT {title} — {t:%d %b %Y} +{theme_init} +
+
+ +
{e(title)}
+

PreSales Activity — {t:%A %-d %B %Y}

+
Covering {e(m['window_label'])} · + {e(" · ".join(n for n, _ in TEAM))}
+
+
{kpi_html}
+ {''.join(parts)} +
Generated from Jira project PSACT + (plus rollup projects) · {t:%Y-%m-%d}
+ Staleness is measured on last update, not on comments — + In Progress {STALE_DAYS['In Progress']}d · + Waiting {STALE_DAYS['Waiting']}d · + To Do {STALE_DAYS['To Do']}d. + Tickets with a future due date, or labelled parked, are exempt. +
+
+{theme_js}""" + + +# -------------------------------------------------------------------------- +# Email-safe HTML (no JS, no
- table layout only) +# -------------------------------------------------------------------------- + +def render_email(m, base, attach_name): + t = m["today"] + weekly = m["mode"] == "weekly" + title = "Weekly Recap" if weekly else "Daily Report" + + def mini(rows, empty, show_due=False): + if not rows: + return (f'

{e(empty)}

') + out = ('') + for r in rows: + extra = [] + if show_due and r["due"]: + extra.append(f'due {r["due"]:%a %-d %b}') + if r["customer"]: + extra.append(r["customer"]) + if r["tier"]: + extra.append(f'{r["tier"][2]} · {r["idle"]}d idle') + sub = " · ".join(extra) + out += ( + f'') + return out + "
' + f'{r["key"]}' + f'  {e(r["summary"])}
' + f'' + f'{e(r["status"])} · {e(r["assignee"] or "unassigned")}' + + (f' · {e(sub)}' if sub else "") + + '
" + + def h(txt): + return (f'

' + f'{e(txt)}

') + + kpi_cells = "".join( + f'' + f'
{v}
' + f'
{e(l)}
' + f'' + for v, l in [ + (len(m["in_progress"]), "In progress"), + (len(m["waiting"]), "Waiting"), + (len(m["today_events"]), "Today"), + (len(m["stale"]), "Attention"), + ]) + + # Today only - the week ahead sits on each person's plate instead, so a + # team-wide "coming up" block would list the same tickets twice. + next_up = "" + if not m["today_events"] and m["upcoming"]: + nxt = m["upcoming"][0] + next_up = (f'

Next up: ' + f'{nxt["key"]} on ' + f'{nxt["due"]:%A %-d %B} — ' + f'{e(nxt["assignee"] or "unassigned")}.

') + + # One shared document: a block per person so each of them can see the + # others' plate and where to offer help. + named = {n for n, _ in TEAM} + plates_html = "" + for pl in m["plates"]: + chips = [f'{pl["n_in_progress"]} in progress'] + if pl["n_waiting"]: + chips.append(f'{pl["n_waiting"]} waiting') + if pl["behind"]: + chips.append(f'{len(pl["behind"])} behind') + plates_html += ( + f'

{e(pl["name"])}' + f' — {e(" · ".join(chips))}

') + if pl["behind"]: + plates_html += ( + f'
' + f'{e(pl["name"].split()[0])} has {len(pl["behind"])} ' + f'{plural(len(pl["behind"]), "item")} falling behind. ' + f'Worth asking how the team can help.
') + plates_html += mini(pl["behind"], "") + if pl["scheduled"]: + plates_html += mini(pl["scheduled"], "", show_due=True) + # Buckets are already disjoint upstream, so concatenating them cannot + # list the same ticket twice. + rest_items = pl["in_progress"] + pl["waiting"] + pl["todo"] + plates_html += mini(rest_items, "Nothing else on the plate.") + if pl["closed"]: + plates_html += ( + f'

Completed: ' + + e(", ".join(r["key"] for r in pl["closed"])) + '

') + + other_stale = [r for r in m["stale"] if r["assignee"] not in named] + stale_shown = other_stale[:5] + rest = len(other_stale) - 5 + + act = "" + if not m["activity"]: + act = (f'

No ticket activity recorded.

') + for r in m["activity"]: + act += mini([r], "") + for c in r.get("comments", [])[:3]: + ct = clean_comment(c["text"]) + txt = ct[:280] + ("…" if len(ct) > 280 else "") + act += (f'
{e(c["author"])} ' + f'· {c["created"]:%-d %b}
{e(txt)}
') + # Rollup tickets carry no narrative themselves - without this the + # email would show the placeholder and none of the actual work. + rec = (r["rollup"] or {}).get("recent") or [] + if rec: + act += (f'
' + f'{rollup_line(r["rollup"], base)}
') + + return f""" + +
+ + + +
+
{e(title)}
+
+ PreSales Activity — {t:%A %-d %B %Y}
+
+ Covering {e(m['window_label'])}
+
+ + {kpi_cells}
+ + {h(f'Today — {t:%A %-d %B}')} + {mini(m['today_events'], 'Nothing scheduled for today.', show_due=True)} + {next_up} + + {plates_html} + + {h('Activity — ' + m['window_label'])} + {act} + + {(h('Falling behind — elsewhere') + mini(stale_shown, '') + + ((f'

+ {rest} further ' + f'{plural(rest, "ticket")} over threshold.

') if rest > 0 else '')) + if other_stale else ''} + + {(h('No owner') + mini(m['unassigned'], '')) if m['unassigned'] else ''} + +

+ The attached {e(attach_name)} is the interactive version — open it + in a browser for collapsible sections. Click any ticket key to go + straight to Jira.
+ Staleness is measured on last update, not on comments. Tickets with a + future due date, or labelled parked, are exempt. +

+
""" + + +# -------------------------------------------------------------------------- +# Markdown archive +# -------------------------------------------------------------------------- + +def render_markdown(m): + t, weekly = m["today"], m["mode"] == "weekly" + L = [f"## {t:%Y-%m-%d} ({t:%A}) — " + f"{'Weekly recap' if weekly else 'Daily'}", + "", f"*Covering {m['window_label']}*", ""] + + L.append(f"**Pulse:** {len(m['in_progress'])} in progress · " + f"{len(m['waiting'])} waiting · " + f"{len(m['today_events'])} scheduled today · " + f"{len(m['stale'])} needing attention · " + f"{len(m['closed_in_window'])} completed") + L.append("") + + if m["today_events"]: + L.append("### Scheduled today") + for r in m["today_events"]: + cust = f" [{r['customer']}]" if r["customer"] else "" + L.append(f"- **{r['key']}**{cust} {r['summary']} " + f"— {r['assignee'] or 'unassigned'}") + L.append("") + + # Per person, so the monthly roll-up can answer "what was X working on" + # without re-querying Jira. + L.append("### By person") + for pl in m["plates"]: + chips = [f'{len(pl["in_progress"])} in progress'] + if pl["waiting"]: + chips.append(f'{len(pl["waiting"])} waiting') + if pl["behind"]: + chips.append(f'{len(pl["behind"])} falling behind') + L.append(f"#### {pl['name']} — {' · '.join(chips)}") + if pl["behind"]: + L.append(f"- _Falling behind ({len(pl['behind'])}):_") + for r in pl["behind"]: + L.append(f" - **{r['key']}** {r['summary']} " + f"({r['status']}, idle {r['idle']}d, {r['tier'][2]})") + for label, items in (("Scheduled this week", pl["scheduled"]), + ("In progress", pl["in_progress"]), + ("Waiting", pl["waiting"]), + ("Queued", pl["todo"]), + ("Completed", pl["closed"])): + if not items: + continue + L.append(f"- _{label}:_") + for r in items: + cust = f" [{r['customer']}]" if r["customer"] else "" + due = f", due {r['due']:%d %b}" if r["due"] else "" + L.append(f" - **{r['key']}**{cust} {r['summary']}" + f" ({r['status']}{due}) · _{r['epic']}_") + if not pl["total"] and not pl["closed"]: + L.append("- _Nothing open._") + L.append("") + + if m["activity"]: + L.append("### Activity") + for r in m["activity"]: + L.append(f"- **{r['key']}** {r['summary']} " + f"— {r['assignee'] or 'unassigned'} ({r['status']})") + for c in r.get("comments", []): + ct = clean_comment(c["text"]) + txt = ct[:300] + ("…" if len(ct) > 300 else "") + L.append(f" - _{c['author']}, {c['created']:%d %b}_: {txt}") + if r["rollup"] and r["rollup"].get("recent"): + L.append(" - " + rollup_line(r["rollup"], links=False)) + L.append("") + + named = {n for n, _ in TEAM} + other_stale = [r for r in m["stale"] if r["assignee"] not in named] + if other_stale: + L.append("### Falling behind — elsewhere") + for r in other_stale[:5]: + L.append(f"- **{r['key']}** {r['summary']} — " + f"{r['assignee'] or 'unassigned'}, {r['status']}, " + f"idle {r['idle']}d ({r['tier'][2]})") + if len(other_stale) > 5: + L.append(f"- _+{len(other_stale) - 5} more over threshold_") + L.append("") + + L.append("---") + L.append("") + return "\n".join(L) + + +# -------------------------------------------------------------------------- +# Main +# -------------------------------------------------------------------------- + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument("--date") + ap.add_argument("--mode", choices=["daily", "weekly"]) + ap.add_argument("--outdir", default="/task-output") + ap.add_argument("--force", action="store_true", + help="run even at the weekend") + a = ap.parse_args() + + today = dt.date.fromisoformat(a.date) if a.date else dt.date.today() + if today.weekday() >= 5 and not a.force: + print(f"{today} is a weekend - no report. Use --force to override.") + return 0 + + mode = a.mode or ("weekly" if today.weekday() == 0 else "daily") + + jira = Jira() + base = os.environ["JIRA_BASE_URL"].rstrip("/") + m = build_model(jira, today, mode) + + os.makedirs(a.outdir, exist_ok=True) + stem = f"psact-report-{today:%Y-%m-%d}" + rich_path = os.path.join(a.outdir, f"{stem}.html") + mail_path = os.path.join(a.outdir, f"{stem}.email.html") + md_path = os.path.join(a.outdir, f"{stem}.md") + + with open(rich_path, "w") as f: + f.write(render_rich(m, base)) + with open(mail_path, "w") as f: + f.write(render_email(m, base, f"{stem}.html")) + with open(md_path, "w") as f: + f.write(render_markdown(m)) + + print(json.dumps({ + "date": str(today), "mode": mode, "window": m["window_label"], + "rich": rich_path, "email": mail_path, "markdown": md_path, + "counts": { + "in_progress": len(m["in_progress"]), "waiting": len(m["waiting"]), + "today": len(m["today_events"]), "stale": len(m["stale"]), + "activity": len(m["activity"]), + "completed": len(m["closed_in_window"]), + "unassigned": len(m["unassigned"]), + }}, indent=2)) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) From 699750305b7c6815787d78ead3af52c0b9dd7f44 Mon Sep 17 00:00:00 2001 From: Gary Jones Date: Wed, 19 Aug 2026 14:02:53 +0000 Subject: [PATCH 4/5] docs: add technical documentation for all cfdemo RPG source members Generate a technical reference document for every source member in cfdemo/qrpglesrc, written to docs/docs: - CUSTR (module/service program, embedded SQL data service) - custr_pr (/COPY member: cust_rec template + prototypes) - WRKCUSTR / WRKCUST1R (5250 list and detail) - WRKCUSTRO / WRKCUST1RO (Profound UI Rich Display list and detail) - WRKCUSTEO / WRKCUST1EO (Profound UI EJS screen-mode list and detail) - HELLOR (Hello World example) Each document covers invocation, control options and parameters, ILE structure (activation group and binding), dependency tree and Mermaid diagrams, full object list, DB2 for i schema and access paths, display file / Rich Display / EJS screen layout, program flow and key routines, indicators, error handling, security, interfaces, codermake build rules, related programs and testing scenarios. Also add docs/docs/README.md as an index with an application-level diagram and the cross-cutting notes (fixed CUSTR export signature, unhandled %date conversion on zero dates, subfile field truncation vs full-width filtering, unimplemented edit mode, EJS assets not deployed by codermake). Screen layouts, field positions, indicator effects and the RPGOA/EJS wiring were verified against the running application in an interactive session. Co-Authored-By: CoderFlow Learn more: https://coderflow.ai --- docs/CUSTR_PR_Technical_Documentation.md | 263 ++++++++++ docs/CUSTR_Technical_Documentation.md | 461 ++++++++++++++++++ docs/HELLOR_Technical_Documentation.md | 249 ++++++++++ docs/README.md | 89 ++++ docs/WRKCUST1EO_Technical_Documentation.md | 490 +++++++++++++++++++ docs/WRKCUST1RO_Technical_Documentation.md | 427 ++++++++++++++++ docs/WRKCUST1R_Technical_Documentation.md | 426 ++++++++++++++++ docs/WRKCUSTEO_Technical_Documentation.md | 509 +++++++++++++++++++ docs/WRKCUSTRO_Technical_Documentation.md | 514 ++++++++++++++++++++ docs/WRKCUSTR_Technical_Documentation.md | 538 +++++++++++++++++++++ 10 files changed, 3966 insertions(+) create mode 100644 docs/CUSTR_PR_Technical_Documentation.md create mode 100644 docs/CUSTR_Technical_Documentation.md create mode 100644 docs/HELLOR_Technical_Documentation.md create mode 100644 docs/README.md create mode 100644 docs/WRKCUST1EO_Technical_Documentation.md create mode 100644 docs/WRKCUST1RO_Technical_Documentation.md create mode 100644 docs/WRKCUST1R_Technical_Documentation.md create mode 100644 docs/WRKCUSTEO_Technical_Documentation.md create mode 100644 docs/WRKCUSTRO_Technical_Documentation.md create mode 100644 docs/WRKCUSTR_Technical_Documentation.md diff --git a/docs/CUSTR_PR_Technical_Documentation.md b/docs/CUSTR_PR_Technical_Documentation.md new file mode 100644 index 00000000..6bb5ee66 --- /dev/null +++ b/docs/CUSTR_PR_Technical_Documentation.md @@ -0,0 +1,263 @@ +# CUSTR_PR — Technical Documentation + +| | | +|---|---| +| **Program** | CUSTR_PR (copy member — produces no object of its own) | +| **Type** | */COPY source member* (compiled into every consumer) | +| **Language** | ILE RPG — fixed-format-tolerant free-form source | +| **Source** | `cfdemo/qrpglesrc/custr_pr.rpgle` | +| **IBM i target release** | Not specified (TGTRLS defaults to the build machine's release) | +| **Version / Author / Date** | 1.0 / Claude (Opus 5) / 2026-08-19 | + +### Revision History + +| Version | Date | Author | Change | Ref | +|---|---|---|---|---| +| 1.0 | 2026-08-19 | Claude (Opus 5) | Initial documentation | — | + +## 1. Overview + +`CUSTR_PR` is the shared interface member for the customer service layer of the `cfdemo` +application. It contains no executable code and creates no IBM i object. It declares: + +- `cust_rec` — an externally described, qualified **template** data structure over the `CUSTP` + physical file, used by every caller as the row/record type for a customer. +- Prototypes for the two procedures exported by the `CUSTR` service program: `cust_get` and + `cust_list`. + +It is pulled in with `/copy custr_pr.rpgle` by the service program that implements those +procedures and by every program that calls them, so the definition and the callers can never +drift apart. It is never invoked — it is a compile-time include only. + +**Consumers (all `/copy custr_pr.rpgle`):** + +| Consumer | Role | +|---|---| +| `CUSTR` (`custr.sqlrpgle`) | Implements `cust_get` / `cust_list` | +| `WRKCUSTR` | 5250 customer list | +| `WRKCUST1R` | 5250 customer detail | +| `WRKCUSTRO` | Rich Display (RPG Open Access) customer list | +| `WRKCUST1RO` | Rich Display customer detail | +| `WRKCUSTEO` | EJS screen-mode customer list | +| `WRKCUST1EO` | EJS screen-mode customer detail | + +## 2. Technical Specifications + +**Control Options** — none. A copy member inherits the `CTL-OPT` of the member that includes it. + +**Declarations provided** + +`cust_rec` — `dcl-ds cust_rec extname('CUSTP') qualified template end-ds;` + +Because it is `template`, no storage is allocated; callers declare their own instances with +`likeds(cust_rec)` (or arrays with `like(cust_rec) dim(n)`). Because it is `qualified`, all +subfields are referenced as `cust_rec.CUSTNO`, `customer.CNAME`, and so on — no subfield name +collides with a display-file field. The subfields are taken from `CUSTP` at compile time: + +| Subfield | Type | Length | Dec | +|---|---|---|---| +| `CUSTNO` | Packed | 6 | 0 | +| `CNAME` | Char | 40 | | +| `CADDR1` | Char | 40 | | +| `CADDR2` | Char | 40 | | +| `CCITY` | Char | 30 | | +| `CSTATE` | Char | 2 | | +| `CZIP` | Char | 10 | | +| `CPHONE` | Char | 15 | | +| `CEMAIL` | Char | 60 | | +| `CSTATUS` | Char | 1 | | +| `CTYPE` | Char | 1 | | +| `CLIMIT` | Packed | 11 | 2 | +| `CBALANCE` | Packed | 11 | 2 | +| `CLASTORD` | Zoned | 8 | 0 | +| `CCREATED` | Zoned | 8 | 0 | + +**Prototype: `cust_get`** — returns `varchar(80)`: an error message, or `''` on success. + +| Parameter | Data Type | Length | Direction | Description | +|---|---|---|---|---| +| `custno` | Packed (`like(cust_rec.custno)`) | 6,0 | In (`const`) | Customer number to retrieve | +| `customer` | DS `likeds(cust_rec)` | 271 bytes | Out | Receives the customer row; untouched when not found | +| `found` | Indicator | 1 | Out | `*on` when a row was returned | + +**Prototype: `cust_list`** — returns `varchar(80)`: an error message, or `''` on success. + +| Parameter | Data Type | Length | Direction | Description | +|---|---|---|---|---| +| `customers` | Array `like(cust_rec) dim(9999)` | 9999 elements | Out | Receives the matching rows, filled from element 1 | +| `limit` | Integer | 10i | In (`const`) | Maximum rows to return; callers pass `%elem(customers)` | +| `returned` | Integer | 10i | Out | Count of rows actually placed in `customers` | +| `filter` | Varchar | 50 | In (`const`, `options(*omit : *nopass)`) | Case-insensitive substring/prefix filter; omit or blank for all rows | + +Note the deliberate asymmetry: `customers` is prototyped `like(cust_rec) dim(9999)` (an array of +the record type) rather than `likeds(...)`, which is what allows a caller to pass a +`dim(9999)` data-structure array as one parameter. The array dimension is part of the prototype, +so a caller **must** declare exactly `dim(9999)` — a smaller array would be a storage overrun. + +**Files Used** — none. + +**Service Programs / Procedures Called** — none (declarations only). + +## 3. ILE Structure & Invocation + +Not applicable in its own right. The prototypes it declares resolve to **statically bound** calls +into the `CUSTR` `*SRVPGM`; the binding itself is contributed by each consumer's +`ctl-opt bnddir('CUST')`. + +## 4. Dependency Tree (text) + +``` +custr_pr.rpgle (/COPY member — no object) +├── Compile-time reference +│ └── CUSTP.FILE (PF) <- EXTNAME('CUSTP'), resolved from *LIBL at compile +├── Describes the interface of +│ └── CUSTR.SRVPGM +└── Included by + ├── custr.sqlrpgle -> CUSTR.MODULE / CUSTR.SRVPGM + ├── wrkcustr.rpgle -> WRKCUSTR.PGM + ├── wrkcust1r.rpgle -> WRKCUST1R.PGM + ├── wrkcustro.rpgle -> WRKCUSTRO.PGM + ├── wrkcust1ro.rpgle -> WRKCUST1RO.PGM + ├── wrkcusteo.rpgle -> WRKCUSTEO.PGM + └── wrkcust1eo.rpgle -> WRKCUST1EO.PGM +``` + +## 5. Dependency Diagram (Mermaid) + +```mermaid +flowchart TD + subgraph UI[Callers] + A[WRKCUSTR.PGM] + B[WRKCUST1R.PGM] + C[WRKCUSTRO.PGM] + D[WRKCUST1RO.PGM] + E[WRKCUSTEO.PGM] + F[WRKCUST1EO.PGM] + end + subgraph COPY[Shared Interface] + PR["custr_pr.rpgle
cust_rec template + prototypes"] + end + subgraph SVC[Service Layer] + SRV[CUSTR.SRVPGM] + end + subgraph DATA[Data Layer] + PF["CUSTP.FILE
Customer Master"] + end + A --> PR + B --> PR + C --> PR + D --> PR + E --> PR + F --> PR + SRV --> PR + PR -->|EXTNAME at compile time| PF + PR -.->|prototypes bind to| SRV +``` + +## 6. Complete Object Dependency List + +**Copy Members** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `custr_pr` | Source only | n/a | `cfdemo/qrpglesrc/custr_pr.rpgle` | Customer record template + procedure prototypes | + +**Physical Files** (compile-time reference) + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUSTP` | *FILE (PF) | *LIBL (task library, then `CFDEMO`/`AIDEMOBASE`) | `cfdemo/qddssrc/custp.pf` | Customer master; supplies `cust_rec` subfields | + +**Exported Procedures described** + +| Procedure | Return | Description | +|---|---|---| +| `cust_get` | `varchar(80)` error text | Retrieve one customer by number | +| `cust_list` | `varchar(80)` error text | Retrieve a filtered, limited, ordered customer list | + +## 7. Database Schema & Access (DB2 for i) + +The member itself performs no I/O, but it binds the application's record layout to `CUSTP`. +See §7 of `CUSTR_Technical_Documentation.md` for the full `CUSTP` layout, key, and access notes. +Because the DS is externally described, **any change to `custp.pf` changes this interface**: every +consumer must be recompiled, and if the change alters the total record length the service +program's callers and the service program must be rebuilt together. + +## 8. Display File Layout + +Not applicable. + +## 9. Program Flow (Mermaid) & Key Routines + +Not applicable — no executable code. + +## 10. Indicators Used + +Not applicable. + +## 11. Error & Exception Handling + +Not applicable at runtime. At compile time, a missing or unfindable `CUSTP` in the compiling job's +library list fails the compile of every consumer with an RNF-series "external file not found" +diagnostic — which is the usual symptom when a task library was recreated but `custp.file` was +never built into it. + +## 12. Security & Authority + +Not applicable (no object). Compile requires `*USE` authority to `CUSTP`. + +## 13. Interfaces & Integration + +Not applicable. + +## 14. Batch / Job Flow + +Not applicable. + +## 15. Build & Compile + +No build target of its own. It appears as a **normal prerequisite** in `Rules.mk` for every +consumer, so editing it correctly forces all of them to recompile: + +```makefile +custr.module: qrpglesrc/custr.sqlrpgle qrpglesrc/custr_pr.rpgle qddssrc/custp.pf | custp.file +wrkcustr.pgm: qrpglesrc/wrkcustr.rpgle qddssrc/wrkcustd.dspf qrpglesrc/custr_pr.rpgle custr.srvpgm | wrkcustd.file cust.bnddir +wrkcust1r.pgm: qrpglesrc/wrkcust1r.rpgle qddssrc/wrkcust1d.dspf qrpglesrc/custr_pr.rpgle custr.srvpgm | wrkcust1d.file cust.bnddir +wrkcustro.pgm: qrpglesrc/wrkcustro.rpgle qddssrc/wrkcustdo.json qrpglesrc/custr_pr.rpgle custr.srvpgm | wrkcustdo.file cust.bnddir +wrkcust1ro.pgm: qrpglesrc//wrkcust1ro.rpgle qddssrc/wrkcust1do.json qrpglesrc/custr_pr.rpgle custr.srvpgm | wrkcust1do.file cust.bnddir +wrkcusteo.pgm: qrpglesrc/wrkcusteo.rpgle qddssrc/wrkcusteo.json qrpglesrc/custr_pr.rpgle custr.srvpgm | wrkcusteo.file cust.bnddir +wrkcust1eo.pgm: qrpglesrc/wrkcust1eo.rpgle qddssrc/wrkcust1eo.json qrpglesrc/custr_pr.rpgle custr.srvpgm | wrkcust1eo.file cust.bnddir +``` + +Build with `codermake `; never issue the create commands by hand. + +**Maintenance rule:** a change to a prototype here must be matched in `custr.sqlrpgle`, and if the +export list or parameter list changes, `qsrvsrc/custr.bnd` and its signature must be reviewed — +otherwise callers fail at bind time or, worse, at runtime with a signature-violation escape +message (MCH4431). + +## 16. Related Programs + +| Program | Description | Relationship | +|---|---|---| +| `CUSTR` | Customer data service program | Implements the prototypes declared here | +| `WRKCUSTR` / `WRKCUST1R` | 5250 list / detail | Consumers | +| `WRKCUSTRO` / `WRKCUST1RO` | Rich Display list / detail | Consumers | +| `WRKCUSTEO` / `WRKCUST1EO` | EJS list / detail | Consumers | + +## 17. Testing Notes + +Nothing to test directly. Verify by compiling a consumer: a clean compile of `custr.module` plus +one caller proves the template and prototypes resolve. After any change, rebuild `custr.srvpgm` +**and** all six consumer programs before testing, so no caller is left bound to a stale signature. + +## 18. Version Information + +| Attribute | Value | +|---|---| +| Source Format | Free-form declarations, written in columns 8+ (no `**FREE` header) | +| ILE Compatible | Yes | +| Activation Group | Inherited from the including module | +| Uses Embedded SQL | No | +| Multi-threaded | Not declared | +| Target Release (TGTRLS) | Inherited from the including module | diff --git a/docs/CUSTR_Technical_Documentation.md b/docs/CUSTR_Technical_Documentation.md new file mode 100644 index 00000000..112e6656 --- /dev/null +++ b/docs/CUSTR_Technical_Documentation.md @@ -0,0 +1,461 @@ +# CUSTR — Technical Documentation + +| | | +|---|---| +| **Program** | CUSTR | +| **Type** | *MODULE → *SRVPGM (bound as `CUSTR.SRVPGM`) | +| **Language** | SQLRPGLE — ILE RPG free-form (`**FREE`) with embedded SQL | +| **Source** | `cfdemo/qrpglesrc/custr.sqlrpgle` (module), `cfdemo/qsrvsrc/custr.bnd` (export list) | +| **IBM i target release** | Not specified (TGTRLS defaults to the build machine's release) | +| **Version / Author / Date** | 1.0 / Claude (Opus 5) / 2026-08-19 | + +### Revision History + +| Version | Date | Author | Change | Ref | +|---|---|---|---|---| +| 1.0 | 2026-08-19 | Claude (Opus 5) | Initial documentation | — | + +## 1. Overview + +`CUSTR` is the **customer data service program** for the `cfdemo` application: the single place +where customer rows are read out of `CUSTP`. It is a `NOMAIN` module — there is no main +procedure and it cannot be `CALL`ed — exporting two procedures: + +- `cust_get` — fetch one customer by number. +- `cust_list` — fetch an ordered, limited, optionally filtered list of customers. + +All database access is **set-based embedded SQL**; no native record-level access (no `DCL-F`, +no `CHAIN`/`READ`). Every UI variant of the application (5250, Profound UI Rich Display, and EJS +screen mode) calls these same two procedures, which is the point of the design: six front ends, +one data path. + +**How it is invoked:** statically bound procedure calls only. Callers `/copy custr_pr.rpgle` for the +prototypes and specify `ctl-opt bnddir('CUST')`; the `CUST` binding directory resolves `CUSTR` at +bind time and the service program is activated on first call. + +## 2. Technical Specifications + +**Control Options** + +| Option | Value | Description | +|---|---|---| +| `NOMAIN` | (from `ctl-opt nomain`) | No main procedure; module contains only subprocedures. Implies `DFTACTGRP(*NO)` — it can only be bound into a program or service program. | +| `DFTACTGRP` | n/a | Not coded; a `NOMAIN` module cannot run in the default activation group | +| `ACTGRP` | *(not coded here)* | The activation group is fixed on the **`CRTSRVPGM`** command, not in source. codermake creates the service program without an `ACTGRP` override, so it takes the `CRTSRVPGM` default `ACTGRP(*CALLER)` — see §3. | +| `BNDDIR` | *(none)* | The module has no outbound bindings of its own | +| `OPTION` | *(compiler default)* | Not overridden in source | +| `THREAD` | *(not coded)* | Not declared thread-safe | + +**SQL options** (set with `EXEC SQL SET OPTION`, so they apply to this module's SQL only) + +| Option | Value | Why it matters | +|---|---|---| +| `COMMIT` | `*NONE` | No commitment control. Reads do not take commit locks and no commitment definition is started for the activation group. This is deliberate: `CUSTP` is a DDS physical file and is not journaled by the build. | +| `CLOSQLCSR` | `*ENDMOD` | Cursors and prepared statements are closed when the **module** ends, not when the first call returns. Cursor `C1` therefore stays open/reusable across calls within one activation, and is cleaned up when the activation group is reclaimed. | + +**Input Parameters** — none at module level. Per-procedure parameters: + +`cust_get(custno : customer : found)` → `varchar(80)` + +| Parameter | Data Type | Length | Direction | Description | +|---|---|---|---|---| +| `custno` | Packed `like(cust_rec.custno)` | 6,0 | In (`const`) | Customer number to retrieve | +| `customer` | DS `likeds(cust_rec)` | 271 bytes | Out | Receives the row; **left unchanged when not found** | +| `found` | Indicator | 1 | Out | `*on` if a row was returned (`SQLCODE <> 100`) | +| *(return value)* | Varchar | 80 | Out | `''` on success, else `Error retrieving customer. SQLCODE = nnn, SQLSTATE = xxxxx` | + +`cust_list(customers : limit : returned [: filter])` → `varchar(80)` + +| Parameter | Data Type | Length | Direction | Description | +|---|---|---|---|---| +| `customers` | Array `like(cust_rec) dim(9999)` | 9999 × 271 bytes | Out | Rows written from element 1 upward | +| `limit` | Integer | 10i 0 | In (`const`) | Stop after this many rows | +| `returned` | Integer | 10i 0 | Out | Number of rows placed in `customers` | +| `filter` | Varchar | 50 | In (`const`, `options(*omit : *nopass)`) | Case-insensitive filter; omitted/blank returns everything | +| *(return value)* | Varchar | 80 | Out | `''` on success, else `Error retrieving customer list. SQLCODE = nnn, SQLSTATE = xxxxx` | + +**Files Used** + +| File | Type | Usage | Access | Description | +|---|---|---|---|---| +| `CUSTP` | DISK (via SQL) | Input | Set-based SQL (`SELECT`, cursor `C1`) | Customer master; referenced unqualified, resolved through the job's library list | + +**Service Programs / Procedures Called** + +| Service Program | Procedure | Bound/Dynamic | Description | +|---|---|---|---| +| *(SQL runtime)* | `QSQ*` internals | Bound by the SQL precompiler | Generated by `CRTSQLRPGI`; not referenced in source | + +## 3. ILE Structure & Invocation + +- **Activation group** — `CRTSRVPGM` is issued by codermake without an `ACTGRP` parameter, so the + service program takes the default **`ACTGRP(*CALLER)`**: it activates inside whichever activation + group its caller runs in. Every caller in this application specifies `ACTGRP(*NEW)`, so in + practice `CUSTR` gets a fresh activation per program invocation, its SQL cursor state is private + to that invocation, and it is reclaimed automatically when the calling program ends. Two nested + callers (`WRKCUSTR` → `WRKCUST1R`) each run in their own `*NEW` group and therefore each get their + **own** activation of `CUSTR` — nothing is shared between them, including cursor `C1`. +- **Binding** — static. Exports are controlled by a binder-language source member, so the + signature is stable and callers do not need recompiling when unrelated procedures are added + *at the end* of the export list. + + `cfdemo/qsrvsrc/custr.bnd`: + + ``` + strpgmexp pgmlvl(*current) signature('CUSTR ') + export symbol("CUST_GET") + export symbol("CUST_LIST") + endpgmexp + ``` + + The signature is the **fixed literal `'CUSTR '`** (16 characters, blank-padded) rather + than a generated hash. Consequence to understand before changing anything: because the signature + never changes, the binder will *not* detect an incompatible interface change. If a parameter list + is altered and only the service program is rebuilt, existing callers keep binding successfully and + fail (or silently corrupt data) at runtime. Always rebuild all six callers with the service program. + + | Exported procedure | Signature | + |---|---| + | `CUST_GET` | `varchar(80) cust_get(packed(6:0) const; likeds(cust_rec); ind)` | + | `CUST_LIST` | `varchar(80) cust_list(like(cust_rec) dim(9999); int(10) const; int(10); varchar(50) const options(*omit:*nopass))` | + +- **Call hierarchy** — called by `WRKCUSTR`, `WRKCUST1R`, `WRKCUSTRO`, `WRKCUST1RO`, `WRKCUSTEO`, + `WRKCUST1EO`. Calls nothing outside the SQL runtime. + +```mermaid +flowchart LR + L1[WRKCUSTR.PGM] ==>|bound| SRV[CUSTR.SRVPGM] + L2[WRKCUST1R.PGM] ==>|bound| SRV + L3[WRKCUSTRO.PGM] ==>|bound| SRV + L4[WRKCUST1RO.PGM] ==>|bound| SRV + L5[WRKCUSTEO.PGM] ==>|bound| SRV + L6[WRKCUST1EO.PGM] ==>|bound| SRV + SRV ==>|"embedded SQL"| PF[CUSTP.FILE] +``` + +## 4. Dependency Tree (text) + +``` +CUSTR.SRVPGM +├── Modules +│ └── CUSTR.MODULE +│ └── Source +│ ├── custr.sqlrpgle +│ └── custr_pr.rpgle (/COPY member: cust_rec template + prototypes) +├── Export List +│ └── custr.bnd (binder language, signature 'CUSTR ') +├── Binding Directory (published through) +│ └── CUST.BNDDIR (addbnddire obj((custr *srvpgm *immed))) +└── Database + └── CUSTP.FILE (PF, keyed on CUSTNO, record format CUSMSTR) +``` + +## 5. Dependency Diagram (Mermaid) + +```mermaid +flowchart TD + subgraph UI[Callers] + C1[WRKCUSTR / WRKCUST1R] + C2[WRKCUSTRO / WRKCUST1RO] + C3[WRKCUSTEO / WRKCUST1EO] + end + subgraph BND[Binding] + BD["CUST.BNDDIR
custr *SRVPGM *IMMED"] + EXP["custr.bnd
signature 'CUSTR'"] + end + subgraph SVC[Service Layer] + SRV["CUSTR.SRVPGM
cust_get / cust_list"] + MOD["CUSTR.MODULE
NOMAIN, embedded SQL"] + end + subgraph DATA[Data Layer] + PF["CUSTP.FILE
CUSMSTR, key CUSTNO"] + end + C1 --> BD + C2 --> BD + C3 --> BD + BD --> SRV + EXP --> SRV + MOD --> SRV + SRV -->|"SELECT INTO / cursor C1"| PF +``` + +## 6. Complete Object Dependency List + +**Service Programs** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUSTR` | *SRVPGM | `$IBMI_BUILD_LIBRARY` (e.g. `AITSK00104`) / `CFDEMO` | `qsrvsrc/custr.bnd` + `custr.module` | Customer data service | + +**Modules** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUSTR` | *MODULE | build library | `qrpglesrc/custr.sqlrpgle` | `NOMAIN` SQL data-access module | + +**Physical Files** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUSTP` | *FILE (PF) | *LIBL | `qddssrc/custp.pf` | Customer master | + +**Binding Directories** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUST` | *BNDDIR | build library | `cfdemo/cust.bnddir` | Publishes `CUSTR *SRVPGM *IMMED` to callers | + +**Copy Members** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `custr_pr` | Source | n/a | `qrpglesrc/custr_pr.rpgle` | `cust_rec` template + prototypes | + +**Exported Procedures** + +| Procedure | Return | Description | +|---|---|---| +| `CUST_GET` | `varchar(80)` | Retrieve one customer by number | +| `CUST_LIST` | `varchar(80)` | Retrieve a filtered/limited customer list | + +## 7. Database Schema & Access (DB2 for i) + +**`CUSTP` — Customer Master (record format `CUSMSTR`, DDS physical file)** + +| Field | Type | Length | Dec | Null | Description | +|---|---|---|---|---|---| +| `CUSTNO` | Packed | 6 | 0 | N | Customer number (key) | +| `CNAME` | Char | 40 | | N | Customer name | +| `CADDR1` | Char | 40 | | N | Address line 1 | +| `CADDR2` | Char | 40 | | N | Address line 2 | +| `CCITY` | Char | 30 | | N | City | +| `CSTATE` | Char | 2 | | N | State code | +| `CZIP` | Char | 10 | | N | Zip / postal code | +| `CPHONE` | Char | 15 | | N | Phone number | +| `CEMAIL` | Char | 60 | | N | Email address | +| `CSTATUS` | Char | 1 | | N | Status: `A`=Active, `I`=Inactive, `S`=Suspended | +| `CTYPE` | Char | 1 | | N | Type: `B`=Business, `R`=Residential | +| `CLIMIT` | Packed | 11 | 2 | N | Credit limit | +| `CBALANCE` | Packed | 11 | 2 | N | Current balance | +| `CLASTORD` | Zoned | 8 | 0 | N | Last order date, `YYYYMMDD` | +| `CCREATED` | Zoned | 8 | 0 | N | Date created, `YYYYMMDD` | + +Record length 271 bytes. DDS defines no nullable fields, so all columns are `NOT NULL`. + +- **Keys & access paths** — `K CUSTNO`, a **non-unique** keyed access path (no `UNIQUE` keyword). + `cust_get`'s `WHERE CUSTNO = :custno` can use that path directly; `cust_list`'s + `ORDER BY CUSTNO` can be satisfied by it as well, though with a `LIKE '%…%'` predicate the + optimizer will normally choose a table scan plus sort. Note that because the key is *not* + unique, `cust_get`'s `SELECT … INTO` returns `SQLCODE +30` / `SQLSTATE 21000` + ("more than one row") if duplicate customer numbers ever exist — a positive SQLCODE, which + `checkError` (which only tests `sqlcode < 0`) does not report; `found` would still be set `*on` + and `customer` would hold the first row returned. The data is expected to be unique by + convention, not by constraint. +- **Referential integrity** — none defined in source. `ORDHDRP` / `ORDDTLP` exist in + `cfdemo/qddssrc` but declare no constraints referencing `CUSTP`. +- **Triggers** — none defined in source. +- **Journaling** — not established by the build. `CUSTP` is created with `CRTPF`, which does not + attach a journal; nothing in the sources issues `STRJRNPF`. (Only SQL-created tables in a task + library pick up journaling automatically.) +- **Commitment control** — explicitly disabled: `SET OPTION COMMIT = *NONE`. There are no + transaction boundaries, no `COMMIT`/`ROLLBACK`, and isolation is effectively read-uncommitted + with respect to other jobs' uncommitted changes. Appropriate here because the module is + read-only. + +**SQL statements** + +| # | Procedure | Statement | Notes | +|---|---|---|---| +| 1 | `cust_get` | `SELECT * INTO :customer FROM custp WHERE custno = :custno` | Whole-row fetch into the host DS. `SELECT *` relies on `cust_rec` matching `CUSTP` column-for-column — adding a column to `custp.pf` without recompiling breaks this at runtime (SQL0313/SQL0407-class errors). | +| 2 | `cust_list` | `DECLARE C1 CURSOR FOR SELECT * FROM custp WHERE :filter = '' OR (ucase(cname) LIKE '%'‖:filter‖'%' OR ucase(cemail) LIKE '%'‖:filter‖'%' OR cphone LIKE :filter‖'%') ORDER BY custno` | Non-scrollable, read-only, forward-only cursor | +| 3 | `cust_list` | `OPEN C1` / `FETCH C1 INTO :customer` (loop) / `CLOSE C1` | Row-at-a-time fetch into the host DS, copied into `customers(returned)` | + +Filter semantics worth knowing: the caller's text is upper-cased in RPG (`%upper`) before it +reaches SQL, and matched against `UCASE(CNAME)` and `UCASE(CEMAIL)` as a **substring**, or against +`CPHONE` as a **prefix** (`CPHONE` is *not* upper-cased — it needs no case folding). Passing a +blank filter, `*OMIT`, or omitting the parameter all return the unfiltered list because of the +`:filter = ''` short-circuit. + +## 8. Display File Layout + +Not applicable — no workstation file. + +## 9. Program Flow (Mermaid) & Key Routines + +```mermaid +flowchart TD + subgraph G1["cust_get"] + A1[Start] --> A2["found = *off"] + A2 --> A3["SELECT * INTO :customer
WHERE custno = :custno"] + A3 --> A4{"SQLCODE < 0?"} + A4 -->|Yes| A5["Return error text
with SQLCODE / SQLSTATE"] + A4 -->|No| A6{"SQLCODE = 100?"} + A6 -->|Yes| A7["found = *off"] + A6 -->|No| A8["found = *on"] + A7 --> A9["Return '' (no error)"] + A8 --> A9 + end +``` + +```mermaid +flowchart TD + B1[Start] --> B2{"%parms >= 4
and filter passed?"} + B2 -->|Yes| B3["filter = %upper(p_filter)"] + B2 -->|No| B4["filter stays blank"] + B3 --> B5["returned = 0"] + B4 --> B5 + B5 --> B6["DECLARE / OPEN cursor C1"] + B6 --> B7[FETCH C1] + B7 --> B8{"SQLCODE < 0?"} + B8 -->|Yes| B9["CLOSE skipped;
return error text"] + B8 -->|No| B10{"returned < limit
and SQLCODE <> 100?"} + B10 -->|Yes| B11["returned += 1
customers(returned) = customer"] + B11 --> B7 + B10 -->|No| B12["CLOSE C1"] + B12 --> B13["Return '' (no error)"] +``` + +**Key procedures and subroutines** + +| Routine | Kind | Purpose | +|---|---|---| +| `cust_get` | Exported procedure | Single-row retrieval by customer number | +| `cust_list` | Exported procedure | Filtered, ordered, limited list retrieval | +| `checkError` | Subroutine (one per procedure, local) | Tests `SQLCODE < 0`; on error `RETURN`s the formatted message straight out of the enclosing procedure | + +`checkError` is a subroutine that executes a `RETURN`, so `EXSR checkError` doubles as "bail out on +SQL error". Two consequences: the cursor is **not** closed on the error path in `cust_list` +(cleanup is left to `CLOSQLCSR(*ENDMOD)` when the activation group ends), and the two `checkError` +subroutines are separate local copies — each procedure has its own. + +## 10. Indicators Used + +None. The module uses no numbered indicators; `found` is a named `ind` output parameter and control +flow is structured (`DOW`, `IF`, `SELECT`). SQL state is tested through `SQLCODE`/`SQLSTATE`, which +the precompiler supplies. + +## 11. Error & Exception Handling + +**Strategy — return codes, not exceptions.** Neither procedure uses `MONITOR`/`ON-ERROR`, a `*PSSR`, +a PSDS, or an INFDS. Both are written to be non-throwing for expected conditions and to hand the +caller a human-readable string: + +| Condition | Detection | Result to caller | +|---|---|---| +| Row found | `SQLCODE <> 100` | `found = *on`, return value `''` | +| Row not found | `SQLCODE = 100` | `found = *off`, return value `''` — **not** an error | +| SQL failure (e.g. file not found, authority, decimal data error) | `SQLCODE < 0` in `checkError` | Return `'Error retrieving customer. SQLCODE = -nnn, SQLSTATE = xxxxx'` (or `'... customer list. ...'`), and the procedure exits immediately | +| Multiple rows for one `CUSTNO` | Not tested (`SQLCODE +30`) | Silently treated as success with the first row | + +**Messages** — the module sends no program messages; it does not use `QMHSNDPM` and does not +signal escape messages. Callers decide how to surface the returned text: `WRKCUSTR` / `WRKCUSTRO` +put it in a message subfile via `QMHSNDPM`; `WRKCUSTEO` assigns it to the screen's `msg` field. + +**Unhandled conditions** — an unexpected RPG runtime exception (for example a decimal data error +while copying a corrupt row into the array) is *not* trapped here and percolates to the caller's +default handler, producing an inquiry message and, unanswered, an RNX-series dump. If hardening is +wanted, a `MONITOR` around each SQL block plus a `*PSSR` in each procedure is the minimal change. + +**Recovery** — all failures are read-side and non-destructive (no writes, no commitment control), +so the recovery procedure is: read the returned SQLCODE/SQLSTATE from the screen message, then check +the usual causes — `CUSTP` missing from the job's library list, no `*USE` authority to `CUSTP`, or +a `CUSTP` layout that no longer matches the compiled `cust_rec` template. + +## 12. Security & Authority + +- No adopted authority: `CRTSRVPGM` is issued without `USRPRF(*OWNER)`, so the service program runs + under the **caller's** authority (`USRPRF(*USER)` default). A user who cannot read `CUSTP` gets an + SQL failure returned as message text rather than a security exception at the screen. +- Object ownership is whichever profile ran the build (`$IBMI_USER`); public authority follows the + build library's `CRTAUT`. No authorization list (`*AUTL`) is referenced in source. +- The module needs only `*USE` on `CUSTP`; it performs no updates, deletes or inserts. +- Data sensitivity: `CUSTP` holds names, addresses, email, phone, credit limit and balance. No + field procedures, encryption or masking are defined, and the module returns whole rows to every + caller — access control is entirely at the object level. + +## 13. Interfaces & Integration + +Not applicable — no data queues, data areas, web services, IFS or MQ usage. The only interface is +the bound procedure interface in §2. + +## 14. Batch / Job Flow + +Not applicable — activated on demand inside interactive callers. + +## 15. Build & Compile + +Build order: `custp.file` → `custr.module` → `custr.srvpgm` → `cust.bnddir` → callers. + +``` +CRTSQLRPGI OBJ(/CUSTR) OBJTYPE(*MODULE) SRCSTMF('cfdemo/qrpglesrc/custr.sqlrpgle') +CRTSRVPGM SRVPGM(/CUSTR) MODULE(/CUSTR) EXPORT(*SRCFILE) SRCSTMF('cfdemo/qsrvsrc/custr.bnd') +``` + +`Rules.mk`: + +```makefile +custr.module: qrpglesrc/custr.sqlrpgle qrpglesrc/custr_pr.rpgle qddssrc/custp.pf | custp.file +custr.srvpgm: custr.module qsrvsrc/custr.bnd +cust.bnddir: cust.bnddir +``` + +Build it with codermake — never issue the create commands by hand: + +```bash +cd /workspace/workspace/ibmi-agentic +codermake custr.srvpgm +``` + +Notes that matter when building: + +- The `.sqlrpgle` extension is what selects `CRTSQLRPGI`; the SQL precompile runs first and its + diagnostics appear ahead of the RPG listing in `tmp/logs/custr.module.log`. +- `custp.file` is an **order-only** prerequisite: `CUSTP` must exist to compile (the `EXTNAME` + template needs it), but a rebuild of the file does not force a module rebuild. Be careful not to + rebuild `custp.file` casually in a task library — that creates an *empty* `CUSTP` that shadows the + populated base-library copy. +- `cust.bnddir` is a CL-script source (`CRTBNDDIR` + `ADDBNDDIRE`), not a DDS member. + +## 16. Related Programs + +| Program | Description | Relationship | +|---|---|---| +| `WRKCUSTR` | 5250 customer list | Caller (`cust_get`, `cust_list`) | +| `WRKCUST1R` | 5250 customer detail | Caller (`cust_get`) | +| `WRKCUSTRO` | Rich Display customer list | Caller (`cust_get`, `cust_list`) | +| `WRKCUST1RO` | Rich Display customer detail | Caller (`cust_get`) | +| `WRKCUSTEO` | EJS customer list | Caller (`cust_get`, `cust_list`) | +| `WRKCUST1EO` | EJS customer detail | Caller (`cust_get`) | +| `custr_pr` | Prototype copy member | Declares this module's interface | + +## 17. Testing Notes + +The service program has no UI, so exercise it through a caller (menu option 1, 2 or 3) or a small +driver program. Scenarios: + +| Scenario | Setup | Expected result | +|---|---|---| +| Get existing customer | Known `CUSTNO` in `CUSTP` | `found = *on`, return `''`, all 15 fields populated | +| Get missing customer | `CUSTNO` not in `CUSTP` | `found = *off`, return `''`, `customer` unchanged (caller must not display it) | +| List unfiltered | Blank filter | Rows returned in ascending `CUSTNO` order, `returned` ≤ `limit` | +| List with name filter | Filter matching part of a `CNAME`, mixed case | Case-insensitive substring match | +| List with email filter | Filter matching part of a `CEMAIL` | Case-insensitive substring match | +| List with phone filter | Leading digits of a `CPHONE` | Prefix match only — a middle-of-string phone fragment must **not** match | +| Limit honoured | `limit` smaller than the matching row count | Exactly `limit` rows, no error | +| No matches | Filter matching nothing | `returned = 0`, return `''` | +| SQL failure path | Remove `CUSTP` from the library list, or revoke `*USE` | Return text contains a negative SQLCODE and the SQLSTATE | + +No automated (RPGUnit) tests exist in the repository. A `NOMAIN` module is a natural RPGUnit +target if test coverage is wanted later. + +## 18. Version Information + +| Attribute | Value | +|---|---| +| Source Format | Fully free-format (`**FREE`) | +| ILE Compatible | Yes (ILE only — `NOMAIN`) | +| Activation Group | `*CALLER` (CRTSRVPGM default; callers use `*NEW`) | +| Uses Embedded SQL | Yes (`CRTSQLRPGI OBJTYPE(*MODULE)`) | +| Multi-threaded | No (`THREAD` not declared) | +| Commitment Control | `*NONE` | +| Target Release (TGTRLS) | Compiler default (build machine's release) | diff --git a/docs/HELLOR_Technical_Documentation.md b/docs/HELLOR_Technical_Documentation.md new file mode 100644 index 00000000..4d420e42 --- /dev/null +++ b/docs/HELLOR_Technical_Documentation.md @@ -0,0 +1,249 @@ +# HELLOR — Technical Documentation + +| | | +|---|---| +| **Program** | HELLOR | +| **Type** | *PGM | +| **Language** | ILE RPG, fully free-format (`**FREE`) | +| **Source** | `cfdemo/qrpglesrc/hellor.rpgle` | +| **IBM i target release** | Not specified (TGTRLS defaults to the build machine's release) | +| **Version / Author / Date** | 1.0 / Claude (Opus 5) / 2026-08-19 | + +### Revision History + +| Version | Date | Author | Change | Ref | +|---|---|---|---|---| +| 1.0 | 2026-08-19 | Claude (Opus 5) | Initial documentation | — | + +## 1. Overview + +`HELLOR` is the smallest example in the `cfdemo` repository: a five-line "Hello World" program that +displays the `HELLOD` screen in a loop until F3 is pressed. Its purpose is to demonstrate the +minimum viable RPG + DDS pair and to give the build tooling a trivial target to verify against. + +It is **not** wired to the `MENU` menu (which offers only options 1, 2, 3 and 90) and takes no +parameters, so it is reached by an explicit `CALL HELLOR` from a command line, an interactive +session, or a CL driver. + +Behavioural note worth recording: the screen has an input field `NAME` and an output field +`MESSAGE`, but the program never reads `NAME` into anything or assigns `MESSAGE`. Whatever the user +types is returned by `EXFMT` into the field, then redisplayed unchanged on the next iteration, and +`MESSAGE` always stays blank. It is a display-only stub — if this is meant to greet the user, the +missing logic is the assignment of `MESSAGE`. + +## 2. Technical Specifications + +**Control Options** + +No `CTL-OPT` statement is coded, so every control option takes its compiler default. The one that +matters: + +| Option | Value | Description | +|---|---|---| +| `DFTACTGRP` | `*YES` (`CRTBNDRPG` default) | The program runs in the **default activation group** (OPM-compatible behaviour). It cannot bind to service programs, and it is not reclaimed by `RCLACTGRP`. | +| `ACTGRP` | n/a | Not applicable while `DFTACTGRP(*YES)` | +| `BNDDIR` | *(none)* | No bindings | +| `OPTION` | *(compiler default)* | Not overridden | +| `THREAD` | *(not coded)* | Not declared thread-safe | + +**Input Parameters** — none. There is no `DCL-PI *ENTRY`; the program is called with no arguments. + +**Files Used** + +| File | Type | Usage | Access | Description | +|---|---|---|---|---| +| `HELLOD` | WORKSTN | Update (`EXFMT`) | Record format `SCREEN` | Single-format 24×80 display file | + +No database files are used. + +**Service Programs / Procedures Called** — none. + +## 3. ILE Structure & Invocation + +- **Activation group** — the default activation group (`DFTACTGRP(*YES)`). This is the only program + in the repository that is not ILE-scoped; consequently it cannot be given a `BNDDIR` and cannot + call the `CUSTR` service program. If it ever needs to, it must first be changed to + `ctl-opt dftactgrp(*no) actgrp(*new);` like the other programs here. +- **Binding** — none. Built directly from source with `CRTBNDRPG`; no modules, no service programs. +- **Call hierarchy** — no callers in the repository (not on the menu, not called by any other + source member); calls nothing. + +## 4. Dependency Tree (text) + +``` +HELLOR.PGM +├── Source +│ └── hellor.rpgle +└── Display Files + └── HELLOD.FILE (DSPF, format SCREEN) +``` + +## 5. Dependency Diagram (Mermaid) + +```mermaid +flowchart TD + subgraph UI[User Interface Layer] + PGM["HELLOR.PGM
Hello World example"] + end + subgraph DSP[Display Files] + DSPF["HELLOD.FILE
format SCREEN"] + end + PGM -->|EXFMT SCREEN| DSPF +``` + +## 6. Complete Object Dependency List + +**Programs** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `HELLOR` | *PGM | `$IBMI_BUILD_LIBRARY` (e.g. `AITSK00104`) / `CFDEMO` | `cfdemo/qrpglesrc/hellor.rpgle` | Hello World example | + +**Display Files** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `HELLOD` | *FILE (DSPF) | build library | `cfdemo/qddssrc/hellod.dspf` | Single-format example screen | + +No modules, service programs, logical files, data areas, data queues, message files or copy members +are involved. + +## 7. Database Schema & Access (DB2 for i) + +Not applicable — no database access. + +## 8. Display File Layout + +`HELLOD`, `DSPSIZ(24 80 *DS3)`, one record format: `SCREEN`. + +``` + 1 Hello World Example + 2 + 3 Enter your name: [________________________________________________] + 4 + 5 MESSAGE (70 characters, output — never populated by the program) + ... +23 F3=Exit +``` + +| Field | Length | Type (I/O/Both) | Row/Col | Description | +|---|---|---|---|---| +| `NAME` | 50A | I (input only) | 3, 19 | Name entry; `CHECK(LC)` allows lower case | +| `MESSAGE` | 70A | O (output only) | 5, 2 | Intended for the greeting; left blank by the program | + +**Constants / attributes** + +| Row/Col | Text | Attribute | +|---|---|---| +| 1, 2 | `Hello World Example` | `COLOR(WHT)` | +| 3, 2 | `Enter your name:` | default | +| 23, 1 | `F3=Exit` | `COLOR(BLU)` | + +**Keyword highlights** — `CA03(03 'Exit')` sets `*IN03` when F3 is pressed. `CA` (rather than `CF`) +means the input fields are **not** returned to the program on F3 — appropriate here since the loop +simply ends. `CHECK(LC)` on `NAME` permits mixed-case entry (without it the workstation would fold +to upper case). No subfiles, no windows, no validity-checking keywords, no edit codes. + +## 9. Program Flow (Mermaid) & Key Routines + +```mermaid +flowchart TD + A[Start] --> B{"*IN03 on?"} + B -->|No| C["EXFMT SCREEN
(display, wait, read)"] + C --> B + B -->|Yes| D["*INLR = *ON"] + D --> E[End] +``` + +No subroutines or subprocedures — the entire program is the main body. + +## 10. Indicators Used + +| Indicator | Purpose | +|---|---| +| `*IN03` | Set by `CA03` when F3 is pressed; terminates the `DOW` loop | +| `*INLR` | Set `*ON` at the end so the program closes its file and returns cleanly | + +No other indicators are used, and the program declares no named indicators. + +## 11. Error & Exception Handling + +**None is coded.** There is no `MONITOR`/`ON-ERROR`, no `*PSSR`, no PSDS or INFDS, and no `(E)` +error extenders. Any exception — the most likely being a workstation-file open failure if `HELLOD` +is not in the library list, or a device error if the session is dropped mid-`EXFMT` — percolates to +the RPG default handler, producing an inquiry message (`RNQ`-series) and a formatted dump if the +inquiry is not answered `G`. + +Recovery is simply to end the program and re-`CALL` it after correcting the library list. For a +program this size the absence of handling is acceptable; if it is used as a template for real work, +add a `*PSSR`. + +## 12. Security & Authority + +No adopted authority (`USRPRF(*USER)` default), no authorization list, no sensitive data. The caller +needs `*USE` on `HELLOR` and `HELLOD`. Object ownership is the building profile (`$IBMI_USER`); +public authority follows the build library's `CRTAUT`. + +## 13. Interfaces & Integration + +Not applicable. + +## 14. Batch / Job Flow + +Not applicable — interactive only; it requires a workstation device and cannot run in batch. + +## 15. Build & Compile + +``` +CRTDSPF FILE(/HELLOD) SRCFILE(/QDDSSRC) +CRTBNDRPG PGM(/HELLOR) SRCSTMF('cfdemo/qrpglesrc/hellor.rpgle') +``` + +`Rules.mk`: + +```makefile +hellod.file: qddssrc/hellod.dspf +hellor.pgm: qrpglesrc/hellor.rpgle qddssrc/hellod.dspf | hellod.file +``` + +Build with codermake — never issue the create commands by hand: + +```bash +cd /workspace/workspace/ibmi-agentic +codermake hellor.pgm +``` + +`hellod.dspf` appears twice on purpose: as a **normal** prerequisite (edit the DDS and the program +recompiles, picking up the new record format) and as an **order-only** prerequisite via +`hellod.file` (the display file object must exist before the program compiles, but rebuilding the +object alone does not force a program rebuild). + +## 16. Related Programs + +| Program | Description | Relationship | +|---|---|---| +| `TN510L` | Minimal ILE COBOL example (`cfdemo/qcbllesrc/tn510l.cblle`) | Alternate — the COBOL equivalent of this "smallest possible program" example | + +No caller/callee relationships exist. + +## 17. Testing Notes + +| Scenario | Steps | Expected result | +|---|---|---| +| Screen displays | `CALL HELLOR` from a 5250 session | "Hello World Example" heading, name prompt, `F3=Exit` on line 23 | +| Loop persists | Type a name, press Enter | Screen redisplays; typed text is still in `NAME`; `MESSAGE` remains blank | +| Exit works | Press F3 | Program ends, session returns to the caller | +| Lower case allowed | Type `mixed Case` and press Enter | Text is preserved as typed (`CHECK(LC)`) | + +No automated tests exist. + +## 18. Version Information + +| Attribute | Value | +|---|---| +| Source Format | Fully free-format (`**FREE`) | +| ILE Compatible | Yes (built with `CRTBNDRPG`, but runs in the default activation group) | +| Activation Group | Default activation group (`DFTACTGRP(*YES)`) | +| Uses Embedded SQL | No | +| Multi-threaded | No | +| Target Release (TGTRLS) | Compiler default (build machine's release) | diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 00000000..cd394d02 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,89 @@ +# cfdemo RPG Technical Documentation + +Technical reference documents for every source member in `cfdemo/qrpglesrc`, generated from the +sources in this repository (no IBM i object interrogation). Each document follows the same 18-section +structure: overview, technical specifications, ILE structure, dependency tree and diagram, object +list, database access, screen layout, program flow, indicators, error handling, security, interfaces, +build, related programs, testing notes and version information. + +## Documents + +| Object | Type | Document | What it is | +|---|---|---|---| +| `CUSTR` | *MODULE → *SRVPGM | [CUSTR_Technical_Documentation.md](CUSTR_Technical_Documentation.md) | Customer data service program — the only code that touches `CUSTP` (embedded SQL, `NOMAIN`) | +| `custr_pr` | /COPY member | [CUSTR_PR_Technical_Documentation.md](CUSTR_PR_Technical_Documentation.md) | Shared `cust_rec` template and the `cust_get` / `cust_list` prototypes | +| `WRKCUSTR` | *PGM | [WRKCUSTR_Technical_Documentation.md](WRKCUSTR_Technical_Documentation.md) | Work with Customers — 5250 subfile list (menu option 1) | +| `WRKCUST1R` | *PGM | [WRKCUST1R_Technical_Documentation.md](WRKCUST1R_Technical_Documentation.md) | Customer detail — 5250 panel + error window | +| `WRKCUSTRO` | *PGM | [WRKCUSTRO_Technical_Documentation.md](WRKCUSTRO_Technical_Documentation.md) | Work with Customers — Profound UI Rich Display grid (menu option 2) | +| `WRKCUST1RO` | *PGM | [WRKCUST1RO_Technical_Documentation.md](WRKCUST1RO_Technical_Documentation.md) | Customer detail — Rich Display panel + error window | +| `WRKCUSTEO` | *PGM | [WRKCUSTEO_Technical_Documentation.md](WRKCUSTEO_Technical_Documentation.md) | Work with Customers — EJS screen mode (menu option 3) | +| `WRKCUST1EO` | *PGM | [WRKCUST1EO_Technical_Documentation.md](WRKCUST1EO_Technical_Documentation.md) | Customer detail — EJS screen mode | +| `HELLOR` | *PGM | [HELLOR_Technical_Documentation.md](HELLOR_Technical_Documentation.md) | Hello World example (not on the menu) | + +## How the application fits together + +```mermaid +flowchart TD + MENU["MENU
Agentic Coding Demo Menu"] + subgraph F5250["5250 (option 1)"] + A[WRKCUSTR.PGM] --> A1[WRKCUST1R.PGM] + end + subgraph FRDF["Rich Display (option 2)"] + B[WRKCUSTRO.PGM] --> B1[WRKCUST1RO.PGM] + end + subgraph FEJS["EJS screen mode (option 3)"] + C[WRKCUSTEO.PGM] --> C1[WRKCUST1EO.PGM] + end + SRV["CUSTR.SRVPGM
cust_get / cust_list"] + PF["CUSTP.FILE
Customer Master"] + MENU --> A + MENU --> B + MENU --> C + A ==> SRV + A1 ==> SRV + B ==> SRV + B1 ==> SRV + C ==> SRV + C1 ==> SRV + SRV -->|"embedded SQL"| PF +``` + +Three front ends, one service layer, one file. The list/detail RPG logic is deliberately near-identical +across the three variants — `WRKCUSTRO` differs from `WRKCUSTR` in four lines and `WRKCUST1RO` differs +from `WRKCUST1R` in one — so the diffs isolate what modernization actually costs on the program side. +The EJS pair goes further and drops indicators entirely in favour of named `action` / `msg` fields. + +## Cross-cutting notes + +Points that apply to more than one object, each covered in detail in the individual documents: + +- **Data path** — no program does its own database I/O; everything goes through `cust_get` / `cust_list`. +- **Fixed export signature** — `custr.bnd` hard-codes `signature('CUSTR ')`, so the binder + cannot detect an incompatible interface change. Rebuild the service program **and** all six callers + together. +- **Field truncation** — the 5250 and Rich Display lists show `SNAME(20)` / `SEMAIL(25)` from 40- and + 60-character columns while the filter matches full values, so a match can be invisible. The EJS list + uses full widths. +- **Date handling** — the detail programs run `%date()` over 8-digit zoned date columns with no + `MONITOR`; a zero or invalid date is an unhandled `RNQ0114`. +- **Edit mode is designed but not implemented** — `WRKCUST1R` / `WRKCUST1RO` carry a complete + `*IN30` protect/unprotect scheme (and, in the Rich Display file, Save/Cancel buttons), but the + programs always set `*IN30` off and no update procedure exists in `CUSTR`. +- **EJS assets are not deployed by codermake** — the templates, CSS and JS under + `docs/htdocs/profoundui/userdata/ui/wrkcuste/` must be copied to the Profound UI document root, or the + screens render blank while the programs run normally. + +## Source of truth + +| Kind | Location | +|---|---| +| RPG / SQLRPGLE | `cfdemo/qrpglesrc/` | +| DDS display and physical files | `cfdemo/qddssrc/*.dspf`, `*.pf`, `*.lf` | +| Rich Display / EJS screen definitions | `cfdemo/qddssrc/*.json` | +| Binder language | `cfdemo/qsrvsrc/custr.bnd` | +| Binding directory / message file scripts | `cfdemo/cust.bnddir`, `cfdemo/menu.msgf` | +| Build rules | `cfdemo/Rules.mk` (build with `codermake `; never edit generated Makefiles) | +| EJS client assets | `docs/htdocs/profoundui/userdata/ui/wrkcuste/` | + +The COBOL members in `cfdemo/qcbllesrc` (`tn510l.cblle`, `inq01l.cblle`) are outside the scope of this +set, which covers `qrpglesrc` only. diff --git a/docs/WRKCUST1EO_Technical_Documentation.md b/docs/WRKCUST1EO_Technical_Documentation.md new file mode 100644 index 00000000..81a083a1 --- /dev/null +++ b/docs/WRKCUST1EO_Technical_Documentation.md @@ -0,0 +1,490 @@ +# WRKCUST1EO — Technical Documentation + +| | | +|---|---| +| **Program** | WRKCUST1EO | +| **Type** | *PGM | +| **Language** | ILE RPG, fully free-format (`**FREE`) — RPG Open Access | +| **Source** | `cfdemo/qrpglesrc/wrkcust1eo.rpgle` | +| **IBM i target release** | Not specified (TGTRLS defaults to the build machine's release) | +| **Version / Author / Date** | 1.0 / Claude (Opus 5) / 2026-08-19 | + +### Revision History + +| Version | Date | Author | Change | Ref | +|---|---|---|---|---| +| 1.0 | 2026-08-19 | Claude (Opus 5) | Initial documentation | — | + +## 1. Overview + +`WRKCUST1EO` is the **EJS screen-mode** customer-detail program. It receives a customer number, +retrieves the row through `CUSTR`, and hands the fifteen column values to an EJS template +(`detail.ejs`) that renders them as a card-based web page. Compared with the 5250 and Rich Display +detail programs it is the simplest of the three: + +| Aspect | `WRKCUST1R` / `WRKCUST1RO` | `WRKCUST1EO` | +|---|---|---| +| Indicators | `*IN03`, `*IN30` | **none** | +| Exit | `*IN03` from F3 | `action = 'EXIT'` | +| Not-found handling | Separate `ERRORWIN` window format | Same `custdetail` format with `msg` populated | +| Record formats | 2 | 1 | +| Protect/unprotect scheme | `*IN30` → `DSPATR(PR)` / `read only` | none needed — the template renders values as text, not inputs | + +**How it is invoked:** a dynamic program call from `WRKCUSTEO` when a row is submitted with option +`5`, passing that row's `SCUSTNO`. One required parameter, no menu entry. + +## 2. Technical Specifications + +**Control Options** + +| Option | Value | Description | +|---|---|---| +| `DFTACTGRP` | `*NO` | ILE program | +| `ACTGRP` | `*NEW` | Fresh activation group per call, reclaimed on return | +| `BNDDIR` | `'CUST'` | Binds `CUSTR *SRVPGM` | +| `OPTION` | *(compiler default)* | Not overridden | +| `THREAD` | *(not coded)* | Not declared thread-safe | + +**Input Parameters** + +| Parameter | Data Type | Length | Direction | Description | +|---|---|---|---|---| +| `custno` | Packed (`like(cust_rec.custno)`) | 6,0 | **In** (`const`) | Customer number to display | + +**Files Used** + +| File | Type | Usage | Access | Description | +|---|---|---|---|---| +| `WRKCUST1EO` | WORKSTN (EJS screen, Open Access) | Update (`EXFMT`) | `HANDLER('PROFOUNDUI(HANDLER)')`; one format, `custdetail` | Browser-rendered detail page | +| `CUSTP` | DISK | Input (indirect) | Set-based SQL inside `CUSTR` | Never declared here | + +The program object and the display file object share the name `WRKCUST1EO`. + +**Service Programs / Procedures Called** + +| Service Program | Procedure | Bound/Dynamic | Description | +|---|---|---|---| +| `CUSTR` | `cust_get` | Bound (via `BNDDIR('CUST')`) | Retrieve one customer row | +| `PROFOUNDUI` | `HANDLER` | Open Access handler, resolved at run time | Renders the EJS screen in the browser | + +No local subprocedures. + +## 3. ILE Structure & Invocation + +- **Activation group** — `ACTGRP(*NEW)`; the handler activates in the same group and is reclaimed with + it, so each drill-down re-activates both the handler and `CUSTR`. +- **Binding** — static bind to `CUSTR` through `CUST.BNDDIR`; prototypes from + `/copy custr_pr.rpgle`. The handler name and the template URL are both resolved at run time, so + neither is validated by the compiler. +- **Call hierarchy** + +```mermaid +flowchart LR + LIST["WRKCUSTEO.PGM
(option 5)"] -.->|dynamic CALL| PGM[WRKCUST1EO.PGM] + PGM ==>|bound| SRV["CUSTR.SRVPGM
cust_get"] + PGM -.->|"Open Access handler"| PUI["PROFOUNDUI(HANDLER)"] + SRV -->|"SELECT INTO"| PF[CUSTP.FILE] +``` + +## 4. Dependency Tree (text) + +``` +WRKCUST1EO.PGM +├── Source +│ ├── wrkcust1eo.rpgle +│ └── custr_pr.rpgle (/COPY member: cust_rec template + prototypes) +├── Display Files +│ └── WRKCUST1EO.FILE (EJS screen file, ENHDSP(*YES), generated from +│ qddssrc/wrkcust1eo.json — format custdetail) +├── Client-side assets (IFS, served by the Profound UI HTTP instance) +│ ├── /profoundui/userdata/ui/wrkcuste/detail.ejs (docs/htdocs/... in the repo) +│ └── /profoundui/userdata/ui/wrkcuste/detail.css +├── Service Programs +│ ├── CUSTR.SRVPGM (cust_get) +│ └── PROFOUNDUI.SRVPGM (Open Access handler — third party, run-time) +├── Binding Directory +│ └── CUST.BNDDIR +└── Database + └── CUSTP.FILE (PF, key CUSTNO) — accessed only through CUSTR.SRVPGM +``` + +## 5. Dependency Diagram (Mermaid) + +```mermaid +flowchart TD + subgraph BROWSER[Browser] + TPL["detail.ejs + detail.css
served from /profoundui/userdata/ui/wrkcuste/"] + end + subgraph UI[User Interface Layer] + CALLER["WRKCUSTEO.PGM
customer list (EJS)"] + PGM["WRKCUST1EO.PGM
Customer Detail (EJS)"] + end + subgraph DSP[Display Files] + DSPF["WRKCUST1EO.FILE
EJS screen, format custdetail"] + end + subgraph OA[Open Access] + H["PROFOUNDUI(HANDLER)"] + end + subgraph SVC[Service Layer] + SRV["CUSTR.SRVPGM
cust_get"] + end + subgraph DATA[Data Layer] + PF["CUSTP.FILE
CUSMSTR, key CUSTNO"] + end + CALLER -->|"CALL with SCUSTNO"| PGM + PGM --> DSPF + DSPF --> H + H --> TPL + PGM ==>|bound| SRV + SRV -->|"embedded SQL"| PF +``` + +## 6. Complete Object Dependency List + +**Programs** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `WRKCUST1EO` | *PGM | `$IBMI_BUILD_LIBRARY` (e.g. `AITSK00104`) / `CFDEMO` | `cfdemo/qrpglesrc/wrkcust1eo.rpgle` | Customer detail (EJS) | + +**Service Programs** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUSTR` | *SRVPGM | build library | `qrpglesrc/custr.sqlrpgle` + `qsrvsrc/custr.bnd` | Customer data service | +| `PROFOUNDUI` | *SRVPGM | Profound UI product library (via *LIBL) | *(third party — source not available; documented from reference only)* | Open Access handler | + +**Display Files** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `WRKCUST1EO` | *FILE (DSPF, `ENHDSP(*YES)`) | build library | `cfdemo/qddssrc/wrkcust1eo.json` | EJS screen definition — see §8 | + +**Physical Files** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUSTP` | *FILE (PF) | *LIBL | `cfdemo/qddssrc/custp.pf` | Customer master (via `CUSTR`) | + +**Binding Directories** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUST` | *BNDDIR | build library | `cfdemo/cust.bnddir` | Resolves `CUSTR` | + +**Copy Members** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `custr_pr` | Source | n/a | `cfdemo/qrpglesrc/custr_pr.rpgle` | `cust_rec` template + prototypes | + +**IFS assets** (not IBM i objects, and **not deployed by codermake** — see §15) + +| Path in repo | Deployed path | Description | +|---|---|---| +| `docs/htdocs/profoundui/userdata/ui/wrkcuste/detail.ejs` | `/profoundui/userdata/ui/wrkcuste/detail.ejs` | Detail screen template | +| `.../detail.css` | same | Detail screen styling | + +No `js` file is declared for this format. + +## 7. Database Schema & Access (DB2 for i) + +No direct database access — one `cust_get` per display. Column-to-field mapping, with the JSON +declarations and what the template does with each value: + +| `CUSTP` field | Type | Screen field | JSON type | Rendered as | +|---|---|---|---|---| +| `CUSTNO` | Packed 6,0 | `scustno` | zoned 6 | `#123456` badge next to the heading | +| `CNAME` | Char 40 | `sname` | char 40 | *Name* value | +| `CTYPE` | Char 1 | `stype` | char 1 | Decoded in the template: `B` → `Business`, `R` → **`Retail`**, anything else shown raw | +| `CSTATUS` | Char 1 | `sstatus` | char 1 | `A` → `Active`, `I` → `Inactive`, `S` → `Suspended`, plus a `status-` CSS class | +| `CLIMIT` | Packed 11,2 | `slimit` | **packed** 11,2 | `$` + `Number(...).toLocaleString('en-US', {minimumFractionDigits: 2})` — thousands separators | +| `CBALANCE` | Packed 11,2 | `sbalance` | **packed** 11,2 | Same currency formatting | +| `CLASTORD` | Zoned 8,0 | `slastord` | char 10 | Program formats `%char(%date(...) : *usa)` | +| `CCREATED` | Zoned 8,0 | `screated` | char 10 | Same | +| `CADDR1` / `CADDR2` | Char 40 | `saddr1` / `saddr2` | char 40 | Address block; line 2 rendered only when non-blank | +| `CCITY` | Char 30 | `scity` | char 30 | `City, ST ZIP` line | +| `CSTATE` | Char 2 | `sstate` | char 2 | | +| `CZIP` | Char 10 | `szip` | char 10 | | +| `CEMAIL` | Char 60 | `semail` | char 60 | **Full length** — no truncation, unlike the 40-character 5250/Rich Display fields | +| `CPHONE` | Char 15 | `sphone` | char 15 | | + +- **Key & access path** — `cust_get` selects on `CUSTNO`, `CUSTP`'s non-unique keyed access path. +- **Referential integrity / triggers / journaling** — none defined in source. +- **Commitment control** — none; read-only program with `COMMIT(*NONE)` in `CUSTR`. + +Three presentation differences from the other variants, all decided in the template rather than the +program, and all worth knowing when the three screens are compared side by side: + +1. **`R` is labelled `Retail`** here, while `custp.pf` documents `Customer Type R/B` and both DDS + screens print the legend `(B=Business, R=Residential)`. One of the two labels is wrong; the DDS + wording and the file's own `TEXT` keyword agree with each other, so `Retail` in `detail.ejs` looks + like the odd one out. +2. **Money is formatted with thousands separators and a `$` sign**, whereas `EDTCDE(P)` on the 5250 + panel deliberately prints no separators. +3. **`slimit` / `sbalance` are declared `packed`** in `wrkcust1eo.json` but `zoned` in the Rich Display + equivalent. Both work because the program assigns from the packed `cust_rec` subfields, but it is a + real inconsistency between the two JSON definitions. + +**Date-conversion risk** (identical to the other detail programs): `%date()` on the 8-digit zoned date +columns assumes `*ISO`; a `0` or invalid value raises an unhandled `RNQ0114` rather than showing a blank +date. There is no `MONITOR` around it. + +## 8. Display File Layout + +`WRKCUST1EO` is an **EJS-type Rich Display source**: `cfdemo/qddssrc/wrkcust1eo.json` declares +`"type": "ejs"` plus, per format, the template and CSS URLs and a flat field list. codermake converts it +to DDS and compiles it `ENHDSP(*YES)`; the layout lives in `detail.ejs`. + +**Format `custdetail`** — "Customer Detail" + +| Asset | Path | +|---|---| +| `template` | `/profoundui/userdata/ui/wrkcuste/detail.ejs` | +| `css` | `/profoundui/userdata/ui/wrkcuste/detail.css` | +| `js` | *(none declared)* | + +| Field | Type | Length | Dec | Direction in practice | Description | +|---|---|---|---|---|---| +| `action` | char | 10 | | Both | Command channel; template sends `EXIT` | +| `scustno` | zoned | 6 | 0 | Output | Customer number | +| `sname` | char | 40 | | Output | Name | +| `stype` | char | 1 | | Output | Customer type | +| `sstatus` | char | 1 | | Output | Customer status | +| `slimit` | packed | 11 | 2 | Output | Credit limit | +| `sbalance` | packed | 11 | 2 | Output | Balance due | +| `slastord` | char | 10 | | Output | Last order date (pre-formatted) | +| `screated` | char | 10 | | Output | Created date (pre-formatted) | +| `saddr1` | char | 40 | | Output | Address line 1 | +| `saddr2` | char | 40 | | Output | Address line 2 | +| `scity` | char | 30 | | Output | City | +| `sstate` | char | 2 | | Output | State | +| `szip` | char | 10 | | Output | Zip | +| `semail` | char | 60 | | Output | Email | +| `sphone` | char | 15 | | Output | Phone | +| `msg` | char | 78 | | Output | Message line — carries the not-found / SQL error text | + +Every field except `action` is output-only in practice: the template renders them inside `` +elements, so there is nothing for the user to type into and nothing to read back. That is why this +program needs no `*IN30` protect scheme. + +**Rendered layout** (`detail.ejs`) + +``` +┌────────────────────────────────────────────────────────────────────┐ +│ Customer Detail #123456 │ +│ │ +│ ‹ error message — shown only when msg is non-blank › │ +│ │ +│ ┌── Customer Information ──┐ ┌── Financial ──────────────────┐ │ +│ │ Name ACME INDUSTRIES │ │ Credit Limit $50,000.00 │ │ +│ │ Type Business │ │ Balance Due $12,345.67 │ │ +│ │ Status Active │ │ Last Order 03/14/2026 │ │ +│ └──────────────────────────┘ │ Created 01/02/2019 │ │ +│ └───────────────────────────────┘ │ +│ ┌── Contact ───────────────┐ ┌── Address ────────────────────┐ │ +│ │ Email orders@acme.… │ │ 100 MAIN ST │ │ +│ │ Phone 555-0100 │ │ SUITE 400 │ │ +│ └──────────────────────────┘ │ SPRINGFIELD, IL 62704 │ │ +│ └───────────────────────────────┘ │ +│ [ Back (F3) ] │ +└────────────────────────────────────────────────────────────────────┘ +``` + +Template mechanics worth knowing: + +- **Submit channel** — `` plus one button calling + `pui.submit({action: 'EXIT'})`, tagged `data-fkey="F3"`. `EXIT` is the only action the screen sends. +- **Defensive field references** — `msg` and `saddr2` are guarded with + `typeof x !== 'undefined' && x && x.trim()`. This matters because in an EJS screen a reference to a + field the format does not declare throws and aborts the entire render (blank screen, no error message), + so every identifier in the template must exist in the JSON field list. +- **Lower-case field names** — the handler exposes DDS field names in lower case, which is why the JSON + and template both use `scustno`, `slimit`, `msg`. +- **Renders correctly without JavaScript** — no `js` file is declared and the template needs none, which + makes this the most robust of the three detail screens in a browser session. +- **Deployment coupling** — the template and CSS are fetched from the Profound UI document root, are not + part of the display file object, and are not deployed by codermake. Missing assets produce a blank + screen while the program runs normally; after editing an asset, expect to cache-bust the URL. + +## 9. Program Flow (Mermaid) & Key Routines + +```mermaid +flowchart TD + A["Start — receive custno"] --> B{"action = 'EXIT'?"} + B -->|Yes| Z["*INLR = *ON; end"] + B -->|No| C["showScreen"] + C --> D["error = cust_get(custno : customer : customerFound)"] + D --> E{"customerFound?"} + E -->|Yes| F["Move 15 columns to screen fields
format dates with %char(%date(..):*usa)"] + F --> G["msg = ''; action = ''"] + G --> H["EXFMT CUSTDETAIL (rendered in browser)"] + E -->|No| I{"error text returned?"} + I -->|No| J["error = 'Customer nnn not found.'"] + I -->|Yes| K["keep service-program error text"] + J --> L["msg = error; action = 'EXIT'"] + K --> L + L --> M["EXFMT CUSTDETAIL
(same format, message shown)"] + H --> B + M --> B +``` + +**Key routines** + +| Routine | Kind | Purpose | +|---|---|---| +| `showScreen` | Subroutine | Re-reads the customer via `cust_get`; on success moves all columns and displays the panel; on failure puts the message in `msg` and displays the same panel | + +There is no `endError` subroutine — the not-found path reuses `custdetail` instead of a separate window +format, which is why this program has one format where the other two have two. + +**Refresh semantics** — `showScreen` runs on every pass, so any submit that is not `EXIT` re-reads the +row and redisplays current data. + +**Exit behaviour — a real subtlety.** On the not-found path the program sets `action = 'EXIT'` *before* +`EXFMT`. That assignment does **not** cause the loop to end, because `EXFMT` writes the format and then +reads the screen back, overwriting `action` with whatever the browser returns — and `detail.ejs` +initialises the hidden input to `''`. In practice the program leaves the loop only when the user clicks +`Back (F3)`, which submits `action = 'EXIT'`. So the not-found screen is displayed and stays displayed +until the user dismisses it (each submit re-attempts the read and redisplays the same message) rather +than ending on its own. That is benign — it waits for input rather than spinning — but it is not what the +pre-assignment suggests, and it differs from the 5250/Rich Display variants, which genuinely end after +their error window is dismissed. If the intent was "show the error, then leave", the exit has to be +driven by a separate field the screen does not overwrite (or checked before the field is re-read). + +## 10. Indicators Used + +**None.** No numbered indicators at all, not even `*IN03`. Screen state travels in named character +fields: + +| Named condition field | Values | Purpose | +|---|---|---| +| `action` | `''`, `'EXIT'` | Command from the template; `EXIT` ends the program | +| `msg` | free text | Error line (not-found or SQL failure) | + +`*INLR` is set `*ON` at the end so the program closes down cleanly. Because the template renders values +as text rather than inputs, there is no need for the `*IN30` protect/unprotect scheme that both other +detail programs carry. + +## 11. Error & Exception Handling + +**Strategy — error text as data in a single message field, displayed on the normal panel.** No +`MONITOR`/`ON-ERROR`, no `*PSSR`, no PSDS, no INFDS, no `(E)` extenders. + +| Condition | Detection | User sees | Recovery | +|---|---|---|---| +| Customer not found | `customerFound = *off` and `cust_get` returned `''` | `custdetail` with `msg` = `Customer nnn not found.`; all value fields hold whatever the previous pass left | Click `Back (F3)` to return to the list | +| Service-program/SQL failure | `cust_get` returned non-blank text | Same panel with `Error retrieving customer. SQLCODE = ..., SQLSTATE = ...` | Check library list, authority, `CUSTP` layout | +| Invalid or zero date | **not handled** | `RNQ0114` inquiry then dump | Correct the data, or guard the `%date` calls | +| `PROFOUNDUI` handler missing / wrong FP level | **not handled** | Escape message on the first `EXFMT`, or a blank screen | Environmental | +| Missing / stale IFS assets | **not handled** | Blank or outdated screen with the program running | Deploy `detail.ejs` / `detail.css`; cache-bust the URLs | +| Workstation/device error, missing display file | **not handled** | Default handler inquiry then `RNX` dump | Fix the library list and re-call | + +The error variable is `varchar(210)` while `msg` is `char(78)`, so a long service-program message is +**truncated to 78 characters** on the way to the screen. The `varchar(80)` values `CUSTR` returns fit +comfortably, but a longer locally built message would be cut. + +Precedence is deliberate and correct: a non-blank service-program message is preserved, and +`'Customer nnn not found.'` is only substituted when the service program reported no error — so an SQL +failure is never mislabelled as a missing customer. + +One presentation weakness on the not-found path: the program populates `msg` but does **not** clear the +value fields, so the page shows the error alongside the previously displayed customer's data (or blanks +on the first pass). The other two variants avoid this by using a separate error window. + +Nothing is written to the database, so no failure requires a back-out. + +## 12. Security & Authority + +- No adopted authority; runs with the caller's authority. +- Required authority: `*USE` on `WRKCUST1EO` (program and display file), `CUSTR`, `CUSTP` and the + Profound UI product objects, plus `*EXECUTE` on the libraries. +- The Profound UI HTTP instance and the IFS document root are part of the perimeter: `detail.ejs` is + served to the browser, and write access to `/profoundui/userdata/ui/wrkcuste/` is effectively code + deployment authority — a modified template changes what the screen renders and submits. +- **Sensitive data:** this is the most exposing screen of the EJS pair — credit limit and outstanding + balance next to full contact details, at full column width, unmasked, with no audit-journal record of + viewing. The values are present in the rendered HTML, so browser-level access equals data access. + +## 13. Interfaces & Integration + +| Interface | Direction | Format | Trigger | +|---|---|---|---| +| Open Access handler `PROFOUNDUI(HANDLER)` | Bidirectional | Field values | Every `EXFMT` | +| HTTP(S) fetch of `detail.ejs` / `detail.css` | Inbound to the browser | Text assets from the IFS | Screen render | +| `pui.submit({action: 'EXIT'})` | Browser → program | `action` field value | User clicks `Back (F3)` | + +No data queues, data areas, web services, MQ or file transfers. + +## 14. Batch / Job Flow + +Not applicable — interactive, browser-driven. + +## 15. Build & Compile + +``` +CRTDSPF FILE(/WRKCUST1EO) SRCFILE(/QDDSSRC) ENHDSP(*YES) <- DDS generated from wrkcust1eo.json +CRTBNDRPG PGM(/WRKCUST1EO) SRCSTMF('cfdemo/qrpglesrc/wrkcust1eo.rpgle') +``` + +`Rules.mk`: + +```makefile +wrkcust1eo.file: qddssrc/wrkcust1eo.json +wrkcust1eo.pgm: qrpglesrc/wrkcust1eo.rpgle qddssrc/wrkcust1eo.json qrpglesrc/custr_pr.rpgle custr.srvpgm | wrkcust1eo.file cust.bnddir +``` + +Build order: `custp.file` → `custr.module` → `custr.srvpgm` → `cust.bnddir` → `wrkcust1eo.file` → +`wrkcust1eo.pgm`. Build with codermake — never issue the create commands by hand: + +```bash +cd /workspace/workspace/ibmi-agentic +codermake wrkcust1eo.pgm +``` + +**The build is only half the deployment.** codermake creates IBM i objects and does not copy the +`htdocs` tree; `detail.ejs` and `detail.css` must be transferred to the Profound UI document root at +`/profoundui/userdata/ui/wrkcuste/`. A green build with missing assets renders a blank screen. + +## 16. Related Programs + +| Program | Description | Relationship | +|---|---|---| +| `WRKCUSTEO` | Customer list (EJS) | Caller — option `5` | +| `CUSTR` | Customer data service program | Callee (bound) | +| `WRKCUST1R` | Same panel on a 5250 DDS display file | Alternate front end | +| `WRKCUST1RO` | Same panel on a Profound UI Rich Display file | Alternate front end | + +## 17. Testing Notes + +Requires a Profound UI browser session **and** the IFS assets in place. + +| Scenario | Steps | Expected result | +|---|---|---| +| Detail renders | From the EJS list, submit a row with option `5` | `Customer Detail` heading with a `#nnnnnn` badge and four cards: Customer Information, Financial, Contact, Address | +| Assets missing | Rename/remove `detail.ejs` on the server | Blank screen with the program still running | +| Type decoding | Pick a `B` customer, then an `R` customer | `Business` / `Retail` — note `Retail` disagrees with the `R=Residential` legend on the DDS screens | +| Status decoding | Customers with `A`, `I`, `S` | `Active` / `Inactive` / `Suspended`, with a `status-` class applied | +| Money formatting | Any customer | `$50,000.00` style — thousands separators, unlike the 5250 `EDTCDE(P)` output | +| Dates | Compare with `CUSTP` | `mm/dd/yyyy` | +| Email full width | Customer with an email longer than 40 characters | Shown in full (60-character field) | +| Address block | Customer with a blank `CADDR2` | Line 2 omitted entirely, no empty line | +| Refresh | Submit without `EXIT` | Row re-read and redisplayed | +| Not-found path | Call directly with a nonexistent number (correctly declared packed 6,0) | Panel shows `Customer nnn not found.`; the screen **stays** until `Back (F3)` is clicked (see §9), and the value area is not cleared | +| Zero date | Point at a row with `CLASTORD = 0` | **Known weakness** — `RNQ0114` rather than a blank date | +| Exit | Click `Back (F3)` | Returns to the EJS list, refreshed | + +No automated tests exist in the repository. + +## 18. Version Information + +| Attribute | Value | +|---|---| +| Source Format | Fully free-format (`**FREE`) | +| ILE Compatible | Yes | +| Activation Group | `*NEW` | +| Uses Embedded SQL | No (SQL is inside `CUSTR`) | +| Multi-threaded | No | +| Display Type | Profound UI **EJS screen** (`"type": "ejs"`, RPG Open Access, `ENHDSP(*YES)`) | +| Indicators Used | None | +| Target Release (TGTRLS) | Compiler default (build machine's release) | diff --git a/docs/WRKCUST1RO_Technical_Documentation.md b/docs/WRKCUST1RO_Technical_Documentation.md new file mode 100644 index 00000000..d53d0a28 --- /dev/null +++ b/docs/WRKCUST1RO_Technical_Documentation.md @@ -0,0 +1,427 @@ +# WRKCUST1RO — Technical Documentation + +| | | +|---|---| +| **Program** | WRKCUST1RO | +| **Type** | *PGM | +| **Language** | ILE RPG, fully free-format (`**FREE`) — RPG Open Access | +| **Source** | `cfdemo/qrpglesrc/wrkcust1ro.rpgle` | +| **IBM i target release** | Not specified (TGTRLS defaults to the build machine's release) | +| **Version / Author / Date** | 1.0 / Claude (Opus 5) / 2026-08-19 | + +### Revision History + +| Version | Date | Author | Change | Ref | +|---|---|---|---|---| +| 1.0 | 2026-08-19 | Claude (Opus 5) | Initial documentation | — | + +## 1. Overview + +`WRKCUST1RO` is the **Profound UI Rich Display** customer-detail screen. It receives a customer +number, retrieves the row through `CUSTR`, and displays all fifteen columns in a browser-rendered +panel; a red pop-up window (`errorwin`) reports a customer that cannot be retrieved and ends the +program. + +The RPG source is a **one-line change** from the 5250 `WRKCUST1R` — only the `DCL-F` differs: + +```rpgle +dcl-f wrkcust1do workstn handler('PROFOUNDUI(HANDLER)'); // instead of: dcl-f wrkcust1d workstn; +``` + +Everything else — the parameter, the `cust_get` call, the field moves, the date formatting, the +`*IN30` protect scheme, the error window logic — is character-for-character identical. All of the +visual modernization (panels, select boxes, styled buttons, a fieldset legend built in JavaScript) +lives in the Rich Display File, not in the program. + +**How it is invoked:** a dynamic program call from `WRKCUSTRO` when the user selects option `5` in the +grid, passing that row's `SCUSTNO`. One required parameter, no menu entry. + +## 2. Technical Specifications + +**Control Options** + +| Option | Value | Description | +|---|---|---| +| `DFTACTGRP` | `*NO` | ILE program | +| `ACTGRP` | `*NEW` | Fresh activation group per call, reclaimed on return | +| `BNDDIR` | `'CUST'` | Binds `CUSTR *SRVPGM` | +| `OPTION` | *(compiler default)* | Not overridden | +| `THREAD` | *(not coded)* | Not declared thread-safe | + +**Input Parameters** + +| Parameter | Data Type | Length | Direction | Description | +|---|---|---|---|---| +| `custno` | Packed (`like(cust_rec.custno)`) | 6,0 | **In** (`const`) | Customer number to display | + +**Files Used** + +| File | Type | Usage | Access | Description | +|---|---|---|---|---| +| `WRKCUST1DO` | WORKSTN (Rich Display, Open Access) | Update (`EXFMT`) | `HANDLER('PROFOUNDUI(HANDLER)')`; formats `custdetail`, `errorwin` (window) | Browser-rendered detail panel and error pop-up | +| `CUSTP` | DISK | Input (indirect) | Set-based SQL inside `CUSTR` | Never declared here | + +**Service Programs / Procedures Called** + +| Service Program | Procedure | Bound/Dynamic | Description | +|---|---|---|---| +| `CUSTR` | `cust_get` | Bound (via `BNDDIR('CUST')`) | Retrieve one customer row | +| `PROFOUNDUI` | `HANDLER` | Open Access handler, resolved at run time | Renders the Rich Display file in the browser | + +## 3. ILE Structure & Invocation + +- **Activation group** — `ACTGRP(*NEW)`; the Profound UI handler activates in the same group and is + reclaimed with it. Each drill-down therefore re-activates both the handler and `CUSTR`. +- **Binding** — static bind to `CUSTR` via `CUST.BNDDIR`; prototypes from `/copy custr_pr.rpgle`. The + Open Access handler is a run-time literal, not a bind-time dependency — a missing `PROFOUNDUI` + service program fails on the first `EXFMT`, not at compile. +- **Call hierarchy** + +```mermaid +flowchart LR + LIST["WRKCUSTRO.PGM
(option 5)"] -.->|dynamic CALL| PGM[WRKCUST1RO.PGM] + PGM ==>|bound| SRV["CUSTR.SRVPGM
cust_get"] + PGM -.->|"Open Access handler"| PUI["PROFOUNDUI(HANDLER)"] + SRV -->|"SELECT INTO"| PF[CUSTP.FILE] +``` + +## 4. Dependency Tree (text) + +``` +WRKCUST1RO.PGM +├── Source +│ ├── wrkcust1ro.rpgle +│ └── custr_pr.rpgle (/COPY member: cust_rec template + prototypes) +├── Display Files +│ └── WRKCUST1DO.FILE (Rich Display File, ENHDSP(*YES), generated from +│ qddssrc/wrkcust1do.json: custdetail, errorwin) +├── Service Programs +│ ├── CUSTR.SRVPGM (cust_get) +│ └── PROFOUNDUI.SRVPGM (Open Access handler — third party, run-time) +├── Binding Directory +│ └── CUST.BNDDIR +└── Database + └── CUSTP.FILE (PF, key CUSTNO) — accessed only through CUSTR.SRVPGM +``` + +## 5. Dependency Diagram (Mermaid) + +```mermaid +flowchart TD + subgraph BROWSER[Browser] + UIC["Profound UI client
panel, select boxes, buttons"] + end + subgraph UI[User Interface Layer] + CALLER["WRKCUSTRO.PGM
customer list"] + PGM["WRKCUST1RO.PGM
Customer Detail"] + end + subgraph DSP[Display Files] + DSPF["WRKCUST1DO.FILE
custdetail + errorwin"] + end + subgraph OA[Open Access] + H["PROFOUNDUI(HANDLER)"] + end + subgraph SVC[Service Layer] + SRV["CUSTR.SRVPGM
cust_get"] + end + subgraph DATA[Data Layer] + PF["CUSTP.FILE
CUSMSTR, key CUSTNO"] + end + CALLER -->|"CALL with SCUSTNO"| PGM + PGM --> DSPF + DSPF --> H + H --> UIC + PGM ==>|bound| SRV + SRV -->|"embedded SQL"| PF +``` + +## 6. Complete Object Dependency List + +**Programs** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `WRKCUST1RO` | *PGM | `$IBMI_BUILD_LIBRARY` (e.g. `AITSK00104`) / `CFDEMO` | `cfdemo/qrpglesrc/wrkcust1ro.rpgle` | Customer detail (Rich Display) | + +**Service Programs** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUSTR` | *SRVPGM | build library | `qrpglesrc/custr.sqlrpgle` + `qsrvsrc/custr.bnd` | Customer data service | +| `PROFOUNDUI` | *SRVPGM | Profound UI product library (via *LIBL) | *(third party — source not available; documented from reference only)* | Open Access handler | + +**Display Files** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `WRKCUST1DO` | *FILE (DSPF, `ENHDSP(*YES)`) | build library | `cfdemo/qddssrc/wrkcust1do.json` | Rich Display File — see §8 | + +**Physical Files** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUSTP` | *FILE (PF) | *LIBL | `cfdemo/qddssrc/custp.pf` | Customer master (via `CUSTR`) | + +**Binding Directories** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUST` | *BNDDIR | build library | `cfdemo/cust.bnddir` | Resolves `CUSTR` | + +**Copy Members** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `custr_pr` | Source | n/a | `cfdemo/qrpglesrc/custr_pr.rpgle` | `cust_rec` template + prototypes | + +## 7. Database Schema & Access (DB2 for i) + +No direct database access — one `cust_get` per screen display. Column-to-widget mapping: + +| `CUSTP` field | Type | Screen field | Widget | Notes | +|---|---|---|---|---| +| `CUSTNO` | Packed 6,0 | `SCUSTNO` | output field, zoned(6) | Also injected into the fieldset legend by the `onload` script | +| `CNAME` | Char 40 | `SNAME` | textbox char(40) | | +| `CTYPE` | Char 1 | `STYPE` | **select box** — choices `Business` / `Residential`, values `B` / `R` | Friendlier than the 5250 single-character entry | +| `CSTATUS` | Char 1 | `SSTATUS` | **select box** — `Active` / `Inactive` / `Suspended`, values `A` / `I` / `S` | | +| `CLIMIT` | Packed 11,2 | `SLIMIT` | textbox zoned(11,2), `numSep:false`, `zeroBalance:true`, `negNum:-999.00` | Equivalent of `EDTCDE(P)` — zero is shown, no thousands separator, leading minus | +| `CBALANCE` | Packed 11,2 | `SBALANCE` | output field zoned(11,2), right-aligned, same formatting | | +| `CLASTORD` | Zoned 8,0 | `SLASTORD` | output field char(10) | Program formats with `%char(%date(...) : *usa)` | +| `CCREATED` | Zoned 8,0 | `SCREATED` | output field char(10) | Same | +| `CADDR1` / `CADDR2` | Char 40 | `SADDR1` / `SADDR2` | textbox char(40) | | +| `CCITY` | Char 30 | `SCITY` | textbox char(30) | | +| `CSTATE` | Char 2 | `SSTATE` | textbox char(2) | | +| `CZIP` | Char 10 | `SZIP` | textbox char(10) | | +| `CEMAIL` | Char 60 | `SEMAIL` | textbox char(40) | **Truncated** — 40-character widget for a 60-character column, same as the 5250 panel | +| `CPHONE` | Char 15 | `SPHONE` | textbox char(15) | | + +- **Key & access path** — `cust_get` selects on `CUSTNO`, `CUSTP`'s (non-unique) keyed access path. +- **Referential integrity / triggers / journaling** — none defined in source. +- **Commitment control** — none; `CUSTR` uses `COMMIT(*NONE)` and this program never writes. + +**Date-conversion risk** (identical to the 5250 variant): `%date()` on the 8-digit zoned date columns +assumes `*ISO`. A `0` or otherwise invalid value raises an unhandled `RNQ0114` date-conversion error at +that statement instead of showing a blank date. There is no `MONITOR` around it. + +## 8. Display File Layout + +`WRKCUST1DO` is a **Profound UI Rich Display File**; the source of truth is +`cfdemo/qddssrc/wrkcust1do.json`, converted to DDS by codermake and compiled `ENHDSP(*YES)`. + +| Record format | Kind | Overlay range | Purpose | +|---|---|---|---| +| `custdetail` | Full panel | 1–23 | Customer detail; `onload` script sets the fieldset legend | +| `errorwin` | Window (`show as window: true`, top 7, left 24) | 1–9 | Error pop-up | + +**`custdetail` structure** + +| Widget | Type | Details | +|---|---|---| +| `custdetail_screenlayout` | layout, `css panel` | Header text `Customer Detail`; themes `pls--header` / `pls--body`; class `pls--panel--wide` | +| `fldCustomer` | layout, `fieldset` | Legend `Customer`, replaced at load time (below) | +| `Layout1` | layout | Secondary container (`Primary Contact` group) | +| `sfkeys` | output field | `sfkeys` char(512), classes `pls--output-field pls--fkeys`, `BLU` | +| `custdetail_btncancel` | graphic button | Shortcut **F3**, `response = *IN03`, icon `material:arrow_back`. Its **label is an expression**: `Back` when `*IN30` is off, `Cancel` when on | +| `custdetail_btnsave` | graphic button | `Save`, icon `material:save`, shortcut **Enter**; `visibility` bound to `30`, `disabled` bound to `N30` | +| `btnSubmit` | graphic button | `Continue`, shortcut **Enter** (hidden container) | +| `scustno` | output field | zoned(6) | +| `sname`, `saddr1`, `saddr2`, `scity`, `sstate`, `szip`, `semail`, `sphone` | textbox | `read only` bound to `N30`; `css class 2` = `PR` when `N30`; `css class 3` = `UL_removed` when `30` | +| `stype`, `sstatus` | select box | Choice lists as in §7; same `N30` / `30` class bindings | +| `slimit` | textbox | Numeric formatting as in §7; `read only` when `N30` | +| `sbalance` | output field | Numeric, right-aligned — always output-only | +| `slastord`, `screated` | output field | char(10) | +| Constants | output fields | `Customer Detail`, `Customer`, `Name:`, `Type:`, `(B=Business, R=Residential)`, `Status:`, `(A=Active, I=Inactive, S=Suspended)`, `Credit limit:`, `Balance due:`, `Last order:`, `Created on:`, `Primary Contact`, `Address:`, `City:`, `State:`, `Zip:`, `Email:`, `Phone:` | + +**Client-side script.** The format carries an `onload` property: + +```javascript +applyProperty("fldCustomer", "legend", `Customer ${get("scustno")}`); +``` + +so the fieldset legend becomes e.g. `Customer 123456` when the panel is rendered. This is the only +JavaScript in the file, and it is a *property* of the format rather than a separate asset — no external +`.js` file is referenced (unlike the EJS variant, which loads real files). + +**Protect/edit scheme.** The `N30` / `30` bindings are the Rich Display equivalents of +`DSPATR(PR)` / `DSPATR(UL)`. Because the program always sets `*IN30` off (see §10), the rendered screen +is read-only: every textbox is `read only` with the `PR` class, the **Save button is hidden**, and the +tertiary button reads **`Back`** rather than `Cancel`. Turning on `*IN30` would reveal Save, enable the +inputs and relabel the button — the widget layer for editing is complete; only the RPG side is missing. + +**`errorwin`** + +| Widget | Type | Details | +|---|---|---| +| `errorwin_screenlayout` | layout, `css panel` | Header `Error` | +| `serrwinmsg` | text area | `serrwinmsg` char(210), 300×280 px, `display attribute field` = `serrattr` | +| `serrattr` | output field | char(1), placed in the hidden-field container; carries the attribute byte the program sets (`x'A0'`) | +| `errorwin_btnsubmit` | graphic button | `OK`, shortcut **Enter**, icon `material:keyboard_return` | +| `errorwin_btncancel` | graphic button | `Exit`, shortcut **F3**, `bypass validation` | +| `btnCA03` | graphic button | `response = *IN03` | + +The 5250 file achieved the same thing with `WINDOW(7 24 10 32)`, `WDWBORDER((*COLOR RED))`, +`WDWTITLE((*TEXT 'Error'))`, `CNTFLD(030)` and `WRDWRAP`; here it is a panel-styled window with a text +area that wraps naturally. + +**Runtime environment note.** Rendering requires a Profound UI installation whose server-side objects +and client-side JavaScript are at compatible fix-pack levels. On a mismatch the handler returns no +widget metadata and the screen renders blank even though the RPG runs correctly — check that before +suspecting the program. + +## 9. Program Flow (Mermaid) & Key Routines + +Identical to `WRKCUST1R`: + +```mermaid +flowchart TD + A["Start — receive custno"] --> B{"*IN03 on?"} + B -->|Yes| Z["*INLR = *ON; end"] + B -->|No| C["showScreen"] + C --> D["error = cust_get(custno : customer : customerFound)"] + D --> E{"customerFound?"} + E -->|Yes| F["Move 15 columns to screen fields
format dates with %char(%date(..):*usa)"] + F --> G["*IN30 = *OFF (protect)
SFKEYS = 'F3=Exit'"] + G --> H["EXFMT CUSTDETAIL (rendered in browser)"] + H --> B + E -->|No| I{"error text returned?"} + I -->|No| J["error = 'Customer nnn not found.'"] + I -->|Yes| K["keep service-program error text"] + J --> L["endError"] + K --> L + L --> M["SERRATTR = x'A0'
SERRWINMSG = error
EXFMT ERRORWIN"] + M --> N["*INLR = *ON; RETURN"] +``` + +**Key routines** + +| Routine | Kind | Purpose | +|---|---|---| +| `showScreen` | Subroutine | Re-reads the customer, moves all columns to screen fields, forces protection on, displays `custdetail` | +| `endError` | Subroutine | Fills and displays `errorwin`, sets `*INLR`, returns | + +**Refresh semantics** — `showScreen` runs on every pass, so submitting the panel (Enter, or the hidden +`Continue` button) re-reads the row and redisplays current data. + +**Reachability of `errorwin`** — unreachable on the normal path from `WRKCUSTRO`, because the grid can +only offer customers that were just returned by `cust_list`. It appears if the row is deleted between +listing and drill-down, if `cust_get` reports an SQL failure, or on a direct call with a bad number. + +## 10. Indicators Used + +| Indicator | Purpose | +|---|---| +| `*IN03` | Exit — set by the `response` property of `custdetail_btncancel` / `btnCA03` (F3), not by a DDS `CA03` keyword | +| `*IN30` | Protect/edit switch, consumed by widget `read only`, `css class 2`/`3`, `visibility`, `disabled` and the Cancel/Back label expression | +| `*INLR` | Set `*ON` before returning | + +`*IN30` is set `*OFF` unconditionally in `showScreen` and never set on, so the screen is +**display-only in practice, edit-ready by design** — the Rich Display file is further along than the +5250 one here, since it already provides a Save button, enable/disable states and a context-sensitive +button label. Implementing edit would need `*IN30` set, the changed fields read back, and an update +procedure added to `CUSTR` (none exists in the current sources). + +## 11. Error & Exception Handling + +Strategy — one explicit failure path, no exception monitors. No `MONITOR`/`ON-ERROR`, no `*PSSR`, no +PSDS, no INFDS, no `(E)` extenders. + +| Condition | Detection | User sees | Recovery | +|---|---|---|---| +| Customer not found | `customerFound = *off`, `cust_get` returned `''` | `Error` window: `Customer nnn not found.` | `OK` / `Exit` dismisses; the program ends | +| Service-program/SQL failure | `cust_get` returned non-blank text | Same window with `Error retrieving customer. SQLCODE = ..., SQLSTATE = ...` | Check library list, authority, `CUSTP` layout | +| Invalid or zero date | **not handled** | `RNQ0114` inquiry then dump | Correct the data, or guard the `%date` calls | +| `PROFOUNDUI` handler missing / wrong level | **not handled** | Escape message on the first `EXFMT`, or a blank screen if FP levels mismatch | Environmental — fix the Profound UI installation or library list | +| Workstation/device error, missing display file | **not handled** | Default handler inquiry then `RNX` dump | Fix the library list and re-call | + +The error text variable is `varchar(210)`, matching `serrwinmsg`, and a service-program message always +takes precedence over the locally built `not found` text — so an SQL failure is never mislabelled as a +missing customer. Nothing is written to the database, so no failure needs backing out. + +## 12. Security & Authority + +- No adopted authority; runs with the caller's authority. +- Required authority: `*USE` on `WRKCUST1RO`, `CUSTR`, `WRKCUST1DO`, `CUSTP` and the Profound UI + product objects, plus `*EXECUTE` on the libraries. +- The browser front end adds the Profound UI HTTP instance (its authentication and the profile its + jobs run under) to the security perimeter. +- **Sensitive data:** the most exposing screen in the application — credit limit and outstanding + balance alongside full contact details, unmasked, with no audit-journal record of viewing. Note the + values are also present in the client-side page, so browser-level access is equivalent to data + access. + +## 13. Interfaces & Integration + +The only integration is the Open Access handler: workstation I/O is serviced by +`PROFOUNDUI(HANDLER)`, which exchanges field values with the Profound UI browser client over HTTP(S). +No data queues, data areas, web services, IFS or MQ. + +## 14. Batch / Job Flow + +Not applicable — interactive, browser-driven. + +## 15. Build & Compile + +``` +CRTDSPF FILE(/WRKCUST1DO) SRCFILE(/QDDSSRC) ENHDSP(*YES) <- DDS generated from wrkcust1do.json +CRTBNDRPG PGM(/WRKCUST1RO) SRCSTMF('cfdemo/qrpglesrc/wrkcust1ro.rpgle') +``` + +`Rules.mk`: + +```makefile +wrkcust1do.file: qddssrc/wrkcust1do.json +wrkcust1ro.pgm: qrpglesrc//wrkcust1ro.rpgle qddssrc/wrkcust1do.json qrpglesrc/custr_pr.rpgle custr.srvpgm | wrkcust1do.file cust.bnddir +``` + +(The doubled separator in `qrpglesrc//wrkcust1ro.rpgle` is in the repository as written; it is +harmless to make, but worth tidying if the line is ever touched.) + +Build order: `custp.file` → `custr.module` → `custr.srvpgm` → `cust.bnddir` → `wrkcust1do.file` → +`wrkcust1ro.pgm`. Build with codermake — never issue the create commands by hand: + +```bash +cd /workspace/workspace/ibmi-agentic +codermake wrkcust1ro.pgm +``` + +The `.json` is the source of truth; never edit generated DDS or the display file object. + +## 16. Related Programs + +| Program | Description | Relationship | +|---|---|---| +| `WRKCUSTRO` | Customer list (Rich Display) | Caller — option `5` | +| `CUSTR` | Customer data service program | Callee (bound) | +| `WRKCUST1R` | Same panel on a 5250 DDS display file | Alternate front end; the RPG differs in one line | +| `WRKCUST1EO` | Same panel as a Profound UI EJS screen | Alternate front end | + +## 17. Testing Notes + +Requires a Profound UI (or Genie) browser session. + +| Scenario | Steps | Expected result | +|---|---|---| +| Detail displays | From the Rich Display list, choose `5` on a row | `Customer Detail` panel; fieldset legend reads `Customer ` | +| Select boxes | Inspect Type and Status | Rendered as dropdowns showing `Business`/`Residential` and `Active`/`Inactive`/`Suspended`, with the correct current value selected | +| Read-only state | Try to edit any field | All inputs read-only (`PR` class); **Save button not visible**; tertiary button reads `Back` | +| Numeric formatting | Look at a zero credit limit | Zero displayed (not blank), no thousands separator | +| Dates | Compare with `CUSTP` | `mm/dd/yyyy` | +| Email truncation | Pick a customer with an email longer than 40 characters | Value cut at 40 characters | +| Refresh | Press Enter / submit | Row re-read and redisplayed | +| Not-found path | Call directly with a nonexistent number (correctly declared packed 6,0) | `Error` window with `Customer nnn not found.`; `OK`/`Exit` ends the program | +| Zero date | Point at a row with `CLASTORD = 0` | **Known weakness** — `RNQ0114` rather than a blank date | +| Exit | Click `Back` or press F3 | Returns to the Rich Display list, refreshed | + +No automated tests exist in the repository. + +## 18. Version Information + +| Attribute | Value | +|---|---| +| Source Format | Fully free-format (`**FREE`) | +| ILE Compatible | Yes | +| Activation Group | `*NEW` | +| Uses Embedded SQL | No (SQL is inside `CUSTR`) | +| Multi-threaded | No | +| Display Type | Profound UI Rich Display File (RPG Open Access, `HANDLER('PROFOUNDUI(HANDLER)')`, `ENHDSP(*YES)`) | +| Target Release (TGTRLS) | Compiler default (build machine's release) | diff --git a/docs/WRKCUST1R_Technical_Documentation.md b/docs/WRKCUST1R_Technical_Documentation.md new file mode 100644 index 00000000..21c96ca3 --- /dev/null +++ b/docs/WRKCUST1R_Technical_Documentation.md @@ -0,0 +1,426 @@ +# WRKCUST1R — Technical Documentation + +| | | +|---|---| +| **Program** | WRKCUST1R | +| **Type** | *PGM | +| **Language** | ILE RPG, fully free-format (`**FREE`) | +| **Source** | `cfdemo/qrpglesrc/wrkcust1r.rpgle` | +| **IBM i target release** | Not specified (TGTRLS defaults to the build machine's release) | +| **Version / Author / Date** | 1.0 / Claude (Opus 5) / 2026-08-19 | + +### Revision History + +| Version | Date | Author | Change | Ref | +|---|---|---|---|---| +| 1.0 | 2026-08-19 | Claude (Opus 5) | Initial documentation | — | + +## 1. Overview + +`WRKCUST1R` is the 5250 **Customer Detail** screen: it receives a customer number, retrieves the row +through the `CUSTR` service program, and displays all fifteen columns on one panel. It is +display-only — the DDS provides input-capable fields and an indicator-driven protect/unprotect +scheme, but the program hard-codes protection on (see §10), so nothing can be typed or saved. + +A second record format, `ERRORWIN`, is a red-bordered pop-up used when the requested customer cannot +be retrieved; showing it ends the program. + +**How it is invoked:** a dynamic program call from `WRKCUSTR` when the user types option `5` beside a +subfile row, passing that row's `SCUSTNO`. It has one required parameter and no menu entry, so the +only other way in is an explicit `CALL WRKCUST1R PARM(...)`. + +## 2. Technical Specifications + +**Control Options** + +| Option | Value | Description | +|---|---|---| +| `DFTACTGRP` | `*NO` | ILE program; may bind to service programs | +| `ACTGRP` | `*NEW` | Fresh activation group per call, reclaimed on return. Because the caller is also `*NEW`, the drill-down gets its own activation of `CUSTR` and shares no SQL state with the list program. | +| `BNDDIR` | `'CUST'` | Binds `CUSTR *SRVPGM` | +| `OPTION` | *(compiler default)* | Not overridden | +| `THREAD` | *(not coded)* | Not declared thread-safe | + +**Input Parameters** + +| Parameter | Data Type | Length | Direction | Description | +|---|---|---|---|---| +| `custno` | Packed (`like(cust_rec.custno)`) | 6,0 | **In** (`const`) | Customer number to display | + +Because the parameter is `const`, the compiler may pass a temporary copy — but a raw CL +`CALL PGM(WRKCUST1R) PARM(...)` still has to supply a genuine packed(6,0) value. Passing a character +literal or a differently sized numeric from CL corrupts the field (a classic `RNX0105`), so test +calls should be made from a program with the prototype in scope, or with a correctly declared CL +variable. + +**Files Used** + +| File | Type | Usage | Access | Description | +|---|---|---|---|---| +| `WRKCUST1D` | WORKSTN | Update (`EXFMT`) | Two formats: `CUSTDETAIL`, `ERRORWIN` (window) | Detail panel and error pop-up | +| `CUSTP` | DISK | Input (indirect) | Set-based SQL inside `CUSTR` | Never declared here | + +**Service Programs / Procedures Called** + +| Service Program | Procedure | Bound/Dynamic | Description | +|---|---|---|---| +| `CUSTR` | `cust_get` | Bound (via `BNDDIR('CUST')`) | Retrieve one customer row | + +## 3. ILE Structure & Invocation + +- **Activation group** — `ACTGRP(*NEW)`. Every drill-down creates and destroys an activation group. + That is tidy but not free: each call re-activates `CUSTR` (`ACTGRP(*CALLER)`) and re-opens its SQL + cursor environment. On a heavily used screen, `ACTGRP('CUSTGRP')` shared with the caller would be + the cheaper choice; `*NEW` is fine for a demo and guarantees clean state. +- **Binding** — static bind to `CUSTR` via the `CUST` binding directory; prototypes from + `/copy custr_pr.rpgle`. +- **Call hierarchy** + +```mermaid +flowchart LR + LIST["WRKCUSTR.PGM
(option 5)"] -.->|dynamic CALL| PGM[WRKCUST1R.PGM] + PGM ==>|bound| SRV["CUSTR.SRVPGM
cust_get"] + SRV -->|"SELECT INTO"| PF[CUSTP.FILE] +``` + +## 4. Dependency Tree (text) + +``` +WRKCUST1R.PGM +├── Source +│ ├── wrkcust1r.rpgle +│ └── custr_pr.rpgle (/COPY member: cust_rec template + prototypes) +├── Display Files +│ └── WRKCUST1D.FILE (DSPF: CUSTDETAIL, ERRORWIN) +├── Service Programs +│ └── CUSTR.SRVPGM (cust_get) +├── Binding Directory +│ └── CUST.BNDDIR +└── Database + └── CUSTP.FILE (PF, key CUSTNO) — accessed only through CUSTR.SRVPGM +``` + +## 5. Dependency Diagram (Mermaid) + +```mermaid +flowchart TD + subgraph UI[User Interface Layer] + CALLER["WRKCUSTR.PGM
customer list"] + PGM["WRKCUST1R.PGM
Customer Detail"] + end + subgraph DSP[Display Files] + DSPF["WRKCUST1D.FILE
CUSTDETAIL + ERRORWIN"] + end + subgraph SVC[Service Layer] + SRV["CUSTR.SRVPGM
cust_get"] + end + subgraph DATA[Data Layer] + PF["CUSTP.FILE
CUSMSTR, key CUSTNO"] + end + CALLER -->|"CALL with SCUSTNO"| PGM + PGM --> DSPF + PGM ==>|bound| SRV + SRV -->|"embedded SQL"| PF +``` + +## 6. Complete Object Dependency List + +**Programs** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `WRKCUST1R` | *PGM | `$IBMI_BUILD_LIBRARY` (e.g. `AITSK00104`) / `CFDEMO` | `cfdemo/qrpglesrc/wrkcust1r.rpgle` | Customer detail (5250) | + +**Service Programs** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUSTR` | *SRVPGM | build library | `qrpglesrc/custr.sqlrpgle` + `qsrvsrc/custr.bnd` | Customer data service | + +**Display Files** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `WRKCUST1D` | *FILE (DSPF) | build library | `cfdemo/qddssrc/wrkcust1d.dspf` | Detail panel + error window | + +**Physical Files** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUSTP` | *FILE (PF) | *LIBL | `cfdemo/qddssrc/custp.pf` | Customer master (via `CUSTR`) | + +**Binding Directories** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUST` | *BNDDIR | build library | `cfdemo/cust.bnddir` | Resolves `CUSTR` at bind time | + +**Copy Members** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `custr_pr` | Source | n/a | `cfdemo/qrpglesrc/custr_pr.rpgle` | `cust_rec` template + prototypes | + +## 7. Database Schema & Access (DB2 for i) + +No direct database access — one `cust_get` call per screen display. Every `CUSTP` column is mapped +to a screen field: + +| `CUSTP` field | Type | Screen field | Screen type | Notes | +|---|---|---|---|---| +| `CUSTNO` | Packed 6,0 | `SCUSTNO` | 6S 0, output | Header, `COLOR(WHT)` | +| `CNAME` | Char 40 | `SNAME` | 40A | Full length — no truncation | +| `CTYPE` | Char 1 | `STYPE` | 1A | `B`=Business, `R`=Residential | +| `CSTATUS` | Char 1 | `SSTATUS` | 1A | `A`=Active, `I`=Inactive, `S`=Suspended | +| `CLIMIT` | Packed 11,2 | `SLIMIT` | 11Y 2, `EDTCDE(P)` | | +| `CBALANCE` | Packed 11,2 | `SBALANCE` | 11Y 2, output, `EDTCDE(P)` | | +| `CLASTORD` | Zoned 8,0 | `SLASTORD` | 10A, output | Formatted `%char(%date(...) : *usa)` | +| `CCREATED` | Zoned 8,0 | `SCREATED` | 10A, output | Formatted `%char(%date(...) : *usa)` | +| `CADDR1` / `CADDR2` | Char 40 | `SADDR1` / `SADDR2` | 40A | | +| `CCITY` | Char 30 | `SCITY` | 30A | | +| `CSTATE` | Char 2 | `SSTATE` | 2A | | +| `CZIP` | Char 10 | `SZIP` | 10A | | +| `CEMAIL` | Char 60 | `SEMAIL` | 40A | **Truncated** — 40-character field for a 60-character column | +| `CPHONE` | Char 15 | `SPHONE` | 15A | | + +- **Key & access path** — `cust_get` selects on `CUSTNO`, which is `CUSTP`'s (non-unique) keyed + access path. +- **Referential integrity / triggers / journaling** — none defined in source. +- **Commitment control** — none; `CUSTR` runs with `COMMIT(*NONE)` and this program never writes. + +**Date-conversion risk.** `%date(customer.clastord)` interprets the 8-digit zoned column as `*ISO` +(`yyyymmdd`). A customer whose `CLASTORD` (or `CCREATED`) is `0` — plausible for a customer that has +never ordered — or holds any non-date value raises an unhandled date-conversion exception +(`RNQ0114`) at this line rather than displaying a blank date. There is no `MONITOR` around it. If +zero dates are possible in the data, guard the conversion before formatting. + +## 8. Display File Layout + +`WRKCUST1D` — `DSPSIZ(24 80 *DS3)`, two record formats. + +**`CUSTDETAIL`** + +``` + Customer Detail (1,33) + + Customer 123456 (3) + + Name: ACME INDUSTRIES (5) + Type: B (B=Business, R=Residential) (6) + Status: A (A=Active, I=Inactive, S=Suspended) (7) + Last order: 03/14/2026 Credit limit: 50000.00 (8) + Created on: 01/02/2019 Balance due: 12345.67 (9) + + Primary Contact (11) + + Address: 100 MAIN ST (13) + SUITE 400 (14) + City: SPRINGFIELD (15) + State: IL (16) + Zip: 62704 (17) + Email: orders@acme.example (18) + Phone: 555-0100 (19) + + F3=Exit (23) +``` + +| Field | Length | Type (I/O/Both) | Row/Col | Description | +|---|---|---|---|---| +| `SCUSTNO` | 6S 0 | O | 3, 11 | Customer number, `COLOR(WHT)` | +| `SNAME` | 40A | B | 5, 17 | Name; `CHECK(LC)` | +| `STYPE` | 1A | B | 6, 17 | Customer type | +| `SSTATUS` | 1A | B | 7, 17 | Customer status | +| `SLIMIT` | 11Y 2 | B | 8, 44 | Credit limit; `EDTCDE(P)` | +| `SBALANCE` | 11Y 2 | O | 9, 44 | Balance due; `EDTCDE(P)` | +| `SLASTORD` | 10A | O | 8, 17 | Last order date (pre-formatted `mm/dd/yyyy`) | +| `SCREATED` | 10A | O | 9, 17 | Created date (pre-formatted) | +| `SADDR1` | 40A | B | 13, 17 | Address line 1; `CHECK(LC)` | +| `SADDR2` | 40A | B | 14, 17 | Address line 2; `CHECK(LC)` | +| `SCITY` | 30A | B | 15, 17 | City; `CHECK(LC)` | +| `SSTATE` | 2A | B | 16, 17 | State | +| `SZIP` | 10A | B | 17, 17 | Zip; `CHECK(LC)` | +| `SEMAIL` | 40A | B | 18, 17 | Email; `CHECK(LC)` | +| `SPHONE` | 15A | B | 19, 17 | Phone; `CHECK(LC)` | +| `SFKEYS` | 77A | O | 23, 2 | Key legend, `COLOR(BLU)` | + +Every input-capable field carries the pair `N30 DSPATR(PR)` / `30 DSPATR(UL)`: when `*IN30` is off +the field is **protected**, when on it is underlined for entry. `CA03(03 'Exit')` sets `*IN03` +without returning input fields. `EDTCDE(P)` on the two money fields means no thousands separator, +zero values are *printed* rather than blanked, and negatives carry a leading floating minus. + +**`ERRORWIN`** — pop-up window. + +| Keyword | Value | Effect | +|---|---|---| +| `WINDOW` | `(7 24 10 32)` | Window at row 7, column 24; 10 lines by 32 positions | +| `WDWBORDER` | `((*COLOR RED))` | Red border | +| `WDWTITLE` | `((*TEXT 'Error'))` | Title `Error` | +| `CA03(03 'Exit')` | | F3 dismisses | + +| Field | Length | Type | Row/Col (window-relative) | Description | +|---|---|---|---|---| +| `SERRWINMSG` | 210A | B | 1, 2 | Error text; `CNTFLD(030)` splits it into 30-character continued lines with `WRDWRAP`; display attribute taken from `DSPATR(&SERRATTR)` | +| `SERRATTR` | 1A | P (program-to-system) | — | Raw 5250 display-attribute byte; the program sets `x'A0'` | + +`SERRATTR` is not displayed; it is a program-to-system field whose byte is passed straight through +as `SERRWINMSG`'s display attribute, so the exact rendering depends on how the device or emulator +interprets that attribute byte. A constant `F3=Exit` sits on window line 9. + +**Record-format behaviour** — no subfiles, no `OVERLAY`. `CUSTDETAIL` writes the full 24×80 panel; +`ERRORWIN` is a window, so the system saves and restores what is underneath it. + +## 9. Program Flow (Mermaid) & Key Routines + +```mermaid +flowchart TD + A["Start — receive custno"] --> B{"*IN03 on?"} + B -->|Yes| Z["*INLR = *ON; end"] + B -->|No| C["showScreen"] + C --> D["error = cust_get(custno : customer : customerFound)"] + D --> E{"customerFound?"} + E -->|Yes| F["Move 15 columns to screen fields
format dates with %char(%date(..):*usa)"] + F --> G["*IN30 = *OFF (protect)
SFKEYS = 'F3=Exit'"] + G --> H["EXFMT CUSTDETAIL"] + H --> B + E -->|No| I{"error text returned?"} + I -->|No| J["error = 'Customer nnn not found.'"] + I -->|Yes| K["keep service-program error text"] + J --> L["endError"] + K --> L + L --> M["SERRATTR = x'A0'
SERRWINMSG = error
EXFMT ERRORWIN"] + M --> N["*INLR = *ON; RETURN"] +``` + +**Key routines** + +| Routine | Kind | Purpose | +|---|---|---| +| `showScreen` | Subroutine | Re-reads the customer via `cust_get`, moves all columns to screen fields, forces protection on, and displays `CUSTDETAIL` | +| `endError` | Subroutine | Fills and displays `ERRORWIN`, sets `*INLR` and `RETURN`s out of the program | + +**Refresh semantics.** `showScreen` is inside the `DOW`, so pressing Enter re-calls `cust_get` and +redisplays current data — the panel is effectively a refresh-on-Enter view rather than a static +snapshot. That also means a customer deleted while the screen is up turns the next Enter into the +error window. + +**Reachability of `ERRORWIN`.** The normal path from `WRKCUSTR` can only pass customer numbers that +`cust_list`/`cust_get` just returned, so the error window is effectively unreachable from the menu. +It appears when the row is deleted between listing and drill-down (a race), when `cust_get` returns +an SQL failure, or when the program is called directly with a number that does not exist. + +## 10. Indicators Used + +| Indicator | Purpose | +|---|---| +| `*IN03` | F3 pressed (`CA03`) on either format — ends the `DOW` loop | +| `*IN30` | Field-protect switch: off → `DSPATR(PR)` (protected), on → `DSPATR(UL)` (enterable) | +| `*INLR` | Set `*ON` before returning | + +`*IN30` is assigned `*OFF` unconditionally in `showScreen` (with the comment +`// Protect fields from editing.`) and is never set on. The screen is therefore **display-only in +practice, edit-capable by design**: the DDS, the input-capable field definitions and the underline +attribute are all in place for a future edit mode, and `WRKCUST1DO` (the Rich Display sibling) even +carries Save/Cancel buttons conditioned on the same indicator. Turning on an edit mode would need +`*IN30` set, a read of the changed fields, and an update procedure in `CUSTR` — none of which exists +in the current sources. + +## 11. Error & Exception Handling + +**Strategy — one explicit failure path, no exception monitors.** No `MONITOR`/`ON-ERROR`, no +`*PSSR`, no PSDS, no INFDS, no `(E)` extenders. + +| Condition | Detection | User sees | Recovery | +|---|---|---|---| +| Customer not found | `customerFound = *off` and `cust_get` returned `''` | Red `Error` window: `Customer nnn not found.` | F3 (or Enter) dismisses; the program ends and control returns to the caller | +| Service-program/SQL failure | `cust_get` returned non-blank text | The same window, showing `Error retrieving customer. SQLCODE = ..., SQLSTATE = ...` | Investigate library list / authority / `CUSTP` layout; the program ends | +| Invalid or zero date in `CLASTORD` / `CCREATED` | **not handled** | Inquiry message then an `RNQ0114` date-conversion dump | Correct the data; consider guarding the `%date` calls | +| Workstation device error, missing `WRKCUST1D` | **not handled** | Default handler inquiry, then `RNX` dump | Fix the library list and re-call | + +The error variable is `varchar(210)`, matching `SERRWINMSG`, so it can hold the full 80-character +service-program message plus the locally built text with room to spare. Note the deliberate +precedence: a service-program error message is preserved and only replaced by +`'Customer nnn not found.'` when the service program reported no error — so an SQL failure is never +mislabelled as a missing customer. + +Nothing is written to the database, so no recovery or back-out procedure is needed for any failure. + +## 12. Security & Authority + +- No adopted authority (`USRPRF(*USER)`); the program runs with the caller's authority. +- Required authority: `*USE` on `WRKCUST1R`, `CUSTR`, `WRKCUST1D` and `CUSTP`, plus `*EXECUTE` on + the libraries. +- Ownership is the building profile (`$IBMI_USER`); public authority follows the build library's + `CRTAUT`. No `*AUTL` in source. +- **Sensitive data:** this is the most exposing screen in the application — it shows credit limit and + outstanding balance alongside full contact details. There is no masking, no field procedure, and no + audit-journal entry recording who viewed a customer. If that matters in a real deployment, the + controls have to be added at the object/authority level or in `CUSTR`. + +## 13. Interfaces & Integration + +Not applicable — no data queues, data areas, web services, IFS or MQ. + +## 14. Batch / Job Flow + +Not applicable — interactive only. + +## 15. Build & Compile + +``` +CRTDSPF FILE(/WRKCUST1D) SRCFILE(/QDDSSRC) +CRTBNDRPG PGM(/WRKCUST1R) SRCSTMF('cfdemo/qrpglesrc/wrkcust1r.rpgle') +``` + +`DFTACTGRP(*NO)`, `ACTGRP(*NEW)` and `BNDDIR('CUST')` come from the source `CTL-OPT` statements. + +`Rules.mk`: + +```makefile +wrkcust1d.file: qddssrc/wrkcust1d.dspf +wrkcust1r.pgm: qrpglesrc/wrkcust1r.rpgle qddssrc/wrkcust1d.dspf qrpglesrc/custr_pr.rpgle custr.srvpgm | wrkcust1d.file cust.bnddir +``` + +Build order: `custp.file` → `custr.module` → `custr.srvpgm` → `cust.bnddir` → `wrkcust1d.file` → +`wrkcust1r.pgm`. Build with codermake — never issue the create commands by hand: + +```bash +cd /workspace/workspace/ibmi-agentic +codermake wrkcust1r.pgm +``` + +## 16. Related Programs + +| Program | Description | Relationship | +|---|---|---| +| `WRKCUSTR` | Customer list (5250) | Caller — option `5` | +| `CUSTR` | Customer data service program | Callee (bound) | +| `WRKCUST1RO` | Same panel as a Profound UI Rich Display file | Alternate front end (called from `WRKCUSTRO`) | +| `WRKCUST1EO` | Same panel as a Profound UI EJS screen | Alternate front end (called from `WRKCUSTEO`) | + +## 17. Testing Notes + +| Scenario | Steps | Expected result | +|---|---|---| +| Detail displays | From the list, type `5` beside a customer | All fifteen columns shown; heading `Customer Detail`; `F3=Exit` on row 23 | +| Fields protected | Try to type into Name, City, Credit limit | Input is refused — every field is protected (`*IN30` off) | +| Dates formatted | Compare with `CUSTP` | `CLASTORD`/`CCREATED` shown as `mm/dd/yyyy` | +| Money formatting | Check a customer with a zero credit limit | `EDTCDE(P)` prints a zero value (not blank) | +| Email truncation | Pick a customer with an email longer than 40 characters | Displayed value is cut at 40 characters | +| Refresh on Enter | Press Enter | Row re-read; any change made elsewhere appears | +| Not-found path | `CALL WRKCUST1R` with a customer number that does not exist (correctly declared packed 6,0 parameter) | Red `Error` window: `Customer nnn not found.`; the program ends when it is dismissed | +| Zero date | Point at a row with `CLASTORD = 0` | **Known weakness** — expect an `RNQ0114` date-conversion error rather than a blank date | +| Exit | Press F3 | Returns to the customer list, which refreshes | + +No automated tests exist in the repository. + +## 18. Version Information + +| Attribute | Value | +|---|---| +| Source Format | Fully free-format (`**FREE`) | +| ILE Compatible | Yes | +| Activation Group | `*NEW` | +| Uses Embedded SQL | No (SQL is inside `CUSTR`) | +| Multi-threaded | No | +| Display Type | 5250 DDS display file (`DSPSIZ(24 80 *DS3)`), one window format | +| Target Release (TGTRLS) | Compiler default (build machine's release) | diff --git a/docs/WRKCUSTEO_Technical_Documentation.md b/docs/WRKCUSTEO_Technical_Documentation.md new file mode 100644 index 00000000..cd39eb02 --- /dev/null +++ b/docs/WRKCUSTEO_Technical_Documentation.md @@ -0,0 +1,509 @@ +# WRKCUSTEO — Technical Documentation + +| | | +|---|---| +| **Program** | WRKCUSTEO | +| **Type** | *PGM | +| **Language** | ILE RPG, fully free-format (`**FREE`) — RPG Open Access | +| **Source** | `cfdemo/qrpglesrc/wrkcusteo.rpgle` | +| **IBM i target release** | Not specified (TGTRLS defaults to the build machine's release) | +| **Version / Author / Date** | 1.0 / Claude (Opus 5) / 2026-08-19 | + +### Revision History + +| Version | Date | Author | Change | Ref | +|---|---|---|---|---| +| 1.0 | 2026-08-19 | Claude (Opus 5) | Initial documentation | — | + +## 1. Overview + +`WRKCUSTEO` is the **EJS screen-mode** version of Work with Customers. Like `WRKCUSTRO` it is an RPG +Open Access program (`HANDLER('PROFOUNDUI(HANDLER)')`), but its display file is defined by an +**EJS-type JSON** (`"type": "ejs"`) that names an HTML/EJS template, a stylesheet and a script file +instead of describing widgets. The RPG program supplies named fields and subfile rows; the template +decides how they look. + +The consequence is a noticeably simpler program than the 5250 and Rich Display variants: + +| Aspect | `WRKCUSTR` / `WRKCUSTRO` | `WRKCUSTEO` | +|---|---|---| +| Indicators | `*IN03`, 30, 31, 40, 41, 50, 51 | **none** | +| Screen exit | `*IN03` from `CA03` / button response | `action = 'EXIT'` (a character field) | +| Messages | Message subfile + `QMHSNDPM` + PSDS | a single `msg` char(78) field | +| Record formats | 4 (`custctl`, `custfoot`, `custnone`, `custmsgctl`) | 1 (`custctl`) | +| Subfile clear | `SFLCLR` via `*IN31` | `sflclear = '1'` | +| Invalid-option handling | `isValidOption` + re-prompt loop | **none** — non-`5` options are ignored | +| Field widths | `SNAME` 20, `SEMAIL` 25 (truncated) | `sname` 40, `semail` 60, `saddr` 100 (full) | + +**How it is invoked:** menu option **3** of the `MENU` menu ("Work with Customers (EJS)"), which runs +`call wrkcusteo` from message `USR0003` in `MENU.MSGF`. No parameters. + +## 2. Technical Specifications + +**Control Options** + +| Option | Value | Description | +|---|---|---| +| `DFTACTGRP` | `*NO` | ILE program | +| `ACTGRP` | `*NEW` | Fresh activation group per call, reclaimed on return | +| `BNDDIR` | `'CUST'` | Binds `CUSTR *SRVPGM` | +| `OPTION` | *(compiler default)* | Not overridden | +| `THREAD` | *(not coded)* | Not declared thread-safe | + +**Input Parameters** — none. + +**Files Used** + +| File | Type | Usage | Access | Description | +|---|---|---|---|---| +| `WRKCUSTEO` | WORKSTN (EJS screen, Open Access) | Update (`EXFMT`/`WRITE`/`READC`/`CHAIN`) | `SFILE(CUSTSFL : RRN)`, `HANDLER('PROFOUNDUI(HANDLER)')` | Browser-rendered customer list — one format, one subfile | +| `CUSTP` | DISK | Input (indirect) | Set-based SQL inside `CUSTR` | Never declared here | + +The program object and the display file object share the name `WRKCUSTEO` (they are different object +types, so this is legal — and it means `%eof(wrkcusteo)` in the source refers to the *file*). + +**Service Programs / Procedures Called** + +| Service Program | Procedure | Bound/Dynamic | Description | +|---|---|---|---| +| `CUSTR` | `cust_list`, `cust_get` | Bound (via `BNDDIR('CUST')`) | Customer retrieval | +| `PROFOUNDUI` | `HANDLER` | Open Access handler, resolved at run time | Renders the EJS screen in the browser | +| *(this program)* | `WRKCUST1EO` | Dynamic (`EXTPGM` program call) | EJS customer detail | + +No `QMHSNDPM`, no local subprocedures — this program has no `DCL-PROC` at all. + +## 3. ILE Structure & Invocation + +- **Activation group** — `ACTGRP(*NEW)`; the handler activates in the same group and is reclaimed with + it. +- **Binding** — static bind to `CUSTR` through `CUST.BNDDIR`. The handler is a run-time literal; + the EJS template, CSS and JS are fetched by the browser at run time from the Profound UI HTTP + server, so **nothing about the screen's appearance is checked at compile time**. +- **Call hierarchy** + +```mermaid +flowchart LR + MENU["MENU (option 3)
USR0003: call wrkcusteo"] -.->|dynamic CALL| PGM[WRKCUSTEO.PGM] + PGM ==>|bound| SRV["CUSTR.SRVPGM
cust_list / cust_get"] + PGM -.->|"Open Access handler"| PUI["PROFOUNDUI(HANDLER)"] + PGM -.->|dynamic CALL| DTL[WRKCUST1EO.PGM] + DTL ==>|bound| SRV + DTL -.->|"Open Access handler"| PUI +``` + +## 4. Dependency Tree (text) + +``` +WRKCUSTEO.PGM +├── Source +│ ├── wrkcusteo.rpgle +│ └── custr_pr.rpgle (/COPY member: cust_rec template + prototypes) +├── Display Files +│ └── WRKCUSTEO.FILE (EJS screen file, ENHDSP(*YES), generated from +│ qddssrc/wrkcusteo.json — format custctl, +│ subfile custsfl) +├── Client-side assets (IFS, served by the Profound UI HTTP instance) +│ ├── /profoundui/userdata/ui/wrkcuste/custlist.ejs (docs/htdocs/... in the repo) +│ ├── /profoundui/userdata/ui/wrkcuste/custlist.css +│ └── /profoundui/userdata/ui/wrkcuste/custlist.js +├── Service Programs +│ ├── CUSTR.SRVPGM (cust_list, cust_get) +│ └── PROFOUNDUI.SRVPGM (Open Access handler — third party, run-time) +├── Binding Directory +│ └── CUST.BNDDIR +├── Programs called +│ └── WRKCUST1EO.PGM (EJS customer detail) +└── Database + └── CUSTP.FILE (PF, key CUSTNO) — accessed only through CUSTR.SRVPGM +``` + +## 5. Dependency Diagram (Mermaid) + +```mermaid +flowchart TD + subgraph BROWSER[Browser] + TPL["custlist.ejs + custlist.css + custlist.js
served from /profoundui/userdata/ui/wrkcuste/"] + end + subgraph UI[User Interface Layer] + MNU["MENU
option 3"] + PGM["WRKCUSTEO.PGM
Work with Customers (EJS)"] + DTL["WRKCUST1EO.PGM
Customer Detail (EJS)"] + end + subgraph DSP[Display Files] + DSPF["WRKCUSTEO.FILE
EJS screen, format custctl"] + DSPF1["WRKCUST1EO.FILE
EJS screen, format custdetail"] + end + subgraph OA[Open Access] + H["PROFOUNDUI(HANDLER)"] + end + subgraph SVC[Service Layer] + SRV["CUSTR.SRVPGM
cust_get / cust_list"] + end + subgraph DATA[Data Layer] + PF["CUSTP.FILE
CUSMSTR, key CUSTNO"] + end + MNU --> PGM + PGM --> DSPF + PGM --> DTL + DTL --> DSPF1 + DSPF --> H + DSPF1 --> H + H --> TPL + PGM ==>|bound| SRV + DTL ==>|bound| SRV + SRV -->|"embedded SQL"| PF +``` + +## 6. Complete Object Dependency List + +**Programs** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `WRKCUSTEO` | *PGM | `$IBMI_BUILD_LIBRARY` (e.g. `AITSK00104`) / `CFDEMO` | `cfdemo/qrpglesrc/wrkcusteo.rpgle` | Customer list (EJS) | +| `WRKCUST1EO` | *PGM | build library | `cfdemo/qrpglesrc/wrkcust1eo.rpgle` | Customer detail (EJS) | + +**Service Programs** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUSTR` | *SRVPGM | build library | `qrpglesrc/custr.sqlrpgle` + `qsrvsrc/custr.bnd` | Customer data service | +| `PROFOUNDUI` | *SRVPGM | Profound UI product library (via *LIBL) | *(third party — source not available; documented from reference only)* | Open Access handler | + +**Display Files** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `WRKCUSTEO` | *FILE (DSPF, `ENHDSP(*YES)`) | build library | `cfdemo/qddssrc/wrkcusteo.json` | EJS screen definition — see §8 | + +**Physical Files** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUSTP` | *FILE (PF) | *LIBL | `cfdemo/qddssrc/custp.pf` | Customer master (via `CUSTR`) | + +**Binding Directories** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUST` | *BNDDIR | build library | `cfdemo/cust.bnddir` | Resolves `CUSTR` | + +**Message Files** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `MENU` | *MSGF | build library | `cfdemo/menu.msgf` | `USR0003` = `call wrkcusteo` | + +**Copy Members** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `custr_pr` | Source | n/a | `cfdemo/qrpglesrc/custr_pr.rpgle` | `cust_rec` template + prototypes | + +**IFS assets** (not IBM i objects, and **not deployed by codermake** — see §15) + +| Path in repo | Deployed path | Description | +|---|---|---| +| `docs/htdocs/profoundui/userdata/ui/wrkcuste/custlist.ejs` | `/profoundui/userdata/ui/wrkcuste/custlist.ejs` | List screen template | +| `.../custlist.css` | same | List screen styling | +| `.../custlist.js` | same | Client-side column sorting + zero-blanking | + +## 7. Database Schema & Access (DB2 for i) + +No direct database access — everything through `cust_list` / `cust_get`. See +`CUSTR_Technical_Documentation.md` §7 for the full `CUSTP` layout and access-path analysis. + +Column-to-field mapping, with the widths declared in `wrkcusteo.json`: + +| `CUSTP` field(s) | Screen field | JSON type/length | Notes | +|---|---|---|---| +| `CUSTNO` | `scustno` | zoned 6 | Passed to `WRKCUST1EO` | +| `CNAME` | `sname` | char 40 | **Full length** — no truncation, unlike the 5250/Rich Display variants | +| `CEMAIL` | `semail` | char 60 | **Full length** | +| `CPHONE` | `sphone` | char 15 | | +| `CADDR1`+`CADDR2`+`CCITY`+`CSTATE`+`CZIP` | `saddr` | char 100 | Assembled by `loadSFL`; 100 characters is enough for the concatenation the program builds | + +- **Key & access path** — rows arrive `ORDER BY CUSTNO` from `cust_list`, using `CUSTP`'s non-unique + keyed access path. +- **Referential integrity / triggers / journaling** — none defined in source. +- **Commitment control** — none; read-only program, `CUSTR` runs `COMMIT(*NONE)`. + +Because the fields are full-width here, this variant is the only one where the visible list always +contains the text the server-side filter matched on. + +## 8. Display File Layout + +`WRKCUSTEO` is an **EJS-type Rich Display source**: `cfdemo/qddssrc/wrkcusteo.json` declares +`"type": "ejs"` and, per format, the template/CSS/JS URLs plus a flat list of fields — there is no +widget geometry at all. codermake converts it to DDS and compiles it `ENHDSP(*YES)`; the visual +layout lives entirely in `custlist.ejs`. + +**Format `custctl`** — "Customer List Control" + +| Asset | Path | +|---|---| +| `template` | `/profoundui/userdata/ui/wrkcuste/custlist.ejs` | +| `css` | `/profoundui/userdata/ui/wrkcuste/custlist.css` | +| `js` | `/profoundui/userdata/ui/wrkcuste/custlist.js` | + +| Field | Type | Length | Direction in practice | Description | +|---|---|---|---|---| +| `action` | char | 10 | Both | Command channel: template sends `SEARCH` or `EXIT`; program tests for `EXIT` and clears it before each display | +| `sfndcustno` | zoned | 6 | Both | Find by customer number | +| `sfilter` | char | 50 | Both | Server-side filter text | +| `soptdesc` | char | 20 | Output | Option legend (`5=Display`, or blank) | +| `msg` | char | 78 | Output | Single-line message area (errors, `No customers found.`) | + +**Subfile `custsfl`** — "Customer Subfile"; `clear` field: `sflclear` + +| Field | Type | Length | Description | +|---|---|---|---| +| `sopt` | char | 2 | Option entry per row | +| `scustno` | zoned | 6 | Customer number | +| `sname` | char | 40 | Customer name | +| `semail` | char | 60 | Email | +| `sphone` | char | 15 | Phone | +| `saddr` | char | 100 | Assembled address | + +Note that `sflclear` is **not** declared in the RPG source — it is a field of the generated display +file, so assigning `sflclear = '1'` before `WRITE custctl` is the EJS equivalent of turning on an +`SFLCLR` indicator. The same is true of `action` and `msg`. + +**Rendered layout** (`custlist.ejs`) + +``` +┌──────────────────────────────────────────────────────────────────────────┐ +│ Work with Customers │ +│ │ +│ Find Customer #: [______] Filter: [___________________] [ Search ] │ +│ │ +│ ‹ message area — shown only when msg is non-blank › │ +│ ‹ options hint — shown only when soptdesc is non-blank › │ +│ │ +│ Opt │ Number ▲ │ Name ▲ │ Email ▲ │ Phone ▲ │ Address ▲ (sortable) │ +│ [__]│ 100001 │ ACME… │ orders@…│ 555-0100│ 100 MAIN ST… │ +│ [__]│ 100002 │ … │ … │ … │ … │ +│ │ +│ [ Exit (F3) ] │ +└──────────────────────────────────────────────────────────────────────────┘ +``` + +Template mechanics worth knowing: + +- **Submit channel.** Buttons call `pui.submit({action: 'SEARCH'})` and `pui.submit({action: 'EXIT'})`, + and a hidden `` carries the field otherwise. The Exit button also + carries `data-fkey="F3"`. +- **Subfile row inputs** are named `custsfl.sopt.<%= row._rrn %>`, which is how the handler maps a + browser input back to a specific subfile RRN. `custsfl` is exposed to the template as an array of + row objects with a `_rrn` property. +- **Defensive field references.** Every optional field is wrapped in + `typeof x !== 'undefined' && x && x.trim()`. That matters: in EJS screens a reference to a field the + format does not declare throws and aborts the whole render (a blank screen, no error), so the guards + are load-bearing, not decorative. +- **Lower-case field names.** The handler exposes DDS field names to the template in lower case, which + is why the JSON declares them lower case and the template uses `sfndcustno`, `msg`, `row.scustno`. +- **Client-side sorting.** `custlist.js` wires the `.sort-button` header buttons to a DOM sort using + `data-sort-*` attributes, and blanks `sfndcustno` when it renders as `0`. It sorts only the rows + already loaded — it is not a re-query. +- **Known gotcha in this environment:** a file listed in the format's `js` array is loaded and executed + *before* the template's DOM exists, so `DOMContentLoaded`/`readyState` initialisation like + `custlist.js` uses can run against an empty document and silently bind nothing — the sort buttons and + the zero-blanking then do nothing. The reliable pattern is inline handler attributes calling window + globals (which is exactly what the buttons in the template already do). Verify sorting actually + works before assuming it does. +- **Deployment coupling.** The template is fetched by the browser from the Profound UI document root. + It is *not* part of the display file object and *not* deployed by codermake, so a rebuilt program with + stale (or absent) IFS assets renders the old screen or nothing at all. Version-stamping the asset URLs + in the JSON is the usual defence against browser caching after an edit. + +## 9. Program Flow (Mermaid) & Key Routines + +```mermaid +flowchart TD + A[Start] --> B{"action = 'EXIT'?"} + B -->|Yes| Z["*INLR = *ON; end"] + B -->|No| C["getCustomers
(find-by-number or filtered list)"] + C --> D{"numCustomers = 0?"} + D -->|Yes| E["soptdesc = ''
msg = 'No customers found.'
clearSFL"] + D -->|No| F["soptdesc = '5=Display'
msg = ''
loadSFL"] + E --> G["sfndcustno = findCust
sfilter = filter
action = ''"] + F --> G + G --> H["EXFMT CUSTCTL (rendered in browser)"] + H --> I{"action = 'EXIT'?"} + I -->|Yes| Z + I -->|No| J{"Find or filter changed?"} + J -->|Yes| K["Reset the other criterion
ITER (re-query)"] + K --> B + J -->|No| L{"numCustomers > 0?"} + L -->|No| B + L -->|Yes| M["READC loop: remember first row
with a non-blank option"] + M --> N{"Row selected?"} + N -->|No| B + N -->|Yes| O["CHAIN that RRN"] + O --> P{"option = '5'?"} + P -->|Yes| Q["CALL WRKCUST1EO(SCUSTNO)"] + P -->|No| B + Q --> B +``` + +**Key routines** + +| Routine | Kind | Purpose | +|---|---|---| +| `getCustomers` | Subroutine | `cust_get` when `findCust <> 0` (0 or 1 row), else `cust_list` with the trimmed filter; a returned error string is assigned to `msg` | +| `clearSFL` | Subroutine | `rrn = 0`, `sflclear = '1'`, `WRITE custctl`, `sflclear = '0'` | +| `loadSFL` | Subroutine | Clears, then one `WRITE custsfl` per customer, assembling `saddr` from four address columns | + +**Control-flow differences from the other two variants** — all of them simplifications: + +- The loop condition is `dow action <> 'EXIT'`, and `action` is cleared to `''` immediately before each + `EXFMT`, so a stale `EXIT` can never re-trigger. Exit is handled twice: a `select`/`leave` right after + the `EXFMT`, and the loop condition itself. +- **No option validation.** There is no `isValidOption` and no re-prompt. A row with an option other + than `5` is read, `CHAIN`ed and then falls through the `select` with no `other` branch — the option is + silently ignored and the list simply refreshes. The 5250 and Rich Display variants tell the user + `Invalid option: x`; this one does not. +- **Simplified multi-selection rule.** The `READC` loop keeps the first row whose `sopt` is non-blank + (`if sopt <> '' and selrrn = 0`) and updates every changed row; later selections are ignored without + the extra blanking logic the other variants use. +- **`msg` instead of a message subfile** — one line, last message wins; there is no `QMHSNDPM`, no + `SFLPGMQ`/`SFLMSGKEY` plumbing and no PSDS. + +**Storage note** — as in the other variants, `customers` is a module-level `dim(9999)` array of the +271-byte `cust_rec` (~2.6 MB static), and `cust_list` is called with `limit = %elem(customers)`, so the +list silently caps at 9999 rows. + +## 10. Indicators Used + +**None.** This program uses no numbered indicators at all — not even `*IN03`. That is the headline +difference from the other two front ends: screen state is carried by *named character fields* +(`action`, `msg`, `soptdesc`, `sflclear`) rather than by indicators, which is what makes the EJS +template readable as ordinary HTML. `*INLR` is set `*ON` at the end to close down cleanly. + +| Named condition field | Values | Purpose | +|---|---|---| +| `action` | `''`, `'SEARCH'`, `'EXIT'` | Command from the template; `EXIT` ends the program | +| `msg` | free text | Error / status line | +| `soptdesc` | `''` or `'5=Display'` | Option legend | +| `sflclear` | `'1'` / `'0'` | Subfile clear (replaces `SFLCLR` + indicator) | + +## 11. Error & Exception Handling + +**Strategy — error text as data in a single message field; no exception monitors.** No `MONITOR`, no +`*PSSR`, no PSDS, no INFDS, no `(E)` extenders. + +| Condition | Detection | User sees | Recovery | +|---|---|---|---| +| `cust_list` / `cust_get` failure | non-blank return value tested in `getCustomers` | `msg` line: `Error retrieving customer list. SQLCODE = ..., SQLSTATE = ...` | Check library list / authority / `CUSTP` layout; the screen stays usable with an empty list | +| No rows matched | `numCustomers = 0` | `msg` = `No customers found.`, option legend blank | Adjust the filter | +| Invalid subfile option | **not handled** | Nothing — the option is ignored and the list refreshes | Consider adding validation if this matters | +| `PROFOUNDUI` handler missing / wrong FP level | **not handled** | Escape message on first `WRITE`/`EXFMT`, or a blank screen | Environmental | +| Missing / stale IFS template assets | **not handled** | Blank or outdated screen with the program running normally | Deploy the assets; cache-bust the URLs | +| Workstation/device error, missing display file | **not handled** | Default handler inquiry, then `RNX` dump | Fix the library list and re-call | + +One subtlety in the message flow: `msg` is reassigned on every pass (`''` when rows are found), so a +service-program error raised on one pass is cleared on the next successful pass. There is no message +history, unlike the scrollable message subfile in the other variants. + +Nothing is written to the database, so no failure requires a back-out. + +## 12. Security & Authority + +- No adopted authority; runs with the caller's authority. +- Required authority: `*USE` on `WRKCUSTEO` (program and display file), `WRKCUST1EO`, `CUSTR`, `CUSTP` + and the Profound UI product objects, plus `*EXECUTE` on the libraries. +- The Profound UI HTTP instance is part of the perimeter, and additionally the **IFS assets** are: the + `.ejs` template is served to the browser, so anyone who can read the document root can read the + template. Keep the template free of anything sensitive (it currently contains only markup) and treat + write access to `/profoundui/userdata/ui/...` as a code-deployment authority — a modified template can + change what the screen submits. +- Sensitive data (names, emails, phone numbers here; credit limit and balance on the detail screen) is + unmasked, and the full-width fields in this variant expose *more* than the truncated 5250 list. No + field procedures, no audit journalling of views. + +## 13. Interfaces & Integration + +| Interface | Direction | Format | Trigger | +|---|---|---|---| +| Open Access handler `PROFOUNDUI(HANDLER)` | Bidirectional | Field/subfile values | Every `WRITE` / `EXFMT` / `READC` | +| HTTP(S) fetch of `custlist.ejs` / `.css` / `.js` | Inbound to the browser | Text assets from the IFS | Screen render | +| `pui.submit({action: ...})` | Browser → program | `action` field value | User clicks Search / Exit, or presses Enter/F3 | + +No data queues, data areas, web services, MQ or file transfers. + +## 14. Batch / Job Flow + +Not applicable — interactive, browser-driven. + +## 15. Build & Compile + +``` +CRTDSPF FILE(/WRKCUSTEO) SRCFILE(/QDDSSRC) ENHDSP(*YES) <- DDS generated from wrkcusteo.json +CRTBNDRPG PGM(/WRKCUSTEO) SRCSTMF('cfdemo/qrpglesrc/wrkcusteo.rpgle') +``` + +`Rules.mk`: + +```makefile +wrkcusteo.file: qddssrc/wrkcusteo.json +wrkcusteo.pgm: qrpglesrc/wrkcusteo.rpgle qddssrc/wrkcusteo.json qrpglesrc/custr_pr.rpgle custr.srvpgm | wrkcusteo.file cust.bnddir +``` + +Build order: `custp.file` → `custr.module` → `custr.srvpgm` → `cust.bnddir` → `wrkcusteo.file` → +`wrkcusteo.pgm` (plus `wrkcust1eo.pgm` for the drill-down). Build with codermake — never issue the +create commands by hand: + +```bash +cd /workspace/workspace/ibmi-agentic +codermake wrkcusteo.pgm +``` + +**The build is only half the deployment.** codermake creates IBM i objects; it does **not** copy the +`htdocs` tree. The three client assets under `docs/htdocs/profoundui/userdata/ui/wrkcuste/` must be +transferred to the Profound UI instance's document root at +`/profoundui/userdata/ui/wrkcuste/` for the screen to render. A green build with no asset deployment +produces a blank screen, which is the single most common way this variant appears "broken". + +## 16. Related Programs + +| Program | Description | Relationship | +|---|---|---| +| `WRKCUST1EO` | Customer detail (EJS) | Callee — option `5`, passes `SCUSTNO` | +| `CUSTR` | Customer data service program | Callee (bound) | +| `WRKCUSTR` | Same function on a 5250 DDS display file | Alternate front end (menu option 1) | +| `WRKCUSTRO` | Same function on a Profound UI Rich Display file | Alternate front end (menu option 2) | +| `MENU` | `Agentic Coding Demo Menu` | Caller — option 3 | + +## 17. Testing Notes + +Requires a Profound UI browser session **and** the IFS assets in place. + +| Scenario | Steps | Expected result | +|---|---|---| +| Screen renders | Menu option 3 | `Work with Customers` heading, search toolbar, customer table styled by `custlist.css` | +| Assets missing | Rename/remove the `.ejs` on the server | Blank screen with the program still running — confirms the deployment coupling | +| List loads | — | Rows in customer-number order; full names, full emails, assembled address | +| Search by filter | Type in *Filter*, click `Search` | `action = 'SEARCH'` submitted; database re-queried; only matching rows | +| Find by number | Type a number in *Find Customer #* | Single row; filter cleared | +| Find missing number | Number not in `CUSTP` | `No customers found.` in the message area, no option hint | +| Zero blanked | Return to the list after a find | `sfndcustno` shows blank rather than `0` — **verify**, since this comes from `custlist.js`, which may not initialise (see §8) | +| Column sorting | Click the `Number` / `Name` header buttons | Rows re-sorted client-side, ascending then descending — **verify**, same caveat | +| Valid option | Type `5` in a row's Opt box and submit | `WRKCUST1EO` detail screen for that customer | +| Invalid option | Type `9` in a row's Opt box and submit | **Silently ignored** — the list simply refreshes with no message (documented behaviour, not a defect to file against the screen) | +| Multiple options | Type `5` on two rows | Only the first is opened | +| Exit | Click `Exit (F3)` | `action = 'EXIT'`; program ends and returns to the menu | + +No automated tests exist in the repository. + +## 18. Version Information + +| Attribute | Value | +|---|---| +| Source Format | Fully free-format (`**FREE`) | +| ILE Compatible | Yes | +| Activation Group | `*NEW` | +| Uses Embedded SQL | No (SQL is inside `CUSTR`) | +| Multi-threaded | No | +| Display Type | Profound UI **EJS screen** (`"type": "ejs"`, RPG Open Access, `ENHDSP(*YES)`) | +| Indicators Used | None | +| Target Release (TGTRLS) | Compiler default (build machine's release) | diff --git a/docs/WRKCUSTRO_Technical_Documentation.md b/docs/WRKCUSTRO_Technical_Documentation.md new file mode 100644 index 00000000..8a7eda7e --- /dev/null +++ b/docs/WRKCUSTRO_Technical_Documentation.md @@ -0,0 +1,514 @@ +# WRKCUSTRO — Technical Documentation + +| | | +|---|---| +| **Program** | WRKCUSTRO | +| **Type** | *PGM | +| **Language** | ILE RPG, fully free-format (`**FREE`) — RPG Open Access | +| **Source** | `cfdemo/qrpglesrc/wrkcustro.rpgle` | +| **IBM i target release** | Not specified (TGTRLS defaults to the build machine's release) | +| **Version / Author / Date** | 1.0 / Claude (Opus 5) / 2026-08-19 | + +### Revision History + +| Version | Date | Author | Change | Ref | +|---|---|---|---|---| +| 1.0 | 2026-08-19 | Claude (Opus 5) | Initial documentation | — | + +## 1. Overview + +`WRKCUSTRO` is the **Profound UI Rich Display** version of Work with Customers. It is the same +program logic as the 5250 `WRKCUSTR` — load-all subfile, find-by-number, server-side filter, +message subfile, option `5=Display` — but its workstation file is a **Rich Display File** and the +`DCL-F` carries `HANDLER('PROFOUNDUI(HANDLER)')`, so the RPG Open Access handler intercepts every +`WRITE`/`EXFMT`/`READC` and renders the screen as HTML widgets in a browser instead of a 5250 data +stream. + +The RPG source differs from `WRKCUSTR` in exactly four lines: the file name and handler on the +`DCL-F`, the `%EOF` file name, and the prototype/call of the detail program (`WRKCUST1RO` instead of +`WRKCUST1R`). Everything else — indicator scheme, subfile handling, `QMHSNDPM` messaging, PSDS +usage, option validation — is identical. That is the point of the example: Open Access modernizes the +presentation without touching business logic. + +**How it is invoked:** menu option **2** of the `MENU` menu ("Work with Customers (RPGOA)"), which +runs `call wrkcustro` from message `USR0002` in `MENU.MSGF`. No parameters. + +## 2. Technical Specifications + +**Control Options** + +| Option | Value | Description | +|---|---|---| +| `DFTACTGRP` | `*NO` | ILE program | +| `ACTGRP` | `*NEW` | New activation group per call, reclaimed on return | +| `BNDDIR` | `'CUST'` | Binds `CUSTR *SRVPGM` | +| `OPTION` | *(compiler default)* | Not overridden | +| `THREAD` | *(not coded)* | Not declared thread-safe | + +**Input Parameters** — none. + +**Files Used** + +| File | Type | Usage | Access | Description | +|---|---|---|---|---| +| `WRKCUSTDO` | WORKSTN (Rich Display, Open Access) | Update (`EXFMT`/`WRITE`/`READC`/`CHAIN`) | `SFILE(CUSTSFL : RRN)`, `SFILE(CUSTMSGSFL : MSGRRN)`, `HANDLER('PROFOUNDUI(HANDLER)')` | Browser-rendered customer list, footer, empty-list overlay, message subfile | +| `CUSTP` | DISK | Input (indirect) | Set-based SQL inside `CUSTR` | Never declared here | + +The `HANDLER` keyword is the whole difference at runtime. The file is still compiled as a display +file object (created `ENHDSP(*YES)` from the Rich Display JSON), and the RPG operation codes are +unchanged, but the Open Access handler `PROFOUNDUI(HANDLER)` — a Profound UI service program +procedure — receives each I/O request and exchanges field values with the browser client. + +**Service Programs / Procedures Called** + +| Service Program | Procedure | Bound/Dynamic | Description | +|---|---|---|---| +| `CUSTR` | `cust_list`, `cust_get` | Bound (via `BNDDIR('CUST')`) | Customer retrieval | +| `PROFOUNDUI` | `HANDLER` | Open Access handler (resolved at run time from the library list) | Renders the Rich Display file in the browser | +| `QSYS/QMHSNDPM` | — | Dynamic (`EXTPGM`) | Sends `CPF9897` info messages for the message subfile | +| *(this program)* | `WRKCUST1RO` | Dynamic (`EXTPGM` program call) | Rich Display customer detail | + +**Local procedures** + +| Procedure | Interface | Purpose | +|---|---|---| +| `writeMSGSFL` | `(msgData varchar(80) const options(*varsize))` | `QMHSNDPM` + one message-subfile record | +| `isValidOption` | `(option char(2) const)` → `ind` | Whitelists subfile options; only `5` | + +## 3. ILE Structure & Invocation + +- **Activation group** — `ACTGRP(*NEW)`. Note that the Profound UI handler is activated in this group + too, so its state (session, widget metadata) is scoped to the invocation and cleaned up on return. +- **Binding** — static bind to `CUSTR` through `CUST.BNDDIR`. The Open Access handler is **not** bound + at compile time: `HANDLER('PROFOUNDUI(HANDLER)')` is a literal resolved at run time, so a missing + or wrong-level `PROFOUNDUI` service program in the library list is a **runtime** failure, not a + build failure. +- **Call hierarchy** + +```mermaid +flowchart LR + MENU["MENU (option 2)
USR0002: call wrkcustro"] -.->|dynamic CALL| PGM[WRKCUSTRO.PGM] + PGM ==>|bound| SRV["CUSTR.SRVPGM
cust_list / cust_get"] + PGM -.->|"Open Access handler"| PUI["PROFOUNDUI(HANDLER)"] + PGM -.->|dynamic CALL| DTL[WRKCUST1RO.PGM] + PGM -.->|dynamic CALL| QMH[QMHSNDPM] + DTL ==>|bound| SRV + DTL -.->|"Open Access handler"| PUI +``` + +## 4. Dependency Tree (text) + +``` +WRKCUSTRO.PGM +├── Source +│ ├── wrkcustro.rpgle +│ └── custr_pr.rpgle (/COPY member: cust_rec template + prototypes) +├── Display Files +│ └── WRKCUSTDO.FILE (Rich Display File, ENHDSP(*YES), generated from +│ qddssrc/wrkcustdo.json: custctl, custfoot, +│ custnone, custmsgctl) +├── Service Programs +│ ├── CUSTR.SRVPGM (cust_list, cust_get) +│ └── PROFOUNDUI.SRVPGM (Open Access handler — third party, resolved at run time) +├── Binding Directory +│ └── CUST.BNDDIR +├── Programs called +│ ├── WRKCUST1RO.PGM (Rich Display customer detail) +│ └── QSYS/QMHSNDPM (send program message) +├── Message Files +│ └── QSYS/QCPFMSG (CPF9897 as a text carrier) +├── Client-side assets (served by the Profound UI HTTP instance) +│ └── pls-- theme classes (skin CSS/JS), material icons +└── Database + └── CUSTP.FILE (PF, key CUSTNO) — accessed only through CUSTR.SRVPGM +``` + +## 5. Dependency Diagram (Mermaid) + +```mermaid +flowchart TD + subgraph BROWSER[Browser] + UIC["Profound UI client
grid, combo box, buttons"] + end + subgraph UI[User Interface Layer] + MNU["MENU
option 2"] + PGM["WRKCUSTRO.PGM
Work with Customers"] + DTL["WRKCUST1RO.PGM
Customer Detail"] + end + subgraph DSP[Display Files] + DSPF["WRKCUSTDO.FILE
Rich Display, 4 formats"] + DSPF1["WRKCUST1DO.FILE
detail + error window"] + end + subgraph OA[Open Access] + H["PROFOUNDUI(HANDLER)"] + end + subgraph API[System APIs] + QMH["QMHSNDPM"] + end + subgraph SVC[Service Layer] + SRV["CUSTR.SRVPGM
cust_get / cust_list"] + end + subgraph DATA[Data Layer] + PF["CUSTP.FILE
CUSMSTR, key CUSTNO"] + end + MNU --> PGM + PGM --> DSPF + PGM --> QMH + PGM --> DTL + DTL --> DSPF1 + DSPF --> H + DSPF1 --> H + H --> UIC + PGM ==>|bound| SRV + DTL ==>|bound| SRV + SRV -->|"embedded SQL"| PF +``` + +## 6. Complete Object Dependency List + +**Programs** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `WRKCUSTRO` | *PGM | `$IBMI_BUILD_LIBRARY` (e.g. `AITSK00104`) / `CFDEMO` | `cfdemo/qrpglesrc/wrkcustro.rpgle` | Customer list (Rich Display) | +| `WRKCUST1RO` | *PGM | build library | `cfdemo/qrpglesrc/wrkcust1ro.rpgle` | Customer detail (Rich Display) | +| `QMHSNDPM` | *PGM | `QSYS` | *(IBM-supplied)* | Send Program Message API | + +**Service Programs** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUSTR` | *SRVPGM | build library | `qrpglesrc/custr.sqlrpgle` + `qsrvsrc/custr.bnd` | Customer data service | +| `PROFOUNDUI` | *SRVPGM | Profound UI product library (via *LIBL) | *(third party — source not available; documented from reference only)* | Open Access handler | + +**Display Files** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `WRKCUSTDO` | *FILE (DSPF, `ENHDSP(*YES)`) | build library | `cfdemo/qddssrc/wrkcustdo.json` | Rich Display File — see §8 | + +**Physical Files** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUSTP` | *FILE (PF) | *LIBL | `cfdemo/qddssrc/custp.pf` | Customer master (via `CUSTR`) | + +**Binding Directories** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUST` | *BNDDIR | build library | `cfdemo/cust.bnddir` | Resolves `CUSTR` | + +**Message Files** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `QCPFMSG` | *MSGF | `QSYS` | *(IBM-supplied)* | `CPF9897` text carrier | +| `MENU` | *MSGF | build library | `cfdemo/menu.msgf` | `USR0002` = `call wrkcustro` | + +**Copy Members** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `custr_pr` | Source | n/a | `cfdemo/qrpglesrc/custr_pr.rpgle` | `cust_rec` template + prototypes | + +## 7. Database Schema & Access (DB2 for i) + +Identical to `WRKCUSTR`: no direct database access, everything through `cust_list` / `cust_get`. +See `CUSTR_Technical_Documentation.md` §7 for the full `CUSTP` layout, key and access-path analysis. +Summary of what matters here: + +- `CUSTP`, format `CUSMSTR`, 271-byte record, non-unique keyed access path on `CUSTNO`; rows arrive + `ORDER BY CUSTNO`. +- No referential constraints, no triggers, no journaling, no commitment control. +- The subfile fields truncate as in the 5250 version — `SNAME` is 20 characters (from `CNAME(40)`) and + `SEMAIL` is 25 (from `CEMAIL(60)`) — because the Rich Display JSON keeps the original 5250 field + lengths. The server-side filter still matches on the full column values, so a match can be + invisible in the grid. (`WRKCUSTEO`, the EJS variant, widens these fields and avoids this.) + +## 8. Display File Layout + +`WRKCUSTDO` is a **Profound UI Rich Display File**: the source of truth is +`cfdemo/qddssrc/wrkcustdo.json`, which codermake converts to DDS and compiles with +`CRTDSPF ... ENHDSP(*YES)`. There is no 5250 panel to mock up in the usual sense — widgets are +positioned in pixels, and the record formats carry `overlay range` values that map them onto the +notional 24×80 grid the RPG program still thinks in. + +| Record format | Overlay | Overlay range | Purpose | +|---|---|---|---| +| `custctl` | Yes | 1–22 | Subfile control record: heading panel, find/filter fields, grid | +| `custfoot` | — | 23–23 | Function-key legend | +| `custnone` | Yes | 10–10 | "No customers to display" overlay (design overlay: `custctl`) | +| `custmsgctl` | Yes | 24–24 | Message subfile control record | + +**`custctl` widgets** + +| Widget | Type | Bound field / behaviour | +|---|---|---| +| `custctl_screenlayout` | layout — `css panel` | Header text `Work with Customers`; themes `pls--header` / `pls--body`, class `pls--panel--wide` | +| `sfndcustno` | textbox | `sfndcustno` zoned(6) — find by number | +| `sfilter` | textbox | `sfilter` char(48) — server-side filter | +| `custctl_btnsubmit` | graphic button | `Filter/Find`, icon `material:filter_list`, shortcut **Enter** | +| `custctl_btnclear` | graphic button | `Clear Form`, `onclick: pls.field.clearForm(this)` — client-side only | +| `btnCA03` | graphic button | `Exit`, shortcut **F3**, response `*IN03`, `bypass validation` | +| `btnSubmit` | graphic button | `Continue`, shortcut **Enter** (hidden-field container) | +| `soptdesc` | output field | `soptdesc` char(77) — option legend | +| `OptionButtons1` | option buttons | Driven by `soptdesc`; `user defined data` = `custsfl`, `user defined data 2` = `sopt` — renders the legend as clickable option buttons that write into the grid's option column | +| `custsfl_filterAll` | textbox | Placeholder `Filter All`, `onkeyup: pls.grid.setFilter('custsfl', this)` — **client-side** filter across loaded grid rows | +| `custsfl` | grid | The subfile — see below | +| `sopt` | combo box (grid column 0) | `sopt` char(2), uppercase; `css class 2` = `RI` when `*IN50`; `set focus` when `*IN50` | +| `scustno`, `sname`, `semail`, `sphone`, `saddr` | output fields (grid columns 1–5) | zoned(6), char(20), char(25), char(15), char(64) | + +**`custsfl` grid properties** — the Rich Display equivalent of the 5250 subfile keywords: + +| Property | Value | 5250 equivalent | +|---|---|---| +| `record format name` | `custsfl` | `SFL` | +| `subfile size` / `number of rows` | 15 / 15 | `SFLSIZ` / `SFLPAG` | +| `display subfile` | expression `N31 and 30` | `SFLDSP` conditioned `N31 30` | +| `display control record` | `true` | `SFLDSPCTL` | +| `clear subfile` | expression `31` | `SFLCLR` | +| `subfile end` | expression `N31 and 30` | `SFLEND` | +| `subfile next changed` | expression `51` | `SFLNXTCHG` | +| `collapsed` | expression `N31 and 30` | `SFLDROP(CF11)` — the fold/unfold equivalent | +| `row selection` | `single` | — | +| `column headings` | `Select,Cust #,Name,Primary Email,Phone,Address` | Row 8 constants | +| `column widths` | `60,70,180,240,130,460` (px) | Column positions | +| `sortable / movable / resizable columns`, `hide columns option`, `reset option`, `find option`, `filter option` | `true` | *(no 5250 equivalent)* | +| `xlsx export` / `export only visible columns` / `export with headings` | `true` | *(no 5250 equivalent)* | +| `persist state` | `program only` | *(no 5250 equivalent)* | +| `scrollbar` | `sliding`, tool tip `row number` | Page up/down | +| `css class` | `pls--grid` | — | + +**`custfoot`** — `sfkeys` output field, char(**512**) in the Rich Display definition (the 5250 field +is 77). The program only ever assigns `F3=Exit` or `F3=Exit F11=Fold/Unfold`, so the extra length is +headroom, not a difference in behaviour. + +**`custnone`** — a single output constant `** No customers to display **`. + +**`custmsgctl`** — `custmsgsfl` grid, one column, no header, `subfile size` 2, `number of rows` 1, +class `pls--grid-messages`, with the message-subfile bindings that replace the DDS keywords: + +| Property | Bound field | 5250 equivalent | +|---|---|---| +| `subfile program message queue` | `spgmq` char(10) | `SFLPGMQ(10)` | +| `subfile message key` | `smsgkey` char(4) | `SFLMSGKEY` | +| `display subfile` / `subfile end` | expression `N41 and 40` | `SFLDSP` / `SFLEND` | +| `clear subfile` | expression `41` | `SFLCLR` | + +**Two filters, one screen.** Worth being explicit about, because it surprises people: `sfilter` is a +*server-side* filter (the value is sent to the program, which passes it to `cust_list`, which +re-queries `CUSTP`), while `custsfl_filterAll` and the grid's own filter/find options are +*client-side* and only narrow the rows already loaded into the browser. A user who filters +client-side is looking at a subset of at most the loaded 9999 rows; a user who types in `sfilter` +gets a fresh database query. + +**Runtime environment note.** Rendering requires a working Profound UI installation whose server-side +objects and client-side JavaScript are at compatible fix-pack levels. When they are not, the handler +returns no widget metadata and the screen renders blank or partially blank even though the program +runs correctly — worth checking before assuming a code defect. + +## 9. Program Flow (Mermaid) & Key Routines + +Flow is identical to `WRKCUSTR`. The screen is refreshed from the database on every pass of the +outer loop. + +```mermaid +flowchart TD + A[Start] --> B{"*IN03 on?"} + B -->|Yes| Z["*INLR = *ON; end"] + B -->|No| C["clearMSGSFL"] + C --> D["getCustomers
(find-by-number or filtered list)"] + D --> E["Build SFKEYS; WRITE CUSTFOOT"] + E --> F{"numCustomers = 0?"} + F -->|Yes| G["*IN30 = *OFF
WRITE CUSTNONE"] + F -->|No| H["loadSFL
*IN30 = *ON"] + G --> I{"msgrrn > 0?"} + H --> I + I -->|Yes| J["*IN40 = *ON
WRITE CUSTMSGCTL"] + I -->|No| K["*IN40 = *OFF"] + J --> L["Set SOPTDESC
EXFMT CUSTCTL (rendered in browser)"] + K --> L + L --> M["processFKeys (F3 -> end)"] + M --> N{"Find or filter changed?"} + N -->|Yes| O["Reset the other criterion
ITER"] + O --> B + N -->|No| P{"*IN30 (grid shown)?"} + P -->|No| B + P -->|Yes| Q["READC loop: first row with an option"] + Q --> R{"Option valid?"} + R -->|No| S["writeMSGSFL 'Invalid option'
*IN50/51 on, UPDATE, EXFMT again"] + S --> Q + R -->|Yes| T{"Option = 5?"} + T -->|Yes| U["CALL WRKCUST1RO(SCUSTNO)"] + T -->|No| B + U --> B +``` + +**Key routines** + +| Routine | Kind | Purpose | +|---|---|---| +| `getCustomers` | Subroutine | `cust_get` when `findCust <> 0`, else `cust_list` with the trimmed filter; returned error text goes to the message subfile | +| `clearSFL` | Subroutine | `RRN = 0`, `*IN31` on, `WRITE CUSTCTL`, `*IN31` off | +| `loadSFL` | Subroutine | One `WRITE CUSTSFL` per customer; assembles `SADDR` from four address columns | +| `clearMSGSFL` | Subroutine | `MSGRRN = 0`, `*IN41` on, `WRITE CUSTMSGCTL`, `*IN41` off | +| `processFKeys` | Subroutine | `*IN03` → `*INLR` and `RETURN` | +| `writeMSGSFL` | Subprocedure | `QMHSNDPM` → message-subfile record (see §11) | +| `isValidOption` | Subprocedure | `*ON` only for option `5` | + +Selection semantics, the single-selection rule, the `SFLNXTCHG` re-prompt loop and the ~2.6 MB +`dim(9999)` array are all exactly as documented in `WRKCUSTR_Technical_Documentation.md` §9; +`validOpt` is likewise declared and unused here. + +## 10. Indicators Used + +| Indicator | Purpose | +|---|---| +| `*IN03` | Exit — set by the `btnCA03` widget's `response` property (F3), not by a DDS `CA03` keyword | +| `*IN30` | Grid has content: `display subfile`, `subfile end`, `collapsed` expressions | +| `*IN31` | `clear subfile` for `custsfl` | +| `*IN40` | Message grid has content | +| `*IN41` | `clear subfile` for `custmsgsfl` | +| `*IN50` | Selected row: `RI` styling on the option combo box plus `set focus` | +| `*IN51` | `subfile next changed` on the selected row | +| `*INLR` | Set `*ON` before returning | + +The indicator *contract* is unchanged from the 5250 program; only the consumer differs. In the Rich +Display file the conditions are written as expressions (`N31 and 30`, `41`, `50`) on widget +properties rather than as DDS conditioning indicators, which is why the same RPG code drives both +files without modification. + +## 11. Error & Exception Handling + +The strategy is identical to `WRKCUSTR` — error text as data, surfaced through the message subfile; +no `MONITOR`, no `*PSSR`, no INFDS, and the PSDS used only to obtain the program name: + +```rpgle +dcl-ds statusDS psds qualified; + programName char(10) pos(334); +end-ds; +``` + +| Condition | Detection | User sees | +|---|---|---| +| `cust_get` / `cust_list` failure | non-blank return value tested in `getCustomers` | `Error retrieving customer list. SQLCODE = ..., SQLSTATE = ...` in the message grid | +| Invalid subfile option | `isValidOption` returns `*OFF` | `Invalid option: x`, row styled `RI`, focus set on the option field, re-prompted until corrected or blanked | + +`writeMSGSFL` sends `CPF9897` from `QCPFMSG` as an `*INFO` message with call-stack entry `*` and +counter `1`, writing the returned key straight into the DDS `SFLMSGKEY` field (`smsgkey`) and setting +`spgmq` from the PSDS program name — the same mechanics detailed in +`WRKCUSTR_Technical_Documentation.md` §11, and equally load-bearing here: the Rich Display message +grid reads `subfile program message queue` / `subfile message key` from those two fields. + +**Open Access-specific failure modes** — these have no equivalent in the 5250 program and are the +first things to check when this variant misbehaves while `WRKCUSTR` works: + +| Condition | Symptom | Notes | +|---|---|---| +| `PROFOUNDUI` service program not in the library list | Runtime escape message on the first `WRITE`/`EXFMT` | The handler name is a literal resolved at run time; the program compiles regardless | +| Program started from a plain 5250 session instead of a Profound UI / Genie session | Handler cannot reach a client | This program is browser-only | +| Server-side and client-side Profound UI fix-pack levels mismatched | Screen renders blank or missing widgets, no error message | Environmental, not a code defect | + +All other unhandled conditions (device error, missing display file, RPG runtime exception) reach the +default handler with an inquiry message and then an `RNX` dump. Nothing is written to the database, +so no back-out is required. + +## 12. Security & Authority + +- No adopted authority; runs with the caller's authority. +- Required authority: `*USE` on `WRKCUSTRO`, `WRKCUST1RO`, `CUSTR`, `WRKCUSTDO`, `WRKCUST1DO`, + `CUSTP`, and on the Profound UI product objects, plus `*EXECUTE` on the libraries. +- Additional surface compared with the 5250 variant: the browser front end reaches the program + through the Profound UI HTTP instance, so the HTTP server's authentication and the profile it runs + jobs under are part of the security perimeter. The grid's **xlsx export** lets a user take the + visible customer list off the system as a spreadsheet — a data-exfiltration consideration that + simply does not exist on the 5250 screen. +- Sensitive data (names, emails, phones; credit limit and balance on the detail screen) is unmasked; + no field procedures, no audit-journal entries for viewing. + +## 13. Interfaces & Integration + +The only integration is the Open Access handler: the program's workstation I/O is serviced by +`PROFOUNDUI(HANDLER)`, which exchanges field values with the Profound UI browser client over HTTP(S) +served by a Profound UI HTTP instance. Direction is bidirectional and request/response-shaped +(display → user action → field values returned). No data queues, data areas, web services, IFS or MQ +are used by this program. + +## 14. Batch / Job Flow + +Not applicable — interactive, browser-driven. + +## 15. Build & Compile + +``` +CRTDSPF FILE(/WRKCUSTDO) SRCFILE(/QDDSSRC) ENHDSP(*YES) <- DDS generated from wrkcustdo.json +CRTBNDRPG PGM(/WRKCUSTRO) SRCSTMF('cfdemo/qrpglesrc/wrkcustro.rpgle') +``` + +`Rules.mk`: + +```makefile +wrkcustdo.file: qddssrc/wrkcustdo.json +wrkcustro.pgm: qrpglesrc/wrkcustro.rpgle qddssrc/wrkcustdo.json qrpglesrc/custr_pr.rpgle custr.srvpgm | wrkcustdo.file cust.bnddir +``` + +Build order: `custp.file` → `custr.module` → `custr.srvpgm` → `cust.bnddir` → `wrkcustdo.file` → +`wrkcustro.pgm` (plus `wrkcust1ro.pgm` for the drill-down). Build with codermake — never issue the +create commands by hand: + +```bash +cd /workspace/workspace/ibmi-agentic +codermake wrkcustro.pgm +``` + +Two build notes specific to Rich Display files: + +- The `.json` is the source of truth. codermake converts it to DDS and then compiles it; never edit + generated DDS, and never hand-edit the display file object. +- Adding a **second subfile to one Rich Display format** is known to generate malformed DDS + (`SFL`/`SFLCTL` ordering). This file is safe because its two subfiles live in two different formats + (`custctl` and `custmsgctl`). + +## 16. Related Programs + +| Program | Description | Relationship | +|---|---|---| +| `WRKCUST1RO` | Customer detail (Rich Display) | Callee — option `5`, passes `SCUSTNO` | +| `CUSTR` | Customer data service program | Callee (bound) | +| `WRKCUSTR` | Same function on a 5250 DDS display file | Alternate front end (menu option 1); the RPG differs in four lines | +| `WRKCUSTEO` | Same function on a Profound UI EJS screen | Alternate front end (menu option 3) | +| `MENU` | `Agentic Coding Demo Menu` | Caller — option 2 | + +## 17. Testing Notes + +Requires a Profound UI (or Genie) browser session — this program cannot be tested from a plain 5250 +screen. + +| Scenario | Steps | Expected result | +|---|---|---| +| Grid loads | Menu option 2 | `Work with Customers` panel, grid with headings `Select / Cust # / Name / Primary Email / Phone / Address`, rows in customer-number order | +| Server-side filter | Type in *Filter* and click `Filter/Find` (or press Enter) | Database re-queried; only matching customers | +| Client-side filter | Type in the `Filter All` box | Loaded rows narrowed in the browser; no program interaction, no new query | +| Clear form | Click `Clear Form` | Input widgets cleared client-side; the list is not re-queried until Enter/`Filter/Find` | +| Find by number | Enter an existing customer number | Single row; filter cleared | +| Find missing number | Enter a number not in `CUSTP` | `** No customers to display **` overlay | +| Grid features | Sort a column, resize/move/hide columns, use the grid's find/filter, export to xlsx | Client-side behaviours work without a program round trip; export contains only visible columns, with headings | +| Fold / unfold | Toggle the grid's collapsed state (`*IN30`/`*IN31` expressions) | Address column collapses like `SFLDROP` on 5250 | +| Valid option | Choose `5` in a row's option combo box and submit | `WRKCUST1RO` detail screen for that customer | +| Invalid option | Type an option other than `5` | `Invalid option: x` in the message grid, row styled `RI`, focus set on that field | +| Exit | Click `Exit` or press F3 | Returns to the menu | + +No automated tests exist in the repository. + +## 18. Version Information + +| Attribute | Value | +|---|---| +| Source Format | Fully free-format (`**FREE`) | +| ILE Compatible | Yes | +| Activation Group | `*NEW` | +| Uses Embedded SQL | No (SQL is inside `CUSTR`) | +| Multi-threaded | No | +| Display Type | Profound UI Rich Display File (RPG Open Access, `HANDLER('PROFOUNDUI(HANDLER)')`, `ENHDSP(*YES)`) | +| Target Release (TGTRLS) | Compiler default (build machine's release) | diff --git a/docs/WRKCUSTR_Technical_Documentation.md b/docs/WRKCUSTR_Technical_Documentation.md new file mode 100644 index 00000000..944305b4 --- /dev/null +++ b/docs/WRKCUSTR_Technical_Documentation.md @@ -0,0 +1,538 @@ +# WRKCUSTR — Technical Documentation + +| | | +|---|---| +| **Program** | WRKCUSTR | +| **Type** | *PGM | +| **Language** | ILE RPG, fully free-format (`**FREE`) | +| **Source** | `cfdemo/qrpglesrc/wrkcustr.rpgle` | +| **IBM i target release** | Not specified (TGTRLS defaults to the build machine's release) | +| **Version / Author / Date** | 1.0 / Claude (Opus 5) / 2026-08-19 | + +### Revision History + +| Version | Date | Author | Change | Ref | +|---|---|---|---|---| +| 1.0 | 2026-08-19 | Claude (Opus 5) | Initial documentation | — | + +## 1. Overview + +`WRKCUSTR` is the classic 5250 **Work with Customers** program: a load-all subfile listing customers +from `CUSTP`, with a "find by number" field, a free-text filter, a message subfile for errors, and a +single subfile option (`5=Display`) that drills into `WRKCUST1R` for customer detail. + +It owns no database I/O of its own. The list and the single-record retrieval both come from the +`CUSTR` service program (`cust_list`, `cust_get`), so this program is purely presentation plus +navigation. It is the 5250 member of a family of three functionally equivalent front ends — +`WRKCUSTR` (5250), `WRKCUSTRO` (Profound UI Rich Display), `WRKCUSTEO` (Profound UI EJS screen +mode) — which is what makes the repository useful as a modernization demo. + +**How it is invoked:** menu option **1** of the `MENU` menu ("Work with Customers"), which runs +`call wrkcustr` from message `USR0001` in `MENU.MSGF`. It takes no parameters, so it can equally be +started with a plain `CALL WRKCUSTR`. + +## 2. Technical Specifications + +**Control Options** + +| Option | Value | Description | +|---|---|---| +| `DFTACTGRP` | `*NO` | ILE program; may bind to service programs | +| `ACTGRP` | `*NEW` | A fresh activation group per call, destroyed on return. Overrides, SQL cursors and the `CUSTR` activation are all scoped to this one invocation and cleaned up automatically when the program ends. | +| `BNDDIR` | `'CUST'` | Binds `CUSTR *SRVPGM` (see `cfdemo/cust.bnddir`) | +| `OPTION` | *(compiler default)* | Not overridden | +| `THREAD` | *(not coded)* | Not declared thread-safe | + +**Input Parameters** — none (no `DCL-PI *ENTRY`). + +**Files Used** + +| File | Type | Usage | Access | Description | +|---|---|---|---|---| +| `WRKCUSTD` | WORKSTN | Update (`EXFMT`/`WRITE`/`READC`/`CHAIN`) | Two subfiles: `SFILE(CUSTSFL : RRN)` and `SFILE(CUSTMSGSFL : MSGRRN)` | Customer list screen, footer, "no customers" overlay, and message subfile | +| `CUSTP` | DISK | Input (indirect) | Set-based SQL inside `CUSTR` | Never declared here — reached only through the service program | + +**Service Programs / Procedures Called** + +| Service Program | Procedure | Bound/Dynamic | Description | +|---|---|---|---| +| `CUSTR` | `cust_list` | Bound (via `BNDDIR('CUST')`) | Retrieve the filtered customer list | +| `CUSTR` | `cust_get` | Bound | Retrieve one customer for the "find by number" path | +| `QSYS/QMHSNDPM` | — | Dynamic (`EXTPGM`) | Send `CPF9897` info messages for the message subfile | +| *(this program)* | `WRKCUST1R` | Dynamic (`EXTPGM` program call) | Customer detail screen | + +**Local procedures** + +| Procedure | Interface | Purpose | +|---|---|---| +| `writeMSGSFL` | `(msgData varchar(80) const options(*varsize))` | Sends a program message and writes one message-subfile record | +| `isValidOption` | `(option char(2) const)` → `ind` | Whitelists subfile options; currently only `5` | + +## 3. ILE Structure & Invocation + +- **Activation group** — `ACTGRP(*NEW)`. Each `CALL WRKCUSTR` creates a new activation group; it is + destroyed when the program returns with `*INLR` on. Because `CUSTR` is `ACTGRP(*CALLER)`, the + service program activates *inside* this group, so its SQL cursor state lives and dies with this + invocation. `WRKCUST1R` is also `ACTGRP(*NEW)`, so the drill-down gets its own group and its own + `CUSTR` activation — nothing is shared across the call boundary except the parameter. +- **Binding** — static bind to `CUSTR` through the `CUST` binding directory, resolved at + `CRTBNDRPG` time. The prototypes come from `/copy custr_pr.rpgle`, so an interface change requires + recompiling this program (see the fixed-signature warning in `CUSTR_Technical_Documentation.md` §3). +- **Call hierarchy** + +```mermaid +flowchart LR + MENU["MENU (option 1)
USR0001: call wrkcustr"] -.->|dynamic CALL| PGM[WRKCUSTR.PGM] + PGM ==>|bound| SRV["CUSTR.SRVPGM
cust_list / cust_get"] + PGM -.->|dynamic CALL| DTL[WRKCUST1R.PGM] + PGM -.->|dynamic CALL| QMH[QMHSNDPM] + DTL ==>|bound| SRV +``` + +## 4. Dependency Tree (text) + +``` +WRKCUSTR.PGM +├── Source +│ ├── wrkcustr.rpgle +│ └── custr_pr.rpgle (/COPY member: cust_rec template + prototypes) +├── Display Files +│ └── WRKCUSTD.FILE (DSPF: CUSTSFL, CUSTCTL, CUSTFOOT, CUSTNONE, +│ CUSTMSGSFL, CUSTMSGCTL) +├── Service Programs +│ └── CUSTR.SRVPGM (cust_list, cust_get) +├── Binding Directory +│ └── CUST.BNDDIR +├── Programs called +│ ├── WRKCUST1R.PGM (customer detail) +│ └── QSYS/QMHSNDPM (send program message) +├── Message Files +│ └── QSYS/QCPFMSG (message CPF9897 used as a text carrier) +└── Database + └── CUSTP.FILE (PF, key CUSTNO) — accessed only through CUSTR.SRVPGM +``` + +## 5. Dependency Diagram (Mermaid) + +```mermaid +flowchart TD + subgraph UI[User Interface Layer] + MNU["MENU
option 1"] + PGM["WRKCUSTR.PGM
Work with Customers"] + DTL["WRKCUST1R.PGM
Customer Detail"] + end + subgraph DSP[Display Files] + DSPF["WRKCUSTD.FILE
list + message subfiles"] + DSPF1["WRKCUST1D.FILE
detail + error window"] + end + subgraph API[System APIs] + QMH["QMHSNDPM
send program message"] + end + subgraph SVC[Service Layer] + SRV["CUSTR.SRVPGM
cust_get / cust_list"] + end + subgraph DATA[Data Layer] + PF["CUSTP.FILE
CUSMSTR, key CUSTNO"] + end + MNU --> PGM + PGM --> DSPF + PGM --> QMH + PGM --> DTL + DTL --> DSPF1 + PGM ==>|bound| SRV + DTL ==>|bound| SRV + SRV -->|"embedded SQL"| PF +``` + +## 6. Complete Object Dependency List + +**Programs** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `WRKCUSTR` | *PGM | `$IBMI_BUILD_LIBRARY` (e.g. `AITSK00104`) / `CFDEMO` | `cfdemo/qrpglesrc/wrkcustr.rpgle` | Customer list (5250) | +| `WRKCUST1R` | *PGM | build library | `cfdemo/qrpglesrc/wrkcust1r.rpgle` | Customer detail (5250), called with `SCUSTNO` | +| `QMHSNDPM` | *PGM | `QSYS` | *(IBM-supplied)* | Send Program Message API | + +**Service Programs** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUSTR` | *SRVPGM | build library | `qrpglesrc/custr.sqlrpgle` + `qsrvsrc/custr.bnd` | Customer data service | + +**Display Files** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `WRKCUSTD` | *FILE (DSPF) | build library | `cfdemo/qddssrc/wrkcustd.dspf` | Six record formats — see §8 | + +**Physical Files** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUSTP` | *FILE (PF) | *LIBL | `cfdemo/qddssrc/custp.pf` | Customer master (accessed via `CUSTR`) | + +**Binding Directories** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `CUST` | *BNDDIR | build library | `cfdemo/cust.bnddir` | Resolves `CUSTR` at bind time | + +**Message Files** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `QCPFMSG` | *MSGF | `QSYS` | *(IBM-supplied)* | Supplies `CPF9897`, used to carry free-form text | +| `MENU` | *MSGF | build library | `cfdemo/menu.msgf` | Menu option commands (`USR0001` = `call wrkcustr`) | + +**Copy Members** + +| Object | Type | Library | Source member | Description | +|---|---|---|---|---| +| `custr_pr` | Source | n/a | `cfdemo/qrpglesrc/custr_pr.rpgle` | `cust_rec` template + prototypes | + +## 7. Database Schema & Access (DB2 for i) + +This program performs **no direct database access** — there is no `DCL-F` for a disk file and no +embedded SQL. All access is delegated to `CUSTR`, which reads `CUSTP` with set-based SQL. + +`CUSTP` layout, key and access-path notes (as consumed here through `cust_rec`): + +| Field | Type | Length | Dec | Used by this program | +|---|---|---|---|---| +| `CUSTNO` | Packed | 6 | 0 | `SCUSTNO` in the subfile; passed to `WRKCUST1R` | +| `CNAME` | Char | 40 | | `SNAME` — **truncated to 20** by the subfile field | +| `CADDR1` / `CADDR2` | Char | 40 | | Concatenated into `SADDR` | +| `CCITY` | Char | 30 | | Concatenated into `SADDR` | +| `CSTATE` | Char | 2 | | Concatenated into `SADDR` | +| `CZIP` | Char | 10 | | Concatenated into `SADDR` | +| `CPHONE` | Char | 15 | | `SPHONE` | +| `CEMAIL` | Char | 60 | | `SEMAIL` — **truncated to 25** by the subfile field | +| `CSTATUS` / `CTYPE` | Char | 1 | | Not shown on the list | +| `CLIMIT` / `CBALANCE` | Packed | 11 | 2 | Not shown on the list | +| `CLASTORD` / `CCREATED` | Zoned | 8 | 0 | Not shown on the list | + +- **Key & access path** — `CUSTP` is keyed non-uniquely on `CUSTNO`; `cust_list` returns rows + `ORDER BY CUSTNO`, so the subfile is always in customer-number sequence. +- **Referential integrity / triggers** — none defined in source. +- **Journaling** — none established by the build (`CUSTP` is a `CRTPF` DDS file). +- **Commitment control** — none. `CUSTR` runs `SET OPTION COMMIT = *NONE`, and this program is + read-only, so there are no transaction boundaries to reason about. + +**Truncation is a real behaviour, not a documentation nicety:** the subfile shows the first 20 +characters of the name and the first 25 of the email. The filter, however, is applied by `CUSTR` +against the *full* column values, so a search can legitimately match a customer whose displayed +name or email does not visibly contain the search text. The Rich Display and EJS variants widen +these fields and do not have this artefact. + +## 8. Display File Layout + +`WRKCUSTD` — `DSPSIZ(24 80 *DS3)`, six record formats. + +``` + Work with Customers (1,31) + + Find customer by number . : 123456 (3) + Filter . . . . . . . . . : ________________________________________________ (4) + + 5=Display (6) SOPTDESC + + Opt Cust # Name Primary Email Phone (8) headings + __ 100001 ACME INDUSTRIES orders@acme.example 555-0100 (9) CUSTSFL line 1 + Address: 100 MAIN ST STE 4 SPRINGFIELD, IL 62704 (10) CUSTSFL line 2 + __ 100002 ... (11) + Address: ... (12) + (7 records = rows 9-22) + + F3=Exit F11=Fold/Unfold (23) CUSTFOOT + Error text appears here from the message subfile (24) CUSTMSGSFL +``` + +**`CUSTSFL`** — subfile record (`SFL`), two display lines per record. + +| Field | Length | Type | Row/Col | Description | +|---|---|---|---|---| +| `SOPT` | 2A | B (both) | 9, 2 | Option entry; `DSPATR(RI)` + `DSPATR(PC)` when `*IN50` | +| `SCUSTNO` | 6S 0 | O | 9, 6 | Customer number | +| `SNAME` | 20A | O | 9, 15 | Customer name (truncated from 40) | +| `SEMAIL` | 25A | O | 9, 37 | Email (truncated from 60) | +| `SPHONE` | 15A | O | 9, 64 | Phone | +| `SADDR` | 64A | O | 10, 15 | `CADDR1 CADDR2 CCITY, CSTATE CZIP` assembled by the program | + +Conditioning: `*IN51` → `SFLNXTCHG` (record is returned by the next `READC` even if the user does +not retype it); `*IN50` → reverse image and cursor placement on `SOPT`. The literal `Address:` on +line 10 is `COLOR(WHT)`. + +**`CUSTCTL`** — subfile control record (`SFLCTL(CUSTSFL)`). + +| Keyword | Value | Effect | +|---|---|---| +| `SFLSIZ` / `SFLPAG` | 8 / 7 | `SFLSIZ = SFLPAG + 1` — the "expandable subfile" idiom: the system extends the subfile as records are written, so the program can load all customers in one pass and let the workstation handle paging | +| `SFLDSP` | `N31 30` | Display subfile records only when there is something to show | +| `SFLDSPCTL` | *(unconditioned)* | Always show the control record (headings, find/filter fields) | +| `SFLCLR` | `31` | Clear the subfile | +| `SFLEND` | `N31 30` | `+` / bottom-of-list indicator | +| `SFLDROP(CF11)` | `N31 30` | F11 folds/unfolds the second (address) line | +| `CA03(03 'Exit')` | | F3 sets `*IN03`; input fields are *not* returned | +| `OVERLAY` | | Do not clear the rest of the screen | + +| Field | Length | Type | Row/Col | Description | +|---|---|---|---|---| +| `SFNDCUSTNO` | 6Y 0 | B | 3, 31 | Find-by-number; `EDTCDE(Z)` zero-suppresses, so an empty search shows blank rather than `000000` | +| `SFILTER` | 48A | B | 4, 31 | Free-text filter; `CHECK(LC)` permits lower case | +| `SOPTDESC` | 77A | O | 6, 2 | Option legend (`5=Display`, or blank when the list is empty), `COLOR(BLU)` | + +Column headings (`Opt`, `Cust #`, `Name`, `Primary Email`, `Phone`) are `COLOR(WHT)` constants on +row 8; the title `Work with Customers` is on row 1. + +**`CUSTFOOT`** — function-key footer. + +| Field | Length | Type | Row/Col | Description | +|---|---|---|---|---| +| `SFKEYS` | 77A | O | 23, 2 | Key legend built by the program, `COLOR(BLU)` | + +**`CUSTNONE`** — `OVERLAY`; a single constant `** No customers to display **` at row 10, col 26. + +**`CUSTMSGSFL` / `CUSTMSGCTL`** — program-message subfile on line 24. + +| Field | Definition | Description | +|---|---|---| +| `SMSGKEY` | `SFLMSGKEY` | Message reference key returned by `QMHSNDPM` | +| `SPGMQ` | `SFLPGMQ(10)` | Program message queue name; set from the PSDS program name | + +`SFLMSGRCD(24)` places messages on line 24; `SFLSIZ(2)`/`SFLPAG(1)` shows one at a time; +`SFLDSP`/`SFLEND` are conditioned `N41 40` and `SFLCLR` on `41`; `OVERLAY` keeps the rest of the +screen intact. + +**Subfile behaviour summary** — load-all (not page-at-a-time): every row returned by `cust_list` +is written before the screen is displayed, and paging is handled by the workstation controller. +F11 toggles fold/truncate through `SFLDROP`, which is also a device-level function — the program +never sees F11 and does not need to redisplay. + +`SFLDROP` (rather than `SFLFOLD`) means the **initial** display is *truncated*: only line 1 of each +record is shown, the address line is hidden, and more records fit on the panel. Verified against the +running application — the first display shows 10 single-line records on rows 9–18, and pressing F11 +folds them out to 7 two-line records on rows 9–22 with the `SFLEND` `+` indicator at the bottom +right. A redisplay of the control record returns the panel to the truncated state. + +## 9. Program Flow (Mermaid) & Key Routines + +```mermaid +flowchart TD + A[Start] --> B{"*IN03 on?"} + B -->|Yes| Z["*INLR = *ON; end"] + B -->|No| C["clearMSGSFL"] + C --> D["getCustomers
(find-by-number or filtered list)"] + D --> E["Build SFKEYS; WRITE CUSTFOOT"] + E --> F{"numCustomers = 0?"} + F -->|Yes| G["*IN30 = *OFF
WRITE CUSTNONE"] + F -->|No| H["loadSFL
*IN30 = *ON"] + G --> I{"msgrrn > 0?"} + H --> I + I -->|Yes| J["*IN40 = *ON
WRITE CUSTMSGCTL"] + I -->|No| K["*IN40 = *OFF"] + J --> L["Set SOPTDESC
EXFMT CUSTCTL"] + K --> L + L --> M["processFKeys
(F3 -> end)"] + M --> N{"Find or filter changed?"} + N -->|Yes| O["Reset the other criterion
ITER (refresh list)"] + O --> B + N -->|No| P{"*IN30 (subfile shown)?"} + P -->|No| B + P -->|Yes| Q["READC loop: locate first
row with an option"] + Q --> R{"Option valid?"} + R -->|No| S["writeMSGSFL 'Invalid option'
*IN50/51 on, UPDATE, EXFMT again"] + S --> Q + R -->|Yes| T{"Option = 5?"} + T -->|Yes| U["CALL WRKCUST1R(SCUSTNO)"] + T -->|No| B + U --> B +``` + +**Key routines** + +| Routine | Kind | Purpose | +|---|---|---| +| `getCustomers` | Subroutine | If `findCust <> 0`, calls `cust_get` for that one customer (`numCustomers` 0 or 1); otherwise calls `cust_list` with the trimmed filter. Any returned error text is pushed to the message subfile. | +| `clearSFL` | Subroutine | `RRN = 0`, `*IN31` on, `WRITE CUSTCTL` (SFLCLR), `*IN31` off | +| `loadSFL` | Subroutine | Clears then writes one subfile record per customer, assembling `SADDR` from four address columns | +| `clearMSGSFL` | Subroutine | `MSGRRN = 0`, `*IN41` on, `WRITE CUSTMSGCTL`, `*IN41` off | +| `processFKeys` | Subroutine | On `*IN03`: sets `*INLR` and `RETURN`s out of the program | +| `writeMSGSFL` | Subprocedure | `QMHSNDPM` → message subfile record (see §11) | +| `isValidOption` | Subprocedure | Returns `*ON` only for option `5` | + +**Selection semantics worth knowing.** The `READC` loop scans every changed subfile record and +remembers the **RRN of the first** row carrying an option; subsequent selections are ignored +(`SELRRN` is already set). Each changed record is rewritten with `UPDATE` so the typed option +persists on redisplay, and `*IN50`/`*IN51` are turned off during that update. After the loop, +`CHAIN SELRRN CUSTSFL` re-reads that row so `SOPT` and `SCUSTNO` describe the selected customer. +If the option is not valid, the program writes an `Invalid option: x` message, turns on `*IN50` +(reverse image + cursor) and `*IN51` (`SFLNXTCHG`) on that row, redisplays, and loops until the +option is blank or valid. + +**Storage note.** `customers` is a module-level `dim(9999)` array of the 271-byte `cust_rec`, i.e. +about 2.6 MB of static storage per activation, and `cust_list` is always called with +`limit = %elem(customers)` = 9999. The list is therefore capped at 9999 customers with no +"more rows exist" indication — beyond that, rows are silently absent. Fine for the demo dataset; +worth revisiting for real volumes. + +**Dead declaration.** `validOpt ind` is declared and never referenced. + +## 10. Indicators Used + +| Indicator | Purpose | +|---|---| +| `*IN03` | F3 pressed (`CA03`) — ends the program via `processFKeys` | +| `*IN30` | Customer subfile has content: enables `SFLDSP`, `SFLEND`, `SFLDROP` | +| `*IN31` | `SFLCLR` for `CUSTSFL` (set only around `clearSFL`) | +| `*IN40` | Message subfile has content: enables `SFLDSP`/`SFLEND` on `CUSTMSGCTL` | +| `*IN41` | `SFLCLR` for `CUSTMSGSFL` | +| `*IN50` | On the selected row: `DSPATR(RI)` + `DSPATR(PC)` to highlight an invalid option and place the cursor | +| `*IN51` | `SFLNXTCHG` on the selected row, so `READC` returns it again until it is corrected | +| `*INLR` | Set `*ON` before returning so the program closes down cleanly | + +`*IN30`/`*IN31` and `*IN40`/`*IN41` are used in pairs because the DDS conditions are written +`N31 30` — content *and* not-clearing — a conventional 5250 subfile idiom. + +## 11. Error & Exception Handling + +**Strategy — error text as data, surfaced through a message subfile.** There is no `MONITOR`, no +`*PSSR`, no INFDS, and no `(E)` extender anywhere in the program. Two classes of problem are +handled deliberately, and everything else is left to the default handler: + +1. **Service-program failures.** `cust_get` / `cust_list` return a `varchar(80)` message rather than + throwing. `getCustomers` tests it and calls `writeMSGSFL`, so an SQL problem appears on line 24 + as, for example, `Error retrieving customer list. SQLCODE = -204, SQLSTATE = 42704`. The list is + simply empty in that case and the program stays usable. +2. **Invalid subfile option.** `isValidOption` rejects anything but `5`; the message + `Invalid option: x` is written, the offending row is highlighted (`*IN50`) and marked + `SFLNXTCHG` (`*IN51`), and the screen is redisplayed until it is corrected or cleared. + +**Message mechanics.** `writeMSGSFL` sends the text through `QMHSNDPM`: + +| Argument | Value | Meaning | +|---|---|---| +| Message ID | `CPF9897` | A general-purpose "text carrier" message | +| Message file | `QCPFMSG QSYS` | IBM-supplied | +| Message data | the caller's text, padded to `char(80)` | Substituted into `CPF9897` | +| Message type | `*INFO` | Informational — no reply, no escape | +| Call stack entry / counter | `*` / `1` | One entry up from the subprocedure that called the API, i.e. the main program — the queue that `SPGMQ`/`SFLPGMQ` names | +| Message key | `SMSGKEY` | The DDS `SFLMSGKEY` field, receiving the reference key | +| Error code | `x'0000000000000000'` | Bytes-provided = 0, so API failures are signalled as escape messages rather than returned quietly | + +Two details in that call are load-bearing. The key must be written **directly into the DDS +`SFLMSGKEY` field** — a private variable copied afterwards does not work, and getting it wrong +crashes on the first message. And `SPGMQ` is set from the PSDS: + +```rpgle +dcl-ds statusDS psds qualified; + programName char(10) pos(334); +end-ds; +``` + +That is the program's **only** use of the PSDS — it supplies the program name for `SFLPGMQ` rather +than any error information. + +**Formats and `OVERLAY`.** Every format that is `WRITE`n or `EXFMT`d after the subfile is loaded +(`CUSTCTL`, `CUSTMSGCTL`, `CUSTNONE`) carries `OVERLAY`. Without it the device would clear the +already-loaded subfile and the next `EXFMT` would fail with a device error (`CPF5006` / `RNX1255`) — +worth remembering before adding a new format to this file. + +**Unhandled conditions.** A workstation device error (session dropped, `WRKCUSTD` missing from the +library list), an unresolved reference to `WRKCUST1R` at call time, or an RPG runtime exception +inside `loadSFL` all reach the default handler: an inquiry message, then an `RNX` dump if +unanswered. Recovery is to end the job's program and correct the library list or rebuild the missing +object; nothing is written to the database, so there is nothing to back out. + +## 12. Security & Authority + +- No adopted authority — built without `USRPRF(*OWNER)`, so the program runs with the caller's + authority throughout. A user without `*USE` on `CUSTP` sees an SQL error in the message subfile, + not a system security message. +- Required authority: `*USE` on `WRKCUSTR`, `WRKCUST1R`, `CUSTR`, `WRKCUSTD`, `WRKCUST1D` and + `CUSTP` (plus `*EXECUTE` on the libraries). +- Object ownership is the building profile (`$IBMI_USER`); public authority follows the build + library's `CRTAUT`. No `*AUTL` is referenced in source. +- Sensitive data: the list exposes customer names, emails and phone numbers; the detail screen adds + credit limit and balance. There is no masking, no field procedure and no audit-journal entry for + viewing. Access control is entirely object-level. + +## 13. Interfaces & Integration + +Not applicable — no data queues, data areas, web services, IFS or MQ. The only external interface +is the `QMHSNDPM` system API and the program call to `WRKCUST1R`. + +## 14. Batch / Job Flow + +Not applicable — interactive only. It requires a workstation device (`EXFMT`) and cannot be +submitted to batch. + +## 15. Build & Compile + +``` +CRTDSPF FILE(/WRKCUSTD) SRCFILE(/QDDSSRC) +CRTBNDRPG PGM(/WRKCUSTR) SRCSTMF('cfdemo/qrpglesrc/wrkcustr.rpgle') +``` + +`CRTBNDRPG` picks up `DFTACTGRP(*NO)`, `ACTGRP(*NEW)` and `BNDDIR('CUST')` from the `CTL-OPT` +statements in the source, so they do not appear on the command. + +`Rules.mk`: + +```makefile +wrkcustd.file: qddssrc/wrkcustd.dspf +wrkcustr.pgm: qrpglesrc/wrkcustr.rpgle qddssrc/wrkcustd.dspf qrpglesrc/custr_pr.rpgle custr.srvpgm | wrkcustd.file cust.bnddir +``` + +Build order: `custp.file` → `custr.module` → `custr.srvpgm` → `cust.bnddir` → `wrkcustd.file` → +`wrkcustr.pgm` (and `wrkcust1r.pgm` for the drill-down to work). Build with codermake — never issue +the create commands by hand: + +```bash +cd /workspace/workspace/ibmi-agentic +codermake wrkcustr.pgm +``` + +`custr.srvpgm` is a **normal** prerequisite (rebuilding the service program recompiles this program, +which is what you want given the fixed export signature), while `wrkcustd.file` and `cust.bnddir` +are **order-only** (they must exist, but rebuilding them does not force a program rebuild). + +## 16. Related Programs + +| Program | Description | Relationship | +|---|---|---| +| `WRKCUST1R` | Customer detail (5250) | Callee — invoked for option `5` with `SCUSTNO` | +| `CUSTR` | Customer data service program | Callee (bound) | +| `WRKCUSTRO` | Same function on a Profound UI Rich Display file | Alternate front end (menu option 2) | +| `WRKCUSTEO` | Same function on a Profound UI EJS screen | Alternate front end (menu option 3) | +| `MENU` | `Agentic Coding Demo Menu` | Caller — option 1 | + +## 17. Testing Notes + +| Scenario | Steps | Expected result | +|---|---|---| +| List loads | Menu option 1 | Subfile in ascending customer-number order, `5=Display` legend on row 6, `F3=Exit F11=Fold/Unfold` on row 23 | +| Fold / unfold | Press F11 | Address line hides/shows; no program interaction needed | +| Find by number | Type an existing number in *Find customer by number* and press Enter | Exactly one row; the filter field is cleared | +| Find missing number | Type a number not in `CUSTP` | `** No customers to display **`, no `5=Display` legend, `F3=Exit` only in the footer | +| Filter by name | Type part of a customer name (any case) | Matching rows only; note a match may be invisible if it falls beyond the 20-character displayed name | +| Filter by phone | Type leading digits of a phone number | Prefix matches only | +| Find and filter interact | Enter a filter, then a find number | Setting one clears the other | +| Valid option | Type `5` beside a row and press Enter | `WRKCUST1R` detail screen for that customer; F3 returns to the refreshed list | +| Invalid option | Type `9` beside a row | `Invalid option: 9` on line 24, the row in reverse image, cursor on the option field, list still usable | +| Multiple options | Type `5` beside two rows | Only the first selected row is opened | +| Exit | Press F3 | Returns to the menu | + +No automated tests exist in the repository. + +## 18. Version Information + +| Attribute | Value | +|---|---| +| Source Format | Fully free-format (`**FREE`) | +| ILE Compatible | Yes | +| Activation Group | `*NEW` | +| Uses Embedded SQL | No (SQL is inside `CUSTR`) | +| Multi-threaded | No | +| Display Type | 5250 DDS display file (`DSPSIZ(24 80 *DS3)`) | +| Target Release (TGTRLS) | Compiler default (build machine's release) | From 2311864b36d2253f303310437b863591e04ee634 Mon Sep 17 00:00:00 2001 From: Brian May Date: Tue, 8 Sep 2026 17:00:24 +0000 Subject: [PATCH 5/5] Add AdelWiggins (AWDEMO) BOM demo dataset Add a BOM / inventory / shop-floor demo dataset for the AdelWiggins Group customer demo, under a new awdemo/ directory, and deploy it to library AWDEMO. The schema is a faithful clone of the existing sample library BOMSAMPLE -- same 8 tables, 9 indexes, primary and foreign keys, and column headings, with SQL long names pinned via FOR COLUMN / FOR SYSTEM NAME so the short system names match. All 8 record format level identifiers are identical to BOMSAMPLE's, so anything written against BOMSAMPLE runs here without a level check. The content is AdelWiggins' own aerospace product families taken from adelwiggins.com: clamshell/threaded/rigid tube couplings, ferrules and bulkhead fittings, 200/6000/Preece quick disconnects and valves, dielectric fuel and hydraulic isolators, freeze-protection heaters, Adel clamps and Wiggins mining fast-fuelling products -- 155 items, 91 BOMs, 468 component lines, 356 inventory balances and 260 shop orders across five locations. - awdemo/Rules.mk codermake targets for the tables and indexes - awdemo/sql/*.table.sql DDL, one file per table - awdemo/sql/*.index.sql DDL, one file per index - awdemo/sql/data/*.sql generated INSERT statements, library-agnostic - awdemo/tools/gen-awdemo-data.py deterministic generator (fixed RNG seed) - awdemo/tools/load-awdemo-data.py loads the data into a chosen library - awdemo/README.md dataset contents, build and promotion steps Manufactured-item standard costs are rolled up from their own structures so a cost roll-up in the demo reconciles. The data deliberately seeds situations to demo against: three-level explosions, five rev-A/rev-B supersessions, 85 below-reorder-point balances, 21 late released orders, inactive items and suppliers with history, and second-source suppliers. The dataset is deployed in AWDEMO. Promoting it turned up one gotcha now documented in the README: SQL only journals a new table if the library already holds a journal named QSQJRN, and AWDEMO had been made with plain CRTLIB, so every CREATE TABLE returned SQL7905 at severity 20. Unjournaled tables would have broken any SQLRPGLE program built later, since codermake compiles with COMMIT(*CHG). AWDEMO/QSQJRN was created to match BOMSAMPLE before the rebuild. Follow-up date review and fixes, applied to AWDEMO and the task library: - Orders now come off a steady release rate (~7.7/working day over 260 working days) with status derived from each order's own lifecycle, replacing a fixed per-status quota that spread closed orders over a year but crammed every open order into the last seven weeks (4-13 orders/month, then 103). Volume scaled 260 -> 2,112 so the open-order count is consistent with the release rate and lead times. Orders per month now sits in a 154-177 band. - The date anchor defaults to the run date instead of a hardcoded constant, so the dataset no longer decays (at +60 days every open order had gone late and the backlog was empty). --as-of / $AWDEMO_AS_OF reproduces an old snapshot; the seed stays fixed so content is deterministic per anchor. - Lead times are counted in working days: no order raised, due or completed at a weekend, and stock movement dates snapped off weekends too (was 32%). - Discontinued parts appear only in long-closed history, never with a live order on the floor. Co-Authored-By: CoderFlow Learn more: https://coderflow.ai --- awdemo/README.md | 246 +++ awdemo/Rules.mk | 31 + awdemo/sql/bomdetail.table.sql | 17 + awdemo/sql/bomheader.table.sql | 16 + awdemo/sql/data/10_warehouse.sql | 11 + awdemo/sql/data/20_supplier.sql | 19 + awdemo/sql/data/30_item.sql | 167 ++ awdemo/sql/data/40_supplier_item.sql | 99 ++ awdemo/sql/data/50_bom_header.sql | 99 ++ awdemo/sql/data/60_bom_detail.sql | 482 ++++++ awdemo/sql/data/70_inventory.sql | 368 +++++ awdemo/sql/data/80_mfg_orders.sql | 2160 ++++++++++++++++++++++++++ awdemo/sql/inventory.table.sql | 23 + awdemo/sql/item.table.sql | 22 + awdemo/sql/ixbomdbom.index.sql | 2 + awdemo/sql/ixbomdcmp.index.sql | 3 + awdemo/sql/ixbomhpar.index.sql | 2 + awdemo/sql/ixitemtype.index.sql | 2 + awdemo/sql/ixmfodate.index.sql | 2 + awdemo/sql/ixmfoitem.index.sql | 2 + awdemo/sql/ixmfostat.index.sql | 2 + awdemo/sql/ixsuppitem.index.sql | 2 + awdemo/sql/ixsuppname.index.sql | 2 + awdemo/sql/mfgorders.table.sql | 30 + awdemo/sql/supplier.table.sql | 19 + awdemo/sql/supplitem.table.sql | 19 + awdemo/sql/warehouse.table.sql | 15 + awdemo/tools/gen-awdemo-data.py | 831 ++++++++++ awdemo/tools/load-awdemo-data.py | 128 ++ 29 files changed, 4821 insertions(+) create mode 100644 awdemo/README.md create mode 100644 awdemo/Rules.mk create mode 100644 awdemo/sql/bomdetail.table.sql create mode 100644 awdemo/sql/bomheader.table.sql create mode 100644 awdemo/sql/data/10_warehouse.sql create mode 100644 awdemo/sql/data/20_supplier.sql create mode 100644 awdemo/sql/data/30_item.sql create mode 100644 awdemo/sql/data/40_supplier_item.sql create mode 100644 awdemo/sql/data/50_bom_header.sql create mode 100644 awdemo/sql/data/60_bom_detail.sql create mode 100644 awdemo/sql/data/70_inventory.sql create mode 100644 awdemo/sql/data/80_mfg_orders.sql create mode 100644 awdemo/sql/inventory.table.sql create mode 100644 awdemo/sql/item.table.sql create mode 100644 awdemo/sql/ixbomdbom.index.sql create mode 100644 awdemo/sql/ixbomdcmp.index.sql create mode 100644 awdemo/sql/ixbomhpar.index.sql create mode 100644 awdemo/sql/ixitemtype.index.sql create mode 100644 awdemo/sql/ixmfodate.index.sql create mode 100644 awdemo/sql/ixmfoitem.index.sql create mode 100644 awdemo/sql/ixmfostat.index.sql create mode 100644 awdemo/sql/ixsuppitem.index.sql create mode 100644 awdemo/sql/ixsuppname.index.sql create mode 100644 awdemo/sql/mfgorders.table.sql create mode 100644 awdemo/sql/supplier.table.sql create mode 100644 awdemo/sql/supplitem.table.sql create mode 100644 awdemo/sql/warehouse.table.sql create mode 100644 awdemo/tools/gen-awdemo-data.py create mode 100755 awdemo/tools/load-awdemo-data.py diff --git a/awdemo/README.md b/awdemo/README.md new file mode 100644 index 00000000..e0877dad --- /dev/null +++ b/awdemo/README.md @@ -0,0 +1,246 @@ +# AdelWiggins demo dataset (AWDEMO) + +A BOM / inventory / shop-floor demo dataset built for the **AdelWiggins Group** +customer demo. It is **deployed in library `AWDEMO`**. + +The schema is a faithful clone of the existing sample library **BOMSAMPLE**; +only the content is different. Anything written against BOMSAMPLE runs against +this library unchanged — the record format level identifiers are identical, so +there is no level check. + +## What is in it + +| Table | Rows | Content | +|------------------------|-----:|---------| +| `ITEM` | 155 | Part master: 68 purchased, 87 manufactured | +| `WAREHOUSE` | 5 | AdelWiggins plants and distribution points | +| `SUPPLIER` | 13 | Raw material, hardware, process and packaging suppliers | +| `SUPPLIER_ITEM` | 91 | Approved source list, one primary source per purchased part | +| `BOM_HEADER` | 91 | One header per manufactured item, plus 5 rev-B supersessions | +| `BOM_DETAIL` | 468 | Component lines, three levels deep | +| `INVENTORY` | 356 | On-hand / on-order / reorder point by location | +| `MANUFACTURING_ORDERS` | 2112 | 12 months of shop orders at a steady release rate | + +The parts are AdelWiggins' real product families, taken from adelwiggins.com: + +- **Aerospace tube connectors** — AW2010HP / AW2091N / AW2100 / W991 / W991N / + W991F flexible clamshell couplings, AW971 / W700 / 3600 / 6300 flexible + threaded couplings, AW979 / 8300 rigid couplings, G620 connectors, W902 / + 63052 swage ferrules, W922N bulkhead fittings +- **Quick disconnects, valves and hoses** — 200 and 6000 Series QDs, Preece + 9100 / 9400 / 9600 QDs, Preece check and fuse valves, frangible couplings, + hose assemblies +- **Isolators** — dielectric fuel and hydraulic lightning isolators +- **Heater products** — ribbon heaters, blankets, gasket heaters, cartridge + heaters, cuff and manifold assemblies, heated hoses +- **Adel clamps** — standard / top-locking / side-locking loop clamps, block + clamps, wear sleeve clamps, specialty clamps, aircraft grommets +- **Wiggins mining products** — diesel fast fuelling nozzles and receivers, DEF + automatic fill, lubrication quick disconnects + +Sizes, materials (2024/7075 aluminium, 321/304/A286 CRES, Ti-6Al-4V), seal +callouts, process specs (MIL-A-8625, AMS2700, AS9102) and pressure/temperature +language all come from the published product data. + +### Deliberate demo content + +The data is seeded with situations worth clicking on during a demo: + +- **Multi-level structures.** Finished goods consume machined sub-assemblies, + which consume raw bar, sheet, tube and outside processing — a recursive + explosion returns three levels. +- **Standard cost ties out.** The cost of every manufactured item is rolled up + from its own structure times a conversion factor, so a cost roll-up in the + demo reconciles instead of showing arbitrary numbers. +- **Engineering revisions.** `AW2100-24`, `ISOF-1000`, `W991-24`, `HTRBL-112` + and `WMFFN-100` each carry a rev A and a superseding rev B with a later + effective date and a different component list. +- **Shortages.** 85 inventory rows sit below their reorder point. +- **Late work.** 59 of the 288 open orders are past their expected completion + date, including a handful of long-stuck jobs for an aging-WIP report. +- **Exceptions.** `CLPSTD-04` is a manufactured item with no BOM; four items + and one supplier (`AWS013 Redline Metal Treating`) are flagged inactive but + still carry history. +- **Second sources.** Several commodities have both a primary and an alternate + approved supplier at different lead times and prices. + +### What is real and what is invented + +Product families, part-number series, materials, sizes and specification +callouts are drawn from AdelWiggins' published product pages, and the Los +Angeles plant is their real manufacturing site. Everything transactional is +fictional: supplier companies, contact names, phone numbers, e-mail addresses, +operator IDs, costs, quantities, dates and order notes. The Valencia, Miami and +El Paso locations are invented. No AdelWiggins pricing or supply-chain data was +used — none is public. + +## Dates + +The dataset is anchored to the **date you generate it**, not a constant, so a +demo always opens on a live shop floor: about 1,800 closed orders behind it, +roughly 170 released and on the floor now, and a 120-order forward backlog. + +Regenerate before a demo. It takes about a minute end to end: + +```bash +python3 awdemo/tools/gen-awdemo-data.py +python3 awdemo/tools/load-awdemo-data.py AWDEMO +``` + +Skip that and the data decays: 30 days after generation the late-order count +goes from 59 to over 120, and 40-odd *planned* orders are overdue before anyone +has started them. At +60 days every open order is late and the backlog is +empty. + +`sql/data/*.sql` in git is therefore a dated snapshot and *will* show as a diff +when you regenerate — that is expected, not drift. The as-of date is stamped in +each file header. To reproduce an old snapshot exactly: + +```bash +python3 awdemo/tools/gen-awdemo-data.py --as-of 2026-09-08 +AWDEMO_AS_OF=2026-09-08 python3 awdemo/tools/gen-awdemo-data.py # same thing +``` + +The RNG seed is fixed, so for a given anchor the output is byte-for-byte +reproducible. Changing the anchor moves the dates and leaves the item master, +supplier list and product structures untouched. + +### How the order dates are built + +Orders come off a **steady release rate** — about 7.7 per working day over 260 +working days — and each order's status falls out of where it sits in its own +lifecycle: due date passed and finished is `C`, due date passed and still open +is a late `R`, due date ahead is a live `R`. Getting this wrong is easy and +looks bad: an earlier version picked a fixed quota per status, which spread +closed orders over a year while cramming every open order into the last seven +weeks, so the plant appeared to run at 10 orders a month and then release 149 +in six. Orders per month now sits in a 154-177 band. + +Some smaller rules that keep the dates believable: + +- Lead times are counted in **working days**, so no order is raised, due or + completed on a Saturday or Sunday. Neither are stock movement dates. +- The **planned backlog is generated separately** from the release stream — it + is forward-looking work from recent MRP runs, not history. Its creation dates + sit in the last fortnight, which puts a mild bump on the most recent full + month. Spreading them wider makes the chart worse, not better: the current + month is only part-elapsed, so everything pushed backwards lands on the + previous one. +- **Discontinued parts only appear in old closed history.** An obsolete part + with a live order on the floor reads as a data error rather than as an + exception worth finding. +- BOM effective dates run 2019 to 2026 and are deliberately *not* anchored to + the run date. Aerospace parts have decade-long lifecycles, so a coupling BOM + effective in 2020 is right; making them all recent would look less authentic. + + +## Layout + +``` +awdemo/ + Rules.mk codermake targets for the 8 tables + 9 indexes + sql/*.table.sql DDL, one file per table + sql/*.index.sql DDL, one file per index + sql/data/*.sql generated INSERT statements, unqualified + tools/gen-awdemo-data.py deterministic generator for sql/data + tools/load-awdemo-data.py loads sql/data into a chosen library +``` + +## Building and loading + +Build the objects into whatever `IBMI_BUILD_LIBRARY` points at. Name the +targets explicitly — a bare `codermake` rebuilds every other project in the +repo as well: + +```bash +codermake item.file warehouse.file supplier.file bomheader.file \ + bomdetail.file inventory.file supplitem.file mfgorders.file \ + ixitemtype.file ixbomhpar.file ixbomdcmp.file ixbomdbom.file \ + ixsuppname.file ixsuppitem.file ixmfoitem.file ixmfodate.file \ + ixmfostat.file +``` + +Then load the data: + +```bash +python3 awdemo/tools/load-awdemo-data.py # uses $IBMI_BUILD_LIBRARY +python3 awdemo/tools/load-awdemo-data.py AWDEMO # or name the library +``` + +The loader empties each table first, so it is safe to re-run; pass `--keep` to +append instead. Table names in `sql/data/*.sql` are unqualified and the loader +rewrites them to `LIBRARY.TABLE` — an unqualified `INSERT` resolves against the +job library list and can land in the wrong library. + +## Deploying to a library + +`AWDEMO` is already built and loaded. To rebuild it, or to deploy into a +different library: + +```bash +IBMI_BUILD_LIBRARY=AWDEMO codermake +python3 awdemo/tools/load-awdemo-data.py AWDEMO +``` + +Two things to know before pointing this at a new library. + +**The library must be journaled.** SQL only journals a new table if the library +already contains a journal called `QSQJRN`. A library made with plain `CRTLIB` +has none, so every `CREATE TABLE` comes back `SQL7905 - table created but was +not journaled` at severity 20, and the tables end up outside commitment +control. That does not stop the data loading, but it breaks any SQLRPGLE +program built later: codermake compiles with `CRTSQLRPGI COMMIT(*CHG)`, and an +unjournaled table under commitment control fails at run time. BOMSAMPLE is a +real SQL collection and is journaled, so match it: + +```bash +ssh dev "system -i \"CRTJRNRCV JRNRCV(/QSQJRN0001) TEXT('COLLECTION - created by SQL')\"" +ssh dev "system -i \"CRTJRN JRN(/QSQJRN) JRNRCV(/QSQJRN0001) MNGRCV(*SYSTEM) DLTRCV(*YES) RCVSIZOPT(*RMVINTENT) TEXT('COLLECTION - created by SQL')\"" +``` + +Create the journal *before* the tables. `CREATE SCHEMA ` does all of this +for you if the library does not exist yet. AWDEMO's journal uses +`DLTRCV(*YES)` so detached receivers are cleaned up automatically — BOMSAMPLE +uses `*NO` and has accumulated 20-plus receivers for a tiny dataset. + +**codermake build stamps are keyed by target, not by library.** A target +already built into another library is skipped when you point at a new one. +Remove just these 17 stamps first: + +```bash +for t in item warehouse supplier bomheader bomdetail inventory supplitem mfgorders \ + ixitemtype ixbomhpar ixbomdcmp ixbomdbom ixsuppname ixsuppitem \ + ixmfoitem ixmfodate ixmfostat; do rm -f build/$t.file; done +``` + +Do not blanket-delete `build/` — that forces every unrelated project in the +repo to rebuild. + +## Regenerating the data + +`sql/data/*.sql` is generated; edit the generator, not the SQL. + +```bash +python3 awdemo/tools/gen-awdemo-data.py +``` + +Item descriptions, product structures, supplier assignments and the release +rate are hand-written constants at the top of the file; quantities, costs, +balances, dates and order history are derived. It asserts that every ID fits +its column, that every BOM component exists, and that every manufactured item +has a structure (except the deliberately BOM-less `CLPSTD-04`). + +See **Dates** above for the anchor and how often to regenerate. + +## Schema notes + +- Long SQL names are pinned with `FOR COLUMN` / `FOR SYSTEM NAME` so the short + system names match BOMSAMPLE exactly (`COMPO00001`, `MANUF00001`, + `SUPPL00001`, `IX_BO00001`…). Without pinning, DB2 generates them from + creation order and a program using the short names could break. +- Tables use `CREATE OR REPLACE TABLE`, which preserves existing rows, so + rebuilding the DDL is idempotent. `CREATE INDEX` is not — rebuilding an index + target on a library that already has it fails with SQL0601. Drop the index + first if you need to. +- Column headings are reproduced with `LABEL ON COLUMN` so screens and query + tools show the same headings as BOMSAMPLE. diff --git a/awdemo/Rules.mk b/awdemo/Rules.mk new file mode 100644 index 00000000..d9a1b13e --- /dev/null +++ b/awdemo/Rules.mk @@ -0,0 +1,31 @@ +# AdelWiggins (AWDEMO) demo dataset +# +# Schema is a clone of library BOMSAMPLE, so programs written against +# BOMSAMPLE run unchanged here. Objects are created into the current +# build library -- set IBMI_BUILD_LIBRARY=AWDEMO to deploy for real. +# +# Data is NOT loaded by codermake. After building, run: +# awdemo/tools/load-awdemo-data.sh + +# Master tables (no foreign keys) +item.file: sql/item.table.sql +warehouse.file: sql/warehouse.table.sql +supplier.file: sql/supplier.table.sql + +# Dependent tables -- order-only so a master rebuild does not force these +bomheader.file: sql/bomheader.table.sql | item.file +bomdetail.file: sql/bomdetail.table.sql | bomheader.file item.file +inventory.file: sql/inventory.table.sql | item.file warehouse.file +supplitem.file: sql/supplitem.table.sql | supplier.file item.file +mfgorders.file: sql/mfgorders.table.sql | item.file + +# Indexes -- system names pinned to match BOMSAMPLE +ixitemtype.file: sql/ixitemtype.index.sql item.file +ixbomhpar.file: sql/ixbomhpar.index.sql bomheader.file +ixbomdcmp.file: sql/ixbomdcmp.index.sql bomdetail.file +ixbomdbom.file: sql/ixbomdbom.index.sql bomdetail.file +ixsuppname.file: sql/ixsuppname.index.sql supplier.file +ixsuppitem.file: sql/ixsuppitem.index.sql supplitem.file +ixmfoitem.file: sql/ixmfoitem.index.sql mfgorders.file +ixmfodate.file: sql/ixmfodate.index.sql mfgorders.file +ixmfostat.file: sql/ixmfostat.index.sql mfgorders.file diff --git a/awdemo/sql/bomdetail.table.sql b/awdemo/sql/bomdetail.table.sql new file mode 100644 index 00000000..82d5e126 --- /dev/null +++ b/awdemo/sql/bomdetail.table.sql @@ -0,0 +1,17 @@ +-- AdelWiggins demo dataset - BOM_DETAIL (component lines of a BOM) +CREATE OR REPLACE TABLE BOM_DETAIL ( + BOM_ID CHAR(10), + LINE_NO INTEGER, + COMPONENT_ITEM_ID FOR COLUMN COMPO00001 CHAR(10), + QUANTITY DECIMAL(10,3), + PRIMARY KEY (BOM_ID, LINE_NO), + CONSTRAINT BOM_DETAIL_BOM_FK FOREIGN KEY (BOM_ID) REFERENCES BOM_HEADER (BOM_ID), + CONSTRAINT BOM_DETAIL_COMP_FK FOREIGN KEY (COMPONENT_ITEM_ID) REFERENCES ITEM (ITEM_ID) +); + +LABEL ON COLUMN BOM_DETAIL ( + BOM_ID IS 'BOM Identifier', + LINE_NO IS 'Line Number', + COMPONENT_ITEM_ID IS 'Component Item ID', + QUANTITY IS 'Component Quantity' +); diff --git a/awdemo/sql/bomheader.table.sql b/awdemo/sql/bomheader.table.sql new file mode 100644 index 00000000..6e51c313 --- /dev/null +++ b/awdemo/sql/bomheader.table.sql @@ -0,0 +1,16 @@ +-- AdelWiggins demo dataset - BOM_HEADER (one row per parent item / revision) +CREATE OR REPLACE TABLE BOM_HEADER ( + BOM_ID CHAR(10), + PARENT_ITEM_ID FOR COLUMN PAREN00001 CHAR(10) NOT NULL, + REVISION CHAR(2), + EFFECTIVE_DATE FOR COLUMN EFFEC00001 DATE, + PRIMARY KEY (BOM_ID), + CONSTRAINT BOM_HEADER_PARENT_FK FOREIGN KEY (PARENT_ITEM_ID) REFERENCES ITEM (ITEM_ID) +); + +LABEL ON COLUMN BOM_HEADER ( + BOM_ID IS 'BOM Identifier', + PARENT_ITEM_ID IS 'Parent Item ID', + REVISION IS 'BOM Revision', + EFFECTIVE_DATE IS 'Effective From Date' +); diff --git a/awdemo/sql/data/10_warehouse.sql b/awdemo/sql/data/10_warehouse.sql new file mode 100644 index 00000000..0e8b4094 --- /dev/null +++ b/awdemo/sql/data/10_warehouse.sql @@ -0,0 +1,11 @@ +-- WAREHOUSE - AdelWiggins stocking locations +-- Generated by awdemo/tools/gen-awdemo-data.py - do not edit by hand. +-- Dates are anchored to as-of 2026-09-08; regenerate before a demo. + +INSERT INTO WAREHOUSE (WH_CODE, WH_NAME, LOCATION, ACTIVE_FLAG) VALUES + ('LAX', 'Los Angeles Main Plant', 'Los Angeles, CA - AS9100D machining and assembly', 'Y'), + ('VAL', 'Valencia Machining Center', 'Valencia, CA - CNC detail parts and finishing', 'Y'), + ('HUN', 'Huntington Operations', 'Huntington, WV - clamp fabrication and moulding', 'Y'), + ('MIA', 'Aftermarket Spares Depot', 'Miami, FL - MRO and AOG spares distribution', 'Y'), + ('ELP', 'Wiggins Mining Distribution', 'El Paso, TX - mining fast-fuel product centre', 'Y'); + diff --git a/awdemo/sql/data/20_supplier.sql b/awdemo/sql/data/20_supplier.sql new file mode 100644 index 00000000..5927aef4 --- /dev/null +++ b/awdemo/sql/data/20_supplier.sql @@ -0,0 +1,19 @@ +-- SUPPLIER - approved suppliers +-- Generated by awdemo/tools/gen-awdemo-data.py - do not edit by hand. +-- Dates are anchored to as-of 2026-09-08; regenerate before a demo. + +INSERT INTO SUPPLIER (SUPPLIER_ID, SUPPLIER_NAME, CONTACT_NAME, PHONE, EMAIL, ACTIVE_FLAG) VALUES + ('AWS001', 'Pacific Aerospace Alloys', 'Dana Whitfield', '310-555-0142', 'dwhitfield@pacaeroalloys.com', 'Y'), + ('AWS002', 'Meridian CRES Products', 'Luis Obregon', '562-555-0188', 'lobregon@meridiancres.com', 'Y'), + ('AWS003', 'Titan Bar & Billet Co.', 'Priya Raman', '714-555-0113', 'praman@titanbarbillet.com', 'Y'), + ('AWS004', 'Elastomer Dynamics Inc.', 'Corey Nakamura', '323-555-0177', 'cnakamura@elastomerdyn.com', 'Y'), + ('AWS005', 'Precision Fastener Group', 'Marta Delgado', '818-555-0126', 'mdelgado@precisionfast.com', 'Y'), + ('AWS006', 'Coastal Anodizing & Finishing', 'Ray Kowalski', '562-555-0209', 'rkowalski@coastalanodize.com', 'Y'), + ('AWS007', 'ThermElectric Components LLC', 'Ingrid Sorensen', '626-555-0154', 'isorensen@thermelectric.com', 'Y'), + ('AWS008', 'Composite Tube Technologies', 'Aaron Petrosian', '949-555-0198', 'apetrosian@comptubetech.com', 'Y'), + ('AWS009', 'SealTech Polymers', 'Yolanda Briggs', '909-555-0165', 'ybriggs@sealtechpoly.com', 'Y'), + ('AWS010', 'Western Spring & Wire', 'Devon Ashby', '661-555-0131', 'dashby@westernspringwire.com', 'Y'), + ('AWS011', 'Aero Label & Marking Co.', 'Suzanne Vogt', '213-555-0172', 'svogt@aerolabelmark.com', 'Y'), + ('AWS012', 'Summit Packaging Systems', 'Hector Alanis', '310-555-0119', 'halanis@summitpackaging.com', 'Y'), + ('AWS013', 'Redline Metal Treating', 'Gordon Meeks', '562-555-0244', 'gmeeks@redlinemetaltreat.com', 'N'); + diff --git a/awdemo/sql/data/30_item.sql b/awdemo/sql/data/30_item.sql new file mode 100644 index 00000000..f1dddef3 --- /dev/null +++ b/awdemo/sql/data/30_item.sql @@ -0,0 +1,167 @@ +-- ITEM - AdelWiggins part master +-- Generated by awdemo/tools/gen-awdemo-data.py - do not edit by hand. +-- Dates are anchored to as-of 2026-09-08; regenerate before a demo. + +INSERT INTO ITEM (ITEM_ID, ITEM_DESC, ITEM_TYPE, UNIT_OF_MEASURE, COST, ACTIVE_FLAG) VALUES + ('AL2024BAR', '2024-T351 Aluminum Bar Stock 2.00 in', 'P', 'LB', 8.75, 'Y'), + ('AL2024SHT', '2024-T3 Aluminum Sheet .050 in', 'P', 'SF', 6.40, 'Y'), + ('AL2024STR', '2024-T3 Aluminum Strip .032 x 1.00 in', 'P', 'FT', 1.85, 'Y'), + ('AL6061BAR', '6061-T6 Aluminum Bar Stock 1.50 in', 'P', 'LB', 5.20, 'Y'), + ('AL7075BAR', '7075-T73 Aluminum Bar Stock 2.50 in', 'P', 'LB', 11.30, 'Y'), + ('CR304TUB', '304 CRES Tube 1.00 OD x .035 Wall', 'P', 'FT', 9.25, 'Y'), + ('CR316WIR', '316 CRES Lockwire .032 in', 'P', 'FT', 0.42, 'Y'), + ('CR321BAR', '321 CRES Bar Stock 1.25 in', 'P', 'LB', 12.40, 'Y'), + ('CR321SHT', '321 CRES Sheet .025 in', 'P', 'SF', 14.60, 'Y'), + ('CR155BAR', '15-5 PH CRES Bar Stock 1.00 in', 'P', 'LB', 18.90, 'Y'), + ('CRA286BAR', 'A286 Alloy Bar Stock .750 in', 'P', 'LB', 22.80, 'Y'), + ('TI64BAR', 'Ti-6Al-4V Bar Stock 1.00 in', 'P', 'LB', 38.50, 'Y'), + ('TI64SHT', 'Ti-6Al-4V Sheet .040 in', 'P', 'SF', 62.00, 'Y'), + ('TICP2TUB', 'CP Grade 2 Titanium Tube .750 OD', 'P', 'FT', 44.75, 'Y'), + ('ELSIL60', 'Silicone Cushion Stock 60 Duro Sheet', 'P', 'SF', 9.80, 'Y'), + ('ELFSIL70', 'Fluorosilicone Cushion Stock 70 Duro', 'P', 'SF', 16.50, 'Y'), + ('ELPTFESH', 'PTFE Cushion Sheet .062 in', 'P', 'SF', 21.40, 'Y'), + ('ORFS908', 'Fluorosilicone O-Ring MS29513-908', 'P', 'EA', 1.45, 'Y'), + ('ORFS912', 'Fluorosilicone O-Ring MS29513-912', 'P', 'EA', 1.72, 'Y'), + ('ORVT916', 'Fluorocarbon O-Ring MS28775-916', 'P', 'EA', 1.28, 'Y'), + ('ORVT924', 'Fluorocarbon O-Ring MS28775-924', 'P', 'EA', 1.96, 'Y'), + ('ORSIL932', 'Silicone O-Ring MS9021-932', 'P', 'EA', 2.15, 'Y'), + ('ORNBR908', 'Nitrile O-Ring MS29513-908 Superseded', 'P', 'EA', 0.95, 'N'), + ('SLPTFEBU', 'PTFE Backup Ring Set', 'P', 'EA', 0.88, 'Y'), + ('SLGRAFOL', 'Graphite Foil High-Temp Seal Ring', 'P', 'EA', 4.35, 'Y'), + ('BLTA28610', 'A286 Hex Bolt .250-28 x 1.00 in', 'P', 'EA', 2.35, 'Y'), + ('BLTA28612', 'A286 Hex Bolt .250-28 x 1.25 in', 'P', 'EA', 2.55, 'Y'), + ('NUTA286SL', 'A286 Self-Locking Nut .250-28', 'P', 'EA', 1.15, 'Y'), + ('SCRCAP832', 'CRES Socket Cap Screw 8-32 x .500', 'P', 'EA', 0.34, 'Y'), + ('WSHCRE025', 'CRES Flat Washer .250 in', 'P', 'EA', 0.09, 'Y'), + ('PINSHR188', 'CRES Shear Pin .188 in Frangible', 'P', 'EA', 3.60, 'Y'), + ('PINROLL12', 'CRES Roll Pin .125 x .750 in', 'P', 'EA', 0.22, 'Y'), + ('RIVAL44', 'Aluminum Blind Rivet 1/8 x 1/4', 'P', 'EA', 0.11, 'Y'), + ('SPRCOMP01', 'CRES Compression Spring .500 OD', 'P', 'EA', 1.65, 'Y'), + ('SPRTORS02', 'CRES Torsion Spring Latch', 'P', 'EA', 2.10, 'Y'), + ('RETRING18', 'CRES Retaining Ring .188 in', 'P', 'EA', 0.28, 'Y'), + ('JAMNUT150', 'Aluminum Jam Nut 1.500-18', 'P', 'EA', 4.85, 'Y'), + ('HTFOIL01', 'Etched Foil Heating Element 22 Watt', 'P', 'EA', 27.40, 'Y'), + ('HTFOIL02', 'Etched Foil Heating Element 45 Watt', 'P', 'EA', 34.90, 'Y'), + ('HTTSTAT1', 'Thermostatic Control Switch 120F', 'P', 'EA', 18.25, 'Y'), + ('HTTCO160', 'Thermal Cut-Off Device 160F', 'P', 'EA', 12.60, 'Y'), + ('HTLEAD18', 'PTFE Lead Wire 18 AWG', 'P', 'FT', 1.35, 'Y'), + ('HTCONN01', 'Environmental Circular Connector 2-Pin', 'P', 'EA', 22.75, 'Y'), + ('HTEPOXY1', 'Structural Epoxy Compound Heater Grade', 'P', 'LB', 46.00, 'Y'), + ('HTSILRUB', 'Fire-Retardant Silicone Rubber Sheet', 'P', 'SF', 13.20, 'Y'), + ('HTGLSCLO', 'Fiberglass Insulating Cloth', 'P', 'SY', 7.65, 'Y'), + ('CMPTUBE05', 'Fiberglass/Epoxy Dielectric Tube 0.50 in', 'P', 'FT', 41.25, 'Y'), + ('CMPTUBE1', 'Fiberglass/Epoxy Dielectric Tube 1.00 in', 'P', 'FT', 58.00, 'Y'), + ('CMPTUBE2', 'Fiberglass/Epoxy Dielectric Tube 2.00 in', 'P', 'FT', 84.50, 'Y'), + ('CMPADHES', 'Aerospace Structural Adhesive Film', 'P', 'SF', 19.80, 'Y'); + +INSERT INTO ITEM (ITEM_ID, ITEM_DESC, ITEM_TYPE, UNIT_OF_MEASURE, COST, ACTIVE_FLAG) VALUES + ('HSPTFE04', 'PTFE Convoluted Hose Core -04', 'P', 'FT', 16.40, 'Y'), + ('HSPTFE08', 'PTFE Smooth Bore Hose Core -08', 'P', 'FT', 24.10, 'Y'), + ('HSBRAID1', 'CRES Wire Braid Reinforcement', 'P', 'FT', 8.95, 'Y'), + ('HSFITAN4', 'AN Straight Flare End Fitting -04', 'P', 'EA', 14.30, 'Y'), + ('HSFIT908', 'AN 90 Degree End Fitting -08', 'P', 'EA', 26.75, 'Y'), + ('FNANODIZ', 'Sulfuric Anodize per MIL-A-8625', 'P', 'EA', 3.20, 'Y'), + ('FNCHEMFL', 'Chemical Film per MIL-DTL-5541', 'P', 'EA', 1.90, 'Y'), + ('FNPASSIV', 'CRES Passivation per AMS2700', 'P', 'EA', 1.40, 'Y'), + ('FNPRIMER', 'Epoxy Primer per MIL-PRF-23377', 'P', 'PT', 38.50, 'Y'), + ('FNPAINT1', 'Polyurethane Topcoat per MIL-PRF-85285', 'P', 'QT', 44.00, 'Y'), + ('FNDRYLUB', 'Dry Film Lubricant per AS5272', 'P', 'PT', 52.00, 'Y'), + ('FNNDTFPI', 'Fluorescent Penetrant Inspection Service', 'P', 'EA', 6.75, 'Y'), + ('LBLNAME1', 'Aerospace Nameplate Etched CRES', 'P', 'EA', 2.85, 'Y'), + ('LBLPART1', 'Part Marking Label Polyimide', 'P', 'EA', 0.42, 'Y'), + ('PKGESDBG', 'ESD Barrier Bag Heat Sealable', 'P', 'EA', 0.55, 'Y'), + ('PKGCART1', 'Corrugated Shipping Carton 12x12x6', 'P', 'EA', 1.30, 'Y'), + ('PKGDESIC', 'Desiccant Pack 1 Unit', 'P', 'EA', 0.28, 'Y'), + ('PKGFOAM1', 'Die-Cut Foam Insert', 'P', 'EA', 1.75, 'Y'), + ('SACLSH16', 'Clamshell Half Machined -16 Aluminum', 'M', 'EA', 36.20, 'Y'), + ('SACLSH24', 'Clamshell Half Machined -24 Aluminum', 'M', 'EA', 46.04, 'Y'), + ('SACLSH32', 'Clamshell Half Machined -32 Aluminum', 'M', 'EA', 56.87, 'Y'), + ('SACLSH24C', 'Clamshell Half Machined -24 CRES', 'M', 'EA', 78.66, 'Y'), + ('SACLSH32T', 'Clamshell Half Machined -32 Titanium', 'M', 'EA', 228.15, 'Y'), + ('SATHBDY16', 'Threaded Coupling Body Machined -16', 'M', 'EA', 43.06, 'Y'), + ('SATHBDY24', 'Threaded Coupling Body Machined -24', 'M', 'EA', 50.93, 'Y'), + ('SATHBDY32', 'Threaded Coupling Body Machined -32', 'M', 'EA', 60.78, 'Y'), + ('SATHRDNUT', 'Threaded Coupling Nut Machined Aluminum', 'M', 'EA', 28.86, 'Y'), + ('SALATCH1', 'Latch and Hook Assembly Single Fault', 'M', 'EA', 26.82, 'Y'), + ('SAVTLI01', 'Visual Tactile Latch Indicator Assembly', 'M', 'EA', 9.99, 'Y'), + ('SASEALK16', 'Coupling Seal Kit -16', 'M', 'EA', 6.76, 'Y'), + ('SASEALK24', 'Coupling Seal Kit -24', 'M', 'EA', 7.54, 'Y'), + ('SASEALK32', 'Coupling Seal Kit -32', 'M', 'EA', 14.54, 'Y'), + ('SABODY200', '200 Series QD Body Machined', 'M', 'EA', 41.11, 'Y'), + ('SABODY600', '6000 Series QD Body Machined', 'M', 'EA', 45.20, 'Y'), + ('SAPOPPET1', 'QD Poppet and Spring Subassembly', 'M', 'EA', 18.51, 'Y'), + ('SASLEEVE1', 'QD Locking Sleeve Machined', 'M', 'EA', 31.15, 'Y'), + ('SAHTRCORE', 'Heater Core Assembly Foil and Substrate', 'M', 'EA', 106.48, 'Y'), + ('SAHTRHARN', 'Heater Wire Harness Assembly', 'M', 'EA', 131.23, 'Y'), + ('SAISOTUB1', 'Isolator Tube Subassembly 1.00 in', 'M', 'EA', 174.42, 'Y'), + ('SAISOTUB2', 'Isolator Tube Subassembly 2.00 in', 'M', 'EA', 311.92, 'Y'), + ('SAISOEND1', 'Isolator End Fitting Machined Aluminum', 'M', 'EA', 52.98, 'Y'), + ('SABANDAL6', 'Clamp Band Formed 2024 Aluminum -06', 'M', 'EA', 5.11, 'Y'), + ('SABANDCR8', 'Clamp Band Formed 321 CRES -08', 'M', 'EA', 4.49, 'Y'), + ('SACUSHN06', 'Clamp Cushion Molded Silicone -06', 'M', 'EA', 0.93, 'Y'), + ('SACUSHNW8', 'Clamp Cushion W-Shape Fluorosilicone -08', 'M', 'EA', 2.82, 'Y'), + ('SAWEARSH1', 'Wear Sleeve Shell Half High Temp', 'M', 'EA', 5.16, 'Y'), + ('SAHOSEAS8', 'Hose Core and Braid Subassembly -08', 'M', 'EA', 118.98, 'Y'), + ('W902-16', 'W902 Swage Ferrule -16 Aluminum', 'M', 'EA', 27.73, 'Y'), + ('W902-24', 'W902 Swage Ferrule -24 Aluminum', 'M', 'EA', 32.26, 'Y'), + ('W902-32', 'W902 Swage Ferrule -32 CRES', 'M', 'EA', 47.63, 'Y'); + +INSERT INTO ITEM (ITEM_ID, ITEM_DESC, ITEM_TYPE, UNIT_OF_MEASURE, COST, ACTIVE_FLAG) VALUES + ('F63052-24', '63052 Variable Cavity Swage Ferrule -24', 'M', 'EA', 33.24, 'Y'), + ('F63052-32', '63052 Swage Ferrule -32 Titanium', 'M', 'EA', 73.72, 'Y'), + ('W922N-16', 'W922N Bulkhead Fitting -16 Aluminum', 'M', 'EA', 56.97, 'Y'), + ('AW2010-16', 'AW2010HP Clamshell Coupling -16 Aluminum', 'M', 'EA', 205.11, 'Y'), + ('AW2010-24', 'AW2010HP Clamshell Coupling -24 Aluminum', 'M', 'EA', 242.66, 'Y'), + ('AW2010-32', 'AW2010HP Clamshell Coupling -32 Titanium', 'M', 'EA', 915.23, 'Y'), + ('AW2091-24', 'AW2091N Clamshell Coupling -24 Aluminum', 'M', 'EA', 260.64, 'Y'), + ('AW2100-24', 'AW2100 Clamshell Coupling -24 AS7510', 'M', 'EA', 329.76, 'Y'), + ('AW2100-32', 'AW2100 Clamshell Coupling -32 AS7510', 'M', 'EA', 381.35, 'Y'), + ('W991-16', 'W991 Flexible Clamshell Coupling -16', 'M', 'EA', 160.61, 'Y'), + ('W991-24', 'W991 Flexible Clamshell Coupling -24', 'M', 'EA', 198.16, 'Y'), + ('W991N-32', 'W991N Flexible Clamshell Coupling -32', 'M', 'EA', 249.75, 'Y'), + ('W991F-24', 'W991F High Temp Clamshell Coupling -24', 'M', 'EA', 322.06, 'Y'), + ('G620-32', 'G620 Clamshell Tube Connector -32', 'M', 'EA', 294.25, 'Y'), + ('AW971-16', 'AW971 Flexible Threaded Coupling -16', 'M', 'EA', 143.87, 'Y'), + ('AW971-24', 'AW971 Flexible Threaded Coupling -24', 'M', 'EA', 159.44, 'Y'), + ('W700-32', 'W700 Flexible Threaded Coupling -32', 'M', 'EA', 189.77, 'Y'), + ('C3600-16', '3600 Series Flexible Threaded Coupling -16', 'M', 'EA', 143.37, 'Y'), + ('C6300-24', '6300 Series Flexible Threaded Coupling -24', 'M', 'EA', 158.94, 'Y'), + ('AW979-24', 'AW979 Rigid Coupling -24 Self-Locking', 'M', 'EA', 160.16, 'Y'), + ('C8300-32', '8300 Series Rigid Coupling -32 AS1730', 'M', 'EA', 190.87, 'Y'), + ('QD200-08', '200 Series Quick Disconnect -08 Aluminum', 'M', 'EA', 206.03, 'Y'), + ('QD200-16', '200 Series Quick Disconnect -16 CRES', 'M', 'EA', 213.23, 'Y'), + ('QD200-04', '200 Series Quick Disconnect -04 Obsolete', 'M', 'EA', 148.77, 'N'), + ('QD6000-12', '6000 Series Quick Disconnect -12', 'M', 'EA', 216.36, 'Y'), + ('P9100-08', 'Preece 9100 Blind Mate QD -08', 'M', 'EA', 150.57, 'Y'), + ('P9400-12', 'Preece 9400 Series Quick Disconnect -12', 'M', 'EA', 158.90, 'Y'), + ('P9600-16', 'Preece 9600 Series Quick Disconnect -16', 'M', 'EA', 219.35, 'Y'), + ('PVCHK-08', 'Preece Check Valve -08', 'M', 'EA', 116.64, 'Y'), + ('PVFUSE-12', 'Preece Fuse Valve -12', 'M', 'EA', 127.48, 'Y'), + ('FRANG-12', 'Frangible Coupling -12 Stainless Steel', 'M', 'EA', 101.30, 'Y'), + ('HOSE-04S', 'Hose Assembly -04 Straight AN Ends', 'M', 'EA', 167.30, 'Y'), + ('HOSE-08L', 'Hose Assembly -08 90 Degree End', 'M', 'EA', 289.80, 'Y'), + ('ISOF-1000', 'Fuel Isolator 1.00 in Dielectric Inline', 'M', 'EA', 854.98, 'Y'), + ('ISOF-2000', 'Fuel Isolator 2.00 in Dielectric Inline', 'M', 'EA', 1262.04, 'Y'), + ('ISOH-0500', 'Hydraulic Isolator 0.50 in Bulkhead', 'M', 'EA', 448.31, 'Y'), + ('HTRRB-024', 'Ribbon Heater 24 in Thermostatic', 'M', 'EA', 565.29, 'Y'), + ('HTRRB-012', 'Ribbon Heater 12 in Superseded by 024', 'M', 'EA', 550.77, 'N'), + ('HTRBL-112', 'Heater Blanket 12 in Duct Freeze Protect', 'M', 'EA', 617.94, 'Y'), + ('HTRGK-HG1', 'HG Series Gasket Heater Lever Lock', 'M', 'EA', 98.59, 'Y'), + ('HTRCT-22W', 'Cartridge Heater 22 Watt EB Welded', 'M', 'EA', 73.55, 'Y'), + ('HTRCF-201', 'Heater Cuff and Manifold Assembly', 'M', 'EA', 588.35, 'Y'), + ('HTRHS-06', 'Heated Hose Assembly -06 Potable Water', 'M', 'EA', 265.81, 'Y'), + ('CLPSTD-06', 'Standard Loop Clamp -06 Aluminum Cushion', 'M', 'EA', 10.27, 'Y'), + ('CLPSTD-04', 'Standard Loop Clamp -04 Obsolete Cushion', 'M', 'EA', 3.40, 'N'), + ('CLPTL-08', 'Top-Locking Loop Clamp -08 2024 Aluminum', 'M', 'EA', 14.21, 'Y'), + ('CLPSL-08', 'Side Locking Loop Clamp -08 321 CRES', 'M', 'EA', 16.37, 'Y'), + ('CLPBLK-12', 'Block Clamp -12 Double Mount 304 CRES', 'M', 'EA', 26.32, 'Y'), + ('CLPWS-10', 'Wear Sleeve Clamp -10 High Temperature', 'M', 'EA', 25.18, 'Y'), + ('CLPSPC-06', 'Aircraft Specialty Clamp -06 W-Cushion', 'M', 'EA', 12.43, 'Y'); + +INSERT INTO ITEM (ITEM_ID, ITEM_DESC, ITEM_TYPE, UNIT_OF_MEASURE, COST, ACTIVE_FLAG) VALUES + ('GRMAC-04', 'Aircraft Grommet -04 Panel Mount', 'M', 'EA', 0.33, 'Y'), + ('WMFFN-100', 'Diesel Fast Fueling Nozzle 1200 LPM', 'M', 'EA', 355.21, 'Y'), + ('WMFFR-100', 'Diesel Fast Fueling Receiver 1.5 in', 'M', 'EA', 213.58, 'Y'), + ('WMDEF-050', 'DEF Automatic Fill System Heated', 'M', 'EA', 274.74, 'Y'), + ('WMLQD-075', 'Lubrication Quick Disconnect .75 Dry Break', 'M', 'EA', 183.28, 'Y'); + diff --git a/awdemo/sql/data/40_supplier_item.sql b/awdemo/sql/data/40_supplier_item.sql new file mode 100644 index 00000000..0d438b37 --- /dev/null +++ b/awdemo/sql/data/40_supplier_item.sql @@ -0,0 +1,99 @@ +-- SUPPLIER_ITEM - approved source list +-- Generated by awdemo/tools/gen-awdemo-data.py - do not edit by hand. +-- Dates are anchored to as-of 2026-09-08; regenerate before a demo. + +INSERT INTO SUPPLIER_ITEM (SUPPLIER_ID, ITEM_ID, LEAD_TIME_DAYS, PURCHASE_COST, PRIMARY_SUPPLIER_FLAG) VALUES + ('AWS001', 'AL2024BAR', 10, 7.70, 'Y'), + ('AWS001', 'AL2024SHT', 21, 5.63, 'Y'), + ('AWS001', 'AL2024STR', 3, 1.63, 'Y'), + ('AWS001', 'AL6061BAR', 10, 4.58, 'Y'), + ('AWS001', 'AL7075BAR', 28, 9.94, 'Y'), + ('AWS001', 'CR304TUB', 19, 9.89, 'N'), + ('AWS001', 'CR321BAR', 49, 11.66, 'N'), + ('AWS001', 'CR321SHT', 15, 15.91, 'N'), + ('AWS001', 'CRA286BAR', 35, 24.46, 'N'), + ('AWS001', 'TI64SHT', 26, 59.99, 'N'), + ('AWS001', 'TICP2TUB', 15, 45.56, 'N'), + ('AWS002', 'AL2024SHT', 42, 6.38, 'N'), + ('AWS002', 'AL2024STR', 8, 2.06, 'N'), + ('AWS002', 'AL6061BAR', 20, 5.06, 'N'), + ('AWS002', 'BLTA28610', 15, 2.32, 'N'), + ('AWS002', 'BLTA28612', 50, 2.75, 'N'), + ('AWS002', 'CR155BAR', 14, 16.63, 'Y'), + ('AWS002', 'CR304TUB', 14, 8.14, 'Y'), + ('AWS002', 'CR316WIR', 5, 0.37, 'Y'), + ('AWS002', 'CR321BAR', 35, 10.91, 'Y'), + ('AWS002', 'CR321SHT', 5, 12.85, 'Y'), + ('AWS002', 'CRA286BAR', 21, 20.06, 'Y'), + ('AWS002', 'HSFIT908', 8, 25.36, 'N'), + ('AWS002', 'HSPTFE04', 42, 16.13, 'N'), + ('AWS002', 'HSPTFE08', 65, 26.22, 'N'), + ('AWS002', 'NUTA286SL', 15, 1.25, 'N'), + ('AWS002', 'PINSHR188', 42, 3.51, 'N'), + ('AWS002', 'SCRCAP832', 21, 0.38, 'N'), + ('AWS003', 'TI64BAR', 45, 33.88, 'Y'), + ('AWS003', 'TI64SHT', 21, 54.56, 'Y'), + ('AWS003', 'TICP2TUB', 10, 39.38, 'Y'), + ('AWS004', 'ELFSIL70', 14, 14.52, 'Y'), + ('AWS004', 'ELPTFESH', 21, 18.83, 'Y'), + ('AWS004', 'ELSIL60', 45, 8.62, 'Y'), + ('AWS004', 'ORFS908', 45, 1.28, 'Y'), + ('AWS004', 'ORFS912', 60, 1.51, 'Y'), + ('AWS004', 'ORNBR908', 28, 0.84, 'Y'), + ('AWS004', 'ORSIL932', 21, 1.89, 'Y'), + ('AWS004', 'ORVT916', 10, 1.13, 'Y'), + ('AWS004', 'ORVT924', 7, 1.72, 'Y'), + ('AWS004', 'SLPTFEBU', 42, 0.84, 'N'), + ('AWS005', 'BLTA28610', 10, 2.07, 'Y'), + ('AWS005', 'BLTA28612', 45, 2.24, 'Y'), + ('AWS005', 'JAMNUT150', 5, 4.27, 'Y'), + ('AWS005', 'NUTA286SL', 10, 1.01, 'Y'), + ('AWS005', 'PINROLL12', 10, 0.19, 'Y'), + ('AWS005', 'PINSHR188', 28, 3.17, 'Y'), + ('AWS005', 'RIVAL44', 21, 0.10, 'Y'), + ('AWS005', 'SCRCAP832', 7, 0.30, 'Y'), + ('AWS005', 'SPRCOMP01', 38, 1.83, 'N'); + +INSERT INTO SUPPLIER_ITEM (SUPPLIER_ID, ITEM_ID, LEAD_TIME_DAYS, PURCHASE_COST, PRIMARY_SUPPLIER_FLAG) VALUES + ('AWS005', 'SPRTORS02', 55, 2.06, 'N'), + ('AWS005', 'WSHCRE025', 35, 0.08, 'Y'), + ('AWS006', 'FNANODIZ', 28, 2.82, 'Y'), + ('AWS006', 'FNCHEMFL', 45, 1.67, 'Y'), + ('AWS006', 'FNDRYLUB', 10, 45.76, 'Y'), + ('AWS006', 'FNNDTFPI', 45, 5.94, 'Y'), + ('AWS006', 'FNPAINT1', 7, 38.72, 'Y'), + ('AWS006', 'FNPASSIV', 3, 1.23, 'Y'), + ('AWS006', 'FNPRIMER', 28, 33.88, 'Y'), + ('AWS007', 'HTCONN01', 35, 20.02, 'Y'), + ('AWS007', 'HTEPOXY1', 5, 40.48, 'Y'), + ('AWS007', 'HTFOIL01', 10, 24.11, 'Y'), + ('AWS007', 'HTFOIL02', 28, 30.71, 'Y'), + ('AWS007', 'HTGLSCLO', 7, 6.73, 'Y'), + ('AWS007', 'HTLEAD18', 5, 1.19, 'Y'), + ('AWS007', 'HTSILRUB', 7, 11.62, 'Y'), + ('AWS007', 'HTTCO160', 14, 11.09, 'Y'), + ('AWS007', 'HTTSTAT1', 5, 16.06, 'Y'), + ('AWS008', 'CMPADHES', 10, 17.42, 'Y'), + ('AWS008', 'CMPTUBE05', 45, 36.30, 'Y'), + ('AWS008', 'CMPTUBE1', 7, 51.04, 'Y'), + ('AWS008', 'CMPTUBE2', 5, 74.36, 'Y'), + ('AWS009', 'HSBRAID1', 3, 7.88, 'Y'), + ('AWS009', 'HSFIT908', 3, 23.54, 'Y'), + ('AWS009', 'HSFITAN4', 21, 12.58, 'Y'), + ('AWS009', 'HSPTFE04', 28, 14.43, 'Y'), + ('AWS009', 'HSPTFE08', 60, 21.21, 'Y'), + ('AWS009', 'ORVT916', 15, 1.29, 'N'), + ('AWS009', 'ORVT924', 28, 1.90, 'N'), + ('AWS009', 'SLGRAFOL', 35, 3.83, 'Y'), + ('AWS009', 'SLPTFEBU', 28, 0.77, 'Y'), + ('AWS010', 'RETRING18', 5, 0.25, 'Y'), + ('AWS010', 'SPRCOMP01', 28, 1.45, 'Y'), + ('AWS010', 'SPRTORS02', 45, 1.85, 'Y'), + ('AWS011', 'LBLNAME1', 7, 2.51, 'Y'), + ('AWS011', 'LBLPART1', 60, 0.37, 'Y'), + ('AWS012', 'PKGCART1', 3, 1.14, 'Y'), + ('AWS012', 'PKGDESIC', 5, 0.25, 'Y'), + ('AWS012', 'PKGESDBG', 7, 0.48, 'Y'), + ('AWS012', 'PKGFOAM1', 60, 1.54, 'Y'), + ('AWS013', 'FNCHEMFL', 59, 1.83, 'N'); + diff --git a/awdemo/sql/data/50_bom_header.sql b/awdemo/sql/data/50_bom_header.sql new file mode 100644 index 00000000..927e95c2 --- /dev/null +++ b/awdemo/sql/data/50_bom_header.sql @@ -0,0 +1,99 @@ +-- BOM_HEADER - product structure headers +-- Generated by awdemo/tools/gen-awdemo-data.py - do not edit by hand. +-- Dates are anchored to as-of 2026-09-08; regenerate before a demo. + +INSERT INTO BOM_HEADER (BOM_ID, PARENT_ITEM_ID, REVISION, EFFECTIVE_DATE) VALUES + ('BM00001', 'SACLSH16', 'A', DATE('2023-12-15')), + ('BM00002', 'SACLSH24', 'A', DATE('2023-11-08')), + ('BM00003', 'SACLSH32', 'A', DATE('2020-06-20')), + ('BM00004', 'SACLSH24C', 'A', DATE('2022-08-02')), + ('BM00005', 'SACLSH32T', 'A', DATE('2019-09-09')), + ('BM00006', 'SATHBDY16', 'A', DATE('2019-03-18')), + ('BM00007', 'SATHBDY24', 'A', DATE('2024-06-09')), + ('BM00008', 'SATHBDY32', 'A', DATE('2020-12-29')), + ('BM00009', 'SATHRDNUT', 'A', DATE('2022-08-03')), + ('BM00010', 'SALATCH1', 'A', DATE('2020-03-18')), + ('BM00011', 'SAVTLI01', 'A', DATE('2021-02-21')), + ('BM00012', 'SASEALK16', 'A', DATE('2020-06-09')), + ('BM00013', 'SASEALK24', 'A', DATE('2023-07-12')), + ('BM00014', 'SASEALK32', 'A', DATE('2023-09-21')), + ('BM00015', 'SABODY200', 'A', DATE('2022-11-19')), + ('BM00016', 'SABODY600', 'A', DATE('2020-01-14')), + ('BM00017', 'SAPOPPET1', 'A', DATE('2022-02-09')), + ('BM00018', 'SASLEEVE1', 'A', DATE('2019-02-19')), + ('BM00019', 'SAHTRCORE', 'A', DATE('2019-05-25')), + ('BM00020', 'SAHTRHARN', 'A', DATE('2019-12-24')), + ('BM00021', 'SAISOTUB1', 'A', DATE('2021-10-05')), + ('BM00022', 'SAISOTUB2', 'A', DATE('2019-02-14')), + ('BM00023', 'SAISOEND1', 'A', DATE('2023-01-18')), + ('BM00024', 'SABANDAL6', 'A', DATE('2023-01-23')), + ('BM00025', 'SABANDCR8', 'A', DATE('2023-10-11')), + ('BM00026', 'SACUSHN06', 'A', DATE('2021-01-04')), + ('BM00027', 'SACUSHNW8', 'A', DATE('2021-08-19')), + ('BM00028', 'SAWEARSH1', 'A', DATE('2023-11-11')), + ('BM00029', 'SAHOSEAS8', 'A', DATE('2021-10-01')), + ('BM00030', 'W902-16', 'A', DATE('2022-01-11')), + ('BM00031', 'W902-24', 'A', DATE('2022-03-08')), + ('BM00032', 'W902-32', 'A', DATE('2022-10-24')), + ('BM00033', 'F63052-24', 'A', DATE('2024-04-06')), + ('BM00034', 'F63052-32', 'A', DATE('2020-04-05')), + ('BM00035', 'W922N-16', 'A', DATE('2023-01-01')), + ('BM00036', 'AW2010-16', 'A', DATE('2020-05-19')), + ('BM00037', 'AW2010-24', 'A', DATE('2019-09-07')), + ('BM00038', 'AW2010-32', 'A', DATE('2020-10-15')), + ('BM00039', 'AW2091-24', 'A', DATE('2024-02-28')), + ('BM00040', 'AW2100-24', 'A', DATE('2022-08-08')), + ('BM00041', 'AW2100-32', 'A', DATE('2021-04-22')), + ('BM00042', 'W991-16', 'A', DATE('2020-09-14')), + ('BM00043', 'W991-24', 'A', DATE('2020-01-27')), + ('BM00044', 'W991N-32', 'A', DATE('2022-03-07')), + ('BM00045', 'W991F-24', 'A', DATE('2021-08-10')), + ('BM00046', 'G620-32', 'A', DATE('2021-05-30')), + ('BM00047', 'AW971-16', 'A', DATE('2023-04-15')), + ('BM00048', 'AW971-24', 'A', DATE('2023-12-24')), + ('BM00049', 'W700-32', 'A', DATE('2024-05-06')), + ('BM00050', 'C3600-16', 'A', DATE('2020-07-18')); + +INSERT INTO BOM_HEADER (BOM_ID, PARENT_ITEM_ID, REVISION, EFFECTIVE_DATE) VALUES + ('BM00051', 'C6300-24', 'A', DATE('2023-11-03')), + ('BM00052', 'AW979-24', 'A', DATE('2022-04-21')), + ('BM00053', 'C8300-32', 'A', DATE('2020-04-09')), + ('BM00054', 'QD200-08', 'A', DATE('2020-04-05')), + ('BM00055', 'QD200-16', 'A', DATE('2023-04-08')), + ('BM00056', 'QD200-04', 'A', DATE('2022-08-16')), + ('BM00057', 'QD6000-12', 'A', DATE('2023-01-19')), + ('BM00058', 'P9100-08', 'A', DATE('2021-09-04')), + ('BM00059', 'P9400-12', 'A', DATE('2022-05-29')), + ('BM00060', 'P9600-16', 'A', DATE('2022-12-20')), + ('BM00061', 'PVCHK-08', 'A', DATE('2021-07-26')), + ('BM00062', 'PVFUSE-12', 'A', DATE('2022-05-12')), + ('BM00063', 'FRANG-12', 'A', DATE('2019-07-04')), + ('BM00064', 'HOSE-04S', 'A', DATE('2019-11-24')), + ('BM00065', 'HOSE-08L', 'A', DATE('2021-11-11')), + ('BM00066', 'ISOF-1000', 'A', DATE('2020-07-05')), + ('BM00067', 'ISOF-2000', 'A', DATE('2020-04-08')), + ('BM00068', 'ISOH-0500', 'A', DATE('2019-12-16')), + ('BM00069', 'HTRRB-024', 'A', DATE('2020-03-30')), + ('BM00070', 'HTRRB-012', 'A', DATE('2022-04-28')), + ('BM00071', 'HTRBL-112', 'A', DATE('2022-08-29')), + ('BM00072', 'HTRGK-HG1', 'A', DATE('2019-02-04')), + ('BM00073', 'HTRCT-22W', 'A', DATE('2019-02-20')), + ('BM00074', 'HTRCF-201', 'A', DATE('2021-07-30')), + ('BM00075', 'HTRHS-06', 'A', DATE('2019-11-01')), + ('BM00076', 'CLPSTD-06', 'A', DATE('2021-11-24')), + ('BM00077', 'CLPTL-08', 'A', DATE('2020-10-23')), + ('BM00078', 'CLPSL-08', 'A', DATE('2024-05-19')), + ('BM00079', 'CLPBLK-12', 'A', DATE('2019-05-15')), + ('BM00080', 'CLPWS-10', 'A', DATE('2019-11-05')), + ('BM00081', 'CLPSPC-06', 'A', DATE('2019-09-17')), + ('BM00082', 'GRMAC-04', 'A', DATE('2022-12-11')), + ('BM00083', 'WMFFN-100', 'A', DATE('2022-05-10')), + ('BM00084', 'WMFFR-100', 'A', DATE('2023-08-08')), + ('BM00085', 'WMDEF-050', 'A', DATE('2022-07-27')), + ('BM00086', 'WMLQD-075', 'A', DATE('2020-05-14')), + ('BM00087', 'AW2100-24', 'B', DATE('2025-11-03')), + ('BM00088', 'ISOF-1000', 'B', DATE('2026-02-16')), + ('BM00089', 'W991-24', 'B', DATE('2026-05-04')), + ('BM00090', 'HTRBL-112', 'B', DATE('2026-01-12')), + ('BM00091', 'WMFFN-100', 'B', DATE('2025-12-08')); + diff --git a/awdemo/sql/data/60_bom_detail.sql b/awdemo/sql/data/60_bom_detail.sql new file mode 100644 index 00000000..8fdbc97f --- /dev/null +++ b/awdemo/sql/data/60_bom_detail.sql @@ -0,0 +1,482 @@ +-- BOM_DETAIL - product structure component lines +-- Generated by awdemo/tools/gen-awdemo-data.py - do not edit by hand. +-- Dates are anchored to as-of 2026-09-08; regenerate before a demo. + +INSERT INTO BOM_DETAIL (BOM_ID, LINE_NO, COMPONENT_ITEM_ID, QUANTITY) VALUES + ('BM00001', 10, 'AL2024BAR', 0.850), + ('BM00001', 20, 'FNCHEMFL', 1.000), + ('BM00001', 30, 'FNNDTFPI', 1.000), + ('BM00002', 10, 'AL2024BAR', 1.350), + ('BM00002', 20, 'FNCHEMFL', 1.000), + ('BM00002', 30, 'FNNDTFPI', 1.000), + ('BM00003', 10, 'AL2024BAR', 1.900), + ('BM00003', 20, 'FNCHEMFL', 1.000), + ('BM00003', 30, 'FNNDTFPI', 1.000), + ('BM00004', 10, 'CR321BAR', 2.100), + ('BM00004', 20, 'FNPASSIV', 1.000), + ('BM00004', 30, 'FNPRIMER', 0.020), + ('BM00004', 40, 'FNNDTFPI', 1.000), + ('BM00005', 10, 'TI64BAR', 2.100), + ('BM00005', 20, 'TI64SHT', 0.200), + ('BM00005', 30, 'FNPASSIV', 1.000), + ('BM00005', 40, 'FNNDTFPI', 1.000), + ('BM00006', 10, 'AL2024BAR', 1.050), + ('BM00006', 20, 'FNANODIZ', 1.000), + ('BM00006', 30, 'FNNDTFPI', 1.000), + ('BM00007', 10, 'AL2024BAR', 1.450), + ('BM00007', 20, 'FNANODIZ', 1.000), + ('BM00007', 30, 'FNNDTFPI', 1.000), + ('BM00008', 10, 'AL2024BAR', 1.950), + ('BM00008', 20, 'FNANODIZ', 1.000), + ('BM00008', 30, 'FNNDTFPI', 1.000), + ('BM00009', 10, 'AL2024BAR', 1.100), + ('BM00009', 20, 'FNANODIZ', 1.000), + ('BM00010', 10, 'CRA286BAR', 0.350), + ('BM00010', 20, 'SPRTORS02', 1.000), + ('BM00010', 30, 'PINROLL12', 2.000), + ('BM00010', 40, 'FNPASSIV', 1.000), + ('BM00011', 10, 'ELPTFESH', 0.120), + ('BM00011', 20, 'PINROLL12', 1.000), + ('BM00011', 30, 'SPRCOMP01', 1.000), + ('BM00012', 10, 'ORFS908', 2.000), + ('BM00012', 20, 'SLPTFEBU', 2.000), + ('BM00013', 10, 'ORFS912', 2.000), + ('BM00013', 20, 'SLPTFEBU', 2.000), + ('BM00014', 10, 'ORVT924', 2.000), + ('BM00014', 20, 'SLPTFEBU', 2.000), + ('BM00014', 30, 'SLGRAFOL', 1.000), + ('BM00015', 10, 'AL6061BAR', 1.600), + ('BM00015', 20, 'FNANODIZ', 1.000), + ('BM00015', 30, 'FNNDTFPI', 1.000), + ('BM00016', 10, 'AL6061BAR', 1.950), + ('BM00016', 20, 'FNANODIZ', 1.000), + ('BM00016', 30, 'FNNDTFPI', 1.000), + ('BM00017', 10, 'CRA286BAR', 0.220), + ('BM00017', 20, 'SPRCOMP01', 1.000), + ('BM00017', 30, 'ORVT916', 1.000), + ('BM00017', 40, 'RETRING18', 1.000), + ('BM00018', 10, 'AL7075BAR', 0.750), + ('BM00018', 20, 'FNANODIZ', 1.000), + ('BM00018', 30, 'FNDRYLUB', 0.010), + ('BM00018', 40, 'SPRCOMP01', 1.000), + ('BM00019', 10, 'HTFOIL01', 1.000), + ('BM00019', 20, 'HTEPOXY1', 0.350), + ('BM00019', 30, 'HTGLSCLO', 0.500), + ('BM00020', 10, 'HTLEAD18', 3.500), + ('BM00020', 20, 'HTCONN01', 1.000), + ('BM00020', 30, 'HTTSTAT1', 1.000), + ('BM00020', 40, 'HTTCO160', 1.000), + ('BM00021', 10, 'CMPTUBE1', 1.200), + ('BM00021', 20, 'CMPADHES', 0.400), + ('BM00022', 10, 'CMPTUBE2', 1.500), + ('BM00022', 20, 'CMPADHES', 0.600), + ('BM00023', 10, 'AL7075BAR', 1.250), + ('BM00023', 20, 'FNCHEMFL', 1.000), + ('BM00023', 30, 'FNPRIMER', 0.020), + ('BM00023', 40, 'FNNDTFPI', 1.000), + ('BM00024', 10, 'AL2024STR', 0.550), + ('BM00024', 20, 'FNCHEMFL', 1.000), + ('BM00025', 10, 'CR321SHT', 0.080), + ('BM00025', 20, 'FNPASSIV', 1.000), + ('BM00026', 10, 'ELSIL60', 0.050), + ('BM00027', 10, 'ELFSIL70', 0.090), + ('BM00028', 10, 'CR304TUB', 0.150), + ('BM00028', 20, 'FNPASSIV', 1.000), + ('BM00029', 10, 'HSPTFE08', 1.600), + ('BM00029', 20, 'HSBRAID1', 1.600), + ('BM00030', 10, 'AL2024BAR', 0.420), + ('BM00030', 20, 'FNCHEMFL', 1.000), + ('BM00030', 30, 'FNNDTFPI', 1.000), + ('BM00031', 10, 'AL2024BAR', 0.650), + ('BM00031', 20, 'FNCHEMFL', 1.000), + ('BM00031', 30, 'FNNDTFPI', 1.000), + ('BM00032', 10, 'CR321BAR', 1.050), + ('BM00032', 20, 'FNPASSIV', 1.000), + ('BM00032', 30, 'FNNDTFPI', 1.000), + ('BM00033', 10, 'AL2024BAR', 0.700), + ('BM00033', 20, 'FNCHEMFL', 1.000), + ('BM00033', 30, 'FNNDTFPI', 1.000), + ('BM00034', 10, 'TICP2TUB', 0.550), + ('BM00034', 20, 'FNPASSIV', 1.000), + ('BM00034', 30, 'FNNDTFPI', 1.000), + ('BM00035', 10, 'AL7075BAR', 1.400), + ('BM00035', 20, 'JAMNUT150', 1.000), + ('BM00035', 30, 'ORFS908', 1.000), + ('BM00035', 40, 'FNANODIZ', 1.000); + +INSERT INTO BOM_DETAIL (BOM_ID, LINE_NO, COMPONENT_ITEM_ID, QUANTITY) VALUES + ('BM00036', 10, 'SACLSH16', 2.000), + ('BM00036', 20, 'SALATCH1', 1.000), + ('BM00036', 30, 'SASEALK16', 1.000), + ('BM00036', 40, 'BLTA28610', 2.000), + ('BM00036', 50, 'NUTA286SL', 2.000), + ('BM00036', 60, 'LBLPART1', 1.000), + ('BM00036', 70, 'PKGESDBG', 1.000), + ('BM00037', 10, 'SACLSH24', 2.000), + ('BM00037', 20, 'SALATCH1', 1.000), + ('BM00037', 30, 'SASEALK24', 1.000), + ('BM00037', 40, 'BLTA28612', 2.000), + ('BM00037', 50, 'NUTA286SL', 2.000), + ('BM00037', 60, 'LBLPART1', 1.000), + ('BM00037', 70, 'PKGESDBG', 1.000), + ('BM00038', 10, 'SACLSH32T', 2.000), + ('BM00038', 20, 'SALATCH1', 1.000), + ('BM00038', 30, 'SASEALK32', 1.000), + ('BM00038', 40, 'BLTA28612', 2.000), + ('BM00038', 50, 'NUTA286SL', 2.000), + ('BM00038', 60, 'LBLNAME1', 1.000), + ('BM00038', 70, 'PKGESDBG', 1.000), + ('BM00039', 10, 'SACLSH24', 2.000), + ('BM00039', 20, 'SALATCH1', 1.000), + ('BM00039', 30, 'SAVTLI01', 1.000), + ('BM00039', 40, 'SASEALK24', 1.000), + ('BM00039', 50, 'BLTA28612', 2.000), + ('BM00039', 60, 'NUTA286SL', 2.000), + ('BM00039', 70, 'LBLPART1', 1.000), + ('BM00039', 80, 'PKGESDBG', 1.000), + ('BM00040', 10, 'SACLSH24', 2.000), + ('BM00040', 20, 'SALATCH1', 2.000), + ('BM00040', 30, 'SAVTLI01', 1.000), + ('BM00040', 40, 'SASEALK24', 1.000), + ('BM00040', 50, 'BLTA28612', 4.000), + ('BM00040', 60, 'NUTA286SL', 4.000), + ('BM00040', 70, 'LBLNAME1', 1.000), + ('BM00040', 80, 'PKGESDBG', 1.000), + ('BM00040', 90, 'PKGFOAM1', 1.000), + ('BM00041', 10, 'SACLSH32', 2.000), + ('BM00041', 20, 'SALATCH1', 2.000), + ('BM00041', 30, 'SAVTLI01', 1.000), + ('BM00041', 40, 'SASEALK32', 1.000), + ('BM00041', 50, 'BLTA28612', 4.000), + ('BM00041', 60, 'NUTA286SL', 4.000), + ('BM00041', 70, 'LBLNAME1', 1.000), + ('BM00041', 80, 'PKGESDBG', 1.000), + ('BM00041', 90, 'PKGFOAM1', 1.000), + ('BM00042', 10, 'SACLSH16', 2.000), + ('BM00042', 20, 'SASEALK16', 1.000), + ('BM00042', 30, 'BLTA28610', 2.000), + ('BM00042', 40, 'NUTA286SL', 2.000), + ('BM00042', 50, 'SPRTORS02', 1.000), + ('BM00042', 60, 'LBLPART1', 1.000), + ('BM00042', 70, 'PKGESDBG', 1.000), + ('BM00043', 10, 'SACLSH24', 2.000), + ('BM00043', 20, 'SASEALK24', 1.000), + ('BM00043', 30, 'BLTA28612', 2.000), + ('BM00043', 40, 'NUTA286SL', 2.000), + ('BM00043', 50, 'SPRTORS02', 1.000), + ('BM00043', 60, 'LBLPART1', 1.000), + ('BM00043', 70, 'PKGESDBG', 1.000), + ('BM00044', 10, 'SACLSH32', 2.000), + ('BM00044', 20, 'SASEALK32', 1.000), + ('BM00044', 30, 'BLTA28612', 2.000), + ('BM00044', 40, 'NUTA286SL', 2.000), + ('BM00044', 50, 'SPRTORS02', 1.000), + ('BM00044', 60, 'LBLPART1', 1.000), + ('BM00044', 70, 'PKGESDBG', 1.000), + ('BM00045', 10, 'SACLSH24C', 2.000), + ('BM00045', 20, 'SLGRAFOL', 2.000), + ('BM00045', 30, 'BLTA28612', 2.000), + ('BM00045', 40, 'NUTA286SL', 2.000), + ('BM00045', 50, 'SPRTORS02', 1.000), + ('BM00045', 60, 'LBLNAME1', 1.000), + ('BM00045', 70, 'PKGESDBG', 1.000), + ('BM00046', 10, 'SACLSH32', 2.000), + ('BM00046', 20, 'SALATCH1', 1.000), + ('BM00046', 30, 'SASEALK32', 1.000), + ('BM00046', 40, 'BLTA28612', 2.000), + ('BM00046', 50, 'NUTA286SL', 2.000), + ('BM00046', 60, 'LBLPART1', 1.000), + ('BM00046', 70, 'PKGESDBG', 1.000), + ('BM00047', 10, 'SATHBDY16', 1.000), + ('BM00047', 20, 'SATHRDNUT', 1.000), + ('BM00047', 30, 'SASEALK16', 1.000), + ('BM00047', 40, 'RETRING18', 1.000), + ('BM00047', 50, 'LBLPART1', 1.000), + ('BM00047', 60, 'PKGESDBG', 1.000), + ('BM00048', 10, 'SATHBDY24', 1.000), + ('BM00048', 20, 'SATHRDNUT', 1.000), + ('BM00048', 30, 'SASEALK24', 1.000), + ('BM00048', 40, 'RETRING18', 1.000), + ('BM00048', 50, 'LBLPART1', 1.000), + ('BM00048', 60, 'PKGESDBG', 1.000), + ('BM00049', 10, 'SATHBDY32', 1.000), + ('BM00049', 20, 'SATHRDNUT', 1.000), + ('BM00049', 30, 'SASEALK32', 1.000), + ('BM00049', 40, 'RETRING18', 1.000), + ('BM00049', 50, 'LBLPART1', 1.000), + ('BM00049', 60, 'PKGESDBG', 1.000); + +INSERT INTO BOM_DETAIL (BOM_ID, LINE_NO, COMPONENT_ITEM_ID, QUANTITY) VALUES + ('BM00050', 10, 'SATHBDY16', 1.000), + ('BM00050', 20, 'SATHRDNUT', 1.000), + ('BM00050', 30, 'SASEALK16', 1.000), + ('BM00050', 40, 'LBLPART1', 1.000), + ('BM00050', 50, 'PKGESDBG', 1.000), + ('BM00051', 10, 'SATHBDY24', 1.000), + ('BM00051', 20, 'SATHRDNUT', 1.000), + ('BM00051', 30, 'SASEALK24', 1.000), + ('BM00051', 40, 'LBLPART1', 1.000), + ('BM00051', 50, 'PKGESDBG', 1.000), + ('BM00052', 10, 'SATHBDY24', 1.000), + ('BM00052', 20, 'SATHRDNUT', 1.000), + ('BM00052', 30, 'SASEALK24', 1.000), + ('BM00052', 40, 'SCRCAP832', 2.000), + ('BM00052', 50, 'LBLPART1', 1.000), + ('BM00052', 60, 'PKGESDBG', 1.000), + ('BM00053', 10, 'SATHBDY32', 1.000), + ('BM00053', 20, 'SATHRDNUT', 1.000), + ('BM00053', 30, 'SASEALK32', 1.000), + ('BM00053', 40, 'SCRCAP832', 2.000), + ('BM00053', 50, 'CR316WIR', 0.500), + ('BM00053', 60, 'LBLPART1', 1.000), + ('BM00053', 70, 'PKGESDBG', 1.000), + ('BM00054', 10, 'SABODY200', 1.000), + ('BM00054', 20, 'SAPOPPET1', 2.000), + ('BM00054', 30, 'SASLEEVE1', 1.000), + ('BM00054', 40, 'ORVT916', 2.000), + ('BM00054', 50, 'SPRCOMP01', 1.000), + ('BM00054', 60, 'LBLPART1', 1.000), + ('BM00054', 70, 'PKGESDBG', 1.000), + ('BM00055', 10, 'SABODY200', 1.000), + ('BM00055', 20, 'SAPOPPET1', 2.000), + ('BM00055', 30, 'SASLEEVE1', 1.000), + ('BM00055', 40, 'ORVT924', 2.000), + ('BM00055', 50, 'SPRCOMP01', 1.000), + ('BM00055', 60, 'CR316WIR', 0.500), + ('BM00055', 70, 'LBLNAME1', 1.000), + ('BM00055', 80, 'PKGESDBG', 1.000), + ('BM00056', 10, 'SABODY200', 1.000), + ('BM00056', 20, 'SAPOPPET1', 2.000), + ('BM00056', 30, 'ORNBR908', 2.000), + ('BM00056', 40, 'SPRCOMP01', 1.000), + ('BM00056', 50, 'LBLPART1', 1.000), + ('BM00056', 60, 'PKGESDBG', 1.000), + ('BM00057', 10, 'SABODY600', 1.000), + ('BM00057', 20, 'SAPOPPET1', 2.000), + ('BM00057', 30, 'SASLEEVE1', 1.000), + ('BM00057', 40, 'ORVT916', 2.000), + ('BM00057', 50, 'SPRCOMP01', 2.000), + ('BM00057', 60, 'LBLPART1', 1.000), + ('BM00057', 70, 'PKGESDBG', 1.000), + ('BM00058', 10, 'SABODY200', 1.000), + ('BM00058', 20, 'SAPOPPET1', 2.000), + ('BM00058', 30, 'ORFS908', 2.000), + ('BM00058', 40, 'SPRCOMP01', 1.000), + ('BM00058', 50, 'LBLPART1', 1.000), + ('BM00058', 60, 'PKGESDBG', 1.000), + ('BM00059', 10, 'SABODY600', 1.000), + ('BM00059', 20, 'SAPOPPET1', 2.000), + ('BM00059', 30, 'ORFS912', 2.000), + ('BM00059', 40, 'SPRCOMP01', 1.000), + ('BM00059', 50, 'LBLPART1', 1.000), + ('BM00059', 60, 'PKGESDBG', 1.000), + ('BM00060', 10, 'SABODY600', 1.000), + ('BM00060', 20, 'SAPOPPET1', 2.000), + ('BM00060', 30, 'ORFS912', 2.000), + ('BM00060', 40, 'SASLEEVE1', 1.000), + ('BM00060', 50, 'SPRCOMP01', 1.000), + ('BM00060', 60, 'LBLNAME1', 1.000), + ('BM00060', 70, 'PKGESDBG', 1.000), + ('BM00061', 10, 'SABODY200', 1.000), + ('BM00061', 20, 'SAPOPPET1', 1.000), + ('BM00061', 30, 'SPRCOMP01', 1.000), + ('BM00061', 40, 'ORVT916', 2.000), + ('BM00061', 50, 'LBLPART1', 1.000), + ('BM00061', 60, 'PKGESDBG', 1.000), + ('BM00062', 10, 'SABODY600', 1.000), + ('BM00062', 20, 'SAPOPPET1', 1.000), + ('BM00062', 30, 'SPRCOMP01', 2.000), + ('BM00062', 40, 'ORVT916', 2.000), + ('BM00062', 50, 'RETRING18', 1.000), + ('BM00062', 60, 'LBLPART1', 1.000), + ('BM00062', 70, 'PKGESDBG', 1.000), + ('BM00063', 10, 'CR155BAR', 1.850), + ('BM00063', 20, 'PINSHR188', 2.000), + ('BM00063', 30, 'ORVT916', 2.000), + ('BM00063', 40, 'FNPASSIV', 1.000), + ('BM00063', 50, 'FNNDTFPI', 1.000), + ('BM00063', 60, 'LBLNAME1', 1.000), + ('BM00063', 70, 'PKGESDBG', 1.000), + ('BM00064', 10, 'HSPTFE04', 2.500), + ('BM00064', 20, 'HSBRAID1', 2.500), + ('BM00064', 30, 'HSFITAN4', 2.000), + ('BM00064', 40, 'LBLPART1', 1.000), + ('BM00064', 50, 'PKGESDBG', 1.000), + ('BM00065', 10, 'SAHOSEAS8', 1.000), + ('BM00065', 20, 'HSFIT908', 1.000), + ('BM00065', 30, 'HSFITAN4', 1.000), + ('BM00065', 40, 'LBLPART1', 1.000), + ('BM00065', 50, 'PKGESDBG', 1.000); + +INSERT INTO BOM_DETAIL (BOM_ID, LINE_NO, COMPONENT_ITEM_ID, QUANTITY) VALUES + ('BM00066', 10, 'SAISOTUB1', 1.000), + ('BM00066', 20, 'SAISOEND1', 2.000), + ('BM00066', 30, 'ORFS912', 2.000), + ('BM00066', 40, 'BLTA28612', 4.000), + ('BM00066', 50, 'NUTA286SL', 4.000), + ('BM00066', 60, 'LBLNAME1', 1.000), + ('BM00066', 70, 'PKGESDBG', 1.000), + ('BM00066', 80, 'PKGDESIC', 1.000), + ('BM00066', 90, 'PKGFOAM1', 1.000), + ('BM00066', 100, 'PKGCART1', 1.000), + ('BM00067', 10, 'SAISOTUB2', 1.000), + ('BM00067', 20, 'SAISOEND1', 2.000), + ('BM00067', 30, 'ORVT924', 2.000), + ('BM00067', 40, 'BLTA28612', 6.000), + ('BM00067', 50, 'NUTA286SL', 6.000), + ('BM00067', 60, 'LBLNAME1', 1.000), + ('BM00067', 70, 'PKGESDBG', 1.000), + ('BM00067', 80, 'PKGDESIC', 1.000), + ('BM00067', 90, 'PKGFOAM1', 1.000), + ('BM00067', 100, 'PKGCART1', 1.000), + ('BM00068', 10, 'CMPTUBE05', 1.000), + ('BM00068', 20, 'SAISOEND1', 2.000), + ('BM00068', 30, 'JAMNUT150', 1.000), + ('BM00068', 40, 'ORFS908', 2.000), + ('BM00068', 50, 'LBLNAME1', 1.000), + ('BM00068', 60, 'PKGESDBG', 1.000), + ('BM00068', 70, 'PKGFOAM1', 1.000), + ('BM00069', 10, 'SAHTRCORE', 1.000), + ('BM00069', 20, 'SAHTRHARN', 1.000), + ('BM00069', 30, 'HTSILRUB', 1.200), + ('BM00069', 40, 'LBLNAME1', 1.000), + ('BM00069', 50, 'PKGESDBG', 1.000), + ('BM00070', 10, 'SAHTRCORE', 1.000), + ('BM00070', 20, 'SAHTRHARN', 1.000), + ('BM00070', 30, 'HTSILRUB', 0.700), + ('BM00070', 40, 'LBLNAME1', 1.000), + ('BM00070', 50, 'PKGESDBG', 1.000), + ('BM00071', 10, 'SAHTRCORE', 1.000), + ('BM00071', 20, 'SAHTRHARN', 1.000), + ('BM00071', 30, 'HTSILRUB', 2.400), + ('BM00071', 40, 'HTGLSCLO', 1.000), + ('BM00071', 50, 'RIVAL44', 4.000), + ('BM00071', 60, 'LBLNAME1', 1.000), + ('BM00071', 70, 'PKGESDBG', 1.000), + ('BM00072', 10, 'HTFOIL01', 1.000), + ('BM00072', 20, 'HTEPOXY1', 0.220), + ('BM00072', 30, 'HTLEAD18', 1.500), + ('BM00072', 40, 'ORSIL932', 2.000), + ('BM00072', 50, 'LBLPART1', 1.000), + ('BM00072', 60, 'PKGESDBG', 1.000), + ('BM00073', 10, 'HTFOIL01', 1.000), + ('BM00073', 20, 'CR304TUB', 0.250), + ('BM00073', 30, 'HTLEAD18', 1.000), + ('BM00073', 40, 'FNPASSIV', 1.000), + ('BM00073', 50, 'LBLPART1', 1.000), + ('BM00073', 60, 'PKGESDBG', 1.000), + ('BM00074', 10, 'SAHTRCORE', 1.000), + ('BM00074', 20, 'SAHTRHARN', 1.000), + ('BM00074', 30, 'HTSILRUB', 1.800), + ('BM00074', 40, 'AL2024SHT', 0.400), + ('BM00074', 50, 'LBLNAME1', 1.000), + ('BM00074', 60, 'PKGESDBG', 1.000), + ('BM00075', 10, 'HSPTFE04', 3.000), + ('BM00075', 20, 'HTFOIL02', 1.000), + ('BM00075', 30, 'HTLEAD18', 3.500), + ('BM00075', 40, 'HSFITAN4', 2.000), + ('BM00075', 50, 'LBLNAME1', 1.000), + ('BM00075', 60, 'PKGESDBG', 1.000), + ('BM00076', 10, 'SABANDAL6', 1.000), + ('BM00076', 20, 'SACUSHN06', 1.000), + ('BM00077', 10, 'SABANDAL6', 1.000), + ('BM00077', 20, 'SACUSHN06', 1.000), + ('BM00077', 30, 'PINROLL12', 1.000), + ('BM00077', 40, 'SPRTORS02', 1.000), + ('BM00078', 10, 'SABANDCR8', 1.000), + ('BM00078', 20, 'SACUSHNW8', 1.000), + ('BM00078', 30, 'PINROLL12', 1.000), + ('BM00078', 40, 'SPRTORS02', 1.000), + ('BM00079', 10, 'SABANDCR8', 2.000), + ('BM00079', 20, 'SACUSHNW8', 2.000), + ('BM00079', 30, 'SCRCAP832', 2.000), + ('BM00079', 40, 'WSHCRE025', 2.000), + ('BM00080', 10, 'SABANDCR8', 1.000), + ('BM00080', 20, 'SAWEARSH1', 2.000), + ('BM00081', 10, 'SABANDCR8', 1.000), + ('BM00081', 20, 'SACUSHNW8', 1.000), + ('BM00082', 10, 'ELSIL60', 0.020), + ('BM00083', 10, 'SABODY600', 1.000), + ('BM00083', 20, 'SAPOPPET1', 2.000), + ('BM00083', 30, 'SASLEEVE1', 1.000), + ('BM00083', 40, 'ORVT924', 4.000), + ('BM00083', 50, 'SPRCOMP01', 2.000), + ('BM00083', 60, 'AL7075BAR', 2.400), + ('BM00083', 70, 'FNANODIZ', 1.000), + ('BM00083', 80, 'FNPAINT1', 0.050), + ('BM00083', 90, 'LBLNAME1', 1.000), + ('BM00083', 100, 'PKGDESIC', 1.000), + ('BM00083', 110, 'PKGCART1', 1.000), + ('BM00084', 10, 'SABODY600', 1.000), + ('BM00084', 20, 'SAPOPPET1', 1.000); + +INSERT INTO BOM_DETAIL (BOM_ID, LINE_NO, COMPONENT_ITEM_ID, QUANTITY) VALUES + ('BM00084', 30, 'ORVT924', 2.000), + ('BM00084', 40, 'AL7075BAR', 1.800), + ('BM00084', 50, 'FNANODIZ', 1.000), + ('BM00084', 60, 'FNPAINT1', 0.040), + ('BM00084', 70, 'LBLNAME1', 1.000), + ('BM00084', 80, 'PKGCART1', 1.000), + ('BM00085', 10, 'SABODY200', 1.000), + ('BM00085', 20, 'SAPOPPET1', 1.000), + ('BM00085', 30, 'HTFOIL02', 1.000), + ('BM00085', 40, 'HTTSTAT1', 1.000), + ('BM00085', 50, 'HTLEAD18', 4.000), + ('BM00085', 60, 'ORVT916', 2.000), + ('BM00085', 70, 'LBLNAME1', 1.000), + ('BM00085', 80, 'PKGCART1', 1.000), + ('BM00086', 10, 'SABODY200', 1.000), + ('BM00086', 20, 'SAPOPPET1', 2.000), + ('BM00086', 30, 'ORVT916', 2.000), + ('BM00086', 40, 'SPRCOMP01', 1.000), + ('BM00086', 50, 'LBLPART1', 1.000), + ('BM00086', 60, 'PKGESDBG', 1.000), + ('BM00087', 10, 'SACLSH24', 2.000), + ('BM00087', 20, 'SALATCH1', 2.000), + ('BM00087', 30, 'SAVTLI01', 2.000), + ('BM00087', 40, 'SASEALK24', 1.000), + ('BM00087', 50, 'BLTA28612', 4.000), + ('BM00087', 60, 'NUTA286SL', 4.000), + ('BM00087', 70, 'LBLNAME1', 1.000), + ('BM00087', 80, 'PKGESDBG', 1.000), + ('BM00087', 90, 'PKGFOAM1', 1.000), + ('BM00088', 10, 'SAISOTUB1', 1.000), + ('BM00088', 20, 'SAISOEND1', 2.000), + ('BM00088', 30, 'ORFS912', 2.000), + ('BM00088', 40, 'BLTA28612', 4.000), + ('BM00088', 50, 'NUTA286SL', 4.000), + ('BM00088', 60, 'LBLNAME1', 1.000), + ('BM00088', 70, 'PKGESDBG', 1.000), + ('BM00088', 80, 'PKGDESIC', 2.000), + ('BM00088', 90, 'PKGFOAM1', 1.000), + ('BM00088', 100, 'PKGCART1', 1.000), + ('BM00088', 110, 'CMPADHES', 0.100), + ('BM00089', 10, 'SACLSH24', 2.000), + ('BM00089', 20, 'SASEALK24', 1.000), + ('BM00089', 30, 'BLTA28612', 2.000), + ('BM00089', 40, 'NUTA286SL', 2.000), + ('BM00089', 50, 'SPRTORS02', 1.000), + ('BM00089', 60, 'LBLPART1', 1.000), + ('BM00089', 70, 'PKGESDBG', 1.000), + ('BM00089', 80, 'SLGRAFOL', 1.000), + ('BM00090', 10, 'SAHTRCORE', 1.000), + ('BM00090', 20, 'SAHTRHARN', 1.000), + ('BM00090', 30, 'HTSILRUB', 2.400), + ('BM00090', 40, 'HTGLSCLO', 1.000), + ('BM00090', 50, 'RIVAL44', 4.000), + ('BM00090', 60, 'LBLNAME1', 1.000), + ('BM00090', 70, 'PKGESDBG', 1.000), + ('BM00090', 80, 'HTTCO160', 1.000), + ('BM00091', 10, 'SABODY600', 1.000), + ('BM00091', 20, 'SAPOPPET1', 2.000), + ('BM00091', 30, 'SASLEEVE1', 1.000), + ('BM00091', 40, 'ORVT924', 4.000), + ('BM00091', 50, 'SPRCOMP01', 2.000), + ('BM00091', 60, 'AL7075BAR', 2.400), + ('BM00091', 70, 'FNANODIZ', 1.000), + ('BM00091', 80, 'FNPAINT1', 0.050), + ('BM00091', 90, 'LBLNAME1', 1.000), + ('BM00091', 100, 'PKGDESIC', 1.000), + ('BM00091', 110, 'PKGCART1', 1.000), + ('BM00091', 120, 'FNDRYLUB', 0.020); + diff --git a/awdemo/sql/data/70_inventory.sql b/awdemo/sql/data/70_inventory.sql new file mode 100644 index 00000000..7e8f68f8 --- /dev/null +++ b/awdemo/sql/data/70_inventory.sql @@ -0,0 +1,368 @@ +-- INVENTORY - on-hand balances by stocking location +-- Generated by awdemo/tools/gen-awdemo-data.py - do not edit by hand. +-- Dates are anchored to as-of 2026-09-08; regenerate before a demo. + +INSERT INTO INVENTORY (ITEM_ID, WH_CODE, QTY_ON_HAND, QTY_ON_ORDER, REORDER_POINT, LAST_RECEIPT_DATE, LAST_ISSUE_DATE) VALUES + ('AL2024BAR', 'LAX', 5040.76, 0.00, 851.91, DATE('2026-04-02'), DATE('2026-04-27')), + ('AL2024BAR', 'HUN', 334.68, 0.00, 432.08, DATE('2026-08-03'), DATE('2026-04-02')), + ('AL2024SHT', 'LAX', 886.96, 0.00, 371.34, DATE('2026-08-31'), DATE('2026-04-24')), + ('AL2024SHT', 'HUN', 2822.37, 0.00, 834.57, DATE('2026-06-01'), DATE('2026-07-29')), + ('AL2024STR', 'LAX', 162.64, 0.00, 436.92, DATE('2026-04-13'), DATE('2026-02-27')), + ('AL2024STR', 'HUN', 4569.82, 519.40, 646.49, DATE('2026-08-14'), DATE('2026-07-16')), + ('AL6061BAR', 'LAX', 540.37, 953.88, 674.19, DATE('2026-03-25'), DATE('2026-09-07')), + ('AL6061BAR', 'HUN', 2625.76, 459.16, 782.26, DATE('2026-03-12'), DATE('2026-07-21')), + ('AL7075BAR', 'LAX', 719.67, 604.42, 601.63, DATE('2026-04-24'), DATE('2026-05-28')), + ('AL7075BAR', 'HUN', 39.47, 0.00, 102.56, DATE('2026-08-31'), DATE('2026-06-22')), + ('CR304TUB', 'LAX', 682.31, 0.00, 217.57, DATE('2026-05-15'), DATE('2026-05-11')), + ('CR304TUB', 'HUN', 495.07, 0.00, 693.47, DATE('2026-02-23'), DATE('2026-04-13')), + ('CR316WIR', 'LAX', 839.04, 0.00, 698.51, DATE('2026-06-22'), DATE('2026-04-09')), + ('CR316WIR', 'VAL', 1083.32, 0.00, 324.59, DATE('2026-02-06'), DATE('2026-07-31')), + ('CR316WIR', 'HUN', 1577.60, 591.46, 572.00, DATE('2026-02-12'), DATE('2026-06-24')), + ('CR321BAR', 'LAX', 1029.94, 590.67, 352.39, DATE('2026-06-15'), DATE('2026-04-22')), + ('CR321BAR', 'VAL', 217.08, 507.14, 576.50, DATE('2026-01-22'), DATE('2026-06-25')), + ('CR321BAR', 'HUN', 335.30, 483.21, 229.12, DATE('2026-04-07'), DATE('2026-03-04')), + ('CR321SHT', 'LAX', 1479.69, 376.77, 358.63, DATE('2026-07-31'), DATE('2026-05-18')), + ('CR321SHT', 'VAL', 1364.25, 0.00, 666.69, DATE('2026-08-21'), DATE('2026-09-07')), + ('CR321SHT', 'HUN', 2349.41, 0.00, 544.41, DATE('2026-06-08'), DATE('2026-04-17')), + ('CR155BAR', 'LAX', 2286.71, 476.94, 887.90, DATE('2026-08-14'), DATE('2026-08-13')), + ('CR155BAR', 'HUN', 478.64, 0.00, 172.17, DATE('2026-07-02'), DATE('2026-06-30')), + ('CRA286BAR', 'LAX', 1440.98, 0.00, 429.03, DATE('2026-03-20'), DATE('2026-03-20')), + ('CRA286BAR', 'HUN', 654.29, 0.00, 235.43, DATE('2026-05-19'), DATE('2026-03-13')), + ('TI64BAR', 'LAX', 123.60, 244.98, 149.51, DATE('2026-02-03'), DATE('2026-07-02')), + ('TI64BAR', 'HUN', 827.01, 0.00, 351.87, DATE('2026-07-27'), DATE('2026-06-05')), + ('TI64SHT', 'LAX', 6.26, 935.26, 709.14, DATE('2026-04-10'), DATE('2026-08-28')), + ('TI64SHT', 'HUN', 949.85, 253.01, 168.99, DATE('2026-07-24'), DATE('2026-06-23')), + ('TICP2TUB', 'LAX', 1053.60, 0.00, 776.61, DATE('2026-05-18'), DATE('2026-08-05')), + ('TICP2TUB', 'HUN', 306.97, 1377.55, 865.04, DATE('2026-04-10'), DATE('2026-07-07')), + ('ELSIL60', 'LAX', 898.55, 522.40, 316.52, DATE('2026-04-08'), DATE('2026-07-17')), + ('ELSIL60', 'VAL', 569.94, 0.00, 446.72, DATE('2026-08-17'), DATE('2026-07-03')), + ('ELSIL60', 'HUN', 2669.53, 0.00, 852.18, DATE('2026-06-26'), DATE('2026-06-05')), + ('ELFSIL70', 'LAX', 450.96, 1058.14, 577.05, DATE('2026-05-27'), DATE('2026-03-23')), + ('ELFSIL70', 'HUN', 24.94, 145.56, 152.24, DATE('2026-04-01'), DATE('2026-04-09')), + ('ELPTFESH', 'LAX', 2038.01, 1128.58, 679.23, DATE('2026-05-27'), DATE('2026-03-16')), + ('ELPTFESH', 'VAL', 600.88, 0.00, 264.53, DATE('2026-05-18'), DATE('2026-05-25')), + ('ELPTFESH', 'HUN', 2123.56, 1314.39, 708.97, DATE('2026-04-06'), DATE('2026-02-27')), + ('ORFS908', 'LAX', 494.03, 331.89, 282.72, DATE('2026-09-01'), DATE('2026-03-06')), + ('ORFS908', 'VAL', 1164.42, 1493.66, 780.63, DATE('2026-09-04'), DATE('2026-08-07')), + ('ORFS908', 'HUN', 952.58, 0.00, 216.62, DATE('2026-02-05'), DATE('2026-03-18')), + ('ORFS912', 'LAX', 803.07, 195.48, 243.89, DATE('2026-07-03'), DATE('2026-04-22')), + ('ORFS912', 'VAL', 966.11, 0.00, 623.20, DATE('2026-03-09'), DATE('2026-08-19')), + ('ORFS912', 'HUN', 344.32, 260.95, 178.52, DATE('2026-02-18'), DATE('2026-03-11')), + ('ORVT916', 'LAX', 2991.88, 0.00, 504.93, DATE('2026-05-07'), DATE('2026-04-16')), + ('ORVT916', 'VAL', 902.50, 943.23, 634.67, DATE('2026-05-21'), DATE('2026-07-01')), + ('ORVT916', 'HUN', 1201.45, 908.10, 867.46, DATE('2026-04-24'), DATE('2026-07-24')), + ('ORVT924', 'LAX', 932.10, 0.00, 633.67, DATE('2026-06-16'), DATE('2026-07-10')), + ('ORVT924', 'HUN', 1101.22, 0.00, 572.35, DATE('2026-06-12'), DATE('2026-08-10')), + ('ORSIL932', 'LAX', 638.53, 0.00, 227.98, DATE('2026-01-27'), DATE('2026-06-17')), + ('ORSIL932', 'HUN', 679.28, 0.00, 596.87, DATE('2026-08-10'), DATE('2026-08-24')), + ('ORNBR908', 'LAX', 38.08, 166.91, 102.81, DATE('2026-03-16'), DATE('2026-04-28')), + ('ORNBR908', 'HUN', 14.67, 67.56, 77.93, DATE('2026-04-07'), DATE('2026-04-21')), + ('SLPTFEBU', 'LAX', 396.47, 279.42, 149.13, DATE('2026-06-25'), DATE('2026-04-24')), + ('SLPTFEBU', 'HUN', 2267.59, 1313.31, 766.72, DATE('2026-01-15'), DATE('2026-04-08')), + ('SLGRAFOL', 'LAX', 2496.00, 1320.37, 843.99, DATE('2026-07-07'), DATE('2026-07-20')), + ('SLGRAFOL', 'VAL', 375.55, 0.00, 496.72, DATE('2026-05-11'), DATE('2026-07-24')), + ('SLGRAFOL', 'HUN', 397.78, 0.00, 126.77, DATE('2026-02-03'), DATE('2026-05-15')), + ('BLTA28610', 'LAX', 56.02, 0.00, 189.63, DATE('2026-05-04'), DATE('2026-07-01')), + ('BLTA28610', 'VAL', 1047.95, 0.00, 325.86, DATE('2026-05-25'), DATE('2026-08-14')), + ('BLTA28610', 'HUN', 373.07, 202.71, 143.55, DATE('2026-03-30'), DATE('2026-08-05')), + ('BLTA28612', 'LAX', 1176.54, 464.69, 715.45, DATE('2026-05-05'), DATE('2026-06-01')), + ('BLTA28612', 'VAL', 1339.50, 0.00, 650.37, DATE('2026-04-21'), DATE('2026-05-20')), + ('BLTA28612', 'HUN', 437.20, 0.00, 234.41, DATE('2026-02-03'), DATE('2026-06-30')), + ('NUTA286SL', 'LAX', 1177.47, 0.00, 460.83, DATE('2026-04-03'), DATE('2026-06-17')), + ('NUTA286SL', 'VAL', 435.45, 227.55, 244.25, DATE('2026-07-24'), DATE('2026-06-26')), + ('NUTA286SL', 'HUN', 948.57, 258.88, 297.44, DATE('2026-05-18'), DATE('2026-09-04')), + ('SCRCAP832', 'LAX', 62.15, 216.91, 203.94, DATE('2026-02-09'), DATE('2026-04-24')), + ('SCRCAP832', 'HUN', 330.03, 0.00, 556.48, DATE('2026-03-24'), DATE('2026-07-08')), + ('WSHCRE025', 'LAX', 1208.50, 0.00, 506.29, DATE('2026-04-08'), DATE('2026-08-28')), + ('WSHCRE025', 'HUN', 2519.45, 1068.70, 833.92, DATE('2026-06-08'), DATE('2026-03-23')), + ('PINSHR188', 'LAX', 862.22, 0.00, 272.83, DATE('2026-06-08'), DATE('2026-03-10')), + ('PINSHR188', 'HUN', 3468.24, 1097.86, 500.05, DATE('2026-05-06'), DATE('2026-05-28')), + ('PINROLL12', 'LAX', 194.63, 615.25, 314.87, DATE('2026-04-20'), DATE('2026-06-18')), + ('PINROLL12', 'HUN', 929.39, 502.40, 453.00, DATE('2026-05-11'), DATE('2026-04-27')), + ('RIVAL44', 'LAX', 1539.91, 378.50, 210.71, DATE('2026-07-13'), DATE('2026-08-04')), + ('RIVAL44', 'VAL', 666.53, 590.80, 275.40, DATE('2026-07-01'), DATE('2026-02-20')), + ('RIVAL44', 'HUN', 161.57, 438.82, 249.66, DATE('2026-02-13'), DATE('2026-05-11')), + ('SPRCOMP01', 'LAX', 1346.36, 0.00, 677.08, DATE('2026-05-18'), DATE('2026-03-18')), + ('SPRCOMP01', 'HUN', 1422.40, 678.68, 423.76, DATE('2026-04-29'), DATE('2026-05-20')), + ('SPRTORS02', 'LAX', 334.18, 104.69, 100.51, DATE('2026-06-12'), DATE('2026-07-01')), + ('SPRTORS02', 'HUN', 1038.46, 0.00, 499.67, DATE('2026-04-01'), DATE('2026-03-24')), + ('RETRING18', 'LAX', 1204.72, 752.92, 614.19, DATE('2026-01-20'), DATE('2026-07-14')), + ('RETRING18', 'HUN', 59.72, 569.59, 326.69, DATE('2026-09-04'), DATE('2026-06-16')), + ('JAMNUT150', 'LAX', 801.11, 0.00, 449.56, DATE('2026-03-11'), DATE('2026-05-08')), + ('JAMNUT150', 'VAL', 1183.47, 0.00, 580.97, DATE('2026-03-18'), DATE('2026-06-15')), + ('JAMNUT150', 'HUN', 760.48, 0.00, 456.92, DATE('2026-07-03'), DATE('2026-05-11')), + ('HTFOIL01', 'LAX', 922.77, 764.92, 692.81, DATE('2026-04-15'), DATE('2026-06-08')), + ('HTFOIL01', 'HUN', 1592.42, 1385.83, 649.90, DATE('2026-05-12'), DATE('2026-06-09')), + ('HTFOIL02', 'LAX', 1349.42, 1069.39, 685.71, DATE('2026-02-09'), DATE('2026-04-27')), + ('HTFOIL02', 'VAL', 426.12, 300.02, 149.49, DATE('2026-04-24'), DATE('2026-02-27')), + ('HTFOIL02', 'HUN', 1180.49, 0.00, 412.16, DATE('2026-06-24'), DATE('2026-06-30')), + ('HTTSTAT1', 'LAX', 1239.65, 974.27, 555.25, DATE('2026-05-05'), DATE('2026-07-23')), + ('HTTSTAT1', 'HUN', 1408.49, 0.00, 508.97, DATE('2026-05-07'), DATE('2026-04-21')), + ('HTTCO160', 'LAX', 718.43, 0.00, 325.27, DATE('2026-08-03'), DATE('2026-06-19')), + ('HTTCO160', 'HUN', 30.60, 374.74, 795.57, DATE('2026-07-17'), DATE('2026-07-17')), + ('HTLEAD18', 'LAX', 1389.64, 1077.78, 847.99, DATE('2026-01-20'), DATE('2026-06-29')), + ('HTLEAD18', 'HUN', 846.76, 463.39, 266.59, DATE('2026-06-15'), DATE('2026-09-03')), + ('HTCONN01', 'LAX', 303.27, 531.60, 377.47, DATE('2026-01-26'), DATE('2026-04-28')); + +INSERT INTO INVENTORY (ITEM_ID, WH_CODE, QTY_ON_HAND, QTY_ON_ORDER, REORDER_POINT, LAST_RECEIPT_DATE, LAST_ISSUE_DATE) VALUES + ('HTCONN01', 'VAL', 1612.94, 359.11, 477.07, DATE('2026-06-25'), DATE('2026-08-31')), + ('HTCONN01', 'HUN', 239.79, 323.12, 168.83, DATE('2026-07-14'), DATE('2026-07-01')), + ('HTEPOXY1', 'LAX', 599.04, 465.12, 337.79, DATE('2026-09-03'), DATE('2026-08-17')), + ('HTEPOXY1', 'HUN', 1376.26, 0.00, 623.84, DATE('2026-01-27'), DATE('2026-03-13')), + ('HTSILRUB', 'LAX', 198.09, 0.00, 233.74, DATE('2026-04-28'), DATE('2026-05-22')), + ('HTSILRUB', 'HUN', 278.24, 0.00, 415.02, DATE('2026-07-17'), DATE('2026-02-24')), + ('HTGLSCLO', 'LAX', 1217.20, 377.95, 379.92, DATE('2026-04-01'), DATE('2026-04-15')), + ('HTGLSCLO', 'HUN', 893.68, 0.00, 335.34, DATE('2026-05-19'), DATE('2026-09-04')), + ('CMPTUBE05', 'LAX', 405.29, 201.87, 132.87, DATE('2026-01-14'), DATE('2026-06-26')), + ('CMPTUBE05', 'HUN', 960.17, 410.93, 313.16, DATE('2026-09-01'), DATE('2026-05-11')), + ('CMPTUBE1', 'LAX', 3604.16, 0.00, 780.18, DATE('2026-03-31'), DATE('2026-04-16')), + ('CMPTUBE1', 'HUN', 876.70, 589.01, 378.53, DATE('2026-06-12'), DATE('2026-04-20')), + ('CMPTUBE2', 'LAX', 2333.41, 1320.52, 755.66, DATE('2026-01-27'), DATE('2026-08-26')), + ('CMPTUBE2', 'HUN', 425.51, 0.00, 170.94, DATE('2026-07-02'), DATE('2026-05-22')), + ('CMPADHES', 'LAX', 200.24, 0.00, 95.92, DATE('2026-07-13'), DATE('2026-08-25')), + ('CMPADHES', 'HUN', 400.05, 1010.56, 470.65, DATE('2026-03-04'), DATE('2026-04-20')), + ('HSPTFE04', 'LAX', 883.72, 0.00, 446.24, DATE('2026-04-13'), DATE('2026-07-21')), + ('HSPTFE04', 'HUN', 1820.40, 244.72, 277.15, DATE('2026-01-16'), DATE('2026-07-22')), + ('HSPTFE08', 'LAX', 236.66, 0.00, 77.87, DATE('2026-08-17'), DATE('2026-04-14')), + ('HSPTFE08', 'HUN', 150.95, 0.00, 99.33, DATE('2026-03-13'), DATE('2026-06-23')), + ('HSBRAID1', 'LAX', 17.03, 611.01, 702.71, DATE('2026-09-01'), DATE('2026-06-25')), + ('HSBRAID1', 'HUN', 1366.24, 261.26, 471.11, DATE('2026-03-05'), DATE('2026-05-12')), + ('HSFITAN4', 'LAX', 427.53, 747.47, 649.23, DATE('2026-05-28'), DATE('2026-05-12')), + ('HSFITAN4', 'HUN', 2001.82, 1788.32, 820.68, DATE('2026-01-15'), DATE('2026-08-19')), + ('HSFIT908', 'LAX', 173.07, 52.19, 93.55, DATE('2026-01-14'), DATE('2026-06-18')), + ('HSFIT908', 'HUN', 857.50, 0.00, 497.37, DATE('2026-02-23'), DATE('2026-08-10')), + ('FNANODIZ', 'LAX', 597.46, 0.00, 748.77, DATE('2026-08-14'), DATE('2026-04-21')), + ('FNANODIZ', 'HUN', 106.65, 214.78, 273.18, DATE('2026-07-10'), DATE('2026-07-27')), + ('FNCHEMFL', 'LAX', 337.76, 0.00, 136.68, DATE('2026-04-15'), DATE('2026-06-29')), + ('FNCHEMFL', 'HUN', 140.28, 0.00, 85.59, DATE('2026-06-18'), DATE('2026-05-13')), + ('FNPASSIV', 'LAX', 495.68, 130.09, 190.90, DATE('2026-04-13'), DATE('2026-03-27')), + ('FNPASSIV', 'VAL', 963.29, 1396.07, 763.30, DATE('2026-07-24'), DATE('2026-03-30')), + ('FNPASSIV', 'HUN', 1633.05, 504.65, 799.56, DATE('2026-04-02'), DATE('2026-08-17')), + ('FNPRIMER', 'LAX', 1396.00, 0.00, 690.95, DATE('2026-06-11'), DATE('2026-08-31')), + ('FNPRIMER', 'HUN', 1612.76, 310.39, 651.79, DATE('2026-07-31'), DATE('2026-06-10')), + ('FNPAINT1', 'LAX', 700.94, 0.00, 418.18, DATE('2026-04-27'), DATE('2026-08-17')), + ('FNPAINT1', 'VAL', 82.22, 145.93, 99.73, DATE('2026-08-31'), DATE('2026-04-17')), + ('FNPAINT1', 'HUN', 478.17, 0.00, 831.72, DATE('2026-02-18'), DATE('2026-08-13')), + ('FNDRYLUB', 'LAX', 1969.24, 412.58, 589.56, DATE('2026-01-16'), DATE('2026-06-19')), + ('FNDRYLUB', 'HUN', 1405.66, 666.36, 653.50, DATE('2026-03-12'), DATE('2026-07-08')), + ('FNNDTFPI', 'LAX', 1037.00, 509.40, 543.86, DATE('2026-02-27'), DATE('2026-06-23')), + ('FNNDTFPI', 'HUN', 828.02, 852.08, 701.97, DATE('2026-04-20'), DATE('2026-08-03')), + ('LBLNAME1', 'LAX', 2856.71, 1053.33, 861.41, DATE('2026-09-04'), DATE('2026-02-23')), + ('LBLNAME1', 'VAL', 2608.54, 0.00, 830.57, DATE('2026-09-01'), DATE('2026-03-30')), + ('LBLNAME1', 'HUN', 1206.54, 0.00, 630.68, DATE('2026-06-26'), DATE('2026-02-25')), + ('LBLPART1', 'LAX', 718.13, 395.98, 556.63, DATE('2026-03-30'), DATE('2026-08-14')), + ('LBLPART1', 'VAL', 155.98, 252.47, 138.15, DATE('2026-02-06'), DATE('2026-07-06')), + ('LBLPART1', 'HUN', 1198.10, 355.31, 715.36, DATE('2026-03-19'), DATE('2026-06-23')), + ('PKGESDBG', 'LAX', 1552.84, 0.00, 539.85, DATE('2026-05-27'), DATE('2026-07-01')), + ('PKGESDBG', 'VAL', 2022.91, 408.28, 800.29, DATE('2026-06-08'), DATE('2026-06-30')), + ('PKGESDBG', 'HUN', 36.83, 0.00, 256.07, DATE('2026-05-08'), DATE('2026-05-04')), + ('PKGCART1', 'LAX', 254.64, 59.52, 47.30, DATE('2026-03-06'), DATE('2026-04-09')), + ('PKGCART1', 'VAL', 288.56, 431.35, 232.58, DATE('2026-02-26'), DATE('2026-03-30')), + ('PKGCART1', 'HUN', 1170.87, 0.00, 493.75, DATE('2026-04-10'), DATE('2026-06-30')), + ('PKGDESIC', 'LAX', 78.94, 865.15, 477.33, DATE('2026-08-10'), DATE('2026-05-21')), + ('PKGDESIC', 'HUN', 805.89, 0.00, 607.06, DATE('2026-02-23'), DATE('2026-06-29')), + ('PKGFOAM1', 'LAX', 842.42, 1028.89, 706.44, DATE('2026-02-19'), DATE('2026-04-20')), + ('PKGFOAM1', 'HUN', 2681.25, 0.00, 801.22, DATE('2026-05-29'), DATE('2026-03-11')), + ('SACLSH16', 'LAX', 30.84, 126.99, 130.49, DATE('2026-07-20'), DATE('2026-06-01')), + ('SACLSH16', 'VAL', 228.84, 189.94, 186.51, DATE('2026-08-17'), DATE('2026-07-24')), + ('SACLSH24', 'LAX', 407.33, 213.83, 218.67, DATE('2026-06-12'), DATE('2026-07-08')), + ('SACLSH24', 'VAL', 209.20, 133.33, 96.86, DATE('2026-07-20'), DATE('2026-05-18')), + ('SACLSH32', 'LAX', 702.19, 289.68, 321.66, DATE('2026-06-25'), DATE('2026-08-26')), + ('SACLSH32', 'VAL', 519.50, 257.32, 190.14, DATE('2026-05-20'), DATE('2026-09-03')), + ('SACLSH24C', 'LAX', 113.18, 0.00, 322.11, DATE('2026-03-11'), DATE('2026-06-02')), + ('SACLSH24C', 'VAL', 763.89, 0.00, 274.64, DATE('2026-03-25'), DATE('2026-05-12')), + ('SACLSH32T', 'LAX', 666.32, 0.00, 253.67, DATE('2026-03-03'), DATE('2026-07-15')), + ('SACLSH32T', 'VAL', 22.60, 51.79, 52.80, DATE('2026-07-24'), DATE('2026-06-02')), + ('SATHBDY16', 'LAX', 182.13, 0.00, 316.16, DATE('2026-07-09'), DATE('2026-09-02')), + ('SATHBDY16', 'VAL', 37.29, 488.82, 231.93, DATE('2026-02-23'), DATE('2026-03-26')), + ('SATHBDY24', 'LAX', 141.17, 0.00, 52.74, DATE('2026-03-05'), DATE('2026-08-21')), + ('SATHBDY24', 'VAL', 5.43, 49.31, 53.67, DATE('2026-08-24'), DATE('2026-06-01')), + ('SATHBDY32', 'LAX', 108.43, 0.00, 40.02, DATE('2026-02-10'), DATE('2026-06-25')), + ('SATHBDY32', 'VAL', 156.73, 75.79, 53.04, DATE('2026-09-03'), DATE('2026-06-23')), + ('SATHRDNUT', 'LAX', 2518.91, 0.00, 344.69, DATE('2026-08-14'), DATE('2026-07-31')), + ('SATHRDNUT', 'VAL', 417.03, 357.23, 216.00, DATE('2026-02-23'), DATE('2026-03-26')), + ('SALATCH1', 'LAX', 165.11, 0.00, 68.80, DATE('2026-08-03'), DATE('2026-04-16')), + ('SALATCH1', 'VAL', 242.26, 119.78, 156.68, DATE('2026-02-05'), DATE('2026-02-25')), + ('SAVTLI01', 'LAX', 161.75, 63.77, 68.00, DATE('2026-07-27'), DATE('2026-06-15')), + ('SAVTLI01', 'VAL', 51.71, 74.54, 38.71, DATE('2026-01-19'), DATE('2026-05-20')), + ('SASEALK16', 'LAX', 1657.11, 92.59, 228.63, DATE('2026-05-19'), DATE('2026-07-30')), + ('SASEALK16', 'VAL', 270.33, 0.00, 147.87, DATE('2026-01-23'), DATE('2026-07-07')), + ('SASEALK24', 'LAX', 380.80, 130.46, 240.02, DATE('2026-02-05'), DATE('2026-04-02')), + ('SASEALK24', 'VAL', 440.87, 0.00, 325.74, DATE('2026-08-31'), DATE('2026-07-08')), + ('SASEALK32', 'LAX', 1097.04, 0.00, 330.82, DATE('2026-08-27'), DATE('2026-08-05')), + ('SASEALK32', 'VAL', 38.76, 0.00, 72.84, DATE('2026-05-07'), DATE('2026-06-29')), + ('SABODY200', 'LAX', 205.46, 0.00, 99.55, DATE('2026-07-21'), DATE('2026-07-10')), + ('SABODY200', 'VAL', 189.86, 0.00, 169.35, DATE('2026-08-17'), DATE('2026-05-29')), + ('SABODY600', 'LAX', 890.72, 0.00, 317.80, DATE('2026-04-10'), DATE('2026-05-29')), + ('SABODY600', 'VAL', 336.05, 0.00, 265.63, DATE('2026-08-19'), DATE('2026-03-04')), + ('SAPOPPET1', 'LAX', 83.79, 0.00, 312.08, DATE('2026-05-04'), DATE('2026-06-01')), + ('SAPOPPET1', 'VAL', 194.28, 0.00, 143.36, DATE('2026-01-29'), DATE('2026-08-24')), + ('SASLEEVE1', 'LAX', 72.43, 0.00, 272.45, DATE('2026-04-16'), DATE('2026-05-29')), + ('SASLEEVE1', 'VAL', 306.66, 0.00, 258.11, DATE('2026-04-07'), DATE('2026-07-23')), + ('SAHTRCORE', 'LAX', 197.51, 0.00, 172.57, DATE('2026-02-23'), DATE('2026-07-06')), + ('SAHTRCORE', 'VAL', 122.87, 163.40, 300.80, DATE('2026-05-21'), DATE('2026-05-29')), + ('SAHTRHARN', 'LAX', 16.94, 0.00, 27.82, DATE('2026-06-19'), DATE('2026-04-13')), + ('SAHTRHARN', 'VAL', 555.68, 96.88, 194.40, DATE('2026-08-03'), DATE('2026-06-12')), + ('SAISOTUB1', 'LAX', 50.21, 0.00, 25.45, DATE('2026-05-18'), DATE('2026-04-29')), + ('SAISOTUB1', 'VAL', 735.15, 313.03, 229.22, DATE('2026-01-19'), DATE('2026-04-03')); + +INSERT INTO INVENTORY (ITEM_ID, WH_CODE, QTY_ON_HAND, QTY_ON_ORDER, REORDER_POINT, LAST_RECEIPT_DATE, LAST_ISSUE_DATE) VALUES + ('SAISOTUB2', 'LAX', 297.48, 79.14, 189.34, DATE('2026-08-03'), DATE('2026-03-25')), + ('SAISOTUB2', 'VAL', 49.74, 118.14, 152.72, DATE('2026-07-02'), DATE('2026-03-23')), + ('SAISOEND1', 'LAX', 67.82, 0.00, 240.19, DATE('2026-04-01'), DATE('2026-06-29')), + ('SAISOEND1', 'VAL', 980.73, 733.60, 345.59, DATE('2026-03-19'), DATE('2026-08-17')), + ('SABANDAL6', 'LAX', 693.16, 359.35, 254.91, DATE('2026-04-23'), DATE('2026-03-31')), + ('SABANDAL6', 'VAL', 502.48, 0.00, 199.44, DATE('2026-05-18'), DATE('2026-07-09')), + ('SABANDCR8', 'LAX', 173.22, 0.00, 140.23, DATE('2026-03-03'), DATE('2026-06-05')), + ('SABANDCR8', 'VAL', 430.01, 404.00, 318.53, DATE('2026-03-06'), DATE('2026-04-17')), + ('SACUSHN06', 'LAX', 197.06, 0.00, 115.50, DATE('2026-07-13'), DATE('2026-03-16')), + ('SACUSHN06', 'VAL', 254.38, 198.59, 113.25, DATE('2026-01-12'), DATE('2026-07-09')), + ('SACUSHNW8', 'LAX', 102.58, 170.90, 305.79, DATE('2026-08-24'), DATE('2026-03-13')), + ('SACUSHNW8', 'VAL', 10.32, 0.00, 52.41, DATE('2026-06-12'), DATE('2026-03-25')), + ('SAWEARSH1', 'LAX', 20.16, 158.40, 73.06, DATE('2026-05-06'), DATE('2026-07-24')), + ('SAWEARSH1', 'VAL', 153.48, 0.00, 126.47, DATE('2026-04-03'), DATE('2026-08-14')), + ('SAHOSEAS8', 'LAX', 115.08, 355.62, 186.16, DATE('2026-07-21'), DATE('2026-03-24')), + ('SAHOSEAS8', 'VAL', 240.57, 153.50, 212.69, DATE('2026-08-21'), DATE('2026-07-24')), + ('W902-16', 'LAX', 178.82, 0.00, 65.35, DATE('2026-08-12'), DATE('2026-03-03')), + ('W902-16', 'MIA', 230.49, 116.45, 97.99, DATE('2026-09-04'), DATE('2026-05-01')), + ('W902-16', 'HUN', 253.65, 0.00, 126.10, DATE('2026-07-22'), DATE('2026-07-07')), + ('W902-24', 'LAX', 240.36, 0.00, 124.49, DATE('2026-02-16'), DATE('2026-06-03')), + ('W902-24', 'MIA', 131.73, 89.42, 110.82, DATE('2026-06-25'), DATE('2026-04-24')), + ('W902-32', 'LAX', 121.65, 84.67, 51.17, DATE('2026-08-17'), DATE('2026-06-19')), + ('W902-32', 'MIA', 168.68, 93.67, 109.28, DATE('2026-06-16'), DATE('2026-06-26')), + ('F63052-24', 'LAX', 422.13, 0.00, 140.99, DATE('2026-02-24'), DATE('2026-06-26')), + ('F63052-24', 'MIA', 119.69, 69.48, 40.17, DATE('2026-07-29'), DATE('2026-08-28')), + ('F63052-32', 'LAX', 347.46, 223.75, 132.82, DATE('2026-05-12'), DATE('2026-03-20')), + ('F63052-32', 'MIA', 322.02, 0.00, 110.37, DATE('2026-04-13'), DATE('2026-03-27')), + ('F63052-32', 'HUN', 294.79, 115.48, 88.02, DATE('2026-04-24'), DATE('2026-07-10')), + ('W922N-16', 'LAX', 180.98, 0.00, 90.29, DATE('2026-09-03'), DATE('2026-07-22')), + ('W922N-16', 'MIA', 193.68, 226.85, 119.78, DATE('2026-04-13'), DATE('2026-04-03')), + ('AW2010-16', 'LAX', 132.08, 75.57, 44.97, DATE('2026-01-28'), DATE('2026-07-17')), + ('AW2010-16', 'MIA', 341.80, 0.00, 104.75, DATE('2026-03-09'), DATE('2026-03-16')), + ('AW2010-16', 'HUN', 75.48, 59.70, 115.95, DATE('2026-03-16'), DATE('2026-04-29')), + ('AW2010-24', 'LAX', 119.28, 28.73, 65.08, DATE('2026-06-22'), DATE('2026-05-04')), + ('AW2010-24', 'MIA', 305.84, 174.47, 130.78, DATE('2026-06-18'), DATE('2026-06-12')), + ('AW2010-32', 'LAX', 190.19, 0.00, 80.04, DATE('2026-03-09'), DATE('2026-07-01')), + ('AW2010-32', 'MIA', 121.57, 0.00, 146.92, DATE('2026-06-26'), DATE('2026-07-29')), + ('AW2010-32', 'HUN', 203.75, 157.27, 98.16, DATE('2026-06-26'), DATE('2026-07-16')), + ('AW2091-24', 'LAX', 40.20, 45.97, 71.72, DATE('2026-05-29'), DATE('2026-04-20')), + ('AW2091-24', 'MIA', 158.49, 93.60, 78.44, DATE('2026-03-03'), DATE('2026-07-10')), + ('AW2100-24', 'LAX', 199.71, 101.21, 72.01, DATE('2026-08-18'), DATE('2026-09-07')), + ('AW2100-24', 'MIA', 7.00, 11.79, 9.79, DATE('2026-07-16'), DATE('2026-08-17')), + ('AW2100-32', 'LAX', 220.47, 78.27, 107.56, DATE('2026-06-25'), DATE('2026-07-09')), + ('AW2100-32', 'MIA', 35.12, 53.10, 27.83, DATE('2026-02-13'), DATE('2026-08-24')), + ('W991-16', 'LAX', 41.12, 0.00, 60.35, DATE('2026-02-03'), DATE('2026-03-03')), + ('W991-16', 'MIA', 123.88, 183.70, 159.47, DATE('2026-02-09'), DATE('2026-05-18')), + ('W991-24', 'LAX', 34.71, 0.00, 57.55, DATE('2026-03-26'), DATE('2026-08-10')), + ('W991-24', 'MIA', 205.17, 0.00, 81.03, DATE('2026-05-26'), DATE('2026-08-31')), + ('W991N-32', 'LAX', 158.97, 0.00, 108.47, DATE('2026-03-04'), DATE('2026-08-27')), + ('W991N-32', 'MIA', 92.26, 0.00, 142.19, DATE('2026-03-10'), DATE('2026-08-24')), + ('W991F-24', 'LAX', 141.29, 0.00, 103.53, DATE('2026-02-20'), DATE('2026-05-12')), + ('W991F-24', 'MIA', 238.05, 0.00, 91.11, DATE('2026-03-26'), DATE('2026-07-28')), + ('W991F-24', 'HUN', 23.08, 98.89, 123.59, DATE('2026-08-17'), DATE('2026-07-30')), + ('G620-32', 'LAX', 350.22, 0.00, 159.10, DATE('2026-04-09'), DATE('2026-03-12')), + ('G620-32', 'MIA', 5.52, 125.48, 68.23, DATE('2026-04-01'), DATE('2026-05-29')), + ('AW971-16', 'LAX', 242.85, 273.65, 144.74, DATE('2026-06-12'), DATE('2026-06-04')), + ('AW971-16', 'MIA', 406.95, 0.00, 159.17, DATE('2026-04-27'), DATE('2026-05-13')), + ('AW971-16', 'HUN', 176.60, 208.93, 139.38, DATE('2026-08-07'), DATE('2026-05-05')), + ('AW971-24', 'LAX', 89.51, 0.00, 15.00, DATE('2026-03-04'), DATE('2026-04-09')), + ('AW971-24', 'MIA', 34.70, 11.57, 21.17, DATE('2026-05-25'), DATE('2026-06-22')), + ('AW971-24', 'HUN', 18.71, 7.59, 11.17, DATE('2026-09-03'), DATE('2026-04-02')), + ('W700-32', 'LAX', 72.56, 77.93, 59.56, DATE('2026-05-25'), DATE('2026-03-20')), + ('W700-32', 'MIA', 69.72, 136.59, 121.95, DATE('2026-05-18'), DATE('2026-02-20')), + ('W700-32', 'HUN', 5.37, 37.46, 45.48, DATE('2026-03-17'), DATE('2026-03-23')), + ('C3600-16', 'LAX', 306.92, 83.91, 95.46, DATE('2026-01-29'), DATE('2026-06-11')), + ('C3600-16', 'MIA', 9.36, 123.43, 79.74, DATE('2026-08-14'), DATE('2026-03-04')), + ('C3600-16', 'HUN', 225.13, 68.18, 78.22, DATE('2026-01-23'), DATE('2026-03-31')), + ('C6300-24', 'LAX', 103.96, 0.00, 53.76, DATE('2026-02-04'), DATE('2026-04-20')), + ('C6300-24', 'MIA', 21.57, 0.00, 17.96, DATE('2026-01-26'), DATE('2026-03-02')), + ('AW979-24', 'LAX', 246.63, 0.00, 122.24, DATE('2026-05-18'), DATE('2026-08-17')), + ('AW979-24', 'MIA', 1.17, 0.00, 97.95, DATE('2026-04-06'), DATE('2026-04-10')), + ('C8300-32', 'LAX', 188.76, 0.00, 102.53, DATE('2026-04-29'), DATE('2026-07-06')), + ('C8300-32', 'MIA', 228.66, 101.95, 73.92, DATE('2026-04-20'), DATE('2026-05-26')), + ('QD200-08', 'LAX', 90.28, 14.73, 35.28, DATE('2026-02-20'), DATE('2026-02-23')), + ('QD200-08', 'MIA', 62.82, 213.82, 134.72, DATE('2026-04-06'), DATE('2026-03-25')), + ('QD200-08', 'HUN', 40.50, 18.00, 15.28, DATE('2026-01-23'), DATE('2026-06-05')), + ('QD200-16', 'LAX', 123.01, 0.00, 157.23, DATE('2026-04-29'), DATE('2026-05-13')), + ('QD200-16', 'MIA', 0.69, 20.93, 47.47, DATE('2026-08-13'), DATE('2026-08-31')), + ('QD200-04', 'LAX', 13.70, 56.26, 124.33, DATE('2026-02-16'), DATE('2026-06-03')), + ('QD200-04', 'MIA', 6.33, 0.00, 58.21, DATE('2026-02-03'), DATE('2026-04-15')), + ('QD6000-12', 'LAX', 80.19, 0.00, 49.24, DATE('2026-03-12'), DATE('2026-06-25')), + ('QD6000-12', 'MIA', 799.53, 84.60, 107.43, DATE('2026-05-05'), DATE('2026-05-13')), + ('P9100-08', 'LAX', 19.67, 0.00, 111.51, DATE('2026-06-12'), DATE('2026-03-06')), + ('P9100-08', 'MIA', 517.70, 0.00, 152.75, DATE('2026-05-25'), DATE('2026-04-14')), + ('P9100-08', 'HUN', 427.69, 230.83, 152.09, DATE('2026-02-12'), DATE('2026-03-17')), + ('P9400-12', 'LAX', 35.82, 46.92, 53.77, DATE('2026-02-27'), DATE('2026-03-19')), + ('P9400-12', 'MIA', 47.54, 19.95, 14.10, DATE('2026-04-24'), DATE('2026-09-03')), + ('P9400-12', 'HUN', 50.34, 0.00, 24.04, DATE('2026-08-21'), DATE('2026-04-13')), + ('P9600-16', 'LAX', 40.95, 0.00, 27.48, DATE('2026-07-10'), DATE('2026-08-07')), + ('P9600-16', 'MIA', 186.31, 0.00, 155.53, DATE('2026-03-31'), DATE('2026-03-03')), + ('P9600-16', 'HUN', 364.43, 0.00, 117.81, DATE('2026-01-14'), DATE('2026-06-02')), + ('PVCHK-08', 'LAX', 65.71, 65.24, 46.12, DATE('2026-07-31'), DATE('2026-08-04')), + ('PVCHK-08', 'MIA', 190.74, 37.28, 56.86, DATE('2026-03-12'), DATE('2026-06-24')), + ('PVFUSE-12', 'LAX', 47.27, 0.00, 40.74, DATE('2026-06-19'), DATE('2026-08-26')), + ('PVFUSE-12', 'MIA', 230.76, 104.36, 84.16, DATE('2026-08-07'), DATE('2026-06-26')), + ('PVFUSE-12', 'HUN', 215.10, 160.05, 76.39, DATE('2026-03-19'), DATE('2026-04-06')), + ('FRANG-12', 'LAX', 159.79, 210.63, 102.72, DATE('2026-03-19'), DATE('2026-06-01')), + ('FRANG-12', 'MIA', 683.27, 0.00, 159.01, DATE('2026-05-28'), DATE('2026-07-16')), + ('HOSE-04S', 'LAX', 28.30, 9.47, 12.84, DATE('2026-08-04'), DATE('2026-04-14')), + ('HOSE-04S', 'MIA', 55.70, 62.70, 39.63, DATE('2026-07-16'), DATE('2026-07-13')); + +INSERT INTO INVENTORY (ITEM_ID, WH_CODE, QTY_ON_HAND, QTY_ON_ORDER, REORDER_POINT, LAST_RECEIPT_DATE, LAST_ISSUE_DATE) VALUES + ('HOSE-04S', 'HUN', 60.90, 76.28, 153.99, DATE('2026-02-03'), DATE('2026-04-10')), + ('HOSE-08L', 'LAX', 56.46, 0.00, 121.66, DATE('2026-07-17'), DATE('2026-08-17')), + ('HOSE-08L', 'MIA', 111.32, 68.93, 76.98, DATE('2026-08-20'), DATE('2026-06-03')), + ('ISOF-1000', 'LAX', 408.03, 47.96, 84.15, DATE('2026-03-16'), DATE('2026-07-10')), + ('ISOF-1000', 'MIA', 157.80, 252.27, 130.17, DATE('2026-07-17'), DATE('2026-07-17')), + ('ISOF-2000', 'LAX', 168.79, 53.96, 81.94, DATE('2026-03-16'), DATE('2026-03-19')), + ('ISOF-2000', 'MIA', 210.21, 78.66, 101.38, DATE('2026-02-03'), DATE('2026-06-12')), + ('ISOH-0500', 'LAX', 400.20, 0.00, 130.71, DATE('2026-06-17'), DATE('2026-05-14')), + ('ISOH-0500', 'MIA', 146.79, 124.39, 68.36, DATE('2026-01-15'), DATE('2026-04-24')), + ('HTRRB-024', 'LAX', 557.52, 0.00, 107.43, DATE('2026-03-20'), DATE('2026-06-30')), + ('HTRRB-024', 'MIA', 57.38, 34.14, 23.83, DATE('2026-03-12'), DATE('2026-07-17')), + ('HTRRB-024', 'HUN', 37.30, 0.00, 20.28, DATE('2026-04-30'), DATE('2026-07-06')), + ('HTRRB-012', 'LAX', 2.26, 0.00, 33.02, DATE('2026-07-30'), DATE('2026-03-09')), + ('HTRRB-012', 'MIA', 54.24, 0.00, 137.61, DATE('2026-05-26'), DATE('2026-07-13')), + ('HTRBL-112', 'LAX', 109.02, 22.48, 48.68, DATE('2026-03-20'), DATE('2026-04-22')), + ('HTRBL-112', 'MIA', 266.73, 166.91, 124.92, DATE('2026-03-09'), DATE('2026-03-06')), + ('HTRGK-HG1', 'LAX', 74.32, 0.00, 125.63, DATE('2026-06-08'), DATE('2026-03-13')), + ('HTRGK-HG1', 'MIA', 6.92, 134.20, 65.84, DATE('2026-04-20'), DATE('2026-07-17')), + ('HTRGK-HG1', 'HUN', 121.56, 84.73, 46.27, DATE('2026-02-26'), DATE('2026-03-23')), + ('HTRCT-22W', 'LAX', 292.33, 0.00, 134.05, DATE('2026-07-09'), DATE('2026-07-13')), + ('HTRCT-22W', 'MIA', 207.31, 0.00, 78.70, DATE('2026-06-08'), DATE('2026-05-18')), + ('HTRCF-201', 'LAX', 55.65, 0.00, 25.86, DATE('2026-03-31'), DATE('2026-07-21')), + ('HTRCF-201', 'MIA', 182.86, 0.00, 108.66, DATE('2026-07-01'), DATE('2026-08-28')), + ('HTRHS-06', 'LAX', 44.27, 0.00, 90.02, DATE('2026-06-12'), DATE('2026-03-16')), + ('HTRHS-06', 'MIA', 65.18, 133.36, 153.15, DATE('2026-02-06'), DATE('2026-07-31')), + ('HTRHS-06', 'HUN', 60.44, 0.00, 8.43, DATE('2026-06-09'), DATE('2026-07-27')), + ('CLPSTD-06', 'LAX', 98.92, 31.58, 53.08, DATE('2026-07-28'), DATE('2026-08-14')), + ('CLPSTD-06', 'MIA', 277.77, 276.26, 145.36, DATE('2026-03-20'), DATE('2026-05-18')), + ('CLPSTD-04', 'LAX', 7.82, 36.45, 79.48, DATE('2026-02-27'), DATE('2026-07-01')), + ('CLPSTD-04', 'MIA', 13.65, 103.91, 47.71, DATE('2026-04-16'), DATE('2026-06-05')), + ('CLPTL-08', 'LAX', 59.60, 0.00, 93.27, DATE('2026-07-10'), DATE('2026-04-22')), + ('CLPTL-08', 'MIA', 231.79, 212.32, 129.10, DATE('2026-04-27'), DATE('2026-03-02')), + ('CLPSL-08', 'LAX', 453.21, 262.89, 148.52, DATE('2026-04-17'), DATE('2026-03-26')), + ('CLPSL-08', 'MIA', 31.18, 21.56, 12.74, DATE('2026-06-26'), DATE('2026-04-21')), + ('CLPSL-08', 'HUN', 0.42, 0.00, 24.49, DATE('2026-08-12'), DATE('2026-05-12')), + ('CLPBLK-12', 'LAX', 366.65, 166.58, 131.80, DATE('2026-08-10'), DATE('2026-07-22')), + ('CLPBLK-12', 'MIA', 155.58, 0.00, 97.28, DATE('2026-03-18'), DATE('2026-05-21')), + ('CLPWS-10', 'LAX', 179.66, 0.00, 111.45, DATE('2026-05-01'), DATE('2026-07-20')), + ('CLPWS-10', 'MIA', 112.94, 39.83, 51.89, DATE('2026-04-22'), DATE('2026-07-20')), + ('CLPWS-10', 'HUN', 835.39, 0.00, 131.83, DATE('2026-05-05'), DATE('2026-03-16')), + ('CLPSPC-06', 'LAX', 990.87, 247.55, 134.62, DATE('2026-05-11'), DATE('2026-09-03')), + ('CLPSPC-06', 'MIA', 165.40, 48.56, 67.21, DATE('2026-01-19'), DATE('2026-07-17')), + ('GRMAC-04', 'LAX', 128.43, 0.00, 84.37, DATE('2026-04-13'), DATE('2026-08-14')), + ('GRMAC-04', 'MIA', 196.78, 0.00, 125.57, DATE('2026-05-15'), DATE('2026-07-06')), + ('WMFFN-100', 'ELP', 123.45, 60.17, 66.38, DATE('2026-08-21'), DATE('2026-07-16')), + ('WMFFN-100', 'LAX', 20.54, 0.00, 98.30, DATE('2026-01-19'), DATE('2026-06-04')), + ('WMFFN-100', 'MIA', 170.01, 104.03, 117.46, DATE('2026-08-07'), DATE('2026-06-26')), + ('WMFFR-100', 'ELP', 240.29, 68.26, 107.47, DATE('2026-04-20'), DATE('2026-06-29')), + ('WMFFR-100', 'LAX', 32.58, 0.00, 18.34, DATE('2026-05-19'), DATE('2026-06-19')), + ('WMFFR-100', 'MIA', 232.87, 102.56, 100.03, DATE('2026-04-30'), DATE('2026-03-25')), + ('WMDEF-050', 'ELP', 183.54, 87.18, 57.10, DATE('2026-09-01'), DATE('2026-08-13')), + ('WMDEF-050', 'LAX', 1006.42, 89.06, 159.84, DATE('2026-03-30'), DATE('2026-06-19')), + ('WMDEF-050', 'MIA', 21.71, 0.00, 127.41, DATE('2026-07-31'), DATE('2026-03-09')), + ('WMLQD-075', 'ELP', 497.03, 205.74, 153.34, DATE('2026-04-03'), DATE('2026-02-25')), + ('WMLQD-075', 'LAX', 291.18, 35.09, 39.21, DATE('2026-05-26'), DATE('2026-06-24')), + ('WMLQD-075', 'MIA', 134.56, 26.08, 39.64, DATE('2026-07-08'), DATE('2026-06-26')); + diff --git a/awdemo/sql/data/80_mfg_orders.sql b/awdemo/sql/data/80_mfg_orders.sql new file mode 100644 index 00000000..f0a9b0cc --- /dev/null +++ b/awdemo/sql/data/80_mfg_orders.sql @@ -0,0 +1,2160 @@ +-- MANUFACTURING_ORDERS - shop orders +-- Generated by awdemo/tools/gen-awdemo-data.py - do not edit by hand. +-- Dates are anchored to as-of 2026-09-08; regenerate before a demo. + +INSERT INTO MANUFACTURING_ORDERS (ORDER_ID, ITEM_ID, ORDER_DATE, EXPECTED_COMPLETION_DATE, ACTUAL_COMPLETION_DATE, QUANTITY_ORDERED, QUANTITY_SCRAPPED, STATUS, SHIFT_CODE, OPERATOR_ID, NOTES) VALUES + ('MO100001', 'P9600-16', DATE('2026-09-08'), DATE('2026-10-02'), NULL, 200.00, 3.92, 'R', '3', 'OP1156', 'Qualification build supporting AS7510 lightning test article.'), + ('MO100002', 'SALATCH1', DATE('2026-09-08'), DATE('2026-09-29'), NULL, 400.00, 0.00, 'R', '2', 'OP1490', 'FAI required per AS9102 on this revision before shipment.'), + ('MO100003', 'QD200-16', DATE('2026-09-08'), DATE('2026-10-05'), NULL, 200.00, 5.54, 'R', '2', 'OP1402', 'Spares order for MIA depot replenishment.'), + ('MO100004', 'W922N-16', DATE('2026-09-08'), DATE('2026-10-05'), NULL, 80.00, 0.00, 'R', '1', 'OP1578', 'Held for engineering disposition on tolerance deviation request.'), + ('MO100005', 'G620-32', DATE('2026-09-08'), DATE('2026-10-05'), NULL, 72.00, 0.32, 'R', '3', 'OP1490', 'Dual-lot build; segregate serial ranges at pack out.'), + ('MO100006', 'CLPTL-08', DATE('2026-09-08'), DATE('2026-09-15'), NULL, 36.00, 0.70, 'R', '1', 'OP1271', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO100007', 'CLPSPC-06', DATE('2026-09-08'), DATE('2026-09-14'), NULL, 60.00, 0.00, 'R', '1', 'OP1942', 'Dual-lot build; segregate serial ranges at pack out.'), + ('MO100008', 'SASEALK16', DATE('2026-09-08'), DATE('2026-09-24'), NULL, 240.00, 0.00, 'R', '3', 'OP1364', 'Rev B effectivity - verify seal kit callout before kitting.'), + ('MO100009', 'SACLSH16', DATE('2026-09-07'), DATE('2026-10-08'), NULL, 720.00, 0.00, 'R', '3', 'OP1402', 'Customer source inspection scheduled at final acceptance.'), + ('MO100010', 'SABANDCR8', DATE('2026-09-07'), DATE('2026-09-30'), NULL, 75.00, 0.00, 'R', '3', 'OP1578', 'Mining channel order - ELP stock replenishment.'), + ('MO100011', 'SASEALK16', DATE('2026-09-07'), DATE('2026-09-18'), NULL, 108.00, 0.00, 'R', '1', 'OP1611', 'Standard routing, no deviations. Release to LAX cell 4.'), + ('MO100012', 'SABODY600', DATE('2026-09-07'), DATE('2026-09-23'), NULL, 960.00, 0.00, 'R', '1', 'OP1820', 'Customer source inspection scheduled at final acceptance.'), + ('MO100013', 'SAHTRCORE', DATE('2026-09-07'), DATE('2026-10-07'), NULL, 108.00, 0.00, 'R', '3', 'OP1776', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO100014', 'AW979-24', DATE('2026-09-07'), DATE('2026-09-21'), NULL, 120.00, 0.00, 'R', '1', 'OP1907', 'Standard routing, no deviations. Release to LAX cell 4.'), + ('MO100015', 'SAWEARSH1', DATE('2026-09-07'), DATE('2026-09-30'), NULL, 80.00, 1.93, 'R', '3', 'OP1238', 'Rev B effectivity - verify seal kit callout before kitting.'), + ('MO100016', 'W902-32', DATE('2026-09-07'), DATE('2026-09-28'), NULL, 144.00, 0.00, 'R', '1', 'OP1319', 'Customer source inspection scheduled at final acceptance.'), + ('MO100017', 'AW979-24', DATE('2026-09-04'), DATE('2026-09-29'), NULL, 120.00, 1.52, 'R', '1', 'OP1942', 'Mining channel order - ELP stock replenishment.'), + ('MO100018', 'AW2010-16', DATE('2026-09-04'), DATE('2026-10-07'), NULL, 24.00, 0.39, 'R', '2', 'OP1113', 'Spares order for MIA depot replenishment.'), + ('MO100019', 'W902-24', DATE('2026-09-04'), DATE('2026-09-28'), NULL, 250.00, 0.00, 'R', '1', 'OP1448', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO100020', 'CLPSTD-06', DATE('2026-09-04'), DATE('2026-10-07'), NULL, 48.00, 0.00, 'R', '2', 'OP1087', 'Standard routing, no deviations. Release to LAX cell 4.'), + ('MO100021', 'P9100-08', DATE('2026-09-04'), DATE('2026-09-30'), NULL, 300.00, 1.79, 'R', '3', 'OP1654', 'Anodize line at capacity - routed to outside processor.'), + ('MO100022', 'W922N-16', DATE('2026-09-04'), DATE('2026-09-16'), NULL, 80.00, 0.79, 'R', '3', 'OP1988', 'Long-lead titanium bar released early against forecast.'), + ('MO100023', 'C6300-24', DATE('2026-09-04'), DATE('2026-09-25'), NULL, 48.00, 0.00, 'R', '1', 'OP1654', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO100024', 'W700-32', DATE('2026-09-04'), DATE('2026-10-02'), NULL, 150.00, 0.00, 'R', '1', 'OP1733', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO100025', 'HOSE-08L', DATE('2026-09-03'), DATE('2026-09-14'), NULL, 48.00, 0.00, 'R', '3', 'OP1988', 'Held for engineering disposition on tolerance deviation request.'), + ('MO100026', 'AW2010-24', DATE('2026-09-03'), DATE('2026-09-28'), NULL, 24.00, 0.51, 'R', '2', 'OP1113', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO100027', 'G620-32', DATE('2026-09-03'), DATE('2026-09-30'), NULL, 200.00, 0.00, 'R', '2', 'OP1319', 'Anodize line at capacity - routed to outside processor.'), + ('MO100028', 'AW971-16', DATE('2026-09-03'), DATE('2026-09-28'), NULL, 100.00, 0.00, 'R', '1', 'OP1087', 'FAI required per AS9102 on this revision before shipment.'), + ('MO100029', 'SATHBDY24', DATE('2026-09-03'), DATE('2026-09-09'), NULL, 160.00, 0.78, 'R', '3', 'OP1271', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO100030', 'SAISOTUB1', DATE('2026-09-03'), DATE('2026-09-21'), NULL, 144.00, 0.00, 'R', '2', 'OP1536', 'Standard routing, no deviations. Release to LAX cell 4.'), + ('MO100031', 'SACUSHN06', DATE('2026-09-03'), DATE('2026-09-24'), NULL, 500.00, 7.62, 'R', '2', 'OP1271', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO100032', 'W991F-24', DATE('2026-09-02'), DATE('2026-09-07'), NULL, 150.00, 0.00, 'R', '2', 'OP1776', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO100033', 'WMFFR-100', DATE('2026-09-02'), DATE('2026-09-22'), NULL, 72.00, 0.67, 'R', '3', 'OP1698', 'Customer source inspection scheduled at final acceptance.'), + ('MO100034', 'SATHRDNUT', DATE('2026-09-02'), DATE('2026-09-30'), NULL, 384.00, 0.00, 'R', '1', 'OP1156', 'Customer source inspection scheduled at final acceptance.'), + ('MO100035', 'WMDEF-050', DATE('2026-09-02'), DATE('2026-09-24'), NULL, 25.00, 0.00, 'R', '3', 'OP1042', 'Dual-lot build; segregate serial ranges at pack out.'), + ('MO100036', 'CLPSPC-06', DATE('2026-09-02'), DATE('2026-09-10'), NULL, 240.00, 0.00, 'R', '1', 'OP1204', 'Qualification build supporting AS7510 lightning test article.'), + ('MO100037', 'AW2091-24', DATE('2026-09-02'), DATE('2026-09-23'), NULL, 36.00, 0.00, 'R', '1', 'OP1042', 'Standard routing, no deviations. Release to LAX cell 4.'), + ('MO100038', 'AW971-16', DATE('2026-09-02'), DATE('2026-09-25'), NULL, 150.00, 0.00, 'R', '2', 'OP1042', 'Customer source inspection scheduled at final acceptance.'), + ('MO100039', 'W991-24', DATE('2026-09-01'), DATE('2026-09-10'), NULL, 200.00, 0.00, 'R', '2', 'OP1733', 'Qualification build supporting AS7510 lightning test article.'), + ('MO100040', 'SACLSH24', DATE('2026-09-01'), DATE('2026-10-02'), NULL, 900.00, 0.00, 'R', '3', 'OP1113', 'Spares order for MIA depot replenishment.'), + ('MO100041', 'AW2100-24', DATE('2026-09-01'), DATE('2026-09-04'), NULL, 200.00, 0.00, 'R', '1', 'OP1042', 'Held for engineering disposition on tolerance deviation request.'), + ('MO100042', 'W902-32', DATE('2026-09-01'), DATE('2026-09-17'), NULL, 300.00, 0.00, 'R', '3', 'OP1942', 'Rev B effectivity - verify seal kit callout before kitting.'), + ('MO100043', 'SACLSH24', DATE('2026-09-01'), DATE('2026-09-04'), DATE('2026-09-08'), 432.00, 5.47, 'C', '2', 'OP1907', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100044', 'W991N-32', DATE('2026-09-01'), DATE('2026-10-05'), NULL, 96.00, 0.66, 'R', '2', 'OP1536', 'Qualification build supporting AS7510 lightning test article.'), + ('MO100045', 'AW2100-32', DATE('2026-09-01'), DATE('2026-10-02'), NULL, 80.00, 1.74, 'R', '1', 'OP1536', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO100046', 'AW2010-32', DATE('2026-09-01'), DATE('2026-09-22'), NULL, 25.00, 0.00, 'R', '1', 'OP1733', 'Traveller reprinted after routing update; use rev 4 only.'), + ('MO100047', 'P9400-12', DATE('2026-08-31'), DATE('2026-09-10'), NULL, 25.00, 0.00, 'R', '2', 'OP1204', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO100048', 'G620-32', DATE('2026-08-31'), DATE('2026-09-15'), NULL, 12.00, 0.00, 'R', '1', 'OP1402', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO100049', 'W902-24', DATE('2026-08-31'), DATE('2026-09-09'), NULL, 150.00, 1.12, 'R', '3', 'OP1490', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO100050', 'FRANG-12', DATE('2026-08-31'), DATE('2026-09-29'), NULL, 60.00, 0.00, 'R', '3', 'OP1776', 'Rev B effectivity - verify seal kit callout before kitting.'), + ('MO100051', 'SACLSH16', DATE('2026-08-31'), DATE('2026-09-17'), NULL, 40.00, 0.00, 'R', '1', 'OP1042', 'Traveller reprinted after routing update; use rev 4 only.'), + ('MO100052', 'HOSE-08L', DATE('2026-08-31'), DATE('2026-09-22'), NULL, 60.00, 1.07, 'R', '1', 'OP1733', 'Standard routing, no deviations. Release to LAX cell 4.'), + ('MO100053', 'SAWEARSH1', DATE('2026-08-31'), DATE('2026-09-24'), NULL, 240.00, 0.00, 'R', '2', 'OP1820', 'Customer source inspection scheduled at final acceptance.'), + ('MO100054', 'P9100-08', DATE('2026-08-28'), DATE('2026-09-15'), NULL, 250.00, 4.64, 'R', '2', 'OP1578', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO100055', 'CLPWS-10', DATE('2026-08-28'), DATE('2026-09-07'), DATE('2026-09-08'), 120.00, 0.00, 'C', '3', 'OP1536', 'Closed complete. Shipped ahead of need date.'), + ('MO100056', 'CLPSPC-06', DATE('2026-08-28'), DATE('2026-09-07'), DATE('2026-09-04'), 25.00, 0.00, 'C', '1', 'OP1156', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100057', 'SAISOEND1', DATE('2026-08-28'), DATE('2026-09-24'), NULL, 480.00, 0.00, 'R', '2', 'OP1733', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO100058', 'SACLSH32', DATE('2026-08-28'), DATE('2026-09-16'), NULL, 900.00, 6.43, 'R', '1', 'OP1402', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO100059', 'P9600-16', DATE('2026-08-28'), DATE('2026-09-23'), NULL, 72.00, 0.00, 'R', '3', 'OP1156', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO100060', 'P9100-08', DATE('2026-08-28'), DATE('2026-09-17'), NULL, 300.00, 5.36, 'R', '2', 'OP1490', 'FAI required per AS9102 on this revision before shipment.'), + ('MO100061', 'AW2010-32', DATE('2026-08-28'), DATE('2026-09-14'), NULL, 120.00, 0.00, 'R', '1', 'OP1611', 'Dual-lot build; segregate serial ranges at pack out.'), + ('MO100062', 'SABODY600', DATE('2026-08-27'), DATE('2026-09-22'), NULL, 48.00, 0.96, 'R', '1', 'OP1733', 'Anodize line at capacity - routed to outside processor.'), + ('MO100063', 'QD200-08', DATE('2026-08-27'), DATE('2026-09-15'), NULL, 20.00, 0.37, 'R', '1', 'OP1733', 'Long-lead titanium bar released early against forecast.'), + ('MO100064', 'W991N-32', DATE('2026-08-27'), DATE('2026-09-02'), DATE('2026-09-03'), 48.00, 1.60, 'C', '2', 'OP1271', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100065', 'AW979-24', DATE('2026-08-27'), DATE('2026-09-11'), NULL, 240.00, 0.00, 'R', '1', 'OP1654', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO100066', 'SACLSH24', DATE('2026-08-27'), DATE('2026-09-29'), NULL, 480.00, 0.00, 'R', '1', 'OP1578', 'Qualification build supporting AS7510 lightning test article.'), + ('MO100067', 'P9600-16', DATE('2026-08-27'), DATE('2026-09-11'), NULL, 100.00, 0.00, 'R', '2', 'OP1238', 'FAI required per AS9102 on this revision before shipment.'), + ('MO100068', 'SAVTLI01', DATE('2026-08-27'), DATE('2026-09-25'), NULL, 108.00, 0.00, 'R', '3', 'OP1654', 'Mining channel order - ELP stock replenishment.'), + ('MO100069', 'W902-24', DATE('2026-08-27'), DATE('2026-09-22'), NULL, 250.00, 1.24, 'R', '2', 'OP1698', 'FAI required per AS9102 on this revision before shipment.'), + ('MO100070', 'SASEALK24', DATE('2026-08-26'), DATE('2026-09-21'), NULL, 400.00, 0.00, 'R', '1', 'OP1042', 'Held for engineering disposition on tolerance deviation request.'), + ('MO100071', 'AW2010-16', DATE('2026-08-26'), DATE('2026-09-11'), NULL, 25.00, 0.00, 'R', '3', 'OP1271', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO100072', 'SATHBDY24', DATE('2026-08-26'), DATE('2026-09-28'), NULL, 100.00, 0.00, 'R', '2', 'OP1942', 'Rev B effectivity - verify seal kit callout before kitting.'), + ('MO100073', 'W991-16', DATE('2026-08-26'), DATE('2026-09-21'), NULL, 96.00, 0.00, 'R', '2', 'OP1448', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO100074', 'AW979-24', DATE('2026-08-26'), DATE('2026-09-29'), NULL, 120.00, 0.00, 'R', '3', 'OP1733', 'Spares order for MIA depot replenishment.'), + ('MO100075', 'SASEALK32', DATE('2026-08-26'), DATE('2026-09-01'), DATE('2026-09-02'), 576.00, 6.88, 'C', '1', 'OP1865', 'Closed complete. Shipped ahead of need date.'), + ('MO100076', 'GRMAC-04', DATE('2026-08-26'), DATE('2026-09-29'), NULL, 100.00, 0.00, 'R', '3', 'OP1578', 'Rev B effectivity - verify seal kit callout before kitting.'), + ('MO100077', 'SATHBDY16', DATE('2026-08-26'), DATE('2026-09-18'), NULL, 600.00, 0.00, 'R', '3', 'OP1490', 'Anodize line at capacity - routed to outside processor.'), + ('MO100078', 'AW2010-24', DATE('2026-08-25'), DATE('2026-09-03'), DATE('2026-08-31'), 25.00, 0.00, 'C', '3', 'OP1113', 'Closed short - balance cancelled at customer request.'), + ('MO100079', 'P9600-16', DATE('2026-08-25'), DATE('2026-09-28'), NULL, 96.00, 0.00, 'R', '1', 'OP1536', 'Traveller reprinted after routing update; use rev 4 only.'), + ('MO100080', 'AW2100-24', DATE('2026-08-25'), DATE('2026-09-15'), NULL, 60.00, 0.63, 'R', '3', 'OP1820', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO100081', 'W902-16', DATE('2026-08-25'), DATE('2026-08-28'), DATE('2026-09-01'), 80.00, 1.73, 'C', '1', 'OP1238', 'Closed complete. FAI package submitted with shipment.'), + ('MO100082', 'AW971-16', DATE('2026-08-25'), DATE('2026-09-16'), NULL, 100.00, 0.00, 'R', '1', 'OP1204', 'Qualification build supporting AS7510 lightning test article.'), + ('MO100083', 'AW979-24', DATE('2026-08-25'), DATE('2026-09-23'), NULL, 100.00, 0.00, 'R', '1', 'OP1942', 'Anodize line at capacity - routed to outside processor.'), + ('MO100084', 'SATHRDNUT', DATE('2026-08-25'), DATE('2026-09-16'), NULL, 72.00, 1.20, 'R', '3', 'OP1238', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO100085', 'P9400-12', DATE('2026-08-24'), DATE('2026-09-09'), NULL, 24.00, 0.00, 'R', '3', 'OP1364', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO100086', 'AW971-16', DATE('2026-08-24'), DATE('2026-09-01'), DATE('2026-09-08'), 200.00, 0.94, 'C', '1', 'OP1733', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100087', 'HOSE-08L', DATE('2026-08-24'), DATE('2026-09-14'), NULL, 80.00, 1.91, 'R', '3', 'OP1271', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO100088', 'QD200-16', DATE('2026-08-24'), DATE('2026-09-08'), DATE('2026-09-07'), 24.00, 0.78, 'C', '3', 'OP1654', 'Closed short - balance cancelled at customer request.'), + ('MO100089', 'W902-24', DATE('2026-08-24'), DATE('2026-09-08'), DATE('2026-09-08'), 300.00, 0.00, 'C', '2', 'OP1942', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100090', 'SASLEEVE1', DATE('2026-08-24'), DATE('2026-09-15'), NULL, 216.00, 0.00, 'R', '1', 'OP1448', 'Customer source inspection scheduled at final acceptance.'), + ('MO100091', 'CLPSPC-06', DATE('2026-08-24'), DATE('2026-09-01'), NULL, 72.00, 0.00, 'R', '2', 'OP1820', 'Anodize line at capacity - routed to outside processor.'), + ('MO100092', 'W991-24', DATE('2026-08-21'), DATE('2026-08-31'), NULL, 25.00, 0.00, 'R', '1', 'OP1490', 'FAI required per AS9102 on this revision before shipment.'), + ('MO100093', 'W922N-16', DATE('2026-08-21'), DATE('2026-09-08'), DATE('2026-09-08'), 25.00, 1.08, 'C', '3', 'OP1988', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100094', 'SATHBDY32', DATE('2026-08-21'), DATE('2026-09-03'), DATE('2026-09-01'), 288.00, 0.00, 'C', '3', 'OP1087', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100095', 'SASLEEVE1', DATE('2026-08-21'), DATE('2026-08-26'), DATE('2026-08-24'), 200.00, 7.52, 'C', '3', 'OP1448', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100096', 'SACLSH24', DATE('2026-08-21'), DATE('2026-09-10'), NULL, 72.00, 0.00, 'R', '1', 'OP1319', 'Spares order for MIA depot replenishment.'), + ('MO100097', 'HOSE-08L', DATE('2026-08-21'), DATE('2026-09-17'), NULL, 25.00, 0.00, 'R', '3', 'OP1490', 'Spares order for MIA depot replenishment.'), + ('MO100098', 'W991-16', DATE('2026-08-21'), DATE('2026-08-28'), DATE('2026-08-27'), 200.00, 5.29, 'C', '3', 'OP1578', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100099', 'CLPSPC-06', DATE('2026-08-20'), DATE('2026-09-09'), NULL, 72.00, 1.86, 'R', '3', 'OP1698', 'Dual-lot build; segregate serial ranges at pack out.'), + ('MO100100', 'W922N-16', DATE('2026-08-20'), DATE('2026-09-08'), DATE('2026-09-08'), 144.00, 0.00, 'C', '3', 'OP1907', 'Closed complete, one unit scrapped for bore undersize at op 40.'); + +INSERT INTO MANUFACTURING_ORDERS (ORDER_ID, ITEM_ID, ORDER_DATE, EXPECTED_COMPLETION_DATE, ACTUAL_COMPLETION_DATE, QUANTITY_ORDERED, QUANTITY_SCRAPPED, STATUS, SHIFT_CODE, OPERATOR_ID, NOTES) VALUES + ('MO100101', 'SAISOTUB2', DATE('2026-08-20'), DATE('2026-09-14'), NULL, 1200.00, 0.00, 'R', '3', 'OP1402', 'Qualification build supporting AS7510 lightning test article.'), + ('MO100102', 'SATHRDNUT', DATE('2026-08-20'), DATE('2026-09-11'), NULL, 144.00, 3.01, 'R', '1', 'OP1698', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO100103', 'HTRBL-112', DATE('2026-08-20'), DATE('2026-09-03'), DATE('2026-09-07'), 300.00, 0.00, 'C', '3', 'OP1988', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100104', 'W700-32', DATE('2026-08-20'), DATE('2026-08-26'), DATE('2026-08-25'), 12.00, 0.00, 'C', '1', 'OP1238', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100105', 'SAVTLI01', DATE('2026-08-20'), DATE('2026-08-28'), DATE('2026-08-31'), 72.00, 0.00, 'C', '3', 'OP1536', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100106', 'P9400-12', DATE('2026-08-19'), DATE('2026-09-08'), NULL, 250.00, 0.00, 'R', '1', 'OP1156', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO100107', 'SATHBDY32', DATE('2026-08-19'), DATE('2026-09-04'), NULL, 400.00, 0.00, 'R', '1', 'OP1087', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO100108', 'SAVTLI01', DATE('2026-08-19'), DATE('2026-08-28'), DATE('2026-08-27'), 40.00, 1.79, 'C', '2', 'OP1238', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100109', 'QD200-16', DATE('2026-08-19'), DATE('2026-09-17'), NULL, 40.00, 0.00, 'R', '3', 'OP1113', 'Mining channel order - ELP stock replenishment.'), + ('MO100110', 'FRANG-12', DATE('2026-08-19'), DATE('2026-09-18'), NULL, 50.00, 0.00, 'R', '2', 'OP1204', 'Spares order for MIA depot replenishment.'), + ('MO100111', 'SAISOTUB1', DATE('2026-08-19'), DATE('2026-09-16'), NULL, 288.00, 6.28, 'R', '3', 'OP1271', 'Mining channel order - ELP stock replenishment.'), + ('MO100112', 'SAPOPPET1', DATE('2026-08-19'), DATE('2026-09-10'), NULL, 300.00, 0.00, 'R', '2', 'OP1490', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO100113', 'HTRBL-112', DATE('2026-08-19'), DATE('2026-08-31'), NULL, 50.00, 0.00, 'R', '3', 'OP1042', 'Customer source inspection scheduled at final acceptance.'), + ('MO100114', 'SALATCH1', DATE('2026-08-18'), DATE('2026-09-02'), NULL, 480.00, 0.00, 'R', '1', 'OP1238', 'Held for engineering disposition on tolerance deviation request.'), + ('MO100115', 'W991-24', DATE('2026-08-18'), DATE('2026-09-01'), DATE('2026-09-04'), 48.00, 1.39, 'C', '2', 'OP1611', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100116', 'SATHBDY16', DATE('2026-08-18'), DATE('2026-09-17'), NULL, 75.00, 0.00, 'R', '3', 'OP1988', 'Traveller reprinted after routing update; use rev 4 only.'), + ('MO100117', 'SATHBDY16', DATE('2026-08-18'), DATE('2026-08-24'), DATE('2026-08-21'), 96.00, 3.53, 'C', '2', 'OP1113', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100118', 'SACUSHN06', DATE('2026-08-18'), DATE('2026-09-17'), NULL, 576.00, 0.00, 'R', '1', 'OP1364', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO100119', 'SACUSHNW8', DATE('2026-08-18'), DATE('2026-09-02'), DATE('2026-09-08'), 960.00, 34.84, 'C', '3', 'OP1087', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100120', 'SATHBDY16', DATE('2026-08-18'), DATE('2026-08-26'), DATE('2026-09-01'), 240.00, 0.00, 'C', '3', 'OP1865', 'Closed complete. Shipped ahead of need date.'), + ('MO100121', 'P9600-16', DATE('2026-08-17'), DATE('2026-08-27'), DATE('2026-08-28'), 50.00, 0.00, 'C', '1', 'OP1042', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100122', 'AW971-16', DATE('2026-08-17'), DATE('2026-09-15'), NULL, 12.00, 0.00, 'R', '3', 'OP1238', 'Held for engineering disposition on tolerance deviation request.'), + ('MO100123', 'AW979-24', DATE('2026-08-17'), DATE('2026-09-11'), NULL, 48.00, 0.00, 'R', '2', 'OP1042', 'Customer source inspection scheduled at final acceptance.'), + ('MO100124', 'SATHBDY32', DATE('2026-08-17'), DATE('2026-09-16'), NULL, 50.00, 0.48, 'R', '3', 'OP1490', 'Customer source inspection scheduled at final acceptance.'), + ('MO100125', 'SAISOTUB1', DATE('2026-08-17'), DATE('2026-09-10'), NULL, 144.00, 0.00, 'R', '1', 'OP1776', 'Standard routing, no deviations. Release to LAX cell 4.'), + ('MO100126', 'SACUSHN06', DATE('2026-08-17'), DATE('2026-09-10'), NULL, 192.00, 4.75, 'R', '3', 'OP1776', 'Spares order for MIA depot replenishment.'), + ('MO100127', 'SASEALK16', DATE('2026-08-17'), DATE('2026-09-10'), NULL, 120.00, 0.00, 'R', '2', 'OP1042', 'Held for engineering disposition on tolerance deviation request.'), + ('MO100128', 'AW2100-24', DATE('2026-08-17'), DATE('2026-09-07'), NULL, 300.00, 6.98, 'R', '3', 'OP1490', 'Anodize line at capacity - routed to outside processor.'), + ('MO100129', 'QD200-08', DATE('2026-08-14'), DATE('2026-08-28'), DATE('2026-09-04'), 300.00, 0.00, 'C', '3', 'OP1156', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100130', 'AW2091-24', DATE('2026-08-14'), DATE('2026-09-04'), DATE('2026-09-03'), 72.00, 0.99, 'C', '1', 'OP1490', 'Closed complete. Shipped ahead of need date.'), + ('MO100131', 'AW2010-16', DATE('2026-08-14'), DATE('2026-09-01'), DATE('2026-09-08'), 250.00, 2.89, 'C', '3', 'OP1698', 'Closed complete. FAI package submitted with shipment.'), + ('MO100132', 'HTRGK-HG1', DATE('2026-08-14'), DATE('2026-08-31'), DATE('2026-09-07'), 300.00, 9.31, 'C', '2', 'OP1156', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100133', 'AW2100-24', DATE('2026-08-14'), DATE('2026-09-14'), NULL, 36.00, 0.00, 'R', '2', 'OP1238', 'Mining channel order - ELP stock replenishment.'), + ('MO100134', 'FRANG-12', DATE('2026-08-14'), DATE('2026-08-28'), DATE('2026-08-31'), 20.00, 0.28, 'C', '2', 'OP1865', 'Closed complete. Shipped ahead of need date.'), + ('MO100135', 'W902-32', DATE('2026-08-14'), DATE('2026-08-26'), DATE('2026-08-24'), 12.00, 0.00, 'C', '2', 'OP1402', 'Closed short - balance cancelled at customer request.'), + ('MO100136', 'SAISOTUB1', DATE('2026-08-14'), DATE('2026-09-09'), NULL, 160.00, 0.00, 'R', '1', 'OP1156', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO100137', 'SAHOSEAS8', DATE('2026-08-13'), DATE('2026-09-04'), DATE('2026-09-08'), 48.00, 0.00, 'C', '1', 'OP1820', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100138', 'W902-24', DATE('2026-08-13'), DATE('2026-09-07'), NULL, 20.00, 0.00, 'R', '3', 'OP1042', 'Customer source inspection scheduled at final acceptance.'), + ('MO100139', 'AW2100-24', DATE('2026-08-13'), DATE('2026-08-26'), DATE('2026-08-26'), 25.00, 0.00, 'C', '3', 'OP1402', 'Closed complete. FAI package submitted with shipment.'), + ('MO100140', 'SAHTRCORE', DATE('2026-08-13'), DATE('2026-09-07'), NULL, 400.00, 0.00, 'R', '2', 'OP1611', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO100141', 'SAISOEND1', DATE('2026-08-13'), DATE('2026-09-10'), NULL, 100.00, 0.00, 'R', '1', 'OP1364', 'Rev B effectivity - verify seal kit callout before kitting.'), + ('MO100142', 'SATHBDY16', DATE('2026-08-13'), DATE('2026-09-07'), DATE('2026-09-07'), 360.00, 12.77, 'C', '2', 'OP1042', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100143', 'ISOF-1000', DATE('2026-08-13'), DATE('2026-09-04'), DATE('2026-09-08'), 240.00, 6.13, 'C', '1', 'OP1490', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100144', 'HTRCT-22W', DATE('2026-08-12'), DATE('2026-09-11'), NULL, 300.00, 0.00, 'R', '3', 'OP1319', 'FAI required per AS9102 on this revision before shipment.'), + ('MO100145', 'AW2010-32', DATE('2026-08-12'), DATE('2026-09-08'), DATE('2026-09-04'), 80.00, 0.00, 'C', '3', 'OP1654', 'Closed short - balance cancelled at customer request.'), + ('MO100146', 'AW2091-24', DATE('2026-08-12'), DATE('2026-08-27'), DATE('2026-09-03'), 300.00, 3.02, 'C', '1', 'OP1156', 'Closed complete. FAI package submitted with shipment.'), + ('MO100147', 'SASLEEVE1', DATE('2026-08-12'), DATE('2026-08-19'), DATE('2026-08-21'), 24.00, 0.00, 'C', '1', 'OP1865', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100148', 'QD200-16', DATE('2026-08-12'), DATE('2026-08-17'), DATE('2026-08-24'), 60.00, 0.61, 'C', '3', 'OP1536', 'Closed complete. FAI package submitted with shipment.'), + ('MO100149', 'AW2010-24', DATE('2026-08-12'), DATE('2026-09-09'), NULL, 100.00, 0.00, 'R', '1', 'OP1988', 'FAI required per AS9102 on this revision before shipment.'), + ('MO100150', 'AW971-24', DATE('2026-08-12'), DATE('2026-09-14'), NULL, 50.00, 0.00, 'R', '2', 'OP1698', 'Qualification build supporting AS7510 lightning test article.'), + ('MO100151', 'CLPTL-08', DATE('2026-08-11'), DATE('2026-09-03'), DATE('2026-09-08'), 240.00, 6.29, 'C', '2', 'OP1698', 'Closed short - balance cancelled at customer request.'), + ('MO100152', 'WMLQD-075', DATE('2026-08-11'), DATE('2026-08-20'), NULL, 50.00, 0.00, 'R', '1', 'OP1238', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO100153', 'CLPWS-10', DATE('2026-08-11'), DATE('2026-08-18'), NULL, 60.00, 0.00, 'R', '1', 'OP1654', 'Rev B effectivity - verify seal kit callout before kitting.'), + ('MO100154', 'AW979-24', DATE('2026-08-11'), DATE('2026-08-14'), DATE('2026-08-20'), 150.00, 0.00, 'C', '2', 'OP1319', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100155', 'SALATCH1', DATE('2026-08-11'), DATE('2026-08-28'), DATE('2026-08-25'), 288.00, 0.00, 'C', '1', 'OP1402', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100156', 'AW2010-32', DATE('2026-08-11'), DATE('2026-09-09'), NULL, 20.00, 0.00, 'R', '1', 'OP1156', 'Rev B effectivity - verify seal kit callout before kitting.'), + ('MO100157', 'SACLSH24C', DATE('2026-08-11'), DATE('2026-08-31'), DATE('2026-09-04'), 480.00, 0.00, 'C', '1', 'OP1364', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100158', 'SACLSH32', DATE('2026-08-10'), DATE('2026-08-25'), DATE('2026-09-02'), 960.00, 42.52, 'C', '3', 'OP1776', 'Closed complete. Shipped ahead of need date.'), + ('MO100159', 'W991-24', DATE('2026-08-10'), DATE('2026-08-14'), DATE('2026-08-14'), 200.00, 8.55, 'C', '1', 'OP1611', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100160', 'G620-32', DATE('2026-08-10'), DATE('2026-08-26'), DATE('2026-09-03'), 300.00, 0.00, 'C', '3', 'OP1087', 'Closed short - balance cancelled at customer request.'), + ('MO100161', 'SAHTRCORE', DATE('2026-08-10'), DATE('2026-09-03'), DATE('2026-09-02'), 400.00, 0.00, 'C', '1', 'OP1319', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100162', 'AW2100-32', DATE('2026-08-10'), DATE('2026-09-10'), NULL, 24.00, 0.16, 'R', '2', 'OP1087', 'Mining channel order - ELP stock replenishment.'), + ('MO100163', 'CLPTL-08', DATE('2026-08-10'), DATE('2026-08-24'), DATE('2026-08-25'), 200.00, 0.00, 'C', '3', 'OP1113', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100164', 'W991N-32', DATE('2026-08-10'), DATE('2026-09-07'), DATE('2026-09-08'), 200.00, 4.49, 'C', '3', 'OP1865', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100165', 'AW979-24', DATE('2026-08-10'), DATE('2026-09-08'), NULL, 20.00, 0.00, 'R', '1', 'OP1907', 'Standard routing, no deviations. Release to LAX cell 4.'), + ('MO100166', 'QD200-08', DATE('2026-08-07'), DATE('2026-08-24'), DATE('2026-08-20'), 150.00, 0.00, 'C', '1', 'OP1087', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100167', 'W991-24', DATE('2026-08-07'), DATE('2026-08-26'), NULL, 144.00, 0.00, 'R', '2', 'OP1113', 'Traveller reprinted after routing update; use rev 4 only.'), + ('MO100168', 'P9100-08', DATE('2026-08-07'), DATE('2026-09-10'), NULL, 12.00, 0.00, 'R', '3', 'OP1087', 'FAI required per AS9102 on this revision before shipment.'), + ('MO100169', 'CLPSL-08', DATE('2026-08-07'), DATE('2026-09-09'), NULL, 96.00, 0.00, 'R', '1', 'OP1113', 'Mining channel order - ELP stock replenishment.'), + ('MO100170', 'AW2100-32', DATE('2026-08-07'), DATE('2026-08-20'), NULL, 240.00, 6.68, 'R', '2', 'OP1578', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO100171', 'SASEALK32', DATE('2026-08-07'), DATE('2026-09-01'), DATE('2026-09-02'), 48.00, 0.00, 'C', '3', 'OP1776', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100172', 'C6300-24', DATE('2026-08-07'), DATE('2026-08-17'), NULL, 40.00, 0.34, 'R', '1', 'OP1490', 'Customer source inspection scheduled at final acceptance.'), + ('MO100173', 'QD200-16', DATE('2026-08-07'), DATE('2026-09-09'), NULL, 40.00, 0.84, 'R', '2', 'OP1042', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO100174', 'CLPSTD-06', DATE('2026-08-06'), DATE('2026-08-31'), DATE('2026-08-28'), 80.00, 0.00, 'C', '1', 'OP1654', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100175', 'P9400-12', DATE('2026-08-06'), DATE('2026-08-31'), DATE('2026-09-02'), 20.00, 0.54, 'C', '2', 'OP1865', 'Closed complete. Shipped ahead of need date.'), + ('MO100176', 'W902-32', DATE('2026-08-06'), DATE('2026-09-08'), DATE('2026-09-03'), 300.00, 7.40, 'C', '3', 'OP1611', 'Closed complete. Shipped ahead of need date.'), + ('MO100177', 'ISOF-1000', DATE('2026-08-06'), DATE('2026-09-03'), DATE('2026-08-31'), 24.00, 0.21, 'C', '3', 'OP1319', 'Closed short - balance cancelled at customer request.'), + ('MO100178', 'QD200-16', DATE('2026-08-06'), DATE('2026-08-19'), DATE('2026-08-21'), 300.00, 0.00, 'C', '2', 'OP1364', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100179', 'AW971-24', DATE('2026-08-06'), DATE('2026-08-12'), DATE('2026-08-18'), 96.00, 0.00, 'C', '2', 'OP1448', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100180', 'CLPSPC-06', DATE('2026-08-06'), DATE('2026-08-24'), DATE('2026-08-24'), 72.00, 0.00, 'C', '1', 'OP1536', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100181', 'SAHTRCORE', DATE('2026-08-06'), DATE('2026-09-09'), NULL, 384.00, 2.75, 'R', '3', 'OP1698', 'Rev B effectivity - verify seal kit callout before kitting.'), + ('MO100182', 'SAPOPPET1', DATE('2026-08-05'), DATE('2026-08-28'), NULL, 72.00, 0.00, 'R', '3', 'OP1942', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO100183', 'QD200-16', DATE('2026-08-05'), DATE('2026-08-21'), DATE('2026-08-28'), 20.00, 0.21, 'C', '1', 'OP1907', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100184', 'SACLSH16', DATE('2026-08-05'), DATE('2026-08-13'), DATE('2026-08-12'), 144.00, 0.00, 'C', '1', 'OP1087', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100185', 'WMFFN-100', DATE('2026-08-05'), DATE('2026-08-25'), DATE('2026-08-20'), 25.00, 0.46, 'C', '3', 'OP1402', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100186', 'W991N-32', DATE('2026-08-05'), DATE('2026-09-08'), DATE('2026-09-08'), 60.00, 1.05, 'C', '3', 'OP1654', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100187', 'FRANG-12', DATE('2026-08-05'), DATE('2026-09-03'), NULL, 48.00, 0.00, 'R', '3', 'OP1042', 'Anodize line at capacity - routed to outside processor.'), + ('MO100188', 'SASEALK24', DATE('2026-08-05'), DATE('2026-08-12'), DATE('2026-08-11'), 80.00, 3.27, 'C', '2', 'OP1319', 'Closed complete. Shipped ahead of need date.'), + ('MO100189', 'SATHRDNUT', DATE('2026-08-05'), DATE('2026-08-26'), DATE('2026-08-25'), 400.00, 17.03, 'C', '1', 'OP1907', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100190', 'SAWEARSH1', DATE('2026-08-04'), DATE('2026-08-20'), DATE('2026-08-20'), 600.00, 0.00, 'C', '2', 'OP1204', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100191', 'W991F-24', DATE('2026-08-04'), DATE('2026-08-21'), DATE('2026-08-25'), 120.00, 4.55, 'C', '3', 'OP1113', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100192', 'P9100-08', DATE('2026-08-04'), DATE('2026-09-01'), DATE('2026-09-08'), 12.00, 0.16, 'C', '2', 'OP1907', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100193', 'SATHBDY16', DATE('2026-08-04'), DATE('2026-08-17'), DATE('2026-08-14'), 500.00, 0.00, 'C', '2', 'OP1536', 'Closed complete. Shipped ahead of need date.'), + ('MO100194', 'SATHBDY16', DATE('2026-08-04'), DATE('2026-09-04'), DATE('2026-09-03'), 480.00, 0.00, 'C', '1', 'OP1865', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100195', 'F63052-32', DATE('2026-08-04'), DATE('2026-09-07'), DATE('2026-09-02'), 48.00, 0.00, 'C', '2', 'OP1238', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100196', 'PVCHK-08', DATE('2026-08-04'), DATE('2026-08-28'), DATE('2026-08-28'), 120.00, 1.77, 'C', '1', 'OP1865', 'Closed complete. Shipped ahead of need date.'), + ('MO100197', 'SATHBDY32', DATE('2026-08-03'), DATE('2026-08-19'), DATE('2026-08-24'), 720.00, 0.00, 'C', '1', 'OP1820', 'Closed complete. FAI package submitted with shipment.'), + ('MO100198', 'P9400-12', DATE('2026-08-03'), DATE('2026-08-14'), DATE('2026-08-20'), 150.00, 0.00, 'C', '2', 'OP1204', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100199', 'P9100-08', DATE('2026-08-03'), DATE('2026-08-14'), NULL, 80.00, 0.00, 'R', '1', 'OP1942', 'Anodize line at capacity - routed to outside processor.'), + ('MO100200', 'W991-24', DATE('2026-08-03'), DATE('2026-08-07'), NULL, 80.00, 0.00, 'R', '2', 'OP1042', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'); + +INSERT INTO MANUFACTURING_ORDERS (ORDER_ID, ITEM_ID, ORDER_DATE, EXPECTED_COMPLETION_DATE, ACTUAL_COMPLETION_DATE, QUANTITY_ORDERED, QUANTITY_SCRAPPED, STATUS, SHIFT_CODE, OPERATOR_ID, NOTES) VALUES + ('MO100201', 'SAVTLI01', DATE('2026-08-03'), DATE('2026-08-06'), DATE('2026-08-05'), 192.00, 8.15, 'C', '3', 'OP1654', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100202', 'QD6000-12', DATE('2026-08-03'), DATE('2026-08-17'), DATE('2026-08-25'), 200.00, 8.53, 'C', '2', 'OP1087', 'Closed short - balance cancelled at customer request.'), + ('MO100203', 'CLPBLK-12', DATE('2026-08-03'), DATE('2026-09-04'), NULL, 72.00, 0.00, 'R', '3', 'OP1448', 'Traveller reprinted after routing update; use rev 4 only.'), + ('MO100204', 'SABANDAL6', DATE('2026-07-31'), DATE('2026-09-03'), DATE('2026-09-02'), 108.00, 4.11, 'C', '2', 'OP1820', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100205', 'SASLEEVE1', DATE('2026-07-31'), DATE('2026-08-14'), DATE('2026-08-12'), 50.00, 0.62, 'C', '3', 'OP1448', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100206', 'W991N-32', DATE('2026-07-31'), DATE('2026-08-25'), DATE('2026-08-25'), 50.00, 0.00, 'C', '1', 'OP1654', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100207', 'P9100-08', DATE('2026-07-31'), DATE('2026-08-28'), NULL, 300.00, 0.00, 'R', '2', 'OP1654', 'Held for engineering disposition on tolerance deviation request.'), + ('MO100208', 'AW971-24', DATE('2026-07-31'), DATE('2026-09-01'), NULL, 24.00, 0.00, 'R', '2', 'OP1156', 'Held for engineering disposition on tolerance deviation request.'), + ('MO100209', 'W991N-32', DATE('2026-07-31'), DATE('2026-08-26'), DATE('2026-09-01'), 100.00, 0.00, 'C', '2', 'OP1319', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100210', 'CLPBLK-12', DATE('2026-07-31'), DATE('2026-08-07'), DATE('2026-08-17'), 40.00, 0.19, 'C', '1', 'OP1907', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100211', 'W991N-32', DATE('2026-07-31'), DATE('2026-08-07'), DATE('2026-08-07'), 50.00, 1.12, 'C', '1', 'OP1942', 'Closed complete. Shipped ahead of need date.'), + ('MO100212', 'SACLSH16', DATE('2026-07-30'), DATE('2026-08-21'), DATE('2026-08-24'), 288.00, 0.00, 'C', '2', 'OP1820', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100213', 'HTRCF-201', DATE('2026-07-30'), DATE('2026-08-19'), DATE('2026-08-25'), 12.00, 0.36, 'C', '1', 'OP1364', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100214', 'P9100-08', DATE('2026-07-30'), DATE('2026-09-02'), DATE('2026-08-31'), 200.00, 8.82, 'C', '1', 'OP1490', 'Closed complete. FAI package submitted with shipment.'), + ('MO100215', 'W902-32', DATE('2026-07-30'), DATE('2026-08-07'), NULL, 25.00, 0.69, 'R', '1', 'OP1654', 'Standard routing, no deviations. Release to LAX cell 4.'), + ('MO100216', 'W991-16', DATE('2026-07-30'), DATE('2026-09-01'), DATE('2026-09-08'), 200.00, 8.09, 'C', '3', 'OP1238', 'Closed complete. FAI package submitted with shipment.'), + ('MO100217', 'QD200-08', DATE('2026-07-30'), DATE('2026-08-26'), DATE('2026-08-28'), 25.00, 0.00, 'C', '3', 'OP1364', 'Closed short - balance cancelled at customer request.'), + ('MO100218', 'SALATCH1', DATE('2026-07-30'), DATE('2026-08-21'), DATE('2026-08-19'), 200.00, 0.00, 'C', '1', 'OP1942', 'Closed complete. FAI package submitted with shipment.'), + ('MO100219', 'WMDEF-050', DATE('2026-07-30'), DATE('2026-08-17'), DATE('2026-08-17'), 25.00, 0.29, 'C', '2', 'OP1402', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100220', 'HTRHS-06', DATE('2026-07-29'), DATE('2026-08-12'), DATE('2026-08-19'), 60.00, 0.00, 'C', '2', 'OP1113', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100221', 'SABODY200', DATE('2026-07-29'), DATE('2026-08-27'), DATE('2026-08-27'), 48.00, 0.71, 'C', '3', 'OP1942', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100222', 'F63052-24', DATE('2026-07-29'), DATE('2026-08-25'), DATE('2026-08-28'), 96.00, 0.00, 'C', '3', 'OP1204', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100223', 'P9100-08', DATE('2026-07-29'), DATE('2026-08-05'), DATE('2026-08-13'), 50.00, 0.00, 'C', '2', 'OP1820', 'Closed complete. FAI package submitted with shipment.'), + ('MO100224', 'AW2100-32', DATE('2026-07-29'), DATE('2026-08-07'), DATE('2026-08-05'), 300.00, 7.86, 'C', '1', 'OP1733', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100225', 'W991N-32', DATE('2026-07-29'), DATE('2026-08-28'), DATE('2026-08-25'), 24.00, 0.86, 'C', '1', 'OP1490', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100226', 'SAWEARSH1', DATE('2026-07-29'), DATE('2026-08-04'), DATE('2026-08-03'), 750.00, 0.00, 'C', '3', 'OP1654', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100227', 'AW971-24', DATE('2026-07-29'), DATE('2026-08-31'), NULL, 250.00, 0.00, 'R', '3', 'OP1536', 'Standard routing, no deviations. Release to LAX cell 4.'), + ('MO100228', 'SAHTRHARN', DATE('2026-07-28'), DATE('2026-08-25'), DATE('2026-08-31'), 50.00, 0.00, 'C', '1', 'OP1238', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100229', 'W902-32', DATE('2026-07-28'), DATE('2026-08-26'), DATE('2026-08-25'), 120.00, 1.22, 'C', '1', 'OP1698', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100230', 'SABANDAL6', DATE('2026-07-28'), DATE('2026-08-17'), NULL, 24.00, 0.00, 'R', '3', 'OP1087', 'Held for engineering disposition on tolerance deviation request.'), + ('MO100231', 'P9100-08', DATE('2026-07-28'), DATE('2026-08-13'), DATE('2026-08-11'), 120.00, 1.04, 'C', '3', 'OP1611', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100232', 'SAHTRHARN', DATE('2026-07-28'), DATE('2026-07-31'), DATE('2026-07-29'), 80.00, 0.00, 'C', '3', 'OP1156', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100233', 'W902-16', DATE('2026-07-28'), DATE('2026-08-17'), NULL, 24.00, 0.00, 'R', '1', 'OP1364', 'Customer source inspection scheduled at final acceptance.'), + ('MO100234', 'PVFUSE-12', DATE('2026-07-28'), DATE('2026-08-28'), DATE('2026-09-01'), 200.00, 0.00, 'C', '3', 'OP1536', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100235', 'AW2010-24', DATE('2026-07-28'), DATE('2026-08-25'), DATE('2026-09-02'), 48.00, 1.76, 'C', '2', 'OP1204', 'Closed complete. FAI package submitted with shipment.'), + ('MO100236', 'W902-24', DATE('2026-07-27'), DATE('2026-08-18'), NULL, 300.00, 0.00, 'R', '3', 'OP1942', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO100237', 'HOSE-04S', DATE('2026-07-27'), DATE('2026-08-05'), DATE('2026-08-06'), 300.00, 0.00, 'C', '3', 'OP1042', 'Closed complete. FAI package submitted with shipment.'), + ('MO100238', 'SAPOPPET1', DATE('2026-07-27'), DATE('2026-08-05'), DATE('2026-08-03'), 300.00, 4.26, 'C', '1', 'OP1698', 'Closed complete. FAI package submitted with shipment.'), + ('MO100239', 'SAHOSEAS8', DATE('2026-07-27'), DATE('2026-08-24'), DATE('2026-08-25'), 384.00, 0.00, 'C', '1', 'OP1156', 'Closed complete. Shipped ahead of need date.'), + ('MO100240', 'CLPWS-10', DATE('2026-07-27'), DATE('2026-08-17'), DATE('2026-08-17'), 100.00, 0.00, 'C', '3', 'OP1865', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100241', 'HOSE-04S', DATE('2026-07-27'), DATE('2026-08-25'), DATE('2026-08-21'), 120.00, 3.50, 'C', '3', 'OP1907', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100242', 'P9600-16', DATE('2026-07-27'), DATE('2026-08-14'), DATE('2026-08-17'), 240.00, 0.00, 'C', '2', 'OP1087', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100243', 'SACLSH24', DATE('2026-07-24'), DATE('2026-08-04'), NULL, 360.00, 3.50, 'R', '2', 'OP1698', 'Qualification build supporting AS7510 lightning test article.'), + ('MO100244', 'CLPSTD-06', DATE('2026-07-24'), DATE('2026-08-26'), DATE('2026-08-24'), 300.00, 0.00, 'C', '3', 'OP1698', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100245', 'SALATCH1', DATE('2026-07-24'), DATE('2026-08-18'), NULL, 360.00, 0.00, 'R', '2', 'OP1319', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO100246', 'SAISOTUB2', DATE('2026-07-24'), DATE('2026-08-06'), DATE('2026-08-10'), 100.00, 2.76, 'C', '3', 'OP1402', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100247', 'CLPTL-08', DATE('2026-07-24'), DATE('2026-08-04'), DATE('2026-08-07'), 20.00, 0.00, 'C', '2', 'OP1319', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100248', 'W991-16', DATE('2026-07-24'), DATE('2026-08-14'), NULL, 72.00, 0.00, 'R', '2', 'OP1271', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO100249', 'C3600-16', DATE('2026-07-24'), DATE('2026-08-20'), DATE('2026-08-26'), 12.00, 0.00, 'C', '1', 'OP1490', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100250', 'F63052-32', DATE('2026-07-24'), DATE('2026-08-11'), DATE('2026-08-11'), 12.00, 0.00, 'C', '3', 'OP1364', 'Closed short - balance cancelled at customer request.'), + ('MO100251', 'SASEALK32', DATE('2026-07-23'), DATE('2026-08-25'), DATE('2026-08-21'), 360.00, 0.00, 'C', '3', 'OP1578', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100252', 'AW2010-16', DATE('2026-07-23'), DATE('2026-07-30'), DATE('2026-07-31'), 12.00, 0.00, 'C', '1', 'OP1907', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100253', 'SAVTLI01', DATE('2026-07-23'), DATE('2026-08-04'), NULL, 360.00, 0.00, 'R', '3', 'OP1113', 'Spares order for MIA depot replenishment.'), + ('MO100254', 'WMLQD-075', DATE('2026-07-23'), DATE('2026-08-04'), DATE('2026-08-07'), 200.00, 4.09, 'C', '2', 'OP1156', 'Closed short - balance cancelled at customer request.'), + ('MO100255', 'W922N-16', DATE('2026-07-23'), DATE('2026-08-05'), DATE('2026-08-12'), 200.00, 1.09, 'C', '2', 'OP1238', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100256', 'SATHBDY16', DATE('2026-07-23'), DATE('2026-08-26'), DATE('2026-09-02'), 100.00, 0.00, 'C', '1', 'OP1820', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100257', 'SATHBDY32', DATE('2026-07-23'), DATE('2026-08-04'), DATE('2026-08-07'), 450.00, 4.90, 'C', '3', 'OP1490', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100258', 'SACUSHNW8', DATE('2026-07-22'), DATE('2026-08-07'), DATE('2026-08-14'), 288.00, 2.40, 'C', '2', 'OP1654', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100259', 'SALATCH1', DATE('2026-07-22'), DATE('2026-08-07'), DATE('2026-08-10'), 800.00, 6.79, 'C', '2', 'OP1865', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100260', 'SASEALK32', DATE('2026-07-22'), DATE('2026-08-13'), DATE('2026-08-20'), 160.00, 0.00, 'C', '2', 'OP1364', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100261', 'SAISOTUB1', DATE('2026-07-22'), DATE('2026-07-30'), DATE('2026-07-31'), 432.00, 0.00, 'C', '1', 'OP1042', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100262', 'SAISOEND1', DATE('2026-07-22'), DATE('2026-08-04'), DATE('2026-08-05'), 240.00, 5.38, 'C', '1', 'OP1820', 'Closed short - balance cancelled at customer request.'), + ('MO100263', 'SACLSH24', DATE('2026-07-22'), DATE('2026-07-30'), DATE('2026-07-31'), 100.00, 0.64, 'C', '3', 'OP1578', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100264', 'SABODY200', DATE('2026-07-22'), DATE('2026-08-04'), NULL, 48.00, 1.41, 'R', '3', 'OP1490', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO100265', 'W922N-16', DATE('2026-07-22'), DATE('2026-08-12'), NULL, 150.00, 0.00, 'R', '2', 'OP1942', 'Dual-lot build; segregate serial ranges at pack out.'), + ('MO100266', 'CLPSTD-06', DATE('2026-07-21'), DATE('2026-08-04'), DATE('2026-08-12'), 120.00, 0.00, 'C', '3', 'OP1042', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100267', 'SABODY200', DATE('2026-07-21'), DATE('2026-08-06'), DATE('2026-08-06'), 240.00, 0.00, 'C', '1', 'OP1364', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100268', 'AW2010-32', DATE('2026-07-21'), DATE('2026-08-10'), DATE('2026-08-11'), 72.00, 0.00, 'C', '3', 'OP1364', 'Closed complete. FAI package submitted with shipment.'), + ('MO100269', 'CLPWS-10', DATE('2026-07-21'), DATE('2026-08-07'), NULL, 48.00, 0.00, 'R', '1', 'OP1271', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO100270', 'HTRHS-06', DATE('2026-07-21'), DATE('2026-08-20'), DATE('2026-08-19'), 240.00, 0.00, 'C', '3', 'OP1733', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100271', 'QD200-16', DATE('2026-07-21'), DATE('2026-07-28'), NULL, 36.00, 0.27, 'R', '2', 'OP1364', 'Long-lead titanium bar released early against forecast.'), + ('MO100272', 'CLPWS-10', DATE('2026-07-21'), DATE('2026-07-29'), NULL, 48.00, 0.00, 'R', '1', 'OP1448', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO100273', 'SASLEEVE1', DATE('2026-07-21'), DATE('2026-08-19'), NULL, 576.00, 0.00, 'R', '2', 'OP1865', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO100274', 'SACLSH16', DATE('2026-07-20'), DATE('2026-08-10'), DATE('2026-08-05'), 750.00, 23.21, 'C', '3', 'OP1156', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100275', 'QD200-08', DATE('2026-07-20'), DATE('2026-07-31'), DATE('2026-07-31'), 120.00, 0.00, 'C', '2', 'OP1042', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100276', 'WMFFR-100', DATE('2026-07-20'), DATE('2026-08-04'), DATE('2026-08-03'), 240.00, 4.50, 'C', '2', 'OP1654', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100277', 'P9400-12', DATE('2026-07-20'), DATE('2026-08-07'), DATE('2026-08-04'), 20.00, 0.82, 'C', '3', 'OP1536', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100278', 'CLPWS-10', DATE('2026-07-20'), DATE('2026-08-06'), DATE('2026-08-05'), 48.00, 0.00, 'C', '3', 'OP1698', 'Closed short - balance cancelled at customer request.'), + ('MO100279', 'W902-32', DATE('2026-07-20'), DATE('2026-07-24'), DATE('2026-07-29'), 300.00, 0.00, 'C', '2', 'OP1820', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100280', 'SATHRDNUT', DATE('2026-07-20'), DATE('2026-08-06'), DATE('2026-08-06'), 450.00, 0.00, 'C', '1', 'OP1578', 'Closed short - balance cancelled at customer request.'), + ('MO100281', 'SAISOTUB1', DATE('2026-07-17'), DATE('2026-08-14'), DATE('2026-08-21'), 288.00, 9.39, 'C', '1', 'OP1204', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100282', 'PVCHK-08', DATE('2026-07-17'), DATE('2026-08-07'), DATE('2026-08-06'), 50.00, 2.04, 'C', '2', 'OP1654', 'Closed complete. FAI package submitted with shipment.'), + ('MO100283', 'ISOF-2000', DATE('2026-07-17'), DATE('2026-08-03'), DATE('2026-08-07'), 60.00, 0.00, 'C', '3', 'OP1820', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100284', 'QD200-16', DATE('2026-07-17'), DATE('2026-07-23'), DATE('2026-07-29'), 200.00, 0.00, 'C', '1', 'OP1907', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100285', 'CLPSPC-06', DATE('2026-07-17'), DATE('2026-07-27'), NULL, 80.00, 0.00, 'R', '1', 'OP1204', 'Spares order for MIA depot replenishment.'), + ('MO100286', 'W902-24', DATE('2026-07-17'), DATE('2026-08-17'), DATE('2026-08-24'), 96.00, 1.30, 'C', '2', 'OP1364', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100287', 'W902-32', DATE('2026-07-17'), DATE('2026-08-03'), NULL, 72.00, 0.00, 'R', '2', 'OP1087', 'Mining channel order - ELP stock replenishment.'), + ('MO100288', 'SACLSH24C', DATE('2026-07-17'), DATE('2026-08-05'), DATE('2026-08-07'), 50.00, 1.60, 'C', '2', 'OP1113', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100289', 'PVCHK-08', DATE('2026-07-16'), DATE('2026-08-04'), NULL, 120.00, 0.00, 'R', '2', 'OP1536', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO100290', 'FRANG-12', DATE('2026-07-16'), DATE('2026-08-19'), DATE('2026-08-17'), 20.00, 0.00, 'C', '2', 'OP1776', 'Closed complete. FAI package submitted with shipment.'), + ('MO100291', 'W991F-24', DATE('2026-07-16'), DATE('2026-08-03'), DATE('2026-08-07'), 36.00, 0.00, 'C', '3', 'OP1402', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100292', 'P9600-16', DATE('2026-07-16'), DATE('2026-07-27'), NULL, 150.00, 0.00, 'R', '2', 'OP1733', 'Qualification build supporting AS7510 lightning test article.'), + ('MO100293', 'SABANDAL6', DATE('2026-07-16'), DATE('2026-07-22'), DATE('2026-07-17'), 120.00, 4.46, 'C', '3', 'OP1776', 'Closed complete. FAI package submitted with shipment.'), + ('MO100294', 'W922N-16', DATE('2026-07-16'), DATE('2026-08-18'), DATE('2026-08-20'), 50.00, 0.75, 'C', '1', 'OP1402', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100295', 'AW971-16', DATE('2026-07-16'), DATE('2026-07-30'), NULL, 80.00, 0.60, 'R', '3', 'OP1042', 'Dual-lot build; segregate serial ranges at pack out.'), + ('MO100296', 'GRMAC-04', DATE('2026-07-16'), DATE('2026-08-11'), DATE('2026-08-10'), 300.00, 5.88, 'C', '1', 'OP1776', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100297', 'HTRGK-HG1', DATE('2026-07-15'), DATE('2026-07-31'), DATE('2026-07-31'), 20.00, 0.38, 'C', '2', 'OP1776', 'Closed complete. Shipped ahead of need date.'), + ('MO100298', 'SAISOEND1', DATE('2026-07-15'), DATE('2026-07-21'), DATE('2026-07-24'), 320.00, 8.90, 'C', '3', 'OP1087', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100299', 'P9600-16', DATE('2026-07-15'), DATE('2026-07-23'), DATE('2026-07-22'), 12.00, 0.09, 'C', '2', 'OP1942', 'Closed complete. Shipped ahead of need date.'), + ('MO100300', 'P9100-08', DATE('2026-07-15'), DATE('2026-08-05'), DATE('2026-08-05'), 24.00, 0.00, 'C', '3', 'OP1238', 'Closed complete, one unit scrapped for bore undersize at op 40.'); + +INSERT INTO MANUFACTURING_ORDERS (ORDER_ID, ITEM_ID, ORDER_DATE, EXPECTED_COMPLETION_DATE, ACTUAL_COMPLETION_DATE, QUANTITY_ORDERED, QUANTITY_SCRAPPED, STATUS, SHIFT_CODE, OPERATOR_ID, NOTES) VALUES + ('MO100301', 'AW2010-32', DATE('2026-07-15'), DATE('2026-07-23'), DATE('2026-07-23'), 24.00, 0.00, 'C', '2', 'OP1238', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100302', 'SABANDCR8', DATE('2026-07-15'), DATE('2026-07-28'), DATE('2026-07-27'), 480.00, 0.00, 'C', '2', 'OP1402', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100303', 'SASEALK32', DATE('2026-07-15'), DATE('2026-08-12'), NULL, 450.00, 0.00, 'R', '1', 'OP1271', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO100304', 'SASEALK32', DATE('2026-07-15'), DATE('2026-07-21'), DATE('2026-07-21'), 288.00, 8.28, 'C', '1', 'OP1733', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100305', 'W902-16', DATE('2026-07-14'), DATE('2026-08-07'), DATE('2026-08-13'), 25.00, 0.26, 'C', '3', 'OP1113', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100306', 'QD200-16', DATE('2026-07-14'), DATE('2026-07-22'), DATE('2026-07-27'), 150.00, 0.83, 'C', '2', 'OP1271', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100307', 'HTRGK-HG1', DATE('2026-07-14'), DATE('2026-07-22'), DATE('2026-07-29'), 48.00, 0.00, 'C', '3', 'OP1611', 'Closed short - balance cancelled at customer request.'), + ('MO100308', 'P9400-12', DATE('2026-07-14'), DATE('2026-08-03'), DATE('2026-07-30'), 250.00, 4.53, 'C', '1', 'OP1271', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100309', 'SATHBDY32', DATE('2026-07-14'), DATE('2026-07-30'), DATE('2026-08-03'), 400.00, 0.00, 'C', '3', 'OP1490', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100310', 'SAVTLI01', DATE('2026-07-14'), DATE('2026-07-22'), DATE('2026-07-21'), 320.00, 0.00, 'C', '2', 'OP1364', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100311', 'AW971-16', DATE('2026-07-14'), DATE('2026-07-20'), DATE('2026-07-24'), 20.00, 0.00, 'C', '1', 'OP1448', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100312', 'SASEALK32', DATE('2026-07-13'), DATE('2026-07-27'), DATE('2026-07-28'), 1200.00, 0.00, 'C', '1', 'OP1776', 'Closed short - balance cancelled at customer request.'), + ('MO100313', 'W991-16', DATE('2026-07-13'), DATE('2026-07-31'), NULL, 60.00, 0.00, 'R', '3', 'OP1865', 'Mining channel order - ELP stock replenishment.'), + ('MO100314', 'SAPOPPET1', DATE('2026-07-13'), DATE('2026-07-22'), DATE('2026-07-24'), 200.00, 0.00, 'C', '3', 'OP1733', 'Closed complete. FAI package submitted with shipment.'), + ('MO100315', 'SACLSH32', DATE('2026-07-13'), DATE('2026-08-06'), DATE('2026-08-04'), 24.00, 0.00, 'C', '1', 'OP1654', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100316', 'SACLSH32', DATE('2026-07-13'), DATE('2026-08-13'), DATE('2026-08-11'), 288.00, 0.00, 'C', '1', 'OP1402', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100317', 'WMLQD-075', DATE('2026-07-13'), DATE('2026-07-17'), DATE('2026-07-24'), 20.00, 0.77, 'C', '3', 'OP1733', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100318', 'QD200-08', DATE('2026-07-13'), DATE('2026-08-05'), DATE('2026-08-10'), 240.00, 5.14, 'C', '2', 'OP1578', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100319', 'SAISOTUB2', DATE('2026-07-10'), DATE('2026-07-16'), DATE('2026-07-13'), 192.00, 0.00, 'C', '3', 'OP1271', 'Closed complete. Shipped ahead of need date.'), + ('MO100320', 'W991F-24', DATE('2026-07-10'), DATE('2026-08-03'), DATE('2026-07-31'), 150.00, 0.00, 'C', '3', 'OP1611', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100321', 'F63052-24', DATE('2026-07-10'), DATE('2026-08-07'), DATE('2026-08-06'), 24.00, 0.00, 'C', '3', 'OP1490', 'Closed short - balance cancelled at customer request.'), + ('MO100322', 'HTRHS-06', DATE('2026-07-10'), DATE('2026-08-13'), DATE('2026-08-12'), 250.00, 4.46, 'C', '3', 'OP1942', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100323', 'AW2091-24', DATE('2026-07-10'), DATE('2026-07-31'), DATE('2026-07-30'), 240.00, 0.00, 'C', '1', 'OP1820', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100324', 'QD6000-12', DATE('2026-07-10'), DATE('2026-07-29'), DATE('2026-07-24'), 25.00, 0.00, 'C', '2', 'OP1490', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100325', 'HTRCF-201', DATE('2026-07-10'), DATE('2026-08-13'), DATE('2026-08-13'), 96.00, 0.00, 'C', '2', 'OP1402', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100326', 'CLPSTD-06', DATE('2026-07-09'), DATE('2026-07-27'), NULL, 36.00, 0.00, 'R', '1', 'OP1820', 'Held for engineering disposition on tolerance deviation request.'), + ('MO100327', 'W700-32', DATE('2026-07-09'), DATE('2026-07-14'), DATE('2026-07-14'), 36.00, 0.00, 'C', '1', 'OP1087', 'Closed short - balance cancelled at customer request.'), + ('MO100328', 'C6300-24', DATE('2026-07-09'), DATE('2026-07-27'), DATE('2026-07-31'), 48.00, 0.00, 'C', '3', 'OP1942', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100329', 'P9400-12', DATE('2026-07-09'), DATE('2026-07-24'), DATE('2026-07-21'), 50.00, 1.69, 'C', '1', 'OP1448', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100330', 'SACLSH24C', DATE('2026-07-09'), DATE('2026-07-29'), DATE('2026-07-27'), 48.00, 1.45, 'C', '2', 'OP1988', 'Closed complete. Shipped ahead of need date.'), + ('MO100331', 'HTRHS-06', DATE('2026-07-09'), DATE('2026-08-03'), DATE('2026-08-04'), 12.00, 0.00, 'C', '3', 'OP1776', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100332', 'AW2100-32', DATE('2026-07-09'), DATE('2026-07-27'), DATE('2026-07-31'), 120.00, 1.56, 'C', '1', 'OP1364', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100333', 'GRMAC-04', DATE('2026-07-09'), DATE('2026-08-06'), DATE('2026-08-07'), 96.00, 0.00, 'C', '2', 'OP1578', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100334', 'W991F-24', DATE('2026-07-08'), DATE('2026-07-16'), DATE('2026-07-14'), 20.00, 0.00, 'C', '1', 'OP1448', 'Closed complete. FAI package submitted with shipment.'), + ('MO100335', 'SACLSH24C', DATE('2026-07-08'), DATE('2026-07-24'), DATE('2026-07-27'), 120.00, 4.82, 'C', '2', 'OP1578', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100336', 'C3600-16', DATE('2026-07-08'), DATE('2026-08-10'), DATE('2026-08-18'), 60.00, 0.00, 'C', '2', 'OP1733', 'Closed short - balance cancelled at customer request.'), + ('MO100337', 'CLPWS-10', DATE('2026-07-08'), DATE('2026-07-28'), DATE('2026-08-03'), 100.00, 3.05, 'C', '2', 'OP1865', 'Closed short - balance cancelled at customer request.'), + ('MO100338', 'SATHRDNUT', DATE('2026-07-08'), DATE('2026-07-29'), DATE('2026-08-04'), 480.00, 0.00, 'C', '2', 'OP1490', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100339', 'C3600-16', DATE('2026-07-08'), DATE('2026-08-11'), DATE('2026-08-07'), 40.00, 0.00, 'C', '1', 'OP1271', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100340', 'SATHRDNUT', DATE('2026-07-08'), DATE('2026-07-29'), NULL, 800.00, 18.46, 'R', '1', 'OP1042', 'Rev B effectivity - verify seal kit callout before kitting.'), + ('MO100341', 'W991N-32', DATE('2026-07-08'), DATE('2026-07-15'), DATE('2026-07-16'), 50.00, 1.12, 'C', '2', 'OP1204', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100342', 'C6300-24', DATE('2026-07-07'), DATE('2026-07-30'), DATE('2026-07-28'), 36.00, 1.52, 'C', '1', 'OP1113', 'Closed short - balance cancelled at customer request.'), + ('MO100343', 'SABANDAL6', DATE('2026-07-07'), DATE('2026-07-29'), NULL, 450.00, 0.00, 'R', '3', 'OP1776', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO100344', 'AW2010-16', DATE('2026-07-07'), DATE('2026-07-20'), DATE('2026-07-28'), 40.00, 1.05, 'C', '2', 'OP1536', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100345', 'W902-24', DATE('2026-07-07'), DATE('2026-07-15'), DATE('2026-07-20'), 50.00, 0.00, 'C', '2', 'OP1733', 'Closed short - balance cancelled at customer request.'), + ('MO100346', 'SAPOPPET1', DATE('2026-07-07'), DATE('2026-07-30'), DATE('2026-07-28'), 80.00, 3.54, 'C', '1', 'OP1087', 'Closed complete. Shipped ahead of need date.'), + ('MO100347', 'SAHTRCORE', DATE('2026-07-07'), DATE('2026-07-17'), DATE('2026-07-16'), 240.00, 8.39, 'C', '2', 'OP1113', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100348', 'SACUSHN06', DATE('2026-07-07'), DATE('2026-07-17'), DATE('2026-07-14'), 80.00, 0.00, 'C', '2', 'OP1820', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100349', 'SACLSH32', DATE('2026-07-07'), DATE('2026-08-06'), DATE('2026-08-07'), 500.00, 8.14, 'C', '2', 'OP1156', 'Closed complete. Shipped ahead of need date.'), + ('MO100350', 'W991F-24', DATE('2026-07-06'), DATE('2026-07-27'), DATE('2026-07-30'), 12.00, 0.31, 'C', '3', 'OP1942', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100351', 'QD200-08', DATE('2026-07-06'), DATE('2026-07-10'), DATE('2026-07-20'), 50.00, 0.00, 'C', '1', 'OP1820', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100352', 'CLPTL-08', DATE('2026-07-06'), DATE('2026-07-30'), DATE('2026-07-30'), 50.00, 0.00, 'C', '1', 'OP1113', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100353', 'HTRCT-22W', DATE('2026-07-06'), DATE('2026-07-14'), DATE('2026-07-17'), 40.00, 0.00, 'C', '2', 'OP1698', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100354', 'W700-32', DATE('2026-07-06'), DATE('2026-07-22'), DATE('2026-07-29'), 100.00, 4.37, 'C', '2', 'OP1319', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100355', 'W902-32', DATE('2026-07-06'), DATE('2026-08-05'), DATE('2026-08-04'), 60.00, 0.00, 'C', '1', 'OP1364', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100356', 'HTRHS-06', DATE('2026-07-06'), DATE('2026-07-22'), DATE('2026-07-20'), 144.00, 1.45, 'C', '1', 'OP1733', 'Closed complete. Shipped ahead of need date.'), + ('MO100357', 'SACLSH32', DATE('2026-07-03'), DATE('2026-07-28'), NULL, 300.00, 0.00, 'R', '2', 'OP1238', 'Customer source inspection scheduled at final acceptance.'), + ('MO100358', 'AW2010-32', DATE('2026-07-03'), DATE('2026-07-16'), DATE('2026-07-15'), 100.00, 3.79, 'C', '2', 'OP1087', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100359', 'CLPWS-10', DATE('2026-07-03'), DATE('2026-07-17'), DATE('2026-07-22'), 240.00, 7.42, 'C', '1', 'OP1042', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100360', 'SACUSHNW8', DATE('2026-07-03'), DATE('2026-07-14'), DATE('2026-07-13'), 96.00, 3.27, 'C', '3', 'OP1907', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100361', 'AW2010-16', DATE('2026-07-03'), DATE('2026-08-04'), DATE('2026-08-07'), 240.00, 0.00, 'C', '1', 'OP1578', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100362', 'W902-16', DATE('2026-07-03'), DATE('2026-07-15'), DATE('2026-07-10'), 40.00, 0.00, 'C', '3', 'OP1698', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100363', 'W991N-32', DATE('2026-07-03'), DATE('2026-07-22'), DATE('2026-07-21'), 150.00, 0.00, 'C', '1', 'OP1271', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100364', 'AW2010-32', DATE('2026-07-03'), DATE('2026-07-15'), DATE('2026-07-22'), 60.00, 0.88, 'C', '3', 'OP1113', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100365', 'CLPBLK-12', DATE('2026-07-02'), DATE('2026-08-04'), DATE('2026-08-11'), 144.00, 2.24, 'C', '3', 'OP1490', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100366', 'W991N-32', DATE('2026-07-02'), DATE('2026-07-27'), DATE('2026-07-29'), 250.00, 1.46, 'C', '1', 'OP1988', 'Closed short - balance cancelled at customer request.'), + ('MO100367', 'WMFFN-100', DATE('2026-07-02'), DATE('2026-07-09'), DATE('2026-07-16'), 40.00, 0.00, 'C', '1', 'OP1865', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100368', 'W991F-24', DATE('2026-07-02'), DATE('2026-07-08'), DATE('2026-07-03'), 150.00, 0.00, 'C', '3', 'OP1087', 'Closed short - balance cancelled at customer request.'), + ('MO100369', 'SATHBDY32', DATE('2026-07-02'), DATE('2026-07-31'), DATE('2026-08-10'), 216.00, 0.00, 'C', '2', 'OP1942', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100370', 'SACLSH16', DATE('2026-07-02'), DATE('2026-07-23'), DATE('2026-07-21'), 360.00, 5.39, 'C', '1', 'OP1942', 'Closed complete. Shipped ahead of need date.'), + ('MO100371', 'CLPWS-10', DATE('2026-07-02'), DATE('2026-07-29'), DATE('2026-08-03'), 100.00, 0.00, 'C', '1', 'OP1820', 'Closed complete. FAI package submitted with shipment.'), + ('MO100372', 'QD6000-12', DATE('2026-07-02'), DATE('2026-07-23'), DATE('2026-07-28'), 36.00, 0.69, 'C', '1', 'OP1113', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100373', 'SACLSH32', DATE('2026-07-01'), DATE('2026-07-27'), DATE('2026-07-31'), 240.00, 7.19, 'C', '1', 'OP1364', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100374', 'QD200-08', DATE('2026-07-01'), DATE('2026-08-03'), DATE('2026-07-30'), 80.00, 0.00, 'C', '3', 'OP1113', 'Closed complete. FAI package submitted with shipment.'), + ('MO100375', 'SACUSHN06', DATE('2026-07-01'), DATE('2026-07-31'), DATE('2026-07-28'), 200.00, 0.00, 'C', '3', 'OP1536', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100376', 'W700-32', DATE('2026-07-01'), DATE('2026-07-09'), DATE('2026-07-13'), 240.00, 0.00, 'C', '1', 'OP1536', 'Closed short - balance cancelled at customer request.'), + ('MO100377', 'W991N-32', DATE('2026-07-01'), DATE('2026-07-09'), DATE('2026-07-07'), 20.00, 0.00, 'C', '3', 'OP1042', 'Closed complete. Shipped ahead of need date.'), + ('MO100378', 'SACLSH24', DATE('2026-07-01'), DATE('2026-07-30'), NULL, 150.00, 1.42, 'R', '3', 'OP1536', 'Customer source inspection scheduled at final acceptance.'), + ('MO100379', 'SAHTRHARN', DATE('2026-07-01'), DATE('2026-07-23'), DATE('2026-07-20'), 600.00, 0.00, 'C', '1', 'OP1698', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100380', 'W991F-24', DATE('2026-07-01'), DATE('2026-07-17'), DATE('2026-07-16'), 144.00, 5.41, 'C', '3', 'OP1042', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100381', 'W700-32', DATE('2026-06-30'), DATE('2026-08-03'), DATE('2026-07-31'), 36.00, 0.00, 'C', '3', 'OP1042', 'Closed complete. FAI package submitted with shipment.'), + ('MO100382', 'AW979-24', DATE('2026-06-30'), DATE('2026-07-21'), DATE('2026-07-22'), 120.00, 0.00, 'C', '3', 'OP1156', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100383', 'AW2100-24', DATE('2026-06-30'), DATE('2026-07-17'), DATE('2026-07-22'), 96.00, 1.52, 'C', '2', 'OP1536', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100384', 'SACUSHNW8', DATE('2026-06-30'), DATE('2026-07-23'), DATE('2026-07-20'), 576.00, 18.76, 'C', '1', 'OP1907', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100385', 'W991-16', DATE('2026-06-30'), DATE('2026-07-15'), DATE('2026-07-21'), 96.00, 2.27, 'C', '2', 'OP1611', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100386', 'SABODY600', DATE('2026-06-30'), DATE('2026-07-09'), DATE('2026-07-07'), 192.00, 0.00, 'C', '3', 'OP1448', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100387', 'CLPTL-08', DATE('2026-06-30'), DATE('2026-07-27'), DATE('2026-07-23'), 60.00, 0.31, 'C', '2', 'OP1733', 'Closed complete. Shipped ahead of need date.'), + ('MO100388', 'SACLSH24', DATE('2026-06-30'), DATE('2026-07-07'), DATE('2026-07-09'), 100.00, 3.90, 'C', '2', 'OP1238', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100389', 'HOSE-04S', DATE('2026-06-29'), DATE('2026-07-02'), DATE('2026-07-02'), 250.00, 1.39, 'C', '1', 'OP1698', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100390', 'SAHTRCORE', DATE('2026-06-29'), DATE('2026-07-14'), DATE('2026-07-20'), 108.00, 0.00, 'C', '1', 'OP1156', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100391', 'CLPTL-08', DATE('2026-06-29'), DATE('2026-07-24'), DATE('2026-07-22'), 150.00, 0.00, 'C', '1', 'OP1611', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100392', 'CLPWS-10', DATE('2026-06-29'), DATE('2026-07-29'), NULL, 50.00, 0.00, 'R', '3', 'OP1113', 'Long-lead titanium bar released early against forecast.'), + ('MO100393', 'SAISOEND1', DATE('2026-06-29'), DATE('2026-07-07'), DATE('2026-07-06'), 150.00, 0.00, 'C', '2', 'OP1865', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100394', 'SALATCH1', DATE('2026-06-29'), DATE('2026-07-13'), DATE('2026-07-16'), 144.00, 0.00, 'C', '2', 'OP1698', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100395', 'HTRGK-HG1', DATE('2026-06-29'), DATE('2026-07-29'), DATE('2026-07-31'), 20.00, 0.77, 'C', '3', 'OP1238', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100396', 'SALATCH1', DATE('2026-06-26'), DATE('2026-07-03'), DATE('2026-07-09'), 192.00, 8.13, 'C', '3', 'OP1238', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100397', 'W991N-32', DATE('2026-06-26'), DATE('2026-07-28'), DATE('2026-07-29'), 96.00, 0.00, 'C', '2', 'OP1536', 'Closed complete. FAI package submitted with shipment.'), + ('MO100398', 'CLPSTD-06', DATE('2026-06-26'), DATE('2026-07-29'), DATE('2026-08-03'), 25.00, 0.00, 'C', '2', 'OP1319', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100399', 'HTRCT-22W', DATE('2026-06-26'), DATE('2026-07-23'), DATE('2026-07-20'), 144.00, 2.72, 'C', '3', 'OP1907', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100400', 'FRANG-12', DATE('2026-06-26'), DATE('2026-07-20'), DATE('2026-07-20'), 80.00, 1.76, 'C', '3', 'OP1448', 'Closed short - balance cancelled at customer request.'); + +INSERT INTO MANUFACTURING_ORDERS (ORDER_ID, ITEM_ID, ORDER_DATE, EXPECTED_COMPLETION_DATE, ACTUAL_COMPLETION_DATE, QUANTITY_ORDERED, QUANTITY_SCRAPPED, STATUS, SHIFT_CODE, OPERATOR_ID, NOTES) VALUES + ('MO100401', 'QD200-16', DATE('2026-06-26'), DATE('2026-07-16'), DATE('2026-07-23'), 120.00, 0.00, 'C', '1', 'OP1364', 'Closed complete. Shipped ahead of need date.'), + ('MO100402', 'HTRRB-024', DATE('2026-06-26'), DATE('2026-07-09'), DATE('2026-07-16'), 36.00, 0.53, 'C', '2', 'OP1611', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100403', 'HTRHS-06', DATE('2026-06-26'), DATE('2026-07-20'), DATE('2026-07-28'), 36.00, 0.57, 'C', '2', 'OP1448', 'Closed complete. Shipped ahead of need date.'), + ('MO100404', 'P9400-12', DATE('2026-06-25'), DATE('2026-07-24'), DATE('2026-07-27'), 24.00, 0.00, 'C', '2', 'OP1820', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100405', 'SAISOTUB1', DATE('2026-06-25'), DATE('2026-07-28'), NULL, 50.00, 0.64, 'R', '2', 'OP1654', 'Qualification build supporting AS7510 lightning test article.'), + ('MO100406', 'SABODY600', DATE('2026-06-25'), DATE('2026-07-02'), DATE('2026-07-10'), 400.00, 11.28, 'C', '3', 'OP1204', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100407', 'AW2010-24', DATE('2026-06-25'), DATE('2026-07-01'), DATE('2026-07-08'), 60.00, 0.00, 'C', '1', 'OP1988', 'Closed complete. FAI package submitted with shipment.'), + ('MO100408', 'SACLSH24C', DATE('2026-06-25'), DATE('2026-07-28'), DATE('2026-07-27'), 288.00, 0.00, 'C', '3', 'OP1654', 'Closed complete. Shipped ahead of need date.'), + ('MO100409', 'W922N-16', DATE('2026-06-25'), DATE('2026-07-17'), DATE('2026-07-20'), 48.00, 0.00, 'C', '2', 'OP1238', 'Closed short - balance cancelled at customer request.'), + ('MO100410', 'P9600-16', DATE('2026-06-25'), DATE('2026-07-14'), DATE('2026-07-15'), 300.00, 5.70, 'C', '2', 'OP1238', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100411', 'AW2010-16', DATE('2026-06-24'), DATE('2026-07-21'), DATE('2026-07-29'), 120.00, 1.73, 'C', '1', 'OP1448', 'Closed short - balance cancelled at customer request.'), + ('MO100412', 'FRANG-12', DATE('2026-06-24'), DATE('2026-07-27'), DATE('2026-08-03'), 24.00, 0.00, 'C', '2', 'OP1364', 'Closed complete. Shipped ahead of need date.'), + ('MO100413', 'SASLEEVE1', DATE('2026-06-24'), DATE('2026-07-28'), DATE('2026-07-23'), 40.00, 0.00, 'C', '3', 'OP1042', 'Closed short - balance cancelled at customer request.'), + ('MO100414', 'W991-24', DATE('2026-06-24'), DATE('2026-07-02'), DATE('2026-06-29'), 12.00, 0.11, 'C', '3', 'OP1536', 'Closed short - balance cancelled at customer request.'), + ('MO100415', 'SASEALK16', DATE('2026-06-24'), DATE('2026-07-20'), DATE('2026-07-27'), 576.00, 12.46, 'C', '1', 'OP1271', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100416', 'W922N-16', DATE('2026-06-24'), DATE('2026-07-03'), DATE('2026-07-10'), 200.00, 0.00, 'C', '2', 'OP1865', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100417', 'SATHBDY24', DATE('2026-06-24'), DATE('2026-07-02'), DATE('2026-06-30'), 200.00, 4.64, 'C', '3', 'OP1654', 'Closed short - balance cancelled at customer request.'), + ('MO100418', 'P9400-12', DATE('2026-06-24'), DATE('2026-07-06'), DATE('2026-07-09'), 60.00, 1.08, 'C', '3', 'OP1113', 'Closed complete. Shipped ahead of need date.'), + ('MO100419', 'SACLSH32T', DATE('2026-06-23'), DATE('2026-07-03'), DATE('2026-07-09'), 72.00, 2.48, 'C', '3', 'OP1820', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100420', 'SABANDAL6', DATE('2026-06-23'), DATE('2026-07-24'), DATE('2026-07-23'), 432.00, 0.00, 'C', '2', 'OP1113', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100421', 'SALATCH1', DATE('2026-06-23'), DATE('2026-07-02'), DATE('2026-07-02'), 24.00, 0.00, 'C', '3', 'OP1402', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100422', 'SACUSHNW8', DATE('2026-06-23'), DATE('2026-07-16'), DATE('2026-07-20'), 300.00, 0.00, 'C', '1', 'OP1536', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100423', 'HTRCT-22W', DATE('2026-06-23'), DATE('2026-07-24'), DATE('2026-07-21'), 80.00, 0.00, 'C', '3', 'OP1820', 'Closed complete. Shipped ahead of need date.'), + ('MO100424', 'AW979-24', DATE('2026-06-23'), DATE('2026-07-15'), DATE('2026-07-15'), 120.00, 0.00, 'C', '3', 'OP1402', 'Closed complete. FAI package submitted with shipment.'), + ('MO100425', 'CLPSL-08', DATE('2026-06-23'), DATE('2026-06-30'), DATE('2026-07-06'), 200.00, 0.00, 'C', '2', 'OP1448', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100426', 'CLPSTD-06', DATE('2026-06-23'), DATE('2026-07-21'), DATE('2026-07-17'), 200.00, 0.00, 'C', '2', 'OP1611', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100427', 'CLPSL-08', DATE('2026-06-22'), DATE('2026-07-16'), DATE('2026-07-13'), 24.00, 0.00, 'C', '2', 'OP1271', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100428', 'ISOH-0500', DATE('2026-06-22'), DATE('2026-07-09'), DATE('2026-07-15'), 50.00, 1.91, 'C', '1', 'OP1654', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100429', 'SABANDAL6', DATE('2026-06-22'), DATE('2026-07-22'), DATE('2026-07-28'), 600.00, 0.00, 'C', '1', 'OP1776', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100430', 'C6300-24', DATE('2026-06-22'), DATE('2026-07-14'), DATE('2026-07-15'), 100.00, 0.00, 'C', '3', 'OP1448', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100431', 'SATHBDY24', DATE('2026-06-22'), DATE('2026-07-17'), DATE('2026-07-15'), 360.00, 3.41, 'C', '2', 'OP1402', 'Closed short - balance cancelled at customer request.'), + ('MO100432', 'SATHBDY24', DATE('2026-06-22'), DATE('2026-06-26'), DATE('2026-07-02'), 96.00, 2.06, 'C', '2', 'OP1865', 'Closed short - balance cancelled at customer request.'), + ('MO100433', 'AW971-24', DATE('2026-06-22'), DATE('2026-07-01'), DATE('2026-07-08'), 24.00, 0.00, 'C', '2', 'OP1113', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100434', 'QD200-08', DATE('2026-06-22'), DATE('2026-07-16'), DATE('2026-07-24'), 200.00, 0.00, 'C', '3', 'OP1204', 'Closed short - balance cancelled at customer request.'), + ('MO100435', 'QD200-08', DATE('2026-06-19'), DATE('2026-07-17'), DATE('2026-07-14'), 120.00, 3.90, 'C', '2', 'OP1611', 'Closed complete. FAI package submitted with shipment.'), + ('MO100436', 'SASEALK32', DATE('2026-06-19'), DATE('2026-07-16'), DATE('2026-07-16'), 200.00, 0.00, 'C', '2', 'OP1820', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100437', 'AW2010-24', DATE('2026-06-19'), DATE('2026-07-22'), DATE('2026-07-22'), 150.00, 0.00, 'C', '3', 'OP1042', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100438', 'W902-16', DATE('2026-06-19'), DATE('2026-07-09'), DATE('2026-07-09'), 12.00, 0.00, 'C', '3', 'OP1865', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100439', 'SASEALK32', DATE('2026-06-19'), DATE('2026-06-25'), DATE('2026-06-24'), 200.00, 0.00, 'C', '1', 'OP1448', 'Closed short - balance cancelled at customer request.'), + ('MO100440', 'SABODY600', DATE('2026-06-19'), DATE('2026-06-25'), DATE('2026-07-01'), 600.00, 5.58, 'C', '1', 'OP1698', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100441', 'SATHBDY32', DATE('2026-06-19'), DATE('2026-06-30'), DATE('2026-06-29'), 40.00, 1.27, 'C', '1', 'OP1042', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100442', 'PVFUSE-12', DATE('2026-06-19'), DATE('2026-07-17'), DATE('2026-07-15'), 48.00, 0.00, 'C', '1', 'OP1402', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100443', 'F63052-32', DATE('2026-06-18'), DATE('2026-07-13'), DATE('2026-07-16'), 200.00, 3.77, 'C', '3', 'OP1578', 'Closed complete. Shipped ahead of need date.'), + ('MO100444', 'CLPTL-08', DATE('2026-06-18'), DATE('2026-06-23'), DATE('2026-06-23'), 36.00, 0.62, 'C', '3', 'OP1942', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100445', 'HTRHS-06', DATE('2026-06-18'), DATE('2026-07-21'), DATE('2026-07-20'), 100.00, 2.48, 'C', '3', 'OP1402', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100446', 'HTRCT-22W', DATE('2026-06-18'), DATE('2026-07-03'), DATE('2026-07-08'), 80.00, 0.37, 'C', '3', 'OP1654', 'Closed short - balance cancelled at customer request.'), + ('MO100447', 'CLPBLK-12', DATE('2026-06-18'), DATE('2026-07-14'), DATE('2026-07-13'), 40.00, 0.00, 'C', '3', 'OP1042', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100448', 'SASEALK24', DATE('2026-06-18'), DATE('2026-07-01'), DATE('2026-06-26'), 720.00, 31.85, 'C', '2', 'OP1611', 'Closed complete. Shipped ahead of need date.'), + ('MO100449', 'W991F-24', DATE('2026-06-18'), DATE('2026-07-03'), DATE('2026-07-07'), 200.00, 0.00, 'C', '2', 'OP1490', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100450', 'AW979-24', DATE('2026-06-18'), DATE('2026-07-14'), DATE('2026-07-15'), 36.00, 0.00, 'C', '2', 'OP1113', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100451', 'SABANDCR8', DATE('2026-06-17'), DATE('2026-06-29'), DATE('2026-06-29'), 750.00, 4.70, 'C', '1', 'OP1402', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100452', 'AW2100-24', DATE('2026-06-17'), DATE('2026-06-29'), DATE('2026-06-29'), 150.00, 5.72, 'C', '3', 'OP1204', 'Closed short - balance cancelled at customer request.'), + ('MO100453', 'SAPOPPET1', DATE('2026-06-17'), DATE('2026-07-08'), DATE('2026-07-08'), 1200.00, 0.00, 'C', '2', 'OP1698', 'Closed complete. FAI package submitted with shipment.'), + ('MO100454', 'SAHTRCORE', DATE('2026-06-17'), DATE('2026-06-23'), DATE('2026-06-23'), 150.00, 0.00, 'C', '2', 'OP1820', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100455', 'AW2100-32', DATE('2026-06-17'), DATE('2026-07-21'), DATE('2026-07-20'), 24.00, 0.00, 'C', '3', 'OP1402', 'Closed complete. FAI package submitted with shipment.'), + ('MO100456', 'QD200-08', DATE('2026-06-17'), DATE('2026-07-16'), DATE('2026-07-22'), 200.00, 1.66, 'C', '3', 'OP1907', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100457', 'SACUSHN06', DATE('2026-06-17'), DATE('2026-06-24'), DATE('2026-06-24'), 320.00, 10.92, 'C', '3', 'OP1364', 'Closed complete. Shipped ahead of need date.'), + ('MO100458', 'SACUSHN06', DATE('2026-06-17'), DATE('2026-07-13'), DATE('2026-07-20'), 180.00, 0.00, 'C', '3', 'OP1319', 'Closed short - balance cancelled at customer request.'), + ('MO100459', 'W991N-32', DATE('2026-06-16'), DATE('2026-07-13'), DATE('2026-07-13'), 24.00, 0.00, 'C', '1', 'OP1733', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100460', 'W991-24', DATE('2026-06-16'), DATE('2026-07-17'), DATE('2026-07-15'), 48.00, 0.00, 'C', '3', 'OP1238', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100461', 'SABANDCR8', DATE('2026-06-16'), DATE('2026-07-10'), DATE('2026-07-17'), 192.00, 0.00, 'C', '3', 'OP1865', 'Closed short - balance cancelled at customer request.'), + ('MO100462', 'SABANDCR8', DATE('2026-06-16'), DATE('2026-07-02'), DATE('2026-07-08'), 144.00, 3.08, 'C', '1', 'OP1820', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100463', 'C6300-24', DATE('2026-06-16'), DATE('2026-07-07'), DATE('2026-07-03'), 150.00, 6.51, 'C', '2', 'OP1448', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100464', 'QD200-08', DATE('2026-06-16'), DATE('2026-07-17'), DATE('2026-07-16'), 36.00, 1.60, 'C', '1', 'OP1402', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100465', 'W991N-32', DATE('2026-06-16'), DATE('2026-06-30'), DATE('2026-06-26'), 120.00, 0.00, 'C', '1', 'OP1865', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100466', 'W922N-16', DATE('2026-06-15'), DATE('2026-07-15'), DATE('2026-07-13'), 24.00, 0.00, 'C', '2', 'OP1087', 'Closed complete. FAI package submitted with shipment.'), + ('MO100467', 'AW971-16', DATE('2026-06-15'), DATE('2026-06-25'), DATE('2026-07-01'), 72.00, 1.84, 'C', '3', 'OP1319', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100468', 'W991N-32', DATE('2026-06-15'), DATE('2026-07-02'), DATE('2026-07-07'), 72.00, 0.00, 'C', '3', 'OP1654', 'Closed complete. FAI package submitted with shipment.'), + ('MO100469', 'SASEALK16', DATE('2026-06-15'), DATE('2026-07-15'), DATE('2026-07-13'), 144.00, 0.00, 'C', '2', 'OP1087', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100470', 'QD200-08', DATE('2026-06-15'), DATE('2026-07-06'), DATE('2026-07-09'), 80.00, 0.00, 'C', '2', 'OP1907', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100471', 'HTRCT-22W', DATE('2026-06-15'), DATE('2026-06-23'), DATE('2026-06-26'), 200.00, 7.43, 'C', '2', 'OP1865', 'Closed complete. FAI package submitted with shipment.'), + ('MO100472', 'AW971-24', DATE('2026-06-15'), DATE('2026-07-09'), DATE('2026-07-13'), 240.00, 4.97, 'C', '3', 'OP1156', 'Closed complete. Shipped ahead of need date.'), + ('MO100473', 'SATHRDNUT', DATE('2026-06-15'), DATE('2026-07-16'), DATE('2026-07-15'), 400.00, 4.56, 'C', '1', 'OP1865', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100474', 'W991-16', DATE('2026-06-12'), DATE('2026-07-15'), DATE('2026-07-21'), 120.00, 2.39, 'C', '3', 'OP1319', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100475', 'F63052-24', DATE('2026-06-12'), DATE('2026-07-15'), DATE('2026-07-23'), 240.00, 5.54, 'C', '3', 'OP1988', 'Closed complete. FAI package submitted with shipment.'), + ('MO100476', 'SACLSH24', DATE('2026-06-12'), DATE('2026-07-16'), DATE('2026-07-24'), 216.00, 6.02, 'C', '1', 'OP1865', 'Closed complete. FAI package submitted with shipment.'), + ('MO100477', 'SATHBDY24', DATE('2026-06-12'), DATE('2026-06-22'), DATE('2026-06-17'), 300.00, 0.00, 'C', '1', 'OP1820', 'Closed complete. FAI package submitted with shipment.'), + ('MO100478', 'SACUSHNW8', DATE('2026-06-12'), DATE('2026-06-19'), DATE('2026-06-17'), 72.00, 0.72, 'C', '3', 'OP1578', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100479', 'SAISOTUB2', DATE('2026-06-12'), DATE('2026-07-16'), DATE('2026-07-23'), 288.00, 0.00, 'C', '3', 'OP1865', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100480', 'CLPBLK-12', DATE('2026-06-12'), DATE('2026-07-14'), DATE('2026-07-20'), 60.00, 0.00, 'C', '2', 'OP1271', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100481', 'P9600-16', DATE('2026-06-12'), DATE('2026-06-26'), DATE('2026-06-30'), 250.00, 0.00, 'C', '1', 'OP1204', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100482', 'SACLSH16', DATE('2026-06-11'), DATE('2026-07-15'), DATE('2026-07-10'), 400.00, 3.69, 'C', '2', 'OP1733', 'Closed short - balance cancelled at customer request.'), + ('MO100483', 'AW971-16', DATE('2026-06-11'), DATE('2026-07-07'), DATE('2026-07-06'), 96.00, 0.00, 'C', '3', 'OP1578', 'Closed complete. Shipped ahead of need date.'), + ('MO100484', 'SACLSH32T', DATE('2026-06-11'), DATE('2026-06-16'), DATE('2026-06-23'), 240.00, 0.00, 'C', '1', 'OP1988', 'Closed short - balance cancelled at customer request.'), + ('MO100485', 'QD200-16', DATE('2026-06-11'), DATE('2026-07-08'), DATE('2026-07-15'), 12.00, 0.00, 'C', '3', 'OP1042', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100486', 'SACLSH24C', DATE('2026-06-11'), DATE('2026-07-02'), DATE('2026-07-01'), 432.00, 0.00, 'C', '3', 'OP1364', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100487', 'SABODY200', DATE('2026-06-11'), DATE('2026-06-17'), DATE('2026-06-22'), 72.00, 1.01, 'C', '3', 'OP1271', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100488', 'SABODY600', DATE('2026-06-11'), DATE('2026-06-30'), DATE('2026-07-02'), 48.00, 1.22, 'C', '3', 'OP1087', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100489', 'SABODY200', DATE('2026-06-11'), DATE('2026-07-01'), DATE('2026-06-26'), 480.00, 3.41, 'C', '2', 'OP1402', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100490', 'WMFFR-100', DATE('2026-06-10'), DATE('2026-06-17'), DATE('2026-06-25'), 100.00, 3.78, 'C', '2', 'OP1733', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100491', 'HTRGK-HG1', DATE('2026-06-10'), DATE('2026-07-10'), DATE('2026-07-17'), 25.00, 0.28, 'C', '3', 'OP1733', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100492', 'HOSE-04S', DATE('2026-06-10'), DATE('2026-07-14'), DATE('2026-07-14'), 72.00, 3.23, 'C', '1', 'OP1490', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100493', 'SACLSH32', DATE('2026-06-10'), DATE('2026-06-17'), DATE('2026-06-19'), 288.00, 12.37, 'C', '2', 'OP1319', 'Closed short - balance cancelled at customer request.'), + ('MO100494', 'CLPSTD-06', DATE('2026-06-10'), DATE('2026-07-13'), DATE('2026-07-09'), 80.00, 2.65, 'C', '2', 'OP1319', 'Closed short - balance cancelled at customer request.'), + ('MO100495', 'SAHTRCORE', DATE('2026-06-10'), DATE('2026-06-15'), DATE('2026-06-10'), 480.00, 17.20, 'C', '2', 'OP1654', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100496', 'CLPWS-10', DATE('2026-06-10'), DATE('2026-07-06'), DATE('2026-07-14'), 36.00, 0.00, 'C', '2', 'OP1319', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100497', 'SABANDCR8', DATE('2026-06-09'), DATE('2026-07-02'), DATE('2026-07-08'), 300.00, 0.00, 'C', '2', 'OP1733', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100498', 'SATHBDY32', DATE('2026-06-09'), DATE('2026-06-22'), DATE('2026-06-30'), 120.00, 1.32, 'C', '1', 'OP1942', 'Closed complete. FAI package submitted with shipment.'), + ('MO100499', 'SAHTRHARN', DATE('2026-06-09'), DATE('2026-06-16'), DATE('2026-06-16'), 432.00, 14.69, 'C', '2', 'OP1536', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100500', 'WMFFR-100', DATE('2026-06-09'), DATE('2026-07-02'), DATE('2026-07-03'), 25.00, 0.13, 'C', '1', 'OP1087', 'Closed complete. Source inspection passed on first presentation.'); + +INSERT INTO MANUFACTURING_ORDERS (ORDER_ID, ITEM_ID, ORDER_DATE, EXPECTED_COMPLETION_DATE, ACTUAL_COMPLETION_DATE, QUANTITY_ORDERED, QUANTITY_SCRAPPED, STATUS, SHIFT_CODE, OPERATOR_ID, NOTES) VALUES + ('MO100501', 'SABODY200', DATE('2026-06-09'), DATE('2026-06-29'), DATE('2026-06-26'), 800.00, 22.56, 'C', '3', 'OP1156', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100502', 'SABODY600', DATE('2026-06-09'), DATE('2026-06-19'), DATE('2026-06-17'), 1000.00, 0.00, 'C', '3', 'OP1364', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100503', 'AW2010-32', DATE('2026-06-09'), DATE('2026-06-22'), DATE('2026-06-23'), 80.00, 0.00, 'C', '1', 'OP1204', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100504', 'SATHBDY24', DATE('2026-06-08'), DATE('2026-07-02'), DATE('2026-07-08'), 200.00, 0.00, 'C', '2', 'OP1402', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100505', 'QD6000-12', DATE('2026-06-08'), DATE('2026-07-01'), DATE('2026-06-29'), 144.00, 0.00, 'C', '3', 'OP1204', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100506', 'W991N-32', DATE('2026-06-08'), DATE('2026-06-25'), DATE('2026-06-26'), 48.00, 0.00, 'C', '1', 'OP1776', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100507', 'SAISOEND1', DATE('2026-06-08'), DATE('2026-07-09'), DATE('2026-07-13'), 100.00, 0.00, 'C', '1', 'OP1087', 'Closed complete. Shipped ahead of need date.'), + ('MO100508', 'SAHOSEAS8', DATE('2026-06-08'), DATE('2026-06-25'), DATE('2026-06-23'), 48.00, 0.84, 'C', '1', 'OP1865', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100509', 'SACLSH32', DATE('2026-06-08'), DATE('2026-06-25'), DATE('2026-06-29'), 480.00, 0.00, 'C', '1', 'OP1402', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100510', 'HTRCF-201', DATE('2026-06-08'), DATE('2026-06-19'), DATE('2026-06-18'), 144.00, 0.87, 'C', '1', 'OP1448', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100511', 'SAVTLI01', DATE('2026-06-08'), DATE('2026-06-16'), DATE('2026-06-15'), 1200.00, 0.00, 'C', '3', 'OP1113', 'Closed complete. Shipped ahead of need date.'), + ('MO100512', 'WMFFN-100', DATE('2026-06-05'), DATE('2026-06-15'), DATE('2026-06-22'), 200.00, 0.00, 'C', '3', 'OP1654', 'Closed complete. Shipped ahead of need date.'), + ('MO100513', 'CLPSPC-06', DATE('2026-06-05'), DATE('2026-07-03'), DATE('2026-07-08'), 120.00, 0.00, 'C', '3', 'OP1042', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100514', 'HTRCF-201', DATE('2026-06-05'), DATE('2026-07-08'), DATE('2026-07-06'), 24.00, 0.00, 'C', '3', 'OP1611', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100515', 'SATHBDY16', DATE('2026-06-05'), DATE('2026-06-12'), DATE('2026-06-22'), 180.00, 3.22, 'C', '1', 'OP1271', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100516', 'AW2100-24', DATE('2026-06-05'), DATE('2026-06-24'), DATE('2026-07-02'), 300.00, 9.88, 'C', '1', 'OP1611', 'Closed complete. Shipped ahead of need date.'), + ('MO100517', 'W991N-32', DATE('2026-06-05'), DATE('2026-07-09'), DATE('2026-07-07'), 24.00, 0.31, 'C', '3', 'OP1578', 'Closed complete. FAI package submitted with shipment.'), + ('MO100518', 'CLPBLK-12', DATE('2026-06-05'), DATE('2026-06-18'), DATE('2026-06-22'), 25.00, 0.94, 'C', '3', 'OP1942', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100519', 'AW979-24', DATE('2026-06-05'), DATE('2026-06-25'), DATE('2026-06-26'), 20.00, 0.84, 'C', '2', 'OP1733', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100520', 'SAPOPPET1', DATE('2026-06-04'), DATE('2026-07-03'), DATE('2026-07-01'), 1200.00, 0.00, 'C', '1', 'OP1654', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100521', 'AW979-24', DATE('2026-06-04'), DATE('2026-07-02'), DATE('2026-07-09'), 24.00, 0.81, 'C', '1', 'OP1204', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100522', 'P9600-16', DATE('2026-06-04'), DATE('2026-06-30'), DATE('2026-07-03'), 36.00, 0.00, 'C', '2', 'OP1087', 'Closed complete. Shipped ahead of need date.'), + ('MO100523', 'C6300-24', DATE('2026-06-04'), DATE('2026-07-08'), DATE('2026-07-14'), 150.00, 1.26, 'C', '2', 'OP1402', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100524', 'SAHOSEAS8', DATE('2026-06-04'), DATE('2026-06-19'), DATE('2026-06-17'), 192.00, 0.00, 'C', '1', 'OP1907', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100525', 'SAPOPPET1', DATE('2026-06-04'), DATE('2026-06-25'), DATE('2026-06-23'), 72.00, 0.00, 'C', '3', 'OP1776', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100526', 'SACUSHN06', DATE('2026-06-04'), DATE('2026-06-29'), DATE('2026-07-01'), 200.00, 0.00, 'C', '3', 'OP1319', 'Closed complete. Shipped ahead of need date.'), + ('MO100527', 'AW2010-24', DATE('2026-06-03'), DATE('2026-06-15'), DATE('2026-06-23'), 72.00, 1.73, 'C', '3', 'OP1536', 'Closed complete. FAI package submitted with shipment.'), + ('MO100528', 'AW2100-32', DATE('2026-06-03'), DATE('2026-07-03'), DATE('2026-07-03'), 96.00, 1.67, 'C', '2', 'OP1865', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100529', 'P9600-16', DATE('2026-06-03'), DATE('2026-07-01'), DATE('2026-06-30'), 100.00, 3.79, 'C', '1', 'OP1733', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100530', 'SACLSH24', DATE('2026-06-03'), DATE('2026-06-26'), DATE('2026-07-01'), 600.00, 20.04, 'C', '3', 'OP1364', 'Closed short - balance cancelled at customer request.'), + ('MO100531', 'W922N-16', DATE('2026-06-03'), DATE('2026-06-17'), DATE('2026-06-19'), 250.00, 0.00, 'C', '3', 'OP1364', 'Closed complete. Shipped ahead of need date.'), + ('MO100532', 'CLPBLK-12', DATE('2026-06-03'), DATE('2026-07-06'), DATE('2026-07-10'), 300.00, 7.88, 'C', '3', 'OP1907', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100533', 'AW979-24', DATE('2026-06-03'), DATE('2026-06-18'), DATE('2026-06-19'), 50.00, 0.00, 'C', '1', 'OP1364', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100534', 'W991-16', DATE('2026-06-02'), DATE('2026-06-18'), DATE('2026-06-24'), 72.00, 0.00, 'C', '3', 'OP1087', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100535', 'W700-32', DATE('2026-06-02'), DATE('2026-06-19'), DATE('2026-06-19'), 144.00, 0.00, 'C', '2', 'OP1204', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100536', 'G620-32', DATE('2026-06-02'), DATE('2026-06-16'), DATE('2026-06-12'), 80.00, 2.25, 'C', '2', 'OP1698', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100537', 'SAWEARSH1', DATE('2026-06-02'), DATE('2026-06-11'), DATE('2026-06-19'), 360.00, 0.00, 'C', '3', 'OP1156', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100538', 'CLPBLK-12', DATE('2026-06-02'), DATE('2026-06-25'), DATE('2026-07-03'), 60.00, 2.16, 'C', '1', 'OP1988', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100539', 'SALATCH1', DATE('2026-06-02'), DATE('2026-06-16'), DATE('2026-06-11'), 300.00, 0.00, 'C', '2', 'OP1271', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100540', 'SASEALK16', DATE('2026-06-02'), DATE('2026-07-06'), DATE('2026-07-03'), 100.00, 2.53, 'C', '1', 'OP1776', 'Closed short - balance cancelled at customer request.'), + ('MO100541', 'AW971-24', DATE('2026-06-02'), DATE('2026-06-17'), DATE('2026-06-23'), 12.00, 0.49, 'C', '1', 'OP1536', 'Closed short - balance cancelled at customer request.'), + ('MO100542', 'AW971-16', DATE('2026-06-01'), DATE('2026-06-22'), DATE('2026-06-22'), 25.00, 0.00, 'C', '2', 'OP1402', 'Closed short - balance cancelled at customer request.'), + ('MO100543', 'HTRRB-024', DATE('2026-06-01'), DATE('2026-06-24'), DATE('2026-06-26'), 240.00, 0.00, 'C', '1', 'OP1271', 'Closed complete. FAI package submitted with shipment.'), + ('MO100544', 'QD200-16', DATE('2026-06-01'), DATE('2026-06-19'), DATE('2026-06-16'), 60.00, 0.66, 'C', '2', 'OP1490', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100545', 'W991-24', DATE('2026-06-01'), DATE('2026-06-15'), DATE('2026-06-17'), 12.00, 0.40, 'C', '3', 'OP1578', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100546', 'CLPSL-08', DATE('2026-06-01'), DATE('2026-07-02'), DATE('2026-07-07'), 25.00, 0.38, 'C', '1', 'OP1942', 'Closed complete. FAI package submitted with shipment.'), + ('MO100547', 'W991-16', DATE('2026-06-01'), DATE('2026-06-18'), DATE('2026-06-23'), 240.00, 0.00, 'C', '1', 'OP1113', 'Closed complete. Shipped ahead of need date.'), + ('MO100548', 'SAVTLI01', DATE('2026-06-01'), DATE('2026-06-04'), DATE('2026-06-10'), 144.00, 3.55, 'C', '1', 'OP1364', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100549', 'SAWEARSH1', DATE('2026-05-29'), DATE('2026-06-26'), DATE('2026-06-23'), 1000.00, 30.72, 'C', '2', 'OP1776', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100550', 'SAHTRHARN', DATE('2026-05-29'), DATE('2026-06-22'), DATE('2026-06-22'), 75.00, 2.61, 'C', '1', 'OP1319', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100551', 'SASLEEVE1', DATE('2026-05-29'), DATE('2026-06-18'), DATE('2026-06-22'), 300.00, 0.00, 'C', '3', 'OP1042', 'Closed complete. Shipped ahead of need date.'), + ('MO100552', 'W902-24', DATE('2026-05-29'), DATE('2026-06-29'), DATE('2026-07-06'), 240.00, 4.58, 'C', '3', 'OP1448', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100553', 'AW2010-24', DATE('2026-05-29'), DATE('2026-06-03'), DATE('2026-06-11'), 150.00, 0.00, 'C', '2', 'OP1611', 'Closed short - balance cancelled at customer request.'), + ('MO100554', 'AW2010-16', DATE('2026-05-29'), DATE('2026-06-03'), DATE('2026-06-04'), 150.00, 0.00, 'C', '3', 'OP1271', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100555', 'F63052-32', DATE('2026-05-29'), DATE('2026-06-25'), DATE('2026-06-26'), 120.00, 3.15, 'C', '2', 'OP1319', 'Closed complete. Shipped ahead of need date.'), + ('MO100556', 'AW971-24', DATE('2026-05-29'), DATE('2026-06-09'), DATE('2026-06-16'), 36.00, 0.33, 'C', '1', 'OP1402', 'Closed complete. FAI package submitted with shipment.'), + ('MO100557', 'QD200-08', DATE('2026-05-28'), DATE('2026-06-12'), DATE('2026-06-17'), 250.00, 10.81, 'C', '3', 'OP1204', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100558', 'SAISOTUB2', DATE('2026-05-28'), DATE('2026-06-16'), DATE('2026-06-18'), 600.00, 0.00, 'C', '2', 'OP1907', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100559', 'SACLSH24C', DATE('2026-05-28'), DATE('2026-06-16'), DATE('2026-06-22'), 576.00, 25.81, 'C', '2', 'OP1776', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100560', 'W922N-16', DATE('2026-05-28'), DATE('2026-06-10'), DATE('2026-06-15'), 48.00, 0.00, 'C', '2', 'OP1865', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100561', 'SAHOSEAS8', DATE('2026-05-28'), DATE('2026-06-22'), DATE('2026-06-17'), 240.00, 0.00, 'C', '3', 'OP1204', 'Closed complete. FAI package submitted with shipment.'), + ('MO100562', 'SACLSH16', DATE('2026-05-28'), DATE('2026-06-09'), DATE('2026-06-10'), 120.00, 0.00, 'C', '1', 'OP1113', 'Closed short - balance cancelled at customer request.'), + ('MO100563', 'SATHBDY16', DATE('2026-05-28'), DATE('2026-06-18'), DATE('2026-06-23'), 240.00, 0.00, 'C', '1', 'OP1654', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100564', 'W902-32', DATE('2026-05-27'), DATE('2026-06-16'), DATE('2026-06-11'), 12.00, 0.46, 'C', '3', 'OP1448', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100565', 'SACUSHNW8', DATE('2026-05-27'), DATE('2026-06-11'), DATE('2026-06-18'), 600.00, 0.00, 'C', '3', 'OP1087', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100566', 'AW2010-32', DATE('2026-05-27'), DATE('2026-06-26'), DATE('2026-07-06'), 36.00, 0.00, 'C', '3', 'OP1907', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100567', 'AW979-24', DATE('2026-05-27'), DATE('2026-06-16'), DATE('2026-06-24'), 36.00, 0.93, 'C', '3', 'OP1942', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100568', 'P9400-12', DATE('2026-05-27'), DATE('2026-06-01'), DATE('2026-06-02'), 40.00, 0.00, 'C', '3', 'OP1319', 'Closed short - balance cancelled at customer request.'), + ('MO100569', 'AW979-24', DATE('2026-05-27'), DATE('2026-06-19'), DATE('2026-06-23'), 36.00, 0.46, 'C', '3', 'OP1988', 'Closed short - balance cancelled at customer request.'), + ('MO100570', 'SABODY600', DATE('2026-05-27'), DATE('2026-06-19'), DATE('2026-06-17'), 48.00, 0.00, 'C', '1', 'OP1733', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100571', 'SASEALK16', DATE('2026-05-27'), DATE('2026-06-05'), DATE('2026-06-03'), 240.00, 8.74, 'C', '2', 'OP1907', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100572', 'CLPSPC-06', DATE('2026-05-26'), DATE('2026-06-19'), DATE('2026-06-26'), 200.00, 0.00, 'C', '2', 'OP1733', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100573', 'AW2010-32', DATE('2026-05-26'), DATE('2026-06-29'), DATE('2026-07-01'), 200.00, 0.00, 'C', '3', 'OP1907', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100574', 'SATHBDY16', DATE('2026-05-26'), DATE('2026-06-15'), DATE('2026-06-22'), 500.00, 0.00, 'C', '2', 'OP1042', 'Closed complete. Shipped ahead of need date.'), + ('MO100575', 'SAISOTUB1', DATE('2026-05-26'), DATE('2026-06-04'), DATE('2026-06-04'), 100.00, 0.00, 'C', '3', 'OP1490', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100576', 'AW2091-24', DATE('2026-05-26'), DATE('2026-06-24'), DATE('2026-07-01'), 100.00, 0.00, 'C', '1', 'OP1536', 'Closed short - balance cancelled at customer request.'), + ('MO100577', 'C6300-24', DATE('2026-05-26'), DATE('2026-06-19'), DATE('2026-06-24'), 80.00, 1.97, 'C', '1', 'OP1490', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100578', 'CLPSL-08', DATE('2026-05-26'), DATE('2026-06-05'), NULL, 48.00, 0.00, 'R', '3', 'OP1490', 'Mining channel order - ELP stock replenishment.'), + ('MO100579', 'CLPTL-08', DATE('2026-05-26'), DATE('2026-06-24'), DATE('2026-06-25'), 60.00, 2.49, 'C', '3', 'OP1733', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100580', 'G620-32', DATE('2026-05-25'), DATE('2026-06-12'), DATE('2026-06-10'), 150.00, 0.00, 'C', '1', 'OP1238', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100581', 'AW971-16', DATE('2026-05-25'), DATE('2026-06-02'), DATE('2026-06-10'), 60.00, 2.58, 'C', '3', 'OP1536', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100582', 'W991N-32', DATE('2026-05-25'), DATE('2026-06-16'), DATE('2026-06-19'), 48.00, 2.12, 'C', '2', 'OP1402', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100583', 'AW971-24', DATE('2026-05-25'), DATE('2026-06-24'), DATE('2026-06-29'), 50.00, 0.00, 'C', '3', 'OP1776', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100584', 'AW2091-24', DATE('2026-05-25'), DATE('2026-06-02'), DATE('2026-05-28'), 250.00, 0.00, 'C', '2', 'OP1113', 'Closed complete. Shipped ahead of need date.'), + ('MO100585', 'P9600-16', DATE('2026-05-25'), DATE('2026-06-11'), DATE('2026-06-12'), 60.00, 0.00, 'C', '2', 'OP1448', 'Closed complete. FAI package submitted with shipment.'), + ('MO100586', 'SAVTLI01', DATE('2026-05-25'), DATE('2026-06-04'), DATE('2026-06-02'), 160.00, 4.44, 'C', '1', 'OP1654', 'Closed complete. Shipped ahead of need date.'), + ('MO100587', 'HTRCF-201', DATE('2026-05-25'), DATE('2026-06-26'), DATE('2026-06-26'), 240.00, 5.15, 'C', '3', 'OP1319', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100588', 'AW971-16', DATE('2026-05-22'), DATE('2026-05-29'), DATE('2026-05-29'), 300.00, 0.00, 'C', '1', 'OP1042', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100589', 'AW2100-32', DATE('2026-05-22'), DATE('2026-06-08'), DATE('2026-06-16'), 50.00, 0.00, 'C', '2', 'OP1113', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100590', 'CLPTL-08', DATE('2026-05-22'), DATE('2026-06-10'), DATE('2026-06-08'), 24.00, 0.00, 'C', '2', 'OP1490', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100591', 'SALATCH1', DATE('2026-05-22'), DATE('2026-06-09'), DATE('2026-06-17'), 144.00, 0.00, 'C', '2', 'OP1820', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100592', 'F63052-24', DATE('2026-05-22'), DATE('2026-06-16'), DATE('2026-06-12'), 240.00, 0.00, 'C', '1', 'OP1364', 'Closed complete. FAI package submitted with shipment.'), + ('MO100593', 'CLPBLK-12', DATE('2026-05-22'), DATE('2026-06-10'), DATE('2026-06-05'), 250.00, 0.00, 'C', '2', 'OP1611', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100594', 'AW2010-16', DATE('2026-05-22'), DATE('2026-06-08'), DATE('2026-06-11'), 300.00, 8.93, 'C', '3', 'OP1113', 'Closed short - balance cancelled at customer request.'), + ('MO100595', 'SASLEEVE1', DATE('2026-05-22'), DATE('2026-06-10'), DATE('2026-06-12'), 24.00, 0.00, 'C', '3', 'OP1942', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100596', 'P9600-16', DATE('2026-05-21'), DATE('2026-06-18'), DATE('2026-06-24'), 12.00, 0.00, 'C', '3', 'OP1271', 'Closed complete. Shipped ahead of need date.'), + ('MO100597', 'AW971-16', DATE('2026-05-21'), DATE('2026-06-02'), DATE('2026-06-05'), 24.00, 0.00, 'C', '1', 'OP1733', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100598', 'SAWEARSH1', DATE('2026-05-21'), DATE('2026-06-17'), DATE('2026-06-16'), 288.00, 0.00, 'C', '3', 'OP1942', 'Closed short - balance cancelled at customer request.'), + ('MO100599', 'SABODY200', DATE('2026-05-21'), DATE('2026-06-24'), DATE('2026-06-22'), 36.00, 0.00, 'C', '1', 'OP1204', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100600', 'W902-16', DATE('2026-05-21'), DATE('2026-06-17'), DATE('2026-06-17'), 20.00, 0.78, 'C', '2', 'OP1733', 'Closed complete. FAI package submitted with shipment.'); + +INSERT INTO MANUFACTURING_ORDERS (ORDER_ID, ITEM_ID, ORDER_DATE, EXPECTED_COMPLETION_DATE, ACTUAL_COMPLETION_DATE, QUANTITY_ORDERED, QUANTITY_SCRAPPED, STATUS, SHIFT_CODE, OPERATOR_ID, NOTES) VALUES + ('MO100601', 'C8300-32', DATE('2026-05-21'), DATE('2026-06-23'), DATE('2026-06-19'), 24.00, 0.00, 'C', '3', 'OP1042', 'Closed complete. Shipped ahead of need date.'), + ('MO100602', 'AW2010-16', DATE('2026-05-21'), DATE('2026-06-18'), DATE('2026-06-23'), 12.00, 0.00, 'C', '2', 'OP1042', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100603', 'W991-16', DATE('2026-05-21'), DATE('2026-05-26'), DATE('2026-05-28'), 25.00, 0.81, 'C', '3', 'OP1654', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100604', 'SATHBDY32', DATE('2026-05-20'), DATE('2026-06-22'), DATE('2026-06-26'), 288.00, 0.00, 'C', '3', 'OP1865', 'Closed short - balance cancelled at customer request.'), + ('MO100605', 'C6300-24', DATE('2026-05-20'), DATE('2026-06-18'), DATE('2026-06-19'), 72.00, 0.00, 'C', '1', 'OP1113', 'Closed complete. Shipped ahead of need date.'), + ('MO100606', 'SACUSHN06', DATE('2026-05-20'), DATE('2026-06-04'), DATE('2026-06-09'), 36.00, 0.96, 'C', '1', 'OP1776', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100607', 'CLPWS-10', DATE('2026-05-20'), DATE('2026-05-26'), DATE('2026-05-25'), 48.00, 0.00, 'C', '3', 'OP1087', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100608', 'W902-32', DATE('2026-05-20'), DATE('2026-06-08'), DATE('2026-06-05'), 12.00, 0.27, 'C', '3', 'OP1204', 'Closed complete. Shipped ahead of need date.'), + ('MO100609', 'SAHOSEAS8', DATE('2026-05-20'), DATE('2026-06-03'), DATE('2026-06-03'), 240.00, 0.00, 'C', '1', 'OP1733', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100610', 'SAHTRHARN', DATE('2026-05-20'), DATE('2026-05-27'), DATE('2026-05-26'), 60.00, 0.97, 'C', '2', 'OP1536', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100611', 'AW2010-32', DATE('2026-05-19'), DATE('2026-06-05'), DATE('2026-06-12'), 96.00, 1.44, 'C', '3', 'OP1611', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100612', 'HTRRB-024', DATE('2026-05-19'), DATE('2026-06-10'), DATE('2026-06-16'), 12.00, 0.00, 'C', '3', 'OP1654', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100613', 'F63052-32', DATE('2026-05-19'), DATE('2026-06-09'), DATE('2026-06-05'), 72.00, 1.93, 'C', '1', 'OP1156', 'Closed short - balance cancelled at customer request.'), + ('MO100614', 'SACLSH16', DATE('2026-05-19'), DATE('2026-05-27'), DATE('2026-06-03'), 160.00, 0.00, 'C', '1', 'OP1988', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100615', 'CLPTL-08', DATE('2026-05-19'), DATE('2026-06-01'), DATE('2026-05-29'), 20.00, 0.00, 'C', '1', 'OP1319', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100616', 'SAHOSEAS8', DATE('2026-05-19'), DATE('2026-06-05'), DATE('2026-06-05'), 72.00, 0.00, 'C', '3', 'OP1113', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100617', 'SACUSHNW8', DATE('2026-05-19'), DATE('2026-06-08'), DATE('2026-06-04'), 100.00, 3.41, 'C', '1', 'OP1654', 'Closed short - balance cancelled at customer request.'), + ('MO100618', 'PVCHK-08', DATE('2026-05-19'), DATE('2026-06-22'), DATE('2026-06-17'), 36.00, 0.00, 'C', '1', 'OP1865', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100619', 'AW2091-24', DATE('2026-05-18'), DATE('2026-05-27'), DATE('2026-05-29'), 144.00, 0.00, 'C', '2', 'OP1319', 'Closed short - balance cancelled at customer request.'), + ('MO100620', 'CLPSTD-06', DATE('2026-05-18'), DATE('2026-06-05'), DATE('2026-06-05'), 200.00, 6.92, 'C', '2', 'OP1448', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100621', 'W902-32', DATE('2026-05-18'), DATE('2026-06-02'), DATE('2026-06-08'), 80.00, 0.00, 'C', '1', 'OP1988', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100622', 'SABANDAL6', DATE('2026-05-18'), DATE('2026-06-01'), DATE('2026-05-28'), 80.00, 0.00, 'C', '3', 'OP1402', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100623', 'PVFUSE-12', DATE('2026-05-18'), DATE('2026-05-21'), DATE('2026-05-29'), 144.00, 3.29, 'C', '1', 'OP1907', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100624', 'W700-32', DATE('2026-05-18'), DATE('2026-05-25'), DATE('2026-05-21'), 150.00, 0.00, 'C', '1', 'OP1536', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100625', 'SAISOEND1', DATE('2026-05-18'), DATE('2026-05-29'), DATE('2026-05-28'), 600.00, 0.00, 'C', '1', 'OP1733', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100626', 'CLPSL-08', DATE('2026-05-18'), DATE('2026-06-05'), DATE('2026-06-02'), 48.00, 0.00, 'C', '1', 'OP1204', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100627', 'WMFFN-100', DATE('2026-05-15'), DATE('2026-06-04'), DATE('2026-06-11'), 50.00, 0.44, 'C', '1', 'OP1113', 'Closed complete. Shipped ahead of need date.'), + ('MO100628', 'SATHRDNUT', DATE('2026-05-15'), DATE('2026-06-10'), DATE('2026-06-08'), 50.00, 1.44, 'C', '2', 'OP1490', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100629', 'W991-24', DATE('2026-05-15'), DATE('2026-06-12'), DATE('2026-06-11'), 150.00, 0.00, 'C', '3', 'OP1907', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100630', 'CLPWS-10', DATE('2026-05-15'), DATE('2026-06-05'), DATE('2026-06-09'), 150.00, 0.00, 'C', '1', 'OP1907', 'Closed complete. FAI package submitted with shipment.'), + ('MO100631', 'CLPSTD-06', DATE('2026-05-15'), DATE('2026-05-29'), DATE('2026-06-05'), 150.00, 1.71, 'C', '2', 'OP1942', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100632', 'SAISOEND1', DATE('2026-05-15'), DATE('2026-05-26'), DATE('2026-06-03'), 144.00, 5.07, 'C', '2', 'OP1578', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100633', 'PVFUSE-12', DATE('2026-05-15'), DATE('2026-06-15'), DATE('2026-06-11'), 24.00, 0.61, 'C', '1', 'OP1238', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100634', 'SAHTRCORE', DATE('2026-05-15'), DATE('2026-06-11'), DATE('2026-06-19'), 24.00, 0.00, 'C', '3', 'OP1820', 'Closed complete. Shipped ahead of need date.'), + ('MO100635', 'W902-24', DATE('2026-05-14'), DATE('2026-05-22'), DATE('2026-05-20'), 144.00, 0.00, 'C', '1', 'OP1319', 'Closed short - balance cancelled at customer request.'), + ('MO100636', 'AW2010-32', DATE('2026-05-14'), DATE('2026-05-21'), DATE('2026-05-21'), 50.00, 1.63, 'C', '3', 'OP1654', 'Closed complete. FAI package submitted with shipment.'), + ('MO100637', 'W991N-32', DATE('2026-05-14'), DATE('2026-05-22'), DATE('2026-05-29'), 240.00, 3.70, 'C', '3', 'OP1988', 'Closed complete. Shipped ahead of need date.'), + ('MO100638', 'SABODY600', DATE('2026-05-14'), DATE('2026-05-22'), DATE('2026-05-26'), 40.00, 1.70, 'C', '1', 'OP1611', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100639', 'SAISOEND1', DATE('2026-05-14'), DATE('2026-05-28'), DATE('2026-05-29'), 288.00, 0.00, 'C', '3', 'OP1820', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100640', 'P9400-12', DATE('2026-05-14'), DATE('2026-06-16'), DATE('2026-06-12'), 200.00, 7.55, 'C', '2', 'OP1907', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100641', 'SATHRDNUT', DATE('2026-05-14'), DATE('2026-05-25'), DATE('2026-05-29'), 384.00, 0.00, 'C', '1', 'OP1536', 'Closed short - balance cancelled at customer request.'), + ('MO100642', 'HTRHS-06', DATE('2026-05-14'), DATE('2026-06-03'), DATE('2026-06-09'), 200.00, 0.00, 'C', '2', 'OP1204', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100643', 'CLPSPC-06', DATE('2026-05-13'), DATE('2026-06-08'), DATE('2026-06-11'), 48.00, 0.00, 'C', '3', 'OP1364', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100644', 'SASEALK32', DATE('2026-05-13'), DATE('2026-06-08'), DATE('2026-06-08'), 24.00, 1.08, 'C', '2', 'OP1087', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100645', 'CLPSL-08', DATE('2026-05-13'), DATE('2026-06-04'), DATE('2026-06-09'), 150.00, 0.00, 'C', '2', 'OP1820', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100646', 'AW2091-24', DATE('2026-05-13'), DATE('2026-06-03'), DATE('2026-06-11'), 40.00, 0.00, 'C', '1', 'OP1490', 'Closed complete. FAI package submitted with shipment.'), + ('MO100647', 'W902-16', DATE('2026-05-13'), DATE('2026-05-22'), DATE('2026-05-25'), 96.00, 1.32, 'C', '2', 'OP1776', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100648', 'W991N-32', DATE('2026-05-13'), DATE('2026-06-16'), DATE('2026-06-15'), 80.00, 0.00, 'C', '3', 'OP1238', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100649', 'CLPWS-10', DATE('2026-05-13'), DATE('2026-05-21'), DATE('2026-05-27'), 12.00, 0.22, 'C', '3', 'OP1865', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100650', 'SACLSH16', DATE('2026-05-13'), DATE('2026-05-21'), DATE('2026-05-21'), 50.00, 0.00, 'C', '1', 'OP1364', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100651', 'SAHTRCORE', DATE('2026-05-12'), DATE('2026-05-19'), DATE('2026-05-14'), 300.00, 0.00, 'C', '3', 'OP1087', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100652', 'AW971-16', DATE('2026-05-12'), DATE('2026-05-19'), DATE('2026-05-15'), 300.00, 0.00, 'C', '3', 'OP1402', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100653', 'CLPTL-08', DATE('2026-05-12'), DATE('2026-06-08'), DATE('2026-06-15'), 150.00, 0.99, 'C', '1', 'OP1988', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100654', 'W902-32', DATE('2026-05-12'), DATE('2026-05-29'), DATE('2026-05-26'), 36.00, 0.33, 'C', '1', 'OP1611', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100655', 'SAWEARSH1', DATE('2026-05-12'), DATE('2026-06-09'), DATE('2026-06-16'), 108.00, 0.00, 'C', '2', 'OP1490', 'Closed complete. FAI package submitted with shipment.'), + ('MO100656', 'W991-16', DATE('2026-05-12'), DATE('2026-06-02'), DATE('2026-06-02'), 20.00, 0.00, 'C', '1', 'OP1156', 'Closed short - balance cancelled at customer request.'), + ('MO100657', 'AW2100-24', DATE('2026-05-12'), DATE('2026-06-10'), DATE('2026-06-16'), 96.00, 0.00, 'C', '1', 'OP1156', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100658', 'SACUSHNW8', DATE('2026-05-11'), DATE('2026-06-11'), DATE('2026-06-09'), 80.00, 2.82, 'C', '3', 'OP1204', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100659', 'HTRGK-HG1', DATE('2026-05-11'), DATE('2026-06-12'), DATE('2026-06-16'), 300.00, 0.00, 'C', '1', 'OP1733', 'Closed short - balance cancelled at customer request.'), + ('MO100660', 'CLPTL-08', DATE('2026-05-11'), DATE('2026-06-10'), DATE('2026-06-08'), 24.00, 0.54, 'C', '1', 'OP1238', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100661', 'ISOH-0500', DATE('2026-05-11'), DATE('2026-05-19'), DATE('2026-05-26'), 144.00, 2.66, 'C', '3', 'OP1448', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100662', 'AW971-16', DATE('2026-05-11'), DATE('2026-06-01'), DATE('2026-06-08'), 60.00, 1.56, 'C', '1', 'OP1238', 'Closed complete. Shipped ahead of need date.'), + ('MO100663', 'P9400-12', DATE('2026-05-11'), DATE('2026-05-15'), DATE('2026-05-21'), 80.00, 0.00, 'C', '1', 'OP1578', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100664', 'W991N-32', DATE('2026-05-11'), DATE('2026-05-25'), DATE('2026-06-01'), 12.00, 0.23, 'C', '1', 'OP1490', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100665', 'SALATCH1', DATE('2026-05-08'), DATE('2026-05-15'), DATE('2026-05-13'), 300.00, 0.00, 'C', '1', 'OP1733', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100666', 'SASEALK16', DATE('2026-05-08'), DATE('2026-05-25'), DATE('2026-05-21'), 240.00, 0.00, 'C', '3', 'OP1402', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100667', 'QD200-08', DATE('2026-05-08'), DATE('2026-05-27'), DATE('2026-06-04'), 25.00, 0.00, 'C', '3', 'OP1448', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100668', 'SABODY600', DATE('2026-05-08'), DATE('2026-05-19'), DATE('2026-05-27'), 480.00, 6.79, 'C', '2', 'OP1490', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100669', 'P9100-08', DATE('2026-05-08'), DATE('2026-06-10'), DATE('2026-06-09'), 200.00, 0.00, 'C', '3', 'OP1319', 'Closed short - balance cancelled at customer request.'), + ('MO100670', 'AW2010-16', DATE('2026-05-08'), DATE('2026-06-08'), DATE('2026-06-09'), 20.00, 0.00, 'C', '1', 'OP1578', 'Closed complete. Shipped ahead of need date.'), + ('MO100671', 'W991N-32', DATE('2026-05-08'), DATE('2026-06-03'), DATE('2026-06-09'), 300.00, 0.00, 'C', '2', 'OP1942', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100672', 'SATHBDY32', DATE('2026-05-08'), DATE('2026-05-21'), DATE('2026-05-27'), 160.00, 0.00, 'C', '2', 'OP1271', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100673', 'AW2100-32', DATE('2026-05-07'), DATE('2026-06-10'), DATE('2026-06-09'), 80.00, 2.99, 'C', '2', 'OP1733', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100674', 'SACLSH16', DATE('2026-05-07'), DATE('2026-05-14'), DATE('2026-05-18'), 288.00, 8.45, 'C', '3', 'OP1578', 'Closed complete. FAI package submitted with shipment.'), + ('MO100675', 'SASLEEVE1', DATE('2026-05-07'), DATE('2026-06-01'), DATE('2026-06-01'), 288.00, 10.77, 'C', '1', 'OP1448', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100676', 'P9600-16', DATE('2026-05-07'), DATE('2026-05-26'), DATE('2026-05-28'), 72.00, 0.00, 'C', '1', 'OP1776', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100677', 'HTRGK-HG1', DATE('2026-05-07'), DATE('2026-06-09'), DATE('2026-06-17'), 24.00, 1.07, 'C', '2', 'OP1364', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100678', 'FRANG-12', DATE('2026-05-07'), DATE('2026-05-21'), DATE('2026-05-20'), 12.00, 0.00, 'C', '1', 'OP1490', 'Closed short - balance cancelled at customer request.'), + ('MO100679', 'SAISOTUB1', DATE('2026-05-07'), DATE('2026-06-03'), DATE('2026-06-09'), 600.00, 0.00, 'C', '2', 'OP1113', 'Closed short - balance cancelled at customer request.'), + ('MO100680', 'QD200-08', DATE('2026-05-06'), DATE('2026-05-11'), DATE('2026-05-14'), 300.00, 10.16, 'C', '3', 'OP1156', 'Closed complete. Shipped ahead of need date.'), + ('MO100681', 'AW2100-24', DATE('2026-05-06'), DATE('2026-05-28'), DATE('2026-05-25'), 50.00, 0.00, 'C', '3', 'OP1087', 'Closed complete. FAI package submitted with shipment.'), + ('MO100682', 'SATHBDY24', DATE('2026-05-06'), DATE('2026-05-19'), DATE('2026-05-26'), 192.00, 0.00, 'C', '3', 'OP1733', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100683', 'SACLSH24', DATE('2026-05-06'), DATE('2026-05-11'), DATE('2026-05-06'), 192.00, 0.00, 'C', '1', 'OP1042', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100684', 'CLPBLK-12', DATE('2026-05-06'), DATE('2026-05-13'), DATE('2026-05-12'), 36.00, 0.00, 'C', '1', 'OP1536', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100685', 'AW2100-32', DATE('2026-05-06'), DATE('2026-06-04'), DATE('2026-06-05'), 144.00, 0.00, 'C', '2', 'OP1988', 'Closed complete. Shipped ahead of need date.'), + ('MO100686', 'SACLSH24', DATE('2026-05-06'), DATE('2026-05-12'), DATE('2026-05-15'), 192.00, 7.45, 'C', '1', 'OP1087', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100687', 'SABODY200', DATE('2026-05-06'), DATE('2026-05-18'), DATE('2026-05-25'), 160.00, 6.72, 'C', '1', 'OP1204', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100688', 'SAVTLI01', DATE('2026-05-05'), DATE('2026-05-08'), DATE('2026-05-12'), 480.00, 3.22, 'C', '3', 'OP1611', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100689', 'SAISOTUB2', DATE('2026-05-05'), DATE('2026-05-19'), DATE('2026-05-19'), 240.00, 0.00, 'C', '2', 'OP1042', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100690', 'AW2010-16', DATE('2026-05-05'), DATE('2026-06-08'), DATE('2026-06-11'), 200.00, 0.00, 'C', '3', 'OP1364', 'Closed short - balance cancelled at customer request.'), + ('MO100691', 'HTRCF-201', DATE('2026-05-05'), DATE('2026-05-14'), DATE('2026-05-11'), 120.00, 0.00, 'C', '2', 'OP1271', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100692', 'AW2100-32', DATE('2026-05-05'), DATE('2026-06-08'), DATE('2026-06-16'), 24.00, 0.70, 'C', '3', 'OP1988', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100693', 'SABANDCR8', DATE('2026-05-05'), DATE('2026-05-20'), DATE('2026-05-21'), 400.00, 0.00, 'C', '3', 'OP1698', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100694', 'SACLSH32T', DATE('2026-05-05'), DATE('2026-05-12'), DATE('2026-05-19'), 108.00, 3.09, 'C', '3', 'OP1156', 'Closed short - balance cancelled at customer request.'), + ('MO100695', 'CLPSL-08', DATE('2026-05-05'), DATE('2026-05-15'), DATE('2026-05-20'), 100.00, 0.00, 'C', '1', 'OP1654', 'Closed complete. FAI package submitted with shipment.'), + ('MO100696', 'C6300-24', DATE('2026-05-04'), DATE('2026-05-21'), DATE('2026-05-29'), 48.00, 1.59, 'C', '3', 'OP1113', 'Closed complete. FAI package submitted with shipment.'), + ('MO100697', 'SABODY600', DATE('2026-05-04'), DATE('2026-05-29'), DATE('2026-06-01'), 80.00, 2.87, 'C', '1', 'OP1611', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100698', 'SATHBDY24', DATE('2026-05-04'), DATE('2026-05-14'), DATE('2026-05-13'), 960.00, 32.36, 'C', '1', 'OP1776', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100699', 'SACUSHN06', DATE('2026-05-04'), DATE('2026-05-15'), DATE('2026-05-25'), 96.00, 3.04, 'C', '2', 'OP1578', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100700', 'SAHOSEAS8', DATE('2026-05-04'), DATE('2026-05-07'), DATE('2026-05-08'), 144.00, 2.46, 'C', '1', 'OP1087', 'Closed complete. Cushion bond verified per process spec.'); + +INSERT INTO MANUFACTURING_ORDERS (ORDER_ID, ITEM_ID, ORDER_DATE, EXPECTED_COMPLETION_DATE, ACTUAL_COMPLETION_DATE, QUANTITY_ORDERED, QUANTITY_SCRAPPED, STATUS, SHIFT_CODE, OPERATOR_ID, NOTES) VALUES + ('MO100701', 'HOSE-08L', DATE('2026-05-04'), DATE('2026-05-11'), DATE('2026-05-07'), 20.00, 0.28, 'C', '1', 'OP1490', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100702', 'W991-24', DATE('2026-05-04'), DATE('2026-05-27'), DATE('2026-06-04'), 72.00, 0.00, 'C', '2', 'OP1578', 'Closed complete. Shipped ahead of need date.'), + ('MO100703', 'W991-16', DATE('2026-05-04'), DATE('2026-05-14'), DATE('2026-05-14'), 20.00, 0.87, 'C', '3', 'OP1448', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100704', 'WMLQD-075', DATE('2026-05-01'), DATE('2026-05-29'), DATE('2026-06-05'), 96.00, 0.00, 'C', '3', 'OP1042', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100705', 'CLPSPC-06', DATE('2026-05-01'), DATE('2026-05-22'), DATE('2026-05-29'), 80.00, 1.96, 'C', '2', 'OP1204', 'Closed short - balance cancelled at customer request.'), + ('MO100706', 'W991-16', DATE('2026-05-01'), DATE('2026-05-13'), DATE('2026-05-12'), 100.00, 3.78, 'C', '2', 'OP1204', 'Closed complete. FAI package submitted with shipment.'), + ('MO100707', 'P9100-08', DATE('2026-05-01'), DATE('2026-05-06'), DATE('2026-05-13'), 80.00, 1.82, 'C', '3', 'OP1988', 'Closed short - balance cancelled at customer request.'), + ('MO100708', 'CLPSL-08', DATE('2026-05-01'), DATE('2026-05-21'), DATE('2026-05-25'), 72.00, 2.95, 'C', '3', 'OP1087', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100709', 'W902-24', DATE('2026-05-01'), DATE('2026-05-13'), DATE('2026-05-20'), 12.00, 0.08, 'C', '3', 'OP1698', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100710', 'SACUSHN06', DATE('2026-05-01'), DATE('2026-05-20'), DATE('2026-05-28'), 40.00, 0.00, 'C', '1', 'OP1942', 'Closed short - balance cancelled at customer request.'), + ('MO100711', 'P9400-12', DATE('2026-05-01'), DATE('2026-05-18'), DATE('2026-05-13'), 240.00, 0.00, 'C', '2', 'OP1448', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100712', 'AW971-24', DATE('2026-04-30'), DATE('2026-05-29'), DATE('2026-06-01'), 300.00, 0.00, 'C', '1', 'OP1733', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100713', 'SASLEEVE1', DATE('2026-04-30'), DATE('2026-06-01'), DATE('2026-06-03'), 75.00, 3.07, 'C', '2', 'OP1042', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100714', 'SACUSHN06', DATE('2026-04-30'), DATE('2026-06-03'), DATE('2026-06-11'), 400.00, 0.00, 'C', '3', 'OP1611', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100715', 'AW2100-32', DATE('2026-04-30'), DATE('2026-05-20'), DATE('2026-05-27'), 40.00, 0.00, 'C', '3', 'OP1654', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100716', 'CLPBLK-12', DATE('2026-04-30'), DATE('2026-05-12'), DATE('2026-05-07'), 12.00, 0.25, 'C', '3', 'OP1654', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100717', 'W902-16', DATE('2026-04-30'), DATE('2026-05-06'), DATE('2026-05-04'), 60.00, 0.00, 'C', '3', 'OP1156', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100718', 'SACLSH24', DATE('2026-04-30'), DATE('2026-06-01'), DATE('2026-06-08'), 48.00, 0.72, 'C', '3', 'OP1733', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100719', 'CLPBLK-12', DATE('2026-04-29'), DATE('2026-05-25'), DATE('2026-06-02'), 25.00, 0.00, 'C', '1', 'OP1907', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100720', 'SACLSH32T', DATE('2026-04-29'), DATE('2026-05-19'), DATE('2026-05-20'), 160.00, 2.81, 'C', '1', 'OP1042', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100721', 'HOSE-08L', DATE('2026-04-29'), DATE('2026-05-28'), DATE('2026-05-29'), 96.00, 0.00, 'C', '2', 'OP1865', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100722', 'SACLSH24', DATE('2026-04-29'), DATE('2026-05-06'), DATE('2026-05-01'), 240.00, 7.64, 'C', '2', 'OP1907', 'Closed complete. Shipped ahead of need date.'), + ('MO100723', 'SABODY200', DATE('2026-04-29'), DATE('2026-05-26'), DATE('2026-05-29'), 300.00, 2.39, 'C', '2', 'OP1448', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100724', 'SASLEEVE1', DATE('2026-04-29'), DATE('2026-05-06'), DATE('2026-05-08'), 40.00, 0.00, 'C', '1', 'OP1113', 'Closed complete. Shipped ahead of need date.'), + ('MO100725', 'SABANDCR8', DATE('2026-04-29'), DATE('2026-05-27'), DATE('2026-05-28'), 160.00, 4.45, 'C', '2', 'OP1448', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100726', 'SAISOEND1', DATE('2026-04-29'), DATE('2026-05-04'), DATE('2026-05-07'), 72.00, 0.00, 'C', '2', 'OP1698', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100727', 'SACUSHNW8', DATE('2026-04-28'), DATE('2026-05-08'), DATE('2026-05-05'), 1200.00, 0.00, 'C', '3', 'OP1042', 'Closed complete. Shipped ahead of need date.'), + ('MO100728', 'SATHBDY32', DATE('2026-04-28'), DATE('2026-05-11'), DATE('2026-05-13'), 48.00, 0.37, 'C', '1', 'OP1654', 'Closed short - balance cancelled at customer request.'), + ('MO100729', 'SATHBDY24', DATE('2026-04-28'), DATE('2026-05-25'), DATE('2026-05-25'), 240.00, 5.27, 'C', '2', 'OP1238', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100730', 'W902-24', DATE('2026-04-28'), DATE('2026-05-08'), DATE('2026-05-05'), 12.00, 0.13, 'C', '2', 'OP1364', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100731', 'CLPTL-08', DATE('2026-04-28'), DATE('2026-05-13'), DATE('2026-05-11'), 25.00, 0.00, 'C', '2', 'OP1113', 'Closed complete. FAI package submitted with shipment.'), + ('MO100732', 'QD6000-12', DATE('2026-04-28'), DATE('2026-05-25'), DATE('2026-05-25'), 20.00, 0.00, 'C', '2', 'OP1204', 'Closed complete. FAI package submitted with shipment.'), + ('MO100733', 'AW971-24', DATE('2026-04-28'), DATE('2026-05-21'), DATE('2026-05-25'), 250.00, 0.00, 'C', '1', 'OP1820', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100734', 'SABODY600', DATE('2026-04-27'), DATE('2026-05-29'), DATE('2026-06-01'), 180.00, 6.55, 'C', '1', 'OP1319', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100735', 'SAHOSEAS8', DATE('2026-04-27'), DATE('2026-05-11'), DATE('2026-05-18'), 100.00, 0.00, 'C', '2', 'OP1865', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100736', 'P9600-16', DATE('2026-04-27'), DATE('2026-05-08'), DATE('2026-05-07'), 48.00, 1.76, 'C', '2', 'OP1776', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100737', 'F63052-24', DATE('2026-04-27'), DATE('2026-05-26'), DATE('2026-05-27'), 96.00, 0.00, 'C', '3', 'OP1402', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100738', 'SATHRDNUT', DATE('2026-04-27'), DATE('2026-05-26'), DATE('2026-06-02'), 160.00, 6.60, 'C', '2', 'OP1271', 'Closed complete. FAI package submitted with shipment.'), + ('MO100739', 'AW2010-32', DATE('2026-04-27'), DATE('2026-05-18'), DATE('2026-05-22'), 100.00, 2.58, 'C', '2', 'OP1578', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100740', 'SAHTRHARN', DATE('2026-04-27'), DATE('2026-05-04'), DATE('2026-05-06'), 1000.00, 0.00, 'C', '2', 'OP1536', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100741', 'AW2010-16', DATE('2026-04-24'), DATE('2026-05-27'), DATE('2026-05-29'), 50.00, 0.00, 'C', '2', 'OP1654', 'Closed complete. FAI package submitted with shipment.'), + ('MO100742', 'P9600-16', DATE('2026-04-24'), DATE('2026-05-21'), DATE('2026-05-19'), 240.00, 6.76, 'C', '3', 'OP1865', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100743', 'AW2100-32', DATE('2026-04-24'), DATE('2026-05-25'), DATE('2026-05-21'), 40.00, 0.00, 'C', '2', 'OP1402', 'Closed short - balance cancelled at customer request.'), + ('MO100744', 'SACLSH24', DATE('2026-04-24'), DATE('2026-05-12'), DATE('2026-05-18'), 300.00, 0.00, 'C', '2', 'OP1907', 'Closed complete. Shipped ahead of need date.'), + ('MO100745', 'W902-32', DATE('2026-04-24'), DATE('2026-05-05'), DATE('2026-04-30'), 150.00, 0.00, 'C', '3', 'OP1733', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100746', 'QD200-16', DATE('2026-04-24'), DATE('2026-05-05'), DATE('2026-05-08'), 300.00, 0.00, 'C', '1', 'OP1238', 'Closed complete. Shipped ahead of need date.'), + ('MO100747', 'CLPWS-10', DATE('2026-04-24'), DATE('2026-05-05'), DATE('2026-05-08'), 25.00, 1.12, 'C', '3', 'OP1204', 'Closed short - balance cancelled at customer request.'), + ('MO100748', 'SASEALK16', DATE('2026-04-24'), DATE('2026-04-30'), DATE('2026-05-04'), 600.00, 0.00, 'C', '1', 'OP1087', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100749', 'SABODY600', DATE('2026-04-23'), DATE('2026-05-21'), DATE('2026-05-22'), 600.00, 12.57, 'C', '3', 'OP1364', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100750', 'SATHBDY32', DATE('2026-04-23'), DATE('2026-05-21'), NULL, 160.00, 0.00, 'R', '3', 'OP1402', 'Traveller reprinted after routing update; use rev 4 only.'), + ('MO100751', 'AW2010-16', DATE('2026-04-23'), DATE('2026-05-18'), DATE('2026-05-14'), 72.00, 1.19, 'C', '1', 'OP1776', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100752', 'SASLEEVE1', DATE('2026-04-23'), DATE('2026-05-08'), DATE('2026-05-11'), 48.00, 0.00, 'C', '1', 'OP1319', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100753', 'SASLEEVE1', DATE('2026-04-23'), DATE('2026-05-11'), DATE('2026-05-07'), 192.00, 4.41, 'C', '1', 'OP1988', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100754', 'W991N-32', DATE('2026-04-23'), DATE('2026-05-01'), DATE('2026-05-07'), 40.00, 0.00, 'C', '3', 'OP1654', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100755', 'CLPTL-08', DATE('2026-04-23'), DATE('2026-05-01'), DATE('2026-05-04'), 80.00, 0.00, 'C', '2', 'OP1536', 'Closed complete. FAI package submitted with shipment.'), + ('MO100756', 'AW971-24', DATE('2026-04-22'), DATE('2026-05-26'), DATE('2026-05-26'), 50.00, 0.91, 'C', '2', 'OP1865', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100757', 'PVFUSE-12', DATE('2026-04-22'), DATE('2026-04-28'), DATE('2026-04-23'), 100.00, 0.79, 'C', '3', 'OP1113', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100758', 'SATHBDY16', DATE('2026-04-22'), DATE('2026-04-27'), DATE('2026-04-22'), 200.00, 6.59, 'C', '3', 'OP1490', 'Closed complete. FAI package submitted with shipment.'), + ('MO100759', 'P9400-12', DATE('2026-04-22'), DATE('2026-05-26'), DATE('2026-05-27'), 150.00, 6.23, 'C', '1', 'OP1733', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100760', 'CLPBLK-12', DATE('2026-04-22'), DATE('2026-05-21'), DATE('2026-05-22'), 20.00, 0.44, 'C', '3', 'OP1042', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100761', 'SAWEARSH1', DATE('2026-04-22'), DATE('2026-04-29'), DATE('2026-05-05'), 48.00, 0.00, 'C', '3', 'OP1113', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100762', 'W991-24', DATE('2026-04-22'), DATE('2026-05-13'), DATE('2026-05-20'), 20.00, 0.00, 'C', '3', 'OP1578', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100763', 'W902-24', DATE('2026-04-21'), DATE('2026-05-08'), DATE('2026-05-05'), 200.00, 7.94, 'C', '3', 'OP1238', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100764', 'AW979-24', DATE('2026-04-21'), DATE('2026-05-01'), DATE('2026-05-06'), 200.00, 0.00, 'C', '1', 'OP1776', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100765', 'G620-32', DATE('2026-04-21'), DATE('2026-05-11'), DATE('2026-05-13'), 150.00, 0.00, 'C', '1', 'OP1042', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100766', 'P9600-16', DATE('2026-04-21'), DATE('2026-04-24'), DATE('2026-04-27'), 20.00, 0.00, 'C', '2', 'OP1156', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100767', 'W991F-24', DATE('2026-04-21'), DATE('2026-05-25'), DATE('2026-05-29'), 100.00, 4.43, 'C', '2', 'OP1319', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100768', 'HTRBL-112', DATE('2026-04-21'), DATE('2026-05-25'), DATE('2026-05-27'), 120.00, 0.00, 'C', '2', 'OP1578', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100769', 'AW971-24', DATE('2026-04-21'), DATE('2026-05-21'), DATE('2026-05-27'), 144.00, 6.41, 'C', '2', 'OP1490', 'Closed complete. Shipped ahead of need date.'), + ('MO100770', 'SAPOPPET1', DATE('2026-04-20'), DATE('2026-05-08'), DATE('2026-05-07'), 500.00, 0.00, 'C', '2', 'OP1204', 'Closed complete. Shipped ahead of need date.'), + ('MO100771', 'P9600-16', DATE('2026-04-20'), DATE('2026-05-07'), DATE('2026-05-04'), 40.00, 0.24, 'C', '2', 'OP1733', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100772', 'AW2100-24', DATE('2026-04-20'), DATE('2026-05-11'), DATE('2026-05-15'), 240.00, 4.38, 'C', '3', 'OP1611', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100773', 'CLPSTD-06', DATE('2026-04-20'), DATE('2026-04-29'), DATE('2026-04-28'), 24.00, 0.00, 'C', '1', 'OP1733', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100774', 'P9600-16', DATE('2026-04-20'), DATE('2026-05-08'), DATE('2026-05-14'), 240.00, 8.44, 'C', '3', 'OP1698', 'Closed complete. Shipped ahead of need date.'), + ('MO100775', 'SACUSHN06', DATE('2026-04-20'), DATE('2026-05-11'), DATE('2026-05-08'), 600.00, 0.00, 'C', '2', 'OP1490', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100776', 'AW2010-32', DATE('2026-04-20'), DATE('2026-05-19'), DATE('2026-05-15'), 100.00, 1.57, 'C', '3', 'OP1536', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100777', 'CLPSL-08', DATE('2026-04-20'), DATE('2026-05-15'), DATE('2026-05-20'), 50.00, 0.97, 'C', '1', 'OP1319', 'Closed complete. Shipped ahead of need date.'), + ('MO100778', 'PVFUSE-12', DATE('2026-04-17'), DATE('2026-05-12'), DATE('2026-05-14'), 96.00, 0.00, 'C', '2', 'OP1988', 'Closed short - balance cancelled at customer request.'), + ('MO100779', 'QD6000-12', DATE('2026-04-17'), DATE('2026-05-05'), DATE('2026-05-04'), 120.00, 0.00, 'C', '3', 'OP1042', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100780', 'F63052-32', DATE('2026-04-17'), DATE('2026-05-21'), DATE('2026-05-27'), 144.00, 4.90, 'C', '3', 'OP1113', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100781', 'P9400-12', DATE('2026-04-17'), DATE('2026-04-30'), DATE('2026-04-28'), 40.00, 0.00, 'C', '1', 'OP1204', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100782', 'CLPSTD-06', DATE('2026-04-17'), DATE('2026-05-07'), DATE('2026-05-14'), 20.00, 0.00, 'C', '3', 'OP1988', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100783', 'SABANDCR8', DATE('2026-04-17'), DATE('2026-05-21'), DATE('2026-05-26'), 40.00, 0.00, 'C', '1', 'OP1087', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100784', 'AW2091-24', DATE('2026-04-17'), DATE('2026-05-05'), DATE('2026-05-12'), 150.00, 0.00, 'C', '2', 'OP1536', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100785', 'AW2100-24', DATE('2026-04-17'), DATE('2026-05-05'), DATE('2026-05-07'), 100.00, 2.20, 'C', '2', 'OP1776', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100786', 'W902-16', DATE('2026-04-16'), DATE('2026-05-12'), DATE('2026-05-13'), 60.00, 0.00, 'C', '3', 'OP1733', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100787', 'ISOH-0500', DATE('2026-04-16'), DATE('2026-05-15'), DATE('2026-05-12'), 24.00, 0.00, 'C', '3', 'OP1942', 'Closed complete. Shipped ahead of need date.'), + ('MO100788', 'SACUSHN06', DATE('2026-04-16'), DATE('2026-04-23'), DATE('2026-05-01'), 240.00, 5.35, 'C', '2', 'OP1113', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100789', 'CLPSTD-06', DATE('2026-04-16'), DATE('2026-05-06'), DATE('2026-05-14'), 60.00, 0.00, 'C', '3', 'OP1698', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100790', 'P9600-16', DATE('2026-04-16'), DATE('2026-04-30'), DATE('2026-05-04'), 96.00, 0.00, 'C', '3', 'OP1238', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100791', 'W922N-16', DATE('2026-04-16'), DATE('2026-05-06'), DATE('2026-05-14'), 36.00, 1.13, 'C', '1', 'OP1776', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100792', 'SASLEEVE1', DATE('2026-04-16'), DATE('2026-04-30'), DATE('2026-04-29'), 288.00, 10.48, 'C', '2', 'OP1448', 'Closed complete. Shipped ahead of need date.'), + ('MO100793', 'SABODY200', DATE('2026-04-16'), DATE('2026-05-08'), DATE('2026-05-18'), 80.00, 2.12, 'C', '3', 'OP1698', 'Closed complete. Shipped ahead of need date.'), + ('MO100794', 'SACLSH24', DATE('2026-04-15'), DATE('2026-05-11'), DATE('2026-05-15'), 288.00, 7.01, 'C', '3', 'OP1907', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100795', 'SACUSHN06', DATE('2026-04-15'), DATE('2026-05-11'), DATE('2026-05-06'), 400.00, 15.61, 'C', '1', 'OP1238', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100796', 'AW2010-24', DATE('2026-04-15'), DATE('2026-05-01'), DATE('2026-05-01'), 48.00, 0.00, 'C', '2', 'OP1733', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100797', 'P9400-12', DATE('2026-04-15'), DATE('2026-05-07'), DATE('2026-05-04'), 240.00, 4.15, 'C', '1', 'OP1204', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100798', 'W902-24', DATE('2026-04-15'), DATE('2026-05-08'), DATE('2026-05-07'), 300.00, 10.23, 'C', '1', 'OP1042', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100799', 'SABODY200', DATE('2026-04-15'), DATE('2026-05-01'), DATE('2026-05-04'), 72.00, 0.00, 'C', '2', 'OP1319', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100800', 'SACUSHN06', DATE('2026-04-15'), DATE('2026-04-30'), DATE('2026-04-30'), 100.00, 0.00, 'C', '1', 'OP1204', 'Closed short - balance cancelled at customer request.'); + +INSERT INTO MANUFACTURING_ORDERS (ORDER_ID, ITEM_ID, ORDER_DATE, EXPECTED_COMPLETION_DATE, ACTUAL_COMPLETION_DATE, QUANTITY_ORDERED, QUANTITY_SCRAPPED, STATUS, SHIFT_CODE, OPERATOR_ID, NOTES) VALUES + ('MO100801', 'CLPTL-08', DATE('2026-04-15'), DATE('2026-05-13'), DATE('2026-05-19'), 300.00, 8.33, 'C', '2', 'OP1113', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100802', 'SASEALK32', DATE('2026-04-14'), DATE('2026-04-17'), DATE('2026-04-27'), 300.00, 2.08, 'C', '3', 'OP1204', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100803', 'W902-16', DATE('2026-04-14'), DATE('2026-04-29'), DATE('2026-04-29'), 150.00, 1.83, 'C', '3', 'OP1907', 'Closed complete. FAI package submitted with shipment.'), + ('MO100804', 'W902-24', DATE('2026-04-14'), DATE('2026-04-24'), DATE('2026-04-22'), 80.00, 0.00, 'C', '3', 'OP1578', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100805', 'QD6000-12', DATE('2026-04-14'), DATE('2026-04-20'), DATE('2026-04-15'), 20.00, 0.41, 'C', '2', 'OP1733', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100806', 'CLPSL-08', DATE('2026-04-14'), DATE('2026-05-04'), DATE('2026-05-07'), 96.00, 2.84, 'C', '3', 'OP1942', 'Closed complete. Shipped ahead of need date.'), + ('MO100807', 'AW2091-24', DATE('2026-04-14'), DATE('2026-04-30'), DATE('2026-05-01'), 96.00, 3.39, 'C', '2', 'OP1113', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100808', 'SABANDAL6', DATE('2026-04-14'), DATE('2026-04-30'), DATE('2026-05-06'), 100.00, 3.58, 'C', '2', 'OP1820', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100809', 'AW2010-16', DATE('2026-04-14'), DATE('2026-04-21'), DATE('2026-04-28'), 20.00, 0.00, 'C', '2', 'OP1865', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100810', 'SAISOTUB1', DATE('2026-04-13'), DATE('2026-04-28'), DATE('2026-04-29'), 80.00, 1.57, 'C', '2', 'OP1733', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100811', 'W991-24', DATE('2026-04-13'), DATE('2026-04-23'), DATE('2026-04-29'), 120.00, 0.00, 'C', '3', 'OP1364', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100812', 'W902-24', DATE('2026-04-13'), DATE('2026-04-17'), DATE('2026-04-14'), 144.00, 0.00, 'C', '3', 'OP1402', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100813', 'W902-24', DATE('2026-04-13'), DATE('2026-04-22'), DATE('2026-04-24'), 300.00, 0.00, 'C', '2', 'OP1907', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100814', 'P9400-12', DATE('2026-04-13'), DATE('2026-04-21'), DATE('2026-04-20'), 96.00, 0.00, 'C', '1', 'OP1490', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100815', 'SACUSHNW8', DATE('2026-04-13'), DATE('2026-05-06'), DATE('2026-05-07'), 300.00, 10.23, 'C', '3', 'OP1698', 'Closed complete. Shipped ahead of need date.'), + ('MO100816', 'AW2010-24', DATE('2026-04-13'), DATE('2026-05-06'), DATE('2026-05-12'), 36.00, 0.37, 'C', '1', 'OP1536', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100817', 'CLPSL-08', DATE('2026-04-10'), DATE('2026-05-08'), DATE('2026-05-14'), 80.00, 0.00, 'C', '3', 'OP1820', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100818', 'WMFFN-100', DATE('2026-04-10'), DATE('2026-04-27'), DATE('2026-04-24'), 20.00, 0.00, 'C', '3', 'OP1402', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100819', 'P9100-08', DATE('2026-04-10'), DATE('2026-05-12'), DATE('2026-05-18'), 120.00, 0.00, 'C', '1', 'OP1402', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100820', 'W700-32', DATE('2026-04-10'), DATE('2026-05-05'), DATE('2026-04-30'), 240.00, 6.99, 'C', '2', 'OP1364', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100821', 'AW971-24', DATE('2026-04-10'), DATE('2026-05-06'), DATE('2026-05-14'), 96.00, 0.00, 'C', '1', 'OP1490', 'Closed short - balance cancelled at customer request.'), + ('MO100822', 'W991N-32', DATE('2026-04-10'), DATE('2026-05-04'), DATE('2026-05-01'), 200.00, 0.00, 'C', '3', 'OP1536', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100823', 'SATHBDY16', DATE('2026-04-10'), DATE('2026-04-24'), DATE('2026-04-21'), 960.00, 0.00, 'C', '3', 'OP1402', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100824', 'CLPBLK-12', DATE('2026-04-10'), DATE('2026-05-08'), DATE('2026-05-11'), 60.00, 1.89, 'C', '2', 'OP1578', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100825', 'W991F-24', DATE('2026-04-09'), DATE('2026-05-04'), DATE('2026-04-30'), 240.00, 0.00, 'C', '3', 'OP1087', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100826', 'SAPOPPET1', DATE('2026-04-09'), DATE('2026-04-30'), DATE('2026-04-28'), 216.00, 5.30, 'C', '3', 'OP1820', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100827', 'SAHOSEAS8', DATE('2026-04-09'), DATE('2026-04-27'), DATE('2026-04-24'), 320.00, 0.00, 'C', '3', 'OP1238', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100828', 'SACUSHN06', DATE('2026-04-09'), DATE('2026-05-05'), DATE('2026-05-07'), 180.00, 0.00, 'C', '3', 'OP1490', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100829', 'CLPBLK-12', DATE('2026-04-09'), DATE('2026-04-29'), DATE('2026-05-04'), 40.00, 0.79, 'C', '2', 'OP1087', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100830', 'SACLSH16', DATE('2026-04-09'), DATE('2026-04-14'), DATE('2026-04-14'), 192.00, 0.00, 'C', '3', 'OP1578', 'Closed short - balance cancelled at customer request.'), + ('MO100831', 'AW2010-24', DATE('2026-04-09'), DATE('2026-04-23'), DATE('2026-05-01'), 60.00, 0.69, 'C', '1', 'OP1319', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100832', 'CLPSPC-06', DATE('2026-04-09'), DATE('2026-04-16'), DATE('2026-04-13'), 72.00, 0.37, 'C', '3', 'OP1113', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100833', 'W902-32', DATE('2026-04-08'), DATE('2026-04-15'), DATE('2026-04-22'), 96.00, 0.00, 'C', '1', 'OP1611', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100834', 'AW979-24', DATE('2026-04-08'), DATE('2026-04-29'), DATE('2026-05-05'), 40.00, 1.49, 'C', '1', 'OP1578', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100835', 'QD200-08', DATE('2026-04-08'), DATE('2026-04-22'), DATE('2026-04-22'), 48.00, 0.48, 'C', '3', 'OP1698', 'Closed short - balance cancelled at customer request.'), + ('MO100836', 'CLPSTD-06', DATE('2026-04-08'), DATE('2026-04-13'), DATE('2026-04-13'), 60.00, 0.00, 'C', '2', 'OP1907', 'Closed short - balance cancelled at customer request.'), + ('MO100837', 'SATHBDY24', DATE('2026-04-08'), DATE('2026-05-08'), DATE('2026-05-05'), 150.00, 4.12, 'C', '2', 'OP1156', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100838', 'SAWEARSH1', DATE('2026-04-08'), DATE('2026-04-16'), DATE('2026-04-16'), 24.00, 0.00, 'C', '3', 'OP1238', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100839', 'W991-16', DATE('2026-04-08'), DATE('2026-04-27'), DATE('2026-04-23'), 24.00, 0.78, 'C', '2', 'OP1087', 'Closed complete. Shipped ahead of need date.'), + ('MO100840', 'CLPBLK-12', DATE('2026-04-08'), DATE('2026-04-24'), DATE('2026-04-24'), 250.00, 3.35, 'C', '2', 'OP1042', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100841', 'AW2100-24', DATE('2026-04-07'), DATE('2026-04-28'), DATE('2026-04-23'), 144.00, 0.00, 'C', '1', 'OP1204', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100842', 'W922N-16', DATE('2026-04-07'), DATE('2026-05-07'), DATE('2026-05-04'), 25.00, 1.06, 'C', '2', 'OP1820', 'Closed short - balance cancelled at customer request.'), + ('MO100843', 'SACLSH32T', DATE('2026-04-07'), DATE('2026-04-24'), DATE('2026-04-30'), 144.00, 5.82, 'C', '2', 'OP1733', 'Closed complete. FAI package submitted with shipment.'), + ('MO100844', 'SAISOEND1', DATE('2026-04-07'), DATE('2026-05-05'), DATE('2026-05-06'), 60.00, 0.83, 'C', '2', 'OP1271', 'Closed complete. FAI package submitted with shipment.'), + ('MO100845', 'SACLSH24C', DATE('2026-04-07'), DATE('2026-04-17'), DATE('2026-04-14'), 96.00, 0.00, 'C', '2', 'OP1319', 'Closed short - balance cancelled at customer request.'), + ('MO100846', 'AW2100-24', DATE('2026-04-07'), DATE('2026-04-27'), DATE('2026-04-29'), 100.00, 2.02, 'C', '3', 'OP1156', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100847', 'SACLSH24', DATE('2026-04-07'), DATE('2026-04-23'), DATE('2026-04-30'), 40.00, 0.39, 'C', '2', 'OP1087', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100848', 'CLPWS-10', DATE('2026-04-06'), DATE('2026-05-04'), DATE('2026-05-07'), 72.00, 0.00, 'C', '2', 'OP1988', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100849', 'SAISOEND1', DATE('2026-04-06'), DATE('2026-04-21'), DATE('2026-04-20'), 240.00, 0.00, 'C', '2', 'OP1113', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100850', 'SAPOPPET1', DATE('2026-04-06'), DATE('2026-04-24'), DATE('2026-04-21'), 600.00, 25.31, 'C', '3', 'OP1865', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100851', 'G620-32', DATE('2026-04-06'), DATE('2026-04-10'), DATE('2026-04-17'), 80.00, 0.93, 'C', '2', 'OP1611', 'Closed complete. FAI package submitted with shipment.'), + ('MO100852', 'SAHTRCORE', DATE('2026-04-06'), DATE('2026-05-04'), DATE('2026-05-01'), 75.00, 0.00, 'C', '3', 'OP1776', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100853', 'SABANDCR8', DATE('2026-04-06'), DATE('2026-04-15'), DATE('2026-04-10'), 400.00, 10.94, 'C', '1', 'OP1733', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100854', 'W991F-24', DATE('2026-04-06'), DATE('2026-04-28'), DATE('2026-04-27'), 240.00, 7.52, 'C', '2', 'OP1820', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100855', 'PVCHK-08', DATE('2026-04-03'), DATE('2026-04-17'), DATE('2026-04-15'), 36.00, 0.00, 'C', '2', 'OP1907', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100856', 'W902-24', DATE('2026-04-03'), DATE('2026-05-04'), DATE('2026-04-30'), 250.00, 0.00, 'C', '1', 'OP1319', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100857', 'AW971-24', DATE('2026-04-03'), DATE('2026-04-08'), DATE('2026-04-15'), 48.00, 0.92, 'C', '3', 'OP1490', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100858', 'P9600-16', DATE('2026-04-03'), DATE('2026-05-05'), DATE('2026-05-05'), 240.00, 0.00, 'C', '2', 'OP1907', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100859', 'WMDEF-050', DATE('2026-04-03'), DATE('2026-04-17'), DATE('2026-04-21'), 36.00, 0.62, 'C', '2', 'OP1490', 'Closed complete. FAI package submitted with shipment.'), + ('MO100860', 'SASEALK16', DATE('2026-04-03'), DATE('2026-04-17'), DATE('2026-04-23'), 120.00, 0.00, 'C', '3', 'OP1865', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100861', 'AW979-24', DATE('2026-04-03'), DATE('2026-04-16'), DATE('2026-04-17'), 50.00, 0.00, 'C', '3', 'OP1698', 'Closed complete. Shipped ahead of need date.'), + ('MO100862', 'PVCHK-08', DATE('2026-04-02'), DATE('2026-05-05'), DATE('2026-05-11'), 24.00, 0.00, 'C', '2', 'OP1271', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100863', 'SACLSH32', DATE('2026-04-02'), DATE('2026-04-20'), DATE('2026-04-27'), 300.00, 0.00, 'C', '2', 'OP1271', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100864', 'SACLSH32T', DATE('2026-04-02'), DATE('2026-05-05'), DATE('2026-05-08'), 960.00, 0.00, 'C', '3', 'OP1448', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100865', 'SAISOEND1', DATE('2026-04-02'), DATE('2026-04-16'), DATE('2026-04-20'), 300.00, 7.77, 'C', '2', 'OP1865', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100866', 'PVCHK-08', DATE('2026-04-02'), DATE('2026-05-05'), DATE('2026-05-07'), 50.00, 0.00, 'C', '2', 'OP1042', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100867', 'W902-16', DATE('2026-04-02'), DATE('2026-04-20'), DATE('2026-04-17'), 120.00, 0.00, 'C', '1', 'OP1364', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100868', 'CLPTL-08', DATE('2026-04-02'), DATE('2026-05-01'), DATE('2026-05-06'), 72.00, 0.00, 'C', '2', 'OP1087', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100869', 'HTRRB-024', DATE('2026-04-01'), DATE('2026-05-05'), DATE('2026-05-01'), 48.00, 0.00, 'C', '1', 'OP1733', 'Closed short - balance cancelled at customer request.'), + ('MO100870', 'SASEALK32', DATE('2026-04-01'), DATE('2026-04-08'), DATE('2026-04-16'), 600.00, 24.62, 'C', '2', 'OP1402', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100871', 'SAHTRCORE', DATE('2026-04-01'), DATE('2026-04-08'), DATE('2026-04-10'), 720.00, 0.00, 'C', '3', 'OP1402', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100872', 'SACLSH24', DATE('2026-04-01'), DATE('2026-05-01'), DATE('2026-05-04'), 200.00, 0.00, 'C', '2', 'OP1611', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100873', 'SACUSHN06', DATE('2026-04-01'), DATE('2026-04-14'), DATE('2026-04-10'), 320.00, 13.65, 'C', '3', 'OP1611', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100874', 'FRANG-12', DATE('2026-04-01'), DATE('2026-04-10'), DATE('2026-04-10'), 24.00, 0.66, 'C', '2', 'OP1776', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100875', 'W902-24', DATE('2026-04-01'), DATE('2026-04-14'), DATE('2026-04-17'), 240.00, 7.14, 'C', '2', 'OP1238', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100876', 'SACLSH32T', DATE('2026-03-31'), DATE('2026-04-16'), DATE('2026-04-21'), 200.00, 0.00, 'C', '3', 'OP1238', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100877', 'SACLSH24', DATE('2026-03-31'), DATE('2026-05-01'), DATE('2026-05-06'), 1000.00, 41.31, 'C', '2', 'OP1448', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100878', 'SAWEARSH1', DATE('2026-03-31'), DATE('2026-05-01'), DATE('2026-05-11'), 400.00, 12.51, 'C', '3', 'OP1238', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100879', 'SAHTRCORE', DATE('2026-03-31'), DATE('2026-04-07'), DATE('2026-04-15'), 400.00, 12.76, 'C', '1', 'OP1364', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100880', 'AW979-24', DATE('2026-03-31'), DATE('2026-04-20'), DATE('2026-04-27'), 144.00, 0.00, 'C', '1', 'OP1448', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100881', 'CLPTL-08', DATE('2026-03-31'), DATE('2026-04-24'), DATE('2026-04-29'), 72.00, 2.99, 'C', '2', 'OP1087', 'Closed short - balance cancelled at customer request.'), + ('MO100882', 'QD200-08', DATE('2026-03-31'), DATE('2026-04-28'), DATE('2026-04-24'), 144.00, 2.67, 'C', '3', 'OP1402', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100883', 'W991-24', DATE('2026-03-31'), DATE('2026-04-29'), DATE('2026-04-27'), 240.00, 9.58, 'C', '2', 'OP1536', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100884', 'SACLSH24C', DATE('2026-03-30'), DATE('2026-04-24'), DATE('2026-04-29'), 240.00, 9.64, 'C', '1', 'OP1238', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100885', 'AW2010-16', DATE('2026-03-30'), DATE('2026-04-27'), DATE('2026-04-30'), 200.00, 6.05, 'C', '2', 'OP1698', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100886', 'W902-24', DATE('2026-03-30'), DATE('2026-04-08'), DATE('2026-04-10'), 240.00, 0.00, 'C', '1', 'OP1448', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100887', 'HTRBL-112', DATE('2026-03-30'), DATE('2026-04-28'), DATE('2026-04-28'), 240.00, 5.38, 'C', '3', 'OP1820', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100888', 'SASLEEVE1', DATE('2026-03-30'), DATE('2026-04-10'), DATE('2026-04-08'), 600.00, 0.00, 'C', '3', 'OP1611', 'Closed complete. FAI package submitted with shipment.'), + ('MO100889', 'SATHBDY16', DATE('2026-03-30'), DATE('2026-04-27'), DATE('2026-04-29'), 400.00, 9.95, 'C', '2', 'OP1865', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100890', 'C6300-24', DATE('2026-03-30'), DATE('2026-05-01'), DATE('2026-05-08'), 48.00, 0.00, 'C', '1', 'OP1087', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100891', 'SACLSH32T', DATE('2026-03-30'), DATE('2026-04-17'), DATE('2026-04-27'), 160.00, 3.84, 'C', '1', 'OP1536', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100892', 'CLPSL-08', DATE('2026-03-27'), DATE('2026-04-27'), DATE('2026-04-27'), 150.00, 0.00, 'C', '3', 'OP1536', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100893', 'W991-24', DATE('2026-03-27'), DATE('2026-04-22'), DATE('2026-04-20'), 144.00, 0.00, 'C', '2', 'OP1271', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100894', 'AW2100-32', DATE('2026-03-27'), DATE('2026-04-06'), DATE('2026-04-07'), 80.00, 1.08, 'C', '1', 'OP1907', 'Closed complete. FAI package submitted with shipment.'), + ('MO100895', 'CLPSL-08', DATE('2026-03-27'), DATE('2026-04-06'), DATE('2026-04-13'), 25.00, 0.20, 'C', '1', 'OP1776', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100896', 'AW2100-24', DATE('2026-03-27'), DATE('2026-04-15'), DATE('2026-04-21'), 40.00, 0.68, 'C', '1', 'OP1204', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100897', 'SASEALK32', DATE('2026-03-27'), DATE('2026-04-21'), DATE('2026-04-20'), 720.00, 12.85, 'C', '3', 'OP1698', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100898', 'W902-24', DATE('2026-03-27'), DATE('2026-04-16'), DATE('2026-04-20'), 25.00, 0.00, 'C', '3', 'OP1113', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100899', 'SACUSHNW8', DATE('2026-03-27'), DATE('2026-04-23'), DATE('2026-05-01'), 96.00, 3.20, 'C', '3', 'OP1087', 'Closed short - balance cancelled at customer request.'), + ('MO100900', 'AW2010-24', DATE('2026-03-26'), DATE('2026-04-17'), DATE('2026-04-16'), 60.00, 1.72, 'C', '2', 'OP1865', 'Closed complete. All dimensional and NDT results acceptable.'); + +INSERT INTO MANUFACTURING_ORDERS (ORDER_ID, ITEM_ID, ORDER_DATE, EXPECTED_COMPLETION_DATE, ACTUAL_COMPLETION_DATE, QUANTITY_ORDERED, QUANTITY_SCRAPPED, STATUS, SHIFT_CODE, OPERATOR_ID, NOTES) VALUES + ('MO100901', 'ISOH-0500', DATE('2026-03-26'), DATE('2026-04-16'), DATE('2026-04-15'), 50.00, 1.08, 'C', '3', 'OP1402', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100902', 'W902-16', DATE('2026-03-26'), DATE('2026-04-01'), DATE('2026-04-06'), 24.00, 0.95, 'C', '2', 'OP1448', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100903', 'W991N-32', DATE('2026-03-26'), DATE('2026-04-23'), DATE('2026-04-30'), 300.00, 0.00, 'C', '2', 'OP1907', 'Closed short - balance cancelled at customer request.'), + ('MO100904', 'SATHBDY16', DATE('2026-03-26'), DATE('2026-04-21'), DATE('2026-04-27'), 120.00, 0.00, 'C', '2', 'OP1776', 'Closed complete. Shipped ahead of need date.'), + ('MO100905', 'SACUSHN06', DATE('2026-03-26'), DATE('2026-04-16'), DATE('2026-04-15'), 480.00, 14.66, 'C', '2', 'OP1156', 'Closed complete. FAI package submitted with shipment.'), + ('MO100906', 'W902-32', DATE('2026-03-26'), DATE('2026-04-15'), DATE('2026-04-13'), 250.00, 0.00, 'C', '2', 'OP1820', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100907', 'SAWEARSH1', DATE('2026-03-26'), DATE('2026-04-06'), DATE('2026-04-14'), 400.00, 11.49, 'C', '2', 'OP1611', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100908', 'SASEALK24', DATE('2026-03-25'), DATE('2026-04-21'), DATE('2026-04-16'), 960.00, 0.00, 'C', '2', 'OP1490', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100909', 'AW2100-24', DATE('2026-03-25'), DATE('2026-04-15'), DATE('2026-04-15'), 100.00, 0.00, 'C', '2', 'OP1238', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100910', 'AW2091-24', DATE('2026-03-25'), DATE('2026-04-02'), DATE('2026-04-06'), 240.00, 6.04, 'C', '2', 'OP1271', 'Closed short - balance cancelled at customer request.'), + ('MO100911', 'SACLSH24', DATE('2026-03-25'), DATE('2026-03-30'), DATE('2026-03-25'), 160.00, 5.88, 'C', '1', 'OP1536', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100912', 'SAHTRHARN', DATE('2026-03-25'), DATE('2026-04-20'), DATE('2026-04-20'), 720.00, 0.00, 'C', '3', 'OP1733', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100913', 'CLPSTD-06', DATE('2026-03-25'), DATE('2026-04-10'), DATE('2026-04-16'), 72.00, 1.17, 'C', '1', 'OP1042', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100914', 'SAISOEND1', DATE('2026-03-25'), DATE('2026-04-22'), DATE('2026-04-29'), 600.00, 16.15, 'C', '1', 'OP1988', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100915', 'PVCHK-08', DATE('2026-03-25'), DATE('2026-04-20'), DATE('2026-04-24'), 60.00, 0.00, 'C', '3', 'OP1698', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100916', 'W991-16', DATE('2026-03-24'), DATE('2026-04-17'), DATE('2026-04-23'), 72.00, 2.40, 'C', '3', 'OP1204', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100917', 'SATHRDNUT', DATE('2026-03-24'), DATE('2026-04-21'), DATE('2026-04-27'), 144.00, 6.48, 'C', '1', 'OP1319', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100918', 'PVFUSE-12', DATE('2026-03-24'), DATE('2026-03-27'), DATE('2026-03-27'), 120.00, 0.00, 'C', '2', 'OP1865', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100919', 'F63052-32', DATE('2026-03-24'), DATE('2026-03-30'), DATE('2026-03-27'), 24.00, 0.98, 'C', '2', 'OP1448', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100920', 'CLPSPC-06', DATE('2026-03-24'), DATE('2026-04-03'), DATE('2026-03-31'), 200.00, 2.85, 'C', '2', 'OP1204', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100921', 'SATHRDNUT', DATE('2026-03-24'), DATE('2026-04-17'), DATE('2026-04-21'), 108.00, 3.39, 'C', '3', 'OP1113', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100922', 'SAWEARSH1', DATE('2026-03-24'), DATE('2026-04-24'), DATE('2026-04-23'), 300.00, 5.14, 'C', '3', 'OP1698', 'Closed complete. FAI package submitted with shipment.'), + ('MO100923', 'CLPSPC-06', DATE('2026-03-23'), DATE('2026-04-01'), DATE('2026-04-02'), 200.00, 3.77, 'C', '2', 'OP1113', 'Closed complete. Shipped ahead of need date.'), + ('MO100924', 'QD6000-12', DATE('2026-03-23'), DATE('2026-04-02'), DATE('2026-04-06'), 50.00, 0.50, 'C', '3', 'OP1204', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100925', 'P9100-08', DATE('2026-03-23'), DATE('2026-04-02'), DATE('2026-04-08'), 100.00, 0.00, 'C', '2', 'OP1402', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100926', 'CLPSL-08', DATE('2026-03-23'), DATE('2026-03-27'), DATE('2026-03-27'), 36.00, 0.00, 'C', '3', 'OP1536', 'Closed complete. Shipped ahead of need date.'), + ('MO100927', 'SACUSHN06', DATE('2026-03-23'), DATE('2026-04-10'), DATE('2026-04-13'), 80.00, 2.11, 'C', '3', 'OP1271', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100928', 'W991F-24', DATE('2026-03-23'), DATE('2026-04-07'), DATE('2026-04-15'), 36.00, 0.34, 'C', '2', 'OP1907', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100929', 'W902-32', DATE('2026-03-23'), DATE('2026-04-03'), DATE('2026-04-08'), 50.00, 0.00, 'C', '3', 'OP1238', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100930', 'SASEALK16', DATE('2026-03-23'), DATE('2026-04-02'), DATE('2026-04-08'), 108.00, 2.19, 'C', '2', 'OP1820', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100931', 'SAISOTUB2', DATE('2026-03-20'), DATE('2026-03-30'), DATE('2026-03-26'), 360.00, 0.00, 'C', '3', 'OP1156', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100932', 'C3600-16', DATE('2026-03-20'), DATE('2026-04-07'), DATE('2026-04-06'), 24.00, 0.00, 'C', '3', 'OP1364', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100933', 'SATHRDNUT', DATE('2026-03-20'), DATE('2026-04-13'), DATE('2026-04-10'), 96.00, 3.18, 'C', '2', 'OP1654', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100934', 'HTRCF-201', DATE('2026-03-20'), DATE('2026-04-09'), DATE('2026-04-14'), 120.00, 0.00, 'C', '1', 'OP1448', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100935', 'PVFUSE-12', DATE('2026-03-20'), DATE('2026-03-31'), DATE('2026-03-30'), 60.00, 0.47, 'C', '1', 'OP1204', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100936', 'W991N-32', DATE('2026-03-20'), DATE('2026-03-25'), DATE('2026-03-27'), 25.00, 0.00, 'C', '1', 'OP1942', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100937', 'QD6000-12', DATE('2026-03-20'), DATE('2026-04-23'), DATE('2026-04-20'), 150.00, 3.61, 'C', '2', 'OP1042', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100938', 'W902-32', DATE('2026-03-20'), DATE('2026-04-03'), DATE('2026-04-07'), 48.00, 0.00, 'C', '1', 'OP1820', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100939', 'SAWEARSH1', DATE('2026-03-19'), DATE('2026-04-14'), DATE('2026-04-21'), 144.00, 1.36, 'C', '3', 'OP1238', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100940', 'SAISOTUB2', DATE('2026-03-19'), DATE('2026-04-08'), DATE('2026-04-03'), 288.00, 4.16, 'C', '1', 'OP1536', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100941', 'AW979-24', DATE('2026-03-19'), DATE('2026-03-27'), DATE('2026-04-01'), 96.00, 0.48, 'C', '1', 'OP1611', 'Closed short - balance cancelled at customer request.'), + ('MO100942', 'CLPSL-08', DATE('2026-03-19'), DATE('2026-04-08'), DATE('2026-04-13'), 100.00, 0.00, 'C', '1', 'OP1820', 'Closed complete. Shipped ahead of need date.'), + ('MO100943', 'C3600-16', DATE('2026-03-19'), DATE('2026-04-16'), DATE('2026-04-22'), 20.00, 0.00, 'C', '3', 'OP1156', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100944', 'AW2010-32', DATE('2026-03-19'), DATE('2026-03-31'), DATE('2026-03-30'), 12.00, 0.00, 'C', '1', 'OP1536', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100945', 'SASEALK32', DATE('2026-03-19'), DATE('2026-04-14'), DATE('2026-04-20'), 400.00, 3.25, 'C', '3', 'OP1988', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO100946', 'C3600-16', DATE('2026-03-19'), DATE('2026-04-21'), DATE('2026-04-16'), 40.00, 1.65, 'C', '2', 'OP1654', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100947', 'SASEALK24', DATE('2026-03-18'), DATE('2026-04-01'), DATE('2026-04-06'), 1200.00, 0.00, 'C', '1', 'OP1402', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100948', 'AW2010-24', DATE('2026-03-18'), DATE('2026-04-03'), DATE('2026-04-09'), 120.00, 2.83, 'C', '2', 'OP1578', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100949', 'SACLSH32T', DATE('2026-03-18'), DATE('2026-04-16'), DATE('2026-04-13'), 200.00, 0.00, 'C', '2', 'OP1087', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100950', 'SAISOTUB1', DATE('2026-03-18'), DATE('2026-04-01'), DATE('2026-03-27'), 240.00, 4.46, 'C', '3', 'OP1087', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100951', 'W700-32', DATE('2026-03-18'), DATE('2026-04-09'), DATE('2026-04-08'), 20.00, 0.65, 'C', '3', 'OP1654', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100952', 'SACUSHN06', DATE('2026-03-18'), DATE('2026-04-16'), DATE('2026-04-16'), 36.00, 0.52, 'C', '2', 'OP1042', 'Closed short - balance cancelled at customer request.'), + ('MO100953', 'P9600-16', DATE('2026-03-18'), DATE('2026-04-03'), DATE('2026-04-02'), 150.00, 3.27, 'C', '1', 'OP1698', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100954', 'PVCHK-08', DATE('2026-03-18'), DATE('2026-04-14'), DATE('2026-04-22'), 72.00, 0.00, 'C', '1', 'OP1156', 'Closed short - balance cancelled at customer request.'), + ('MO100955', 'CLPSL-08', DATE('2026-03-17'), DATE('2026-03-27'), DATE('2026-04-01'), 36.00, 0.00, 'C', '2', 'OP1490', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100956', 'HTRRB-012', DATE('2026-03-17'), DATE('2026-03-31'), DATE('2026-04-03'), 96.00, 1.00, 'C', '1', 'OP1042', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100957', 'SAISOEND1', DATE('2026-03-17'), DATE('2026-04-10'), DATE('2026-04-20'), 144.00, 0.00, 'C', '3', 'OP1271', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100958', 'SAWEARSH1', DATE('2026-03-17'), DATE('2026-04-02'), DATE('2026-04-08'), 160.00, 0.80, 'C', '1', 'OP1820', 'Closed complete. FAI package submitted with shipment.'), + ('MO100959', 'QD200-08', DATE('2026-03-17'), DATE('2026-04-03'), DATE('2026-04-10'), 20.00, 0.00, 'C', '2', 'OP1654', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100960', 'SACUSHN06', DATE('2026-03-17'), DATE('2026-04-03'), DATE('2026-04-08'), 1000.00, 0.00, 'C', '3', 'OP1865', 'Closed complete. FAI package submitted with shipment.'), + ('MO100961', 'CLPSL-08', DATE('2026-03-17'), DATE('2026-04-16'), DATE('2026-04-24'), 50.00, 0.00, 'C', '1', 'OP1536', 'Closed complete. Shipped ahead of need date.'), + ('MO100962', 'W991N-32', DATE('2026-03-16'), DATE('2026-04-09'), DATE('2026-04-15'), 20.00, 0.00, 'C', '1', 'OP1578', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100963', 'SAHTRHARN', DATE('2026-03-16'), DATE('2026-04-14'), DATE('2026-04-22'), 50.00, 0.00, 'C', '1', 'OP1820', 'Closed short - balance cancelled at customer request.'), + ('MO100964', 'HOSE-04S', DATE('2026-03-16'), DATE('2026-03-27'), DATE('2026-04-02'), 250.00, 2.39, 'C', '2', 'OP1087', 'Closed short - balance cancelled at customer request.'), + ('MO100965', 'AW2100-24', DATE('2026-03-16'), DATE('2026-04-17'), DATE('2026-04-16'), 300.00, 0.00, 'C', '1', 'OP1578', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100966', 'SATHBDY32', DATE('2026-03-16'), DATE('2026-03-30'), DATE('2026-04-01'), 600.00, 4.68, 'C', '2', 'OP1238', 'Closed complete. Shipped ahead of need date.'), + ('MO100967', 'HOSE-08L', DATE('2026-03-16'), DATE('2026-03-20'), DATE('2026-03-30'), 200.00, 6.43, 'C', '3', 'OP1364', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100968', 'AW2100-24', DATE('2026-03-16'), DATE('2026-03-25'), DATE('2026-03-30'), 200.00, 0.93, 'C', '1', 'OP1087', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100969', 'QD200-08', DATE('2026-03-16'), DATE('2026-04-08'), DATE('2026-04-08'), 40.00, 1.10, 'C', '1', 'OP1490', 'Closed complete. FAI package submitted with shipment.'), + ('MO100970', 'SACLSH24', DATE('2026-03-13'), DATE('2026-04-08'), DATE('2026-04-09'), 80.00, 2.21, 'C', '3', 'OP1865', 'Closed complete. Shipped ahead of need date.'), + ('MO100971', 'CLPSL-08', DATE('2026-03-13'), DATE('2026-04-07'), DATE('2026-04-07'), 250.00, 9.93, 'C', '3', 'OP1490', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100972', 'QD200-16', DATE('2026-03-13'), DATE('2026-04-07'), DATE('2026-04-13'), 200.00, 0.00, 'C', '3', 'OP1820', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100973', 'SABODY600', DATE('2026-03-13'), DATE('2026-03-31'), DATE('2026-03-31'), 900.00, 0.00, 'C', '1', 'OP1156', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100974', 'AW971-16', DATE('2026-03-13'), DATE('2026-04-02'), DATE('2026-04-09'), 120.00, 1.50, 'C', '2', 'OP1654', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100975', 'P9100-08', DATE('2026-03-13'), DATE('2026-04-14'), DATE('2026-04-17'), 144.00, 0.00, 'C', '3', 'OP1087', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100976', 'SACLSH32', DATE('2026-03-13'), DATE('2026-04-01'), DATE('2026-04-01'), 120.00, 3.45, 'C', '1', 'OP1776', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100977', 'CLPSTD-06', DATE('2026-03-13'), DATE('2026-04-08'), DATE('2026-04-13'), 80.00, 2.37, 'C', '2', 'OP1156', 'Closed complete. Shipped ahead of need date.'), + ('MO100978', 'HTRRB-024', DATE('2026-03-12'), DATE('2026-03-19'), DATE('2026-03-25'), 12.00, 0.00, 'C', '1', 'OP1364', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100979', 'SAPOPPET1', DATE('2026-03-12'), DATE('2026-04-03'), DATE('2026-04-06'), 500.00, 0.00, 'C', '3', 'OP1271', 'Closed short - balance cancelled at customer request.'), + ('MO100980', 'SATHBDY24', DATE('2026-03-12'), DATE('2026-03-19'), DATE('2026-03-24'), 50.00, 0.82, 'C', '2', 'OP1865', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100981', 'CLPSL-08', DATE('2026-03-12'), DATE('2026-04-01'), DATE('2026-04-08'), 144.00, 0.00, 'C', '3', 'OP1087', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100982', 'W991N-32', DATE('2026-03-12'), DATE('2026-03-30'), DATE('2026-04-06'), 40.00, 0.76, 'C', '3', 'OP1448', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100983', 'W902-16', DATE('2026-03-12'), DATE('2026-03-18'), DATE('2026-03-19'), 48.00, 1.84, 'C', '1', 'OP1733', 'Closed short - balance cancelled at customer request.'), + ('MO100984', 'C8300-32', DATE('2026-03-12'), DATE('2026-04-14'), DATE('2026-04-20'), 150.00, 3.53, 'C', '3', 'OP1907', 'Closed complete. Shipped ahead of need date.'), + ('MO100985', 'AW2100-24', DATE('2026-03-12'), DATE('2026-03-19'), DATE('2026-03-19'), 20.00, 0.82, 'C', '2', 'OP1042', 'Closed complete after rework of anodize coverage on two units.'), + ('MO100986', 'SACLSH32T', DATE('2026-03-11'), DATE('2026-03-25'), DATE('2026-03-30'), 576.00, 8.22, 'C', '2', 'OP1087', 'Closed complete. Shipped ahead of need date.'), + ('MO100987', 'W991-24', DATE('2026-03-11'), DATE('2026-03-27'), DATE('2026-03-27'), 150.00, 2.73, 'C', '2', 'OP1156', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100988', 'SASEALK24', DATE('2026-03-11'), DATE('2026-04-09'), DATE('2026-04-08'), 80.00, 0.00, 'C', '3', 'OP1448', 'Closed complete. FAI package submitted with shipment.'), + ('MO100989', 'W991-24', DATE('2026-03-11'), DATE('2026-04-09'), DATE('2026-04-10'), 300.00, 0.00, 'C', '2', 'OP1238', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100990', 'WMFFR-100', DATE('2026-03-11'), DATE('2026-03-18'), DATE('2026-03-25'), 240.00, 0.00, 'C', '1', 'OP1578', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100991', 'SASEALK24', DATE('2026-03-11'), DATE('2026-04-14'), DATE('2026-04-22'), 432.00, 12.60, 'C', '2', 'OP1820', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO100992', 'SAISOTUB1', DATE('2026-03-11'), DATE('2026-03-30'), DATE('2026-04-02'), 100.00, 1.86, 'C', '2', 'OP1319', 'Closed complete. Source inspection passed on first presentation.'), + ('MO100993', 'SATHBDY24', DATE('2026-03-10'), DATE('2026-04-02'), DATE('2026-03-30'), 240.00, 0.00, 'C', '1', 'OP1448', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100994', 'SACLSH32', DATE('2026-03-10'), DATE('2026-03-24'), DATE('2026-03-25'), 72.00, 2.10, 'C', '2', 'OP1042', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100995', 'SABODY200', DATE('2026-03-10'), DATE('2026-03-30'), DATE('2026-03-27'), 216.00, 0.00, 'C', '1', 'OP1988', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO100996', 'W902-32', DATE('2026-03-10'), DATE('2026-04-10'), DATE('2026-04-13'), 25.00, 0.00, 'C', '1', 'OP1733', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100997', 'CLPBLK-12', DATE('2026-03-10'), DATE('2026-03-19'), DATE('2026-03-27'), 240.00, 4.30, 'C', '3', 'OP1942', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO100998', 'CLPSTD-06', DATE('2026-03-10'), DATE('2026-04-08'), DATE('2026-04-16'), 72.00, 0.00, 'C', '2', 'OP1988', 'Closed complete. Cushion bond verified per process spec.'), + ('MO100999', 'SABANDAL6', DATE('2026-03-10'), DATE('2026-04-02'), DATE('2026-04-01'), 360.00, 0.00, 'C', '2', 'OP1988', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101000', 'CLPSTD-06', DATE('2026-03-09'), DATE('2026-03-30'), DATE('2026-03-30'), 24.00, 0.80, 'C', '3', 'OP1319', 'Closed complete. Source inspection passed on first presentation.'); + +INSERT INTO MANUFACTURING_ORDERS (ORDER_ID, ITEM_ID, ORDER_DATE, EXPECTED_COMPLETION_DATE, ACTUAL_COMPLETION_DATE, QUANTITY_ORDERED, QUANTITY_SCRAPPED, STATUS, SHIFT_CODE, OPERATOR_ID, NOTES) VALUES + ('MO101001', 'W991-24', DATE('2026-03-09'), DATE('2026-03-13'), DATE('2026-03-12'), 150.00, 0.00, 'C', '2', 'OP1448', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101002', 'AW971-16', DATE('2026-03-09'), DATE('2026-03-16'), DATE('2026-03-20'), 250.00, 2.86, 'C', '3', 'OP1578', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101003', 'W922N-16', DATE('2026-03-09'), DATE('2026-03-19'), DATE('2026-03-23'), 80.00, 0.00, 'C', '2', 'OP1364', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101004', 'AW2091-24', DATE('2026-03-09'), DATE('2026-03-31'), DATE('2026-04-08'), 144.00, 0.00, 'C', '3', 'OP1776', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101005', 'SASEALK24', DATE('2026-03-09'), DATE('2026-04-07'), DATE('2026-04-09'), 72.00, 1.49, 'C', '1', 'OP1865', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101006', 'SASEALK16', DATE('2026-03-09'), DATE('2026-04-03'), DATE('2026-03-31'), 320.00, 9.34, 'C', '1', 'OP1402', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101007', 'SATHBDY32', DATE('2026-03-09'), DATE('2026-04-01'), DATE('2026-04-02'), 160.00, 0.85, 'C', '1', 'OP1113', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101008', 'SALATCH1', DATE('2026-03-06'), DATE('2026-03-25'), DATE('2026-03-27'), 108.00, 0.00, 'C', '2', 'OP1448', 'Closed short - balance cancelled at customer request.'), + ('MO101009', 'W902-16', DATE('2026-03-06'), DATE('2026-04-02'), DATE('2026-04-01'), 40.00, 0.00, 'C', '3', 'OP1087', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101010', 'P9600-16', DATE('2026-03-06'), DATE('2026-04-07'), DATE('2026-04-14'), 36.00, 1.24, 'C', '2', 'OP1271', 'Closed complete. FAI package submitted with shipment.'), + ('MO101011', 'C3600-16', DATE('2026-03-06'), DATE('2026-03-13'), DATE('2026-03-16'), 36.00, 0.19, 'C', '1', 'OP1402', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101012', 'SACLSH32T', DATE('2026-03-06'), DATE('2026-03-27'), DATE('2026-03-25'), 450.00, 2.38, 'C', '1', 'OP1238', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101013', 'CLPWS-10', DATE('2026-03-06'), DATE('2026-04-03'), DATE('2026-04-07'), 100.00, 0.00, 'C', '2', 'OP1448', 'Closed complete. Shipped ahead of need date.'), + ('MO101014', 'SACLSH16', DATE('2026-03-06'), DATE('2026-03-24'), DATE('2026-03-26'), 600.00, 0.00, 'C', '1', 'OP1156', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101015', 'SACLSH16', DATE('2026-03-06'), DATE('2026-04-09'), DATE('2026-04-14'), 384.00, 0.00, 'C', '1', 'OP1113', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101016', 'SABODY600', DATE('2026-03-05'), DATE('2026-04-06'), DATE('2026-04-06'), 480.00, 0.00, 'C', '3', 'OP1733', 'Closed complete. Shipped ahead of need date.'), + ('MO101017', 'AW971-16', DATE('2026-03-05'), DATE('2026-04-06'), DATE('2026-04-08'), 150.00, 4.69, 'C', '2', 'OP1820', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101018', 'AW979-24', DATE('2026-03-05'), DATE('2026-03-26'), DATE('2026-04-02'), 12.00, 0.00, 'C', '1', 'OP1490', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101019', 'QD200-08', DATE('2026-03-05'), DATE('2026-03-17'), DATE('2026-03-23'), 50.00, 0.00, 'C', '3', 'OP1654', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101020', 'SACLSH32', DATE('2026-03-05'), DATE('2026-03-20'), DATE('2026-03-30'), 900.00, 39.50, 'C', '2', 'OP1448', 'Closed complete. FAI package submitted with shipment.'), + ('MO101021', 'W902-24', DATE('2026-03-05'), DATE('2026-03-24'), DATE('2026-03-25'), 100.00, 3.14, 'C', '1', 'OP1271', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101022', 'SACUSHNW8', DATE('2026-03-05'), DATE('2026-03-30'), DATE('2026-03-30'), 40.00, 0.50, 'C', '2', 'OP1536', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101023', 'HTRCT-22W', DATE('2026-03-04'), DATE('2026-03-27'), DATE('2026-04-01'), 25.00, 0.00, 'C', '3', 'OP1319', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101024', 'SABANDCR8', DATE('2026-03-04'), DATE('2026-03-12'), DATE('2026-03-17'), 72.00, 0.00, 'C', '2', 'OP1733', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101025', 'AW971-16', DATE('2026-03-04'), DATE('2026-03-24'), DATE('2026-03-26'), 24.00, 0.68, 'C', '3', 'OP1042', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101026', 'SAVTLI01', DATE('2026-03-04'), DATE('2026-03-12'), DATE('2026-03-19'), 600.00, 22.09, 'C', '2', 'OP1490', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101027', 'SABANDAL6', DATE('2026-03-04'), DATE('2026-03-13'), DATE('2026-03-19'), 1200.00, 35.26, 'C', '1', 'OP1654', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101028', 'CLPTL-08', DATE('2026-03-04'), DATE('2026-03-13'), DATE('2026-03-17'), 48.00, 0.00, 'C', '3', 'OP1865', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101029', 'P9400-12', DATE('2026-03-04'), DATE('2026-03-16'), DATE('2026-03-19'), 120.00, 0.00, 'C', '1', 'OP1654', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101030', 'W991F-24', DATE('2026-03-03'), DATE('2026-03-24'), DATE('2026-03-31'), 250.00, 0.00, 'C', '2', 'OP1204', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101031', 'SATHRDNUT', DATE('2026-03-03'), DATE('2026-03-24'), DATE('2026-04-01'), 200.00, 0.00, 'C', '2', 'OP1611', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101032', 'SASEALK16', DATE('2026-03-03'), DATE('2026-03-12'), DATE('2026-03-17'), 300.00, 5.35, 'C', '3', 'OP1113', 'Closed complete. FAI package submitted with shipment.'), + ('MO101033', 'SACLSH24', DATE('2026-03-03'), DATE('2026-03-11'), DATE('2026-03-12'), 96.00, 0.00, 'C', '1', 'OP1238', 'Closed complete. Shipped ahead of need date.'), + ('MO101034', 'SAISOTUB2', DATE('2026-03-03'), DATE('2026-03-26'), DATE('2026-03-30'), 288.00, 9.80, 'C', '2', 'OP1820', 'Closed complete. Shipped ahead of need date.'), + ('MO101035', 'AW2010-24', DATE('2026-03-03'), DATE('2026-03-30'), DATE('2026-04-02'), 100.00, 0.00, 'C', '2', 'OP1271', 'Closed complete. FAI package submitted with shipment.'), + ('MO101036', 'AW2100-32', DATE('2026-03-03'), DATE('2026-03-24'), DATE('2026-03-24'), 25.00, 0.23, 'C', '3', 'OP1271', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101037', 'AW971-16', DATE('2026-03-03'), DATE('2026-03-31'), DATE('2026-04-02'), 72.00, 3.03, 'C', '1', 'OP1204', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101038', 'CLPBLK-12', DATE('2026-03-02'), DATE('2026-03-27'), DATE('2026-04-03'), 24.00, 0.27, 'C', '1', 'OP1402', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101039', 'AW971-16', DATE('2026-03-02'), DATE('2026-04-02'), DATE('2026-04-09'), 24.00, 0.79, 'C', '3', 'OP1698', 'Closed short - balance cancelled at customer request.'), + ('MO101040', 'F63052-32', DATE('2026-03-02'), DATE('2026-03-12'), DATE('2026-03-20'), 240.00, 0.00, 'C', '1', 'OP1865', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101041', 'AW2100-24', DATE('2026-03-02'), DATE('2026-03-31'), DATE('2026-03-27'), 200.00, 0.00, 'C', '2', 'OP1402', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101042', 'AW979-24', DATE('2026-03-02'), DATE('2026-03-13'), DATE('2026-03-11'), 48.00, 0.00, 'C', '3', 'OP1402', 'Closed complete. FAI package submitted with shipment.'), + ('MO101043', 'SATHRDNUT', DATE('2026-03-02'), DATE('2026-03-27'), DATE('2026-04-02'), 160.00, 0.00, 'C', '1', 'OP1733', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101044', 'PVCHK-08', DATE('2026-03-02'), DATE('2026-03-12'), DATE('2026-03-12'), 150.00, 5.81, 'C', '2', 'OP1698', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101045', 'SAWEARSH1', DATE('2026-03-02'), DATE('2026-03-19'), DATE('2026-03-23'), 60.00, 0.00, 'C', '1', 'OP1733', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101046', 'W922N-16', DATE('2026-02-27'), DATE('2026-03-26'), DATE('2026-04-02'), 25.00, 0.74, 'C', '3', 'OP1942', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101047', 'HTRRB-024', DATE('2026-02-27'), DATE('2026-03-05'), DATE('2026-03-10'), 150.00, 0.00, 'C', '3', 'OP1536', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101048', 'AW2010-24', DATE('2026-02-27'), DATE('2026-04-02'), DATE('2026-04-01'), 72.00, 1.59, 'C', '1', 'OP1204', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101049', 'AW971-24', DATE('2026-02-27'), DATE('2026-03-06'), DATE('2026-03-10'), 24.00, 0.56, 'C', '3', 'OP1042', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101050', 'P9100-08', DATE('2026-02-27'), DATE('2026-03-16'), DATE('2026-03-24'), 200.00, 0.00, 'C', '3', 'OP1988', 'Closed short - balance cancelled at customer request.'), + ('MO101051', 'SAISOTUB1', DATE('2026-02-27'), DATE('2026-03-11'), DATE('2026-03-16'), 600.00, 0.00, 'C', '1', 'OP1156', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101052', 'SAVTLI01', DATE('2026-02-27'), DATE('2026-03-13'), DATE('2026-03-17'), 96.00, 0.00, 'C', '2', 'OP1988', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101053', 'P9400-12', DATE('2026-02-27'), DATE('2026-03-06'), DATE('2026-03-16'), 72.00, 0.00, 'C', '1', 'OP1776', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101054', 'QD6000-12', DATE('2026-02-26'), DATE('2026-03-16'), DATE('2026-03-18'), 100.00, 0.00, 'C', '2', 'OP1271', 'Closed short - balance cancelled at customer request.'), + ('MO101055', 'QD6000-12', DATE('2026-02-26'), DATE('2026-03-05'), DATE('2026-03-05'), 144.00, 0.00, 'C', '2', 'OP1698', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101056', 'SAHOSEAS8', DATE('2026-02-26'), DATE('2026-03-19'), DATE('2026-03-26'), 300.00, 0.00, 'C', '3', 'OP1364', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101057', 'QD6000-12', DATE('2026-02-26'), DATE('2026-03-31'), DATE('2026-04-07'), 80.00, 2.26, 'C', '1', 'OP1204', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101058', 'QD200-16', DATE('2026-02-26'), DATE('2026-03-31'), DATE('2026-03-30'), 48.00, 0.00, 'C', '3', 'OP1042', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101059', 'W922N-16', DATE('2026-02-26'), DATE('2026-03-18'), DATE('2026-03-20'), 48.00, 1.35, 'C', '3', 'OP1654', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101060', 'AW2010-24', DATE('2026-02-26'), DATE('2026-03-31'), DATE('2026-04-06'), 240.00, 6.34, 'C', '2', 'OP1654', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101061', 'SAWEARSH1', DATE('2026-02-26'), DATE('2026-03-19'), DATE('2026-03-26'), 400.00, 5.36, 'C', '1', 'OP1087', 'Closed short - balance cancelled at customer request.'), + ('MO101062', 'W902-16', DATE('2026-02-25'), DATE('2026-03-11'), DATE('2026-03-11'), 96.00, 0.00, 'C', '1', 'OP1113', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101063', 'F63052-32', DATE('2026-02-25'), DATE('2026-03-09'), DATE('2026-03-11'), 96.00, 0.00, 'C', '2', 'OP1271', 'Closed complete. FAI package submitted with shipment.'), + ('MO101064', 'CLPSTD-06', DATE('2026-02-25'), DATE('2026-03-13'), DATE('2026-03-23'), 80.00, 3.58, 'C', '3', 'OP1204', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101065', 'SACLSH32', DATE('2026-02-25'), DATE('2026-03-04'), DATE('2026-03-02'), 400.00, 9.63, 'C', '3', 'OP1448', 'Closed complete. Shipped ahead of need date.'), + ('MO101066', 'SACLSH32', DATE('2026-02-25'), DATE('2026-03-09'), DATE('2026-03-04'), 96.00, 3.46, 'C', '3', 'OP1536', 'Closed short - balance cancelled at customer request.'), + ('MO101067', 'SABODY600', DATE('2026-02-25'), DATE('2026-03-23'), DATE('2026-03-23'), 450.00, 15.25, 'C', '1', 'OP1776', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101068', 'W700-32', DATE('2026-02-25'), DATE('2026-03-03'), DATE('2026-03-02'), 96.00, 0.83, 'C', '3', 'OP1654', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101069', 'P9600-16', DATE('2026-02-25'), DATE('2026-03-26'), DATE('2026-04-03'), 100.00, 0.47, 'C', '1', 'OP1238', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101070', 'HTRRB-012', DATE('2026-02-24'), DATE('2026-03-24'), DATE('2026-03-30'), 48.00, 2.07, 'C', '3', 'OP1042', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101071', 'SAVTLI01', DATE('2026-02-24'), DATE('2026-03-23'), DATE('2026-03-25'), 300.00, 7.56, 'C', '2', 'OP1654', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101072', 'SASLEEVE1', DATE('2026-02-24'), DATE('2026-03-12'), DATE('2026-03-13'), 750.00, 0.00, 'C', '2', 'OP1942', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101073', 'ISOF-1000', DATE('2026-02-24'), DATE('2026-03-20'), DATE('2026-03-25'), 25.00, 0.00, 'C', '3', 'OP1042', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101074', 'W922N-16', DATE('2026-02-24'), DATE('2026-03-05'), DATE('2026-03-11'), 300.00, 0.00, 'C', '1', 'OP1448', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101075', 'AW2010-32', DATE('2026-02-24'), DATE('2026-03-03'), DATE('2026-02-27'), 96.00, 3.35, 'C', '1', 'OP1536', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101076', 'QD200-08', DATE('2026-02-24'), DATE('2026-03-23'), DATE('2026-03-30'), 25.00, 0.58, 'C', '1', 'OP1820', 'Closed complete. FAI package submitted with shipment.'), + ('MO101077', 'SASLEEVE1', DATE('2026-02-24'), DATE('2026-03-18'), DATE('2026-03-17'), 120.00, 3.16, 'C', '1', 'OP1942', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101078', 'AW2100-24', DATE('2026-02-23'), DATE('2026-03-24'), DATE('2026-03-25'), 50.00, 1.01, 'C', '2', 'OP1776', 'Closed short - balance cancelled at customer request.'), + ('MO101079', 'W991-24', DATE('2026-02-23'), DATE('2026-03-27'), DATE('2026-04-02'), 50.00, 0.74, 'C', '1', 'OP1820', 'Closed complete. FAI package submitted with shipment.'), + ('MO101080', 'WMFFR-100', DATE('2026-02-23'), DATE('2026-02-27'), DATE('2026-02-25'), 100.00, 0.00, 'C', '1', 'OP1942', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101081', 'SAISOEND1', DATE('2026-02-23'), DATE('2026-03-17'), DATE('2026-03-24'), 288.00, 0.00, 'C', '1', 'OP1988', 'Closed short - balance cancelled at customer request.'), + ('MO101082', 'AW2091-24', DATE('2026-02-23'), DATE('2026-03-20'), DATE('2026-03-17'), 80.00, 0.67, 'C', '1', 'OP1271', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101083', 'QD6000-12', DATE('2026-02-23'), DATE('2026-02-27'), DATE('2026-02-27'), 120.00, 3.90, 'C', '2', 'OP1654', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101084', 'AW971-16', DATE('2026-02-23'), DATE('2026-03-04'), DATE('2026-03-04'), 12.00, 0.00, 'C', '3', 'OP1988', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101085', 'AW979-24', DATE('2026-02-23'), DATE('2026-03-25'), DATE('2026-04-02'), 96.00, 0.48, 'C', '3', 'OP1113', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101086', 'SAHTRHARN', DATE('2026-02-20'), DATE('2026-03-11'), DATE('2026-03-16'), 240.00, 0.00, 'C', '2', 'OP1654', 'Closed complete. FAI package submitted with shipment.'), + ('MO101087', 'SABANDAL6', DATE('2026-02-20'), DATE('2026-03-12'), DATE('2026-03-16'), 72.00, 0.31, 'C', '1', 'OP1490', 'Closed complete. FAI package submitted with shipment.'), + ('MO101088', 'SAISOTUB2', DATE('2026-02-20'), DATE('2026-03-16'), DATE('2026-03-24'), 480.00, 0.00, 'C', '2', 'OP1402', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101089', 'AW2010-16', DATE('2026-02-20'), DATE('2026-03-26'), DATE('2026-04-02'), 72.00, 1.78, 'C', '3', 'OP1271', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101090', 'W991F-24', DATE('2026-02-20'), DATE('2026-03-04'), DATE('2026-03-02'), 150.00, 0.00, 'C', '1', 'OP1490', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101091', 'SASEALK32', DATE('2026-02-20'), DATE('2026-03-04'), DATE('2026-03-06'), 960.00, 40.49, 'C', '1', 'OP1113', 'Closed complete. FAI package submitted with shipment.'), + ('MO101092', 'SAPOPPET1', DATE('2026-02-20'), DATE('2026-03-03'), DATE('2026-03-06'), 900.00, 35.88, 'C', '2', 'OP1698', 'Closed short - balance cancelled at customer request.'), + ('MO101093', 'P9600-16', DATE('2026-02-20'), DATE('2026-03-09'), DATE('2026-03-10'), 120.00, 2.39, 'C', '1', 'OP1578', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101094', 'W700-32', DATE('2026-02-19'), DATE('2026-03-23'), DATE('2026-03-27'), 50.00, 1.01, 'C', '2', 'OP1113', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101095', 'AW979-24', DATE('2026-02-19'), DATE('2026-03-04'), DATE('2026-03-10'), 96.00, 0.00, 'C', '3', 'OP1776', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101096', 'SAHTRCORE', DATE('2026-02-19'), DATE('2026-03-20'), DATE('2026-03-30'), 240.00, 0.00, 'C', '2', 'OP1988', 'Closed complete. FAI package submitted with shipment.'), + ('MO101097', 'QD6000-12', DATE('2026-02-19'), DATE('2026-03-09'), DATE('2026-03-09'), 240.00, 0.00, 'C', '3', 'OP1820', 'Closed short - balance cancelled at customer request.'), + ('MO101098', 'SABODY200', DATE('2026-02-19'), DATE('2026-02-24'), DATE('2026-02-27'), 144.00, 0.00, 'C', '1', 'OP1698', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101099', 'SACLSH16', DATE('2026-02-19'), DATE('2026-02-25'), DATE('2026-02-27'), 400.00, 3.56, 'C', '1', 'OP1820', 'Closed short - balance cancelled at customer request.'), + ('MO101100', 'SASEALK24', DATE('2026-02-19'), DATE('2026-03-11'), DATE('2026-03-17'), 192.00, 5.90, 'C', '3', 'OP1698', 'Closed complete. Proof pressure test recorded at 250 PSIG.'); + +INSERT INTO MANUFACTURING_ORDERS (ORDER_ID, ITEM_ID, ORDER_DATE, EXPECTED_COMPLETION_DATE, ACTUAL_COMPLETION_DATE, QUANTITY_ORDERED, QUANTITY_SCRAPPED, STATUS, SHIFT_CODE, OPERATOR_ID, NOTES) VALUES + ('MO101101', 'W902-16', DATE('2026-02-18'), DATE('2026-02-27'), DATE('2026-03-03'), 100.00, 0.00, 'C', '1', 'OP1364', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101102', 'CLPSTD-06', DATE('2026-02-18'), DATE('2026-03-18'), DATE('2026-03-16'), 24.00, 0.26, 'C', '2', 'OP1536', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101103', 'AW2010-24', DATE('2026-02-18'), DATE('2026-03-06'), DATE('2026-03-06'), 25.00, 0.00, 'C', '2', 'OP1113', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101104', 'C3600-16', DATE('2026-02-18'), DATE('2026-03-02'), DATE('2026-03-09'), 150.00, 0.00, 'C', '3', 'OP1611', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101105', 'SAHOSEAS8', DATE('2026-02-18'), DATE('2026-03-20'), DATE('2026-03-30'), 300.00, 7.44, 'C', '1', 'OP1611', 'Closed complete. Shipped ahead of need date.'), + ('MO101106', 'HTRBL-112', DATE('2026-02-18'), DATE('2026-03-13'), DATE('2026-03-12'), 200.00, 5.90, 'C', '1', 'OP1204', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101107', 'SASLEEVE1', DATE('2026-02-18'), DATE('2026-03-24'), DATE('2026-03-26'), 288.00, 8.08, 'C', '1', 'OP1578', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101108', 'AW2100-32', DATE('2026-02-18'), DATE('2026-02-24'), DATE('2026-02-20'), 250.00, 0.00, 'C', '1', 'OP1865', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101109', 'AW2010-32', DATE('2026-02-17'), DATE('2026-03-16'), DATE('2026-03-24'), 20.00, 0.00, 'C', '3', 'OP1654', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101110', 'HTRHS-06', DATE('2026-02-17'), DATE('2026-03-02'), DATE('2026-03-09'), 144.00, 4.09, 'C', '1', 'OP1776', 'Closed complete. FAI package submitted with shipment.'), + ('MO101111', 'AW2010-24', DATE('2026-02-17'), DATE('2026-03-13'), DATE('2026-03-16'), 144.00, 0.00, 'C', '1', 'OP1271', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101112', 'SACLSH24', DATE('2026-02-17'), DATE('2026-03-13'), DATE('2026-03-18'), 120.00, 0.00, 'C', '1', 'OP1907', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101113', 'CLPSTD-06', DATE('2026-02-17'), DATE('2026-03-17'), DATE('2026-03-19'), 200.00, 8.00, 'C', '2', 'OP1578', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101114', 'QD6000-12', DATE('2026-02-17'), DATE('2026-02-24'), DATE('2026-02-27'), 25.00, 0.33, 'C', '3', 'OP1087', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101115', 'CLPSPC-06', DATE('2026-02-17'), DATE('2026-03-12'), DATE('2026-03-18'), 20.00, 0.23, 'C', '3', 'OP1698', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101116', 'AW2100-24', DATE('2026-02-17'), DATE('2026-03-11'), DATE('2026-03-19'), 144.00, 0.00, 'C', '2', 'OP1271', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101117', 'CLPSL-08', DATE('2026-02-16'), DATE('2026-02-23'), DATE('2026-02-27'), 240.00, 0.00, 'C', '2', 'OP1988', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101118', 'AW2010-32', DATE('2026-02-16'), DATE('2026-03-04'), DATE('2026-02-27'), 60.00, 0.00, 'C', '3', 'OP1988', 'Closed complete. FAI package submitted with shipment.'), + ('MO101119', 'CLPWS-10', DATE('2026-02-16'), DATE('2026-02-20'), DATE('2026-02-17'), 80.00, 0.97, 'C', '3', 'OP1698', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101120', 'AW2100-24', DATE('2026-02-16'), DATE('2026-02-20'), DATE('2026-02-19'), 40.00, 0.40, 'C', '2', 'OP1319', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101121', 'SACLSH32T', DATE('2026-02-16'), DATE('2026-03-04'), DATE('2026-03-04'), 750.00, 0.00, 'C', '2', 'OP1042', 'Closed short - balance cancelled at customer request.'), + ('MO101122', 'SASEALK32', DATE('2026-02-16'), DATE('2026-03-20'), DATE('2026-03-19'), 600.00, 25.36, 'C', '1', 'OP1319', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101123', 'SABODY200', DATE('2026-02-16'), DATE('2026-03-02'), DATE('2026-03-09'), 576.00, 7.57, 'C', '2', 'OP1448', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101124', 'P9600-16', DATE('2026-02-16'), DATE('2026-02-23'), DATE('2026-03-03'), 120.00, 0.00, 'C', '1', 'OP1238', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101125', 'P9100-08', DATE('2026-02-13'), DATE('2026-02-18'), DATE('2026-02-24'), 96.00, 0.00, 'C', '2', 'OP1448', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101126', 'HTRHS-06', DATE('2026-02-13'), DATE('2026-03-10'), DATE('2026-03-12'), 144.00, 0.00, 'C', '3', 'OP1578', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101127', 'CLPSL-08', DATE('2026-02-13'), DATE('2026-03-10'), DATE('2026-03-09'), 150.00, 4.29, 'C', '3', 'OP1113', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101128', 'SATHBDY24', DATE('2026-02-13'), DATE('2026-03-09'), DATE('2026-03-11'), 960.00, 17.10, 'C', '1', 'OP1988', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101129', 'QD200-16', DATE('2026-02-13'), DATE('2026-03-10'), DATE('2026-03-16'), 100.00, 0.00, 'C', '1', 'OP1402', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101130', 'AW2010-24', DATE('2026-02-13'), DATE('2026-03-11'), DATE('2026-03-19'), 24.00, 0.00, 'C', '1', 'OP1113', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101131', 'SATHRDNUT', DATE('2026-02-13'), DATE('2026-03-12'), DATE('2026-03-12'), 960.00, 0.00, 'C', '1', 'OP1942', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101132', 'CLPBLK-12', DATE('2026-02-13'), DATE('2026-03-13'), DATE('2026-03-20'), 200.00, 1.84, 'C', '1', 'OP1536', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101133', 'QD6000-12', DATE('2026-02-12'), DATE('2026-02-20'), DATE('2026-02-18'), 96.00, 2.62, 'C', '3', 'OP1271', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101134', 'AW979-24', DATE('2026-02-12'), DATE('2026-02-17'), DATE('2026-02-17'), 36.00, 0.00, 'C', '1', 'OP1733', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101135', 'SACUSHNW8', DATE('2026-02-12'), DATE('2026-02-25'), DATE('2026-02-25'), 900.00, 0.00, 'C', '3', 'OP1238', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101136', 'SACLSH32', DATE('2026-02-12'), DATE('2026-02-25'), DATE('2026-02-24'), 96.00, 3.58, 'C', '1', 'OP1238', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101137', 'SACLSH24', DATE('2026-02-12'), DATE('2026-03-04'), DATE('2026-03-10'), 80.00, 0.00, 'C', '2', 'OP1364', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101138', 'AW2010-24', DATE('2026-02-12'), DATE('2026-03-12'), DATE('2026-03-13'), 80.00, 0.00, 'C', '1', 'OP1087', 'Closed short - balance cancelled at customer request.'), + ('MO101139', 'SABODY200', DATE('2026-02-12'), DATE('2026-03-03'), DATE('2026-03-04'), 50.00, 0.00, 'C', '1', 'OP1907', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101140', 'AW2010-24', DATE('2026-02-11'), DATE('2026-02-20'), DATE('2026-02-19'), 50.00, 0.00, 'C', '3', 'OP1942', 'Closed complete. FAI package submitted with shipment.'), + ('MO101141', 'W991F-24', DATE('2026-02-11'), DATE('2026-02-17'), DATE('2026-02-25'), 240.00, 0.00, 'C', '1', 'OP1156', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101142', 'SASEALK24', DATE('2026-02-11'), DATE('2026-02-27'), DATE('2026-03-09'), 144.00, 0.00, 'C', '2', 'OP1271', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101143', 'QD200-16', DATE('2026-02-11'), DATE('2026-02-25'), DATE('2026-02-20'), 240.00, 0.00, 'C', '1', 'OP1654', 'Closed short - balance cancelled at customer request.'), + ('MO101144', 'W991N-32', DATE('2026-02-11'), DATE('2026-02-27'), DATE('2026-03-02'), 300.00, 6.46, 'C', '2', 'OP1654', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101145', 'SAVTLI01', DATE('2026-02-11'), DATE('2026-02-27'), DATE('2026-03-03'), 450.00, 0.00, 'C', '2', 'OP1204', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101146', 'P9600-16', DATE('2026-02-11'), DATE('2026-03-17'), DATE('2026-03-23'), 240.00, 8.89, 'C', '1', 'OP1865', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101147', 'F63052-24', DATE('2026-02-10'), DATE('2026-02-26'), DATE('2026-02-26'), 20.00, 0.81, 'C', '3', 'OP1733', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101148', 'SASLEEVE1', DATE('2026-02-10'), DATE('2026-02-24'), DATE('2026-03-02'), 120.00, 0.97, 'C', '3', 'OP1733', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101149', 'SASEALK16', DATE('2026-02-10'), DATE('2026-03-04'), DATE('2026-03-02'), 400.00, 0.00, 'C', '1', 'OP1448', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101150', 'QD6000-12', DATE('2026-02-10'), DATE('2026-03-16'), DATE('2026-03-19'), 300.00, 0.00, 'C', '1', 'OP1611', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101151', 'SATHBDY16', DATE('2026-02-10'), DATE('2026-03-05'), DATE('2026-03-11'), 384.00, 0.00, 'C', '3', 'OP1654', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101152', 'SACUSHNW8', DATE('2026-02-10'), DATE('2026-02-16'), DATE('2026-02-19'), 600.00, 3.43, 'C', '2', 'OP1865', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101153', 'SACLSH24', DATE('2026-02-10'), DATE('2026-03-05'), DATE('2026-03-04'), 60.00, 1.81, 'C', '1', 'OP1654', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101154', 'P9100-08', DATE('2026-02-10'), DATE('2026-02-16'), DATE('2026-02-18'), 60.00, 0.00, 'C', '2', 'OP1988', 'Closed short - balance cancelled at customer request.'), + ('MO101155', 'AW2100-24', DATE('2026-02-09'), DATE('2026-02-23'), DATE('2026-02-18'), 72.00, 2.13, 'C', '2', 'OP1271', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101156', 'SABODY200', DATE('2026-02-09'), DATE('2026-02-20'), DATE('2026-02-25'), 36.00, 0.87, 'C', '1', 'OP1490', 'Closed complete. Shipped ahead of need date.'), + ('MO101157', 'SACUSHNW8', DATE('2026-02-09'), DATE('2026-03-04'), DATE('2026-03-11'), 750.00, 27.21, 'C', '3', 'OP1907', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101158', 'QD200-08', DATE('2026-02-09'), DATE('2026-03-05'), DATE('2026-03-03'), 300.00, 1.35, 'C', '3', 'OP1820', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101159', 'SAWEARSH1', DATE('2026-02-09'), DATE('2026-03-12'), DATE('2026-03-11'), 240.00, 10.74, 'C', '3', 'OP1654', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101160', 'SACUSHN06', DATE('2026-02-09'), DATE('2026-02-23'), DATE('2026-02-18'), 60.00, 0.00, 'C', '3', 'OP1319', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101161', 'W902-24', DATE('2026-02-09'), DATE('2026-03-02'), DATE('2026-03-09'), 120.00, 0.00, 'C', '2', 'OP1087', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101162', 'W991-24', DATE('2026-02-06'), DATE('2026-03-04'), DATE('2026-03-06'), 72.00, 0.31, 'C', '3', 'OP1907', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101163', 'SAISOEND1', DATE('2026-02-06'), DATE('2026-03-12'), DATE('2026-03-17'), 180.00, 0.00, 'C', '1', 'OP1448', 'Closed complete. Shipped ahead of need date.'), + ('MO101164', 'SASLEEVE1', DATE('2026-02-06'), DATE('2026-02-20'), DATE('2026-02-17'), 144.00, 3.41, 'C', '3', 'OP1578', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101165', 'AW2100-32', DATE('2026-02-06'), DATE('2026-02-26'), DATE('2026-02-25'), 20.00, 0.00, 'C', '3', 'OP1364', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101166', 'SASEALK16', DATE('2026-02-06'), DATE('2026-02-13'), DATE('2026-02-20'), 75.00, 3.35, 'C', '3', 'OP1907', 'Closed complete. Shipped ahead of need date.'), + ('MO101167', 'SAHTRCORE', DATE('2026-02-06'), DATE('2026-02-26'), DATE('2026-02-25'), 320.00, 0.00, 'C', '1', 'OP1319', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101168', 'AW971-16', DATE('2026-02-06'), DATE('2026-02-20'), DATE('2026-02-17'), 24.00, 0.24, 'C', '3', 'OP1907', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101169', 'AW979-24', DATE('2026-02-05'), DATE('2026-02-23'), DATE('2026-02-19'), 300.00, 0.00, 'C', '3', 'OP1271', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101170', 'W922N-16', DATE('2026-02-05'), DATE('2026-03-02'), DATE('2026-03-09'), 120.00, 3.15, 'C', '3', 'OP1654', 'Closed complete. Shipped ahead of need date.'), + ('MO101171', 'CLPSPC-06', DATE('2026-02-05'), DATE('2026-02-11'), DATE('2026-02-13'), 40.00, 1.42, 'C', '3', 'OP1319', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101172', 'HTRGK-HG1', DATE('2026-02-05'), DATE('2026-02-25'), DATE('2026-02-24'), 36.00, 1.01, 'C', '3', 'OP1578', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101173', 'C8300-32', DATE('2026-02-05'), DATE('2026-02-26'), DATE('2026-02-27'), 25.00, 0.00, 'C', '1', 'OP1611', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101174', 'P9600-16', DATE('2026-02-05'), DATE('2026-03-11'), DATE('2026-03-11'), 150.00, 0.00, 'C', '2', 'OP1087', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101175', 'W991N-32', DATE('2026-02-05'), DATE('2026-02-17'), DATE('2026-02-23'), 96.00, 0.00, 'C', '1', 'OP1698', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101176', 'CLPSPC-06', DATE('2026-02-04'), DATE('2026-02-16'), DATE('2026-02-17'), 300.00, 1.30, 'C', '2', 'OP1865', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101177', 'SAHTRHARN', DATE('2026-02-04'), DATE('2026-02-19'), DATE('2026-02-19'), 300.00, 1.92, 'C', '1', 'OP1865', 'Closed complete. FAI package submitted with shipment.'), + ('MO101178', 'SASEALK24', DATE('2026-02-04'), DATE('2026-03-05'), DATE('2026-03-02'), 1000.00, 0.00, 'C', '3', 'OP1087', 'Closed complete. Shipped ahead of need date.'), + ('MO101179', 'CLPSTD-06', DATE('2026-02-04'), DATE('2026-02-26'), DATE('2026-02-25'), 20.00, 0.00, 'C', '2', 'OP1087', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101180', 'SASLEEVE1', DATE('2026-02-04'), DATE('2026-03-03'), DATE('2026-03-06'), 480.00, 0.00, 'C', '3', 'OP1776', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101181', 'SAWEARSH1', DATE('2026-02-04'), DATE('2026-03-04'), DATE('2026-03-05'), 300.00, 2.39, 'C', '3', 'OP1733', 'Closed short - balance cancelled at customer request.'), + ('MO101182', 'SABODY200', DATE('2026-02-04'), DATE('2026-03-10'), DATE('2026-03-10'), 288.00, 11.88, 'C', '3', 'OP1654', 'Closed complete. Shipped ahead of need date.'), + ('MO101183', 'SAHTRCORE', DATE('2026-02-04'), DATE('2026-03-09'), DATE('2026-03-05'), 160.00, 2.34, 'C', '1', 'OP1578', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101184', 'SAWEARSH1', DATE('2026-02-03'), DATE('2026-03-02'), DATE('2026-03-09'), 100.00, 0.00, 'C', '1', 'OP1238', 'Closed short - balance cancelled at customer request.'), + ('MO101185', 'SAISOTUB2', DATE('2026-02-03'), DATE('2026-02-20'), DATE('2026-02-20'), 96.00, 0.00, 'C', '2', 'OP1536', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101186', 'CLPSPC-06', DATE('2026-02-03'), DATE('2026-02-19'), DATE('2026-02-23'), 72.00, 1.89, 'C', '2', 'OP1733', 'Closed complete. FAI package submitted with shipment.'), + ('MO101187', 'W902-32', DATE('2026-02-03'), DATE('2026-02-11'), DATE('2026-02-11'), 96.00, 0.00, 'C', '3', 'OP1907', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101188', 'SALATCH1', DATE('2026-02-03'), DATE('2026-02-24'), DATE('2026-02-26'), 144.00, 3.89, 'C', '1', 'OP1536', 'Closed complete. Shipped ahead of need date.'), + ('MO101189', 'QD200-16', DATE('2026-02-03'), DATE('2026-02-19'), DATE('2026-02-27'), 144.00, 2.26, 'C', '1', 'OP1907', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101190', 'QD200-08', DATE('2026-02-03'), DATE('2026-02-06'), DATE('2026-02-03'), 300.00, 0.00, 'C', '2', 'OP1536', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101191', 'SABODY600', DATE('2026-02-03'), DATE('2026-02-12'), DATE('2026-02-13'), 48.00, 0.00, 'C', '3', 'OP1578', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101192', 'SATHBDY24', DATE('2026-02-02'), DATE('2026-02-27'), DATE('2026-03-05'), 240.00, 0.00, 'C', '2', 'OP1113', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101193', 'HTRRB-012', DATE('2026-02-02'), DATE('2026-02-05'), DATE('2026-02-03'), 100.00, 0.00, 'C', '1', 'OP1988', 'Closed short - balance cancelled at customer request.'), + ('MO101194', 'SACUSHN06', DATE('2026-02-02'), DATE('2026-02-19'), DATE('2026-02-26'), 400.00, 0.00, 'C', '3', 'OP1988', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101195', 'SAISOTUB2', DATE('2026-02-02'), DATE('2026-03-05'), DATE('2026-03-04'), 100.00, 0.95, 'C', '1', 'OP1402', 'Closed complete. Shipped ahead of need date.'), + ('MO101196', 'AW2100-32', DATE('2026-02-02'), DATE('2026-02-19'), DATE('2026-02-20'), 60.00, 0.00, 'C', '2', 'OP1611', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101197', 'AW2091-24', DATE('2026-02-02'), DATE('2026-03-04'), DATE('2026-03-02'), 72.00, 3.14, 'C', '2', 'OP1319', 'Closed complete. Shipped ahead of need date.'), + ('MO101198', 'SACUSHN06', DATE('2026-02-02'), DATE('2026-03-03'), DATE('2026-03-04'), 192.00, 0.00, 'C', '2', 'OP1654', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101199', 'HTRHS-06', DATE('2026-02-02'), DATE('2026-02-12'), DATE('2026-02-11'), 12.00, 0.30, 'C', '2', 'OP1271', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101200', 'SAISOTUB2', DATE('2026-01-30'), DATE('2026-02-12'), DATE('2026-02-13'), 480.00, 0.00, 'C', '1', 'OP1156', 'Closed complete, one unit scrapped for bore undersize at op 40.'); + +INSERT INTO MANUFACTURING_ORDERS (ORDER_ID, ITEM_ID, ORDER_DATE, EXPECTED_COMPLETION_DATE, ACTUAL_COMPLETION_DATE, QUANTITY_ORDERED, QUANTITY_SCRAPPED, STATUS, SHIFT_CODE, OPERATOR_ID, NOTES) VALUES + ('MO101201', 'P9100-08', DATE('2026-01-30'), DATE('2026-02-25'), DATE('2026-03-04'), 300.00, 0.00, 'C', '3', 'OP1238', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101202', 'W902-16', DATE('2026-01-30'), DATE('2026-02-11'), DATE('2026-02-12'), 72.00, 2.63, 'C', '3', 'OP1113', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101203', 'W902-24', DATE('2026-01-30'), DATE('2026-02-05'), DATE('2026-02-04'), 48.00, 0.00, 'C', '3', 'OP1113', 'Closed complete. FAI package submitted with shipment.'), + ('MO101204', 'W991F-24', DATE('2026-01-30'), DATE('2026-02-25'), DATE('2026-03-04'), 80.00, 1.42, 'C', '3', 'OP1942', 'Closed short - balance cancelled at customer request.'), + ('MO101205', 'SASLEEVE1', DATE('2026-01-30'), DATE('2026-02-05'), DATE('2026-02-09'), 240.00, 3.07, 'C', '1', 'OP1204', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101206', 'SACLSH32T', DATE('2026-01-30'), DATE('2026-02-18'), DATE('2026-02-16'), 24.00, 0.60, 'C', '1', 'OP1156', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101207', 'SAHOSEAS8', DATE('2026-01-29'), DATE('2026-02-04'), DATE('2026-01-30'), 200.00, 0.00, 'C', '3', 'OP1319', 'Closed complete. FAI package submitted with shipment.'), + ('MO101208', 'CLPTL-08', DATE('2026-01-29'), DATE('2026-02-25'), DATE('2026-02-24'), 24.00, 0.00, 'C', '3', 'OP1319', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101209', 'AW979-24', DATE('2026-01-29'), DATE('2026-02-11'), DATE('2026-02-11'), 120.00, 4.18, 'C', '3', 'OP1319', 'Closed complete. FAI package submitted with shipment.'), + ('MO101210', 'SAISOTUB2', DATE('2026-01-29'), DATE('2026-02-04'), DATE('2026-02-04'), 750.00, 29.25, 'C', '3', 'OP1087', 'Closed complete. Shipped ahead of need date.'), + ('MO101211', 'AW2010-24', DATE('2026-01-29'), DATE('2026-02-13'), DATE('2026-02-10'), 96.00, 4.16, 'C', '1', 'OP1113', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101212', 'FRANG-12', DATE('2026-01-29'), DATE('2026-02-24'), DATE('2026-02-23'), 96.00, 0.00, 'C', '3', 'OP1942', 'Closed short - balance cancelled at customer request.'), + ('MO101213', 'CLPTL-08', DATE('2026-01-29'), DATE('2026-02-20'), DATE('2026-02-27'), 20.00, 0.40, 'C', '2', 'OP1820', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101214', 'P9100-08', DATE('2026-01-29'), DATE('2026-03-03'), DATE('2026-03-02'), 25.00, 0.00, 'C', '1', 'OP1698', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101215', 'W991F-24', DATE('2026-01-28'), DATE('2026-02-26'), DATE('2026-03-06'), 40.00, 0.82, 'C', '3', 'OP1733', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101216', 'SACLSH16', DATE('2026-01-28'), DATE('2026-03-02'), DATE('2026-03-06'), 192.00, 0.00, 'C', '3', 'OP1271', 'Closed short - balance cancelled at customer request.'), + ('MO101217', 'SALATCH1', DATE('2026-01-28'), DATE('2026-02-05'), DATE('2026-02-13'), 800.00, 0.00, 'C', '2', 'OP1536', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101218', 'SAISOTUB2', DATE('2026-01-28'), DATE('2026-02-10'), DATE('2026-02-18'), 500.00, 10.78, 'C', '3', 'OP1113', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101219', 'W700-32', DATE('2026-01-28'), DATE('2026-02-10'), DATE('2026-02-17'), 240.00, 0.00, 'C', '3', 'OP1319', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101220', 'P9400-12', DATE('2026-01-28'), DATE('2026-02-24'), DATE('2026-02-25'), 12.00, 0.00, 'C', '3', 'OP1865', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101221', 'SABANDAL6', DATE('2026-01-28'), DATE('2026-02-17'), DATE('2026-02-23'), 192.00, 6.93, 'C', '1', 'OP1820', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101222', 'SATHBDY32', DATE('2026-01-27'), DATE('2026-01-30'), DATE('2026-02-06'), 144.00, 0.00, 'C', '2', 'OP1238', 'Closed complete. Shipped ahead of need date.'), + ('MO101223', 'SAHTRHARN', DATE('2026-01-27'), DATE('2026-02-17'), DATE('2026-02-23'), 108.00, 0.00, 'C', '3', 'OP1448', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101224', 'SATHBDY32', DATE('2026-01-27'), DATE('2026-02-24'), DATE('2026-02-24'), 144.00, 3.62, 'C', '1', 'OP1087', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101225', 'SAHTRHARN', DATE('2026-01-27'), DATE('2026-02-20'), DATE('2026-02-25'), 432.00, 0.00, 'C', '1', 'OP1578', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101226', 'AW979-24', DATE('2026-01-27'), DATE('2026-02-25'), DATE('2026-03-05'), 150.00, 0.00, 'C', '2', 'OP1776', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101227', 'CLPWS-10', DATE('2026-01-27'), DATE('2026-02-25'), DATE('2026-02-26'), 150.00, 1.70, 'C', '3', 'OP1490', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101228', 'SACUSHN06', DATE('2026-01-27'), DATE('2026-02-18'), DATE('2026-02-16'), 80.00, 0.00, 'C', '3', 'OP1776', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101229', 'SASLEEVE1', DATE('2026-01-27'), DATE('2026-02-19'), DATE('2026-02-17'), 96.00, 3.59, 'C', '2', 'OP1448', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101230', 'CLPSTD-06', DATE('2026-01-26'), DATE('2026-02-02'), DATE('2026-02-09'), 100.00, 3.94, 'C', '2', 'OP1087', 'Closed short - balance cancelled at customer request.'), + ('MO101231', 'AW2100-24', DATE('2026-01-26'), DATE('2026-02-10'), DATE('2026-02-12'), 80.00, 0.00, 'C', '3', 'OP1654', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101232', 'SAHOSEAS8', DATE('2026-01-26'), DATE('2026-02-24'), DATE('2026-03-03'), 600.00, 15.36, 'C', '3', 'OP1536', 'Closed complete. FAI package submitted with shipment.'), + ('MO101233', 'SASLEEVE1', DATE('2026-01-26'), DATE('2026-02-13'), DATE('2026-02-10'), 60.00, 1.50, 'C', '3', 'OP1611', 'Closed short - balance cancelled at customer request.'), + ('MO101234', 'CLPWS-10', DATE('2026-01-26'), DATE('2026-02-25'), DATE('2026-02-27'), 96.00, 1.66, 'C', '2', 'OP1536', 'Closed complete. Shipped ahead of need date.'), + ('MO101235', 'CLPWS-10', DATE('2026-01-26'), DATE('2026-02-02'), DATE('2026-01-29'), 50.00, 0.00, 'C', '1', 'OP1654', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101236', 'SASEALK24', DATE('2026-01-26'), DATE('2026-02-10'), DATE('2026-02-09'), 72.00, 0.86, 'C', '2', 'OP1907', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101237', 'SABODY600', DATE('2026-01-26'), DATE('2026-02-16'), DATE('2026-02-13'), 450.00, 2.93, 'C', '2', 'OP1238', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101238', 'CLPWS-10', DATE('2026-01-23'), DATE('2026-02-16'), DATE('2026-02-13'), 80.00, 1.75, 'C', '2', 'OP1578', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101239', 'AW2010-16', DATE('2026-01-23'), DATE('2026-02-16'), DATE('2026-02-20'), 20.00, 0.38, 'C', '1', 'OP1578', 'Closed complete. FAI package submitted with shipment.'), + ('MO101240', 'P9600-16', DATE('2026-01-23'), DATE('2026-02-24'), DATE('2026-02-19'), 72.00, 0.00, 'C', '3', 'OP1448', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101241', 'CLPWS-10', DATE('2026-01-23'), DATE('2026-02-17'), DATE('2026-02-18'), 72.00, 2.92, 'C', '3', 'OP1578', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101242', 'SACUSHNW8', DATE('2026-01-23'), DATE('2026-02-18'), DATE('2026-02-23'), 160.00, 4.69, 'C', '2', 'OP1578', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101243', 'SATHRDNUT', DATE('2026-01-23'), DATE('2026-02-02'), DATE('2026-02-04'), 600.00, 0.00, 'C', '2', 'OP1698', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101244', 'SAISOEND1', DATE('2026-01-23'), DATE('2026-02-04'), DATE('2026-02-09'), 72.00, 1.71, 'C', '3', 'OP1364', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101245', 'AW971-16', DATE('2026-01-23'), DATE('2026-02-18'), DATE('2026-02-18'), 240.00, 4.73, 'C', '2', 'OP1113', 'Closed complete. FAI package submitted with shipment.'), + ('MO101246', 'AW2091-24', DATE('2026-01-22'), DATE('2026-02-03'), DATE('2026-02-09'), 250.00, 0.00, 'C', '1', 'OP1238', 'Closed short - balance cancelled at customer request.'), + ('MO101247', 'W902-16', DATE('2026-01-22'), DATE('2026-02-06'), DATE('2026-02-03'), 50.00, 1.25, 'C', '2', 'OP1204', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101248', 'HTRBL-112', DATE('2026-01-22'), DATE('2026-02-12'), DATE('2026-02-20'), 50.00, 0.00, 'C', '2', 'OP1733', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101249', 'SATHBDY16', DATE('2026-01-22'), DATE('2026-02-23'), DATE('2026-02-19'), 240.00, 0.00, 'C', '2', 'OP1448', 'Closed complete. Shipped ahead of need date.'), + ('MO101250', 'CLPBLK-12', DATE('2026-01-22'), DATE('2026-02-24'), DATE('2026-03-03'), 48.00, 0.93, 'C', '3', 'OP1865', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101251', 'ISOH-0500', DATE('2026-01-22'), DATE('2026-02-02'), DATE('2026-02-03'), 300.00, 0.00, 'C', '1', 'OP1364', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101252', 'SAHTRHARN', DATE('2026-01-22'), DATE('2026-01-28'), DATE('2026-02-05'), 96.00, 4.09, 'C', '3', 'OP1733', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101253', 'QD6000-12', DATE('2026-01-21'), DATE('2026-02-20'), DATE('2026-02-20'), 60.00, 2.34, 'C', '3', 'OP1042', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101254', 'QD200-16', DATE('2026-01-21'), DATE('2026-02-16'), DATE('2026-02-19'), 25.00, 0.67, 'C', '1', 'OP1698', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101255', 'W991F-24', DATE('2026-01-21'), DATE('2026-02-16'), DATE('2026-02-20'), 25.00, 0.00, 'C', '2', 'OP1448', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101256', 'GRMAC-04', DATE('2026-01-21'), DATE('2026-02-09'), DATE('2026-02-11'), 72.00, 0.00, 'C', '2', 'OP1156', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101257', 'SAWEARSH1', DATE('2026-01-21'), DATE('2026-01-26'), DATE('2026-01-23'), 400.00, 8.43, 'C', '3', 'OP1820', 'Closed complete. FAI package submitted with shipment.'), + ('MO101258', 'FRANG-12', DATE('2026-01-21'), DATE('2026-02-18'), DATE('2026-02-25'), 150.00, 0.00, 'C', '3', 'OP1698', 'Closed complete. FAI package submitted with shipment.'), + ('MO101259', 'SAISOTUB1', DATE('2026-01-21'), DATE('2026-02-19'), DATE('2026-02-27'), 108.00, 3.99, 'C', '2', 'OP1087', 'Closed short - balance cancelled at customer request.'), + ('MO101260', 'AW971-16', DATE('2026-01-21'), DATE('2026-02-16'), DATE('2026-02-17'), 150.00, 0.67, 'C', '3', 'OP1865', 'Closed complete. Shipped ahead of need date.'), + ('MO101261', 'F63052-24', DATE('2026-01-20'), DATE('2026-01-23'), DATE('2026-01-28'), 12.00, 0.00, 'C', '1', 'OP1865', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101262', 'W902-16', DATE('2026-01-20'), DATE('2026-02-16'), DATE('2026-02-24'), 12.00, 0.00, 'C', '1', 'OP1988', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101263', 'CLPTL-08', DATE('2026-01-20'), DATE('2026-01-27'), DATE('2026-01-28'), 48.00, 0.91, 'C', '2', 'OP1319', 'Closed short - balance cancelled at customer request.'), + ('MO101264', 'SABODY600', DATE('2026-01-20'), DATE('2026-02-17'), DATE('2026-02-16'), 480.00, 0.00, 'C', '1', 'OP1820', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101265', 'SACLSH32', DATE('2026-01-20'), DATE('2026-02-09'), DATE('2026-02-04'), 192.00, 8.55, 'C', '2', 'OP1448', 'Closed short - balance cancelled at customer request.'), + ('MO101266', 'CLPSTD-06', DATE('2026-01-20'), DATE('2026-02-06'), DATE('2026-02-04'), 25.00, 0.00, 'C', '1', 'OP1156', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101267', 'AW2100-24', DATE('2026-01-20'), DATE('2026-01-26'), DATE('2026-01-29'), 72.00, 0.00, 'C', '1', 'OP1113', 'Closed short - balance cancelled at customer request.'), + ('MO101268', 'SATHBDY16', DATE('2026-01-19'), DATE('2026-02-04'), DATE('2026-02-05'), 50.00, 0.00, 'C', '2', 'OP1271', 'Closed complete. Shipped ahead of need date.'), + ('MO101269', 'W902-32', DATE('2026-01-19'), DATE('2026-02-04'), DATE('2026-02-10'), 144.00, 0.00, 'C', '1', 'OP1448', 'Closed complete. FAI package submitted with shipment.'), + ('MO101270', 'W902-32', DATE('2026-01-19'), DATE('2026-01-26'), DATE('2026-01-28'), 100.00, 1.83, 'C', '2', 'OP1733', 'Closed short - balance cancelled at customer request.'), + ('MO101271', 'HTRRB-024', DATE('2026-01-19'), DATE('2026-01-22'), DATE('2026-01-30'), 40.00, 0.00, 'C', '2', 'OP1907', 'Closed complete. FAI package submitted with shipment.'), + ('MO101272', 'SAPOPPET1', DATE('2026-01-19'), DATE('2026-02-05'), DATE('2026-02-04'), 450.00, 19.81, 'C', '3', 'OP1402', 'Closed complete. FAI package submitted with shipment.'), + ('MO101273', 'AW2091-24', DATE('2026-01-19'), DATE('2026-02-11'), DATE('2026-02-16'), 240.00, 0.00, 'C', '3', 'OP1448', 'Closed short - balance cancelled at customer request.'), + ('MO101274', 'AW2010-32', DATE('2026-01-19'), DATE('2026-02-19'), DATE('2026-02-23'), 25.00, 0.25, 'C', '1', 'OP1319', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101275', 'AW2010-32', DATE('2026-01-19'), DATE('2026-02-03'), DATE('2026-02-04'), 48.00, 0.60, 'C', '1', 'OP1364', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101276', 'CLPSPC-06', DATE('2026-01-16'), DATE('2026-02-04'), DATE('2026-02-11'), 80.00, 0.00, 'C', '2', 'OP1490', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101277', 'CLPWS-10', DATE('2026-01-16'), DATE('2026-01-29'), DATE('2026-01-29'), 120.00, 0.00, 'C', '1', 'OP1907', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101278', 'SAISOTUB1', DATE('2026-01-16'), DATE('2026-02-16'), DATE('2026-02-17'), 144.00, 3.66, 'C', '1', 'OP1319', 'Closed complete. FAI package submitted with shipment.'), + ('MO101279', 'SATHBDY24', DATE('2026-01-16'), DATE('2026-02-03'), DATE('2026-01-29'), 384.00, 6.08, 'C', '2', 'OP1402', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101280', 'SABODY200', DATE('2026-01-16'), DATE('2026-01-21'), DATE('2026-01-23'), 75.00, 0.49, 'C', '2', 'OP1364', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101281', 'CLPBLK-12', DATE('2026-01-16'), DATE('2026-02-11'), DATE('2026-02-19'), 48.00, 0.00, 'C', '2', 'OP1536', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101282', 'W902-16', DATE('2026-01-16'), DATE('2026-02-11'), DATE('2026-02-10'), 200.00, 0.00, 'C', '1', 'OP1988', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101283', 'HOSE-04S', DATE('2026-01-16'), DATE('2026-02-10'), DATE('2026-02-11'), 20.00, 0.00, 'C', '3', 'OP1204', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101284', 'F63052-24', DATE('2026-01-15'), DATE('2026-01-28'), DATE('2026-02-03'), 24.00, 0.68, 'C', '2', 'OP1319', 'Closed complete. FAI package submitted with shipment.'), + ('MO101285', 'SACLSH32T', DATE('2026-01-15'), DATE('2026-02-04'), DATE('2026-02-11'), 144.00, 5.74, 'C', '1', 'OP1490', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101286', 'SAWEARSH1', DATE('2026-01-15'), DATE('2026-01-30'), DATE('2026-02-09'), 72.00, 0.00, 'C', '2', 'OP1776', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101287', 'P9100-08', DATE('2026-01-15'), DATE('2026-02-13'), DATE('2026-02-13'), 25.00, 0.11, 'C', '1', 'OP1698', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101288', 'HTRRB-024', DATE('2026-01-15'), DATE('2026-02-13'), DATE('2026-02-16'), 80.00, 0.00, 'C', '1', 'OP1654', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101289', 'HTRHS-06', DATE('2026-01-15'), DATE('2026-01-22'), DATE('2026-01-22'), 25.00, 0.00, 'C', '3', 'OP1865', 'Closed short - balance cancelled at customer request.'), + ('MO101290', 'C3600-16', DATE('2026-01-15'), DATE('2026-02-16'), DATE('2026-02-18'), 25.00, 0.78, 'C', '3', 'OP1042', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101291', 'AW979-24', DATE('2026-01-14'), DATE('2026-02-06'), DATE('2026-02-05'), 25.00, 0.00, 'C', '1', 'OP1402', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101292', 'SASEALK32', DATE('2026-01-14'), DATE('2026-02-16'), DATE('2026-02-19'), 200.00, 0.00, 'C', '1', 'OP1988', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101293', 'QD200-08', DATE('2026-01-14'), DATE('2026-02-02'), DATE('2026-02-05'), 25.00, 0.00, 'C', '3', 'OP1238', 'Closed complete. FAI package submitted with shipment.'), + ('MO101294', 'P9600-16', DATE('2026-01-14'), DATE('2026-01-20'), DATE('2026-01-28'), 300.00, 3.82, 'C', '2', 'OP1611', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101295', 'AW2010-32', DATE('2026-01-14'), DATE('2026-01-20'), DATE('2026-01-21'), 150.00, 0.00, 'C', '2', 'OP1204', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101296', 'C8300-32', DATE('2026-01-14'), DATE('2026-01-26'), DATE('2026-01-21'), 200.00, 0.00, 'C', '1', 'OP1448', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101297', 'P9600-16', DATE('2026-01-14'), DATE('2026-01-20'), DATE('2026-01-15'), 50.00, 0.00, 'C', '3', 'OP1402', 'Closed complete. FAI package submitted with shipment.'), + ('MO101298', 'P9400-12', DATE('2026-01-14'), DATE('2026-01-21'), DATE('2026-01-20'), 150.00, 0.00, 'C', '3', 'OP1204', 'Closed complete. Shipped ahead of need date.'), + ('MO101299', 'AW971-16', DATE('2026-01-13'), DATE('2026-02-09'), DATE('2026-02-12'), 150.00, 0.00, 'C', '2', 'OP1113', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101300', 'SACUSHNW8', DATE('2026-01-13'), DATE('2026-01-22'), DATE('2026-01-28'), 240.00, 0.00, 'C', '1', 'OP1113', 'Closed complete. Source inspection passed on first presentation.'); + +INSERT INTO MANUFACTURING_ORDERS (ORDER_ID, ITEM_ID, ORDER_DATE, EXPECTED_COMPLETION_DATE, ACTUAL_COMPLETION_DATE, QUANTITY_ORDERED, QUANTITY_SCRAPPED, STATUS, SHIFT_CODE, OPERATOR_ID, NOTES) VALUES + ('MO101301', 'CLPSL-08', DATE('2026-01-13'), DATE('2026-02-12'), DATE('2026-02-10'), 48.00, 0.00, 'C', '2', 'OP1238', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101302', 'SACLSH24', DATE('2026-01-13'), DATE('2026-01-29'), DATE('2026-01-27'), 72.00, 2.83, 'C', '1', 'OP1865', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101303', 'AW2100-24', DATE('2026-01-13'), DATE('2026-02-06'), DATE('2026-02-04'), 20.00, 0.00, 'C', '2', 'OP1578', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101304', 'SAISOTUB2', DATE('2026-01-13'), DATE('2026-02-13'), DATE('2026-02-17'), 160.00, 0.00, 'C', '3', 'OP1988', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101305', 'ISOF-2000', DATE('2026-01-13'), DATE('2026-02-05'), DATE('2026-02-04'), 24.00, 0.00, 'C', '3', 'OP1733', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101306', 'AW971-24', DATE('2026-01-12'), DATE('2026-01-29'), DATE('2026-02-03'), 96.00, 0.00, 'C', '2', 'OP1536', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101307', 'SAHTRHARN', DATE('2026-01-12'), DATE('2026-02-06'), DATE('2026-02-05'), 60.00, 2.62, 'C', '2', 'OP1271', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101308', 'P9400-12', DATE('2026-01-12'), DATE('2026-01-28'), DATE('2026-01-29'), 24.00, 1.05, 'C', '1', 'OP1204', 'Closed complete. FAI package submitted with shipment.'), + ('MO101309', 'P9400-12', DATE('2026-01-12'), DATE('2026-02-13'), DATE('2026-02-20'), 96.00, 0.00, 'C', '1', 'OP1042', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101310', 'ISOF-2000', DATE('2026-01-12'), DATE('2026-02-04'), DATE('2026-02-11'), 300.00, 7.53, 'C', '2', 'OP1271', 'Closed complete. FAI package submitted with shipment.'), + ('MO101311', 'SASEALK16', DATE('2026-01-12'), DATE('2026-01-19'), DATE('2026-01-23'), 240.00, 0.00, 'C', '2', 'OP1907', 'Closed short - balance cancelled at customer request.'), + ('MO101312', 'W991F-24', DATE('2026-01-12'), DATE('2026-01-16'), DATE('2026-01-26'), 144.00, 0.00, 'C', '3', 'OP1654', 'Closed short - balance cancelled at customer request.'), + ('MO101313', 'W902-32', DATE('2026-01-12'), DATE('2026-01-21'), DATE('2026-01-27'), 200.00, 0.00, 'C', '2', 'OP1578', 'Closed short - balance cancelled at customer request.'), + ('MO101314', 'P9100-08', DATE('2026-01-09'), DATE('2026-01-16'), DATE('2026-01-16'), 80.00, 0.00, 'C', '2', 'OP1204', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101315', 'AW2010-32', DATE('2026-01-09'), DATE('2026-01-27'), DATE('2026-02-02'), 300.00, 3.93, 'C', '2', 'OP1042', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101316', 'SABANDCR8', DATE('2026-01-09'), DATE('2026-01-23'), DATE('2026-02-02'), 480.00, 0.00, 'C', '2', 'OP1448', 'Closed complete. Shipped ahead of need date.'), + ('MO101317', 'WMDEF-050', DATE('2026-01-09'), DATE('2026-01-27'), DATE('2026-02-03'), 50.00, 1.49, 'C', '1', 'OP1865', 'Closed complete. Shipped ahead of need date.'), + ('MO101318', 'W991N-32', DATE('2026-01-09'), DATE('2026-02-02'), DATE('2026-02-09'), 48.00, 0.00, 'C', '3', 'OP1733', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101319', 'HTRGK-HG1', DATE('2026-01-09'), DATE('2026-01-30'), DATE('2026-01-27'), 24.00, 0.55, 'C', '1', 'OP1820', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101320', 'SASLEEVE1', DATE('2026-01-09'), DATE('2026-02-09'), DATE('2026-02-10'), 72.00, 0.00, 'C', '1', 'OP1042', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101321', 'QD200-08', DATE('2026-01-08'), DATE('2026-01-13'), DATE('2026-01-21'), 20.00, 0.11, 'C', '1', 'OP1865', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101322', 'P9100-08', DATE('2026-01-08'), DATE('2026-01-29'), DATE('2026-01-26'), 240.00, 0.00, 'C', '1', 'OP1865', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101323', 'SATHBDY32', DATE('2026-01-08'), DATE('2026-02-06'), DATE('2026-02-16'), 300.00, 13.21, 'C', '3', 'OP1611', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101324', 'HTRRB-024', DATE('2026-01-08'), DATE('2026-01-14'), DATE('2026-01-20'), 80.00, 1.81, 'C', '2', 'OP1319', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101325', 'W902-32', DATE('2026-01-08'), DATE('2026-01-22'), DATE('2026-01-27'), 36.00, 0.87, 'C', '3', 'OP1578', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101326', 'W991F-24', DATE('2026-01-08'), DATE('2026-02-03'), DATE('2026-02-06'), 36.00, 1.20, 'C', '1', 'OP1364', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101327', 'P9600-16', DATE('2026-01-08'), DATE('2026-02-06'), DATE('2026-02-13'), 50.00, 0.40, 'C', '1', 'OP1907', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101328', 'SAISOEND1', DATE('2026-01-08'), DATE('2026-01-23'), DATE('2026-01-27'), 72.00, 0.00, 'C', '1', 'OP1319', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101329', 'WMLQD-075', DATE('2026-01-07'), DATE('2026-02-04'), NULL, 25.00, 0.00, 'R', '3', 'OP1238', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO101330', 'AW971-16', DATE('2026-01-07'), DATE('2026-01-30'), DATE('2026-02-04'), 200.00, 0.00, 'C', '1', 'OP1865', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101331', 'SACLSH32T', DATE('2026-01-07'), DATE('2026-01-19'), DATE('2026-01-20'), 400.00, 0.00, 'C', '2', 'OP1271', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101332', 'ISOF-2000', DATE('2026-01-07'), DATE('2026-01-15'), DATE('2026-01-12'), 100.00, 2.09, 'C', '3', 'OP1448', 'Closed short - balance cancelled at customer request.'), + ('MO101333', 'AW2091-24', DATE('2026-01-07'), DATE('2026-01-30'), DATE('2026-02-03'), 96.00, 3.61, 'C', '2', 'OP1156', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101334', 'SACLSH24', DATE('2026-01-07'), DATE('2026-01-14'), DATE('2026-01-19'), 48.00, 0.46, 'C', '3', 'OP1611', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101335', 'CLPBLK-12', DATE('2026-01-07'), DATE('2026-01-13'), DATE('2026-01-20'), 120.00, 3.95, 'C', '2', 'OP1942', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101336', 'P9100-08', DATE('2026-01-07'), DATE('2026-01-12'), DATE('2026-01-16'), 200.00, 6.96, 'C', '1', 'OP1319', 'Closed complete. FAI package submitted with shipment.'), + ('MO101337', 'P9100-08', DATE('2026-01-06'), DATE('2026-02-04'), DATE('2026-02-02'), 100.00, 0.00, 'C', '3', 'OP1364', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101338', 'AW2100-32', DATE('2026-01-06'), DATE('2026-01-28'), DATE('2026-01-26'), 80.00, 0.00, 'C', '3', 'OP1907', 'Closed complete. FAI package submitted with shipment.'), + ('MO101339', 'SACUSHN06', DATE('2026-01-06'), DATE('2026-02-06'), DATE('2026-02-16'), 72.00, 3.19, 'C', '2', 'OP1611', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101340', 'SAISOEND1', DATE('2026-01-06'), DATE('2026-01-30'), DATE('2026-01-28'), 288.00, 0.00, 'C', '1', 'OP1907', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101341', 'W991F-24', DATE('2026-01-06'), DATE('2026-02-02'), DATE('2026-01-29'), 144.00, 0.00, 'C', '1', 'OP1536', 'Closed short - balance cancelled at customer request.'), + ('MO101342', 'W902-32', DATE('2026-01-06'), DATE('2026-01-21'), DATE('2026-01-20'), 150.00, 0.00, 'C', '2', 'OP1578', 'Closed short - balance cancelled at customer request.'), + ('MO101343', 'SACUSHNW8', DATE('2026-01-06'), DATE('2026-01-28'), DATE('2026-01-29'), 600.00, 7.04, 'C', '2', 'OP1865', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101344', 'SAHOSEAS8', DATE('2026-01-05'), DATE('2026-01-29'), DATE('2026-02-03'), 1000.00, 11.50, 'C', '1', 'OP1156', 'Closed complete. Shipped ahead of need date.'), + ('MO101345', 'QD200-08', DATE('2026-01-05'), DATE('2026-01-13'), DATE('2026-01-13'), 20.00, 0.62, 'C', '1', 'OP1319', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101346', 'SACLSH24', DATE('2026-01-05'), DATE('2026-02-03'), DATE('2026-01-29'), 300.00, 7.01, 'C', '2', 'OP1113', 'Closed complete. FAI package submitted with shipment.'), + ('MO101347', 'SAHTRHARN', DATE('2026-01-05'), DATE('2026-02-06'), DATE('2026-02-12'), 96.00, 0.00, 'C', '3', 'OP1402', 'Closed short - balance cancelled at customer request.'), + ('MO101348', 'SABANDCR8', DATE('2026-01-05'), DATE('2026-01-29'), DATE('2026-01-30'), 192.00, 0.00, 'C', '3', 'OP1087', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101349', 'CLPBLK-12', DATE('2026-01-05'), DATE('2026-01-19'), DATE('2026-01-16'), 144.00, 2.22, 'C', '3', 'OP1113', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101350', 'SACUSHN06', DATE('2026-01-05'), DATE('2026-02-04'), DATE('2026-02-09'), 24.00, 0.00, 'C', '3', 'OP1490', 'Closed complete. Shipped ahead of need date.'), + ('MO101351', 'AW971-24', DATE('2026-01-05'), DATE('2026-01-14'), DATE('2026-01-09'), 240.00, 7.68, 'C', '3', 'OP1113', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101352', 'W902-16', DATE('2026-01-02'), DATE('2026-01-07'), DATE('2026-01-02'), 120.00, 0.00, 'C', '1', 'OP1988', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101353', 'SACLSH16', DATE('2026-01-02'), DATE('2026-02-03'), DATE('2026-02-02'), 600.00, 18.94, 'C', '3', 'OP1113', 'Closed short - balance cancelled at customer request.'), + ('MO101354', 'SABODY600', DATE('2026-01-02'), DATE('2026-02-05'), DATE('2026-02-09'), 144.00, 0.00, 'C', '3', 'OP1820', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101355', 'W991F-24', DATE('2026-01-02'), DATE('2026-01-23'), DATE('2026-01-23'), 20.00, 0.00, 'C', '2', 'OP1238', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101356', 'SACLSH32T', DATE('2026-01-02'), DATE('2026-01-09'), DATE('2026-01-14'), 48.00, 1.78, 'C', '3', 'OP1654', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101357', 'SACLSH24C', DATE('2026-01-02'), DATE('2026-01-14'), DATE('2026-01-22'), 75.00, 2.57, 'C', '2', 'OP1271', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101358', 'CLPBLK-12', DATE('2026-01-02'), DATE('2026-01-29'), DATE('2026-01-27'), 240.00, 3.95, 'C', '3', 'OP1611', 'Closed complete. FAI package submitted with shipment.'), + ('MO101359', 'SABODY200', DATE('2026-01-02'), DATE('2026-02-03'), DATE('2026-02-05'), 1200.00, 6.84, 'C', '3', 'OP1087', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101360', 'CLPSPC-06', DATE('2026-01-01'), DATE('2026-01-22'), DATE('2026-01-21'), 50.00, 0.99, 'C', '2', 'OP1238', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101361', 'AW971-16', DATE('2026-01-01'), DATE('2026-01-13'), DATE('2026-01-13'), 120.00, 1.10, 'C', '2', 'OP1271', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101362', 'CLPSTD-06', DATE('2026-01-01'), DATE('2026-01-30'), DATE('2026-02-09'), 200.00, 0.00, 'C', '1', 'OP1087', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101363', 'W991F-24', DATE('2026-01-01'), DATE('2026-01-29'), DATE('2026-01-26'), 100.00, 0.00, 'C', '1', 'OP1448', 'Closed complete. Shipped ahead of need date.'), + ('MO101364', 'G620-32', DATE('2026-01-01'), DATE('2026-02-02'), DATE('2026-02-04'), 80.00, 0.42, 'C', '2', 'OP1578', 'Closed complete. Shipped ahead of need date.'), + ('MO101365', 'W991-24', DATE('2026-01-01'), DATE('2026-02-03'), DATE('2026-02-06'), 60.00, 0.62, 'C', '3', 'OP1402', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101366', 'CLPSPC-06', DATE('2026-01-01'), DATE('2026-01-19'), DATE('2026-01-15'), 240.00, 0.00, 'C', '2', 'OP1865', 'Closed complete. FAI package submitted with shipment.'), + ('MO101367', 'W991-16', DATE('2025-12-31'), DATE('2026-01-19'), DATE('2026-01-23'), 72.00, 0.49, 'C', '2', 'OP1319', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101368', 'HTRCT-22W', DATE('2025-12-31'), DATE('2026-01-14'), DATE('2026-01-13'), 96.00, 0.00, 'C', '2', 'OP1865', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101369', 'SACLSH32', DATE('2025-12-31'), DATE('2026-01-05'), DATE('2025-12-31'), 320.00, 0.00, 'C', '3', 'OP1490', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101370', 'HTRRB-024', DATE('2025-12-31'), DATE('2026-01-05'), DATE('2026-01-06'), 40.00, 1.51, 'C', '1', 'OP1113', 'Closed short - balance cancelled at customer request.'), + ('MO101371', 'QD200-08', DATE('2025-12-31'), DATE('2026-02-02'), DATE('2026-02-05'), 36.00, 0.00, 'C', '3', 'OP1402', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101372', 'CLPWS-10', DATE('2025-12-31'), DATE('2026-01-28'), DATE('2026-02-03'), 240.00, 0.00, 'C', '2', 'OP1733', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101373', 'SACLSH32', DATE('2025-12-31'), DATE('2026-01-19'), DATE('2026-01-15'), 80.00, 0.00, 'C', '2', 'OP1865', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101374', 'PVFUSE-12', DATE('2025-12-30'), DATE('2026-01-30'), DATE('2026-02-03'), 72.00, 0.00, 'C', '2', 'OP1942', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101375', 'CLPWS-10', DATE('2025-12-30'), DATE('2026-02-02'), DATE('2026-02-06'), 50.00, 1.70, 'C', '1', 'OP1776', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101376', 'SASEALK16', DATE('2025-12-30'), DATE('2026-01-30'), DATE('2026-01-28'), 480.00, 0.00, 'C', '1', 'OP1611', 'Closed short - balance cancelled at customer request.'), + ('MO101377', 'W902-24', DATE('2025-12-30'), DATE('2026-01-21'), DATE('2026-01-21'), 240.00, 0.00, 'C', '3', 'OP1733', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101378', 'W902-32', DATE('2025-12-30'), DATE('2026-01-07'), DATE('2026-01-14'), 240.00, 3.99, 'C', '2', 'OP1578', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101379', 'QD200-08', DATE('2025-12-30'), DATE('2026-01-20'), DATE('2026-01-21'), 240.00, 5.38, 'C', '1', 'OP1364', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101380', 'AW2010-24', DATE('2025-12-30'), DATE('2026-01-20'), DATE('2026-01-16'), 250.00, 0.00, 'C', '1', 'OP1087', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101381', 'CLPWS-10', DATE('2025-12-30'), DATE('2026-01-09'), DATE('2026-01-08'), 24.00, 0.00, 'C', '3', 'OP1156', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101382', 'C3600-16', DATE('2025-12-29'), DATE('2026-01-12'), DATE('2026-01-14'), 96.00, 1.24, 'C', '2', 'OP1654', 'Closed short - balance cancelled at customer request.'), + ('MO101383', 'QD200-08', DATE('2025-12-29'), DATE('2026-01-28'), DATE('2026-02-04'), 120.00, 0.00, 'C', '2', 'OP1698', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101384', 'SAISOEND1', DATE('2025-12-29'), DATE('2026-01-26'), DATE('2026-01-27'), 48.00, 0.97, 'C', '2', 'OP1042', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101385', 'W991N-32', DATE('2025-12-29'), DATE('2026-01-26'), DATE('2026-01-29'), 48.00, 0.00, 'C', '2', 'OP1865', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101386', 'SACLSH24', DATE('2025-12-29'), DATE('2026-01-21'), DATE('2026-01-19'), 500.00, 6.97, 'C', '1', 'OP1654', 'Closed short - balance cancelled at customer request.'), + ('MO101387', 'W902-16', DATE('2025-12-29'), DATE('2026-01-02'), DATE('2026-01-09'), 48.00, 2.16, 'C', '1', 'OP1611', 'Closed complete. Shipped ahead of need date.'), + ('MO101388', 'SATHBDY32', DATE('2025-12-29'), DATE('2026-01-12'), DATE('2026-01-19'), 240.00, 7.88, 'C', '1', 'OP1271', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101389', 'W991-16', DATE('2025-12-29'), DATE('2026-01-14'), DATE('2026-01-13'), 240.00, 0.00, 'C', '1', 'OP1042', 'Closed short - balance cancelled at customer request.'), + ('MO101390', 'QD6000-12', DATE('2025-12-26'), DATE('2026-01-27'), DATE('2026-01-26'), 150.00, 3.42, 'C', '1', 'OP1776', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101391', 'P9600-16', DATE('2025-12-26'), DATE('2026-01-08'), DATE('2026-01-09'), 250.00, 0.00, 'C', '1', 'OP1654', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101392', 'SABANDCR8', DATE('2025-12-26'), DATE('2026-01-08'), DATE('2026-01-07'), 144.00, 3.14, 'C', '3', 'OP1865', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101393', 'P9400-12', DATE('2025-12-26'), DATE('2026-01-06'), DATE('2026-01-09'), 48.00, 0.00, 'C', '1', 'OP1820', 'Closed short - balance cancelled at customer request.'), + ('MO101394', 'SAHOSEAS8', DATE('2025-12-26'), DATE('2026-01-20'), DATE('2026-01-19'), 240.00, 0.00, 'C', '2', 'OP1698', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101395', 'C3600-16', DATE('2025-12-26'), DATE('2026-01-02'), DATE('2026-01-06'), 72.00, 1.23, 'C', '1', 'OP1238', 'Closed complete. FAI package submitted with shipment.'), + ('MO101396', 'SATHBDY32', DATE('2025-12-26'), DATE('2026-01-01'), DATE('2026-01-05'), 480.00, 0.00, 'C', '2', 'OP1087', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101397', 'SAVTLI01', DATE('2025-12-25'), DATE('2026-01-08'), DATE('2026-01-08'), 1000.00, 0.00, 'C', '1', 'OP1238', 'Closed complete. FAI package submitted with shipment.'), + ('MO101398', 'P9600-16', DATE('2025-12-25'), DATE('2026-01-21'), DATE('2026-01-26'), 150.00, 0.00, 'C', '2', 'OP1907', 'Closed complete. Shipped ahead of need date.'), + ('MO101399', 'ISOF-2000', DATE('2025-12-25'), DATE('2026-01-16'), DATE('2026-01-21'), 96.00, 2.31, 'C', '3', 'OP1654', 'Closed complete. Shipped ahead of need date.'), + ('MO101400', 'SALATCH1', DATE('2025-12-25'), DATE('2026-01-05'), DATE('2026-01-13'), 40.00, 0.45, 'C', '1', 'OP1364', 'Closed complete. Source inspection passed on first presentation.'); + +INSERT INTO MANUFACTURING_ORDERS (ORDER_ID, ITEM_ID, ORDER_DATE, EXPECTED_COMPLETION_DATE, ACTUAL_COMPLETION_DATE, QUANTITY_ORDERED, QUANTITY_SCRAPPED, STATUS, SHIFT_CODE, OPERATOR_ID, NOTES) VALUES + ('MO101401', 'W991-16', DATE('2025-12-25'), DATE('2026-01-12'), DATE('2026-01-09'), 72.00, 0.00, 'C', '3', 'OP1942', 'Closed complete. FAI package submitted with shipment.'), + ('MO101402', 'W700-32', DATE('2025-12-25'), DATE('2026-01-19'), DATE('2026-01-27'), 60.00, 2.00, 'C', '3', 'OP1536', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101403', 'CLPWS-10', DATE('2025-12-25'), DATE('2026-01-02'), DATE('2026-01-05'), 80.00, 1.62, 'C', '1', 'OP1942', 'Closed short - balance cancelled at customer request.'), + ('MO101404', 'P9600-16', DATE('2025-12-25'), DATE('2026-01-23'), DATE('2026-01-23'), 50.00, 0.00, 'C', '1', 'OP1611', 'Closed short - balance cancelled at customer request.'), + ('MO101405', 'CLPSL-08', DATE('2025-12-24'), DATE('2026-01-13'), DATE('2026-01-14'), 24.00, 0.12, 'C', '2', 'OP1448', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101406', 'SAHTRHARN', DATE('2025-12-24'), DATE('2026-01-12'), DATE('2026-01-16'), 192.00, 5.22, 'C', '3', 'OP1042', 'Closed short - balance cancelled at customer request.'), + ('MO101407', 'P9600-16', DATE('2025-12-24'), DATE('2026-01-02'), DATE('2026-01-05'), 20.00, 0.85, 'C', '2', 'OP1319', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101408', 'W991N-32', DATE('2025-12-24'), DATE('2026-01-08'), DATE('2026-01-08'), 36.00, 0.34, 'C', '1', 'OP1942', 'Closed short - balance cancelled at customer request.'), + ('MO101409', 'AW971-24', DATE('2025-12-24'), DATE('2026-01-27'), DATE('2026-01-27'), 100.00, 0.00, 'C', '3', 'OP1611', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101410', 'P9100-08', DATE('2025-12-24'), DATE('2026-01-07'), DATE('2026-01-05'), 40.00, 0.00, 'C', '2', 'OP1865', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101411', 'SASEALK24', DATE('2025-12-24'), DATE('2026-01-13'), DATE('2026-01-21'), 240.00, 0.00, 'C', '1', 'OP1042', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101412', 'SAHOSEAS8', DATE('2025-12-23'), DATE('2026-01-12'), DATE('2026-01-20'), 80.00, 2.46, 'C', '1', 'OP1698', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101413', 'SACUSHN06', DATE('2025-12-23'), DATE('2026-01-07'), NULL, 72.00, 1.07, 'R', '3', 'OP1204', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO101414', 'AW2010-16', DATE('2025-12-23'), DATE('2026-01-07'), DATE('2026-01-12'), 40.00, 1.53, 'C', '2', 'OP1733', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101415', 'AW2010-32', DATE('2025-12-23'), DATE('2025-12-26'), DATE('2025-12-24'), 20.00, 0.00, 'C', '3', 'OP1238', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101416', 'AW971-16', DATE('2025-12-23'), DATE('2026-01-20'), DATE('2026-01-21'), 240.00, 0.00, 'C', '1', 'OP1942', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101417', 'F63052-32', DATE('2025-12-23'), DATE('2026-01-16'), DATE('2026-01-15'), 120.00, 4.18, 'C', '2', 'OP1733', 'Closed short - balance cancelled at customer request.'), + ('MO101418', 'SALATCH1', DATE('2025-12-23'), DATE('2026-01-14'), DATE('2026-01-12'), 120.00, 1.53, 'C', '3', 'OP1402', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101419', 'SAHTRCORE', DATE('2025-12-23'), DATE('2026-01-07'), DATE('2026-01-15'), 600.00, 10.22, 'C', '3', 'OP1204', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101420', 'SACUSHNW8', DATE('2025-12-22'), DATE('2026-01-16'), DATE('2026-01-15'), 24.00, 0.00, 'C', '2', 'OP1448', 'Closed complete. FAI package submitted with shipment.'), + ('MO101421', 'SAVTLI01', DATE('2025-12-22'), DATE('2026-01-20'), DATE('2026-01-20'), 500.00, 15.59, 'C', '1', 'OP1611', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101422', 'SABODY200', DATE('2025-12-22'), DATE('2026-01-09'), DATE('2026-01-13'), 960.00, 3.96, 'C', '3', 'OP1490', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101423', 'SASEALK24', DATE('2025-12-22'), DATE('2026-01-05'), DATE('2026-01-12'), 80.00, 2.80, 'C', '1', 'OP1907', 'Closed complete. Shipped ahead of need date.'), + ('MO101424', 'SABANDCR8', DATE('2025-12-22'), DATE('2026-01-01'), DATE('2026-01-08'), 48.00, 1.83, 'C', '3', 'OP1087', 'Closed complete. FAI package submitted with shipment.'), + ('MO101425', 'W902-16', DATE('2025-12-22'), DATE('2026-01-05'), DATE('2025-12-31'), 150.00, 6.57, 'C', '2', 'OP1490', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101426', 'HTRRB-024', DATE('2025-12-22'), DATE('2026-01-19'), DATE('2026-01-27'), 40.00, 0.65, 'C', '2', 'OP1942', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101427', 'WMLQD-075', DATE('2025-12-22'), DATE('2026-01-22'), DATE('2026-01-23'), 24.00, 0.00, 'C', '2', 'OP1776', 'Closed short - balance cancelled at customer request.'), + ('MO101428', 'P9100-08', DATE('2025-12-19'), DATE('2026-01-19'), DATE('2026-01-21'), 72.00, 0.00, 'C', '2', 'OP1448', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101429', 'SAPOPPET1', DATE('2025-12-19'), DATE('2026-01-05'), DATE('2026-01-09'), 300.00, 9.34, 'C', '3', 'OP1271', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101430', 'W991N-32', DATE('2025-12-19'), DATE('2026-01-22'), DATE('2026-01-23'), 40.00, 0.49, 'C', '1', 'OP1490', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101431', 'SACLSH32T', DATE('2025-12-19'), DATE('2026-01-05'), DATE('2026-01-02'), 144.00, 6.21, 'C', '3', 'OP1578', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101432', 'SACUSHN06', DATE('2025-12-19'), DATE('2026-01-09'), DATE('2026-01-12'), 960.00, 0.00, 'C', '2', 'OP1698', 'Closed short - balance cancelled at customer request.'), + ('MO101433', 'SAPOPPET1', DATE('2025-12-19'), DATE('2026-01-14'), DATE('2026-01-22'), 96.00, 0.00, 'C', '2', 'OP1271', 'Closed complete. FAI package submitted with shipment.'), + ('MO101434', 'SAISOEND1', DATE('2025-12-19'), DATE('2026-01-14'), DATE('2026-01-12'), 600.00, 0.00, 'C', '3', 'OP1988', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101435', 'QD6000-12', DATE('2025-12-19'), DATE('2026-01-21'), DATE('2026-01-19'), 100.00, 1.00, 'C', '2', 'OP1490', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101436', 'CLPSL-08', DATE('2025-12-18'), DATE('2026-01-19'), DATE('2026-01-22'), 250.00, 0.00, 'C', '2', 'OP1733', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101437', 'HTRGK-HG1', DATE('2025-12-18'), DATE('2026-01-12'), DATE('2026-01-09'), 48.00, 0.80, 'C', '3', 'OP1820', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101438', 'SAHTRHARN', DATE('2025-12-18'), DATE('2025-12-31'), DATE('2025-12-30'), 40.00, 0.18, 'C', '3', 'OP1448', 'Closed complete. Shipped ahead of need date.'), + ('MO101439', 'SALATCH1', DATE('2025-12-18'), DATE('2026-01-07'), DATE('2026-01-05'), 144.00, 5.58, 'C', '1', 'OP1087', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101440', 'W902-24', DATE('2025-12-18'), DATE('2026-01-19'), DATE('2026-01-19'), 150.00, 4.87, 'C', '2', 'OP1087', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101441', 'CLPWS-10', DATE('2025-12-18'), DATE('2026-01-19'), DATE('2026-01-23'), 36.00, 0.66, 'C', '1', 'OP1988', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101442', 'SAVTLI01', DATE('2025-12-18'), DATE('2026-01-12'), DATE('2026-01-20'), 108.00, 1.71, 'C', '2', 'OP1733', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101443', 'CLPBLK-12', DATE('2025-12-18'), DATE('2026-01-09'), DATE('2026-01-06'), 40.00, 1.04, 'C', '1', 'OP1578', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101444', 'HOSE-04S', DATE('2025-12-17'), DATE('2026-01-13'), DATE('2026-01-14'), 250.00, 0.00, 'C', '2', 'OP1578', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101445', 'SAWEARSH1', DATE('2025-12-17'), DATE('2025-12-29'), DATE('2025-12-26'), 288.00, 3.28, 'C', '1', 'OP1907', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101446', 'HOSE-08L', DATE('2025-12-17'), DATE('2026-01-13'), DATE('2026-01-13'), 80.00, 0.00, 'C', '2', 'OP1907', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101447', 'CLPSL-08', DATE('2025-12-17'), DATE('2026-01-13'), DATE('2026-01-21'), 120.00, 0.00, 'C', '2', 'OP1988', 'Closed complete. FAI package submitted with shipment.'), + ('MO101448', 'SAHOSEAS8', DATE('2025-12-17'), DATE('2026-01-05'), DATE('2026-01-01'), 400.00, 0.00, 'C', '3', 'OP1865', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101449', 'SAWEARSH1', DATE('2025-12-17'), DATE('2026-01-13'), DATE('2026-01-13'), 300.00, 2.47, 'C', '3', 'OP1988', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101450', 'W991F-24', DATE('2025-12-17'), DATE('2025-12-30'), DATE('2025-12-26'), 12.00, 0.00, 'C', '2', 'OP1820', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101451', 'W991-16', DATE('2025-12-17'), DATE('2025-12-29'), DATE('2025-12-24'), 48.00, 0.77, 'C', '1', 'OP1087', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101452', 'WMLQD-075', DATE('2025-12-16'), DATE('2026-01-08'), DATE('2026-01-09'), 24.00, 0.00, 'C', '2', 'OP1907', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101453', 'QD6000-12', DATE('2025-12-16'), DATE('2026-01-08'), DATE('2026-01-05'), 144.00, 6.09, 'C', '1', 'OP1042', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101454', 'SACLSH32T', DATE('2025-12-16'), DATE('2026-01-01'), DATE('2026-01-02'), 192.00, 0.00, 'C', '2', 'OP1204', 'Closed short - balance cancelled at customer request.'), + ('MO101455', 'AW979-24', DATE('2025-12-16'), DATE('2026-01-12'), DATE('2026-01-16'), 36.00, 0.00, 'C', '3', 'OP1820', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101456', 'SAISOTUB2', DATE('2025-12-16'), DATE('2026-01-14'), DATE('2026-01-19'), 72.00, 0.60, 'C', '3', 'OP1654', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101457', 'CLPSTD-06', DATE('2025-12-16'), DATE('2026-01-19'), DATE('2026-01-16'), 80.00, 0.89, 'C', '2', 'OP1113', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101458', 'SACLSH16', DATE('2025-12-16'), DATE('2026-01-19'), DATE('2026-01-14'), 200.00, 3.71, 'C', '3', 'OP1402', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101459', 'W991F-24', DATE('2025-12-16'), DATE('2026-01-19'), DATE('2026-01-20'), 100.00, 1.39, 'C', '1', 'OP1611', 'Closed short - balance cancelled at customer request.'), + ('MO101460', 'SASEALK16', DATE('2025-12-15'), DATE('2025-12-19'), DATE('2025-12-19'), 1200.00, 37.39, 'C', '3', 'OP1776', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101461', 'W991-24', DATE('2025-12-15'), DATE('2025-12-25'), DATE('2025-12-23'), 12.00, 0.00, 'C', '1', 'OP1204', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101462', 'SAHOSEAS8', DATE('2025-12-15'), DATE('2026-01-13'), DATE('2026-01-08'), 72.00, 0.66, 'C', '1', 'OP1490', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101463', 'AW979-24', DATE('2025-12-15'), DATE('2025-12-22'), DATE('2025-12-30'), 12.00, 0.00, 'C', '2', 'OP1733', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101464', 'G620-32', DATE('2025-12-15'), DATE('2026-01-16'), DATE('2026-01-15'), 12.00, 0.06, 'C', '1', 'OP1820', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101465', 'C6300-24', DATE('2025-12-15'), DATE('2026-01-02'), DATE('2026-01-12'), 120.00, 1.08, 'C', '1', 'OP1113', 'Closed short - balance cancelled at customer request.'), + ('MO101466', 'SACUSHN06', DATE('2025-12-15'), DATE('2025-12-25'), DATE('2025-12-31'), 80.00, 0.00, 'C', '2', 'OP1654', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101467', 'SAISOEND1', DATE('2025-12-15'), DATE('2025-12-22'), DATE('2025-12-25'), 480.00, 0.00, 'C', '2', 'OP1238', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101468', 'F63052-24', DATE('2025-12-12'), DATE('2025-12-24'), DATE('2025-12-29'), 12.00, 0.38, 'C', '1', 'OP1087', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101469', 'W991N-32', DATE('2025-12-12'), DATE('2026-01-07'), DATE('2026-01-12'), 250.00, 0.00, 'C', '2', 'OP1156', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101470', 'SAISOEND1', DATE('2025-12-12'), DATE('2026-01-07'), DATE('2026-01-07'), 576.00, 21.26, 'C', '1', 'OP1402', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101471', 'AW2010-16', DATE('2025-12-12'), DATE('2025-12-30'), DATE('2026-01-02'), 50.00, 0.51, 'C', '1', 'OP1402', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101472', 'HTRCT-22W', DATE('2025-12-12'), DATE('2026-01-14'), DATE('2026-01-19'), 72.00, 2.10, 'C', '1', 'OP1319', 'Closed complete. Shipped ahead of need date.'), + ('MO101473', 'SACUSHN06', DATE('2025-12-12'), DATE('2025-12-17'), DATE('2025-12-23'), 960.00, 0.00, 'C', '3', 'OP1156', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101474', 'W991F-24', DATE('2025-12-12'), DATE('2025-12-18'), DATE('2025-12-23'), 250.00, 6.22, 'C', '1', 'OP1271', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101475', 'AW2100-24', DATE('2025-12-12'), DATE('2025-12-31'), DATE('2026-01-02'), 72.00, 1.23, 'C', '2', 'OP1402', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101476', 'WMFFR-100', DATE('2025-12-11'), DATE('2025-12-24'), DATE('2025-12-25'), 240.00, 0.00, 'C', '2', 'OP1536', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101477', 'SAISOTUB1', DATE('2025-12-11'), DATE('2026-01-07'), DATE('2026-01-09'), 320.00, 11.22, 'C', '3', 'OP1733', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101478', 'W922N-16', DATE('2025-12-11'), DATE('2026-01-09'), DATE('2026-01-15'), 96.00, 0.00, 'C', '2', 'OP1988', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101479', 'CLPWS-10', DATE('2025-12-11'), DATE('2025-12-24'), DATE('2025-12-24'), 96.00, 2.83, 'C', '1', 'OP1156', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101480', 'SATHBDY16', DATE('2025-12-11'), DATE('2026-01-06'), DATE('2026-01-13'), 288.00, 0.00, 'C', '1', 'OP1448', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101481', 'SAHTRHARN', DATE('2025-12-11'), DATE('2026-01-12'), DATE('2026-01-12'), 300.00, 0.00, 'C', '3', 'OP1733', 'Closed short - balance cancelled at customer request.'), + ('MO101482', 'SATHBDY16', DATE('2025-12-11'), DATE('2025-12-30'), DATE('2025-12-31'), 288.00, 2.54, 'C', '2', 'OP1654', 'Closed complete. FAI package submitted with shipment.'), + ('MO101483', 'W991-16', DATE('2025-12-11'), DATE('2025-12-25'), DATE('2025-12-30'), 60.00, 0.00, 'C', '3', 'OP1942', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101484', 'SACLSH24C', DATE('2025-12-10'), DATE('2025-12-30'), DATE('2026-01-06'), 300.00, 10.00, 'C', '3', 'OP1611', 'Closed short - balance cancelled at customer request.'), + ('MO101485', 'AW2010-16', DATE('2025-12-10'), DATE('2026-01-07'), NULL, 72.00, 0.00, 'R', '1', 'OP1087', 'Mining channel order - ELP stock replenishment.'), + ('MO101486', 'CLPSTD-06', DATE('2025-12-10'), DATE('2026-01-05'), DATE('2026-01-05'), 200.00, 5.88, 'C', '2', 'OP1238', 'Closed complete. Shipped ahead of need date.'), + ('MO101487', 'SAHOSEAS8', DATE('2025-12-10'), DATE('2025-12-16'), DATE('2025-12-23'), 48.00, 1.48, 'C', '2', 'OP1578', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101488', 'CLPTL-08', DATE('2025-12-10'), DATE('2026-01-08'), DATE('2026-01-05'), 40.00, 0.00, 'C', '1', 'OP1319', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101489', 'P9400-12', DATE('2025-12-10'), DATE('2025-12-26'), DATE('2025-12-26'), 40.00, 1.15, 'C', '1', 'OP1319', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101490', 'FRANG-12', DATE('2025-12-10'), DATE('2025-12-29'), DATE('2025-12-24'), 48.00, 0.00, 'C', '2', 'OP1042', 'Closed complete. FAI package submitted with shipment.'), + ('MO101491', 'W902-24', DATE('2025-12-10'), DATE('2026-01-07'), DATE('2026-01-08'), 50.00, 1.76, 'C', '2', 'OP1490', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101492', 'CLPSTD-06', DATE('2025-12-09'), DATE('2026-01-07'), DATE('2026-01-13'), 12.00, 0.51, 'C', '3', 'OP1578', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101493', 'P9600-16', DATE('2025-12-09'), DATE('2025-12-22'), DATE('2025-12-30'), 240.00, 0.00, 'C', '1', 'OP1536', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101494', 'QD6000-12', DATE('2025-12-09'), DATE('2025-12-30'), DATE('2026-01-06'), 72.00, 0.00, 'C', '2', 'OP1402', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101495', 'SACLSH32', DATE('2025-12-09'), DATE('2025-12-26'), DATE('2025-12-23'), 75.00, 1.66, 'C', '3', 'OP1490', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101496', 'W991-16', DATE('2025-12-09'), DATE('2025-12-24'), DATE('2025-12-23'), 40.00, 1.00, 'C', '1', 'OP1402', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101497', 'SAISOTUB1', DATE('2025-12-09'), DATE('2025-12-26'), DATE('2025-12-26'), 80.00, 0.00, 'C', '1', 'OP1820', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101498', 'W922N-16', DATE('2025-12-09'), DATE('2025-12-17'), DATE('2025-12-25'), 50.00, 2.23, 'C', '2', 'OP1042', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101499', 'SATHBDY24', DATE('2025-12-08'), DATE('2025-12-17'), DATE('2025-12-19'), 240.00, 10.50, 'C', '2', 'OP1448', 'Closed short - balance cancelled at customer request.'), + ('MO101500', 'CLPSPC-06', DATE('2025-12-08'), DATE('2026-01-08'), DATE('2026-01-12'), 25.00, 0.69, 'C', '1', 'OP1611', 'Closed complete. Proof pressure test recorded at 250 PSIG.'); + +INSERT INTO MANUFACTURING_ORDERS (ORDER_ID, ITEM_ID, ORDER_DATE, EXPECTED_COMPLETION_DATE, ACTUAL_COMPLETION_DATE, QUANTITY_ORDERED, QUANTITY_SCRAPPED, STATUS, SHIFT_CODE, OPERATOR_ID, NOTES) VALUES + ('MO101501', 'SABODY600', DATE('2025-12-08'), DATE('2026-01-09'), DATE('2026-01-19'), 144.00, 1.43, 'C', '3', 'OP1654', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101502', 'AW979-24', DATE('2025-12-08'), DATE('2026-01-09'), DATE('2026-01-07'), 24.00, 0.63, 'C', '3', 'OP1156', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101503', 'SATHBDY16', DATE('2025-12-08'), DATE('2025-12-11'), DATE('2025-12-09'), 200.00, 8.91, 'C', '1', 'OP1907', 'Closed short - balance cancelled at customer request.'), + ('MO101504', 'QD200-08', DATE('2025-12-08'), DATE('2025-12-23'), DATE('2025-12-22'), 20.00, 0.58, 'C', '2', 'OP1238', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101505', 'HTRCT-22W', DATE('2025-12-08'), DATE('2025-12-15'), DATE('2025-12-16'), 72.00, 2.91, 'C', '2', 'OP1156', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101506', 'SAISOTUB1', DATE('2025-12-08'), DATE('2025-12-25'), DATE('2025-12-26'), 288.00, 1.47, 'C', '1', 'OP1271', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101507', 'SAHTRHARN', DATE('2025-12-05'), DATE('2025-12-18'), DATE('2025-12-23'), 144.00, 4.70, 'C', '2', 'OP1042', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101508', 'W991F-24', DATE('2025-12-05'), DATE('2025-12-26'), DATE('2026-01-02'), 240.00, 5.76, 'C', '3', 'OP1156', 'Closed complete. Shipped ahead of need date.'), + ('MO101509', 'SASEALK24', DATE('2025-12-05'), DATE('2026-01-02'), DATE('2026-01-02'), 24.00, 0.57, 'C', '2', 'OP1113', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101510', 'SAPOPPET1', DATE('2025-12-05'), DATE('2026-01-07'), DATE('2026-01-02'), 240.00, 10.42, 'C', '2', 'OP1319', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101511', 'W902-32', DATE('2025-12-05'), DATE('2026-01-06'), DATE('2026-01-05'), 50.00, 1.08, 'C', '3', 'OP1776', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101512', 'AW2100-32', DATE('2025-12-05'), DATE('2025-12-31'), DATE('2026-01-05'), 100.00, 0.00, 'C', '1', 'OP1402', 'Closed complete. FAI package submitted with shipment.'), + ('MO101513', 'SAHTRCORE', DATE('2025-12-05'), DATE('2025-12-15'), DATE('2025-12-10'), 48.00, 0.00, 'C', '1', 'OP1776', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101514', 'CLPBLK-12', DATE('2025-12-04'), DATE('2026-01-06'), DATE('2026-01-08'), 120.00, 2.68, 'C', '2', 'OP1776', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101515', 'WMFFN-100', DATE('2025-12-04'), DATE('2026-01-02'), DATE('2026-01-08'), 120.00, 0.00, 'C', '2', 'OP1204', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101516', 'P9100-08', DATE('2025-12-04'), DATE('2025-12-23'), DATE('2025-12-18'), 72.00, 1.01, 'C', '2', 'OP1364', 'Closed complete. FAI package submitted with shipment.'), + ('MO101517', 'W902-32', DATE('2025-12-04'), DATE('2025-12-11'), DATE('2025-12-09'), 144.00, 0.00, 'C', '2', 'OP1654', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101518', 'C6300-24', DATE('2025-12-04'), DATE('2026-01-05'), DATE('2026-01-13'), 240.00, 9.34, 'C', '3', 'OP1271', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101519', 'HTRRB-024', DATE('2025-12-04'), DATE('2025-12-19'), DATE('2025-12-23'), 24.00, 0.40, 'C', '2', 'OP1907', 'Closed complete. FAI package submitted with shipment.'), + ('MO101520', 'SASEALK24', DATE('2025-12-04'), DATE('2025-12-22'), DATE('2025-12-26'), 480.00, 10.71, 'C', '2', 'OP1271', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101521', 'CLPSPC-06', DATE('2025-12-03'), DATE('2025-12-12'), DATE('2025-12-15'), 24.00, 0.55, 'C', '3', 'OP1113', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101522', 'CLPTL-08', DATE('2025-12-03'), DATE('2025-12-17'), DATE('2025-12-18'), 200.00, 0.00, 'C', '2', 'OP1319', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101523', 'W902-24', DATE('2025-12-03'), DATE('2025-12-19'), DATE('2025-12-29'), 20.00, 0.00, 'C', '3', 'OP1448', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101524', 'FRANG-12', DATE('2025-12-03'), DATE('2025-12-30'), DATE('2025-12-25'), 80.00, 0.00, 'C', '3', 'OP1087', 'Closed complete. FAI package submitted with shipment.'), + ('MO101525', 'W902-32', DATE('2025-12-03'), DATE('2025-12-26'), DATE('2025-12-24'), 250.00, 0.00, 'C', '1', 'OP1776', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101526', 'SACUSHN06', DATE('2025-12-03'), DATE('2025-12-29'), DATE('2026-01-01'), 100.00, 3.98, 'C', '1', 'OP1776', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101527', 'SAHOSEAS8', DATE('2025-12-03'), DATE('2025-12-10'), DATE('2025-12-09'), 900.00, 12.16, 'C', '1', 'OP1113', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101528', 'AW971-16', DATE('2025-12-03'), DATE('2025-12-31'), DATE('2025-12-31'), 80.00, 0.00, 'C', '1', 'OP1490', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101529', 'SABODY200', DATE('2025-12-02'), DATE('2025-12-29'), DATE('2025-12-26'), 400.00, 0.00, 'C', '2', 'OP1113', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101530', 'SAHOSEAS8', DATE('2025-12-02'), DATE('2025-12-05'), DATE('2025-12-15'), 180.00, 0.00, 'C', '1', 'OP1490', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101531', 'W902-32', DATE('2025-12-02'), DATE('2025-12-09'), DATE('2025-12-15'), 300.00, 0.00, 'C', '2', 'OP1448', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101532', 'HOSE-04S', DATE('2025-12-02'), DATE('2025-12-18'), DATE('2025-12-17'), 72.00, 0.38, 'C', '2', 'OP1988', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101533', 'CLPSL-08', DATE('2025-12-02'), DATE('2025-12-12'), DATE('2025-12-11'), 50.00, 0.00, 'C', '3', 'OP1490', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101534', 'SABANDAL6', DATE('2025-12-02'), DATE('2025-12-15'), DATE('2025-12-12'), 40.00, 1.13, 'C', '1', 'OP1865', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101535', 'AW2010-24', DATE('2025-12-02'), DATE('2025-12-15'), DATE('2025-12-11'), 300.00, 0.00, 'C', '2', 'OP1402', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101536', 'SABANDCR8', DATE('2025-12-02'), DATE('2025-12-08'), DATE('2025-12-10'), 192.00, 0.00, 'C', '1', 'OP1204', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101537', 'SATHBDY32', DATE('2025-12-01'), DATE('2026-01-01'), DATE('2026-01-07'), 576.00, 0.00, 'C', '1', 'OP1113', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101538', 'HTRCF-201', DATE('2025-12-01'), DATE('2025-12-19'), DATE('2025-12-29'), 50.00, 1.84, 'C', '3', 'OP1087', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101539', 'P9600-16', DATE('2025-12-01'), DATE('2025-12-26'), DATE('2026-01-05'), 240.00, 9.32, 'C', '1', 'OP1087', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101540', 'AW2100-32', DATE('2025-12-01'), DATE('2026-01-02'), DATE('2025-12-30'), 12.00, 0.00, 'C', '3', 'OP1988', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101541', 'SACLSH16', DATE('2025-12-01'), DATE('2025-12-05'), DATE('2025-12-09'), 144.00, 0.00, 'C', '2', 'OP1611', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101542', 'W991-16', DATE('2025-12-01'), DATE('2025-12-16'), DATE('2025-12-12'), 12.00, 0.00, 'C', '1', 'OP1698', 'Closed complete. Shipped ahead of need date.'), + ('MO101543', 'SATHRDNUT', DATE('2025-12-01'), DATE('2025-12-23'), DATE('2025-12-30'), 480.00, 20.93, 'C', '2', 'OP1865', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101544', 'P9400-12', DATE('2025-11-28'), DATE('2025-12-03'), DATE('2025-12-01'), 240.00, 1.90, 'C', '2', 'OP1865', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101545', 'P9600-16', DATE('2025-11-28'), DATE('2025-12-08'), DATE('2025-12-10'), 80.00, 1.19, 'C', '1', 'OP1113', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101546', 'SATHBDY32', DATE('2025-11-28'), DATE('2025-12-22'), DATE('2025-12-26'), 160.00, 2.76, 'C', '3', 'OP1654', 'Closed complete. Shipped ahead of need date.'), + ('MO101547', 'AW979-24', DATE('2025-11-28'), DATE('2025-12-08'), DATE('2025-12-08'), 48.00, 0.00, 'C', '1', 'OP1698', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101548', 'P9600-16', DATE('2025-11-28'), DATE('2025-12-08'), DATE('2025-12-05'), 72.00, 2.89, 'C', '2', 'OP1578', 'Closed complete. Shipped ahead of need date.'), + ('MO101549', 'W991-24', DATE('2025-11-28'), DATE('2025-12-15'), NULL, 25.00, 0.00, 'R', '1', 'OP1865', 'Traveller reprinted after routing update; use rev 4 only.'), + ('MO101550', 'SAISOEND1', DATE('2025-11-28'), DATE('2025-12-26'), DATE('2025-12-31'), 96.00, 0.00, 'C', '3', 'OP1733', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101551', 'QD6000-12', DATE('2025-11-28'), DATE('2025-12-23'), DATE('2025-12-30'), 144.00, 0.00, 'C', '3', 'OP1271', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101552', 'AW2091-24', DATE('2025-11-27'), DATE('2025-12-25'), DATE('2025-12-22'), 12.00, 0.00, 'C', '2', 'OP1578', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101553', 'W991F-24', DATE('2025-11-27'), DATE('2025-12-17'), DATE('2025-12-16'), 20.00, 0.00, 'C', '3', 'OP1733', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101554', 'AW2100-32', DATE('2025-11-27'), DATE('2025-12-11'), DATE('2025-12-19'), 200.00, 6.95, 'C', '1', 'OP1156', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101555', 'SASEALK24', DATE('2025-11-27'), DATE('2025-12-29'), DATE('2025-12-26'), 500.00, 0.00, 'C', '1', 'OP1402', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101556', 'G620-32', DATE('2025-11-27'), DATE('2025-12-03'), DATE('2025-12-02'), 25.00, 0.00, 'C', '2', 'OP1402', 'Closed complete. FAI package submitted with shipment.'), + ('MO101557', 'SATHBDY32', DATE('2025-11-27'), DATE('2025-12-19'), DATE('2025-12-22'), 192.00, 0.00, 'C', '1', 'OP1654', 'Closed complete. Shipped ahead of need date.'), + ('MO101558', 'P9400-12', DATE('2025-11-27'), DATE('2025-12-19'), DATE('2025-12-24'), 200.00, 0.00, 'C', '2', 'OP1364', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101559', 'W991-24', DATE('2025-11-27'), DATE('2025-12-08'), DATE('2025-12-09'), 80.00, 0.42, 'C', '1', 'OP1698', 'Closed short - balance cancelled at customer request.'), + ('MO101560', 'SABANDCR8', DATE('2025-11-26'), DATE('2025-12-29'), DATE('2026-01-01'), 100.00, 4.05, 'C', '3', 'OP1113', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101561', 'W991N-32', DATE('2025-11-26'), DATE('2025-12-22'), DATE('2025-12-23'), 300.00, 12.73, 'C', '2', 'OP1087', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101562', 'W991F-24', DATE('2025-11-26'), DATE('2025-12-23'), DATE('2025-12-31'), 200.00, 0.00, 'C', '2', 'OP1238', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101563', 'SAPOPPET1', DATE('2025-11-26'), DATE('2025-12-22'), DATE('2025-12-26'), 216.00, 3.72, 'C', '3', 'OP1113', 'Closed complete. Shipped ahead of need date.'), + ('MO101564', 'AW2010-24', DATE('2025-11-26'), DATE('2025-12-09'), DATE('2025-12-17'), 240.00, 1.84, 'C', '2', 'OP1113', 'Closed complete. FAI package submitted with shipment.'), + ('MO101565', 'SAISOTUB1', DATE('2025-11-26'), DATE('2025-12-02'), DATE('2025-12-09'), 80.00, 1.30, 'C', '1', 'OP1271', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101566', 'ISOH-0500', DATE('2025-11-26'), DATE('2025-12-30'), DATE('2025-12-25'), 80.00, 0.00, 'C', '2', 'OP1490', 'Closed complete. Shipped ahead of need date.'), + ('MO101567', 'SABODY600', DATE('2025-11-26'), DATE('2025-12-26'), DATE('2025-12-24'), 40.00, 0.00, 'C', '2', 'OP1204', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101568', 'PVFUSE-12', DATE('2025-11-25'), DATE('2025-12-03'), DATE('2025-12-03'), 40.00, 0.00, 'C', '2', 'OP1611', 'Closed short - balance cancelled at customer request.'), + ('MO101569', 'SAISOTUB2', DATE('2025-11-25'), DATE('2025-12-08'), DATE('2025-12-11'), 108.00, 0.87, 'C', '3', 'OP1611', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101570', 'F63052-24', DATE('2025-11-25'), DATE('2025-12-05'), DATE('2025-12-15'), 40.00, 1.14, 'C', '1', 'OP1776', 'Closed complete. FAI package submitted with shipment.'), + ('MO101571', 'W902-16', DATE('2025-11-25'), DATE('2025-12-23'), DATE('2025-12-31'), 72.00, 0.00, 'C', '2', 'OP1536', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101572', 'C6300-24', DATE('2025-11-25'), DATE('2025-12-15'), DATE('2025-12-18'), 250.00, 5.07, 'C', '2', 'OP1733', 'Closed complete. Shipped ahead of need date.'), + ('MO101573', 'AW979-24', DATE('2025-11-25'), DATE('2025-12-01'), DATE('2025-11-27'), 300.00, 9.41, 'C', '1', 'OP1490', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101574', 'W991-24', DATE('2025-11-25'), DATE('2025-12-03'), DATE('2025-12-03'), 72.00, 2.86, 'C', '3', 'OP1733', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101575', 'W991-24', DATE('2025-11-25'), DATE('2025-12-22'), DATE('2025-12-30'), 40.00, 0.00, 'C', '2', 'OP1698', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101576', 'P9400-12', DATE('2025-11-24'), DATE('2025-12-18'), DATE('2025-12-26'), 50.00, 2.22, 'C', '1', 'OP1536', 'Closed complete. FAI package submitted with shipment.'), + ('MO101577', 'SABODY200', DATE('2025-11-24'), DATE('2025-12-11'), DATE('2025-12-10'), 300.00, 12.78, 'C', '2', 'OP1733', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101578', 'W991N-32', DATE('2025-11-24'), DATE('2025-12-10'), DATE('2025-12-05'), 200.00, 6.16, 'C', '3', 'OP1490', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101579', 'C6300-24', DATE('2025-11-24'), DATE('2025-12-26'), DATE('2025-12-26'), 200.00, 0.00, 'C', '3', 'OP1364', 'Closed short - balance cancelled at customer request.'), + ('MO101580', 'SACUSHN06', DATE('2025-11-24'), DATE('2025-12-22'), DATE('2025-12-24'), 80.00, 3.06, 'C', '3', 'OP1733', 'Closed short - balance cancelled at customer request.'), + ('MO101581', 'SACUSHN06', DATE('2025-11-24'), DATE('2025-12-16'), DATE('2025-12-24'), 288.00, 7.13, 'C', '1', 'OP1364', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101582', 'SASEALK24', DATE('2025-11-24'), DATE('2025-12-03'), DATE('2025-12-10'), 200.00, 4.02, 'C', '3', 'OP1271', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101583', 'W991-24', DATE('2025-11-24'), DATE('2025-12-05'), DATE('2025-12-03'), 100.00, 2.75, 'C', '1', 'OP1238', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101584', 'SAVTLI01', DATE('2025-11-21'), DATE('2025-12-18'), DATE('2025-12-26'), 72.00, 0.00, 'C', '2', 'OP1087', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101585', 'SAHOSEAS8', DATE('2025-11-21'), DATE('2025-12-08'), DATE('2025-12-16'), 144.00, 3.23, 'C', '3', 'OP1907', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101586', 'SASEALK32', DATE('2025-11-21'), DATE('2025-11-28'), DATE('2025-12-03'), 900.00, 35.61, 'C', '3', 'OP1113', 'Closed complete. Shipped ahead of need date.'), + ('MO101587', 'AW2091-24', DATE('2025-11-21'), DATE('2025-12-22'), DATE('2025-12-19'), 240.00, 0.00, 'C', '1', 'OP1733', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101588', 'SAISOTUB1', DATE('2025-11-21'), DATE('2025-12-08'), DATE('2025-12-09'), 1200.00, 10.43, 'C', '2', 'OP1820', 'Closed short - balance cancelled at customer request.'), + ('MO101589', 'AW2091-24', DATE('2025-11-21'), DATE('2025-12-09'), DATE('2025-12-10'), 300.00, 0.00, 'C', '2', 'OP1402', 'Closed complete. FAI package submitted with shipment.'), + ('MO101590', 'W700-32', DATE('2025-11-21'), DATE('2025-12-18'), DATE('2025-12-22'), 50.00, 0.00, 'C', '1', 'OP1611', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101591', 'AW2091-24', DATE('2025-11-20'), DATE('2025-11-27'), DATE('2025-12-03'), 36.00, 0.00, 'C', '1', 'OP1654', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101592', 'QD6000-12', DATE('2025-11-20'), DATE('2025-12-16'), DATE('2025-12-12'), 24.00, 0.10, 'C', '3', 'OP1204', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101593', 'AW2010-16', DATE('2025-11-20'), DATE('2025-12-04'), DATE('2025-12-11'), 144.00, 0.00, 'C', '3', 'OP1654', 'Closed complete. Shipped ahead of need date.'), + ('MO101594', 'CLPSL-08', DATE('2025-11-20'), DATE('2025-12-24'), DATE('2025-12-26'), 300.00, 4.94, 'C', '3', 'OP1448', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101595', 'CLPSPC-06', DATE('2025-11-20'), DATE('2025-12-16'), DATE('2025-12-17'), 144.00, 0.00, 'C', '2', 'OP1319', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101596', 'G620-32', DATE('2025-11-20'), DATE('2025-12-17'), DATE('2025-12-19'), 100.00, 4.25, 'C', '2', 'OP1087', 'Closed complete. FAI package submitted with shipment.'), + ('MO101597', 'SABODY200', DATE('2025-11-20'), DATE('2025-12-02'), DATE('2025-12-10'), 200.00, 2.87, 'C', '1', 'OP1776', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101598', 'AW979-24', DATE('2025-11-19'), DATE('2025-12-15'), DATE('2025-12-10'), 80.00, 0.00, 'C', '1', 'OP1490', 'Closed complete. FAI package submitted with shipment.'), + ('MO101599', 'SALATCH1', DATE('2025-11-19'), DATE('2025-12-04'), DATE('2025-12-05'), 144.00, 2.29, 'C', '1', 'OP1578', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101600', 'SACLSH32T', DATE('2025-11-19'), DATE('2025-12-01'), DATE('2025-12-01'), 288.00, 11.95, 'C', '1', 'OP1578', 'Closed complete. Shipped ahead of need date.'); + +INSERT INTO MANUFACTURING_ORDERS (ORDER_ID, ITEM_ID, ORDER_DATE, EXPECTED_COMPLETION_DATE, ACTUAL_COMPLETION_DATE, QUANTITY_ORDERED, QUANTITY_SCRAPPED, STATUS, SHIFT_CODE, OPERATOR_ID, NOTES) VALUES + ('MO101601', 'SACUSHN06', DATE('2025-11-19'), DATE('2025-11-27'), DATE('2025-12-02'), 200.00, 2.28, 'C', '2', 'OP1271', 'Closed short - balance cancelled at customer request.'), + ('MO101602', 'SATHBDY32', DATE('2025-11-19'), DATE('2025-12-10'), DATE('2025-12-17'), 216.00, 0.00, 'C', '3', 'OP1942', 'Closed short - balance cancelled at customer request.'), + ('MO101603', 'QD200-08', DATE('2025-11-19'), DATE('2025-12-11'), DATE('2025-12-18'), 96.00, 3.46, 'C', '1', 'OP1448', 'Closed complete. Shipped ahead of need date.'), + ('MO101604', 'SAHOSEAS8', DATE('2025-11-19'), DATE('2025-12-23'), DATE('2025-12-24'), 120.00, 2.01, 'C', '2', 'OP1238', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101605', 'W991-24', DATE('2025-11-19'), DATE('2025-12-19'), DATE('2025-12-29'), 240.00, 0.00, 'C', '1', 'OP1042', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101606', 'G620-32', DATE('2025-11-18'), DATE('2025-12-09'), DATE('2025-12-05'), 80.00, 0.00, 'C', '2', 'OP1204', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101607', 'CLPSTD-06', DATE('2025-11-18'), DATE('2025-12-18'), DATE('2025-12-25'), 48.00, 1.33, 'C', '3', 'OP1402', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101608', 'SAHOSEAS8', DATE('2025-11-18'), DATE('2025-12-01'), DATE('2025-12-01'), 320.00, 0.00, 'C', '3', 'OP1907', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101609', 'SASLEEVE1', DATE('2025-11-18'), DATE('2025-12-04'), DATE('2025-12-05'), 432.00, 0.00, 'C', '3', 'OP1490', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101610', 'SATHBDY16', DATE('2025-11-18'), DATE('2025-12-09'), DATE('2025-12-10'), 200.00, 0.00, 'C', '3', 'OP1271', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101611', 'PVFUSE-12', DATE('2025-11-18'), DATE('2025-11-27'), DATE('2025-12-01'), 250.00, 0.00, 'C', '1', 'OP1238', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101612', 'SATHBDY16', DATE('2025-11-18'), DATE('2025-12-02'), DATE('2025-12-02'), 144.00, 0.00, 'C', '1', 'OP1319', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101613', 'SASLEEVE1', DATE('2025-11-17'), DATE('2025-12-19'), DATE('2025-12-16'), 500.00, 9.78, 'C', '3', 'OP1654', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101614', 'SABANDCR8', DATE('2025-11-17'), DATE('2025-11-28'), DATE('2025-11-26'), 576.00, 0.00, 'C', '3', 'OP1402', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101615', 'W902-32', DATE('2025-11-17'), DATE('2025-11-26'), DATE('2025-11-25'), 50.00, 0.00, 'C', '2', 'OP1490', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101616', 'SASEALK24', DATE('2025-11-17'), DATE('2025-12-16'), DATE('2025-12-15'), 240.00, 0.00, 'C', '1', 'OP1490', 'Closed complete. Shipped ahead of need date.'), + ('MO101617', 'P9600-16', DATE('2025-11-17'), DATE('2025-11-27'), DATE('2025-11-27'), 250.00, 0.00, 'C', '2', 'OP1942', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101618', 'W922N-16', DATE('2025-11-17'), DATE('2025-11-25'), DATE('2025-12-02'), 20.00, 0.79, 'C', '2', 'OP1654', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101619', 'SACLSH16', DATE('2025-11-17'), DATE('2025-12-03'), DATE('2025-12-09'), 48.00, 0.00, 'C', '1', 'OP1042', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101620', 'W991-24', DATE('2025-11-17'), DATE('2025-12-12'), DATE('2025-12-18'), 20.00, 0.00, 'C', '1', 'OP1204', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101621', 'W922N-16', DATE('2025-11-14'), DATE('2025-11-20'), DATE('2025-11-28'), 48.00, 1.77, 'C', '2', 'OP1271', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101622', 'W902-32', DATE('2025-11-14'), DATE('2025-11-26'), DATE('2025-12-01'), 60.00, 0.00, 'C', '2', 'OP1364', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101623', 'W991N-32', DATE('2025-11-14'), DATE('2025-11-20'), DATE('2025-11-19'), 200.00, 0.00, 'C', '2', 'OP1733', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101624', 'SATHBDY16', DATE('2025-11-14'), DATE('2025-12-02'), DATE('2025-12-05'), 480.00, 0.00, 'C', '3', 'OP1156', 'Closed short - balance cancelled at customer request.'), + ('MO101625', 'W902-16', DATE('2025-11-14'), DATE('2025-12-18'), DATE('2025-12-22'), 100.00, 4.30, 'C', '3', 'OP1204', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101626', 'PVCHK-08', DATE('2025-11-14'), DATE('2025-12-09'), DATE('2025-12-08'), 96.00, 0.81, 'C', '2', 'OP1820', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101627', 'SAHOSEAS8', DATE('2025-11-14'), DATE('2025-11-27'), DATE('2025-12-02'), 576.00, 0.00, 'C', '2', 'OP1698', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101628', 'SAHTRCORE', DATE('2025-11-14'), DATE('2025-11-21'), DATE('2025-11-26'), 384.00, 0.00, 'C', '2', 'OP1319', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101629', 'SAWEARSH1', DATE('2025-11-13'), DATE('2025-12-10'), DATE('2025-12-12'), 432.00, 15.91, 'C', '3', 'OP1402', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101630', 'SACLSH24', DATE('2025-11-13'), DATE('2025-11-28'), DATE('2025-12-05'), 240.00, 10.78, 'C', '3', 'OP1654', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101631', 'AW2100-32', DATE('2025-11-13'), DATE('2025-12-12'), DATE('2025-12-15'), 36.00, 0.00, 'C', '2', 'OP1776', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101632', 'AW2010-32', DATE('2025-11-13'), DATE('2025-12-11'), DATE('2025-12-19'), 80.00, 0.00, 'C', '2', 'OP1578', 'Closed short - balance cancelled at customer request.'), + ('MO101633', 'W902-16', DATE('2025-11-13'), DATE('2025-12-10'), DATE('2025-12-11'), 100.00, 0.00, 'C', '3', 'OP1448', 'Closed short - balance cancelled at customer request.'), + ('MO101634', 'CLPSTD-06', DATE('2025-11-13'), DATE('2025-12-11'), DATE('2025-12-17'), 25.00, 1.06, 'C', '2', 'OP1733', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101635', 'AW2010-24', DATE('2025-11-13'), DATE('2025-11-25'), DATE('2025-12-02'), 150.00, 0.00, 'C', '2', 'OP1490', 'Closed complete. FAI package submitted with shipment.'), + ('MO101636', 'SABANDAL6', DATE('2025-11-12'), DATE('2025-12-09'), DATE('2025-12-10'), 320.00, 0.00, 'C', '1', 'OP1364', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101637', 'AW2010-32', DATE('2025-11-12'), DATE('2025-12-16'), DATE('2025-12-11'), 80.00, 3.22, 'C', '2', 'OP1578', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101638', 'P9600-16', DATE('2025-11-12'), DATE('2025-12-12'), DATE('2025-12-16'), 36.00, 0.97, 'C', '1', 'OP1820', 'Closed short - balance cancelled at customer request.'), + ('MO101639', 'AW971-16', DATE('2025-11-12'), DATE('2025-11-25'), DATE('2025-11-28'), 48.00, 0.85, 'C', '3', 'OP1733', 'Closed complete. FAI package submitted with shipment.'), + ('MO101640', 'C6300-24', DATE('2025-11-12'), DATE('2025-12-12'), DATE('2025-12-10'), 200.00, 0.00, 'C', '3', 'OP1988', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101641', 'P9600-16', DATE('2025-11-12'), DATE('2025-11-25'), DATE('2025-11-26'), 120.00, 5.02, 'C', '2', 'OP1654', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101642', 'SAVTLI01', DATE('2025-11-12'), DATE('2025-12-09'), DATE('2025-12-12'), 480.00, 4.70, 'C', '2', 'OP1776', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101643', 'SAHTRCORE', DATE('2025-11-12'), DATE('2025-12-10'), DATE('2025-12-17'), 75.00, 2.85, 'C', '1', 'OP1156', 'Closed short - balance cancelled at customer request.'), + ('MO101644', 'CLPSPC-06', DATE('2025-11-11'), DATE('2025-11-17'), DATE('2025-11-18'), 25.00, 0.00, 'C', '2', 'OP1156', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101645', 'W902-32', DATE('2025-11-11'), DATE('2025-12-15'), DATE('2025-12-11'), 36.00, 1.38, 'C', '1', 'OP1448', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101646', 'SASLEEVE1', DATE('2025-11-11'), DATE('2025-11-25'), DATE('2025-12-02'), 400.00, 15.16, 'C', '3', 'OP1907', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101647', 'QD200-08', DATE('2025-11-11'), DATE('2025-11-25'), DATE('2025-11-24'), 60.00, 1.85, 'C', '2', 'OP1988', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101648', 'SAHTRCORE', DATE('2025-11-11'), DATE('2025-11-21'), DATE('2025-11-19'), 1200.00, 44.47, 'C', '2', 'OP1448', 'Closed complete. FAI package submitted with shipment.'), + ('MO101649', 'F63052-32', DATE('2025-11-11'), DATE('2025-11-27'), DATE('2025-12-02'), 150.00, 0.99, 'C', '3', 'OP1271', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101650', 'W922N-16', DATE('2025-11-11'), DATE('2025-12-08'), DATE('2025-12-12'), 80.00, 1.72, 'C', '3', 'OP1776', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101651', 'SACUSHN06', DATE('2025-11-11'), DATE('2025-12-15'), DATE('2025-12-15'), 288.00, 8.86, 'C', '1', 'OP1536', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101652', 'SACUSHNW8', DATE('2025-11-10'), DATE('2025-12-02'), DATE('2025-12-01'), 36.00, 1.59, 'C', '3', 'OP1988', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101653', 'SASLEEVE1', DATE('2025-11-10'), DATE('2025-12-03'), DATE('2025-12-04'), 80.00, 0.00, 'C', '3', 'OP1698', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101654', 'W991F-24', DATE('2025-11-10'), DATE('2025-11-28'), DATE('2025-11-28'), 36.00, 0.00, 'C', '3', 'OP1733', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101655', 'SACUSHN06', DATE('2025-11-10'), DATE('2025-11-19'), DATE('2025-11-21'), 480.00, 0.00, 'C', '2', 'OP1113', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101656', 'SAISOTUB2', DATE('2025-11-10'), DATE('2025-12-02'), DATE('2025-12-08'), 480.00, 5.29, 'C', '3', 'OP1733', 'Closed complete. FAI package submitted with shipment.'), + ('MO101657', 'HTRHS-06', DATE('2025-11-10'), DATE('2025-11-18'), DATE('2025-11-26'), 250.00, 0.00, 'C', '1', 'OP1536', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101658', 'AW971-16', DATE('2025-11-10'), DATE('2025-12-02'), DATE('2025-12-08'), 60.00, 0.00, 'C', '3', 'OP1776', 'Closed complete. Shipped ahead of need date.'), + ('MO101659', 'W902-16', DATE('2025-11-10'), DATE('2025-12-12'), DATE('2025-12-18'), 48.00, 0.00, 'C', '2', 'OP1611', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101660', 'AW971-16', DATE('2025-11-07'), DATE('2025-11-12'), DATE('2025-11-10'), 250.00, 0.00, 'C', '2', 'OP1907', 'Closed complete. FAI package submitted with shipment.'), + ('MO101661', 'SACLSH32T', DATE('2025-11-07'), DATE('2025-11-18'), DATE('2025-11-26'), 600.00, 11.64, 'C', '1', 'OP1865', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101662', 'AW979-24', DATE('2025-11-07'), DATE('2025-11-25'), DATE('2025-11-26'), 12.00, 0.51, 'C', '1', 'OP1536', 'Closed complete. FAI package submitted with shipment.'), + ('MO101663', 'W991-24', DATE('2025-11-07'), DATE('2025-11-27'), DATE('2025-11-26'), 72.00, 0.74, 'C', '3', 'OP1988', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101664', 'SASLEEVE1', DATE('2025-11-07'), DATE('2025-12-01'), DATE('2025-12-04'), 48.00, 0.00, 'C', '2', 'OP1820', 'Closed complete. Shipped ahead of need date.'), + ('MO101665', 'AW2010-32', DATE('2025-11-07'), DATE('2025-11-14'), DATE('2025-11-14'), 48.00, 0.00, 'C', '1', 'OP1698', 'Closed complete. FAI package submitted with shipment.'), + ('MO101666', 'SACUSHNW8', DATE('2025-11-07'), DATE('2025-11-14'), DATE('2025-11-18'), 450.00, 0.00, 'C', '2', 'OP1698', 'Closed complete. Shipped ahead of need date.'), + ('MO101667', 'SAISOEND1', DATE('2025-11-07'), DATE('2025-11-17'), DATE('2025-11-18'), 40.00, 0.66, 'C', '2', 'OP1820', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101668', 'AW2010-24', DATE('2025-11-06'), DATE('2025-11-14'), DATE('2025-11-19'), 60.00, 1.47, 'C', '3', 'OP1536', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101669', 'SASEALK32', DATE('2025-11-06'), DATE('2025-12-03'), DATE('2025-12-02'), 150.00, 2.27, 'C', '1', 'OP1204', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101670', 'SAHOSEAS8', DATE('2025-11-06'), DATE('2025-12-08'), DATE('2025-12-16'), 600.00, 9.79, 'C', '1', 'OP1364', 'Closed complete. FAI package submitted with shipment.'), + ('MO101671', 'SAWEARSH1', DATE('2025-11-06'), DATE('2025-11-28'), DATE('2025-11-27'), 288.00, 0.00, 'C', '1', 'OP1776', 'Closed short - balance cancelled at customer request.'), + ('MO101672', 'CLPBLK-12', DATE('2025-11-06'), DATE('2025-12-09'), DATE('2025-12-04'), 250.00, 2.14, 'C', '2', 'OP1611', 'Closed short - balance cancelled at customer request.'), + ('MO101673', 'SAISOEND1', DATE('2025-11-06'), DATE('2025-11-26'), DATE('2025-11-28'), 120.00, 0.00, 'C', '2', 'OP1942', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101674', 'SALATCH1', DATE('2025-11-06'), DATE('2025-12-05'), DATE('2025-12-15'), 1000.00, 0.00, 'C', '1', 'OP1578', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101675', 'CLPBLK-12', DATE('2025-11-05'), DATE('2025-12-01'), DATE('2025-11-28'), 36.00, 0.00, 'C', '2', 'OP1490', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101676', 'CLPSPC-06', DATE('2025-11-05'), DATE('2025-11-26'), DATE('2025-11-21'), 200.00, 0.00, 'C', '3', 'OP1204', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101677', 'W991N-32', DATE('2025-11-05'), DATE('2025-12-03'), DATE('2025-12-02'), 48.00, 0.99, 'C', '2', 'OP1113', 'Closed complete. FAI package submitted with shipment.'), + ('MO101678', 'W902-24', DATE('2025-11-05'), DATE('2025-12-03'), DATE('2025-12-08'), 20.00, 0.00, 'C', '2', 'OP1733', 'Closed complete. FAI package submitted with shipment.'), + ('MO101679', 'W902-24', DATE('2025-11-05'), DATE('2025-11-21'), DATE('2025-11-20'), 80.00, 2.25, 'C', '2', 'OP1319', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101680', 'W902-24', DATE('2025-11-05'), DATE('2025-12-08'), DATE('2025-12-09'), 40.00, 1.72, 'C', '1', 'OP1907', 'Closed complete. Shipped ahead of need date.'), + ('MO101681', 'CLPTL-08', DATE('2025-11-05'), DATE('2025-11-24'), DATE('2025-11-21'), 24.00, 0.00, 'C', '1', 'OP1536', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101682', 'C8300-32', DATE('2025-11-05'), DATE('2025-11-18'), DATE('2025-11-18'), 50.00, 0.00, 'C', '2', 'OP1319', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101683', 'QD200-08', DATE('2025-11-04'), DATE('2025-12-08'), DATE('2025-12-03'), 36.00, 0.00, 'C', '1', 'OP1490', 'Closed complete. FAI package submitted with shipment.'), + ('MO101684', 'WMDEF-050', DATE('2025-11-04'), DATE('2025-11-27'), DATE('2025-12-03'), 48.00, 1.28, 'C', '2', 'OP1156', 'Closed short - balance cancelled at customer request.'), + ('MO101685', 'SAHTRCORE', DATE('2025-11-04'), DATE('2025-11-19'), DATE('2025-11-25'), 60.00, 1.82, 'C', '1', 'OP1448', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101686', 'CLPBLK-12', DATE('2025-11-04'), DATE('2025-12-04'), DATE('2025-12-01'), 200.00, 0.00, 'C', '3', 'OP1087', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101687', 'CLPTL-08', DATE('2025-11-04'), DATE('2025-12-03'), DATE('2025-12-03'), 80.00, 1.48, 'C', '1', 'OP1536', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101688', 'SABODY200', DATE('2025-11-04'), DATE('2025-11-10'), DATE('2025-11-13'), 432.00, 0.00, 'C', '2', 'OP1319', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101689', 'W991-16', DATE('2025-11-04'), DATE('2025-12-03'), DATE('2025-12-05'), 60.00, 0.00, 'C', '3', 'OP1271', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101690', 'SABODY200', DATE('2025-11-04'), DATE('2025-11-20'), DATE('2025-11-21'), 96.00, 0.00, 'C', '2', 'OP1820', 'Closed complete. FAI package submitted with shipment.'), + ('MO101691', 'W902-32', DATE('2025-11-03'), DATE('2025-12-05'), DATE('2025-12-05'), 20.00, 0.33, 'C', '2', 'OP1204', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101692', 'C6300-24', DATE('2025-11-03'), DATE('2025-11-11'), DATE('2025-11-07'), 20.00, 0.00, 'C', '2', 'OP1490', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101693', 'SAISOTUB1', DATE('2025-11-03'), DATE('2025-12-03'), DATE('2025-12-05'), 48.00, 0.38, 'C', '2', 'OP1402', 'Closed complete. FAI package submitted with shipment.'), + ('MO101694', 'QD6000-12', DATE('2025-11-03'), DATE('2025-11-24'), DATE('2025-11-19'), 40.00, 1.19, 'C', '1', 'OP1042', 'Closed complete. FAI package submitted with shipment.'), + ('MO101695', 'W902-32', DATE('2025-11-03'), DATE('2025-11-10'), DATE('2025-11-13'), 200.00, 6.43, 'C', '1', 'OP1156', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101696', 'SAISOTUB1', DATE('2025-11-03'), DATE('2025-11-19'), DATE('2025-11-20'), 180.00, 1.49, 'C', '3', 'OP1490', 'Closed complete. FAI package submitted with shipment.'), + ('MO101697', 'PVCHK-08', DATE('2025-11-03'), DATE('2025-12-04'), DATE('2025-12-05'), 48.00, 0.45, 'C', '3', 'OP1988', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101698', 'SAHOSEAS8', DATE('2025-11-03'), DATE('2025-11-06'), DATE('2025-11-05'), 360.00, 3.15, 'C', '3', 'OP1698', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101699', 'W902-24', DATE('2025-10-31'), DATE('2025-11-19'), DATE('2025-11-27'), 80.00, 0.00, 'C', '1', 'OP1733', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101700', 'AW2100-32', DATE('2025-10-31'), DATE('2025-11-19'), DATE('2025-11-17'), 96.00, 2.87, 'C', '1', 'OP1654', 'Closed complete after rework of anodize coverage on two units.'); + +INSERT INTO MANUFACTURING_ORDERS (ORDER_ID, ITEM_ID, ORDER_DATE, EXPECTED_COMPLETION_DATE, ACTUAL_COMPLETION_DATE, QUANTITY_ORDERED, QUANTITY_SCRAPPED, STATUS, SHIFT_CODE, OPERATOR_ID, NOTES) VALUES + ('MO101701', 'SABODY200', DATE('2025-10-31'), DATE('2025-11-07'), DATE('2025-11-05'), 160.00, 2.62, 'C', '1', 'OP1654', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101702', 'SATHBDY24', DATE('2025-10-31'), DATE('2025-11-17'), DATE('2025-11-14'), 24.00, 0.55, 'C', '3', 'OP1113', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101703', 'AW979-24', DATE('2025-10-31'), DATE('2025-12-02'), DATE('2025-12-09'), 240.00, 6.98, 'C', '1', 'OP1490', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101704', 'ISOF-2000', DATE('2025-10-31'), DATE('2025-12-01'), DATE('2025-12-01'), 72.00, 0.00, 'C', '2', 'OP1113', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101705', 'AW2010-24', DATE('2025-10-31'), DATE('2025-11-18'), DATE('2025-11-20'), 48.00, 0.00, 'C', '2', 'OP1448', 'Closed complete. FAI package submitted with shipment.'), + ('MO101706', 'SACLSH24C', DATE('2025-10-31'), DATE('2025-11-07'), DATE('2025-11-06'), 80.00, 1.74, 'C', '3', 'OP1319', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101707', 'AW2010-24', DATE('2025-10-30'), DATE('2025-12-02'), DATE('2025-12-10'), 60.00, 1.14, 'C', '3', 'OP1654', 'Closed complete. Shipped ahead of need date.'), + ('MO101708', 'AW971-24', DATE('2025-10-30'), DATE('2025-12-01'), DATE('2025-12-01'), 36.00, 0.00, 'C', '3', 'OP1204', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101709', 'SAISOEND1', DATE('2025-10-30'), DATE('2025-11-27'), DATE('2025-12-01'), 216.00, 5.17, 'C', '2', 'OP1611', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101710', 'SAISOTUB2', DATE('2025-10-30'), DATE('2025-11-05'), DATE('2025-11-06'), 144.00, 0.00, 'C', '2', 'OP1536', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101711', 'SABANDAL6', DATE('2025-10-30'), DATE('2025-12-01'), DATE('2025-12-09'), 960.00, 28.64, 'C', '2', 'OP1907', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101712', 'SASEALK16', DATE('2025-10-30'), DATE('2025-11-10'), DATE('2025-11-05'), 48.00, 0.00, 'C', '1', 'OP1271', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101713', 'AW2100-24', DATE('2025-10-30'), DATE('2025-11-21'), DATE('2025-11-26'), 72.00, 0.65, 'C', '1', 'OP1402', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101714', 'SALATCH1', DATE('2025-10-29'), DATE('2025-11-10'), DATE('2025-11-11'), 192.00, 0.00, 'C', '3', 'OP1364', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101715', 'CLPSPC-06', DATE('2025-10-29'), DATE('2025-11-07'), DATE('2025-11-10'), 60.00, 0.00, 'C', '2', 'OP1611', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101716', 'SABODY600', DATE('2025-10-29'), DATE('2025-11-17'), DATE('2025-11-13'), 600.00, 25.22, 'C', '2', 'OP1578', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101717', 'ISOF-1000', DATE('2025-10-29'), DATE('2025-11-18'), DATE('2025-11-17'), 80.00, 0.00, 'C', '3', 'OP1865', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101718', 'SACUSHNW8', DATE('2025-10-29'), DATE('2025-11-12'), DATE('2025-11-11'), 600.00, 11.15, 'C', '2', 'OP1319', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101719', 'P9600-16', DATE('2025-10-29'), DATE('2025-11-18'), DATE('2025-11-25'), 80.00, 2.26, 'C', '2', 'OP1536', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101720', 'P9100-08', DATE('2025-10-29'), DATE('2025-11-28'), DATE('2025-12-04'), 120.00, 0.00, 'C', '3', 'OP1578', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101721', 'P9600-16', DATE('2025-10-29'), DATE('2025-11-20'), DATE('2025-11-19'), 36.00, 0.00, 'C', '1', 'OP1865', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101722', 'SASEALK16', DATE('2025-10-28'), DATE('2025-12-01'), DATE('2025-11-26'), 400.00, 4.87, 'C', '1', 'OP1490', 'Closed complete. FAI package submitted with shipment.'), + ('MO101723', 'SATHBDY32', DATE('2025-10-28'), DATE('2025-11-03'), DATE('2025-11-10'), 750.00, 0.00, 'C', '3', 'OP1402', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101724', 'HOSE-04S', DATE('2025-10-28'), DATE('2025-11-03'), DATE('2025-11-03'), 300.00, 4.00, 'C', '1', 'OP1865', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101725', 'SAWEARSH1', DATE('2025-10-28'), DATE('2025-11-27'), DATE('2025-12-02'), 144.00, 0.97, 'C', '2', 'OP1364', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101726', 'SABODY600', DATE('2025-10-28'), DATE('2025-11-13'), DATE('2025-11-12'), 80.00, 0.00, 'C', '2', 'OP1776', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101727', 'SASEALK32', DATE('2025-10-28'), DATE('2025-11-19'), DATE('2025-11-19'), 200.00, 3.67, 'C', '2', 'OP1611', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101728', 'G620-32', DATE('2025-10-28'), DATE('2025-10-31'), DATE('2025-10-29'), 96.00, 0.00, 'C', '3', 'OP1402', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101729', 'SATHRDNUT', DATE('2025-10-28'), DATE('2025-11-06'), DATE('2025-11-14'), 360.00, 13.20, 'C', '2', 'OP1988', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101730', 'W991-24', DATE('2025-10-27'), DATE('2025-11-18'), DATE('2025-11-17'), 150.00, 0.00, 'C', '2', 'OP1611', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101731', 'CLPTL-08', DATE('2025-10-27'), DATE('2025-11-10'), DATE('2025-11-10'), 144.00, 0.00, 'C', '1', 'OP1238', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101732', 'CLPSL-08', DATE('2025-10-27'), DATE('2025-11-18'), DATE('2025-11-13'), 24.00, 0.84, 'C', '1', 'OP1402', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101733', 'SASEALK32', DATE('2025-10-27'), DATE('2025-11-13'), DATE('2025-11-17'), 144.00, 4.93, 'C', '3', 'OP1364', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101734', 'SALATCH1', DATE('2025-10-27'), DATE('2025-11-05'), DATE('2025-10-31'), 72.00, 0.00, 'C', '3', 'OP1578', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101735', 'QD6000-12', DATE('2025-10-27'), DATE('2025-11-24'), DATE('2025-11-21'), 50.00, 0.00, 'C', '1', 'OP1611', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101736', 'SABANDCR8', DATE('2025-10-27'), DATE('2025-11-04'), DATE('2025-11-12'), 200.00, 4.57, 'C', '2', 'OP1907', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101737', 'C6300-24', DATE('2025-10-24'), DATE('2025-10-31'), DATE('2025-10-28'), 240.00, 2.22, 'C', '2', 'OP1536', 'Closed short - balance cancelled at customer request.'), + ('MO101738', 'SASLEEVE1', DATE('2025-10-24'), DATE('2025-11-05'), DATE('2025-11-03'), 200.00, 0.00, 'C', '2', 'OP1402', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101739', 'AW2100-32', DATE('2025-10-24'), DATE('2025-10-31'), DATE('2025-11-07'), 96.00, 0.00, 'C', '2', 'OP1238', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101740', 'F63052-24', DATE('2025-10-24'), DATE('2025-11-25'), NULL, 80.00, 0.00, 'R', '2', 'OP1319', 'Traveller reprinted after routing update; use rev 4 only.'), + ('MO101741', 'SABODY600', DATE('2025-10-24'), DATE('2025-10-30'), DATE('2025-10-27'), 288.00, 3.64, 'C', '3', 'OP1156', 'Closed complete. FAI package submitted with shipment.'), + ('MO101742', 'SABODY600', DATE('2025-10-24'), DATE('2025-11-20'), DATE('2025-11-20'), 150.00, 0.00, 'C', '2', 'OP1907', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101743', 'AW979-24', DATE('2025-10-24'), DATE('2025-11-03'), DATE('2025-11-05'), 50.00, 0.00, 'C', '2', 'OP1611', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101744', 'W922N-16', DATE('2025-10-24'), DATE('2025-11-21'), DATE('2025-11-20'), 96.00, 1.82, 'C', '3', 'OP1448', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101745', 'SAHTRCORE', DATE('2025-10-23'), DATE('2025-11-19'), DATE('2025-11-19'), 40.00, 0.00, 'C', '2', 'OP1733', 'Closed complete. FAI package submitted with shipment.'), + ('MO101746', 'SACLSH24', DATE('2025-10-23'), DATE('2025-11-04'), DATE('2025-11-07'), 400.00, 16.97, 'C', '2', 'OP1238', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101747', 'SAISOTUB1', DATE('2025-10-23'), DATE('2025-11-10'), DATE('2025-11-12'), 400.00, 3.91, 'C', '2', 'OP1942', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101748', 'SACLSH16', DATE('2025-10-23'), DATE('2025-11-13'), DATE('2025-11-18'), 600.00, 0.00, 'C', '2', 'OP1865', 'Closed short - balance cancelled at customer request.'), + ('MO101749', 'CLPSPC-06', DATE('2025-10-23'), DATE('2025-11-20'), DATE('2025-11-17'), 36.00, 0.32, 'C', '3', 'OP1319', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101750', 'SACLSH16', DATE('2025-10-23'), DATE('2025-11-12'), DATE('2025-11-20'), 160.00, 0.00, 'C', '3', 'OP1578', 'Closed complete. Shipped ahead of need date.'), + ('MO101751', 'SAVTLI01', DATE('2025-10-23'), DATE('2025-11-20'), DATE('2025-11-25'), 480.00, 0.00, 'C', '3', 'OP1820', 'Closed complete. Shipped ahead of need date.'), + ('MO101752', 'CLPWS-10', DATE('2025-10-23'), DATE('2025-11-14'), DATE('2025-11-13'), 50.00, 1.16, 'C', '3', 'OP1942', 'Closed complete. FAI package submitted with shipment.'), + ('MO101753', 'SACLSH24C', DATE('2025-10-22'), DATE('2025-11-03'), DATE('2025-11-06'), 192.00, 8.18, 'C', '3', 'OP1865', 'Closed complete. Shipped ahead of need date.'), + ('MO101754', 'HOSE-08L', DATE('2025-10-22'), DATE('2025-11-20'), DATE('2025-11-24'), 200.00, 0.00, 'C', '3', 'OP1988', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101755', 'SAISOTUB2', DATE('2025-10-22'), DATE('2025-11-20'), DATE('2025-11-20'), 750.00, 20.18, 'C', '1', 'OP1654', 'Closed short - balance cancelled at customer request.'), + ('MO101756', 'W991-16', DATE('2025-10-22'), DATE('2025-11-13'), DATE('2025-11-11'), 12.00, 0.00, 'C', '1', 'OP1611', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101757', 'SACLSH24', DATE('2025-10-22'), DATE('2025-11-18'), DATE('2025-11-26'), 240.00, 0.00, 'C', '2', 'OP1402', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101758', 'ISOF-1000', DATE('2025-10-22'), DATE('2025-11-25'), DATE('2025-11-25'), 25.00, 0.34, 'C', '3', 'OP1319', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101759', 'F63052-32', DATE('2025-10-22'), DATE('2025-11-14'), DATE('2025-11-13'), 36.00, 0.91, 'C', '3', 'OP1654', 'Closed short - balance cancelled at customer request.'), + ('MO101760', 'SATHBDY16', DATE('2025-10-22'), DATE('2025-10-30'), DATE('2025-11-05'), 360.00, 0.00, 'C', '2', 'OP1113', 'Closed complete. Shipped ahead of need date.'), + ('MO101761', 'SABODY600', DATE('2025-10-21'), DATE('2025-10-31'), DATE('2025-10-31'), 360.00, 4.61, 'C', '3', 'OP1536', 'Closed short - balance cancelled at customer request.'), + ('MO101762', 'AW971-16', DATE('2025-10-21'), DATE('2025-11-10'), DATE('2025-11-11'), 72.00, 0.62, 'C', '2', 'OP1865', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101763', 'SABANDCR8', DATE('2025-10-21'), DATE('2025-11-12'), DATE('2025-11-18'), 800.00, 14.34, 'C', '3', 'OP1907', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101764', 'SACLSH24', DATE('2025-10-21'), DATE('2025-11-21'), DATE('2025-11-27'), 200.00, 5.82, 'C', '1', 'OP1942', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101765', 'SAISOEND1', DATE('2025-10-21'), DATE('2025-10-27'), DATE('2025-11-03'), 216.00, 9.43, 'C', '2', 'OP1448', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101766', 'AW2010-16', DATE('2025-10-21'), DATE('2025-11-05'), DATE('2025-11-13'), 48.00, 0.00, 'C', '3', 'OP1698', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101767', 'HTRRB-024', DATE('2025-10-21'), DATE('2025-11-10'), DATE('2025-11-13'), 24.00, 0.00, 'C', '1', 'OP1402', 'Closed complete. Shipped ahead of need date.'), + ('MO101768', 'AW971-16', DATE('2025-10-21'), DATE('2025-11-13'), DATE('2025-11-12'), 240.00, 8.42, 'C', '1', 'OP1733', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101769', 'SAPOPPET1', DATE('2025-10-20'), DATE('2025-11-14'), DATE('2025-11-13'), 360.00, 0.00, 'C', '2', 'OP1042', 'Closed short - balance cancelled at customer request.'), + ('MO101770', 'P9600-16', DATE('2025-10-20'), DATE('2025-10-29'), DATE('2025-11-03'), 120.00, 0.00, 'C', '3', 'OP1907', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101771', 'SASEALK24', DATE('2025-10-20'), DATE('2025-11-11'), DATE('2025-11-14'), 600.00, 14.15, 'C', '3', 'OP1611', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101772', 'SAHTRCORE', DATE('2025-10-20'), DATE('2025-11-13'), DATE('2025-11-17'), 72.00, 1.90, 'C', '2', 'OP1319', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101773', 'SAISOTUB2', DATE('2025-10-20'), DATE('2025-11-14'), DATE('2025-11-20'), 200.00, 8.28, 'C', '1', 'OP1698', 'Closed complete. Shipped ahead of need date.'), + ('MO101774', 'CLPWS-10', DATE('2025-10-20'), DATE('2025-11-12'), DATE('2025-11-18'), 100.00, 0.00, 'C', '1', 'OP1042', 'Closed complete. Shipped ahead of need date.'), + ('MO101775', 'CLPTL-08', DATE('2025-10-20'), DATE('2025-11-06'), DATE('2025-11-13'), 120.00, 0.00, 'C', '2', 'OP1087', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101776', 'W902-32', DATE('2025-10-20'), DATE('2025-11-19'), DATE('2025-11-17'), 100.00, 0.00, 'C', '1', 'OP1733', 'Closed short - balance cancelled at customer request.'), + ('MO101777', 'SACLSH24C', DATE('2025-10-17'), DATE('2025-10-24'), DATE('2025-10-27'), 150.00, 0.00, 'C', '3', 'OP1448', 'Closed complete. Shipped ahead of need date.'), + ('MO101778', 'SACUSHN06', DATE('2025-10-17'), DATE('2025-11-13'), DATE('2025-11-13'), 24.00, 0.59, 'C', '2', 'OP1204', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101779', 'SATHBDY24', DATE('2025-10-17'), DATE('2025-10-28'), DATE('2025-11-05'), 200.00, 0.00, 'C', '2', 'OP1611', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101780', 'AW979-24', DATE('2025-10-17'), DATE('2025-11-04'), DATE('2025-11-07'), 24.00, 0.10, 'C', '3', 'OP1536', 'Closed complete. FAI package submitted with shipment.'), + ('MO101781', 'AW2091-24', DATE('2025-10-17'), DATE('2025-10-31'), DATE('2025-11-05'), 12.00, 0.00, 'C', '3', 'OP1490', 'Closed complete. FAI package submitted with shipment.'), + ('MO101782', 'ISOF-1000', DATE('2025-10-17'), DATE('2025-10-23'), DATE('2025-10-22'), 60.00, 1.38, 'C', '1', 'OP1820', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101783', 'W902-32', DATE('2025-10-17'), DATE('2025-11-18'), DATE('2025-11-18'), 150.00, 1.84, 'C', '1', 'OP1654', 'Closed short - balance cancelled at customer request.'), + ('MO101784', 'CLPSL-08', DATE('2025-10-17'), DATE('2025-10-23'), DATE('2025-10-28'), 12.00, 0.00, 'C', '3', 'OP1238', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101785', 'HTRCF-201', DATE('2025-10-16'), DATE('2025-11-04'), DATE('2025-11-04'), 150.00, 4.23, 'C', '3', 'OP1204', 'Closed complete. FAI package submitted with shipment.'), + ('MO101786', 'SASEALK24', DATE('2025-10-16'), DATE('2025-11-07'), DATE('2025-11-06'), 216.00, 9.15, 'C', '2', 'OP1578', 'Closed short - balance cancelled at customer request.'), + ('MO101787', 'P9400-12', DATE('2025-10-16'), DATE('2025-11-18'), DATE('2025-11-19'), 20.00, 0.00, 'C', '2', 'OP1490', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101788', 'SAWEARSH1', DATE('2025-10-16'), DATE('2025-10-21'), DATE('2025-10-28'), 960.00, 17.71, 'C', '2', 'OP1820', 'Closed complete. Shipped ahead of need date.'), + ('MO101789', 'CLPTL-08', DATE('2025-10-16'), DATE('2025-11-10'), DATE('2025-11-06'), 150.00, 0.00, 'C', '3', 'OP1942', 'Closed complete. FAI package submitted with shipment.'), + ('MO101790', 'P9400-12', DATE('2025-10-16'), DATE('2025-10-22'), DATE('2025-10-21'), 96.00, 1.49, 'C', '2', 'OP1865', 'Closed complete. FAI package submitted with shipment.'), + ('MO101791', 'W902-24', DATE('2025-10-16'), DATE('2025-10-22'), DATE('2025-10-22'), 100.00, 0.00, 'C', '2', 'OP1271', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101792', 'SASLEEVE1', DATE('2025-10-16'), DATE('2025-11-05'), DATE('2025-10-31'), 600.00, 8.97, 'C', '3', 'OP1776', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101793', 'CLPSL-08', DATE('2025-10-15'), DATE('2025-11-11'), DATE('2025-11-14'), 48.00, 1.59, 'C', '2', 'OP1156', 'Closed complete. Shipped ahead of need date.'), + ('MO101794', 'HTRCT-22W', DATE('2025-10-15'), DATE('2025-11-03'), DATE('2025-10-31'), 80.00, 0.41, 'C', '3', 'OP1611', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101795', 'CLPSPC-06', DATE('2025-10-15'), DATE('2025-11-06'), DATE('2025-11-14'), 24.00, 0.66, 'C', '1', 'OP1364', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101796', 'SAHTRHARN', DATE('2025-10-15'), DATE('2025-10-23'), DATE('2025-10-29'), 288.00, 8.16, 'C', '1', 'OP1271', 'Closed short - balance cancelled at customer request.'), + ('MO101797', 'SAISOTUB2', DATE('2025-10-15'), DATE('2025-11-13'), DATE('2025-11-18'), 50.00, 0.00, 'C', '2', 'OP1364', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101798', 'AW2100-32', DATE('2025-10-15'), DATE('2025-11-14'), DATE('2025-11-21'), 36.00, 0.36, 'C', '1', 'OP1865', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101799', 'SACLSH16', DATE('2025-10-15'), DATE('2025-10-28'), DATE('2025-11-03'), 300.00, 0.00, 'C', '2', 'OP1319', 'Closed complete. FAI package submitted with shipment.'), + ('MO101800', 'SABANDCR8', DATE('2025-10-14'), DATE('2025-10-31'), DATE('2025-10-31'), 108.00, 0.00, 'C', '2', 'OP1698', 'Closed short - balance cancelled at customer request.'); + +INSERT INTO MANUFACTURING_ORDERS (ORDER_ID, ITEM_ID, ORDER_DATE, EXPECTED_COMPLETION_DATE, ACTUAL_COMPLETION_DATE, QUANTITY_ORDERED, QUANTITY_SCRAPPED, STATUS, SHIFT_CODE, OPERATOR_ID, NOTES) VALUES + ('MO101801', 'W991F-24', DATE('2025-10-14'), DATE('2025-11-04'), DATE('2025-11-03'), 25.00, 0.91, 'C', '2', 'OP1907', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101802', 'HTRRB-024', DATE('2025-10-14'), DATE('2025-10-31'), DATE('2025-11-04'), 60.00, 0.00, 'C', '1', 'OP1113', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101803', 'W991-16', DATE('2025-10-14'), DATE('2025-11-07'), DATE('2025-11-07'), 60.00, 0.00, 'C', '1', 'OP1204', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101804', 'W902-32', DATE('2025-10-14'), DATE('2025-10-24'), DATE('2025-10-28'), 150.00, 3.43, 'C', '1', 'OP1733', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101805', 'C6300-24', DATE('2025-10-14'), DATE('2025-11-06'), DATE('2025-11-03'), 96.00, 0.00, 'C', '2', 'OP1402', 'Closed complete. FAI package submitted with shipment.'), + ('MO101806', 'SASEALK16', DATE('2025-10-14'), DATE('2025-11-14'), DATE('2025-11-24'), 80.00, 0.70, 'C', '3', 'OP1536', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101807', 'AW971-24', DATE('2025-10-13'), DATE('2025-10-21'), DATE('2025-10-21'), 150.00, 0.99, 'C', '3', 'OP1156', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101808', 'SAISOEND1', DATE('2025-10-13'), DATE('2025-11-14'), DATE('2025-11-24'), 432.00, 3.96, 'C', '1', 'OP1087', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101809', 'AW2100-24', DATE('2025-10-13'), DATE('2025-11-05'), DATE('2025-10-31'), 48.00, 1.67, 'C', '1', 'OP1776', 'Closed complete. Shipped ahead of need date.'), + ('MO101810', 'QD200-08', DATE('2025-10-13'), DATE('2025-10-23'), DATE('2025-10-27'), 50.00, 1.80, 'C', '3', 'OP1698', 'Closed complete. Shipped ahead of need date.'), + ('MO101811', 'AW2010-24', DATE('2025-10-13'), DATE('2025-10-20'), DATE('2025-10-20'), 200.00, 4.90, 'C', '2', 'OP1042', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101812', 'CLPSL-08', DATE('2025-10-13'), DATE('2025-10-24'), DATE('2025-10-31'), 72.00, 0.00, 'C', '2', 'OP1988', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101813', 'SAHTRCORE', DATE('2025-10-13'), DATE('2025-11-11'), DATE('2025-11-14'), 400.00, 11.33, 'C', '2', 'OP1087', 'Closed complete. Shipped ahead of need date.'), + ('MO101814', 'W902-32', DATE('2025-10-10'), DATE('2025-11-11'), DATE('2025-11-17'), 20.00, 0.83, 'C', '1', 'OP1087', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101815', 'QD6000-12', DATE('2025-10-10'), DATE('2025-11-04'), DATE('2025-11-04'), 144.00, 6.20, 'C', '1', 'OP1113', 'Closed complete. Shipped ahead of need date.'), + ('MO101816', 'W991N-32', DATE('2025-10-10'), DATE('2025-10-31'), DATE('2025-11-04'), 240.00, 6.27, 'C', '1', 'OP1733', 'Closed complete. Shipped ahead of need date.'), + ('MO101817', 'CLPSTD-06', DATE('2025-10-10'), DATE('2025-11-06'), DATE('2025-11-10'), 96.00, 3.10, 'C', '2', 'OP1113', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101818', 'W902-32', DATE('2025-10-10'), DATE('2025-10-20'), DATE('2025-10-16'), 144.00, 0.00, 'C', '2', 'OP1204', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101819', 'SACUSHNW8', DATE('2025-10-10'), DATE('2025-10-27'), DATE('2025-10-31'), 72.00, 0.36, 'C', '3', 'OP1319', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101820', 'SATHBDY16', DATE('2025-10-10'), DATE('2025-10-16'), DATE('2025-10-22'), 50.00, 0.56, 'C', '3', 'OP1319', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101821', 'QD200-08', DATE('2025-10-10'), DATE('2025-10-24'), DATE('2025-11-03'), 150.00, 0.00, 'C', '2', 'OP1578', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101822', 'SAISOTUB2', DATE('2025-10-09'), DATE('2025-10-24'), DATE('2025-10-27'), 72.00, 0.00, 'C', '2', 'OP1733', 'Closed complete. FAI package submitted with shipment.'), + ('MO101823', 'SABODY200', DATE('2025-10-09'), DATE('2025-11-12'), DATE('2025-11-11'), 960.00, 0.00, 'C', '2', 'OP1988', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101824', 'G620-32', DATE('2025-10-09'), DATE('2025-10-21'), DATE('2025-10-27'), 150.00, 4.87, 'C', '3', 'OP1733', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101825', 'SASEALK24', DATE('2025-10-09'), DATE('2025-10-27'), DATE('2025-10-29'), 80.00, 0.00, 'C', '2', 'OP1204', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101826', 'W991N-32', DATE('2025-10-09'), DATE('2025-11-07'), DATE('2025-11-12'), 300.00, 11.43, 'C', '1', 'OP1156', 'Closed complete. Shipped ahead of need date.'), + ('MO101827', 'CLPSPC-06', DATE('2025-10-09'), DATE('2025-10-30'), DATE('2025-11-04'), 120.00, 1.16, 'C', '2', 'OP1578', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101828', 'CLPSPC-06', DATE('2025-10-09'), DATE('2025-11-10'), DATE('2025-11-14'), 20.00, 0.00, 'C', '3', 'OP1238', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101829', 'SATHBDY16', DATE('2025-10-09'), DATE('2025-10-23'), DATE('2025-10-31'), 48.00, 1.55, 'C', '3', 'OP1156', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101830', 'SAHOSEAS8', DATE('2025-10-08'), DATE('2025-10-31'), DATE('2025-11-03'), 384.00, 0.00, 'C', '1', 'OP1907', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101831', 'SABODY600', DATE('2025-10-08'), DATE('2025-11-03'), DATE('2025-11-04'), 300.00, 2.12, 'C', '1', 'OP1448', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101832', 'ISOF-1000', DATE('2025-10-08'), DATE('2025-11-06'), DATE('2025-11-06'), 240.00, 0.00, 'C', '1', 'OP1238', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101833', 'HOSE-04S', DATE('2025-10-08'), DATE('2025-11-10'), DATE('2025-11-18'), 50.00, 0.00, 'C', '2', 'OP1087', 'Closed short - balance cancelled at customer request.'), + ('MO101834', 'SACUSHNW8', DATE('2025-10-08'), DATE('2025-10-23'), DATE('2025-10-30'), 192.00, 1.65, 'C', '1', 'OP1776', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101835', 'W902-24', DATE('2025-10-08'), DATE('2025-11-07'), DATE('2025-11-05'), 250.00, 0.00, 'C', '2', 'OP1698', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101836', 'QD6000-12', DATE('2025-10-08'), DATE('2025-10-16'), DATE('2025-10-21'), 150.00, 0.00, 'C', '3', 'OP1113', 'Closed complete. FAI package submitted with shipment.'), + ('MO101837', 'W902-24', DATE('2025-10-08'), DATE('2025-11-04'), DATE('2025-11-12'), 100.00, 2.10, 'C', '1', 'OP1776', 'Closed short - balance cancelled at customer request.'), + ('MO101838', 'SABANDCR8', DATE('2025-10-07'), DATE('2025-10-27'), DATE('2025-10-28'), 1200.00, 50.81, 'C', '3', 'OP1402', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101839', 'W991N-32', DATE('2025-10-07'), DATE('2025-10-10'), DATE('2025-10-09'), 12.00, 0.53, 'C', '2', 'OP1776', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101840', 'AW2010-16', DATE('2025-10-07'), DATE('2025-10-27'), DATE('2025-10-30'), 96.00, 0.00, 'C', '2', 'OP1204', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101841', 'W991-16', DATE('2025-10-07'), DATE('2025-10-14'), DATE('2025-10-15'), 60.00, 1.31, 'C', '3', 'OP1907', 'Closed complete. FAI package submitted with shipment.'), + ('MO101842', 'QD6000-12', DATE('2025-10-07'), DATE('2025-10-23'), DATE('2025-10-20'), 120.00, 0.00, 'C', '2', 'OP1402', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101843', 'SACUSHNW8', DATE('2025-10-07'), DATE('2025-10-28'), DATE('2025-11-05'), 24.00, 0.00, 'C', '1', 'OP1698', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101844', 'G620-32', DATE('2025-10-07'), DATE('2025-10-31'), DATE('2025-11-07'), 200.00, 0.00, 'C', '2', 'OP1087', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101845', 'W991-24', DATE('2025-10-07'), DATE('2025-11-03'), DATE('2025-10-29'), 144.00, 0.00, 'C', '3', 'OP1820', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101846', 'W902-32', DATE('2025-10-06'), DATE('2025-10-24'), DATE('2025-10-29'), 200.00, 6.65, 'C', '2', 'OP1776', 'Closed complete. FAI package submitted with shipment.'), + ('MO101847', 'SAISOEND1', DATE('2025-10-06'), DATE('2025-11-05'), DATE('2025-11-06'), 400.00, 7.36, 'C', '1', 'OP1820', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101848', 'W991-24', DATE('2025-10-06'), DATE('2025-10-24'), DATE('2025-10-27'), 80.00, 3.43, 'C', '2', 'OP1578', 'Closed complete. FAI package submitted with shipment.'), + ('MO101849', 'SACLSH24C', DATE('2025-10-06'), DATE('2025-10-31'), DATE('2025-11-07'), 750.00, 12.73, 'C', '1', 'OP1865', 'Closed short - balance cancelled at customer request.'), + ('MO101850', 'CLPTL-08', DATE('2025-10-06'), DATE('2025-10-21'), DATE('2025-10-24'), 200.00, 0.00, 'C', '2', 'OP1907', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101851', 'SAVTLI01', DATE('2025-10-06'), DATE('2025-10-17'), DATE('2025-10-24'), 50.00, 1.10, 'C', '3', 'OP1536', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101852', 'P9100-08', DATE('2025-10-06'), DATE('2025-10-16'), DATE('2025-10-21'), 40.00, 0.00, 'C', '3', 'OP1238', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101853', 'QD6000-12', DATE('2025-10-06'), DATE('2025-10-15'), DATE('2025-10-13'), 150.00, 0.00, 'C', '3', 'OP1271', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101854', 'SAPOPPET1', DATE('2025-10-03'), DATE('2025-10-10'), DATE('2025-10-08'), 120.00, 1.96, 'C', '2', 'OP1319', 'Closed short - balance cancelled at customer request.'), + ('MO101855', 'W991N-32', DATE('2025-10-03'), DATE('2025-10-30'), DATE('2025-10-29'), 96.00, 1.96, 'C', '1', 'OP1988', 'Closed complete. Shipped ahead of need date.'), + ('MO101856', 'AW979-24', DATE('2025-10-03'), DATE('2025-10-17'), DATE('2025-10-14'), 80.00, 2.23, 'C', '2', 'OP1319', 'Closed complete. FAI package submitted with shipment.'), + ('MO101857', 'SABODY200', DATE('2025-10-03'), DATE('2025-10-24'), DATE('2025-10-28'), 120.00, 0.00, 'C', '2', 'OP1698', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101858', 'CLPSTD-06', DATE('2025-10-03'), DATE('2025-10-24'), DATE('2025-10-30'), 36.00, 0.00, 'C', '3', 'OP1156', 'Closed complete. Shipped ahead of need date.'), + ('MO101859', 'SABODY200', DATE('2025-10-03'), DATE('2025-10-28'), DATE('2025-10-28'), 432.00, 0.00, 'C', '1', 'OP1907', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101860', 'SASEALK24', DATE('2025-10-03'), DATE('2025-11-04'), DATE('2025-11-07'), 576.00, 18.12, 'C', '3', 'OP1238', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101861', 'PVFUSE-12', DATE('2025-10-02'), DATE('2025-10-10'), DATE('2025-10-15'), 12.00, 0.53, 'C', '1', 'OP1776', 'Closed short - balance cancelled at customer request.'), + ('MO101862', 'AW971-24', DATE('2025-10-02'), DATE('2025-10-31'), DATE('2025-11-03'), 36.00, 0.00, 'C', '2', 'OP1364', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101863', 'FRANG-12', DATE('2025-10-02'), DATE('2025-10-15'), DATE('2025-10-20'), 300.00, 5.68, 'C', '3', 'OP1733', 'Closed short - balance cancelled at customer request.'), + ('MO101864', 'W991F-24', DATE('2025-10-02'), DATE('2025-11-03'), DATE('2025-11-05'), 24.00, 0.65, 'C', '3', 'OP1654', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101865', 'W902-16', DATE('2025-10-02'), DATE('2025-10-27'), DATE('2025-10-24'), 36.00, 0.00, 'C', '1', 'OP1364', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101866', 'SAISOEND1', DATE('2025-10-02'), DATE('2025-11-05'), DATE('2025-11-11'), 100.00, 3.76, 'C', '1', 'OP1698', 'Closed complete. FAI package submitted with shipment.'), + ('MO101867', 'AW2091-24', DATE('2025-10-02'), DATE('2025-10-08'), DATE('2025-10-14'), 300.00, 8.63, 'C', '1', 'OP1271', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101868', 'AW2100-24', DATE('2025-10-01'), DATE('2025-10-16'), DATE('2025-10-20'), 40.00, 0.00, 'C', '2', 'OP1364', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101869', 'W991N-32', DATE('2025-10-01'), DATE('2025-10-13'), DATE('2025-10-15'), 96.00, 0.00, 'C', '1', 'OP1238', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101870', 'W902-16', DATE('2025-10-01'), DATE('2025-10-14'), DATE('2025-10-14'), 120.00, 0.00, 'C', '2', 'OP1364', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101871', 'CLPSTD-06', DATE('2025-10-01'), DATE('2025-10-17'), DATE('2025-10-22'), 80.00, 0.00, 'C', '1', 'OP1698', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101872', 'HTRRB-024', DATE('2025-10-01'), DATE('2025-10-27'), DATE('2025-11-03'), 36.00, 0.63, 'C', '3', 'OP1578', 'Closed complete. Shipped ahead of need date.'), + ('MO101873', 'HOSE-04S', DATE('2025-10-01'), DATE('2025-10-27'), DATE('2025-10-29'), 150.00, 6.02, 'C', '2', 'OP1536', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101874', 'SAISOEND1', DATE('2025-10-01'), DATE('2025-10-15'), DATE('2025-10-23'), 120.00, 1.75, 'C', '2', 'OP1865', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101875', 'SABODY600', DATE('2025-10-01'), DATE('2025-10-14'), DATE('2025-10-20'), 432.00, 8.39, 'C', '3', 'OP1271', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101876', 'SASEALK16', DATE('2025-09-30'), DATE('2025-10-24'), DATE('2025-10-29'), 600.00, 0.00, 'C', '2', 'OP1611', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101877', 'SASLEEVE1', DATE('2025-09-30'), DATE('2025-10-09'), DATE('2025-10-16'), 400.00, 0.00, 'C', '1', 'OP1113', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101878', 'SATHBDY32', DATE('2025-09-30'), DATE('2025-10-20'), DATE('2025-10-28'), 144.00, 0.00, 'C', '2', 'OP1578', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101879', 'W991F-24', DATE('2025-09-30'), DATE('2025-10-09'), DATE('2025-10-08'), 25.00, 0.72, 'C', '2', 'OP1156', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101880', 'QD6000-12', DATE('2025-09-30'), DATE('2025-10-14'), DATE('2025-10-14'), 60.00, 0.62, 'C', '1', 'OP1042', 'Closed short - balance cancelled at customer request.'), + ('MO101881', 'C3600-16', DATE('2025-09-30'), DATE('2025-10-09'), DATE('2025-10-14'), 150.00, 0.00, 'C', '3', 'OP1536', 'Closed complete. Shipped ahead of need date.'), + ('MO101882', 'W902-16', DATE('2025-09-30'), DATE('2025-10-30'), DATE('2025-10-27'), 36.00, 0.58, 'C', '2', 'OP1490', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101883', 'SABANDAL6', DATE('2025-09-30'), DATE('2025-10-03'), DATE('2025-10-06'), 160.00, 1.11, 'C', '2', 'OP1319', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101884', 'PVCHK-08', DATE('2025-09-29'), DATE('2025-10-06'), DATE('2025-10-10'), 120.00, 1.90, 'C', '3', 'OP1988', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101885', 'P9400-12', DATE('2025-09-29'), DATE('2025-10-02'), DATE('2025-10-01'), 25.00, 0.44, 'C', '3', 'OP1942', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101886', 'P9600-16', DATE('2025-09-29'), DATE('2025-10-13'), DATE('2025-10-09'), 48.00, 0.00, 'C', '2', 'OP1319', 'Closed short - balance cancelled at customer request.'), + ('MO101887', 'W991N-32', DATE('2025-09-29'), DATE('2025-10-31'), DATE('2025-11-04'), 250.00, 0.00, 'C', '3', 'OP1942', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101888', 'SASEALK32', DATE('2025-09-29'), DATE('2025-10-08'), NULL, 180.00, 1.29, 'R', '3', 'OP1776', 'Held for engineering disposition on tolerance deviation request.'), + ('MO101889', 'W902-16', DATE('2025-09-29'), DATE('2025-10-20'), DATE('2025-10-28'), 12.00, 0.17, 'C', '1', 'OP1907', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101890', 'AW2100-24', DATE('2025-09-29'), DATE('2025-10-31'), DATE('2025-10-31'), 200.00, 0.00, 'C', '1', 'OP1820', 'Closed complete. Shipped ahead of need date.'), + ('MO101891', 'HTRCF-201', DATE('2025-09-26'), DATE('2025-10-28'), DATE('2025-10-24'), 20.00, 0.12, 'C', '3', 'OP1271', 'Closed short - balance cancelled at customer request.'), + ('MO101892', 'CLPSL-08', DATE('2025-09-26'), DATE('2025-10-24'), DATE('2025-10-29'), 96.00, 0.00, 'C', '2', 'OP1654', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101893', 'CLPTL-08', DATE('2025-09-26'), DATE('2025-10-02'), DATE('2025-10-06'), 300.00, 0.00, 'C', '1', 'OP1865', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101894', 'PVFUSE-12', DATE('2025-09-26'), DATE('2025-10-30'), DATE('2025-10-29'), 80.00, 0.00, 'C', '2', 'OP1536', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101895', 'FRANG-12', DATE('2025-09-26'), DATE('2025-10-10'), DATE('2025-10-15'), 40.00, 0.89, 'C', '3', 'OP1490', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101896', 'W902-32', DATE('2025-09-26'), DATE('2025-10-14'), DATE('2025-10-14'), 240.00, 7.66, 'C', '3', 'OP1536', 'Closed complete. FAI package submitted with shipment.'), + ('MO101897', 'SALATCH1', DATE('2025-09-26'), DATE('2025-10-14'), DATE('2025-10-10'), 192.00, 1.27, 'C', '1', 'OP1156', 'Closed complete. Shipped ahead of need date.'), + ('MO101898', 'SAISOTUB2', DATE('2025-09-26'), DATE('2025-10-21'), DATE('2025-10-22'), 300.00, 0.00, 'C', '3', 'OP1402', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101899', 'W902-16', DATE('2025-09-25'), DATE('2025-10-29'), DATE('2025-10-29'), 60.00, 1.66, 'C', '2', 'OP1776', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101900', 'CLPBLK-12', DATE('2025-09-25'), DATE('2025-10-10'), DATE('2025-10-16'), 300.00, 11.23, 'C', '1', 'OP1654', 'Closed complete. All dimensional and NDT results acceptable.'); + +INSERT INTO MANUFACTURING_ORDERS (ORDER_ID, ITEM_ID, ORDER_DATE, EXPECTED_COMPLETION_DATE, ACTUAL_COMPLETION_DATE, QUANTITY_ORDERED, QUANTITY_SCRAPPED, STATUS, SHIFT_CODE, OPERATOR_ID, NOTES) VALUES + ('MO101901', 'ISOF-2000', DATE('2025-09-25'), DATE('2025-10-28'), DATE('2025-11-05'), 120.00, 0.00, 'C', '2', 'OP1271', 'Closed short - balance cancelled at customer request.'), + ('MO101902', 'F63052-24', DATE('2025-09-25'), DATE('2025-10-08'), DATE('2025-10-03'), 120.00, 0.00, 'C', '2', 'OP1611', 'Closed short - balance cancelled at customer request.'), + ('MO101903', 'AW971-24', DATE('2025-09-25'), DATE('2025-10-06'), DATE('2025-10-02'), 60.00, 0.00, 'C', '1', 'OP1865', 'Closed complete. FAI package submitted with shipment.'), + ('MO101904', 'CLPSPC-06', DATE('2025-09-25'), DATE('2025-10-01'), DATE('2025-10-06'), 300.00, 1.51, 'C', '3', 'OP1402', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101905', 'P9400-12', DATE('2025-09-25'), DATE('2025-10-29'), DATE('2025-10-28'), 250.00, 0.00, 'C', '1', 'OP1611', 'Closed complete. Shipped ahead of need date.'), + ('MO101906', 'AW2100-24', DATE('2025-09-25'), DATE('2025-10-16'), DATE('2025-10-17'), 240.00, 0.00, 'C', '1', 'OP1865', 'Closed short - balance cancelled at customer request.'), + ('MO101907', 'P9400-12', DATE('2025-09-24'), DATE('2025-10-08'), DATE('2025-10-08'), 250.00, 6.22, 'C', '1', 'OP1113', 'Closed short - balance cancelled at customer request.'), + ('MO101908', 'P9600-16', DATE('2025-09-24'), DATE('2025-10-20'), DATE('2025-10-15'), 240.00, 0.00, 'C', '2', 'OP1942', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101909', 'P9100-08', DATE('2025-09-24'), DATE('2025-09-29'), DATE('2025-09-24'), 72.00, 1.07, 'C', '3', 'OP1490', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101910', 'W991-24', DATE('2025-09-24'), DATE('2025-10-16'), DATE('2025-10-20'), 150.00, 4.72, 'C', '3', 'OP1698', 'Closed short - balance cancelled at customer request.'), + ('MO101911', 'AW2091-24', DATE('2025-09-24'), DATE('2025-10-15'), DATE('2025-10-13'), 50.00, 1.34, 'C', '2', 'OP1087', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101912', 'AW2091-24', DATE('2025-09-24'), DATE('2025-10-23'), DATE('2025-10-23'), 40.00, 0.00, 'C', '2', 'OP1820', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101913', 'CLPSPC-06', DATE('2025-09-24'), DATE('2025-10-07'), DATE('2025-10-02'), 40.00, 0.73, 'C', '1', 'OP1733', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101914', 'QD200-08', DATE('2025-09-24'), DATE('2025-10-15'), DATE('2025-10-16'), 300.00, 5.07, 'C', '2', 'OP1865', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101915', 'AW2100-24', DATE('2025-09-23'), DATE('2025-10-22'), DATE('2025-10-22'), 250.00, 0.00, 'C', '3', 'OP1402', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101916', 'AW2091-24', DATE('2025-09-23'), DATE('2025-10-10'), DATE('2025-10-07'), 60.00, 0.78, 'C', '1', 'OP1087', 'Closed complete. Shipped ahead of need date.'), + ('MO101917', 'SATHRDNUT', DATE('2025-09-23'), DATE('2025-09-29'), DATE('2025-10-01'), 60.00, 1.58, 'C', '1', 'OP1907', 'Closed short - balance cancelled at customer request.'), + ('MO101918', 'AW2010-16', DATE('2025-09-23'), DATE('2025-10-13'), DATE('2025-10-08'), 12.00, 0.00, 'C', '2', 'OP1820', 'Closed complete. FAI package submitted with shipment.'), + ('MO101919', 'F63052-24', DATE('2025-09-23'), DATE('2025-10-08'), DATE('2025-10-15'), 250.00, 10.39, 'C', '1', 'OP1204', 'Closed short - balance cancelled at customer request.'), + ('MO101920', 'P9600-16', DATE('2025-09-23'), DATE('2025-10-22'), DATE('2025-10-17'), 200.00, 0.00, 'C', '3', 'OP1319', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101921', 'CLPWS-10', DATE('2025-09-23'), DATE('2025-10-14'), DATE('2025-10-14'), 12.00, 0.44, 'C', '1', 'OP1042', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101922', 'SABODY200', DATE('2025-09-22'), DATE('2025-10-17'), DATE('2025-10-17'), 108.00, 0.00, 'C', '2', 'OP1087', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101923', 'SASEALK32', DATE('2025-09-22'), DATE('2025-09-25'), DATE('2025-09-23'), 500.00, 2.98, 'C', '2', 'OP1942', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101924', 'SAISOTUB2', DATE('2025-09-22'), DATE('2025-10-15'), DATE('2025-10-14'), 72.00, 0.00, 'C', '3', 'OP1578', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101925', 'SAISOTUB1', DATE('2025-09-22'), DATE('2025-10-09'), DATE('2025-10-07'), 240.00, 1.20, 'C', '1', 'OP1578', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101926', 'W991N-32', DATE('2025-09-22'), DATE('2025-10-15'), DATE('2025-10-16'), 80.00, 2.53, 'C', '1', 'OP1776', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101927', 'SATHBDY16', DATE('2025-09-22'), DATE('2025-10-02'), DATE('2025-10-02'), 24.00, 0.00, 'C', '1', 'OP1204', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101928', 'SASEALK24', DATE('2025-09-22'), DATE('2025-10-23'), DATE('2025-10-23'), 480.00, 0.00, 'C', '3', 'OP1271', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101929', 'HTRRB-012', DATE('2025-09-22'), DATE('2025-10-13'), DATE('2025-10-10'), 100.00, 3.23, 'C', '3', 'OP1536', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101930', 'AW2100-32', DATE('2025-09-19'), DATE('2025-10-22'), DATE('2025-10-30'), 100.00, 0.72, 'C', '1', 'OP1865', 'Closed short - balance cancelled at customer request.'), + ('MO101931', 'AW971-24', DATE('2025-09-19'), DATE('2025-10-13'), DATE('2025-10-09'), 24.00, 0.00, 'C', '2', 'OP1087', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101932', 'W991N-32', DATE('2025-09-19'), DATE('2025-09-29'), DATE('2025-09-25'), 25.00, 0.00, 'C', '2', 'OP1654', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101933', 'C8300-32', DATE('2025-09-19'), DATE('2025-10-08'), DATE('2025-10-10'), 36.00, 0.00, 'C', '1', 'OP1536', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101934', 'SAHOSEAS8', DATE('2025-09-19'), DATE('2025-09-26'), DATE('2025-09-26'), 100.00, 0.00, 'C', '3', 'OP1988', 'Closed complete. FAI package submitted with shipment.'), + ('MO101935', 'QD200-08', DATE('2025-09-19'), DATE('2025-10-21'), DATE('2025-10-24'), 200.00, 7.05, 'C', '1', 'OP1988', 'Closed complete. Shipped ahead of need date.'), + ('MO101936', 'AW971-16', DATE('2025-09-19'), DATE('2025-09-29'), DATE('2025-09-24'), 60.00, 2.46, 'C', '1', 'OP1578', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101937', 'AW2010-24', DATE('2025-09-19'), DATE('2025-10-10'), DATE('2025-10-07'), 20.00, 0.27, 'C', '2', 'OP1156', 'Closed complete. FAI package submitted with shipment.'), + ('MO101938', 'CLPBLK-12', DATE('2025-09-18'), DATE('2025-09-26'), DATE('2025-10-06'), 72.00, 3.08, 'C', '2', 'OP1204', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101939', 'SATHBDY24', DATE('2025-09-18'), DATE('2025-09-30'), DATE('2025-10-03'), 120.00, 0.00, 'C', '2', 'OP1698', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101940', 'CLPTL-08', DATE('2025-09-18'), DATE('2025-09-29'), DATE('2025-09-24'), 50.00, 0.00, 'C', '2', 'OP1402', 'Closed complete. FAI package submitted with shipment.'), + ('MO101941', 'SABODY200', DATE('2025-09-18'), DATE('2025-09-30'), DATE('2025-10-03'), 240.00, 1.12, 'C', '1', 'OP1820', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101942', 'SACUSHNW8', DATE('2025-09-18'), DATE('2025-10-20'), DATE('2025-10-23'), 144.00, 1.18, 'C', '1', 'OP1578', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101943', 'G620-32', DATE('2025-09-18'), DATE('2025-10-02'), DATE('2025-10-01'), 48.00, 1.07, 'C', '2', 'OP1204', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101944', 'HTRHS-06', DATE('2025-09-18'), DATE('2025-10-06'), DATE('2025-10-02'), 300.00, 2.10, 'C', '1', 'OP1156', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101945', 'W991F-24', DATE('2025-09-18'), DATE('2025-10-06'), DATE('2025-10-13'), 144.00, 0.00, 'C', '2', 'OP1698', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101946', 'P9400-12', DATE('2025-09-17'), DATE('2025-09-23'), DATE('2025-09-19'), 240.00, 8.59, 'C', '2', 'OP1942', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101947', 'W902-32', DATE('2025-09-17'), DATE('2025-10-20'), DATE('2025-10-24'), 25.00, 0.19, 'C', '3', 'OP1156', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101948', 'SASEALK16', DATE('2025-09-17'), DATE('2025-09-29'), DATE('2025-10-06'), 120.00, 0.00, 'C', '3', 'OP1988', 'Closed complete. Shipped ahead of need date.'), + ('MO101949', 'SAHTRCORE', DATE('2025-09-17'), DATE('2025-09-29'), DATE('2025-09-24'), 192.00, 0.00, 'C', '2', 'OP1448', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101950', 'SASEALK24', DATE('2025-09-17'), DATE('2025-10-20'), DATE('2025-10-24'), 48.00, 0.46, 'C', '1', 'OP1578', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101951', 'AW2100-32', DATE('2025-09-17'), DATE('2025-09-25'), DATE('2025-10-03'), 72.00, 0.00, 'C', '1', 'OP1578', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101952', 'W991-16', DATE('2025-09-17'), DATE('2025-10-06'), DATE('2025-10-06'), 24.00, 0.00, 'C', '1', 'OP1271', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101953', 'SABODY600', DATE('2025-09-17'), DATE('2025-10-20'), DATE('2025-10-28'), 160.00, 2.99, 'C', '2', 'OP1319', 'Closed complete. Shipped ahead of need date.'), + ('MO101954', 'P9600-16', DATE('2025-09-16'), DATE('2025-10-08'), DATE('2025-10-08'), 50.00, 1.55, 'C', '1', 'OP1698', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101955', 'SAPOPPET1', DATE('2025-09-16'), DATE('2025-10-20'), DATE('2025-10-17'), 160.00, 6.33, 'C', '2', 'OP1087', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101956', 'AW979-24', DATE('2025-09-16'), DATE('2025-10-20'), DATE('2025-10-17'), 24.00, 0.00, 'C', '3', 'OP1988', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101957', 'P9400-12', DATE('2025-09-16'), DATE('2025-10-17'), DATE('2025-10-16'), 250.00, 0.00, 'C', '3', 'OP1776', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101958', 'SACUSHN06', DATE('2025-09-16'), DATE('2025-10-02'), DATE('2025-10-06'), 50.00, 0.00, 'C', '2', 'OP1448', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101959', 'F63052-24', DATE('2025-09-16'), DATE('2025-10-15'), DATE('2025-10-10'), 240.00, 0.00, 'C', '2', 'OP1042', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101960', 'W991F-24', DATE('2025-09-16'), DATE('2025-10-13'), DATE('2025-10-17'), 12.00, 0.00, 'C', '3', 'OP1156', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101961', 'HTRCT-22W', DATE('2025-09-16'), DATE('2025-09-23'), DATE('2025-09-18'), 48.00, 0.00, 'C', '1', 'OP1156', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101962', 'AW971-16', DATE('2025-09-15'), DATE('2025-10-09'), DATE('2025-10-06'), 144.00, 0.00, 'C', '1', 'OP1042', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101963', 'CLPTL-08', DATE('2025-09-15'), DATE('2025-10-14'), DATE('2025-10-15'), 36.00, 0.00, 'C', '1', 'OP1204', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101964', 'SASEALK24', DATE('2025-09-15'), DATE('2025-10-01'), DATE('2025-10-03'), 120.00, 1.76, 'C', '3', 'OP1536', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101965', 'PVFUSE-12', DATE('2025-09-15'), DATE('2025-10-10'), DATE('2025-10-08'), 24.00, 0.00, 'C', '2', 'OP1087', 'Closed short - balance cancelled at customer request.'), + ('MO101966', 'QD200-16', DATE('2025-09-15'), DATE('2025-10-01'), DATE('2025-10-01'), 80.00, 0.57, 'C', '2', 'OP1907', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101967', 'CLPWS-10', DATE('2025-09-15'), DATE('2025-10-15'), DATE('2025-10-13'), 25.00, 0.22, 'C', '3', 'OP1319', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101968', 'QD6000-12', DATE('2025-09-15'), DATE('2025-10-09'), DATE('2025-10-08'), 120.00, 0.69, 'C', '1', 'OP1578', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101969', 'SAWEARSH1', DATE('2025-09-15'), DATE('2025-09-22'), DATE('2025-09-29'), 150.00, 0.00, 'C', '2', 'OP1578', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101970', 'AW2010-24', DATE('2025-09-12'), DATE('2025-10-02'), DATE('2025-10-09'), 200.00, 0.00, 'C', '1', 'OP1654', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101971', 'CLPSTD-06', DATE('2025-09-12'), DATE('2025-10-09'), DATE('2025-10-17'), 300.00, 12.97, 'C', '2', 'OP1238', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101972', 'CLPTL-08', DATE('2025-09-12'), DATE('2025-10-06'), DATE('2025-10-14'), 300.00, 5.66, 'C', '1', 'OP1733', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101973', 'CLPBLK-12', DATE('2025-09-12'), DATE('2025-09-22'), DATE('2025-09-17'), 50.00, 0.00, 'C', '2', 'OP1319', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101974', 'AW2100-32', DATE('2025-09-12'), DATE('2025-10-14'), DATE('2025-10-15'), 25.00, 1.11, 'C', '3', 'OP1204', 'Closed complete. FAI package submitted with shipment.'), + ('MO101975', 'W700-32', DATE('2025-09-12'), DATE('2025-09-26'), DATE('2025-10-03'), 48.00, 1.61, 'C', '1', 'OP1611', 'Closed complete, one unit scrapped for bore undersize at op 40.'), + ('MO101976', 'SASLEEVE1', DATE('2025-09-12'), DATE('2025-10-03'), DATE('2025-10-07'), 600.00, 7.10, 'C', '3', 'OP1536', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101977', 'SABODY600', DATE('2025-09-12'), DATE('2025-09-18'), DATE('2025-09-23'), 500.00, 0.00, 'C', '1', 'OP1204', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101978', 'HOSE-04S', DATE('2025-09-11'), DATE('2025-09-22'), DATE('2025-09-24'), 60.00, 1.39, 'C', '1', 'OP1698', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101979', 'W991N-32', DATE('2025-09-11'), DATE('2025-09-17'), DATE('2025-09-23'), 60.00, 2.12, 'C', '3', 'OP1611', 'Closed complete after rework of anodize coverage on two units.'), + ('MO101980', 'AW2100-32', DATE('2025-09-11'), DATE('2025-09-22'), DATE('2025-09-26'), 150.00, 0.00, 'C', '1', 'OP1698', 'Closed complete. Shipped ahead of need date.'), + ('MO101981', 'HTRRB-024', DATE('2025-09-11'), DATE('2025-09-19'), DATE('2025-09-24'), 72.00, 0.00, 'C', '1', 'OP1087', 'Closed complete. FAI package submitted with shipment.'), + ('MO101982', 'W922N-16', DATE('2025-09-11'), DATE('2025-10-15'), DATE('2025-10-23'), 250.00, 0.00, 'C', '3', 'OP1364', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101983', 'SABODY600', DATE('2025-09-11'), DATE('2025-09-25'), DATE('2025-09-23'), 1200.00, 0.00, 'C', '3', 'OP1536', 'Closed complete. Cushion bond verified per process spec.'), + ('MO101984', 'CLPSTD-06', DATE('2025-09-11'), DATE('2025-09-19'), DATE('2025-09-25'), 250.00, 2.11, 'C', '1', 'OP1536', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101985', 'AW971-16', DATE('2025-09-10'), DATE('2025-10-02'), DATE('2025-10-02'), 50.00, 0.00, 'C', '2', 'OP1611', 'Closed complete. Source inspection passed on first presentation.'), + ('MO101986', 'SAPOPPET1', DATE('2025-09-10'), DATE('2025-09-25'), DATE('2025-10-01'), 480.00, 20.54, 'C', '1', 'OP1271', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101987', 'QD200-16', DATE('2025-09-10'), DATE('2025-10-10'), DATE('2025-10-09'), 144.00, 0.00, 'C', '2', 'OP1611', 'Closed complete. Proof pressure test recorded at 250 PSIG.'), + ('MO101988', 'PVCHK-08', DATE('2025-09-10'), DATE('2025-10-01'), DATE('2025-10-07'), 200.00, 0.00, 'C', '2', 'OP1271', 'Closed complete. Lot released from penetrant hold on retest.'), + ('MO101989', 'AW979-24', DATE('2025-09-10'), DATE('2025-10-08'), DATE('2025-10-03'), 250.00, 7.47, 'C', '3', 'OP1156', 'Closed complete. Shipped ahead of need date.'), + ('MO101990', 'SACLSH24C', DATE('2025-09-10'), DATE('2025-09-22'), DATE('2025-09-18'), 80.00, 0.00, 'C', '3', 'OP1204', 'Closed complete. FAI package submitted with shipment.'), + ('MO101991', 'W991F-24', DATE('2025-09-10'), DATE('2025-09-17'), DATE('2025-09-22'), 36.00, 1.13, 'C', '2', 'OP1776', 'Closed short - balance cancelled at customer request.'), + ('MO101992', 'W991N-32', DATE('2025-09-10'), DATE('2025-09-25'), DATE('2025-09-29'), 144.00, 0.00, 'C', '1', 'OP1820', 'Closed complete. All dimensional and NDT results acceptable.'), + ('MO101993', 'SASEALK32', DATE('2026-08-27'), DATE('2026-10-13'), NULL, 480.00, 0.00, 'P', '1', 'OP1204', 'Customer source inspection scheduled at final acceptance.'), + ('MO101994', 'SASEALK24', DATE('2026-08-27'), DATE('2026-09-21'), NULL, 100.00, 0.00, 'P', '1', 'OP1942', 'Dual-lot build; segregate serial ranges at pack out.'), + ('MO101995', 'W991F-24', DATE('2026-08-28'), DATE('2026-11-26'), NULL, 100.00, 0.00, 'P', '1', 'OP1087', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO101996', 'AW2010-32', DATE('2026-09-08'), DATE('2026-09-28'), NULL, 150.00, 0.00, 'P', '2', 'OP1364', 'Qualification build supporting AS7510 lightning test article.'), + ('MO101997', 'SATHBDY32', DATE('2026-08-27'), DATE('2026-11-11'), NULL, 200.00, 0.00, 'P', '3', 'OP1319', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO101998', 'W902-16', DATE('2026-09-02'), DATE('2026-10-15'), NULL, 24.00, 0.00, 'P', '3', 'OP1820', 'FAI required per AS9102 on this revision before shipment.'), + ('MO101999', 'SACLSH24', DATE('2026-09-01'), DATE('2026-09-24'), NULL, 500.00, 0.00, 'P', '3', 'OP1204', 'Held for engineering disposition on tolerance deviation request.'), + ('MO102000', 'SABODY600', DATE('2026-08-28'), DATE('2026-10-12'), NULL, 144.00, 0.00, 'P', '3', 'OP1402', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'); + +INSERT INTO MANUFACTURING_ORDERS (ORDER_ID, ITEM_ID, ORDER_DATE, EXPECTED_COMPLETION_DATE, ACTUAL_COMPLETION_DATE, QUANTITY_ORDERED, QUANTITY_SCRAPPED, STATUS, SHIFT_CODE, OPERATOR_ID, NOTES) VALUES + ('MO102001', 'CLPWS-10', DATE('2026-09-01'), DATE('2026-09-28'), NULL, 12.00, 0.00, 'P', '3', 'OP1490', 'Qualification build supporting AS7510 lightning test article.'), + ('MO102002', 'P9100-08', DATE('2026-08-31'), DATE('2026-10-30'), NULL, 300.00, 0.00, 'P', '2', 'OP1776', 'Anodize line at capacity - routed to outside processor.'), + ('MO102003', 'WMLQD-075', DATE('2026-09-07'), DATE('2026-10-30'), NULL, 40.00, 0.00, 'P', '1', 'OP1776', 'Qualification build supporting AS7510 lightning test article.'), + ('MO102004', 'W991-24', DATE('2026-09-07'), DATE('2026-10-16'), NULL, 48.00, 0.00, 'P', '3', 'OP1578', 'FAI required per AS9102 on this revision before shipment.'), + ('MO102005', 'QD200-16', DATE('2026-08-28'), DATE('2026-10-02'), NULL, 100.00, 0.00, 'P', '1', 'OP1865', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO102006', 'SAHOSEAS8', DATE('2026-09-02'), DATE('2026-11-19'), NULL, 96.00, 0.00, 'P', '1', 'OP1402', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO102007', 'WMFFN-100', DATE('2026-08-26'), DATE('2026-11-06'), NULL, 12.00, 0.00, 'P', '3', 'OP1271', 'Mining channel order - ELP stock replenishment.'), + ('MO102008', 'AW2100-24', DATE('2026-09-08'), DATE('2026-11-16'), NULL, 12.00, 0.00, 'P', '1', 'OP1865', 'Standard routing, no deviations. Release to LAX cell 4.'), + ('MO102009', 'CLPSPC-06', DATE('2026-09-04'), DATE('2026-10-12'), NULL, 200.00, 0.00, 'P', '1', 'OP1156', 'Qualification build supporting AS7510 lightning test article.'), + ('MO102010', 'SACUSHN06', DATE('2026-09-07'), DATE('2026-10-01'), NULL, 60.00, 0.00, 'P', '1', 'OP1578', 'Mining channel order - ELP stock replenishment.'), + ('MO102011', 'SATHRDNUT', DATE('2026-08-28'), DATE('2026-10-28'), NULL, 750.00, 0.00, 'P', '2', 'OP1733', 'Traveller reprinted after routing update; use rev 4 only.'), + ('MO102012', 'QD200-08', DATE('2026-08-27'), DATE('2026-11-23'), NULL, 80.00, 0.00, 'P', '2', 'OP1820', 'Held for engineering disposition on tolerance deviation request.'), + ('MO102013', 'QD200-16', DATE('2026-08-28'), DATE('2026-09-15'), NULL, 96.00, 0.00, 'P', '2', 'OP1364', 'Held for engineering disposition on tolerance deviation request.'), + ('MO102014', 'HTRBL-112', DATE('2026-09-04'), DATE('2026-10-16'), NULL, 150.00, 0.00, 'P', '2', 'OP1776', 'Traveller reprinted after routing update; use rev 4 only.'), + ('MO102015', 'AW971-16', DATE('2026-08-28'), DATE('2026-09-29'), NULL, 40.00, 0.00, 'P', '3', 'OP1698', 'FAI required per AS9102 on this revision before shipment.'), + ('MO102016', 'AW2010-32', DATE('2026-08-28'), DATE('2026-10-26'), NULL, 80.00, 0.00, 'P', '3', 'OP1204', 'Customer source inspection scheduled at final acceptance.'), + ('MO102017', 'SABANDCR8', DATE('2026-09-04'), DATE('2026-11-03'), NULL, 200.00, 0.00, 'P', '2', 'OP1611', 'Long-lead titanium bar released early against forecast.'), + ('MO102018', 'SATHBDY24', DATE('2026-08-26'), DATE('2026-10-08'), NULL, 96.00, 0.00, 'P', '1', 'OP1087', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO102019', 'AW2010-32', DATE('2026-09-07'), DATE('2026-11-04'), NULL, 200.00, 0.00, 'P', '1', 'OP1490', 'Held for engineering disposition on tolerance deviation request.'), + ('MO102020', 'HTRRB-024', DATE('2026-08-25'), DATE('2026-11-11'), NULL, 40.00, 0.00, 'P', '3', 'OP1042', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO102021', 'SABANDCR8', DATE('2026-09-01'), DATE('2026-09-17'), NULL, 600.00, 0.00, 'P', '3', 'OP1733', 'FAI required per AS9102 on this revision before shipment.'), + ('MO102022', 'WMFFR-100', DATE('2026-08-27'), DATE('2026-11-03'), NULL, 36.00, 0.00, 'P', '3', 'OP1536', 'Dual-lot build; segregate serial ranges at pack out.'), + ('MO102023', 'SATHRDNUT', DATE('2026-08-27'), DATE('2026-10-12'), NULL, 800.00, 0.00, 'P', '1', 'OP1988', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO102024', 'SAISOTUB1', DATE('2026-09-02'), DATE('2026-10-23'), NULL, 50.00, 0.00, 'P', '1', 'OP1733', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO102025', 'CLPSTD-06', DATE('2026-09-02'), DATE('2026-10-20'), NULL, 24.00, 0.00, 'P', '3', 'OP1204', 'Qualification build supporting AS7510 lightning test article.'), + ('MO102026', 'W991-24', DATE('2026-09-04'), DATE('2026-11-12'), NULL, 96.00, 0.00, 'P', '3', 'OP1820', 'Mining channel order - ELP stock replenishment.'), + ('MO102027', 'SACLSH32', DATE('2026-08-25'), DATE('2026-09-15'), NULL, 192.00, 0.00, 'P', '3', 'OP1113', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO102028', 'P9600-16', DATE('2026-09-04'), DATE('2026-10-29'), NULL, 36.00, 0.00, 'P', '3', 'OP1042', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO102029', 'SABANDCR8', DATE('2026-09-07'), DATE('2026-10-19'), NULL, 288.00, 0.00, 'P', '3', 'OP1156', 'Standard routing, no deviations. Release to LAX cell 4.'), + ('MO102030', 'WMFFN-100', DATE('2026-08-26'), DATE('2026-09-17'), NULL, 50.00, 0.00, 'P', '2', 'OP1204', 'Spares order for MIA depot replenishment.'), + ('MO102031', 'SASLEEVE1', DATE('2026-08-26'), DATE('2026-10-08'), NULL, 400.00, 0.00, 'P', '1', 'OP1364', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO102032', 'SABANDCR8', DATE('2026-09-01'), DATE('2026-11-20'), NULL, 48.00, 0.00, 'P', '1', 'OP1238', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO102033', 'SACLSH32T', DATE('2026-08-28'), DATE('2026-09-23'), NULL, 960.00, 0.00, 'P', '1', 'OP1733', 'Mining channel order - ELP stock replenishment.'), + ('MO102034', 'SATHBDY16', DATE('2026-09-03'), DATE('2026-09-24'), NULL, 48.00, 0.00, 'P', '3', 'OP1654', 'Dual-lot build; segregate serial ranges at pack out.'), + ('MO102035', 'W922N-16', DATE('2026-09-08'), DATE('2026-10-29'), NULL, 96.00, 0.00, 'P', '2', 'OP1698', 'Traveller reprinted after routing update; use rev 4 only.'), + ('MO102036', 'SALATCH1', DATE('2026-09-07'), DATE('2026-09-24'), NULL, 720.00, 0.00, 'P', '2', 'OP1654', 'Long-lead titanium bar released early against forecast.'), + ('MO102037', 'SAISOTUB1', DATE('2026-09-02'), DATE('2026-09-17'), NULL, 240.00, 0.00, 'P', '2', 'OP1319', 'Held for engineering disposition on tolerance deviation request.'), + ('MO102038', 'SACUSHN06', DATE('2026-09-04'), DATE('2026-11-24'), NULL, 400.00, 0.00, 'P', '3', 'OP1698', 'Qualification build supporting AS7510 lightning test article.'), + ('MO102039', 'W991N-32', DATE('2026-08-27'), DATE('2026-10-12'), NULL, 300.00, 0.00, 'P', '1', 'OP1319', 'Long-lead titanium bar released early against forecast.'), + ('MO102040', 'SATHBDY32', DATE('2026-09-01'), DATE('2026-10-15'), NULL, 720.00, 0.00, 'P', '3', 'OP1448', 'Dual-lot build; segregate serial ranges at pack out.'), + ('MO102041', 'PVFUSE-12', DATE('2026-09-08'), DATE('2026-10-08'), NULL, 100.00, 0.00, 'P', '2', 'OP1087', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO102042', 'W991-24', DATE('2026-08-26'), DATE('2026-10-09'), NULL, 100.00, 0.00, 'P', '3', 'OP1776', 'Traveller reprinted after routing update; use rev 4 only.'), + ('MO102043', 'HTRRB-024', DATE('2026-09-08'), DATE('2026-10-29'), NULL, 24.00, 0.00, 'P', '1', 'OP1238', 'Standard routing, no deviations. Release to LAX cell 4.'), + ('MO102044', 'WMLQD-075', DATE('2026-08-31'), DATE('2026-11-18'), NULL, 40.00, 0.00, 'P', '2', 'OP1042', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO102045', 'SAISOTUB1', DATE('2026-08-26'), DATE('2026-11-24'), NULL, 480.00, 0.00, 'P', '3', 'OP1238', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO102046', 'SAISOTUB1', DATE('2026-09-08'), DATE('2026-09-17'), NULL, 288.00, 0.00, 'P', '2', 'OP1733', 'Traveller reprinted after routing update; use rev 4 only.'), + ('MO102047', 'SAISOTUB1', DATE('2026-08-27'), DATE('2026-11-02'), NULL, 150.00, 0.00, 'P', '2', 'OP1733', 'Qualification build supporting AS7510 lightning test article.'), + ('MO102048', 'AW2091-24', DATE('2026-09-04'), DATE('2026-10-27'), NULL, 150.00, 0.00, 'P', '2', 'OP1820', 'Long-lead titanium bar released early against forecast.'), + ('MO102049', 'PVCHK-08', DATE('2026-08-25'), DATE('2026-09-29'), NULL, 80.00, 0.00, 'P', '1', 'OP1113', 'Qualification build supporting AS7510 lightning test article.'), + ('MO102050', 'CLPSPC-06', DATE('2026-08-28'), DATE('2026-11-05'), NULL, 150.00, 0.00, 'P', '1', 'OP1578', 'Customer source inspection scheduled at final acceptance.'), + ('MO102051', 'SACLSH32T', DATE('2026-09-01'), DATE('2026-09-14'), NULL, 80.00, 0.00, 'P', '1', 'OP1448', 'Held for engineering disposition on tolerance deviation request.'), + ('MO102052', 'CLPWS-10', DATE('2026-08-31'), DATE('2026-11-17'), NULL, 60.00, 0.00, 'P', '1', 'OP1448', 'Rev B effectivity - verify seal kit callout before kitting.'), + ('MO102053', 'G620-32', DATE('2026-08-28'), DATE('2026-10-05'), NULL, 25.00, 0.00, 'P', '2', 'OP1907', 'Rev B effectivity - verify seal kit callout before kitting.'), + ('MO102054', 'SASEALK16', DATE('2026-08-28'), DATE('2026-10-19'), NULL, 160.00, 0.00, 'P', '1', 'OP1319', 'Standard routing, no deviations. Release to LAX cell 4.'), + ('MO102055', 'QD6000-12', DATE('2026-09-02'), DATE('2026-11-13'), NULL, 80.00, 0.00, 'P', '1', 'OP1820', 'Long-lead titanium bar released early against forecast.'), + ('MO102056', 'W991F-24', DATE('2026-08-28'), DATE('2026-10-28'), NULL, 250.00, 0.00, 'P', '2', 'OP1611', 'Rev B effectivity - verify seal kit callout before kitting.'), + ('MO102057', 'AW979-24', DATE('2026-09-03'), DATE('2026-10-20'), NULL, 300.00, 0.00, 'P', '3', 'OP1204', 'Spares order for MIA depot replenishment.'), + ('MO102058', 'AW2010-16', DATE('2026-09-03'), DATE('2026-11-18'), NULL, 200.00, 0.00, 'P', '3', 'OP1364', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO102059', 'SASEALK16', DATE('2026-08-26'), DATE('2026-11-26'), NULL, 384.00, 0.00, 'P', '2', 'OP1204', 'Standard routing, no deviations. Release to LAX cell 4.'), + ('MO102060', 'SACLSH24C', DATE('2026-09-08'), DATE('2026-10-23'), NULL, 576.00, 0.00, 'P', '3', 'OP1364', 'Traveller reprinted after routing update; use rev 4 only.'), + ('MO102061', 'SACUSHNW8', DATE('2026-09-03'), DATE('2026-09-22'), NULL, 100.00, 0.00, 'P', '2', 'OP1319', 'Mining channel order - ELP stock replenishment.'), + ('MO102062', 'P9100-08', DATE('2026-09-02'), DATE('2026-10-16'), NULL, 72.00, 0.00, 'P', '1', 'OP1156', 'Spares order for MIA depot replenishment.'), + ('MO102063', 'SACLSH24C', DATE('2026-09-02'), DATE('2026-11-18'), NULL, 240.00, 0.00, 'P', '1', 'OP1733', 'Customer source inspection scheduled at final acceptance.'), + ('MO102064', 'SAHTRCORE', DATE('2026-08-26'), DATE('2026-10-01'), NULL, 144.00, 0.00, 'P', '1', 'OP1733', 'Rev B effectivity - verify seal kit callout before kitting.'), + ('MO102065', 'SABODY200', DATE('2026-08-31'), DATE('2026-10-19'), NULL, 432.00, 0.00, 'P', '1', 'OP1907', 'Rev B effectivity - verify seal kit callout before kitting.'), + ('MO102066', 'FRANG-12', DATE('2026-08-25'), DATE('2026-09-16'), NULL, 25.00, 0.00, 'P', '1', 'OP1820', 'Traveller reprinted after routing update; use rev 4 only.'), + ('MO102067', 'PVCHK-08', DATE('2026-08-26'), DATE('2026-09-28'), NULL, 250.00, 0.00, 'P', '1', 'OP1611', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO102068', 'F63052-32', DATE('2026-09-08'), DATE('2026-11-25'), NULL, 100.00, 0.00, 'P', '3', 'OP1698', 'Rev B effectivity - verify seal kit callout before kitting.'), + ('MO102069', 'SACLSH24C', DATE('2026-09-08'), DATE('2026-09-16'), NULL, 150.00, 0.00, 'P', '1', 'OP1490', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO102070', 'AW2100-24', DATE('2026-08-28'), DATE('2026-10-23'), NULL, 240.00, 0.00, 'P', '1', 'OP1942', 'Customer source inspection scheduled at final acceptance.'), + ('MO102071', 'SACLSH32', DATE('2026-08-31'), DATE('2026-09-15'), NULL, 192.00, 0.00, 'P', '1', 'OP1490', 'Qualification build supporting AS7510 lightning test article.'), + ('MO102072', 'CLPSL-08', DATE('2026-09-04'), DATE('2026-09-22'), NULL, 250.00, 0.00, 'P', '3', 'OP1113', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO102073', 'AW2010-24', DATE('2026-08-25'), DATE('2026-09-24'), NULL, 20.00, 0.00, 'P', '3', 'OP1402', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO102074', 'SALATCH1', DATE('2026-08-26'), DATE('2026-09-23'), NULL, 288.00, 0.00, 'P', '3', 'OP1402', 'Traveller reprinted after routing update; use rev 4 only.'), + ('MO102075', 'SALATCH1', DATE('2026-09-03'), DATE('2026-11-16'), NULL, 240.00, 0.00, 'P', '3', 'OP1536', 'Held for engineering disposition on tolerance deviation request.'), + ('MO102076', 'W991N-32', DATE('2026-08-25'), DATE('2026-10-26'), NULL, 72.00, 0.00, 'P', '2', 'OP1907', 'Anodize line at capacity - routed to outside processor.'), + ('MO102077', 'CLPTL-08', DATE('2026-09-04'), DATE('2026-10-23'), NULL, 50.00, 0.00, 'P', '3', 'OP1087', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO102078', 'AW979-24', DATE('2026-09-03'), DATE('2026-10-06'), NULL, 250.00, 0.00, 'P', '3', 'OP1654', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO102079', 'AW2010-32', DATE('2026-08-31'), DATE('2026-10-20'), NULL, 150.00, 0.00, 'P', '2', 'OP1698', 'Standard routing, no deviations. Release to LAX cell 4.'), + ('MO102080', 'P9400-12', DATE('2026-09-02'), DATE('2026-10-15'), NULL, 40.00, 0.00, 'P', '3', 'OP1698', 'Spares order for MIA depot replenishment.'), + ('MO102081', 'SASEALK16', DATE('2026-08-26'), DATE('2026-11-04'), NULL, 144.00, 0.00, 'P', '3', 'OP1820', 'Held for engineering disposition on tolerance deviation request.'), + ('MO102082', 'AW2010-24', DATE('2026-08-31'), DATE('2026-09-16'), NULL, 72.00, 0.00, 'P', '3', 'OP1733', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO102083', 'P9100-08', DATE('2026-08-31'), DATE('2026-09-14'), NULL, 72.00, 0.00, 'P', '1', 'OP1611', 'Standard routing, no deviations. Release to LAX cell 4.'), + ('MO102084', 'W991F-24', DATE('2026-08-26'), DATE('2026-09-21'), NULL, 200.00, 0.00, 'P', '2', 'OP1271', 'FAI required per AS9102 on this revision before shipment.'), + ('MO102085', 'SAISOTUB2', DATE('2026-09-04'), DATE('2026-11-17'), NULL, 300.00, 0.00, 'P', '2', 'OP1820', 'Mining channel order - ELP stock replenishment.'), + ('MO102086', 'P9600-16', DATE('2026-08-28'), DATE('2026-09-16'), NULL, 300.00, 0.00, 'P', '1', 'OP1402', 'Qualification build supporting AS7510 lightning test article.'), + ('MO102087', 'HOSE-08L', DATE('2026-09-08'), DATE('2026-09-14'), NULL, 12.00, 0.00, 'P', '3', 'OP1820', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO102088', 'W902-32', DATE('2026-08-31'), DATE('2026-11-11'), NULL, 50.00, 0.00, 'P', '2', 'OP1988', 'Rev B effectivity - verify seal kit callout before kitting.'), + ('MO102089', 'SACLSH32T', DATE('2026-09-02'), DATE('2026-09-29'), NULL, 180.00, 0.00, 'P', '2', 'OP1271', 'Long-lead titanium bar released early against forecast.'), + ('MO102090', 'W922N-16', DATE('2026-09-01'), DATE('2026-11-11'), NULL, 48.00, 0.00, 'P', '3', 'OP1448', 'Anodize line at capacity - routed to outside processor.'), + ('MO102091', 'AW2010-24', DATE('2026-09-03'), DATE('2026-11-18'), NULL, 20.00, 0.00, 'P', '3', 'OP1204', 'Qualification build supporting AS7510 lightning test article.'), + ('MO102092', 'CLPSTD-06', DATE('2026-09-07'), DATE('2026-11-24'), NULL, 96.00, 0.00, 'P', '2', 'OP1490', 'FAI required per AS9102 on this revision before shipment.'), + ('MO102093', 'W991F-24', DATE('2026-08-27'), DATE('2026-10-29'), NULL, 250.00, 0.00, 'P', '1', 'OP1698', 'Standard routing, no deviations. Release to LAX cell 4.'), + ('MO102094', 'W902-24', DATE('2026-08-28'), DATE('2026-09-14'), NULL, 96.00, 0.00, 'P', '2', 'OP1402', 'Customer source inspection scheduled at final acceptance.'), + ('MO102095', 'W902-16', DATE('2026-08-26'), DATE('2026-10-28'), NULL, 250.00, 0.00, 'P', '2', 'OP1578', 'Qualification build supporting AS7510 lightning test article.'), + ('MO102096', 'SASEALK32', DATE('2026-09-08'), DATE('2026-10-20'), NULL, 500.00, 0.00, 'P', '3', 'OP1907', 'Standard routing, no deviations. Release to LAX cell 4.'), + ('MO102097', 'SACUSHN06', DATE('2026-09-08'), DATE('2026-11-06'), NULL, 288.00, 0.00, 'P', '1', 'OP1654', 'Anodize line at capacity - routed to outside processor.'), + ('MO102098', 'W922N-16', DATE('2026-09-08'), DATE('2026-11-19'), NULL, 80.00, 0.00, 'P', '1', 'OP1156', 'Mining channel order - ELP stock replenishment.'), + ('MO102099', 'CLPTL-08', DATE('2026-09-02'), DATE('2026-11-16'), NULL, 36.00, 0.00, 'P', '2', 'OP1113', 'Standard routing, no deviations. Release to LAX cell 4.'), + ('MO102100', 'W922N-16', DATE('2026-08-25'), DATE('2026-11-23'), NULL, 40.00, 0.00, 'P', '1', 'OP1865', 'Customer source inspection scheduled at final acceptance.'); + +INSERT INTO MANUFACTURING_ORDERS (ORDER_ID, ITEM_ID, ORDER_DATE, EXPECTED_COMPLETION_DATE, ACTUAL_COMPLETION_DATE, QUANTITY_ORDERED, QUANTITY_SCRAPPED, STATUS, SHIFT_CODE, OPERATOR_ID, NOTES) VALUES + ('MO102101', 'SAISOTUB1', DATE('2026-08-26'), DATE('2026-11-16'), NULL, 600.00, 0.00, 'P', '2', 'OP1536', 'Standard routing, no deviations. Release to LAX cell 4.'), + ('MO102102', 'SAHTRHARN', DATE('2026-09-04'), DATE('2026-11-12'), NULL, 40.00, 0.00, 'P', '3', 'OP1988', 'Long-lead titanium bar released early against forecast.'), + ('MO102103', 'AW2100-32', DATE('2026-09-08'), DATE('2026-10-29'), NULL, 300.00, 0.00, 'P', '3', 'OP1942', 'Anodize line at capacity - routed to outside processor.'), + ('MO102104', 'W902-16', DATE('2026-08-25'), DATE('2026-11-06'), NULL, 300.00, 0.00, 'P', '1', 'OP1578', 'Spares order for MIA depot replenishment.'), + ('MO102105', 'SACLSH16', DATE('2026-09-01'), DATE('2026-10-15'), NULL, 160.00, 0.00, 'P', '3', 'OP1733', 'Customer source inspection scheduled at final acceptance.'), + ('MO102106', 'SAVTLI01', DATE('2026-09-02'), DATE('2026-10-16'), NULL, 80.00, 0.00, 'P', '2', 'OP1578', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO102107', 'SATHBDY32', DATE('2026-08-28'), DATE('2026-10-15'), NULL, 40.00, 0.00, 'P', '3', 'OP1271', 'Split across shifts 1 and 2 to protect the Friday shipment.'), + ('MO102108', 'CLPSL-08', DATE('2026-08-26'), DATE('2026-10-21'), NULL, 12.00, 0.00, 'P', '3', 'OP1907', 'Kit shortage: A286 hardware on backorder from Precision Fastener Group.'), + ('MO102109', 'AW2010-32', DATE('2026-09-04'), DATE('2026-11-12'), NULL, 24.00, 0.00, 'P', '3', 'OP1364', 'Customer AOG pull-in requested - expedite through NDT.'), + ('MO102110', 'W902-24', DATE('2026-09-04'), DATE('2026-11-03'), NULL, 25.00, 0.00, 'P', '2', 'OP1364', 'Standard routing, no deviations. Release to LAX cell 4.'), + ('MO102111', 'AW971-16', DATE('2026-08-28'), DATE('2026-11-09'), NULL, 72.00, 0.00, 'P', '3', 'OP1776', 'Dual-lot build; segregate serial ranges at pack out.'), + ('MO102112', 'W991-24', DATE('2026-08-25'), DATE('2026-09-24'), NULL, 60.00, 0.00, 'P', '2', 'OP1942', 'Dual-lot build; segregate serial ranges at pack out.'); + diff --git a/awdemo/sql/inventory.table.sql b/awdemo/sql/inventory.table.sql new file mode 100644 index 00000000..9281d4a7 --- /dev/null +++ b/awdemo/sql/inventory.table.sql @@ -0,0 +1,23 @@ +-- AdelWiggins demo dataset - INVENTORY balances by item and stocking location +CREATE OR REPLACE TABLE INVENTORY ( + ITEM_ID CHAR(10), + WH_CODE CHAR(3), + QTY_ON_HAND FOR COLUMN QTY_O00001 DECIMAL(10,2), + QTY_ON_ORDER FOR COLUMN QTY_O00002 DECIMAL(10,2), + REORDER_POINT FOR COLUMN REORD00001 DECIMAL(10,2), + LAST_RECEIPT_DATE FOR COLUMN LAST_00001 DATE, + LAST_ISSUE_DATE FOR COLUMN LAST_00002 DATE, + PRIMARY KEY (ITEM_ID, WH_CODE), + CONSTRAINT INVENTORY_ITEM_FK FOREIGN KEY (ITEM_ID) REFERENCES ITEM (ITEM_ID), + CONSTRAINT INVENTORY_WH_FK FOREIGN KEY (WH_CODE) REFERENCES WAREHOUSE (WH_CODE) +); + +LABEL ON COLUMN INVENTORY ( + ITEM_ID IS 'Item ID', + WH_CODE IS 'Warehouse Code', + QTY_ON_HAND IS 'Quantity On Hand', + QTY_ON_ORDER IS 'Quantity On Order', + REORDER_POINT IS 'Reorder Point', + LAST_RECEIPT_DATE IS 'Last Receipt Date', + LAST_ISSUE_DATE IS 'Last Issue Date' +); diff --git a/awdemo/sql/item.table.sql b/awdemo/sql/item.table.sql new file mode 100644 index 00000000..348483d3 --- /dev/null +++ b/awdemo/sql/item.table.sql @@ -0,0 +1,22 @@ +-- AdelWiggins demo dataset - ITEM master +-- Schema is a faithful clone of library BOMSAMPLE so that any program written +-- against BOMSAMPLE runs unchanged against this library. System column names +-- are pinned with FOR COLUMN so the short names match BOMSAMPLE exactly. +CREATE OR REPLACE TABLE ITEM ( + ITEM_ID CHAR(10), + ITEM_DESC VARCHAR(50), + ITEM_TYPE CHAR(1) NOT NULL, + UNIT_OF_MEASURE FOR COLUMN UNIT_00001 CHAR(3), + COST DECIMAL(10,2), + ACTIVE_FLAG FOR COLUMN ACTIV00001 CHAR(1) DEFAULT 'Y', + PRIMARY KEY (ITEM_ID) +); + +LABEL ON COLUMN ITEM ( + ITEM_ID IS 'Item Code', + ITEM_DESC IS 'Item Description', + ITEM_TYPE IS 'P=Purchased, M=Manufactured', + UNIT_OF_MEASURE IS 'Unit of Measure', + COST IS 'Unit Cost', + ACTIVE_FLAG IS 'Is Active (Y/N)' +); diff --git a/awdemo/sql/ixbomdbom.index.sql b/awdemo/sql/ixbomdbom.index.sql new file mode 100644 index 00000000..d56ec411 --- /dev/null +++ b/awdemo/sql/ixbomdbom.index.sql @@ -0,0 +1,2 @@ +CREATE INDEX IX_BOM_DETAIL_BY_BOMID FOR SYSTEM NAME IX_BO00003 + ON BOM_DETAIL (BOM_ID); diff --git a/awdemo/sql/ixbomdcmp.index.sql b/awdemo/sql/ixbomdcmp.index.sql new file mode 100644 index 00000000..dbaf88cb --- /dev/null +++ b/awdemo/sql/ixbomdcmp.index.sql @@ -0,0 +1,3 @@ +-- System name pinned to match BOMSAMPLE so short-name references still resolve. +CREATE INDEX IX_BOM_DETAIL_BY_COMPONENT FOR SYSTEM NAME IX_BO00001 + ON BOM_DETAIL (COMPONENT_ITEM_ID); diff --git a/awdemo/sql/ixbomhpar.index.sql b/awdemo/sql/ixbomhpar.index.sql new file mode 100644 index 00000000..9890752e --- /dev/null +++ b/awdemo/sql/ixbomhpar.index.sql @@ -0,0 +1,2 @@ +CREATE INDEX IX_BOM_HEADER_BY_PARENT FOR SYSTEM NAME IX_BO00002 + ON BOM_HEADER (PARENT_ITEM_ID); diff --git a/awdemo/sql/ixitemtype.index.sql b/awdemo/sql/ixitemtype.index.sql new file mode 100644 index 00000000..a7de2d68 --- /dev/null +++ b/awdemo/sql/ixitemtype.index.sql @@ -0,0 +1,2 @@ +CREATE INDEX IX_ITEM_TYPE FOR SYSTEM NAME IX_IT00001 + ON ITEM (ITEM_TYPE); diff --git a/awdemo/sql/ixmfodate.index.sql b/awdemo/sql/ixmfodate.index.sql new file mode 100644 index 00000000..9c88b29c --- /dev/null +++ b/awdemo/sql/ixmfodate.index.sql @@ -0,0 +1,2 @@ +CREATE INDEX IX_MFG_ORDERS_DATE FOR SYSTEM NAME IX_MF00002 + ON MANUFACTURING_ORDERS (ORDER_DATE); diff --git a/awdemo/sql/ixmfoitem.index.sql b/awdemo/sql/ixmfoitem.index.sql new file mode 100644 index 00000000..7ac9e177 --- /dev/null +++ b/awdemo/sql/ixmfoitem.index.sql @@ -0,0 +1,2 @@ +CREATE INDEX IX_MFG_ORDERS_ITEM FOR SYSTEM NAME IX_MF00001 + ON MANUFACTURING_ORDERS (ITEM_ID); diff --git a/awdemo/sql/ixmfostat.index.sql b/awdemo/sql/ixmfostat.index.sql new file mode 100644 index 00000000..6dd50aaa --- /dev/null +++ b/awdemo/sql/ixmfostat.index.sql @@ -0,0 +1,2 @@ +CREATE INDEX IX_MFG_ORDERS_STATUS FOR SYSTEM NAME IX_MF00003 + ON MANUFACTURING_ORDERS (STATUS); diff --git a/awdemo/sql/ixsuppitem.index.sql b/awdemo/sql/ixsuppitem.index.sql new file mode 100644 index 00000000..490ec2ae --- /dev/null +++ b/awdemo/sql/ixsuppitem.index.sql @@ -0,0 +1,2 @@ +CREATE INDEX IX_SUPPLIER_ITEM_BY_ITEM FOR SYSTEM NAME IX_SU00002 + ON SUPPLIER_ITEM (ITEM_ID); diff --git a/awdemo/sql/ixsuppname.index.sql b/awdemo/sql/ixsuppname.index.sql new file mode 100644 index 00000000..962cc687 --- /dev/null +++ b/awdemo/sql/ixsuppname.index.sql @@ -0,0 +1,2 @@ +CREATE INDEX IX_SUPPLIER_NAME FOR SYSTEM NAME IX_SU00001 + ON SUPPLIER (SUPPLIER_NAME); diff --git a/awdemo/sql/mfgorders.table.sql b/awdemo/sql/mfgorders.table.sql new file mode 100644 index 00000000..82daa478 --- /dev/null +++ b/awdemo/sql/mfgorders.table.sql @@ -0,0 +1,30 @@ +-- AdelWiggins demo dataset - MANUFACTURING_ORDERS (shop orders) +CREATE OR REPLACE TABLE MANUFACTURING_ORDERS FOR SYSTEM NAME MANUF00001 ( + ORDER_ID CHAR(10), + ITEM_ID CHAR(10) NOT NULL, + ORDER_DATE DATE NOT NULL, + EXPECTED_COMPLETION_DATE FOR COLUMN EXPEC00001 DATE DEFAULT NULL, + ACTUAL_COMPLETION_DATE FOR COLUMN ACTUA00001 DATE DEFAULT NULL, + QUANTITY_ORDERED FOR COLUMN QUANT00001 DECIMAL(10,2), + QUANTITY_SCRAPPED FOR COLUMN QUANT00002 DECIMAL(10,2), + STATUS CHAR(1), + SHIFT_CODE CHAR(1), + OPERATOR_ID FOR COLUMN OPERA00001 CHAR(6), + NOTES VARCHAR(200), + PRIMARY KEY (ORDER_ID), + CONSTRAINT MFG_ORDERS_ITEM_FK FOREIGN KEY (ITEM_ID) REFERENCES ITEM (ITEM_ID) +); + +LABEL ON COLUMN MANUFACTURING_ORDERS ( + ORDER_ID IS 'Manufacturing Order ID', + ITEM_ID IS 'Manufactured Item', + ORDER_DATE IS 'Order Date', + EXPECTED_COMPLETION_DATE IS 'Expected Completion Date', + ACTUAL_COMPLETION_DATE IS 'Actual Completion Date', + QUANTITY_ORDERED IS 'Quantity Ordered', + QUANTITY_SCRAPPED IS 'Quantity Scrapped', + STATUS IS 'Order Status (P/R/C)', + SHIFT_CODE IS 'Shift Code', + OPERATOR_ID IS 'Operator ID', + NOTES IS 'Order Notes' +); diff --git a/awdemo/sql/supplier.table.sql b/awdemo/sql/supplier.table.sql new file mode 100644 index 00000000..2254ed92 --- /dev/null +++ b/awdemo/sql/supplier.table.sql @@ -0,0 +1,19 @@ +-- AdelWiggins demo dataset - SUPPLIER master +CREATE OR REPLACE TABLE SUPPLIER ( + SUPPLIER_ID FOR COLUMN SUPPL00001 CHAR(6), + SUPPLIER_NAME FOR COLUMN SUPPL00002 VARCHAR(50), + CONTACT_NAME FOR COLUMN CONTA00001 VARCHAR(50), + PHONE VARCHAR(20), + EMAIL VARCHAR(50), + ACTIVE_FLAG FOR COLUMN ACTIV00001 CHAR(1) DEFAULT 'Y', + PRIMARY KEY (SUPPLIER_ID) +); + +LABEL ON COLUMN SUPPLIER ( + SUPPLIER_ID IS 'Supplier ID', + SUPPLIER_NAME IS 'Supplier Name', + CONTACT_NAME IS 'Contact Name', + PHONE IS 'Phone Number', + EMAIL IS 'Email Address', + ACTIVE_FLAG IS 'Is Active (Y/N)' +); diff --git a/awdemo/sql/supplitem.table.sql b/awdemo/sql/supplitem.table.sql new file mode 100644 index 00000000..13c8a494 --- /dev/null +++ b/awdemo/sql/supplitem.table.sql @@ -0,0 +1,19 @@ +-- AdelWiggins demo dataset - SUPPLIER_ITEM (approved source list) +CREATE OR REPLACE TABLE SUPPLIER_ITEM FOR SYSTEM NAME SUPPL00001 ( + SUPPLIER_ID FOR COLUMN SUPPL00001 CHAR(6), + ITEM_ID CHAR(10), + LEAD_TIME_DAYS FOR COLUMN LEAD_00001 INTEGER, + PURCHASE_COST FOR COLUMN PURCH00001 DECIMAL(10,2), + PRIMARY_SUPPLIER_FLAG FOR COLUMN PRIMA00001 CHAR(1) DEFAULT 'N', + PRIMARY KEY (SUPPLIER_ID, ITEM_ID), + CONSTRAINT SUPPLIER_ITEM_SUPP_FK FOREIGN KEY (SUPPLIER_ID) REFERENCES SUPPLIER (SUPPLIER_ID), + CONSTRAINT SUPPLIER_ITEM_ITEM_FK FOREIGN KEY (ITEM_ID) REFERENCES ITEM (ITEM_ID) +); + +LABEL ON COLUMN SUPPLIER_ITEM ( + SUPPLIER_ID IS 'Supplier ID', + ITEM_ID IS 'Item ID', + LEAD_TIME_DAYS IS 'Lead Time (Days)', + PURCHASE_COST IS 'Purchase Cost', + PRIMARY_SUPPLIER_FLAG IS 'Primary Supplier (Y/N)' +); diff --git a/awdemo/sql/warehouse.table.sql b/awdemo/sql/warehouse.table.sql new file mode 100644 index 00000000..1887f9de --- /dev/null +++ b/awdemo/sql/warehouse.table.sql @@ -0,0 +1,15 @@ +-- AdelWiggins demo dataset - WAREHOUSE / stocking location master +CREATE OR REPLACE TABLE WAREHOUSE ( + WH_CODE CHAR(3), + WH_NAME VARCHAR(40), + LOCATION VARCHAR(100), + ACTIVE_FLAG FOR COLUMN ACTIV00001 CHAR(1) DEFAULT 'Y', + PRIMARY KEY (WH_CODE) +); + +LABEL ON COLUMN WAREHOUSE ( + WH_CODE IS 'Warehouse Code', + WH_NAME IS 'Warehouse Name', + LOCATION IS 'Warehouse Location', + ACTIVE_FLAG IS 'Active (Y/N)' +); diff --git a/awdemo/tools/gen-awdemo-data.py b/awdemo/tools/gen-awdemo-data.py new file mode 100644 index 00000000..96b879a0 --- /dev/null +++ b/awdemo/tools/gen-awdemo-data.py @@ -0,0 +1,831 @@ +#!/usr/bin/env python3 +"""Generate the AdelWiggins (AWDEMO) demo dataset as SQL INSERT scripts. + +The dataset mirrors the shape of library BOMSAMPLE but is populated with +AdelWiggins Group content: aerospace fluid-transport couplings, quick +disconnects, dielectric isolators, freeze-protection heaters, Adel clamps +and Wiggins mining fast-fuelling products. + +Everything is deterministic (fixed RNG seed), so regenerating produces an +identical dataset. Table names in the emitted SQL are unqualified; the +loader script qualifies them with the target library. + + python3 awdemo/tools/gen-awdemo-data.py [output-dir] +""" + +import datetime as dt +import os +import random +import sys + +SEED = 20260908 + +# The dataset is anchored to a run date rather than a constant, so a demo +# always shows a live shop floor: a year of closed history behind it, work in +# process now, and a forward backlog. Pinning the anchor made the data go +# stale -- at +60 days every open order was overdue and the backlog was empty. +# +# Override with --as-of YYYY-MM-DD (or $AWDEMO_AS_OF) to reproduce an old +# snapshot. The RNG seed is fixed either way, so content is deterministic for +# a given anchor date; only the dates move. +_as_of = os.environ.get("AWDEMO_AS_OF") +_args = [] +_argv = sys.argv[1:] +while _argv: + a = _argv.pop(0) + if a == "--as-of": + _as_of = _argv.pop(0) + elif a.startswith("--as-of="): + _as_of = a.split("=", 1)[1] + else: + _args.append(a) +TODAY = dt.date.fromisoformat(_as_of) if _as_of else dt.date.today() + +OUT = _args[0] if _args else os.path.join( + os.path.dirname(os.path.abspath(__file__)), "..", "sql", "data") + +rng = random.Random(SEED) + + +def add_workdays(day, n): + """Shift `day` by n working days, skipping Saturday and Sunday.""" + step = 1 if n >= 0 else -1 + remaining = abs(n) + while remaining: + day += dt.timedelta(days=step) + if day.weekday() < 5: + remaining -= 1 + return day + + +def to_workday(day): + """Nudge a date off a weekend to the nearest working day.""" + if day.weekday() == 5: + return day - dt.timedelta(days=1) + if day.weekday() == 6: + return day + dt.timedelta(days=1) + return day + +# -------------------------------------------------------------------------- +# Warehouses +# -------------------------------------------------------------------------- +WAREHOUSES = [ + ("LAX", "Los Angeles Main Plant", "Los Angeles, CA - AS9100D machining and assembly", "Y"), + ("VAL", "Valencia Machining Center", "Valencia, CA - CNC detail parts and finishing", "Y"), + ("HUN", "Huntington Operations", "Huntington, WV - clamp fabrication and moulding", "Y"), + ("MIA", "Aftermarket Spares Depot", "Miami, FL - MRO and AOG spares distribution", "Y"), + ("ELP", "Wiggins Mining Distribution", "El Paso, TX - mining fast-fuel product centre", "Y"), +] + +# -------------------------------------------------------------------------- +# Suppliers +# -------------------------------------------------------------------------- +SUPPLIERS = [ + ("AWS001", "Pacific Aerospace Alloys", "Dana Whitfield", "310-555-0142", "dwhitfield@pacaeroalloys.com", "Y"), + ("AWS002", "Meridian CRES Products", "Luis Obregon", "562-555-0188", "lobregon@meridiancres.com", "Y"), + ("AWS003", "Titan Bar & Billet Co.", "Priya Raman", "714-555-0113", "praman@titanbarbillet.com", "Y"), + ("AWS004", "Elastomer Dynamics Inc.", "Corey Nakamura", "323-555-0177", "cnakamura@elastomerdyn.com", "Y"), + ("AWS005", "Precision Fastener Group", "Marta Delgado", "818-555-0126", "mdelgado@precisionfast.com", "Y"), + ("AWS006", "Coastal Anodizing & Finishing","Ray Kowalski", "562-555-0209", "rkowalski@coastalanodize.com", "Y"), + ("AWS007", "ThermElectric Components LLC", "Ingrid Sorensen", "626-555-0154", "isorensen@thermelectric.com", "Y"), + ("AWS008", "Composite Tube Technologies", "Aaron Petrosian", "949-555-0198", "apetrosian@comptubetech.com", "Y"), + ("AWS009", "SealTech Polymers", "Yolanda Briggs", "909-555-0165", "ybriggs@sealtechpoly.com", "Y"), + ("AWS010", "Western Spring & Wire", "Devon Ashby", "661-555-0131", "dashby@westernspringwire.com", "Y"), + ("AWS011", "Aero Label & Marking Co.", "Suzanne Vogt", "213-555-0172", "svogt@aerolabelmark.com", "Y"), + ("AWS012", "Summit Packaging Systems", "Hector Alanis", "310-555-0119", "halanis@summitpackaging.com", "Y"), + ("AWS013", "Redline Metal Treating", "Gordon Meeks", "562-555-0244", "gmeeks@redlinemetaltreat.com", "N"), +] + +# -------------------------------------------------------------------------- +# Item master: (item_id, description, type, uom, cost, active) +# -------------------------------------------------------------------------- +ITEMS = [ + # ---- Purchased raw material: aluminium ------------------------------- + ("AL2024BAR", "2024-T351 Aluminum Bar Stock 2.00 in", "P", "LB", 8.75, "Y"), + ("AL2024SHT", "2024-T3 Aluminum Sheet .050 in", "P", "SF", 6.40, "Y"), + ("AL2024STR", "2024-T3 Aluminum Strip .032 x 1.00 in", "P", "FT", 1.85, "Y"), + ("AL6061BAR", "6061-T6 Aluminum Bar Stock 1.50 in", "P", "LB", 5.20, "Y"), + ("AL7075BAR", "7075-T73 Aluminum Bar Stock 2.50 in", "P", "LB", 11.30, "Y"), + # ---- Purchased raw material: CRES / steel ---------------------------- + ("CR304TUB", "304 CRES Tube 1.00 OD x .035 Wall", "P", "FT", 9.25, "Y"), + ("CR316WIR", "316 CRES Lockwire .032 in", "P", "FT", 0.42, "Y"), + ("CR321BAR", "321 CRES Bar Stock 1.25 in", "P", "LB", 12.40, "Y"), + ("CR321SHT", "321 CRES Sheet .025 in", "P", "SF", 14.60, "Y"), + ("CR155BAR", "15-5 PH CRES Bar Stock 1.00 in", "P", "LB", 18.90, "Y"), + ("CRA286BAR", "A286 Alloy Bar Stock .750 in", "P", "LB", 22.80, "Y"), + # ---- Purchased raw material: titanium -------------------------------- + ("TI64BAR", "Ti-6Al-4V Bar Stock 1.00 in", "P", "LB", 38.50, "Y"), + ("TI64SHT", "Ti-6Al-4V Sheet .040 in", "P", "SF", 62.00, "Y"), + ("TICP2TUB", "CP Grade 2 Titanium Tube .750 OD", "P", "FT", 44.75, "Y"), + # ---- Purchased elastomers and seals ---------------------------------- + ("ELSIL60", "Silicone Cushion Stock 60 Duro Sheet", "P", "SF", 9.80, "Y"), + ("ELFSIL70", "Fluorosilicone Cushion Stock 70 Duro", "P", "SF", 16.50, "Y"), + ("ELPTFESH", "PTFE Cushion Sheet .062 in", "P", "SF", 21.40, "Y"), + ("ORFS908", "Fluorosilicone O-Ring MS29513-908", "P", "EA", 1.45, "Y"), + ("ORFS912", "Fluorosilicone O-Ring MS29513-912", "P", "EA", 1.72, "Y"), + ("ORVT916", "Fluorocarbon O-Ring MS28775-916", "P", "EA", 1.28, "Y"), + ("ORVT924", "Fluorocarbon O-Ring MS28775-924", "P", "EA", 1.96, "Y"), + ("ORSIL932", "Silicone O-Ring MS9021-932", "P", "EA", 2.15, "Y"), + ("ORNBR908", "Nitrile O-Ring MS29513-908 Superseded", "P", "EA", 0.95, "N"), + ("SLPTFEBU", "PTFE Backup Ring Set", "P", "EA", 0.88, "Y"), + ("SLGRAFOL", "Graphite Foil High-Temp Seal Ring", "P", "EA", 4.35, "Y"), + # ---- Purchased hardware ---------------------------------------------- + ("BLTA28610", "A286 Hex Bolt .250-28 x 1.00 in", "P", "EA", 2.35, "Y"), + ("BLTA28612", "A286 Hex Bolt .250-28 x 1.25 in", "P", "EA", 2.55, "Y"), + ("NUTA286SL", "A286 Self-Locking Nut .250-28", "P", "EA", 1.15, "Y"), + ("SCRCAP832", "CRES Socket Cap Screw 8-32 x .500", "P", "EA", 0.34, "Y"), + ("WSHCRE025", "CRES Flat Washer .250 in", "P", "EA", 0.09, "Y"), + ("PINSHR188", "CRES Shear Pin .188 in Frangible", "P", "EA", 3.60, "Y"), + ("PINROLL12", "CRES Roll Pin .125 x .750 in", "P", "EA", 0.22, "Y"), + ("RIVAL44", "Aluminum Blind Rivet 1/8 x 1/4", "P", "EA", 0.11, "Y"), + ("SPRCOMP01", "CRES Compression Spring .500 OD", "P", "EA", 1.65, "Y"), + ("SPRTORS02", "CRES Torsion Spring Latch", "P", "EA", 2.10, "Y"), + ("RETRING18", "CRES Retaining Ring .188 in", "P", "EA", 0.28, "Y"), + ("JAMNUT150", "Aluminum Jam Nut 1.500-18", "P", "EA", 4.85, "Y"), + # ---- Purchased heater electrical ------------------------------------- + ("HTFOIL01", "Etched Foil Heating Element 22 Watt", "P", "EA", 27.40, "Y"), + ("HTFOIL02", "Etched Foil Heating Element 45 Watt", "P", "EA", 34.90, "Y"), + ("HTTSTAT1", "Thermostatic Control Switch 120F", "P", "EA", 18.25, "Y"), + ("HTTCO160", "Thermal Cut-Off Device 160F", "P", "EA", 12.60, "Y"), + ("HTLEAD18", "PTFE Lead Wire 18 AWG", "P", "FT", 1.35, "Y"), + ("HTCONN01", "Environmental Circular Connector 2-Pin", "P", "EA", 22.75, "Y"), + ("HTEPOXY1", "Structural Epoxy Compound Heater Grade", "P", "LB", 46.00, "Y"), + ("HTSILRUB", "Fire-Retardant Silicone Rubber Sheet", "P", "SF", 13.20, "Y"), + ("HTGLSCLO", "Fiberglass Insulating Cloth", "P", "SY", 7.65, "Y"), + # ---- Purchased composite --------------------------------------------- + ("CMPTUBE05", "Fiberglass/Epoxy Dielectric Tube 0.50 in", "P", "FT", 41.25, "Y"), + ("CMPTUBE1", "Fiberglass/Epoxy Dielectric Tube 1.00 in", "P", "FT", 58.00, "Y"), + ("CMPTUBE2", "Fiberglass/Epoxy Dielectric Tube 2.00 in", "P", "FT", 84.50, "Y"), + ("CMPADHES", "Aerospace Structural Adhesive Film", "P", "SF", 19.80, "Y"), + # ---- Purchased hose -------------------------------------------------- + ("HSPTFE04", "PTFE Convoluted Hose Core -04", "P", "FT", 16.40, "Y"), + ("HSPTFE08", "PTFE Smooth Bore Hose Core -08", "P", "FT", 24.10, "Y"), + ("HSBRAID1", "CRES Wire Braid Reinforcement", "P", "FT", 8.95, "Y"), + ("HSFITAN4", "AN Straight Flare End Fitting -04", "P", "EA", 14.30, "Y"), + ("HSFIT908", "AN 90 Degree End Fitting -08", "P", "EA", 26.75, "Y"), + # ---- Purchased processes and finishes -------------------------------- + ("FNANODIZ", "Sulfuric Anodize per MIL-A-8625", "P", "EA", 3.20, "Y"), + ("FNCHEMFL", "Chemical Film per MIL-DTL-5541", "P", "EA", 1.90, "Y"), + ("FNPASSIV", "CRES Passivation per AMS2700", "P", "EA", 1.40, "Y"), + ("FNPRIMER", "Epoxy Primer per MIL-PRF-23377", "P", "PT", 38.50, "Y"), + ("FNPAINT1", "Polyurethane Topcoat per MIL-PRF-85285", "P", "QT", 44.00, "Y"), + ("FNDRYLUB", "Dry Film Lubricant per AS5272", "P", "PT", 52.00, "Y"), + ("FNNDTFPI", "Fluorescent Penetrant Inspection Service", "P", "EA", 6.75, "Y"), + # ---- Purchased labels and packaging ---------------------------------- + ("LBLNAME1", "Aerospace Nameplate Etched CRES", "P", "EA", 2.85, "Y"), + ("LBLPART1", "Part Marking Label Polyimide", "P", "EA", 0.42, "Y"), + ("PKGESDBG", "ESD Barrier Bag Heat Sealable", "P", "EA", 0.55, "Y"), + ("PKGCART1", "Corrugated Shipping Carton 12x12x6", "P", "EA", 1.30, "Y"), + ("PKGDESIC", "Desiccant Pack 1 Unit", "P", "EA", 0.28, "Y"), + ("PKGFOAM1", "Die-Cut Foam Insert", "P", "EA", 1.75, "Y"), + + # ---- Manufactured sub-assemblies ------------------------------------- + ("SACLSH16", "Clamshell Half Machined -16 Aluminum", "M", "EA", 22.40, "Y"), + ("SACLSH24", "Clamshell Half Machined -24 Aluminum", "M", "EA", 28.90, "Y"), + ("SACLSH32", "Clamshell Half Machined -32 Aluminum", "M", "EA", 35.60, "Y"), + ("SACLSH24C", "Clamshell Half Machined -24 CRES", "M", "EA", 46.20, "Y"), + ("SACLSH32T", "Clamshell Half Machined -32 Titanium", "M", "EA", 118.40, "Y"), + ("SATHBDY16", "Threaded Coupling Body Machined -16", "M", "EA", 24.80, "Y"), + ("SATHBDY24", "Threaded Coupling Body Machined -24", "M", "EA", 31.20, "Y"), + ("SATHBDY32", "Threaded Coupling Body Machined -32", "M", "EA", 39.60, "Y"), + ("SATHRDNUT", "Threaded Coupling Nut Machined Aluminum", "M", "EA", 19.30, "Y"), + ("SALATCH1", "Latch and Hook Assembly Single Fault", "M", "EA", 31.75, "Y"), + ("SAVTLI01", "Visual Tactile Latch Indicator Assembly", "M", "EA", 17.90, "Y"), + ("SASEALK16", "Coupling Seal Kit -16", "M", "EA", 6.40, "Y"), + ("SASEALK24", "Coupling Seal Kit -24", "M", "EA", 8.15, "Y"), + ("SASEALK32", "Coupling Seal Kit -32", "M", "EA", 9.85, "Y"), + ("SABODY200", "200 Series QD Body Machined", "M", "EA", 41.50, "Y"), + ("SABODY600", "6000 Series QD Body Machined", "M", "EA", 47.80, "Y"), + ("SAPOPPET1", "QD Poppet and Spring Subassembly", "M", "EA", 16.25, "Y"), + ("SASLEEVE1", "QD Locking Sleeve Machined", "M", "EA", 13.70, "Y"), + ("SAHTRCORE", "Heater Core Assembly Foil and Substrate", "M", "EA", 63.20, "Y"), + ("SAHTRHARN", "Heater Wire Harness Assembly", "M", "EA", 38.45, "Y"), + ("SAISOTUB1", "Isolator Tube Subassembly 1.00 in", "M", "EA", 128.60, "Y"), + ("SAISOTUB2", "Isolator Tube Subassembly 2.00 in", "M", "EA", 186.40, "Y"), + ("SAISOEND1", "Isolator End Fitting Machined Aluminum", "M", "EA", 54.30, "Y"), + ("SABANDAL6", "Clamp Band Formed 2024 Aluminum -06", "M", "EA", 1.95, "Y"), + ("SABANDCR8", "Clamp Band Formed 321 CRES -08", "M", "EA", 3.40, "Y"), + ("SACUSHN06", "Clamp Cushion Molded Silicone -06", "M", "EA", 1.20, "Y"), + ("SACUSHNW8", "Clamp Cushion W-Shape Fluorosilicone -08", "M", "EA", 2.65, "Y"), + ("SAWEARSH1", "Wear Sleeve Shell Half High Temp", "M", "EA", 4.80, "Y"), + ("SAHOSEAS8", "Hose Core and Braid Subassembly -08", "M", "EA", 57.90, "Y"), + + # ---- Manufactured ferrules and fittings ------------------------------ + ("W902-16", "W902 Swage Ferrule -16 Aluminum", "M", "EA", 18.60, "Y"), + ("W902-24", "W902 Swage Ferrule -24 Aluminum", "M", "EA", 23.75, "Y"), + ("W902-32", "W902 Swage Ferrule -32 CRES", "M", "EA", 41.20, "Y"), + ("F63052-24", "63052 Variable Cavity Swage Ferrule -24", "M", "EA", 27.35, "Y"), + ("F63052-32", "63052 Swage Ferrule -32 Titanium", "M", "EA", 96.40, "Y"), + ("W922N-16", "W922N Bulkhead Fitting -16 Aluminum", "M", "EA", 86.40, "Y"), + + # ---- Finished goods: flexible clamshell couplings -------------------- + ("AW2010-16", "AW2010HP Clamshell Coupling -16 Aluminum", "M", "EA", 184.50, "Y"), + ("AW2010-24", "AW2010HP Clamshell Coupling -24 Aluminum", "M", "EA", 226.80, "Y"), + ("AW2010-32", "AW2010HP Clamshell Coupling -32 Titanium", "M", "EA", 512.40, "Y"), + ("AW2091-24", "AW2091N Clamshell Coupling -24 Aluminum", "M", "EA", 241.60, "Y"), + ("AW2100-24", "AW2100 Clamshell Coupling -24 AS7510", "M", "EA", 318.75, "Y"), + ("AW2100-32", "AW2100 Clamshell Coupling -32 AS7510", "M", "EA", 386.20, "Y"), + ("W991-16", "W991 Flexible Clamshell Coupling -16", "M", "EA", 162.30, "Y"), + ("W991-24", "W991 Flexible Clamshell Coupling -24", "M", "EA", 198.45, "Y"), + ("W991N-32", "W991N Flexible Clamshell Coupling -32", "M", "EA", 274.90, "Y"), + ("W991F-24", "W991F High Temp Clamshell Coupling -24", "M", "EA", 329.50, "Y"), + ("G620-32", "G620 Clamshell Tube Connector -32", "M", "EA", 355.80, "Y"), + # ---- Finished goods: flexible threaded and rigid couplings ----------- + ("AW971-16", "AW971 Flexible Threaded Coupling -16", "M", "EA", 147.20, "Y"), + ("AW971-24", "AW971 Flexible Threaded Coupling -24", "M", "EA", 176.90, "Y"), + ("W700-32", "W700 Flexible Threaded Coupling -32", "M", "EA", 221.40, "Y"), + ("C3600-16", "3600 Series Flexible Threaded Coupling -16", "M", "EA", 158.75, "Y"), + ("C6300-24", "6300 Series Flexible Threaded Coupling -24", "M", "EA", 189.30, "Y"), + ("AW979-24", "AW979 Rigid Coupling -24 Self-Locking", "M", "EA", 132.60, "Y"), + ("C8300-32", "8300 Series Rigid Coupling -32 AS1730", "M", "EA", 151.85, "Y"), + # ---- Finished goods: quick disconnects, valves, hoses ---------------- + ("QD200-08", "200 Series Quick Disconnect -08 Aluminum", "M", "EA", 94.70, "Y"), + ("QD200-16", "200 Series Quick Disconnect -16 CRES", "M", "EA", 168.40, "Y"), + ("QD200-04", "200 Series Quick Disconnect -04 Obsolete", "M", "EA", 88.20, "N"), + ("QD6000-12", "6000 Series Quick Disconnect -12", "M", "EA", 121.35, "Y"), + ("P9100-08", "Preece 9100 Blind Mate QD -08", "M", "EA", 138.90, "Y"), + ("P9400-12", "Preece 9400 Series Quick Disconnect -12", "M", "EA", 164.25, "Y"), + ("P9600-16", "Preece 9600 Series Quick Disconnect -16", "M", "EA", 192.80, "Y"), + ("PVCHK-08", "Preece Check Valve -08", "M", "EA", 108.50, "Y"), + ("PVFUSE-12", "Preece Fuse Valve -12", "M", "EA", 143.70, "Y"), + ("FRANG-12", "Frangible Coupling -12 Stainless Steel", "M", "EA", 212.40, "Y"), + ("HOSE-04S", "Hose Assembly -04 Straight AN Ends", "M", "EA", 118.65, "Y"), + ("HOSE-08L", "Hose Assembly -08 90 Degree End", "M", "EA", 176.20, "Y"), + # ---- Finished goods: dielectric isolators ---------------------------- + ("ISOF-1000", "Fuel Isolator 1.00 in Dielectric Inline", "M", "EA", 1245.00, "Y"), + ("ISOF-2000", "Fuel Isolator 2.00 in Dielectric Inline", "M", "EA", 1680.50, "Y"), + ("ISOH-0500", "Hydraulic Isolator 0.50 in Bulkhead", "M", "EA", 1420.75, "Y"), + # ---- Finished goods: heaters ----------------------------------------- + ("HTRRB-024", "Ribbon Heater 24 in Thermostatic", "M", "EA", 386.40, "Y"), + ("HTRRB-012", "Ribbon Heater 12 in Superseded by 024", "M", "EA", 341.00, "N"), + ("HTRBL-112", "Heater Blanket 12 in Duct Freeze Protect", "M", "EA", 452.90, "Y"), + ("HTRGK-HG1", "HG Series Gasket Heater Lever Lock", "M", "EA", 268.35, "Y"), + ("HTRCT-22W", "Cartridge Heater 22 Watt EB Welded", "M", "EA", 214.60, "Y"), + ("HTRCF-201", "Heater Cuff and Manifold Assembly", "M", "EA", 512.80, "Y"), + ("HTRHS-06", "Heated Hose Assembly -06 Potable Water", "M", "EA", 478.25, "Y"), + # ---- Finished goods: Adel clamps ------------------------------------- + ("CLPSTD-06", "Standard Loop Clamp -06 Aluminum Cushion", "M", "EA", 3.85, "Y"), + ("CLPSTD-04", "Standard Loop Clamp -04 Obsolete Cushion", "M", "EA", 3.40, "N"), + ("CLPTL-08", "Top-Locking Loop Clamp -08 2024 Aluminum", "M", "EA", 6.40, "Y"), + ("CLPSL-08", "Side Locking Loop Clamp -08 321 CRES", "M", "EA", 8.95, "Y"), + ("CLPBLK-12", "Block Clamp -12 Double Mount 304 CRES", "M", "EA", 16.70, "Y"), + ("CLPWS-10", "Wear Sleeve Clamp -10 High Temperature", "M", "EA", 12.30, "Y"), + ("CLPSPC-06", "Aircraft Specialty Clamp -06 W-Cushion", "M", "EA", 9.55, "Y"), + ("GRMAC-04", "Aircraft Grommet -04 Panel Mount", "M", "EA", 2.10, "Y"), + # ---- Finished goods: Wiggins mining products ------------------------- + ("WMFFN-100", "Diesel Fast Fueling Nozzle 1200 LPM", "M", "EA", 1875.00, "Y"), + ("WMFFR-100", "Diesel Fast Fueling Receiver 1.5 in", "M", "EA", 1240.00, "Y"), + ("WMDEF-050", "DEF Automatic Fill System Heated", "M", "EA", 2340.00, "Y"), + ("WMLQD-075", "Lubrication Quick Disconnect .75 Dry Break", "M", "EA", 186.50, "Y"), +] + +# -------------------------------------------------------------------------- +# Product structures. parent -> [(component, qty), ...] +# Sub-assemblies are themselves parents, giving genuine multi-level BOMs. +# -------------------------------------------------------------------------- +STRUCT = { + # --- level 3: machined details and kits ------------------------------- + "SACLSH16": [("AL2024BAR", 0.85), ("FNCHEMFL", 1), ("FNNDTFPI", 1)], + "SACLSH24": [("AL2024BAR", 1.35), ("FNCHEMFL", 1), ("FNNDTFPI", 1)], + "SACLSH32": [("AL2024BAR", 1.90), ("FNCHEMFL", 1), ("FNNDTFPI", 1)], + "SACLSH24C": [("CR321BAR", 2.10), ("FNPASSIV", 1), ("FNPRIMER", 0.02), ("FNNDTFPI", 1)], + "SACLSH32T": [("TI64BAR", 2.10), ("TI64SHT", 0.20), ("FNPASSIV", 1), ("FNNDTFPI", 1)], + "SATHBDY16": [("AL2024BAR", 1.05), ("FNANODIZ", 1), ("FNNDTFPI", 1)], + "SATHBDY24": [("AL2024BAR", 1.45), ("FNANODIZ", 1), ("FNNDTFPI", 1)], + "SATHBDY32": [("AL2024BAR", 1.95), ("FNANODIZ", 1), ("FNNDTFPI", 1)], + "SATHRDNUT": [("AL2024BAR", 1.10), ("FNANODIZ", 1)], + "SALATCH1": [("CRA286BAR", 0.35), ("SPRTORS02", 1), ("PINROLL12", 2), ("FNPASSIV", 1)], + "SAVTLI01": [("ELPTFESH", 0.12), ("PINROLL12", 1), ("SPRCOMP01", 1)], + "SASEALK16": [("ORFS908", 2), ("SLPTFEBU", 2)], + "SASEALK24": [("ORFS912", 2), ("SLPTFEBU", 2)], + "SASEALK32": [("ORVT924", 2), ("SLPTFEBU", 2), ("SLGRAFOL", 1)], + "SABODY200": [("AL6061BAR", 1.60), ("FNANODIZ", 1), ("FNNDTFPI", 1)], + "SABODY600": [("AL6061BAR", 1.95), ("FNANODIZ", 1), ("FNNDTFPI", 1)], + "SAPOPPET1": [("CRA286BAR", 0.22), ("SPRCOMP01", 1), ("ORVT916", 1), ("RETRING18", 1)], + "SASLEEVE1": [("AL7075BAR", 0.75), ("FNANODIZ", 1), ("FNDRYLUB", 0.01), ("SPRCOMP01", 1)], + "SAHTRCORE": [("HTFOIL01", 1), ("HTEPOXY1", 0.35), ("HTGLSCLO", 0.50)], + "SAHTRHARN": [("HTLEAD18", 3.5), ("HTCONN01", 1), ("HTTSTAT1", 1), ("HTTCO160", 1)], + "SAISOTUB1": [("CMPTUBE1", 1.20), ("CMPADHES", 0.40)], + "SAISOTUB2": [("CMPTUBE2", 1.50), ("CMPADHES", 0.60)], + "SAISOEND1": [("AL7075BAR", 1.25), ("FNCHEMFL", 1), ("FNPRIMER", 0.02), ("FNNDTFPI", 1)], + "SABANDAL6": [("AL2024STR", 0.55), ("FNCHEMFL", 1)], + "SABANDCR8": [("CR321SHT", 0.08), ("FNPASSIV", 1)], + "SACUSHN06": [("ELSIL60", 0.05)], + "SACUSHNW8": [("ELFSIL70", 0.09)], + "SAWEARSH1": [("CR304TUB", 0.15), ("FNPASSIV", 1)], + "SAHOSEAS8": [("HSPTFE08", 1.60), ("HSBRAID1", 1.60)], + # --- ferrules and fittings -------------------------------------------- + "W902-16": [("AL2024BAR", 0.42), ("FNCHEMFL", 1), ("FNNDTFPI", 1)], + "W902-24": [("AL2024BAR", 0.65), ("FNCHEMFL", 1), ("FNNDTFPI", 1)], + "W902-32": [("CR321BAR", 1.05), ("FNPASSIV", 1), ("FNNDTFPI", 1)], + "F63052-24": [("AL2024BAR", 0.70), ("FNCHEMFL", 1), ("FNNDTFPI", 1)], + "F63052-32": [("TICP2TUB", 0.55), ("FNPASSIV", 1), ("FNNDTFPI", 1)], + "W922N-16": [("AL7075BAR", 1.40), ("JAMNUT150", 1), ("ORFS908", 1), ("FNANODIZ", 1)], + # --- finished goods: clamshell couplings ------------------------------- + "AW2010-16": [("SACLSH16", 2), ("SALATCH1", 1), ("SASEALK16", 1), ("BLTA28610", 2), + ("NUTA286SL", 2), ("LBLPART1", 1), ("PKGESDBG", 1)], + "AW2010-24": [("SACLSH24", 2), ("SALATCH1", 1), ("SASEALK24", 1), ("BLTA28612", 2), + ("NUTA286SL", 2), ("LBLPART1", 1), ("PKGESDBG", 1)], + "AW2010-32": [("SACLSH32T", 2), ("SALATCH1", 1), ("SASEALK32", 1), ("BLTA28612", 2), + ("NUTA286SL", 2), ("LBLNAME1", 1), ("PKGESDBG", 1)], + "AW2091-24": [("SACLSH24", 2), ("SALATCH1", 1), ("SAVTLI01", 1), ("SASEALK24", 1), + ("BLTA28612", 2), ("NUTA286SL", 2), ("LBLPART1", 1), ("PKGESDBG", 1)], + "AW2100-24": [("SACLSH24", 2), ("SALATCH1", 2), ("SAVTLI01", 1), ("SASEALK24", 1), + ("BLTA28612", 4), ("NUTA286SL", 4), ("LBLNAME1", 1), ("PKGESDBG", 1), + ("PKGFOAM1", 1)], + "AW2100-32": [("SACLSH32", 2), ("SALATCH1", 2), ("SAVTLI01", 1), ("SASEALK32", 1), + ("BLTA28612", 4), ("NUTA286SL", 4), ("LBLNAME1", 1), ("PKGESDBG", 1), + ("PKGFOAM1", 1)], + "W991-16": [("SACLSH16", 2), ("SASEALK16", 1), ("BLTA28610", 2), ("NUTA286SL", 2), + ("SPRTORS02", 1), ("LBLPART1", 1), ("PKGESDBG", 1)], + "W991-24": [("SACLSH24", 2), ("SASEALK24", 1), ("BLTA28612", 2), ("NUTA286SL", 2), + ("SPRTORS02", 1), ("LBLPART1", 1), ("PKGESDBG", 1)], + "W991N-32": [("SACLSH32", 2), ("SASEALK32", 1), ("BLTA28612", 2), ("NUTA286SL", 2), + ("SPRTORS02", 1), ("LBLPART1", 1), ("PKGESDBG", 1)], + "W991F-24": [("SACLSH24C", 2), ("SLGRAFOL", 2), ("BLTA28612", 2), ("NUTA286SL", 2), + ("SPRTORS02", 1), ("LBLNAME1", 1), ("PKGESDBG", 1)], + "G620-32": [("SACLSH32", 2), ("SALATCH1", 1), ("SASEALK32", 1), ("BLTA28612", 2), + ("NUTA286SL", 2), ("LBLPART1", 1), ("PKGESDBG", 1)], + # --- finished goods: threaded and rigid couplings ---------------------- + "AW971-16": [("SATHBDY16", 1), ("SATHRDNUT", 1), ("SASEALK16", 1), ("RETRING18", 1), + ("LBLPART1", 1), ("PKGESDBG", 1)], + "AW971-24": [("SATHBDY24", 1), ("SATHRDNUT", 1), ("SASEALK24", 1), ("RETRING18", 1), + ("LBLPART1", 1), ("PKGESDBG", 1)], + "W700-32": [("SATHBDY32", 1), ("SATHRDNUT", 1), ("SASEALK32", 1), ("RETRING18", 1), + ("LBLPART1", 1), ("PKGESDBG", 1)], + "C3600-16": [("SATHBDY16", 1), ("SATHRDNUT", 1), ("SASEALK16", 1), ("LBLPART1", 1), + ("PKGESDBG", 1)], + "C6300-24": [("SATHBDY24", 1), ("SATHRDNUT", 1), ("SASEALK24", 1), ("LBLPART1", 1), + ("PKGESDBG", 1)], + "AW979-24": [("SATHBDY24", 1), ("SATHRDNUT", 1), ("SASEALK24", 1), ("SCRCAP832", 2), + ("LBLPART1", 1), ("PKGESDBG", 1)], + "C8300-32": [("SATHBDY32", 1), ("SATHRDNUT", 1), ("SASEALK32", 1), ("SCRCAP832", 2), + ("CR316WIR", 0.50), ("LBLPART1", 1), ("PKGESDBG", 1)], + # --- finished goods: quick disconnects, valves, hoses ------------------ + "QD200-08": [("SABODY200", 1), ("SAPOPPET1", 2), ("SASLEEVE1", 1), ("ORVT916", 2), + ("SPRCOMP01", 1), ("LBLPART1", 1), ("PKGESDBG", 1)], + "QD200-16": [("SABODY200", 1), ("SAPOPPET1", 2), ("SASLEEVE1", 1), ("ORVT924", 2), + ("SPRCOMP01", 1), ("CR316WIR", 0.50), ("LBLNAME1", 1), ("PKGESDBG", 1)], + "QD200-04": [("SABODY200", 1), ("SAPOPPET1", 2), ("ORNBR908", 2), ("SPRCOMP01", 1), + ("LBLPART1", 1), ("PKGESDBG", 1)], + "QD6000-12": [("SABODY600", 1), ("SAPOPPET1", 2), ("SASLEEVE1", 1), ("ORVT916", 2), + ("SPRCOMP01", 2), ("LBLPART1", 1), ("PKGESDBG", 1)], + "P9100-08": [("SABODY200", 1), ("SAPOPPET1", 2), ("ORFS908", 2), ("SPRCOMP01", 1), + ("LBLPART1", 1), ("PKGESDBG", 1)], + "P9400-12": [("SABODY600", 1), ("SAPOPPET1", 2), ("ORFS912", 2), ("SPRCOMP01", 1), + ("LBLPART1", 1), ("PKGESDBG", 1)], + "P9600-16": [("SABODY600", 1), ("SAPOPPET1", 2), ("ORFS912", 2), ("SASLEEVE1", 1), + ("SPRCOMP01", 1), ("LBLNAME1", 1), ("PKGESDBG", 1)], + "PVCHK-08": [("SABODY200", 1), ("SAPOPPET1", 1), ("SPRCOMP01", 1), ("ORVT916", 2), + ("LBLPART1", 1), ("PKGESDBG", 1)], + "PVFUSE-12": [("SABODY600", 1), ("SAPOPPET1", 1), ("SPRCOMP01", 2), ("ORVT916", 2), + ("RETRING18", 1), ("LBLPART1", 1), ("PKGESDBG", 1)], + "FRANG-12": [("CR155BAR", 1.85), ("PINSHR188", 2), ("ORVT916", 2), ("FNPASSIV", 1), + ("FNNDTFPI", 1), ("LBLNAME1", 1), ("PKGESDBG", 1)], + "HOSE-04S": [("HSPTFE04", 2.50), ("HSBRAID1", 2.50), ("HSFITAN4", 2), ("LBLPART1", 1), + ("PKGESDBG", 1)], + "HOSE-08L": [("SAHOSEAS8", 1), ("HSFIT908", 1), ("HSFITAN4", 1), ("LBLPART1", 1), + ("PKGESDBG", 1)], + # --- finished goods: isolators ----------------------------------------- + "ISOF-1000": [("SAISOTUB1", 1), ("SAISOEND1", 2), ("ORFS912", 2), ("BLTA28612", 4), + ("NUTA286SL", 4), ("LBLNAME1", 1), ("PKGESDBG", 1), ("PKGDESIC", 1), + ("PKGFOAM1", 1), ("PKGCART1", 1)], + "ISOF-2000": [("SAISOTUB2", 1), ("SAISOEND1", 2), ("ORVT924", 2), ("BLTA28612", 6), + ("NUTA286SL", 6), ("LBLNAME1", 1), ("PKGESDBG", 1), ("PKGDESIC", 1), + ("PKGFOAM1", 1), ("PKGCART1", 1)], + "ISOH-0500": [("CMPTUBE05", 1.00), ("SAISOEND1", 2), ("JAMNUT150", 1), ("ORFS908", 2), + ("LBLNAME1", 1), ("PKGESDBG", 1), ("PKGFOAM1", 1)], + # --- finished goods: heaters ------------------------------------------- + "HTRRB-024": [("SAHTRCORE", 1), ("SAHTRHARN", 1), ("HTSILRUB", 1.20), ("LBLNAME1", 1), + ("PKGESDBG", 1)], + "HTRRB-012": [("SAHTRCORE", 1), ("SAHTRHARN", 1), ("HTSILRUB", 0.70), ("LBLNAME1", 1), + ("PKGESDBG", 1)], + "HTRBL-112": [("SAHTRCORE", 1), ("SAHTRHARN", 1), ("HTSILRUB", 2.40), ("HTGLSCLO", 1.00), + ("RIVAL44", 4), ("LBLNAME1", 1), ("PKGESDBG", 1)], + "HTRGK-HG1": [("HTFOIL01", 1), ("HTEPOXY1", 0.22), ("HTLEAD18", 1.50), ("ORSIL932", 2), + ("LBLPART1", 1), ("PKGESDBG", 1)], + "HTRCT-22W": [("HTFOIL01", 1), ("CR304TUB", 0.25), ("HTLEAD18", 1.00), ("FNPASSIV", 1), + ("LBLPART1", 1), ("PKGESDBG", 1)], + "HTRCF-201": [("SAHTRCORE", 1), ("SAHTRHARN", 1), ("HTSILRUB", 1.80), ("AL2024SHT", 0.40), + ("LBLNAME1", 1), ("PKGESDBG", 1)], + "HTRHS-06": [("HSPTFE04", 3.00), ("HTFOIL02", 1), ("HTLEAD18", 3.50), ("HSFITAN4", 2), + ("LBLNAME1", 1), ("PKGESDBG", 1)], + # --- finished goods: Adel clamps --------------------------------------- + "CLPSTD-06": [("SABANDAL6", 1), ("SACUSHN06", 1)], + "CLPTL-08": [("SABANDAL6", 1), ("SACUSHN06", 1), ("PINROLL12", 1), ("SPRTORS02", 1)], + "CLPSL-08": [("SABANDCR8", 1), ("SACUSHNW8", 1), ("PINROLL12", 1), ("SPRTORS02", 1)], + "CLPBLK-12": [("SABANDCR8", 2), ("SACUSHNW8", 2), ("SCRCAP832", 2), ("WSHCRE025", 2)], + "CLPWS-10": [("SABANDCR8", 1), ("SAWEARSH1", 2)], + "CLPSPC-06": [("SABANDCR8", 1), ("SACUSHNW8", 1)], + "GRMAC-04": [("ELSIL60", 0.02)], + # --- finished goods: Wiggins mining ------------------------------------ + "WMFFN-100": [("SABODY600", 1), ("SAPOPPET1", 2), ("SASLEEVE1", 1), ("ORVT924", 4), + ("SPRCOMP01", 2), ("AL7075BAR", 2.40), ("FNANODIZ", 1), ("FNPAINT1", 0.05), + ("LBLNAME1", 1), ("PKGDESIC", 1), ("PKGCART1", 1)], + "WMFFR-100": [("SABODY600", 1), ("SAPOPPET1", 1), ("ORVT924", 2), ("AL7075BAR", 1.80), + ("FNANODIZ", 1), ("FNPAINT1", 0.04), ("LBLNAME1", 1), ("PKGCART1", 1)], + "WMDEF-050": [("SABODY200", 1), ("SAPOPPET1", 1), ("HTFOIL02", 1), ("HTTSTAT1", 1), + ("HTLEAD18", 4.00), ("ORVT916", 2), ("LBLNAME1", 1), ("PKGCART1", 1)], + "WMLQD-075": [("SABODY200", 1), ("SAPOPPET1", 2), ("ORVT916", 2), ("SPRCOMP01", 1), + ("LBLPART1", 1), ("PKGESDBG", 1)], +} + +# Parents that carry a superseding revision B. value = (effective date, edits) +# edits is a list of (component, qty) that replace/extend the rev A structure. +REV_B = { + "AW2100-24": (dt.date(2025, 11, 3), + [("SASEALK24", 1), ("SAVTLI01", 2)]), + "ISOF-1000": (dt.date(2026, 2, 16), + [("PKGDESIC", 2), ("CMPADHES", 0.10)]), + "W991-24": (dt.date(2026, 5, 4), + [("SLGRAFOL", 1)]), + "HTRBL-112": (dt.date(2026, 1, 12), + [("HTTCO160", 1)]), + "WMFFN-100": (dt.date(2025, 12, 8), + [("FNDRYLUB", 0.02)]), +} + +# CLPSTD-04 is deliberately left without a BOM: an obsolete manufactured item +# with no product structure, useful for exception reporting in the demo. +NO_BOM = {"CLPSTD-04"} + +# -------------------------------------------------------------------------- +# Standard cost of a manufactured item is rolled up from its structure rather +# than hand-typed, so a cost roll-up in the demo actually ties out. The factor +# is the conversion cost (labour, machine time, inspection, NDT, overhead) +# applied on top of rolled-up material. +# -------------------------------------------------------------------------- +COST_FACTOR_DEFAULT = 1.80 +COST_FACTOR = [ + ("SASEALK", 1.45), # kitting only + ("SACUSHN", 1.90), # moulding + ("SABAND", 1.75), # forming + ("SAWEARSH", 1.85), + ("SA", 2.25), # machined details and mechanical sub-assemblies + ("W902", 2.25), # machined ferrules + ("F63052", 2.25), + ("W922N", 2.25), + ("ISO", 2.80), # dielectric isolators: qualification and test heavy + ("HTR", 2.20), # heaters + ("CLP", 1.70), # clamps: high volume, short cycle + ("GRM", 1.70), + ("WM", 2.20), # mining products +] + + +def cost_factor(item_id): + for prefix, factor in COST_FACTOR: + if item_id.startswith(prefix): + return factor + return COST_FACTOR_DEFAULT + + +def roll_up_costs(items, struct): + """Replace the cost of every manufactured item with rolled-up material + times its conversion factor. Resolved depth-first so a sub-assembly is + costed before the parent that consumes it.""" + cost = {i[0]: i[4] for i in items} + itype = {i[0]: i[2] for i in items} + resolved, in_progress = set(), set() + + def resolve(iid): + if iid in resolved or itype.get(iid) != "M" or iid not in struct: + return cost[iid] + if iid in in_progress: + raise SystemExit("cyclic product structure at %s" % iid) + in_progress.add(iid) + material = sum(resolve(c) * qty for c, qty in struct[iid]) + cost[iid] = round(material * cost_factor(iid), 2) + in_progress.discard(iid) + resolved.add(iid) + return cost[iid] + + for iid in list(cost): + resolve(iid) + return [(a, b, c, u, cost[a], f) for a, b, c, u, _k, f in items] + +# -------------------------------------------------------------------------- +def q(s): + return "'" + str(s).replace("'", "''") + "'" + + +def d(x): + return "DATE('%s')" % x.isoformat() if x else "NULL" + + +def emit(name, header, cols, rows, chunk=50): + """Write one INSERT-per-chunk SQL file. Table name left unqualified.""" + path = os.path.join(OUT, name) + with open(path, "w") as f: + f.write("-- %s\n" + "-- Generated by awdemo/tools/gen-awdemo-data.py - do not edit by hand.\n" + "-- Dates are anchored to as-of %s; regenerate before a demo.\n\n" + % (header, TODAY.isoformat())) + table = header.split()[0] + for i in range(0, len(rows), chunk): + f.write("INSERT INTO %s (%s) VALUES\n" % (table, ", ".join(cols))) + f.write(",\n".join(" (%s)" % ", ".join(r) for r in rows[i:i + chunk])) + f.write(";\n\n") + return len(rows) + + +counts = {} + +# ---- WAREHOUSE ------------------------------------------------------------ +counts["WAREHOUSE"] = emit( + "10_warehouse.sql", "WAREHOUSE - AdelWiggins stocking locations", + ["WH_CODE", "WH_NAME", "LOCATION", "ACTIVE_FLAG"], + [[q(c), q(n), q(l), q(a)] for c, n, l, a in WAREHOUSES]) + +# ---- SUPPLIER ------------------------------------------------------------- +counts["SUPPLIER"] = emit( + "20_supplier.sql", "SUPPLIER - approved suppliers", + ["SUPPLIER_ID", "SUPPLIER_NAME", "CONTACT_NAME", "PHONE", "EMAIL", "ACTIVE_FLAG"], + [[q(a), q(b), q(c), q(e), q(f), q(g)] for a, b, c, e, f, g in SUPPLIERS]) + +# ---- ITEM ----------------------------------------------------------------- +for it in ITEMS: + assert len(it[0]) <= 10, "item id too long: %s" % it[0] + assert len(it[1]) <= 50, "desc too long: %s" % it[1] +ITEM_IDS = {i[0] for i in ITEMS} +assert len(ITEM_IDS) == len(ITEMS), "duplicate item id" + +ITEMS = roll_up_costs(ITEMS, STRUCT) + +counts["ITEM"] = emit( + "30_item.sql", "ITEM - AdelWiggins part master", + ["ITEM_ID", "ITEM_DESC", "ITEM_TYPE", "UNIT_OF_MEASURE", "COST", "ACTIVE_FLAG"], + [[q(a), q(b), q(c), q(u), "%.2f" % k, q(f)] for a, b, c, u, k, f in ITEMS]) + +# ---- SUPPLIER_ITEM -------------------------------------------------------- +# Purchased items are sourced by commodity family. +FAMILY = [ + (("AL2024BAR", "AL2024SHT", "AL2024STR", "AL6061BAR", "AL7075BAR"), "AWS001", ("AWS002",)), + (("CR304TUB", "CR316WIR", "CR321BAR", "CR321SHT", "CR155BAR", "CRA286BAR"), "AWS002", ("AWS001",)), + (("TI64BAR", "TI64SHT", "TICP2TUB"), "AWS003", ("AWS001",)), + (("ELSIL60", "ELFSIL70", "ELPTFESH", "ORFS908", "ORFS912", "ORVT916", "ORVT924", + "ORSIL932", "ORNBR908"), "AWS004", ("AWS009",)), + (("SLPTFEBU", "SLGRAFOL"), "AWS009", ("AWS004",)), + (("BLTA28610", "BLTA28612", "NUTA286SL", "SCRCAP832", "WSHCRE025", "PINSHR188", + "PINROLL12", "RIVAL44", "JAMNUT150"), "AWS005", ("AWS002",)), + (("SPRCOMP01", "SPRTORS02", "RETRING18"), "AWS010", ("AWS005",)), + (("HTFOIL01", "HTFOIL02", "HTTSTAT1", "HTTCO160", "HTLEAD18", "HTCONN01", + "HTEPOXY1", "HTSILRUB", "HTGLSCLO"), "AWS007", ()), + (("CMPTUBE05", "CMPTUBE1", "CMPTUBE2", "CMPADHES"), "AWS008", ()), + (("HSPTFE04", "HSPTFE08", "HSBRAID1", "HSFITAN4", "HSFIT908"), "AWS009", ("AWS002",)), + (("FNANODIZ", "FNCHEMFL", "FNPASSIV", "FNNDTFPI"), "AWS006", ("AWS013",)), + (("FNPRIMER", "FNPAINT1", "FNDRYLUB"), "AWS006", ()), + (("LBLNAME1", "LBLPART1"), "AWS011", ()), + (("PKGESDBG", "PKGCART1", "PKGDESIC", "PKGFOAM1"), "AWS012", ()), +] +cost_of = {i[0]: i[4] for i in ITEMS} +si_rows, si_seen = [], set() +for items, primary, alts in FAMILY: + for iid in items: + assert iid in ITEM_IDS, iid + base = cost_of[iid] + lead = rng.choice([3, 5, 7, 10, 14, 21, 28, 35, 45, 60]) + si_rows.append([q(primary), q(iid), str(lead), "%.2f" % round(base * 0.88, 2), q("Y")]) + si_seen.add((primary, iid)) + for alt in alts: + if rng.random() < 0.45 and (alt, iid) not in si_seen: + si_rows.append([q(alt), q(iid), str(lead + rng.choice([5, 10, 14, 21])), + "%.2f" % round(base * rng.uniform(0.93, 1.12), 2), q("N")]) + si_seen.add((alt, iid)) +si_rows.sort(key=lambda r: (r[0], r[1])) +counts["SUPPLIER_ITEM"] = emit( + "40_supplier_item.sql", "SUPPLIER_ITEM - approved source list", + ["SUPPLIER_ID", "ITEM_ID", "LEAD_TIME_DAYS", "PURCHASE_COST", "PRIMARY_SUPPLIER_FLAG"], + si_rows) + +# ---- BOM_HEADER / BOM_DETAIL --------------------------------------------- +mfg_items = [i[0] for i in ITEMS if i[2] == "M"] +for p in STRUCT: + assert p in ITEM_IDS, "structure for unknown parent %s" % p + for c, _ in STRUCT[p]: + assert c in ITEM_IDS, "unknown component %s in %s" % (c, p) +missing = [m for m in mfg_items if m not in STRUCT and m not in NO_BOM] +assert not missing, "manufactured items with no structure: %s" % missing + +bh_rows, bd_rows = [], [] +seq = 0 +bom_of = {} +for parent in mfg_items: + if parent in NO_BOM: + continue + seq += 1 + bom_id = "BM%05d" % seq + eff = dt.date(2019, 1, 1) + dt.timedelta(days=rng.randrange(0, 2000)) + bh_rows.append([q(bom_id), q(parent), q("A"), d(eff)]) + bom_of.setdefault(parent, []).append(bom_id) + for n, (comp, qty) in enumerate(STRUCT[parent], start=1): + bd_rows.append([q(bom_id), str(n * 10), q(comp), "%.3f" % qty]) + +for parent, (eff, edits) in REV_B.items(): + seq += 1 + bom_id = "BM%05d" % seq + bh_rows.append([q(bom_id), q(parent), q("B"), d(eff)]) + bom_of.setdefault(parent, []).append(bom_id) + merged = dict(STRUCT[parent]) + for comp, qty in edits: + merged[comp] = qty + for n, (comp, qty) in enumerate(merged.items(), start=1): + bd_rows.append([q(bom_id), str(n * 10), q(comp), "%.3f" % qty]) + +counts["BOM_HEADER"] = emit( + "50_bom_header.sql", "BOM_HEADER - product structure headers", + ["BOM_ID", "PARENT_ITEM_ID", "REVISION", "EFFECTIVE_DATE"], bh_rows) +counts["BOM_DETAIL"] = emit( + "60_bom_detail.sql", "BOM_DETAIL - product structure component lines", + ["BOM_ID", "LINE_NO", "COMPONENT_ITEM_ID", "QUANTITY"], bd_rows, chunk=100) + +# ---- INVENTORY ------------------------------------------------------------ +FG_PREFIX = ("AW", "W9", "W7", "C3", "C6", "C8", "G6", "QD", "P9", "PV", "FR", + "HOSE", "ISO", "HTR", "CLP", "GRM", "WM") + + +def stocking(item_id, itype): + if item_id.startswith("WM"): + return ["ELP", "LAX", "MIA"] + if itype == "P": + return ["LAX", "HUN"] if rng.random() < 0.7 else ["LAX", "VAL", "HUN"] + if item_id.startswith("SA"): + return ["LAX", "VAL"] + return ["LAX", "MIA"] if rng.random() < 0.6 else ["LAX", "MIA", "HUN"] + + +inv_rows = [] +for iid, desc, itype, uom, cost, active in ITEMS: + for wh in stocking(iid, itype): + if itype == "P": + rop = round(rng.uniform(40, 900), 2) + elif iid.startswith("SA"): + rop = round(rng.uniform(25, 350), 2) + else: + rop = round(rng.uniform(8, 160), 2) + r = rng.random() + if active == "N": + onhand = round(rng.uniform(0, rop * 0.4), 2) + elif r < 0.18: # below reorder point - shortage + onhand = round(rng.uniform(0, rop * 0.85), 2) + elif r < 0.26: # excess / slow mover + onhand = round(rop * rng.uniform(4.0, 7.5), 2) + else: + onhand = round(rop * rng.uniform(1.1, 3.4), 2) + onorder = 0.0 if rng.random() < 0.45 else round(rop * rng.uniform(0.4, 2.2), 2) + recv = to_workday(TODAY - dt.timedelta(days=rng.randrange(3, 240))) + issue = to_workday(TODAY - dt.timedelta(days=rng.randrange(1, 200))) + inv_rows.append([q(iid), q(wh), "%.2f" % onhand, "%.2f" % onorder, + "%.2f" % rop, d(recv), d(issue)]) +counts["INVENTORY"] = emit( + "70_inventory.sql", "INVENTORY - on-hand balances by stocking location", + ["ITEM_ID", "WH_CODE", "QTY_ON_HAND", "QTY_ON_ORDER", "REORDER_POINT", + "LAST_RECEIPT_DATE", "LAST_ISSUE_DATE"], inv_rows, chunk=100) + +# ---- MANUFACTURING_ORDERS ------------------------------------------------- +OPERATORS = ["OP1042", "OP1087", "OP1113", "OP1156", "OP1204", "OP1238", "OP1271", + "OP1319", "OP1364", "OP1402", "OP1448", "OP1490", "OP1536", "OP1578", + "OP1611", "OP1654", "OP1698", "OP1733", "OP1776", "OP1820", "OP1865", + "OP1907", "OP1942", "OP1988"] + +NOTES_OPEN = [ + "Standard routing, no deviations. Release to LAX cell 4.", + "Customer AOG pull-in requested - expedite through NDT.", + "FAI required per AS9102 on this revision before shipment.", + "Kit shortage: A286 hardware on backorder from Precision Fastener Group.", + "Anodize line at capacity - routed to outside processor.", + "Split across shifts 1 and 2 to protect the Friday shipment.", + "Qualification build supporting AS7510 lightning test article.", + "Customer source inspection scheduled at final acceptance.", + "Held for engineering disposition on tolerance deviation request.", + "Rev B effectivity - verify seal kit callout before kitting.", + "Long-lead titanium bar released early against forecast.", + "Spares order for MIA depot replenishment.", + "Mining channel order - ELP stock replenishment.", + "Dual-lot build; segregate serial ranges at pack out.", + "Traveller reprinted after routing update; use rev 4 only.", +] +NOTES_DONE = [ + "Closed complete. All dimensional and NDT results acceptable.", + "Closed complete. Source inspection passed on first presentation.", + "Closed short - balance cancelled at customer request.", + "Closed complete after rework of anodize coverage on two units.", + "Closed complete. FAI package submitted with shipment.", + "Closed complete. Proof pressure test recorded at 250 PSIG.", + "Closed complete, one unit scrapped for bore undersize at op 40.", + "Closed complete. Lot released from penetrant hold on retest.", + "Closed complete. Shipped ahead of need date.", + "Closed complete. Cushion bond verified per process spec.", +] + +# Orders come off a *steady release rate* rather than a fixed per-status quota. +# Quotas produced a hockey stick: closed orders spread over a year while every +# open order sat in the last seven weeks, so the shop read as ~10 orders/month +# for eleven months and then 149 in six. Here a constant number of orders is +# released each working day and the status falls out of where each one sits in +# its own lifecycle, which is what keeps the monthly profile flat. +# +# The planned backlog is generated separately -- it is forward-looking work +# created by the last MRP run, not part of the historical release stream. +HISTORY_WORKDAYS = 260 # ~12 months of working days +RELEASES_PER_WORKDAY = 7.7 # ~150 open orders at a ~19-workday lead +PLANNED_BACKLOG = 120 + +buildable = [m for m in mfg_items if m in STRUCT] +active = {i[0]: i[5] for i in ITEMS} + + +def pick_weight(item_id): + if item_id.startswith(("AW", "W9", "QD", "P9", "CLP")): + return 3.0 + if item_id.startswith("SA"): + return 2.2 + if item_id.startswith(("ISO", "WM")): + return 0.8 + return 1.0 + + +ACTIVE_POOL = [m for m in buildable if active[m] == "Y"] +ACTIVE_WEIGHTS = [pick_weight(m) for m in ACTIVE_POOL] +# Discontinued parts appear only in old closed history. An obsolete part with +# a live order on the floor reads as a data error, not as an exception. +OBSOLETE_POOL = [m for m in buildable if active[m] == "N"] + +mo_rows = [] +seq = 0 + + +def add_order(item, odate, exp, actual, status, notes): + global seq + seq += 1 + is_fg = not item.startswith("SA") + qty = round(rng.choice([12, 20, 24, 25, 36, 40, 48, 50, 60, 72, 80, 96, 100, + 120, 144, 150, 200, 240, 250, 300]) * + (1.0 if is_fg else rng.choice([2, 2, 3, 4])), 2) + if status == "P": + scrap = 0.0 # nothing built yet, nothing scrapped + elif status == "R": + scrap = 0.0 if rng.random() < 0.70 else round(qty * rng.uniform(0.004, 0.030), 2) + else: + scrap = 0.0 if rng.random() < 0.50 else round(qty * rng.uniform(0.004, 0.045), 2) + mo_rows.append([q("MO%06d" % (100000 + seq)), q(item), d(odate), d(exp), d(actual), + "%.2f" % qty, "%.2f" % scrap, q(status), + q(rng.choice("112233")), q(rng.choice(OPERATORS)), q(notes)]) + + +# --- the release stream: closed history plus what is live on the floor ----- +for offset in range(HISTORY_WORKDAYS): + released_today = int(RELEASES_PER_WORKDAY) + ( + 1 if rng.random() < RELEASES_PER_WORKDAY % 1 else 0) + odate = add_workdays(TODAY, -offset) + for _ in range(released_today): + lead = rng.randrange(3, 25) # lead time in working days + exp = add_workdays(odate, lead) + past_due = (TODAY - exp).days + + if past_due < 0: + status = "R" # still inside its window + elif past_due < 45: + status = "C" if rng.random() < 0.78 else "R" # recently late + else: + status = "C" if rng.random() < 0.995 else "R" # a few stuck jobs + + if status == "C": + actual = add_workdays(exp, rng.randrange(-3, 7)) + if actual > TODAY: + actual = to_workday(TODAY) + if actual < odate: + actual = odate + notes = rng.choice(NOTES_DONE) + # Only long-closed orders may be for a discontinued part. + if past_due > 60 and OBSOLETE_POOL and rng.random() < 0.004: + item = rng.choice(OBSOLETE_POOL) + else: + item = rng.choices(ACTIVE_POOL, weights=ACTIVE_WEIGHTS, k=1)[0] + else: + actual = None + notes = rng.choice(NOTES_OPEN) + item = rng.choices(ACTIVE_POOL, weights=ACTIVE_WEIGHTS, k=1)[0] + + add_order(item, odate, exp, actual, status, notes) + +# --- the planned backlog: firm-planned work not yet on the floor ----------- +# Creation dates sit in the last fortnight. Spreading them wider does not +# help: the current month is only part-elapsed, so everything pushed backwards +# lands on the previous one and makes the tail of the chart lumpier, not less. +for _ in range(PLANNED_BACKLOG): + odate = add_workdays(TODAY, -rng.randrange(0, 11)) + exp = add_workdays(TODAY, rng.randrange(4, 60)) + item = rng.choices(ACTIVE_POOL, weights=ACTIVE_WEIGHTS, k=1)[0] + add_order(item, odate, exp, None, "P", rng.choice(NOTES_OPEN)) + +mo_rows.sort(key=lambda r: r[0]) +counts["MANUFACTURING_ORDERS"] = emit( + "80_mfg_orders.sql", "MANUFACTURING_ORDERS - shop orders", + ["ORDER_ID", "ITEM_ID", "ORDER_DATE", "EXPECTED_COMPLETION_DATE", + "ACTUAL_COMPLETION_DATE", "QUANTITY_ORDERED", "QUANTITY_SCRAPPED", + "STATUS", "SHIFT_CODE", "OPERATOR_ID", "NOTES"], mo_rows, chunk=100) + +for t in ("WAREHOUSE", "SUPPLIER", "ITEM", "SUPPLIER_ITEM", "BOM_HEADER", + "BOM_DETAIL", "INVENTORY", "MANUFACTURING_ORDERS"): + print("%-22s %5d rows" % (t, counts[t])) diff --git a/awdemo/tools/load-awdemo-data.py b/awdemo/tools/load-awdemo-data.py new file mode 100755 index 00000000..0224e4ff --- /dev/null +++ b/awdemo/tools/load-awdemo-data.py @@ -0,0 +1,128 @@ +#!/usr/bin/env python3 +"""Load the AdelWiggins demo dataset into an IBM i library. + + awdemo/tools/load-awdemo-data.py [LIBRARY] [--keep] + +LIBRARY defaults to $IBMI_BUILD_LIBRARY. The tables must already exist; build +them first with codermake (see awdemo/README.md). + +Every table is emptied before loading so the script is repeatable; --keep +appends instead. + +Table names in sql/data/*.sql are unqualified and are rewritten here to +LIBRARY.TABLE. That matters: an unqualified INSERT resolves against the job +library list and can silently land in the wrong library. +""" + +import json +import os +import re +import subprocess +import sys +import tempfile + +HERE = os.path.dirname(os.path.abspath(__file__)) +DATA_DIR = os.path.join(HERE, "..", "sql", "data") +CONNECTION = os.environ.get("AWDEMO_SQL_CONNECTION", "dev") + +TABLES = ["WAREHOUSE", "SUPPLIER", "ITEM", "SUPPLIER_ITEM", "BOM_HEADER", + "BOM_DETAIL", "INVENTORY", "MANUFACTURING_ORDERS"] + + +def run_sql(sql, fmt="json", timeout=180000): + """Run one statement through the aitool sql skill. + + The payload goes via a temp file: inline --input strings mangle embedded + single quotes. aitool's exit code is not reliable, so parse .success. + """ + with tempfile.NamedTemporaryFile("w", suffix=".json", delete=False) as fh: + json.dump({"connection": CONNECTION, "quiet": True, "format": fmt, + "sql": sql, "timeout": timeout}, fh) + path = fh.name + try: + proc = subprocess.run(["aitool", "sql", "--input", "@" + path], + capture_output=True, text=True) + finally: + os.unlink(path) + out = proc.stdout.strip() or proc.stderr.strip() + if fmt != "json": + return out + try: + result = json.loads(out) + except ValueError: + raise SystemExit("unparseable aitool response:\n%s" % out[:2000]) + if not result.get("success"): + raise SystemExit("SQL failed:\n %s\n %s" + % (sql[:160], json.dumps(result.get("error"))[:600])) + return result + + +def split_statements(text): + """Split on ';' -- but only outside string literals. + + Order notes legitimately contain semicolons, so a naive text.split(";") + tears statements in half. + """ + out, buf, in_str = [], [], False + i, n = 0, len(text) + while i < n: + ch = text[i] + if in_str: + if ch == "'": + if i + 1 < n and text[i + 1] == "'": # doubled = escaped quote + buf.append("''") + i += 2 + continue + in_str = False + buf.append(ch) + elif ch == "'": + in_str = True + buf.append(ch) + elif ch == ";": + out.append("".join(buf)) + buf = [] + else: + buf.append(ch) + i += 1 + out.append("".join(buf)) + return [s.strip() for s in out if s.strip()] + + +def statements(path, lib): + text = re.sub(r"^\s*--.*$", "", open(path).read(), flags=re.M) + for stmt in split_statements(text): + yield re.sub(r"^INSERT INTO (\w+)", r"INSERT INTO %s.\1" % lib, stmt) + + +def main(): + args = [a for a in sys.argv[1:] if not a.startswith("--")] + keep = "--keep" in sys.argv[1:] + lib = (args[0] if args else os.environ.get("IBMI_BUILD_LIBRARY", "")).upper() + if not lib: + raise SystemExit("error: no library given and IBMI_BUILD_LIBRARY is not set") + + print("Target library: %s (connection: %s)" % (lib, CONNECTION)) + + if not keep: + print("Clearing existing rows...") + for table in reversed(TABLES): # reverse order keeps FKs happy + run_sql("DELETE FROM %s.%s" % (lib, table)) + + for name in sorted(os.listdir(DATA_DIR)): + if not name.endswith(".sql"): + continue + path = os.path.join(DATA_DIR, name) + n = 0 + for stmt in statements(path, lib): + run_sql(stmt) + n += 1 + print(" loaded %-24s %d statement(s)" % (name, n)) + + counts = " UNION ALL ".join( + "SELECT '%s' AS TABLE_NAME, COUNT(*) AS ROW_COUNT FROM %s.%s" % (t, lib, t) + for t in TABLES) + print(run_sql(counts, fmt="table")) + + +if __name__ == "__main__": + main()