Quotations
Build, send, and track price quotes — catalog-driven line items, bilingual templates, secure share links, and one-click conversion to a sales order.
Quotations
The Organization → Quotes page is where your team prepares a priced proposal for a client or payer, sends it as a secure link, and turns an accepted quote into a billable sales order. Quotes are gated by the Quotes module — enable it under Administration → Modules if you don't see the menu item.
Browsing the quotes list
The list page works just like the Clients page, so the toolbar will feel familiar:
- Search the number, recipient, or title from the box on the left; results update as you type.
- Views — switch between Cards, Table, and Grid with the toggle on the right. Table view supports drag-to-reorder, show/hide, and sortable columns, including clickable Client and Created by columns that jump to the client's record and the staff member who created the quote.
- Filters — click Filters to open the controls panel (it's collapsed by default). The Status filter is multi-select: tick any combination of statuses (Draft, Sent, Accepted, …) to narrow the list, and Clear all to reset. Below it are Currency, Client (searchable, by name or medical record number), Created (a date range), Total (a minimum and maximum), Template, and Created by; the button shows how many filters are active.
- Dates carry a time — the Created column shows the hour the quote was written, not just the day.
- Refresh re-pulls the list and shows when it was last updated.
Quick views
Above the list sit five one-click views: All, Drafts, Awaiting the client, Pending review and Accepted. They are the same thing as picking statuses in the filter panel — they exist so the queue you work from (the review queue especially) is in front of you rather than three clicks inside a panel.
Opening one quote
Each row's ⋯ menu opens on the actions that quote's status allows:
- View details opens the quote's own page — its answers to the template's questions, its line items and totals, and tabs for Versions, Activity (who did what, and when) and Notes. Clicking the row opens the same content in a side drawer, with Open full page to go through, and double-clicking a row goes straight to the page.
- The page carries the same ⋯ menu the row does, so sending, sharing, accepting, duplicating, converting or archiving a quote never means going back to the list first. Duplicating from there opens the copy.
- Edit is offered while the quote is a Draft or Revised — sending a quote freezes its version, so a sent one has to be reopened with Revise first. The edit page shows the document as it will read beside the form, the same live preview the new-quote form has.
- The lifecycle actions sit in the same menu — Send, Accept, Decline, Reject, Expire, Revise — so changing a quote's status is one click from the list. Send and Revise ask first and say what they do, because neither word carries its consequences: sending assigns the number and freezes a version (and emails nobody), and revising reopens the quote while leaving the copy the client already has untouched.
- An accepted quote can be reopened with Revise too — for the customer who agreed and then asked for a different room type — up until it has been turned into a sales order or an invoice. After that the quotation is behind a document someone is being billed against, and it can only be duplicated.
- Archive files the quote away. It is available on anything that is not in flight (a Sent or Pending review quote has to be revised or closed first), and archived quotes live under Quotes → Archived quotes, where Restore brings one back.
Acting on several quotes at once
Tick the checkboxes on one or more rows and a floating action bar appears (drag it anywhere on screen by its handle). From there you can:
- Switch scope between This page and All pages — "All pages" selects every quote matching your current filters, even ones not yet loaded, with Select all confirming the full count.
- Update status — pick a lifecycle action (Send, Accept, Decline, …) to apply to every selected quote. Quotes that can't make that move from their current status are skipped and reported.
- Delete — soft-deletes the selected quotes. Only drafts and closed quotes can be deleted; in-flight ones are skipped and reported.
Creating a quote
Click New quote to open the authoring page. It collects everything a proposal needs:
- Authoring language — toggle EN / AR at the top. Every translatable field below (the title and each line description) is stored per language, so you can write the quote once in English, switch to Arabic, and add the translation without losing what you typed. Arabic inputs render right-to-left.
- Title — the heading the recipient sees.
- Client — search and link the client the quote is for. The link carries through to the sales order on conversion.
- Attending doctor — optional; recorded on the quote for reference.
- Recipient name / email — optional, for a quote addressed to someone who isn't a registered client.
- Template — pick a layout (see Templates). Selecting one
reveals the custom fields the template defines, each with its placeholder,
help text, and unit; required fields are marked with a
*and must be filled before you can create the quote, and any default values are prefilled. - Line items — see below; a running subtotal is shown.
- Currency — starts at your clinic's base currency; a catalog pick sets it from the item. The list shows the base currency and the currencies turned on in Organization setup.
- Valid until — optional expiry date for the quote.
Switch to the Preview tab at the top to see the quote rendered with your chosen template and current data before you create it.
Catalog-backed line items
Each line can be typed by hand or filled from your catalog. Use the Search catalog box, then open a line's dropdown to pick an active Service or Product. The pick fills the description, unit price, and tax rate, and binds the line to that catalog item — which is what later lets the quote convert into a sales order. Choose Custom line to type a free description and price instead. Add as many lines as you need with Add line; totals, tax, and any client/insurer split are computed by the server.
What the Activity tab records
Every entry names what moved, not just that something did:
- a status change reads Sent → Revised, with the reason when one was given;
- an edit lists each field it changed, before → after — the title, the currency, the validity date, the total, and each template answer under its own label ("Hospital: ABC → DEF");
- each entry names who did it and the role they held;
- quotes migrated from MediSync V1 show the description V1 recorded.
Long edits are capped at twelve changes per entry so one save cannot bury the rest of the history.
Quotes on a client's page
A client's record has a Quotes tab listing every quote written for that client — number, title, status, total and date — with New quote to start one already linked to them.
Sending and sharing
- Send issues the quote: it gets a permanent quote number, an immutable version snapshot is frozen, and a PDF is queued. It does not email anyone — sharing is the separate action below. A number is allocated on the first send and never reused, which is why a draft (a fresh duplicate especially) shows "Assigned when sent" where its number will go.
- Share mints a secure, single-use link (
/q/…) and copies it to your clipboard. The link is backed by a hashed token, can carry an optional password, and expires. The recipient sees a clean, branded view with no internal data and can accept or decline from there.
Letting the client fill the quote in
If the template asks questions your team left blank, the shared page turns into a short form: Complete your details lists only the questions the client is allowed to see and that nobody has answered yet — anything your staff already filled stays hidden. The client answers on their own device and presses Submit details.
Submitting is a one-off: the form disappears, the client is thanked, and the quote updates with their answers — including its total, if the options they chose carry prices. Re-opening the link shows the updated quote, not the form again. This is the same flow as MediSync V1's "share as a form".
Duplicating
Any quote — in any status — has a Duplicate action. It clones the title, recipient, template, field values, currency, and every line item into a brand new draft that starts its own lifecycle (no number, no share links). Handy for recurring proposals or for revising a sent quote without disturbing the original. The copy's title is suffixed with “(copy)”.
Converting to a sales order
Once a quote is Accepted, a Convert action appears. Converting:
- Creates a draft sales order from the quote's catalog-bound lines.
- Records the link back on the quote and moves it to Converted. The quote's summary then links to the order, so there is a way back to what it became.
The rest of the cycle lives in Products & Services → Sales orders: confirming the order opens its invoice, writes the billing lines and decrements stock; from there it can be fulfilled or cancelled. Convert to invoice is the shortcut past the order for a quote that is only services — it bills the quote's own lines, links the invoice on the quote, and ends the quote at Converted exactly as the order route does.
Pick the branch the order belongs to. Only lines bound to a Service or Product transfer — a sales-order line must reference a catalog item — so any custom, free-text lines are listed as “won't transfer”. Re-add those from the catalog first if you need them on the order. Confirming the resulting sales order (in Products & Services → Sales orders) opens the invoice and posts its line items, so conversion is also the start of the billing trail.
Appointments: a quote does not auto-book a visit — scheduling needs a procedure, a slot, and resources a quote doesn't carry. Book the appointment in the calendar and link it from the order if needed.
Templates
Open Quotes → Templates to manage layouts. System templates ship read-only; Fork one to get an editable copy, or New template to start your own. Creating or editing a template opens a dedicated editor page with:
- Form fields — the inputs an author fills when using the template. Each
field has a key, a type (text, number, currency, date, a select
with options, a repeater, or a computed total), a bilingual
label, a placeholder, help text, a suffix (a unit such as
%orkg), a default value, and a required flag. The new-quote form renders all of these, and required fields block creation until filled.- A repeater field is a list of rows the author adds (like the legacy
"services" field). Define the row columns (each a key + type +
label;
selectcolumns get their own options) and the add-row button label. A column of type service is a catalog picker: the author searches your services, and choosing one writes its name into that column and its price into the row's number column — no typing a service and its price by hand. On a quote the author clicks Add row to enter as many rows as needed, and the template body renders them as a table. - Select options can carry a price. A computed field is read-only on the quote and live-sums every selected option's price plus each repeater's number columns — the auto-calculated total from the legacy template. Give your option dropdowns prices and add a computed field for a running total. Set the computed field's base currency and point it at the dropdown that holds the total currency; the total is then converted live using daily exchange rates (refreshed by a background job from an FX provider and stored in the database), so picking a different total currency reprices it. A manual rate you pinned in Organization setup replaces the daily rate for that currency.
- Every label is translatable. Use the EN / AR toggle at the top of the field builder to author each field's label, placeholder, help text, suffix, option labels, and column labels per language; the quote form shows them in the author's chosen language.
- A repeater field is a list of rows the author adds (like the legacy
"services" field). Define the row columns (each a key + type +
label;
- Body — built two ways via the Builder / HTML tabs:
- Builder (drag and drop): drag blocks from the palette into the canvas — Quote header, Recipient, Heading, Text, Field value, Line items, Totals, Divider, Spacer — or click one to append it. Drag the grip on a block to reorder, and use its inline settings (e.g. heading level, which form field to show). The document regenerates as you go.
- HTML: the generated Handlebars, editable directly for advanced layouts.
Helpers:
{{t … locale}},{{money cents currency}},{{date …}},{{bps …}}; field values render via{{fieldValues.key}}. Output is sanitized. - Preview: the body rendered with sample data — including a sample computed total — so you can check the layout as you edit (no save needed).
Your block layout is saved with the template, so re-opening it returns you to the builder. Use Preview on the list to render a template with sample data before using it on a real quote.
Quote settings
Quotes → Settings holds the preferences that apply to every new quote:
- Default validity — how many days a new quote stays valid.
- Quote numbering — the prefix, the next number, and the format.
The format is built from
{PREFIX},{ORG}(your organization's short name),{YYYY},{YY},{MM}and{SEQ}(the counter, which is required), and the page shows the exact number the next quote will get. A number is allocated when a quote is sent, and never reused. - New quote defaults — the default template a new quote starts on, and how many days a share link lasts.
Analytics
Quotes → Analytics reports pipeline health — totals, conversion and acceptance rates, average value, the monthly trend, and a breakdown by status and by currency. Pick the period at the top: Last 30 days, Last 90 days, Year to date, Last 12 months, or All time.
Bookable resources & procedure roles
Add doctors, staff, rooms, and equipment to your resource catalogue, then define which roles each procedure needs and which one is the primary role.
Leads (sales pipeline)
Track prospective clients from first contact through conversion, see where they came from, and win back patients who've drifted away.