Perfex Cash & Capacity documentation

Perfex Cash & Capacity shows which projects and customers make you money, chases unpaid invoices for you, plans who works on what in the weeks ahead and grades every customer from A to D. It works from the timesheets, expenses, invoices and payments you already keep in Perfex CRM. Nothing has to be entered twice.

The module has four parts. Profit covers cost rates, project and customer margins, and budgets. Get Paid covers reminder sequences, promises to pay, disputes, AR ageing, DSO and the cash-in forecast. Capacity (new in 1.1.0) covers working hours, holidays and time off, bookings on a drag-and-drop schedule, conflicts, utilisation and the free-capacity forecast. The Client Value Score brings profit and payment together into one grade per customer.

Installation

Requirements

Steps

  1. In Perfex go to Setup › Modules, upload perfex_cash_capacity-x.y.z.zip and click Install.
  2. Click Activate. Tables, settings and three ready-made reminder sequences are created automatically.
  3. A new Cash & Capacity menu appears with Overview, Profitability, Capacity, Collections, Client Value and Settings.
Updating: upload the new zip over the old one. The module upgrades its tables on the next admin page load. Your rates, budgets, sequences and history are kept. Updating from 1.0.x adds the Capacity tables and settings; give the roles that should plan the new Capacity permission (Setup › Staff › Roles).

First steps

  1. Settings › Profit: check the target margin (30% by default), what to do with hours that have no cost rate, and any overhead.
  2. Profitability › Cost Rates: enter what an hour of each person costs you, or a default rate per role. Margins are only as good as these rates.
  3. Collections › Sequences: read through the Standard sequence and adjust the wording to your voice.
  4. Settings › Get Paid: pick the send hour and weekdays, then switch on Send reminders. Nothing is sent to customers until an administrator turns this on. Before that, invoices are already tracked and every screen fills in, so you can look around safely.
  5. Decide whether the module should take over Perfex's own invoice reminders, so customers are not reminded twice.
  6. Settings › Capacity and Capacity › Time Off & Hours: check the default working hours and target, add company holidays (or import them), then book people on the Schedule. See Capacity.

The Overview page shows cards for margin this month, receivables (total, overdue and DSO), today's worklist count, the team's booked hours for the next four weeks and the Client Value grade split. Below them are a Needs Attention list (projects over or near budget, broken promises, disputes, over-allocated people, won work to confirm and customers to rethink) and the expected cash-in. A Client Value panel lists the customers to fix first. Staff see only the cards their permissions allow.

Permissions

The module adds five permission groups under Setup › Staff › Roles. Administrators pass every check.

GroupCapabilities
Cash & Capacity: Profit and MarginsView (global): revenue, cost and margin of every project and customer. View own: only projects the staff member is a member of. Edit budgets: change project budgets and recalculate.
Cash & Capacity: Staff Cost RatesView and Edit staff cost rates and salaries. This is a separate group because salaries are sensitive. Someone with only this permission gets a direct Cost Rates menu item.
Cash & Capacity: CapacityView (global): everyone's schedule, utilisation, forecast and time off. View own: their own row and the bookings on projects they are a member of. Create: add bookings and their own time off. Edit: move, change and confirm bookings; with View (global) also time off, holidays, working hours, placeholders and people. Delete: delete bookings, time off, holidays and placeholders. Details in Capacity permissions.
Cash & Capacity: CollectionsView (global): receivables, ageing, DSO and the worklist for everyone. View own: customers they manage (customer admin) or collect for, and invoices where they are the sale agent. Create: log calls, notes, promises and disputes, and send a reminder now. Edit: pause, resume and stop reminders, and edit sequences, templates and customer rules. Delete: delete sequences and templates.
Cash & Capacity: SettingsView and Edit the settings page. API keys and the take-over of Perfex reminders are for administrators only.

Cost and margin figures are never sent to the browser for staff without Profit access, not even hidden in the page. This applies on the project tab, the customer tab, the invoice strip, the planned cost and margin on the Capacity screens, and the Brain Pro widgets. The Client Value page needs Profit view, because a score reveals margin. Its payment columns also need Collections view; without it they show a lock.

Profit

