PowerSolver pilot guide — the consultant's field manual
Who this is for: any consultant, including a junior one, who meets a customer to understand their planning problem, collects their data, prepares the PowerSolver workbook, validates it and runs the pilot. How to use it: read §1-§3 once. In the customer meeting, follow §4 (the interview script) with §6 open for the customer's problem type. Before any solve, run §8 (validation) and §11 (acceptance gate). After the pilot: hand the tool over with HAND_OVER_CUSTOMER.md.
Everything below describes what PowerSolver does today (wizard, workbook, engine as released in October 2026). What it does not do is written as such (§2.4, §13). Never promise anything that is not in this guide.
Contents
- PowerSolver in one page
- What to say about limits
- The pilot, step by step
- The customer interview — script
- Decision trees
- Problem types — what to ask and collect for each
- Data discovery and the Excel inventory
- Filling the workbook
- Validating the data before planning
- Exceptions and edge cases
- Troubleshooting
- Acceptance gates
- Known gaps and escalation
1. PowerSolver in one page
A plan is described by one Excel workbook (or the equivalent problem.json file). The consultant's job is to fill it correctly. Six notions are enough:
| Notion | Meaning | Example (job shop) | Example (school) | Where in the workbook |
|---|---|---|---|---|
| Items to plan | The things that get planned, one row each | operations | lessons | Setup row Items to plan + the items sheet (step 2) |
| Decision | What PowerSolver decides for each item. Kind resource (who/where), time (when) or sequence (in what order on a resource, e.g. a route) | machine (resource), slot (time) | slot (time), room (resource) | Setup rows Decision |
| Options list | What a decision chooses from, one row each | machines, slots | slots, rooms | one sheet per list (step 3) |
| Reference list | Data the rules read but PowerSolver never decides | — | teachers (already attributed by the principal) | Setup row Reference list + its sheet (step 3) |
| Rule | Must (never broken: a plan breaking one is unusable) or Wish (followed as much as possible, with a weight) | "a machine does one operation at a time" | "a subject at most once a day" | Rules sheet (step 4) |
| Pin | A decision already taken for some items (e.g. already done); PowerSolver plans the others around it | operations already running | exams already sat | columns pinned + the decided values on the item (step 5) |
Pin or reference list? A pin fixes the decisions of some items; a reference list holds something that is never decided for any item. Details and examples: CONCEPTS_GUIDE.md §5b. A pin fixes all decisions of the item at once (machine and slot).
The workbook (built for every demo in powersolver-demos/*/input/*.xlsx; the wizard's step 1 Download workbook template gives the current plan or a worked example):
| Sheet | Step | Content |
|---|---|---|
| Setup | 1 | problem type, plan name, items list, decisions, reference lists, time limit |
| one sheet per list, named exactly like the list in Setup | 2, 3 | one row per item / option, id column first |
| Rules | 4 | one row per rule |
| How to fill | — | what each sheet and column holds; never imported |
The wizard (https://planning.planningpowertools.com, sign-in required): step 1 Load a plan from Excel, then Fill all steps now (or step by step), step 7 Can this work? (checks the data before planning), Plan it, then the Results page (Check before you use it, Rules & score, all items, Changes, Export to Excel).
The 19 rules (exact settings: RULE_REFERENCE.md):
| Kind (as named in step 4) | Engine id | Typical customer sentence |
|---|---|---|
| Everything gets a value | unassigned_count | "every job must be planned" |
| No double-booking | no_conflict | "a machine does one thing at a time", "a class is in one lesson at a time" |
| Capability must match | skill_match | "only certified technicians", "science in a lab" |
| Specialised options are reserved | resource_exclusivity | "keep the labs for science" |
| Balance the load | load_balance | "share the work evenly" |
| No repeat on the same day | no_subject_repeat_per_day | "maths at most once a day per class" |
| Grouped items share a value | same_value_in_group | "the two halves of a crew start together", "language groups at the same time" |
| Never use protected options | protected_slot | "never at lunch", "not on a server that is down" |
| Respect unavailability | resource_unavailable | "not when the person is on leave", "not when the room is closed" |
| Stay within capacity | capacity | "max 40 hours", "CPU not overbooked" |
| Within the allowed time window | time_window | "not before the material arrives, not after the due date" |
| Prerequisites come first | precedence | "survey before installation", "op 1 before op 2" |
| Minimise cost | cost | "cheapest staff first" |
| Honour preferences | preference | "keep the usual technician", "no nights for those who asked" |
| Minimise a number | minimize_property | "as little overtime as possible" |
| Minimum rest | min_rest | "11 hours between two shifts", "no two operations for a surgeon without 1 h break" |
| Limit per period | period_limit | "max 10 hours a day", "max 48 hours a week", "max 2 nights a week" |
| Days in a row | max_consecutive_days | "no more than 5 days in a row" |
| Enough people per time slot | min_coverage | "3 cashiers at noon", "2 nurses every hour" (the plan places the shifts where the demand is) |
2. What to say about limits
Say these at the first meeting. They are facts of the product, not excuses.
2.1 What PowerSolver does
- Decides one to four things per item (who, when, where, with whom) or the order of items on a resource (routes).
- Checks the data before planning (Can this work?) and tells, in plain words, when a valid plan is impossible and why (not enough rooms, a chain of operations that cannot fit before its due date, a teacher given more hours than their service, …).
- Replans: keeps what is done (pins), moves as little as possible (wishes on the previous values), shows exactly what changed (Results → Changes; Compare Solutions for several successive plans).
2.2 Operating limits
| Limit | Value | What happens beyond |
|---|---|---|
| Rows per list | 5,000 | the engine refuses the plan ("A list is too large for the planner") |
| Time limit per plan | 600 s | refused ("A planner setting is not valid") |
| Plans computed at the same time on one server | 4 | the 5th gets "The planner is busy with other plans" (retry in a minute) |
| Typical times | a few hundred items: seconds to a minute; 500-1,000 items: 2-5 minutes for a polished plan |
2.3 Honest statements
- PowerSolver finds a very good plan, not a proven optimum. Promise: valid, measurably as good or better, much faster to make and to change.
- Two runs can give two different, equally valid plans (the search stops on time).
- "No valid plan found in a quick plan of 20 s" never means impossible: only a red Can this work? verdict does.
2.4 Needs PowerSolver does not cover today — check every customer rule against this list
| Customer need | Status | What you can do |
|---|---|---|
| Consecutive periods (a 2-hour lesson in two 1-hour slots, a job spanning several slots) | not supported | make the slot as long as the item (2-hour slots), or split the item and accept separate placement |
| Daily / weekly maximum per person ("max 6 h a day", "max 2 nights a week") | supported | period_limit (period of 1 day or 7 days; a month is not a fixed number of days: use 28 or 31, or capacity over the whole plan) |
| Minimum rest, "no more than 3 in a row" | supported | min_rest (hours between two items), max_consecutive_days (days in a row) |
| Gaps in a day (idle periods between two lessons) | not supported | — |
| Comparing two numbers (seats ≥ pupils, load ≤ truck volume per trip) | only by category | encode categories as capabilities (seats_200, seats_400) and skill_match; or a total via capacity |
| Travel time between assignments | only in sequence (route) plans with computed times | — |
| Several people solving at the same time | up to 4 plans at once per server | |
| Choosing a substitute among a pool and keeping others fixed with a pin on one decision only | a pin fixes all decisions of the item | make the open choice a decision, pin the items whose choice is made |
Any rule that does not fit is written down in the pilot report as a limitation, never silently dropped.
3. The pilot, step by step
| # | Step | Duration | Who | Output |
|---|---|---|---|---|
| 0 | Qualification call | 45 min | sales + consultant | go / no-go: problem fits §2? a real past period with data exists? |
| 1 | Demo on their industry | 30 min | consultant | a demo workbook of their type (§6) loaded with Fill all steps now, solved, Results shown |
| 2 | Interview workshop (§4) | 2 × 2 h | planner + decision maker | interview sheet complete; rules list (must / wish / ranking); success criteria signed |
| 3 | Data request and inventory (§7) | 3-5 days | customer data contact | every file received, inventory table filled |
| 4 | Workbook build (§8) | 1-3 days | consultant | workbook complete; §9 checks passed; gate 1 (§12.1) |
| 5 | First plan | ½ day | consultant | Can this work? green or amber; first valid plan |
| 6 | Review session 1 | 2 h | planner | every remark classified: data fix, rule, weight, limitation |
| 7 | Iterate | 3-5 days | consultant | second plan; comparison with the customer's own plan |
| 8 | Live replan session | 2 h | planner + decision maker | a real change (absence, breakdown, rush order) replanned live; Changes tab shown |
| 9 | Results review and handover | 1-2 h | decision maker | pilot report; HAND_OVER_CUSTOMER.md checklist |
Success criteria — agree 3 or 4 in writing at step 2: (1) every must-follow rule holds on the real period (0hard); (2) on their top-ranked wishes, PowerSolver's plan is at least as good as theirs; (3) full plan in under N minutes, replan in under M; (4) the planner would publish it with fewer than K manual corrections.
Pilot report: the problem in their words and volumes; each rule as modelled (sentence + rule kind) and the rules that could not be modelled; results per success criterion; their plan vs PowerSolver's, rule by rule; limitations met; proposal.
4. The customer interview — script
Run it with the person who makes the plan today, and the decision maker for parts A and J. Write the answers in the interview sheet (§4.11). Each question says why it matters and what it becomes in the workbook.
4.1 Part A — the problem (15 min)
| # | Ask | Why | Good answer looks like | Becomes |
|---|---|---|---|---|
| A1 | "What plan do you make today? Show me the last one." | Anchors everything on reality, not on an ideal | "the weekly machine schedule, here is last week's Excel" | problem type (§5.1), baseline |
| A2 | "How often, and for what period?" | Defines the planning horizon and the time grid | "every Friday, for next Monday-Friday, in 2-hour slots" | the time options list |
| A3 | "Who makes it, how long does it take, what is painful?" | The pain is the success criterion | "Paul, one day a week; rush orders force a full redo" | success criteria |
| A4 | "What makes a plan good? What makes it unacceptable?" | Separates must from wish early | "late deliveries are unacceptable; overtime is bad but possible" | must / wish |
| A5 | "What changes after the plan is published, and how often?" | Replanning needs | "a machine breaks once a week; rush orders twice a week" | replan scenario, pins |
| A6 | "What do you do today when it cannot all fit?" | Tells you what to do with unplanned items | "we subcontract", "we push to next week" | priority / soft rules |
4.2 Part B — the items to plan (20 min)
| # | Ask | Why | Becomes |
|---|---|---|---|
| B1 | "What is one 'thing' you place in the plan? A job, a lesson, a shift, an operation, a visit?" | The item granularity: one row per thing placed once | Setup Items to plan |
| B2 | "How do you identify each one? Is that id stable from week to week?" | Ids must be unique and stable (pins and comparisons rely on them) | id column |
| B3 | "What does each one need to be done? A skill, a machine type, equipment, a room type?" | Feeds Capability must match | a needs column (text or comma list) |
| B4 | "How long does it take? Always the same?" | Duration; if items are longer than one slot, see §2.4 | duration (ISO PT2H or the template's unit) |
| B5 | "When can it start at the earliest, and when must it be finished?" | Time windows | earliest, due (date-times) |
| B6 | "Does it depend on another item being done first?" | Precedence chains | depends_on (id or comma list of ids) |
| B7 | "Do some items belong together (same crew, same class, same order)?" | Groups for no-double-booking or same-value rules | group column(s) |
| B8 | "Are some more important? What happens if one is not planned?" | Priority, soft rules | priority, weights |
| B9 | "Is anything already decided or already done?" | Pins | pinned + decided values |
| B10 | "Who or what is already fixed for each item and never chosen by the plan?" | Reference lists (teacher already attributed, technician promised) | a column naming the fixed resource + a reference list |
4.3 Part C — the decisions (10 min)
| # | Ask | Why | Becomes |
|---|---|---|---|
| C1 | "For each item, what must be decided: who, when, where, with whom?" | One decision per answer, 1 to 4 | Setup Decision rows |
| C2 | "Is the order on a resource what matters (a route, a sequence on a machine), or only the assignment?" | Sequence vs resource/time | Kind sequence vs resource/time |
| C3 | "Among these, is any already decided for every item?" | That is a reference list, not a decision | Setup Reference list |
4.4 Part D — the options lists (20 min)
For each decision: "List every possible option." Then per option:
| # | Ask | Why | Becomes |
|---|---|---|---|
| D1 | "What can it do / what does it offer?" | Capabilities | skills / capabilities / offers (comma list) |
| D2 | "When is it not available? Planned leave, maintenance, closures?" | Unavailability | a list of unavailable slot codes, e.g. Mon-AM, Tue-PM |
| D3 | "How much can it take in the period?" | Capacity | a number (capacity, max_shifts, cpu) |
| D4 | "Is it reserved for some items only?" | Specialised options are reserved | same capability column |
| D5 | "Does it cost something per item or per hour?" | Cost rule | rate / hourlyRate |
| D6 | (time options) "What are the slots: start, end, day, any never-use slot (lunch)?" | Time grid | startTime, endTime, day, a yes/no protected column |
4.5 Part E — reference lists (10 min, only if C3 or B10 answered yes)
"For each fixed person or thing: when are they away? What can they do? How much can they take?" These columns are read by Respect unavailability, Capability must match and Stay within capacity through resource_property. If the data itself breaks one of them (a teacher given more hours than their service), Can this work? says so before planning.
4.6 Part F — the rules (40 min)
- Ask: "List every rule a plan must follow — things you would never publish." Write them in their words.
- Ask: "List what makes a plan better — your wishes."
- For every rule, read it back as a PowerSolver sentence and the rule kind (§1 table): "No two operations on the same machine at the same time — correct?"
- For every must, ask the publication test: "Would you publish a plan that breaks it once?" If yes, it is a wish.
- For every rule, ask which column holds the information. A rule without data cannot be checked: add the column to the data request.
- For rules that do not fit any kind: check §2.4; write it down as a limitation with the customer, never drop it.
4.7 Part G — ranking the wishes (10 min)
"If two wishes conflict, which wins?" Order them; then give weights that keep the order with margin (e.g. 1, 3, 10). Let the planner decide the order, not the consultant. In replanning, "keep the previous value" wishes usually get 2-5 (demo 18: keep machine 3, keep time 2).
4.8 Part H — exceptions (15 min)
Use §10 as a checklist: holidays, partial availability, subcontracting, overtime, emergency items, items that may be left out, one-off events.
4.9 Part I — volumes and periods (5 min)
Number of items, options per decision, reference rows; planning horizon; how often they replan. Check against §2.2.
4.10 Part J — the baseline and success criteria (10 min, with the decision maker)
"Give us the plan you actually made for this period." It becomes the comparison (§11.4). Then write the 3-4 success criteria (§3).
4.11 The interview sheet (copy it into the meeting notes)
| Field | Answer |
|---|---|
| Problem type (§5.1) | |
| Planning period and slot length | |
| Items to plan (name of the list), count, id source | |
| Decisions (id, kind, options list), counts | |
| Reference lists | |
| Must rules (customer words → rule kind → columns) | |
| Wishes, in order, with weights | |
| Pins / already decided | |
| Exceptions (§10) | |
| Rules that do not fit (§2.4) | |
| Baseline plan received? | |
| Success criteria (signed) | |
| Data contact, delivery date |
5. Decision trees
5.1 Which problem type?
Are items placed in an ORDER on each resource (routes, tours, a machine's job sequence with travel/set-up)?
├── yes → vehicle-routing (decision of kind "sequence")
└── no → What is decided?
├── a time AND a room/place for each item, groups that must not clash → school-timetabling or conference-scheduling
│ (a school: classes, teachers, subjects; a conference: sessions, speakers, tracks)
├── a person for each shift/position (the shifts are given) → employee-rostering
├── a machine AND a time for each operation, routing order → job-shop-scheduling
├── a technician AND a time for each job at a site → maintenance-scheduling
├── a server/host for each workload, capacities → cloud-optimization
├── a person (and possibly a time) for each task, skills → task-assignment
└── none of these fits → generic (same engine, no type-specific form fields)
The problem type changes only the wizard's form fields and labels; the rules and the engine are the same for all.
5.2 Resource, time or sequence?
Is the decision "when"? → Kind = time (the options list has startTime, endTime)
Is it "who / what / where" (no order)? → Kind = resource
Is it "in what order on each vehicle/machine"? → Kind = sequence (one per plan at most; options = vehicles/machines)
5.3 Decision, pin or reference list?
For a column such as "technician" or "teacher":
Is it chosen by the planner for at least some items?
├── no, never chosen, for any item → reference list (+ a column on the item naming it)
└── yes
├── for every item → decision
└── for most items, some already fixed → decision + pin those items (pins fix ALL their decisions)
5.4 Must or wish?
Would the customer publish a plan that breaks it once?
├── never → Must (hard). Then check: does the data allow it? (§9.3)
└── yes, if needed → Wish (soft), with a weight from the ranking (§4.7)
5.5 Can a rule be modelled?
Find the rule kind in §1 whose sentence matches → is the needed column in the data?
├── yes → write the Rules row (§8.4)
└── no column → add it to the data request
No kind matches → §2.4 → workaround agreed with the customer, or written down as a limitation
6. Problem types — what to ask and collect for each
The wizard offers 9 problem types. For each: the columns its form template asks for (mandatory ones in bold: an import without them is refused with "Required column … is missing"), a model verified on a demo, the specific questions, the usual rules, and the traps. Any extra column is accepted and kept ("new" column) — rules can use it.
The template columns come from PowerAdmin (step 2 = items, step 3 = options).
durationis labelled hours in the form; the engine reads ISO durations (PT2H,PT55M) natively and the import accepts them. Use ISO durations to avoid any ambiguity (§13).
6.1 Job shop — job-shop-scheduling (demos 09, 18)
| Content | |
|---|---|
| Template columns | items: id, name, duration, skills · options: id, name, capacity, skills |
| Verified model (demo 18) | items operations (order, part, customer, operation number, needs, duration, earliest, due, depends_on, ship_early_by); decisions machine (machines: capabilities, down_slots) and slot (slots: startTime, endTime, code) |
| Ask | routing of each part (ordered operations); which machines can do which operation; maintenance and breakdown slots; material arrival; promised dates; key accounts; shift pattern |
| Usual rules | Everything gets a value ×2; No double-booking (machine + slot); Capability must match (needs → capabilities); Respect unavailability (machine down_slots); Prerequisites come first (depends_on, slot startTime); Within the allowed time window (earliest → due, must); same with ship_early_by (wish) |
| Traps | an operation longer than a slot (§2.4); depends_on naming an id that does not exist; due dates before the material arrives (Can this work?: EMPTY_WINDOW); routing chains that cannot fit (CHAIN_TOO_LONG) |
6.2 School timetabling — school-timetabling (demos 01, 12)
| Content | |
|---|---|
| Template columns | items: id, name, duration, skills, priority · options: id, name, capacity; time slots: id, name, startTime, endTime |
| Verified model (demo 12) | items lessons (class, level, subject, teacher, pupils, room_need, daily_group, lv2_block); decisions slot (time) and room; reference list teachers (teaches, service_hours, unavailable, wished_off) |
| Ask | the weekly curriculum per class; teacher attribution (fixed or to decide?); language groups taught in parallel; rooms and what they offer; teachers' days away and wishes; lunch and protected periods |
| Usual rules | No double-booking per pupil group, per teacher, per room; Respect unavailability (teacher, fixed); Capability must match (room_need → offers; subject → teaches); Stay within capacity (service_hours); Grouped items share a value (language block); No repeat on the same day; wishes: home room, wished half-days off |
| Traps | a part-time teacher present fewer days than the hours of a once-a-day subject; parallel groups taught by the same teacher; a whole class and a half group at the same time (use pupil groups 6A:all, 6A:esp) |
6.3 Conference scheduling — conference-scheduling (demo 14)
| Content | |
|---|---|
| Template columns | items: id, name, duration, skills, priority · options: id, name, capacity |
| Verified model | items sessions (track, speaker, kind, needs, earliest, latest); decisions slot, room (offers, closed); reference list speakers (unavailable) |
| Ask | tracks and which tracks must not overlap; keynotes; speakers' presence days; room equipment and seats; workshop parts in order |
| Usual rules | No double-booking (room+slot; speaker; track); Capability must match (needs → offers); Respect unavailability (speaker fixed; room closed); time window (keynote opens the day); precedence (part 1 before part 2); wishes: track keeps its room, speaker's preferred day |
| Traps | one track with as many sessions as slots (AT_RISK, 100 %); a room column closed left empty for every room (now kept as empty) |
6.4 Employee rostering — employee-rostering (demos 05, 15)
| Content | |
|---|---|
| Template columns | items: id, name, startTime, endTime, duration, skills, priority, deadline, location, demand · options: id, name, availability, skills, capacity, hourlyRate, location |
| Verified model (demo 15) | items positions (ward, role, shift, date, needs, groups, staffing); decision staff (role, qualifies, contract, max_shifts, on_duty, leave, asked_off, prefers) |
| Ask | every position to staff per day and shift (one row per person needed); qualifications; contracts (max shifts in the period); leave; requests; agency staff rules; rest after nights |
| Usual rules | Every position staffed; Capability (role/ward/skills; on duty that day); Minimum rest (11 h between two shifts); Limit per period (48 h a week); Days in a row (at most 3); Stay within capacity (max_shifts); wishes: hospital staff before agency, requested days off, no nights for those who asked |
| Traps | a shift needing 3 people = 3 rows; daily/weekly maxima (§2.4); the template asks for availability on people — if the customer gives leave as dates, convert to the slot/day codes the rule compares |
6.5 Maintenance scheduling — maintenance-scheduling (demos 07, 13)
| Content | |
|---|---|
| Template columns | items: id, name, location, duration, skills, priority, deadline, startTime, endTime · options: id, name, location, skills, capacity, availability, hourlyRate |
| Verified model (demo 13) | items jobs (client, zone, skill, type, duration, priority, latest, target_by, preferred_tech); decisions technician, slot (half-days); technicians: zones, skills, status, absent |
| Ask | jobs of the period (planned and breakdowns); skills and zones of technicians; absences; client access windows; surveys before installations; key-account preferred technician; subcontractors |
| Usual rules | No double-booking (technician per half-day); Capability (skill; zone); Respect unavailability (absent); time window (access, deadline); precedence (survey first); wishes: breakdowns early, usual technician, own staff before subcontractors |
| Traps | Monday absences making the week impossible (NOT_ENOUGH_PLACES on "one job per half-day"); jobs longer than a half-day |
6.6 Cloud optimisation — cloud-optimization (demos 08, 17)
| Content | |
|---|---|
| Template columns | items: id, name, duration, skills, priority · options: id, name, capacity, skills |
| Verified model (demo 17) | items vms (service, tier, vcpu, memory_gb, needs); decision server (cpu, memory_gb, features, down) |
| Ask | each workload's CPU and memory; required features (GPU, compliance); replicas that must be on different servers; servers down or in maintenance |
| Usual rules | capacity ×2 (cpu, memory_gb with load columns); Capability (features); No double-booking by service (replicas apart); Never use protected options (server down); wish: keep special servers free |
| Traps | replicas count > servers with the feature (impossible); units mixed (GB vs MB) |
6.7 Task assignment — task-assignment (demos 04, 11, 16)
| Content | |
|---|---|
| Template columns | items: id, name, duration, priority, skills, deadline, startTime, endTime, location, demand · options: id, name, skills, capacity, hourlyRate, availability, location |
| Verified model (demo 16) | items packages (workstream, phase, needs, home_squad, depends_on, earliest, latest); decisions squad, week; squads: skills, off_weeks |
| Ask | the work items and their skills; dependencies; milestones; teams and their capacity and holidays; preferred team per workstream |
| Usual rules | No double-booking (squad per week); Capability; Respect unavailability; precedence; time window; wish: workstream keeps its lead team |
| Traps | a team needed by more items than it has weeks; dependency loops (DEPENDENCY_LOOP) |
6.8 Vehicle routing — vehicle-routing (demo 06)
| Content | |
|---|---|
| Template columns (sequence mode) | items: id, name, location, duration, priority, demand · options: id, name, startTime, capacity, location |
| Verified model | items visits (location, required_skill, service_duration, time windows, priority); decision itinerary (kind sequence) on vehicles (skills, startTime, endTime, capacity); computed values position, startTime, endTime along the route (Setup rows Computed value) |
| Ask | visits and service times; time windows; vehicle shifts and capacity; skills needed at the customer |
| Limits | travel times between locations are not computed from addresses; the demo sequences visits with service durations only. The rules on sequence plans are limited (Everything gets a value, Minimise a number); check §2.4 before promising routing optimisation |
6.9 Generic — generic
Use it when no type fits. Template columns: items id, name, duration, priority, skills · options id, name, skills, capacity, hourlyRate, availability, location. Everything else is identical. Demos 19 (exams: 3 decisions) and 20 (operating theatre: 4 decisions) use their own type names and show models with 3 and 4 decisions.
7. Data discovery and the Excel inventory
7.1 The inventory table (fill one row per data element before building anything)
| Data element | Business meaning | Source system | Owner | Format today | Granularity | Refresh | Mandatory? | Workbook sheet.column |
|---|---|---|---|---|---|---|---|---|
| Operation id | one routing step of a work order | ERP | production planner | text PO-4102-1 | per operation | daily | yes | operations.id |
| Needs | machine capability required | ERP routing | methods engineer | text milling | per operation | on change | yes (rule) | operations.needs |
| Machine downtime | planned maintenance slots | maintenance tool | maintenance lead | dates | per half-day | weekly | if the rule is used | machines.down_slots |
Mark each element mandatory (a rule or the template needs it), optional (improves the plan) or not needed.
7.2 Questions about existing files
- "Where does this information live today? Excel, ERP, HR tool, paper?" — ask to see the file.
- "Who updates it, and how often?" — the owner becomes the handover contact for that sheet.
- "Is there one row per item, or one row per something else?" — e.g. one row per order with "3 operations" in a cell must become 3 rows.
- "Are ids stable? Do two files use the same ids?" — joins between files fail on ids written differently (
T01vsT1). - "Are there hidden rows, merged cells, colour codes that carry meaning?" — colours and merged cells are lost on import; turn them into columns.
- "Is the file complete for the period, or is part of it in someone's head?" — write the missing part down now.
7.3 Reusing customer files
- A customer sheet can be imported as it is in steps 2-3 when its first row holds the column names and each row is one item. Column names can be the template's field names or labels (case and spaces ignored); unknown columns are kept as extra properties.
- Prefer copying the columns into the PowerSolver workbook (one sheet per list, named like the list), so that one file carries the whole plan and Fill all steps now works.
- Keep the customer's original file untouched; record in the inventory which columns were copied and transformed.
8. Filling the workbook
Start from Download workbook template (wizard step 1) — it gives a worked example (3 jobs, 2 technicians, 2 slots, 5 rules) when no plan is loaded — or from the demo workbook of the customer's type (§6), and replace the data.
8.1 Setup sheet, row by row
Columns: Part, Name, Label, Decision, Kind, From, Formula. First row = these headers.
| Part | Name | Label | Decision | Kind | Mandatory | Notes |
|---|---|---|---|---|---|---|
| Problem type | job-shop-scheduling | yes | one of §6; another value works but shows its own card | |||
| Plan name | Week 48 machining plan | no | ||||
| Items to plan | operations | Operations | yes (one row) | Name = the items sheet's name; letters, digits, _, starting with a letter | ||
| Decision | machines | Machines | machine | resource | yes (1-4 rows) | Name = options sheet; Decision = the id rules use; Kind resource / time / sequence |
| Decision | slots | Time slots | slot | time | ||
| Reference list | teachers | Teachers | no | |||
| Computed value | startTime | sequence only | From previous, host; Formula previous?.endTime ?? host.startTime (copy demo 06) | |||
| Time limit | 120 | recommended | seconds, 1-600 | |||
| Construction / Search / Sort items by | FIRST_FIT … | no | leave out unless advised |
Bad: Items to plan | Operations list (space: refused); two Items to plan rows; a Decision without Kind (read as resource — wrong for a time decision: the calendar views need time).
8.2 List sheets (steps 2 and 3)
- Name the sheet exactly like the list in Setup (
operations, notOperations 2026). - First row = column names; first column =
id, unique in the sheet, never empty. - One row per item / option. No merged cells, no subtotal rows, no blank rows in the middle.
Value formats (the import converts exactly as the engine reads):
| Kind of value | Write | Good | Bad |
|---|---|---|---|
| Text | as is | milling | Milling (trailing space and capital: does not match milling) |
| Number | a number cell or 7.5 / 7,5 | 40 | 40 h |
| Yes / no | TRUE / FALSE (also yes/no, oui/non, 1/0) | TRUE | x in some rows, empty in others |
| Date-time | 2026-11-23T06:00 or an Excel date cell | 2026-11-23 06:00 | 23/11 (no year, no time) |
| Duration | ISO-8601 | PT2H, PT55M | 2h, 120 without stating the unit |
| List | comma-separated in one cell | milling, turning | one value per column (skill1, skill2) |
| Reference to another row | its id | MA-2 | the person's name Mme Roux |
Empty cells: an empty cell means "no value" — an empty needs = no requirement; an empty unavailable = always available. A column with a name but no value in any row is kept, empty, on every row (a rule may read it).
8.3 Pins and replanning columns
For an item already decided: pinned = TRUE and one column per decision id with the decided option id (e.g. machine = F2, slot = Mon-3). All decisions of a pinned item must be filled. To keep changes small in a replan, add previous_machine, previous_slot and wishes Honour preferences (entity_property previous_machine, value_property code) — as demo 18 problem.wednesday.
8.4 Rules sheet (step 4)
Columns: Rule, Must / Wish, Weight, Kind, then one column per setting. Write it in the wizard (step 4) and use Download rules (Excel), or copy the Rules sheet of the matching demo. Example (job shop):
| Rule | Must / Wish | Weight | Kind | variable_field | fields | entity_property | value_property | slot_field | slot_property | unavailable_property |
|---|---|---|---|---|---|---|---|---|---|---|
| Every operation has a machine | Must | 100 | Everything gets a value | machine | ||||||
| One operation per machine at a time | Must | 100 | No double-booking | machine, slot | ||||||
| Machine can do the operation | Must | 100 | Capability must match | machine | needs | capabilities | ||||
| Machine not in maintenance | Must | 100 | Respect unavailability | machine | slot | code | down_slots | |||
| Key accounts ship a day early | Wish | 3 | Within the allowed time window | slot | startTime |
Each setting names a decision id or a column of the step 2-3 sheets. The meaning of every setting is in the workbook's How to fill sheet and RULE_REFERENCE.md.
8.5 Loading
Wizard step 1 → Load a plan from Excel → the dialog lists what each step will import → Fill all steps now (all or nothing; every problem listed by sheet, row and column) → step 7. Or Go through the steps one by one and press Import on each step's banner (useful in front of the customer).
9. Validating the data before planning
Run 9.1-9.3 in Excel, 9.4-9.5 in the wizard. Do not solve before gate 1 (§12.1).
9.1 Structure checks (Excel)
| # | Check | How | If wrong |
|---|---|---|---|
| 1 | Every sheet named like its Setup list | compare names | rename the sheet |
| 2 | id unique in each sheet | Excel Remove duplicates on a copy, or COUNTIF(A:A,A2)>1 | ask the owner which row is right |
| 3 | No empty id | filter blanks | complete or delete the row |
| 4 | Every reference exists | COUNTIF(machines!A:A, x) for each depends_on, teacher, pinned value | correct the id; the engine refuses unknown ids |
| 5 | Same spelling everywhere | sort unique values of needs and of capabilities side by side | align spellings (5-axis vs 5ax) |
| 6 | No merged cells / subtotal rows | inspect | unmerge, delete |
9.2 Value checks
| # | Check | Typical error |
|---|---|---|
| 1 | Dates: all YYYY-MM-DDTHH:MM, same time zone, in the planning period | dates of last year; US vs European day/month |
| 2 | earliest ≤ due on every item | reversed columns → EMPTY_WINDOW |
| 3 | Durations: one unit, ISO | minutes and hours mixed |
| 4 | Numbers really numbers | 40 h, N/A |
| 5 | Lists comma-separated | ; or line breaks |
| 6 | Slot codes in unavailability lists match the slot list's code column | Mon AM vs Mon-AM |
9.3 Arithmetic — is it even possible? (do it before Can this work?, to discuss with the customer)
| Check | Formula | Example |
|---|---|---|
| Demand vs capacity per capability | items needing X ≤ (options offering X) × (slots each is available) | 42 exams need halls of 220+ seats; 9 such halls × 4 free slots = 36 → impossible |
| Per resource with a limit | sum of loads of the items fixed on it ≤ its capacity | teacher with 12 h service given 15 h |
| Chains | sum of durations along a depends_on chain ≤ due − earliest | 4 operations of 2 h due 4 h after arrival |
| Groups | items of a group that may not overlap ≤ slots available to the group | a track with 22 sessions for 21 slots |
If demand exceeds capacity, say it on day one: the right plan leaves items unplanned, and the customer must decide (add capacity, relax a rule to a wish, accept unplanned items).
9.4 Wizard import checks
Each import shows the problems by row and column; Import stays disabled until the file is corrected. Typical: "Required column "duration" is missing" (§6 template), "PT2H" is not a number (only for templates that predate ISO support — reload the wizard), "ID is empty", "ID … is already in the list", "Column 7 has values but no name".
9.5 Can this work? (step 7)
| Verdict | Meaning | Action |
|---|---|---|
| Red — No valid plan is possible | certain: some must-rule cannot hold with this data | read each finding; fix the data or turn the rule into a wish; check again |
| Amber — Possible, but some resources are nearly full | a resource is used ≥ 85 % | consider margin; use Try a quick plan (20 s) |
| Green — No problem found | the checks found nothing; not a guarantee | plan it |
| "The problem cannot be read" | a data error (wrong column, unknown id…) | each message names the step, rule and setting to correct |
Findings and what to do:
| Finding | Typical cause | Fix |
|---|---|---|
| Items must start after X and before Y, but X is later | reversed or wrong dates | correct the dates |
| Items wait for each other in a loop | depends_on cycle | remove one dependency |
| Fixed (pinned) items already break a must rule | two pinned items on the same machine and slot | unpin or correct |
| Items have no option left | no option has the needed capability, or all are unavailable | add an option or correct the need |
| Every suitable option is unavailable at every usable time | unavailability too wide | free a time or add an option |
| Items can only use N places; they need M | demand > capacity (§9.3) | add capacity, widen options, move items |
| Chain does not fit in its time window | routing too long for the due date | widen window, shorten chain |
| The data itself breaks a must rule | an item's fixed resource lacks what it needs, or is over capacity | correct the attribution or the capacity |
| A resource is nearly full (amber) | ≥ 85 % used | margin, or accept a longer search |
10. Exceptions and edge cases
Ask each question; record the answer and the model decision.
| Topic | Ask | Model |
|---|---|---|
| Public holidays, closures | "Which days are closed in the period?" | leave those slots out, or list them as unavailable for every option |
| Partial availability | "Who works part time, which half-days?" | unavailability list per person |
| Temporary staff, subcontractors | "Can you add people? At what cost?" | extra options with a wish "own staff first" (demo 13) |
| Overtime | "Can people exceed their contract?" | capacity as a wish, or a higher capacity with a cost |
| Emergencies / rush items | "What happens with an urgent order?" | priority + time window; replan with pins (§11.5) |
| Items that may stay unplanned | "Is it acceptable to leave something out?" | Everything gets a value as a wish with a high weight |
| Fixed people per item | "Is the teacher/technician already decided?" | reference list (§5.3) |
| Several people per item | "Does a job need two technicians?" | one row per seat, with a common group column + Grouped items share a value on the time (so the seats are at the same time) |
| Items longer than a slot | "Any job longer than the slot?" | §2.4 |
| Travel | "Do travel times matter?" | zones as capabilities (demo 13); routing (§6.8) |
| Fairness | "Must work be shared evenly?" | Balance the load |
| Preferences | "Do people state wishes?" | preference / skill_match as wishes |
| One-off weeks | "Is this week special?" | plan it as its own period |
Questions to raise before proceeding (do not build until answered): who decides when two wishes conflict; what to do with unplanned items; whether the plan may change once published, and how much; which data owner corrects errors.
11. Troubleshooting
11.1 Recognising unclear requirements
| Signal | Ask |
|---|---|
| "Usually", "normally", "if possible" | "And when it is not possible, what do you do?" → wish |
| "It depends" | "On what? Show me two cases" → a column or an exception |
| A rule with no data behind it | "Where is that written today?" |
| Two people give different rules | stop; get the decision maker to arbitrate |
| "Like last time" | ask for last time's file |
11.2 The plan is not valid (red on Results)
- Read Check before you use it: which must rule is broken, how many times, for which items.
- Run Can this work? again (step 7): red findings name the cause in the data.
- If it is green and the plan is still not valid: give more time (step 6), or use Try a quick plan to see whether a valid plan exists at all.
- Still not valid: turn one must rule at a time into a wish (step 4) to find the one that cannot hold, then find the data rows behind it; turn the rule back to must afterwards.
11.3 Data errors on load (The problem cannot be read)
Each message has a plain title, the engine's exact sentence and where to correct it ("Correct it in step 4: Rules › rule 'No clash' › setting 'group_property'"). Typical: a rule names a column no item has (spelling), a value has the wrong kind (text in a number column), an id is used twice, a decision has no options.
11.4 Comparing with the customer's own plan
Put their plan into the workbook as pins (every item pinned with their values), plan it: the score is their plan measured by our rules. Then plan without pins. Compare in Results → Rules & score, and with Compare Solutions.
11.5 Replanning after a change
Copy the published plan's decisions into the items sheet (Results → Export to Excel gives every item with its decisions): pin what is done, add previous_* columns and the "keep" wishes for the rest, apply the change (absence = unavailability, breakdown = down slots, rush order = new row), load, plan. Results → Changes compares with the previous plan (same browser tab, or load the baseline problem and solution files). The wizard has no one-click "replan from this plan" yet (§13).
11.6 Performance
Iterate with 30-60 s; use the long time limit only for the final plan. Above ~1,000 items, test the time first.
12. Acceptance gates
12.1 Gate 1 — data ready for planning (all must be ticked)
- ☐ Interview sheet complete (§4.11), signed by the customer planner.
- ☐ Every must rule mapped to a rule kind with its columns; every unmodelled rule listed as a limitation.
- ☐ Inventory table complete; every mandatory element has a source and an owner.
- ☐ Workbook: Setup complete; every sheet named like its list; ids unique and non-empty.
- ☐ §9.1 and §9.2 passed; §9.3 arithmetic discussed with the customer.
- ☐ Fill all steps now imports without any problem.
- ☐ Can this work? is green or amber, or every red finding is understood and accepted by the customer.
- ☐ The customer's own plan for the period is in hand.
12.2 Gate 2 — plan ready for review
- ☐ Results: "Ready to use" or every red point explained.
- ☐ Every must rule at 0 (Rules & score).
- ☐ Wishes compared with the customer's plan.
- ☐ Problem, solution and workbook saved with the date in their names (§ handover guide §7).
13. Known gaps and escalation
13.1 Gaps found while writing this guide (check before promising)
| Gap | Impact | Workaround |
|---|---|---|
Problem type names differ: the wizard offers job-shop-scheduling, cloud-optimization; demos and AI templates use job-shop, cloud-capacity, workorder-assignment, … | a demo loaded shows its own card; the AI templates of step 0 may not match the wizard card | use the wizard names in new workbooks |
| No "add a reference list" button in step 3 | reference lists come only from a workbook or a problem file | declare them in the Setup sheet |
| No one-click replan builder | replan files are prepared by hand (§11.5) | copy decisions from Export to Excel |
| A pin fixes all decisions of the item | cannot fix only the technician and free the time | make the open choice a decision |
duration: the form says hours; the Results page counts a plain number as minutes | inconsistent display of plain-number durations | use ISO durations (PT2H) |
| §2.4 rule families | some customer rules cannot be modelled | agree a workaround or record a limitation |
| User roles (admin, user, analyst, viewer) exist in PowerAdmin, but the wizard does not restrict actions by role | every signed-in user can plan | agree usage rules with the customer |
13.2 Escalation
Escalate to the PowerSolver product team when: the engine answers "internal error"; a red finding looks wrong for the data; a solve never finishes; a customer rule is essential and not in §1/§2.4. Send: the workbook, the problem_*.json and solution_*.json files the wizard downloaded, a screenshot of the message, and the step you were on. Never send customer personal data outside the agreed channel.