Exercise Workbook

MasGen ProDONE CMMS — Training & Hands-on Labs

Version 1.0  |  May 2026  |  MasGen Innovations

10 Labs · 8–10 Hours · Final Assessment Included
00

How to use this workbook

This workbook accompanies the MasGen CMMS User Manual. Each lab introduces a real-world scenario, walks you through the steps, and ends with self-check questions. Save your work after every step so a trainer can review your progress.

Before you start

  1. You have a working login and at least the SuperAdmin role (or a role with full module access).
  2. The API and FE are both running locally (dotnet run in each).
  3. Both solutions build with 0 errors. Confirm with your trainer if uncertain.
  4. Have a notebook or text file open to record SR numbers, WO numbers, and any error messages — these are part of the exercise.

Skill levels

Foundation — Labs 1–3

Anyone can do these. Login, navigate, create customers and assets.

Intermediate — Labs 4–7

Requires Foundation completion. Contracts, work orders, inventory, PPM.

Advanced — Labs 8–10

Requires the full system to be set up and the previous labs completed. Invoicing, dashboards, full end-to-end scenarios.

Conventions used in this workbook

DO — Action

An action you perform on screen.

SEE — Outcome

The expected result you should observe.

NOTE — Record

A value (code, number) to write down.

Q — Self-check

A question to test your understanding.

Tip. Don't skim — actually do the steps. The labs build on each other, so values you record in early labs are used later (especially Customer Codes, WO numbers, and Technician IDs).
01

Lab 1 — System orientation

Foundation

Get oriented with the layout, navigation, and basic UM concepts.

Foundation 30 minutes Goal: orient yourself No pre-requisites

1.1 Login & explore

  • Open the FE URL. Log in as SuperAdmin.
  • Confirm you see the left sidebar with multiple module groups (User Management, Customer Management, Contract Management, Service Request & Work Order, etc.).
  • Q1.1   How many main menu groups can you count in the sidebar?
  • Q1.2   Click on Asset Management. How many submenus does it have?
  • Q1.3   Open Service Categories (under Service & Work Order). What pre-seeded categories appear in the list?

1.2 Header bar interaction

  • On any page (e.g. Customers), click the small expand/compress icon at the top-right of the title bar.
  • The header collapses to a slim sticky bar. Click again to restore.

1.3 Collapsible panels

  • Click the chevron in the header of any form panel (e.g. Add Customer).
  • The panel collapses. Click again to expand.

1.4 Create a new role for the lab user

  • Open User Management → Role Management — Add. (You should not actually save anything if you are training — this is a read-only exploration.)
  • Note down the existing roles you see in the dropdown.

Self-check

  • Q1.4   Which submenu would you click to view the system audit trail?
  • Q1.5   Where is the breadcrumb shown on a typical module page?
02

Lab 2 — Build the customer master

Foundation

Onboard a small customer base of 3 customers with sites and contacts.

Foundation 45 minutes Goal: customer onboarding Pre-req: Lab 1

2.1 Create three customers

  • Open Customer Management → Customers. Create three customers, leaving the Customer Code blank each time.
#NameTypeCRN/TRNPhoneEmailCategory
1Greenfield HospitalCorporateCRN-100001050-1234567ops@greenfield.examplePremium
2Anjali SharmaIndividual(empty)050-2345678anjali.sharma@example.comStandard
3Royal Tower FMCorporateCRN-100002050-3456789facilities@royaltower.examplePremium
  • Record the auto-generated Customer Codes for each of the three.
  • Q2.1   Did the system warn you about a duplicate at any point? If yes, on which row?

2.2 Add sites to Greenfield Hospital

  • Open Customer Management → Customer Sites. For Greenfield, add two sites:
    1. Main Building — Sheikh Zayed Rd, Dubai.
    2. Annex — Same street, building B.
  • Both rows appear in the right-hand list.

