Bulk Documentation
AdministrationMaster data

Manage pricing

Build rate templates, keep a shared service catalogue, ingest per-customer pricelists, and register the accounting codes invoices use, all from one page.

Last updated

The Pricing page is where you set the prices your business charges for work. It gathers four related pieces of pricing data in one place: reusable rate templates, a shared service catalogue, per-customer agreements ingested from pricelists, and the accounting service codes your invoices are matched by. Instead of pricing every job by hand, you define your rates once here and reuse them wherever pricing is needed.

You reach it at Settings › Master Data › Pricing (/settings/master-data/pricing). The page header reads Pricing, with the summary "Reusable rate templates, a shared service catalogue, and per-customer agreements." Below it, a tab strip splits the page into four sections: Templates, Catalogue, Agreements, and Service Codes: each showing a count of what it holds. The tab you are on is remembered in the page address, so you can link straight to a section.

Pricing matrix with Housing finish and Bracket finish baselines and Gotham Rail Works discount and premium rates.
The matrix compares each customer rate with its category baseline. Gotham Rail Works has one discounted rate and one premium rate.

Before you start

Two permission pairs control this page.

The Templates, Catalogue, and Agreements tabs share one permission. Viewing them requires the pricing view permission; creating or changing anything on them: a template, a catalogue service, or an agreement: requires the pricing manage permission.

The Service Codes tab is gated separately. Viewing it requires the service codes view permission; adding, editing, importing, or deleting a code requires the service codes manage permission. Because the two are independent, someone can manage rate templates without touching service codes, or vice versa. If you lack the service codes view permission, the tab still appears so you can find it, but its panel shows a permission notice instead of the list.

In the default roles, Super user, Entity admin, Manager, and Master data hold all four permissions and can do everything on this page. The Invoicing role can view pricing and service codes but not change them. The Operator role can see service codes only. If a control is missing or a save is refused, ask an administrator to grant the permission you need.

The four tabs

Templates: the rate matrix

The Templates tab shows a rate matrix. Each row is a customer, each column is a pricing category (a group of related work such as a test or process), and each cell is that customer's effective price for that category, with the percentage difference from the shared baseline. A rate template is the reusable rate card behind a cell: it bundles catalogue services as line items and adds charges (fixed amounts and percentage uplifts) on top.

Two kinds of template sit behind the matrix:

  • A General baseline is the entity-wide default price for a category. It is the column header, and every customer without their own rate "rides" it.
  • A customer rate overrides the baseline for one customer: a negotiated price. The matrix shows how far it sits above (a premium) or below (a discount) the baseline.

Select a column header to set or edit the General baseline. Select a cell to open that customer's rate; select an empty cell to create one, cloned from the baseline when there is one. Use New category (the page action) or Add category in the matrix to start a new pricing category. The template editor opens in a dialog with a Pricing tab (services, charges, and a live Calculated unit total) and a History tab. Customer rate cards are named automatically from the category and customer and cannot be renamed; only General baselines are named freely. A template that relies on a bundled service that has since drifted or gone missing is flagged as needing review.

Each row under Additional charges has its own Code, Name, and Amount. The code field placeholder is Code…. Add charge adds a fixed charge. When you apply the template, that charge keeps its code on its own billing line and is billed as Manual quantity.

Housing finish pricing template with a £45 setup service, a £15 fixed report charge and calculated £60 total.
The template combines a £45 setup service and a £15 report charge into a £60 unit total.

Catalogue: shared and per-customer services

The Catalogue tab lists your pricing scopes as cards. The General catalogue holds the base rates shared by every customer: the services you offer, grouped into categories, each with its own rate table. Below it, one card per customer shows that customer's negotiated catalogue, measured against the General baseline, with a count of how many services are included. Selecting a card opens its catalogue view, where you add, edit, or remove the services in that scope. Rate templates draw eligible fixed-price and hourly line items from these catalogues. Timed / process hours services are excluded because a template has no production jobs whose time it could price.

Charge from real production time

Use the Timed / process hours pricing model when a service should be billed from time recorded against production jobs. For example, a machining service can charge only for hours recorded on machining steps, even when the order also passes through inspection and packing.

  1. Open the Catalogue tab and select the General catalogue or a customer's catalogue.
  2. Add a service, or edit an existing service.
  3. Under Pricing model, select Timed / process hours.
  4. Enter the Hourly rate / h.
  5. Under Resources (chargeable steps), choose All resources or Selected resources. If you choose selected resources, tick every resource whose job-step time should count.
  6. Under Time sources (charged hours), choose at least one source: Timers (productive time), Manual time entries, Time adjustments, or OEE downtime events.
  7. Check Attachment lines, then select Save service.
CNC machining timed pricing form with a £95 hourly rate, all resources and three selected production time sources.
Timed pricing applies the hourly rate to production time from the resources and sources you select.

The catalogue shows the saved service as per process hour. If you limited it to particular resources, it also shows how many resources count.

Timed and Hourly are different

