Requests for Quotation (RFQs)
An RFQ is a structured package of requirements sent to one or more vendors so they can propose prices and terms. Waqti supports the full internal lifecycle: drafting, issuing, collecting quotes (including manual upload), evaluation with scoring, award, cancellation, and PDF output.
Prerequisites
RFQ creation checks procurement settings: if RFQ is not enabled for your tenant, create throws an error. Minimum vendor counts for issue also respect tenant defaults (for example rfq_min_vendors) unless overridden per RFQ.
Creating an RFQ
Use RFQs → Create. Required and optional fields include:
| Field | Notes |
|---|---|
| Title | Required. |
| Description | Optional (up to 2000 characters). |
| Department / Project / Spend category / Request type | Optional classifiers. |
| Due date | Required; must be today or later. |
| Currency | Required (ISO-style code, max 3 characters in validation). |
| Estimated budget | Optional. |
| Minimum quotes required | Optional integer 1–10; affects whether you can issue the RFQ. |
| Terms and conditions | Optional long text. |
| Delivery requirements | Optional (up to 1000 characters). |
| Payment terms | Optional (up to 500 characters). |
| Items | At least one item: item name, quantity; optional description, specifications, unit, estimated unit price. |
| Vendor IDs | Optional on create; vendors can also be added later on the RFQ. |
Saving creates a draft RFQ and redirects to its detail page.
Managing vendors
- Add vendor — Allowed while status is draft, issued, or collecting. Duplicate vendors are rejected.
- Remove vendor — Only in draft; once issued, removals are blocked from this action.
Before issue, the count of invited vendors must be at least min_quotes_required.
Issuing the RFQ
Issue transitions a draft RFQ to issued, stamps issue date, and marks invited vendors as sent via manual on the issue path. Alternatively, emailing vendors (below) can move a draft to issued when the first email succeeds.
Sending to vendors (email)
You can send the RFQ to one vendor or to many:
- Each send generates a vendor-specific PDF, stores it, and attaches it to an RfqInvitation email.
- The vendor must have contact_email; otherwise the send fails for that vendor.
- If the vendor was not on the RFQ, they are added automatically before sending.
- Custom message (optional, up to 2000 characters) is included in the email context.
Bulk send reports partial success if some vendors lack email or mail fails; a successful batch updates issued when the RFQ was still draft and at least one send succeeded.
PDF generation and download
Download PDF streams a generated document (optionally scoped to a vendor_id query parameter for a vendor-tailored pack). Files are named like RFQ-{number}[-{vendor code}].pdf. Access is tenant-scoped.
Collecting quotes
While status is issued or collecting, authorized users can upload a quote for an invited vendor. The payload includes:
- Vendor, quote number, quote date, optional valid-until
- Subtotal, optional tax and discount, total, currency
- Optional delivery, lead time, payment, and warranty terms
- Per-line mapping to RFQ items:
rfq_item_id, quoted unit price, quoted quantity, optional lead time, can_supply, notes
If the RFQ was issued and this is the first quote, status may move to collecting automatically. A second quote from the same vendor is rejected (edit the existing quote in product flows that support it).
Starting evaluation
Start evaluation is available in collecting when hasEnoughQuotes() passes. Evaluation unlocks the comparison matrix and per-quote scoring.
Scoring quotes
For each VendorQuote in evaluating status, evaluators submit:
- Technical score — 0–100
- Price score — 0–100
- Optional notes (up to 1000 characters)
The service applies default weights (60% technical, 40% price) unless your deployment changes them.
While evaluating, the RFQ detail can show a recommended quote from getRecommendedVendor to support decision-making.
Awarding
In evaluating, award requires a quote_id belonging to the RFQ and optional justification. The winning quote is selected; other quotes are marked rejected with a standard reason. RFQ status becomes awarded and decision metadata is stored.
Converted to Purchase Order
The RFQ model supports a purchase_order_id link. When procurement creates a PO from an awarded RFQ, the RFQ may move to converted_to_po in your workflow (check the PO creation path in your tenant). Cancel is not allowed once converted_to_po.
Cancellation
Cancel accepts an optional reason (up to 1000 characters). Not permitted for awarded, converted_to_po, or already cancelled RFQs.
Deleting a draft
Only draft RFQs can be deleted; items and vendor links are removed with the RFQ.
Listing and filters
The index supports search (RFQ number or title), status, department, overdue (issued/collecting with due date in the past), and sorting. Summary tiles show totals, drafts, collecting (issued + collecting), evaluating, and awarded counts.
Status reference
| Status | Typical meaning |
|---|---|
| draft | Editable; not yet sent. |
| issued | Formal issue date set; vendors notified or marked sent. |
| collecting | Quotes are being gathered. |
| evaluating | Scoring and comparison active. |
| awarded | Winning vendor chosen. |
| converted_to_po | Linked to a purchase order. |
| cancelled | Stopped without award. |
Related topics
- Purchase Requisitions — optional source for RFQ line content when converting from an approved PR.
- Purchase Orders — fulfillment after award.