Profit turns logged time into cost. For every finished task timer, the module multiplies the hours by the cost rate of that person on the day the timer started, then adds the overhead you set. Expenses linked to the project are added at their amount without tax. Running timers count once they stop. Non-billable hours cost the same as billable hours, because you still pay for them.

Cost rates and rate history

Profitability › Cost Rates lists every staff member with today's rate, where it comes from and its history.

Rates are in your base currency. Saving or deleting a rate recalculates project costs.

Hours without a cost rate (fallback)

For time logged by someone with no own rate and no role rate for that day, Settings › Profit › Hours without a cost rate decides what happens:

The screens warn you whenever this matters. They show a chip such as "12.5 h uncosted" and notices like "hours used the fallback rate", so a margin that is too good to be true does not go unnoticed.

Overhead

Overhead on labour is a percentage added on top of every labour cost to cover rent, software and other running costs. For example, 20% turns a 50.00 hour into 60.00.

Revenue and margin

Perfex has three billing types. The module works out what the work is worth for each one:

FigureIn plain words
Invoiced (net)Project invoices without tax, leaving out drafts and cancelled invoices, minus the project's credit notes.
CollectedPayments received on those invoices.
Earned — Fixed RateProject cost × project progress (Perfex's own progress, capped at 100%).
Earned — Project HoursBillable hours × the project's hourly rate.
Earned — Task HoursBillable hours on each task × that task's hourly rate.
Unbilled valueHour-based projects: billable hours not yet billed × the rate. Fixed Rate: what is earned but not invoiced yet.
RecognisedA finished project counts what was invoiced. Any other project counts whichever is higher, invoiced or earned.

Then:

Settings › Profit › Revenue used for margin picks Work done or invoiced, whichever is higher (recognised, the default) or Invoiced only. Both figures are always shown on the project's Profit tab. Billable expenses that you invoiced appear as revenue through the invoice and as cost through the expense, so they cancel out.

Currency rule: Perfex stores no exchange rates and the module never invents them. Cost rates are in the base currency, so a margin is calculated only for projects and customers billed in the base currency. Projects in another currency show their revenue and cost side by side with a notice, and are left out of margin totals. Money is never added up across currencies.

Costs from other modules (1.1.4). Another SellMyCode module can add its own costs to these margins. Perfex Sales Growth adds approved and paid sales commission, by the customer and project of the invoice it was earned on. Pending commission is never counted. When a commission payout also created a Perfex expense, that expense is left out, so the same money is never counted twice. These costs are in the base currency and appear as Costs From Other Modules on the project's Profit tab and in the cost cards.

Project lists use stored figures. These refresh within 15 minutes of a change (time, expense, invoice or payment) and fully every night; Recalculate Now refreshes everything at once. The project's own Profit tab always calculates live.

Project Profit tab

Every project gets a Profitability tab. It holds the live profit and loss card, revenue broken down by the rules above, the budget with its burn bars, a revenue and cost by month chart, a margin trend, cost by staff member and by task, and warnings for uncosted hours, running timers and items in another currency. You can switch the tab off in Settings.

Budgets and alerts

Customer and team views

Get Paid

Every invoice with a due date that is Unpaid, Partially paid or Overdue is picked up automatically. Drafts, customers you exclude and balances below the sequence's minimum are not. The invoice then follows a sequence of reminders timed around its due date. It stops by itself when the invoice is paid, cancelled or deleted, and starts again if a payment is deleted or a cancellation is undone. Partially paid invoices keep being chased for the remaining balance.

An invoice's collections status is one of Chasing, Paused, Promised, Disputed, Paid or Stopped. Reminders that were already due when an invoice was picked up are skipped, except the latest one, so a customer never gets several reminders on the same day.

Where you see it

Customer collection rules

For each customer you can choose their own sequence, a collector, a pause until a date, which channels are allowed (email, SMS, WhatsApp), or Never send reminders with a reason for your team. A step on a channel that is not allowed becomes a call on the worklist. Whole customer groups can be excluded in Settings › Get Paid.

The collector of an invoice is chosen in this order: the customer's collector, the invoice's sale agent, the first customer admin, the default collector from Settings, and finally the first active administrator.

Sequences

A sequence is a list of steps. Each step runs a number of days before or after the due date, on a channel, in a tone (friendly, neutral, firm or final). Email steps can attach the invoice PDF and copy the sale agent. Any step can use AI wording. Per sequence you set a minimum balance worth chasing and whether weekend steps move to Monday. Exactly one sequence is the default for customers without their own. Three are installed and can be edited, duplicated or replaced:

SequenceSteps (day relative to the due date)
Standard (default)−3 email, friendly · 0 email, neutral · +3 email, neutral · +10 SMS, firm · +21 call · +30 final email with the PDF, copied to the sale agent
Gentle (VIP)−3 email, friendly · +7 email, friendly · +21 personal call
Strict−5 email · 0 email with the PDF · +1 email, firm · +5 SMS, firm · +10 email with the PDF · +15 final email with the PDF, copied to the sale agent

Reminders go out from the send hour (9:00 by default) on the weekdays you choose (Monday to Friday by default). Each cron run sends up to Reminders per cron run (50) to stay within your mail server's limits. Deleting a sequence moves its invoices to the default sequence. Changing an invoice's sequence continues from today, without sending steps whose date has passed.

Per invoice, staff can Send Now (with a preview and the option to edit the text), Skip Next Step, Pause (until a date, or until resumed), Resume, Stop Reminders and Restart Reminders.

Channels

ChannelHow it is sent
EmailThrough Perfex's own email settings (company SMTP, email header and footer) to the invoice's contacts that receive invoice emails, or else the primary contact. The PDF is attached from memory when the step asks for it.
SMSThrough the SMS gateway active in Perfex: Twilio, Clickatell, MSG91 or any SMS gateway module that registers with Perfex's SMS feature. The number is the contact's phone, or else the customer's. With no active gateway, the step becomes a call on the worklist.
WhatsAppSent automatically through WhatsBot or the WhatsApp Cloud API Business Integration module (both sold separately) with a template Meta has approved, picked for the step. Otherwise the step becomes a worklist task with a ready-made wa.me chat link holding the reminder text: a staff member clicks Open WhatsApp and presses send. See WhatsApp.
CallA worklist task for the collector with the call notes from the template.

A step that cannot be delivered, for example because no contact has an email address, no phone number is on file or the channel is switched off for the customer, becomes a worklist task. The task says why. Failed sends are listed on the worklist, where you can resend or dismiss them. Sends are never retried blindly, so a customer is not reminded twice.

WhatsApp

WhatsApp only lets a business start a conversation with a message template that Meta has approved. The module therefore sends WhatsApp steps automatically only through a WhatsApp module that holds your WhatsApp Business account and its approved templates:

ModuleWhat it needs
WhatsBot (Corbital)Active, with your WhatsApp Business account connected and the templates loaded in WhatsBot.
WhatsApp Cloud API Business IntegrationActive, with the phone number ID and access token filled in and the templates synced in that module.

Both modules are sold separately. Cash & Capacity uses the credentials and templates they store and sends each message itself, straight to Meta's WhatsApp Cloud API (graph.facebook.com). The access token stays on your server and is never shown in the browser or written to a log.

Settings › Get Paid › WhatsApp (administrators): Automatic uses WhatsBot, or else the WhatsApp Cloud API module, whichever is connected; you can also name one of them, choose Chat link task to never send automatically, or Off. The same section lists the WhatsApp modules found, whether they are connected and how many approved templates they have. Default country code is added to phone numbers saved without one (a leading 0 is dropped), so 020 7946 0958 with 44 becomes +44 20 7946 0958.

In the sequence editor, a WhatsApp step shows Approved WhatsApp template: pick a template (name and language; only approved ones are listed) and choose a merge field for each variable of its header and text, {{1}}, {{2}} or named ones, such as the contact's name, the invoice number, the balance, the due date, days overdue, the pay link, the response link or your company name. If the template has a button with a variable link, choose what fills it, usually {pay_link}: set the button's URL in Meta to your CRM address followed by {{1}} (for example https://crm.example.com/{{1}}), and the rest of the pay link is filled in. Preview shows the template as the customer reads it. Templates with an image, video or document header, and one-time-password, copy-code or flow buttons, are listed but cannot be picked. AI wording does not apply to WhatsApp templates.

The step's own subject and text are still kept: they are used for the chat-link task when the template cannot be sent. That happens, with the reason on the task, when no WhatsApp module is connected, no template is picked, the number is not a valid international number, the wording was edited in Send Now, or WhatsApp refuses the message (template not approved or paused, invalid number, expired access token, a WhatsApp error). The message id Meta returns and any error code are kept with the message in Collections › Activity. Sending hours, the daily limit, the customer's allowed channels, stopping when paid and the one-send-per-step rule all apply as for email and SMS.

Templates and merge fields

Each step has a text per language: email steps take HTML, SMS and WhatsApp steps take plain text and calls take notes. A customer gets the text in their contact's language, then the customer's language, then the default text. The editor has a merge-field picker and a preview filled in from a real invoice. All Perfex invoice and customer merge fields work too, plus:

Merge fieldValue
{pay_link}Tracked link to the invoice's own Perfex payment page (see below)
{respond_link}The customer response page: promise a date or report a problem
{invoice_number} {invoice_total} {invoice_balance} {invoice_due_date}The invoice; the balance is what is left to pay
{days_overdue} {days_until_due}Days past or until the due date
{statement_total}The customer's total open balance in the invoice currency
{client_company} {contact_firstname} {contact_lastname}The customer and contact
{company_name} {staff_name} {staff_email}Your company and the invoice's sale agent
{promise_date} {promise_amount}Filled in after a promise to pay

Templates for the three ready-made sequences are installed in English and in each of the module's other eight languages that your Perfex has. Other languages can be added in the editor with Save … Version.

Pay link and customer response page

Promises to pay and disputes

Taking over Perfex's own reminders

Perfex can send its own due and overdue reminders. To make sure customers are never reminded twice, an administrator can switch on Settings › Get Paid › Take over Perfex invoice reminders (a confirmation is asked).

With take-over off, both systems can send reminders. Then either switch off Perfex's reminders or leave invoices to one of the two.

Worklist

Collections › Worklist is the daily to-do list, shown as Mine or Everyone and filtered by currency. Items are grouped:

Each item shows the customer, invoice, balance, days late, last contact and grade. Actions: Done, Log Call (outcome and note), Add Promise, Log Dispute, Pause, Send Now, Snooze (hide from the worklist until a date while reminders keep running), Resend or Dismiss, and Open Invoice.

AR ageing, DSO and the cash-in forecast

AI wording (optional)

AI can reword a reminder for the customer's situation and language. Switch it on in Settings › AI Wording, then choose the account:

Turn on AI wording on the sequence steps you want reworded. With Draft for approval (the default), the reworded text waits on the worklist under AI Wording to Approve; Approve and Send sends it, Discard drops it. With Send automatically it goes out directly. Rewrite with AI is also available in the template editor and when sending by hand. Who to Chase First on the worklist suggests an order for today's list, cached for the day. A daily limit (50 requests by default) keeps costs predictable. When the limit is reached, or the provider fails, the plain template is sent: AI never blocks a reminder.

Privacy: the AI sees only the template text with its {placeholders}, the tone, how late the invoice is, the balance and a summary of how the customer usually pays. It never receives names, email addresses, phone numbers, links or invoice lines. The merge fields are filled in afterwards on your server. A reply that drops {pay_link} or {respond_link} is refused and the template is used instead. For "Who to Chase First", only invoice numbers, amounts, days late and payment history are shared.

Capacity

Capacity plans who works on what in the weeks ahead and compares it with the hours people really have. You book people (or placeholder roles) on projects, or tentatively on work you have not won yet, on a weekly schedule. The module then shows who is over-allocated, who is free, planned against actual utilisation and, for staff who may see profit, the planned cost, revenue and margin. It lives under Cash & Capacity › Capacity with five tabs: Schedule, Projects, Utilisation, Forecast & Who's Free and Time Off & Hours.

All figures are measured against available hours: working hours minus company holidays minus time off. Leave therefore never lowers anyone's utilisation.

Working hours and holidays

Time off and the Timesheets & Leave module

Bookings and placeholders

Schedule board

The Schedule tab shows one row per person (placeholders at the bottom), grouped by department or role, with one column per week. Each bar is a booking with its hours per day.

Conflicts

Overlapping bookings are allowed and flagged, never refused. The Conflicts list under the board names each one:

ConflictWhen
Over-allocatedConfirmed work in a week is more than the person's available hours.
Over-allocated with tentative workConfirmed work fits, but confirmed plus tentative work does not.
On time offA booking overlaps the person's leave or a holiday; the hours it lost are shown.
Not on the boardA booking belongs to someone who is no longer planned (inactive, switched off or in an excluded role).

Over-allocated person-weeks also appear in the Overview's Needs Attention list. On the Projects tab, a project is marked Plan over budget when the hours logged so far plus the confirmed hours ahead exceed its budget hours from Profitability.

Utilisation

Forecast and Who's Free

Planned cost, revenue and margin

Capacity permissions

CapabilityGrants
View (global)Everyone's schedule, utilisation, forecast and time off.
View ownTheir own row (with week colours and time off) and the bookings on projects they are a member of; their own utilisation and forecast; the Capacity section of their projects.
CreateAdd bookings (with only View own: for themselves or on their own projects) and their own time off.
EditMove, resize, reassign, edit and confirm bookings. Together with View (global): others' time off, holidays, working hours, placeholders and people settings.
DeleteDelete bookings, time off, holidays and placeholders.

Only staff with View (global) can book placeholders.

Client Value Score

Every night each customer with an invoice in the last 12 months (History used for the score) gets a score from 0 to 100 and a grade. The score is built from four components, each scored 0–100:

ComponentDefault weightHow it is scored
Margin35100 at your target margin + 10 points or more, 0 at 0% or below, in a straight line between. Left out when the customer has no time or expenses recorded, is not billed in the base currency, or has more than half of their hours without a cost rate.
Payment30Average days late, weighted by amount, over invoices paid in the window plus open overdue invoices counted to today. 0 days scores 100, 45 days or more scores 0. Needs at least 2 such invoices.
Revenue20Where the customer's revenue in the window ranks among your base-currency customers (percentile).
Reliability15100 − 25 per broken promise − 30 per open dispute − 15 per rejected dispute, never below 0.

The score is the weighted average of the components that have enough data; a missing component's weight is shared by the others. A customer needs at least two of margin, payment and revenue to get a score, so reliability alone never makes one. The default weights are 35 / 30 / 20 / 15. Change them under Settings › Client Value Score › Score weights: four whole numbers from 0 to 100 that add up to 100. After new score settings are saved, the next cron run scores every customer again.

Grades: A from 80 (profitable and pays on time), B from 65, C from 50, D below 50.

Quadrants: Grow, Fix or Fire

Customers with both margin and payment data are placed on a chart of margin % against average days late. Bubble size shows revenue; click a bubble to open the customer. The dashed lines are your target margin and Still a good payer up to (7 days late by default).

QuadrantMeaningRecommendation
GrowGood margin, pays on timeOffer more work, a retainer or a bigger package.
Fix PricePays on time, low marginRaise prices by the amount shown to reach your target, or cut scope and unbilled hours.
Fix PaymentGood margin, pays lateAsk for a 30–50% deposit on new work, shorten payment terms, use stricter reminders.
FireLow margin and pays lateReprice with payment up front, or plan to wind the work down.

The Client Value page shows the grade split, the chart and a table with grade, score, last month's score, quadrant, components, margin %, revenue, average days late, on-time %, DSO, broken promises and disputes. You can search, filter, sort and export it. Each customer has a "What To Do" line with buttons such as New Proposal, Project Margins, Collection Rules and Use Strict Reminders. The last one moves the customer and their open invoices to the Strict sequence. Scores are kept by month for the trend. Recalculate scores everyone at once.

Perfex Brain Pro integration

Perfex Brain Pro is our dashboards and analytics module. It is sold separately and not required. When it is installed, Cash & Capacity adds a Cash & Capacity provider with 25 widgets. They respect the same permissions and support drill-down:

It also adds two ready dashboard templates, Cash & Capacity for owners, finance and project managers and Team Capacity for resource managers and team leads, and four record types for Brain Pro's Custom Metrics: Payment Reminders, Promises to Pay, Invoice Disputes and Client Value Scores. The Capacity widgets need the Capacity permission, show hours only (never cost), and My data narrows them to the viewer's own row and projects. Budget alerts can go to Brain Pro's Slack, Teams and Telegram channels, AI wording can reuse Brain Pro's AI settings, and both modules share the same light or dark theme.

Cron

The module runs on the standard Perfex cron (Setup › Settings › Cron Job). Every run keeps invoice tracking in sync, checks promises, sends due reminders (only when Send reminders is on and within the send hours), refreshes changed project figures and checks budget alerts. Once a night it also recalculates every project, the scores, expected payment dates and DSO, and prunes the run log (90 days). A lock stops two overlapping runs, and each job runs on its own, so one failing job never stops the others. Settings › General shows when the cron last ran.

Capacity needs no cron job: the schedule, utilisation, forecast and conflicts are worked out when a page opens, and the notification for won work goes out when the estimate or proposal is accepted.

Languages and theme

The interface ships in English, Spanish, Portuguese (Brazil), French, German, Italian, Dutch, Turkish and Russian, and follows each staff member's Perfex language. To add another language, copy language/english/ inside the module to a folder named like the Perfex language and translate the values. The ready-made reminder templates are installed in English plus a translated version for each of these languages your Perfex has, so customers get reminders in their contact's language. Other languages can be added per step in the sequence editor with Save … Version. Light, dark and follow-the-device themes are available (Settings › General). With Brain Pro installed, the theme follows Brain Pro's.

Multi-tenant (Perfex SaaS)

One setup is not supported: a SaaS option that keeps all tenants in one shared database while Perfex still uses the master table prefix. Inside such tenants the module switches itself off and its pages explain why. Use one database (or prefix) per tenant instead.

Uninstalling

Uninstalling always gives every invoice its own Perfex reminder setting back. By default your cost rates, budgets, sequences, bookings, time off and history are kept for a reinstall, and links already sent to customers keep working. To remove everything, switch on Settings › General › Delete all data on uninstall first.

Troubleshooting

ProblemWhat to do
No reminders are sentCheck that Send reminders is on, the cron runs (Settings › General), and the current hour and weekday are within the send window. Look at Collections › Activity and the worklist's Failed Sends.
Customers get two remindersPerfex's own reminders are still on. Switch on take-over, or turn off Perfex's reminders.
WhatsApp steps become chat-link tasksCheck Settings › Get Paid › WhatsApp: a WhatsApp module must be listed as connected and the step needs an approved template. The task says why it was not sent; an expired access token is renewed in the WhatsApp module.
SMS steps turn into callsNo SMS gateway is active in Perfex, or the contact and customer have no phone number.
Margins look too highLook for the "uncosted hours" chip and the fallback notice. Add cost rates for the people concerned, or set the fallback in Settings › Profit.
A project has no marginIt is billed in a currency other than the base currency. See the currency rule.
A customer has no scoreA score needs two of margin, payment and revenue in the window. The customer's line says which data is missing.
Figures look out of dateLists refresh within 15 minutes and every night. Use Recalculate Now on Profitability or Recalculate on Client Value.
Someone is missing from the scheduleInactive staff, staff marked Not Staff Member, people switched off under Capacity › Time Off & Hours › People on the Board and roles in Roles kept off the board (Settings › Capacity) are not planned. Staff with only View own see their own row and their projects' bookings.
Leave from Timesheets & Leave does not showOnly approved leave requests are read. Check that the module is active and that Read approved leave from Timesheets & Leave is on in Settings › Capacity; Time Off & Hours shows each source as used, switched off or not installed.
A booking shows fewer hours than enteredTime off wins: days with a holiday or a full day of leave get no hours, and the bar is flagged with the hours it lost. A total-hours booking is spread over the days the person is available.
"Someone else changed this booking"Another user changed or moved the same booking first. The board shows it where it really is now; make your change again.
No planned cost, revenue or margin on the scheduleThese need the Profit permission for that project (totals need Profit View global). Revenue needs a bill rate: a project hourly rate, task rates, a fixed project cost, or an estimate, proposal or lead value; projects in another currency show cost only.
Anything elseOpen a request on the support page. Include your Perfex and PHP versions and a screenshot of Settings › General.