2.3 Add contacts

  • Open Customer Management → Customer Contacts. Add for Greenfield:
    • Dr. Neha Iyer — phone 050-9000001 — email neha.iyer@greenfield.exampleIsPrimary = true
    • Mr. Rashid Khan — phone 050-9000002 — email rashid.khan@greenfield.example — IsPrimary = false

2.4 View Customer 360

  • Open Customer Management → Customers. Click 360 on the Greenfield row.
  • The Customer 360 page shows: Header (name, type, CRN, contact info), SiteCount = 2, ContactCount = 2, with site list and contact list filled in.

Self-check

  • Q2.2   What is the format of an auto-generated Customer Code?
  • Q2.3   Why does the "duplicate-check" warn but not block?
  • Q2.4   Where does the system store the customer's organisational identification (CRN/TRN)?
03

Lab 3 — Asset registry & QR codes

Foundation

Build an asset hierarchy and register assets, including QR generation.

Foundation 45 minutes Goal: asset registry Pre-req: Lab 2

3.1 Build the location tree for Greenfield Hospital

  • Open Asset Management → Asset Hierarchy. Add nodes in this order — child nodes select their parent in the dropdown.
Site: Greenfield Main
└── Building: Tower A
    ├── Floor: Ground
    │   └── Room: Reception
    └── Floor: First
        ├── Room: Operating Theatre 1
        └── Room: Pharmacy
  • Q3.1   What happens if you try to save a node without filling Type?

3.2 Register three assets

  • Open Asset Management → Assets. For each row, leave Asset Code blank.
#CustomerDescriptionMakeModelSerial NoInstall DateWarranty Expiry
1Greenfield HospitalAC UnitCarrier38KVRSN-A-00012024-06-012027-06-01
2Greenfield HospitalCardiac MonitorPhilipsIntelliVue MX450SN-B-20022025-01-152028-01-15
3Royal Tower FMLift DriveOtisGen2 PremierSN-C-30032023-03-012026-03-01
  • Record the three Asset Codes.

3.3 Generate QR codes

  • Click Gen QR on each asset row. After generation, the QR column displays the encoded payload (e.g. /assets/bycode/AST-2026-00001).
  • Refresh the page — the QR field is persisted, not transient.

3.4 Log a condition rating

  • Open Asset Management → Asset Condition Log. For the Cardiac Monitor: Rating = 4 (Good); Notes = "Initial inspection — within tolerance, calibrated last week." → Save.
  • Add a second log entry one minute later with rating 3 and a note "Slight drift on saturation reading observed."
  • Two rows appear in the list — log is append-only.

Self-check

  • Q3.2   What URL does the QR code embed?
  • Q3.3   Can you ever overwrite a previous condition log entry? Why or why not?
  • Q3.4   If you tried to register a 4th asset for Royal Tower FM with the same serial number SN-C-3003, what should happen?
04

Lab 4 — Contracts & SLA tiers

Intermediate

Set up an AMC contract for Greenfield Hospital with full SLA coverage.

Intermediate 30 minutes Goal: contract setup Pre-req: Labs 2–3

4.1 Create the contract

  • Open Contract Management → Contracts. Create:
    • Customer: Greenfield Hospital
    • Type: AMC
    • Start Date: 2026-01-01  ·  End Date: 2026-12-31
    • Value: 50000  ·  Billing Frequency: Quarterly
    • Status: Active (change from Draft)
  • Record the Contract Code.

4.2 Add four SLA tiers

  • Open Contract Management → SLA Tiers. Add four rows for the contract:
PriorityResponse HrsResolution Hrs
Critical14
High424
Medium872
Low24168

4.3 Link covered assets

  • Open Contract Management → Contract Assets. Link the AC Unit and Cardiac Monitor (the two Greenfield assets you created in Lab 3) to this contract.

4.4 Inspect Expiry Alerts

  • Open Contract Management → Expiry Alerts. Set the dropdown to 90 days.
  • If today is May 2026 and the contract ends 2026-12-31, the contract should not appear (still > 90 days).
  • Change the dropdown to 365 days.
  • The contract now appears with the expiry date and remaining days.

