What goes wrong most often, what it actually means, and what to do about it. Most of these are a setting, a missing permission or a load-order issue — not a fault in the resource.
Installation and Access#
The console prints "You have renamed the script!" and freezes
The resource folder was renamed. It checks its own name on start and stops everything if it does not match. Rename the folder back to qs-job-management — with the same name in server.cfg — and restart the server.
/boss says "No permission"
The admin check failed. On ESX the player's group must be admin or superadmin; on QBCore and Qbox the core must allow them the admin permission. Installation shows both, and how to change the check in PlayerIsAdmin.
Remember that /boss is the admin panel. A job's boss opens the boss menu at the boss zone, not with this command.
"Could not verify the database schema"
The table could not be created or checked. Make sure oxmysql starts before Job Management and connects — its own console lines say so — and that the database user may create and alter tables. The error after the colon is MySQL's own message. As a fallback, import qs-job-management.sql by hand.
"No se pudo obtener el core object" or "No se pudo obtener el objeto ESX"
Job Management could not reach your framework within fifteen seconds of starting. The framework must start before it in server.cfg. On Qbox, the qb-core bridge must also be enabled — qbx:enablebridge must not be false.
"locale … not found, using en" or "is not valid JSON"
Config.Locale names a file that does not exist — the warning lists the ones that do — or the file has a JSON mistake, usually a missing comma or quote after an edit. Fix the code or the file and restart. Until then everything shows in English.
Some messages never appear
SendTextMessage in config/config.lua ships with every line commented out, so the maximum-jobs warning, the license refusal, quit notices and treasury payments are silent. Point it at a notification system — Integrations has ready-made examples.
The Job Menu#
"You have reached the maximum number of jobs"
The player already holds Config.MaxJobs jobs (5 by default), so the new job was not stored and they were set back to unemployed. They need to quit a job from the menu first — or raise the limit.
"You are not allowed to use this feature"
Config.UseByLicense is on and the player's license is not in Config.AllowedLicenses. Add the full license:… identifier, or turn the restriction off.
A job is missing from the menu
Either it is in Config.BlackListedJobs — still stored, never shown — or it was never stored because the player was at the job limit when they received it. Jobs are added when the framework sets them; give the job again once there is room.
A job shows its raw name and a question mark
The job is not in Config.Jobs. It still works; add it there with a label and an icon to give it a proper card, badges and a place in the admin panel.
Another script reads the job as unemployed
Expected: the player is off shift. End shift sets the framework job to unemployed, so dispatch, garages and shops stop treating them as on duty. Start shift puts the job back.
No level or XP on a card
Levels are read only from the Quasar job resources listed in Integrations, and only while that resource is started. Check that it is running, that the job name matches the one it gives players, and that the player has worked it at least once — until then there is no row to read. If the bar looks wrong, align Config.JobProgress with the job script's own curve.
Bosses and the Boss Menu#
The boss zone or its blip does not appear
All of these must be true:
The job has a zone — in
Config.BossLocationsor set in the admin panel's Location.That job is the player's active job — not just on their list.
The player is the job's boss, an admin, or holds a rank with Open Menu.
Config.BossLocationsis a table — set tonil, it switches the boss menu off for every job.
The boss command or key does nothing
bossCommand and bossKey are off by default, and when set they only answer to the job's designated boss, for their active job. Ranks with Open Menu use the boss zone.
A rank has a permission but the section is empty
The treasury, salaries, HR log, statistics, the rank editor, contracts, badges and announcements only answer to the job's boss — and to admins from the admin panel. A rank holding Treasury, Change %, Manage Ranks or Announce sees the button, but the section stays empty. Hire, Fire, Change Grade, employee reports and penalties work for any rank that holds them.
A job created in the panel is not in the Jobs tab
The Jobs tab lists Config.Jobs. Add the new job there with its label and icon, and restart the resource.
Jobs or ranks made in game disappear after a restart (QBCore / Qbox)
On ESX they are written to jobs and job_grades. On QBCore and Qbox they only live in the running core. Copy them into qb-core/shared/jobs.lua or Qbox's shared jobs file to keep them.
A boss zone cannot be deleted
It comes from Config.BossLocations — the panel marks it Set in config file. Delete only removes zones placed in game. Remove or edit the entry in the config, or place a new zone in the panel, which overrides it.
A job offer never arrives, or is refused
The server ID must belong to an online player other than you. The offer is refused when that player already has the job, and accepting it is refused when they are at Config.MaxJobs. Offers expire after 30 seconds (60 from an admin).
Money, Salaries and Statistics#
The treasury stays at zero
The job resource pays its workers directly instead of through AddJobMoney, or the job's cut is 0%. Route the payout through the export:
exports['qs-job-management']:AddJobMoney(source, amount, 'miner')The same export feeds the statistics, so direct payments leave both empty. Remember the default cut is 1%: small payouts may round down to nothing.
Salaries never pay
Check all of these:
The job's Salary Settings in Treasury have been saved at least once — until then the job has no pay schedule.
The employee's rank has an amount above zero in Ranks.
The interval has passed since the last payment, and the employee is online at that moment.
With From treasury balance on, the treasury can cover the amount.
Employees are paid twice
The framework's own paycheck still pays that grade — job_grades.salary on ESX, payment on QBCore and Qbox — on top of the rank salary. Save the rank once in Ranks: that sets its framework salary to 0.
"Insufficient funds" or "Employee not found" when paying
The treasury holds less than the amount, or the employee went offline — payments only reach online players. Nothing was taken from the treasury.
No hours in the statistics
Hours are counted from Start shift to End shift or disconnect. A player who never uses the shift button in the job menu has no shift on record.
Data#
Edits to a JSON file are lost
The resource holds bosses.json, hrlog.json and the data/ files in memory and writes them back on the next change. Edit them only while the server is stopped.
Bosses, balances or logs vanished after an update
They are stored inside the resource folder, so replacing the folder replaced them. Restore bosses.json, hrlog.json and data/ from your backup while the server is stopped. The job lists themselves are in the database and are never touched.
Old balances or logs on a fresh server
The data files carry the state of the server they came from. Reset them as shown in Installation, with the server stopped.
The job chat is empty after a restart
Expected. The chat keeps its last 100 messages in memory only, and a restart of the resource clears them.
Error Codes#
Some failures print a short code in the server console, as [qs-job-management] Error 150:
Code | Means |
|---|---|
| The job menu was asked for before the player's character finished loading. Harmless; it opens once they have spawned. |
| Switching jobs: the player's ESX / QBCore object was not found — they were still loading or had just left. |
| No supported framework was detected. Start ESX, QBCore or Qbox before Job Management. |
| Starting or ending a shift: the player's QBCore / ESX object was not found. |
| A switch to a job that is not on the player's list — usually one a boss removed a moment before. Reopening the menu shows the current list. |
| A shift was started for a job that is not on the player's list any more. |
Still stuck? Open a ticket and include the server console from the start of the resource, your framework and its version, and your
config/config.lua.