An Hourly service uses a quantity you type. On an order, inbound document, or invoice draft, its billing rule is Manual quantity. A Timed / process hours service fills its quantity from real production timings on the jobs assigned to that service, under the billing rule Tracked hours. You can inspect the hours and amount for each job from the production order.

The amount updates when relevant production time changes: for example, when a timer stops, someone records manual time, a time adjustment is saved, or an included OEE downtime event closes. Only time from the sources and resources selected on the catalogue service is counted.

Service codes on each attachment line

When you add or edit a catalogue service (Add service, then Save service), the form includes Attachment lines. The note under that heading reads "Codes and line items used when this service is attached to an order or inbound document." The columns are Code, Line item, Qty, Price, and Unit.

Pick a service code on every row. The code field placeholder is Select code…. An empty code shows Service code is required. The line item placeholder is Line item…. An empty line item shows Line item is required. Qty and Price in this preview come from the pricing model. You do not edit them here.

Hourly with a setup fee, and Setup + hours, each produce two attachment lines. Each line has its own code and its own line item text. The same code can be used on more than one line, and on more than one catalogue service. Save service stays blocked until every line has both a code and a line item. The footer reads Fix the highlighted fields to continue.

The Line item text is what is copied onto the order, inbound document, or invoice draft. The Service name stays on the service itself.

On the services table, each billing line keeps the code from its attachment line. The columns are ID, Service code, Line item, Billing rule, Qty, Price, and Unit. The row ID, such as SVC-01, identifies that row on the document or order. It is not the service code. Two lines can share a service code and still keep different IDs. You can change a line's code in Service code. The placeholder is Select code…. Changing the code on the first line also sets the service name to that code's name in the registry. Later lines can use other codes without renaming the service.

Add line item adds a blank billing line with no code. Once that line has a line item or a price, it is not saved until you pick a code from the registry. Picking a code needs the service codes view permission. Without it, the picker is disabled.

Billing rules, prices, and copies

The Pricing model you save becomes the Billing rule when the service is added to an inbound document, a production order, or an invoice draft:

  • Per attached item/job becomes Per attached job. The quantity is how many items or jobs the service is assigned to. You cannot type it.
  • Timed / process hours becomes Tracked hours. The quantity is the process hours from the resources and time sources on the service. You cannot type it. A service can have only one Tracked hours line.
  • Hourly, Setup + hours, and Fixed price become Manual quantity. You type the quantity. It has to be a number of zero or more.

Add service and Add line item start on Manual quantity with quantity 1 and unit ea. A fixed template charge does the same. A line that never had a billing rule, including on closed work, is shown as Manual quantity too. A percent line does not use a billing rule.

If a line still has no rule, Billing rule shows Choose billing rule and Billing rule needs review. Choose a rule before you change that line's price, quantity, code, or unit.

The Price on those service lines keeps two decimal places after you leave the field, and it groups thousands with commas. A price of 12 is shown as 12.00, and 12.5 is shown as 12.50. The empty price placeholder is 0.00.

Right-click a billing line's Line item, Billing rule, Qty, Price, or Unit and choose Duplicate line. The copy is inserted directly under that row. It keeps the line item, service code, billing rule, price, and unit. A Manual quantity copy keeps the quantity you typed. A Per attached job copy does not keep a typed quantity. It is calculated from assignments again. One service can hold 20 billing lines. Past that, you see Too many service lines (max 20) and the copy is not added.

Duplicate line on a catalogue Tracked hours row that already shows hours is refused. The message is Derived quantity cannot be entered as a manual override. Those hours are calculated. Use Duplicate service instead. Right-click the service ID or Service code and choose Duplicate service to add another service from that row. The copy keeps the name and the billing lines. A Manual quantity line keeps its quantity. A Tracked hours line on the new service starts at 0. These menus show only while you can edit services on that inbound document, production order, or invoice draft.

Agreements: ingest a pricelist with AI

The Agreements tab turns a customer's pricelist into structured pricing for you. Select New agreement (or the upload zone titled "Create an agreement from a contract"), pick the customer, name the agreement, and drop in the pricelist PDF (up to 20 MB). Bulk's AI then reads the document and extracts the line items, rates, testing sites, units and currency, and validity terms: no manual data entry. You watch the extraction progress, then choose Review contract to open the generated agreement. If the customer already has an agreement, the upload is added as a new revision instead of a new agreement, so you keep a history of price changes. The negotiated rates from an agreement flow into that customer's catalogue and their column of the rate matrix.

Pricing Agreements tab with the AI upload zone and three active Gotham manufacturing agreement cards.
Upload a readable pricelist PDF, then review the extracted rates. The saved agreement cards show their validity and line count.

Service Codes: the accounting match key

The Service Codes tab is a registry of the accounting item codes: for example the codes an external accounting system such as Microsoft Dynamics 365 uses: that land on an invoice line and are matched by that system. Each code has a short Code and a plain-language Name. You pick a code on each catalogue attachment line, each template charge, and each billing line. You do not type a new code there. The same code can be used on more than one catalogue service, and two lines on one service can use different codes. Add codes one at a time with New code, or paste a two-column Code and Name list with Import (tab- or comma-separated, one per line; existing and duplicate codes are skipped). A code is the accounting match key, so it is fixed once created: you can rename it or mark it inactive, but you cannot change the code itself. Deleting a code only removes it from future pickers: invoices already using it keep the code.