Self-check

  • Q4.1   What is the difference between Draft and Active contract status, in practical terms?
  • Q4.2   Why must you define SLA tiers per contract rather than once globally?
  • Q4.3   What happens when an SR is raised against the Cardiac Monitor — which contract does the system pick? Try to predict before doing Lab 5.
05

Lab 5 — Service request to work order lifecycle

Intermediate

Take an SR through every state up to invoice-ready completion.

Intermediate 60 minutes Goal: full SR/WO flow Pre-req: Labs 2–4

5.1 Pre-requisite: a technician

  • Open Field Scheduling → Technicians. Create:
    • User Id: pick any existing UM user or leave blank.
    • Employee Code: TECH-001.
    • Skills: "HVAC, Electrical".
    • Zone Coverage: "Dubai-North".
  • Record the Technician Id.

5.2 Raise an SR

  • Open Service Request & Work Order → Service Requests. Raise:
    • Customer: Greenfield Hospital.
    • Priority: High.
    • Category: Breakdown.
    • Fault Code: F-COOL (Cooling underperformance).
    • Description: "AC unit on first floor not cooling — alarm at 03:30."
  • Record the SR Number.
  • The success message shows Coverage: Covered — confirming the system picked up your active AMC contract.

5.3 Convert to Work Order

  • Open Service Request & Work Order → Work Orders. In the Convert SR to Work Order panel: pick your SR; assign Technician; Scheduled Date/Time = today + 2 hours; Problem blank; click Convert.
  • Record the WO Number.
  • The SR's status changes to In Progress; the new WO appears in the WO list with status Assigned.

5.4 Walk the state machine

  • On the WO row, click Status. Try transitions in this order:
    1. New → Assigned (already done).
    2. Assigned → In Progress (allowed). Note: "Technician arrived on site."
    3. In Progress → On Hold (allowed). Note: "Awaiting spare from warehouse."
    4. On Hold → In Progress (allowed).
    5. Try In Progress → Closed. Rejected — Closed is only valid from Completed.
  • Q5.1   What status code does the system return for an illegal transition?

5.5 Complete the WO

  • Click Complete on the row: Technician = your Technician Id; Clock In = today, 2 hours ago; Clock Out = now; Labor Hours = 2; Travel Hours = 0.5; Customer Signature = "Dr. Neha Iyer — accepted 2026-05-07" (≥ 10 chars). Click Complete.
  • Status moves to Completed. A new row appears in WorkOrderLabour. The signature is stored.

5.6 Verify history

  • Open Service Request & Work Order → WO History.
  • You should see at least 5 rows for your WO: created/assigned, In Progress, On Hold, In Progress, Completed.

5.7 View the dispatch board

  • Open Service Request & Work Order → Dispatch Board. Set From = today, To = today + 7 days. Click Refresh.
  • Your WO appears (status = Completed, colour = green) on today's row.

Self-check

  • Q5.2   How many history rows did your WO end up with?
  • Q5.3   What field in the WO record stores the customer's acceptance proof?
  • Q5.4   Try completing a WO without a customer signature. What's the error?
06

Lab 6 — Inventory & van stock

Intermediate

Set up a warehouse, parts catalogue, perform stock-in/out, and load van stock.

Intermediate 45 minutes Goal: inventory ops

6.1 Create the master warehouse

  • Open Inventory → Warehouses. Create: Code = MW-01, Name = "Main Warehouse", Location = "Al Quoz Industrial Area, Dubai".

6.2 Catalogue 3 parts

  • Open Inventory → Parts. Add:
CodeDescriptionUnitCost PriceReorder Level
P-FLT-01AC Filter (medium)EA15.0020
P-CAP-01Capacitor 35µFEA25.0010
P-OIL-01Compressor Oil 1LL18.005

