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() 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) | 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. 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(); +})(); 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())