Product Requirements Document

Turun Suurpesula Sales Proposal Tool — v2

Rebuilds the TSP proposal generator so pricing, VAT, and selling points adjust to the customer's industry — and every proposal sent gets kept, redownloadable later.

Status✓ Approved (design)
OwnerVaria
Date2026-09-09
Replacestarjous‑turunsuurpesula.askelventures.com

01Problem

Melers Oy and Turun Suurpesula (TSP) sales reps need to produce accurate, branded proposals fast. TSP serves distinct industries — hotels, care homes, damage restoration, workwear, textile rental — each with its own pricing, VAT treatment, and selling points. A generic one-size proposal doesn't fit, and the current tool can't represent that.

As a Melers Oy / Turun Suurpesula sales rep, I want to pick the industry I'm proposing to so the pricing and selling points on the PDF are accurate for that customer — without the proposal taking hours to put together.

Constraints from the sales floor: reps sometimes need one-off items not in the standard catalog, sometimes need to tweak a section on the fly, and the whole thing has to stay fast — not a 2-hour job.

02Goals & non-goals

Goals

  • Industry-aware: picking an industry sets pricing, VAT defaults, and selling points automatically
  • Accurate, on-brand A4 PDF output, Finnish or English
  • Pricing and copy editable by an admin, no code deploy
  • Every proposal saved and redownloadable exactly as sent

Out of scope (this rebuild)

  • Login / access gate — deferred to Phase 2
  • Live sync against the B2B Hinnastot Google Sheet — pricing lives in an admin-editable catalog instead
  • Server-side PDF generation — reuse browser print → save as PDF
  • Languages beyond Finnish / English

03Slide-by-slide requirements

Seven slides in the proposal deck, in this order:

1

Cover

  • Turun Suurpesula logo — not the generic Melers wordmark
  • Headline "Tarjous" + customer company name
  • Sales rep name + contact; decision-maker name + contact; date
2

Asiakkaan tarve free text

Rep-written summary of what the customer said they need. A light hint box beside the field lists prompts to jog memory — not required fields:

  • Kuinka monta asiakasta, keiden pyykkiä pestään?
  • Kuinka usein pyykille on tarve?
  • Liinavaatevuokraus vai ei?
  • Kuljetussykli?
3

Hinnasto industry-driven

  • Rep selects industry: Hotellit · Palvelutalot · Hätäpesut · Työasut · Vuokratekstiilit · Muu
  • Loads that industry's catalog rows (description + unit price) from the admin-managed pricing catalog
  • Ad-hoc custom rows for items outside the catalog
  • VAT per row: defaults 0% for Palvelutalot, 25.5% otherwise — overridable for mixed cases
  • Optional discount per row: original price struck through, new price shown
4

Prosessimme rep-filled

  • Aloituspäivä, kuljetussykli, vuokratekstiilit (y/n), tarve lajittelulle — all filled per proposal
  • QR/email-tilaus — short static explainer, fixed copy
5

Meistä static

Reused from the current tool: 16 vuotta alalla, 1,2M+ kg pesty, 170 000 kg/v kapasiteetti, Telekatu 6 Turku, Melers-omistus.

6

Miksi me industry-driven

Selling points swap based on selected industry — see table below.

7

Seuraavat askeleet static

CTA proposing a next meeting, warm tone; contact block (rep name, phone, email).

04Selling points by industry

Verified against turunsuurpesula.fi on 2026-09-09 — no invented claims.

IndustrySelling points to use
Palvelutalot ALV 0% as a viranomaisen myöntämä tukipalvelu-oikeus — direct cost saving. Frees care staff from laundry so they focus on care. Meets sosiaali- ja terveydenhuollon tekstiilihuollon vaatimukset. Hygiene bags for contamination risk; individual textile ID marking.
Hotellit Scales up/down with seasonal demand, no fixed minimums. Optional linen rental — no inventory/storage burden. Named account manager, ~2h response. Transparent pricing, no hidden fees. ~2 business days to go live.
Hätäpesut Pickup arranged in 1–2 business days. Quote within 12 hours. Most damage batches ready in 1–2 weeks. Industrial capacity for water/fire/smoke damage. Works directly with insurers and restoration firms. ⚠ Do not claim 24/7 or round-the-clock availability — TSP does not offer this.
Työasut / Vuokratekstiilit / Muu Cross-cutting points: named service manager, flexible pickup/delivery scheduling, volume-based pricing, 16 years operational history.

05Data model

Cloudflare Pages Functions + D1 — same stack as melers-erp / melers-crm-live.

proposals id, created_at, sales_rep, customer_company, contact_name, contact_info, industry, needs_summary, process fields (start date, delivery cycle, vuokratekstiilit, sorting need), language (fi/en)
proposal_line_items proposal_id (FK), description, qty, unit_price, vat_rate, is_discounted, original_price (nullable)
pricing_catalog industry, item description, default unit price, default VAT rate — admin-editable
industry_content industry → "Miksi me" copy, FI + EN — admin-editable, so a correction like the Hätäpesu 24/7 issue never needs a redeploy

06Redownload & admin

History: a proposal list view, filterable by rep / customer / date. Opening a past proposal re-renders it from its stored proposals + proposal_line_items rows — byte-for-byte the same as when created — and the rep hits print/save-as-PDF again. No separate PDF file storage needed.

Admin: a self-serve view, same pattern as buukkaus, for editing pricing_catalog rows and industry_content copy per industry and language. No redeploy required for either.

07Phase 2 — not forgotten

Deferred, explicitly tracked

Login / access gate — Cloudflare Zero Trust OTP, same pattern as the playbook site, scoped to Melers/TSP + Askel emails. The tool ships in v1 without it (same posture as the current tool), but now holds real customer data, so this should not slip indefinitely.