6.3 Stock-in initial deliveries

  • Open Inventory → Stock Ledger. Add three In transactions:
    • P-FLT-01, MW-01, In, Qty=50, Reference=GRN-001.
    • P-CAP-01, MW-01, In, Qty=15, Reference=GRN-001.
    • P-OIL-01, MW-01, In, Qty=10, Reference=GRN-001.

6.4 View Stock Balance

  • Open Inventory → Stock Balance.
  • Three rows. Filter=50, Capacitor=15, Oil=10. The BelowReorder flag is 0 for all three — they are above reorder level.

6.5 Issue stock for a WO

  • Add a new Stock Ledger entry: P-FLT-01, MW-01, Out, Qty=2, Reference=WO-2026-NNNNN (your WO from Lab 5).
  • Stock Balance now shows Filter = 48.

6.6 Try a negative stock-out

  • Add a stock-out: P-OIL-01, MW-01, Out, Qty=20.
  • The system blocks it with "Insufficient stock (balance 10)" error.

6.7 Load van stock

  • Open Inventory → Van Stock. Load: Technician = TECH-001; Part = P-FLT-01; Qty = 5.

6.8 Trigger a reorder

  • Stock-out 10 of P-CAP-01 — leaves 5, which is below reorder level (10).
  • Open Inventory → Stock Balance. The capacitor row now shows BelowReorder = 1.

6.9 Raise a Purchase Requisition

  • Open Inventory → Purchase Requisitions. Add: Part = P-CAP-01; Qty Required = 50; Status = Draft. Save.
  • Record the PR Number.

Self-check

  • Q6.1   What error message did you get when stock-out exceeded the warehouse balance?
  • Q6.2   Where does the BelowReorder flag get computed — in the FE or in the database?
  • Q6.3   What's the difference between Warehouse stock and Van Stock?
07

Lab 7 — Preventive maintenance

Intermediate

Schedule a recurring inspection on the AC Unit and check the dashboard.

Intermediate 30 minutes Goal: PPM scheduling Pre-req: Labs 3–4

7.1 Create a quarterly schedule

  • Open Preventive Maintenance → PPM Schedules. Create: Asset = AC Unit (your Lab 3 asset); Contract = the AMC from Lab 4; Frequency = Quarterly; Next Due Date = today (so the auto-generator picks it up). Save.

7.2 Add four checklist items

  • Open Preventive Maintenance → Checklist Templates. Add for the schedule:
    1. "Clean condenser coils" — Mandatory.
    2. "Check refrigerant pressure" — Mandatory.
    3. "Inspect electrical contacts" — Mandatory.
    4. "Test customer's remote control" — Optional.

7.3 Generate WOs (manual trigger)

  • In SQL Server Management Studio, run:
USE MasGen_CMMS;
EXEC dbo.DevSP_CF_MasGen_CMMS_PPM_GenerateWorkOrders @AsOfDate = NULL;
  • Result table shows GeneratedCount = 1.

7.4 Verify the PPM WO appeared

  • Open Preventive Maintenance → PPM Work Orders.
  • One row appears, linked to your schedule, with today's due date and IsOverdue = 0.

7.5 Record checklist results

  • Open Preventive Maintenance → Checklist Results. Add four results:
    1. Pass — "Coils clean."
    2. Pass — "Pressure 105 psi within range."
    3. Pass — "All contacts firm."
    4. Fail — "Remote battery flat — replaced."

7.6 Open the dashboard

  • Open Preventive Maintenance → PPM Dashboard.
  • Numbers: Total = 1, On Time = 1, Overdue = 0, On-Time Percent = 100.00.

Self-check

  • Q7.1   When the auto-generator creates a WO, what does it do to the schedule's NextDueDate?
  • Q7.2   What is "carry-forward" / overdue handling — when does IsOverdue become 1?
08

Lab 8 — Invoicing & payments

Advanced

Generate an invoice from the completed WO, approve, record a payment, and check aged receivables.

Advanced 45 minutes Goal: invoicing flow Pre-req: Labs 5–6

8.1 Generate the invoice

Run from SSMS (or via the API endpoint):