Example: Wayne Enterprises

Wayne Enterprises prices machining and inspection work at Gotham Applied Sciences:

  1. In Service Codes, Bruce Wayne creates the CNC accounting code for machining services.
  2. In Catalogue, he adds a £45 machining setup service and a timed CNC machining service at £95 per hour.
  3. In Templates, Housing finish combines setup with a £15 first-off report, giving a £60 baseline. Bracket finish has a £45 baseline. Gotham Rail Works has saved rates of £55 and £50, so the matrix shows a discount and a premium.
  4. In Agreements, he uploads fictional customer pricelists and reviews their extracted machining, setup and inspection rates. The saved agreement cards show the source validity and line count. He can review each line before adding it to that customer's catalogue.

Expected result

After setup, your Pricing page holds a matrix you can read at a glance: every customer's price against every category, with discounts and premiums called out: backed by reusable templates, a shared and per-customer catalogue, AI-ingested agreements, and a clean list of accounting codes. Downstream, work is priced from these rates instead of ad hoc numbers, and invoice lines carry a service code the accounting system recognises.

Limitations and feature state

This feature is generally available. Keep these behaviours in mind:

  • Templates, Catalogue, and Agreements need the pricing manage permission to change; Service Codes needs the service codes manage permission. View-only roles can open the page but not save.
  • A service code cannot be changed after it is created. You can rename it or deactivate it, but the code value itself is the accounting match key and is fixed. Deleting a code removes it from pickers only; invoices already using it keep it.
  • Deleting a category or a customer rate is a soft delete. The rate is hidden from the matrix but stays recoverable: an empty cell that was deleted offers to restore the previous rate, and a deleted baseline column can be restored from its header.
  • Agreement extraction depends on a readable pricelist. The AI reads structured pricing from the uploaded PDF; if it cannot read the document, extraction fails and no data is imported, so you retry with a different file.
  • Exporting an agreement's line items is not yet available. On an open agreement, the Actions menu lists an Export line items option that is disabled; downloading the original source PDF and editing validity dates do work.
  • A timed service needs at least one time source. If you choose Selected resources, it also needs at least one active resource. A resource that does not appear in the picker must be added or reactivated under Settings → Master Data → Resources first.
  • A catalogue attachment line needs a registry code. The form shows Service code is required. until you pick one. The same code may be used on more than one service. A code that is not in this registry is refused.
  • Manual quantity has to be a number of zero or more. Per attached job and Tracked hours quantities are calculated, so you cannot type them. A service can have only one Tracked hours line.
  • Duplicate line stops at 20 billing lines on one service. The message is Too many service lines (max 20).

Troubleshooting

  • The Service Codes tab shows a permission notice instead of the list. Your role lacks the service codes view permission. Ask an administrator to grant it; the other three tabs use the separate pricing permission.
  • A New, Add, or save control is missing or refused. Your role can view but not manage this area. Pricing changes need the pricing manage permission; service-code changes need the service codes manage permission.
  • A template shows a "needs review" flag. A service it bundles has drifted from the catalogue or gone missing. Open the template and re-pick the affected line from the current catalogue.
  • An agreement upload finished but reports a failure. The AI could not read structured pricing from that PDF. Try a cleaner or text-based pricelist; nothing is imported from a failed extraction.
  • A customer's cell shows "Rides baseline" and you expected a negotiated price. No customer rate exists yet for that category: select the empty cell to create one from the baseline, or ingest the customer's pricelist in the Agreements tab.
  • A timed service shows no process hours on an order. Make sure the service is assigned to the correct jobs and that those jobs have stopped timer time, manual time, adjustments, or OEE downtime matching the service's selected sources and resources.
  • A billing line will not save after you enter a line item or a price. Pick a Service code first. The cell stays invalid until the code is in the registry.
  • Changing a price, quantity, code, or unit is refused. The line still has no billing rule. Billing rule shows Choose billing rule and Billing rule needs review. Pick Per attached job, Manual quantity, or Tracked hours, then edit the line.
  • Duplicate line on a tracked-hours row fails. If that row already shows hours and came from the catalogue, the save is refused with Derived quantity cannot be entered as a manual override. Use Duplicate service instead. The new tracked line starts at 0.
  • Manage customers: customers are the rows of the rate matrix and the owners of agreements and per-customer catalogues.
  • Manage currencies: the global display currency a General baseline defaults to, and the rates that convert between the currencies your customers price in.
  • Master data: the wider hub of reference data this page belongs to.
  • Roles and permissions: grant the pricing and service-code permissions this page checks.
  • Invoicing profile: where the service codes on this page feed invoice lines.
  • Configure Dynamics 365: the accounting integration that matches invoices by service code.
  • Manage inbound services and items: add catalogue services on an inbound document. Each billing line keeps the attachment-line code and billing rule from this page.
  • Review production orders and jobs: the order Services panel, including Duplicate line, Duplicate service, and Manual quantity.