EXEC dbo.DevSP_CF_MasGen_CMMS_FI_GenerateInvoice @WOId = <your WO id>;
  • Record the Invoice Number.
  • Open Finance & Invoicing → Invoices — new draft invoice for Greenfield, status = Draft.

8.2 Inspect lines

  • Open Finance & Invoicing → Invoice Lines. You should see:
    • One Labour line (Qty = 2 hours × £50 = £100).
    • One Parts line (the filter you used: 2 × 15 = £30).
    • Subtotal = 130, Tax (5%) = 6.50, Total = 136.50.

8.3 Approve & dispatch

  • On the Invoices page, click Approve. The status moves to Approved.

8.4 Record a part payment

  • Open Finance & Invoicing → Payments. Invoice = your invoice; Amount = 100 (less than full total of 136.50); Method = Bank Transfer; Reference = "BT-001". Save.
  • Outstanding balance is now 36.50 — Invoice still appears in Aged Receivables.

8.5 Try an over-payment

  • Try to record a second payment of 1,000.
  • Behaviour: depends on your business rule. The system stores it but the auto-Paid-marker sees the cumulative amount exceeds total and marks the invoice Paid.

8.6 Aged Receivables

  • Open Finance & Invoicing → Aged Receivables. Set As-Of Date = today + 35 days (simulating 35-day old invoice).
  • The invoice should appear in the 31-60 bucket.

Self-check

  • Q8.1   What auto-marks an Invoice as Paid?
  • Q8.2   What is the tax rate hard-coded in the auto-generator?
  • Q8.3   Can you delete a payment record? What happens to the invoice status if you do?
09

Lab 9 — Dashboards & reports

Advanced

Use CRM, Customer Portal and PPM dashboards to interpret system state.

Advanced 30 minutes Goal: read dashboards

9.1 CRM Dashboard

  • Open CRM Web → CRM Dashboard. Click Refresh.
  • Record values: Total SRs, Open SRs, Completed SRs, Total WOs, In Progress WOs, Total Customers, Active Contracts.

9.2 Complaints List

  • Open CRM Web → Complaints List. Filter by today.
  • Your SR from Lab 5 should appear.

9.3 Processing Inbox

  • Open CRM Web → Processing Inbox.
  • Currently empty (your only SR is now Completed). Quick test: raise another SR to see it appear here.

9.4 Portal: my purchases

  • Open Customer Portal → My Purchases. (In production, the customer logs in to their portal directly.)
  • The Greenfield assets show with Warranty Status colour-coded.

Self-check

  • Q9.1   What does the CRM Dashboard pull from the database?
  • Q9.2   A customer phones to ask about all complaints raised in the last week. Which page would you use?
10

Lab 10 — End-to-end scenario

Advanced

Tie everything together with one complete day-in-the-life scenario.

Advanced 60–75 minutes Goal: full E2E
Scenario. The Royal Tower FM lift drive (the one you registered in Lab 3) has stopped working. The customer phones the help desk at 09:00. You are the on-duty Operations Manager and need to: raise an SR, confirm contract coverage, convert to WO and assign your best lift technician, complete with parts & signature, auto-generate the invoice, record full payment, and add a checklist item to your overdue AC PPM.

10.1 Pre-step — register the customer for an active contract

  • If Royal Tower FM does not yet have an Active contract, create one quickly (3-month T&M contract is fine).

10.2 Raise the SR

  • Service Requests → Raise SR for Royal Tower → Priority = Critical → Description "Lift drive failure — passengers stuck".

10.3 Convert + assign + complete

  • Same flow as Lab 5. Use a different technician id if you can (TECH-002 maybe).

10.4 Stock issue + WO complete with parts

  • Stock-out 1 capacitor from MW-01 (reference = WO number).
  • Complete the WO with labour + signature.

10.5 Invoice + Payment

  • Generate, Approve, Record a payment for the full total. Verify status moves to Paid.

10.6 Final dashboard check

  • CRM Dashboard → click Refresh.
  • Record the new totals — they should be one higher in Total SRs and Total WOs than your Lab 9 numbers.

Self-check

  • Q10.1   From a customer's complaint to an invoice marked Paid — how many distinct stored procedures did the system invoke (approximate)?
  • Q10.2   If during the WO completion you forgot to put the customer signature, what's the recovery flow?
  • Q10.3   Royal Tower's lift now needs quarterly preventive maintenance. Which two pages do you use to set that up?
FA

Final assessment

Closed-book · 30 min

Once you've completed the 10 labs, attempt this assessment without consulting the manual.

Multiple choice (1 point each)

Pick exactly one option per question.

A1

A new customer record is auto-numbered as:

  • a) CUST-{YYYY}-{NNN}
  • b) CUST-{YYMMDD}-{NNNN}
  • c) CMMS-{YY}-{NNNNNN}
  • d) The user must enter it manually.
A2

The valid next states from In Progress for a Work Order are:

  • a) Assigned, On Hold
  • b) On Hold, Completed, Cancelled
  • c) New, Cancelled, Completed
  • d) Closed only
A3

A part can be stocked-out if and only if:

  • a) The technician has van stock for it.
  • b) The warehouse has a positive balance ≥ requested quantity.
  • c) The user has the Storekeeper role.
  • d) Reorder level is greater than the requested quantity.
A4

A PPM Work Order is generated:

  • a) When the user clicks "Generate".
  • b) Immediately when the schedule is created.
  • c) By a SQL Agent job running daily, for any schedule whose NextDueDate ≤ today.
  • d) Only when an SR is raised.
A5

The customer signature requirement on WO completion is:

  • a) Optional.
  • b) Required, minimum 10 characters.
  • c) Required, must be a base64-encoded PNG.
  • d) Required only for invoiceable WOs.

Short answer (3 points each)

  • A6. Describe the three things that happen automatically when you click Convert on the Work Orders page.
  • A7. A field operations manager wants to know "How many SRs raised today are still open?" Where do they look, and what number gives them the answer?
  • A8. Why does MasGen CMMS use stored procedures instead of LINQ-to-SQL?
  • A9. Explain why a Customer Portal user only sees their own data, despite the API being accessible from anywhere.
  • A10. Walk through the inventory effect of completing a WO that used parts. Specifically: which two tables get rows written to them?

Practical task (15 points)

A11. Pick any customer in the system and reproduce the entire end-to-end (Lab 10) flow without re-reading instructions. Time yourself. Passing grade: completion in under 25 minutes.
AK

Answer key (trainers only)

Restricted
Trainer use only. Provide this section to trainers separately. Do not give to trainees in advance.
Reveal Lab self-check answers (Q1.1 — Q10.3)

Q1.1 ~16 main menus (UM + 11 implemented modules + UM sub-areas like Workflow / Audit Log).

Q1.2 Asset Management has 4 submenus (Assets, Asset Hierarchy, Asset Condition Log, Asset Documents).

Q1.3 Pre-seeded categories: Breakdown (BREAK), Installation (INST), Maintenance (MAINT), Inspection (INSP), Consultation (CONSULT).

Q1.4 User Management → Audit Log.

Q1.5 In the header bar at the top of every module page (under the title bar with breadcrumb format Dashboard / Module / Page).

Q2.1 No duplicate warning expected for the three rows because they are sufficiently different.

Q2.2 CUST-{YYMMDD}-{NNNN} (e.g. CUST-260507-0042).

Q2.3 It's a soft check — a name match could be a real duplicate or a separate company with a similar name; the user is best placed to decide.

Q2.4 Customer's CRN_TRN column.

Q3.1 Validation message: "Type & Name required."

Q3.2 /assets/bycode/{AssetCode} — e.g. /assets/bycode/AST-2026-00001.

Q3.3 No — the log is append-only by design. New rows track each rating in time. Helps build trend data for asset health.

Q3.4 The DB-level UNIQUE constraint on Asset Code (not Serial) is enforced. Serial uniqueness per customer is enforced in the SP only when extended (future enhancement).

Q4.1 Draft = not yet active for SR coverage; Active = picked up by ValidateCoverage when raising an SR.

Q4.2 Different contracts (AMC vs T&M) have very different SLAs; tying them per-contract supports differential pricing and customer-specific service levels.

Q4.3 The system picks the most recent active contract whose date range covers today (@CheckDate).

Q5.1 Result = 0; Message = "Illegal transition: {current} → {requested}".

Q5.2 At least 5 rows: created/Assigned, In Progress, On Hold, In Progress, Completed.

Q5.3 WorkOrders.CustomerSignature.

Q5.4 "Customer signature is mandatory for completion".

Q6.1 "Insufficient stock (balance {N})".

Q6.2 In the database — DevSP_CF_MasGen_CMMS_IV_GetStockBalance computes the flag based on running balance vs Parts.ReorderLevel.

Q6.3 Warehouse stock = central inventory at a fixed location. Van stock = items the technician carries with them; deducted preferentially when used on a WO.

Q7.1 Bumps it forward by the frequency (e.g. Quarterly = +3 months).

Q7.2 When a schedule's NextDueDate passes without the daily job running successfully, the catch-up logic creates a WO with IsOverdue = 1.

Q8.1 When cumulative payments ≥ Invoice.TotalAmount, the Insert SP for Payments updates status to Paid.

Q8.2 5%.

Q8.3 Yes (soft delete on Payments table). The status auto-update only runs on insert; you'd need a RecalculateInvoiceStatus SP to re-evaluate (future enhancement).

Q9.1 Total/Open/Completed SR counts, Total/InProgress WO counts, Total customers, Active contract count — all from DevSP_CF_MasGen_CMMS_CRM_Dashboard.

Q9.2 CRM Web → Complaints List, with date range = last 7 days.

Q10.1 Approximately 12–15 distinct SPs invoked across the flow (CreateSR, ValidateCoverage indirectly, ConvertToWO, AssignTechnician, UpdateWOStatus ×N, CompleteWO, StockOut, GenerateInvoice, ApproveAndDispatch, Payments_Insert, plus various SelectAll / SelectByID for re-display).

Q10.2 Re-attempt the Complete action with a valid signature; the WO must still be in Assigned/In Progress/On Hold for the SP to accept it.

Q10.3 PPM Schedules (define Quarterly), Checklist Templates (define inspection tasks).

Reveal Final-Assessment Multiple Choice answers (A1 — A5)

A1: bCUST-{YYMMDD}-{NNNN}.

A2: b — On Hold, Completed, Cancelled.

A3: b — Warehouse balance must be ≥ requested qty.

A4: c — SQL Agent job daily.

A5: b — Required, ≥ 10 characters.

Reveal Final-Assessment Short-Answer answers (A6 — A10)

A6. (1) WO row created with auto WONumber, (2) WorkOrderHistory row written, (3) The source SR's status is moved to In Progress.

A7. CRM Web → CRM Dashboard; the Open SRs card shows the count.

A8. SP-based architecture keeps business logic in one place (the database), is auditable, performs better with parameterised plans, and avoids ORM-generated SQL surprises.

A9. Row-level security at the SP layer — every CP DevSP takes @CustomerId and filters all reads by it. The portal user's session token is bound to that customer id; the API never lets a user request data for a different @CustomerId.

A10. WorkOrderLabour (one row per technician's labour) and WorkOrderParts (one row per part used). Plus a stock-out is recorded in StockLedger.

What's next?

  1. Get certified by your trainer (they should sign-off the practical task).
  2. Read the User Manual sections 15–17 if you skipped them.
  3. Try operating the system independently for a week using real scenarios from your business.
  4. Note down any pain points or "I wish it could…" observations — these feed the next iteration of the platform.
Welcome to MasGen CMMS. You've completed the workbook — happy maintaining! For deeper reference, head back to the User Manual.