Configuration
Complete guide to configuring JK Billing. All settings are in config.lua.
Language
-- Language file to load from /lang (e.g. 'it', 'en').
Config.Locale = 'en'Language files are located in the lang/ folder. You can duplicate en.lua to create your own translation.
Framework
Config.Framework = {
-- Framework mode: auto | esx | qbcore | qbox | standalone
mode = 'auto',
}When set to auto, JK Billing detects your framework automatically by checking which core resource is started (es_extended, qb-core, qbx_core).
Billing Settings
Config.Billing = {
-- Command used to open the billing UI.
openCommand = 'invoices',
-- Optional extra alias for the same command.
openCommandAlias = 'fatture',
-- Default keybind for opening the UI.
openKey = 'F5',
-- Minimum allowed invoice amount.
minAmount = 1,
-- Maximum allowed invoice amount.
maxAmount = 50000000,
-- Fallback reason text when none is provided.
defaultReason = 'Service',
-- Player account used when paying invoices (bank / cash).
payFrom = 'bank',
-- If true, allows paying even when balance is below amount.
allowNegative = false,
}Job Permissions
Control which jobs can issue society invoices:
Config.Billing.jobs = {
-- If 'enabled' is empty => all jobs are allowed (except disabled).
-- If 'enabled' has entries => only those jobs are allowed.
enabled = {
-- police = true,
-- ambulance = true,
},
disabled = {
unemployed = true,
},
}Logic: If enabled is empty, every job is allowed unless explicitly in disabled. If enabled has entries, only those jobs can issue society invoices.
Society Invoices
Config.Billing.societyInvoices = {
-- Enable/disable society invoices tab and data.
enabled = true,
-- If true, only top grades can see society invoices.
requireHighGrade = true,
-- Number of highest grades allowed (when requireHighGrade = true).
topGradesCount = 2,
-- Optional explicit minimum grade per job (overrides topGradesCount).
minGradeByJob = {
police = 4,
ambulance = 3,
mechanic = 3,
},
-- Allow eligible high-grade players to pay invoices using society account.
payFromSociety = {
enabled = true,
-- If true, society account payment is also allowed for personal invoices.
allowPersonalInvoices = true,
},
}The system calculates the minimum allowed grade using topGradesCount from the maximum grade in the database. For example, if a job has max grade 5 and topGradesCount = 2, grades 4 and 5 can see society invoices. Use minGradeByJob to override this per-job.
Personal Invoices
Config.Billing.personalInvoices = {
-- Enables issuing personal invoices (independent from job permissions).
enabled = true,
}When enabled, any player can send a personal invoice to another player. Payment goes directly to the issuer's bank account instead of a society account.
Product Catalog
Config.Billing.productCatalog = {
-- Enable product catalog feature.
enabled = true,
-- Only high-grade players can manage catalog (same permissions as societyInvoices).
requireHighGrade = true,
-- Auto-fetch item images from inventory system.
autoFetchItemImages = true,
-- Force a specific inventory resource instead of auto-detection.
-- Leave nil to auto-detect. Examples: 'ox_inventory', 'qb-inventory'
inventoryResource = nil,
-- Custom NUI image path template (advanced).
-- Use {resource} and {item} as placeholders.
inventoryImagePath = nil,
}Tablets
Config.Tablets = {
-- Enable the tablet catalog display system.
enabled = true,
-- Command to enter placement mode (admin only).
command = 'jkplacetablet',
-- Command to remove the nearest tablet (admin only).
deleteCommand = 'jkremovetablet',
-- Prop model used for the tablet object.
model = 'prop_cs_tablet',
-- Maximum distance (m) to interact with a placed tablet.
interactDistance = 1.3,
-- Distance (m) at which tablet props stream in/out.
streamDistance = 20.0,
-- Degrees per scroll step when rotating during placement.
rotationStep = 5.0,
-- Height adjustment per frame when pressing arrow keys.
heightStep = 0.02,
-- Maximum raycast distance for placement preview.
maxPlaceDistance = 8.0,
}Screenshots
Config.Screenshot = {
-- Discord Webhook URL for uploading in-game screenshots.
-- Create one in any Discord channel:
-- Channel Settings → Integrations → Webhooks → New Webhook → Copy URL
discordWebhook = 'https://discord.com/api/webhooks/YOUR_WEBHOOK_HERE',
}Screenshots are used to capture product images in-game. The image is uploaded to Discord via webhook and stored as a URL in the product catalog.
ActivityManager Integration
Config.ActivityManager = {
-- Enable integration with ActivityManager resource.
enabled = true,
}When enabled and the activitymanager resource is running, invoices are automatically synced to ActivityManager for jobs linked to a Discord guild.
Discord Logs
Config.DiscordLogs = {
-- Discord Webhook URL for invoice logs (created & paid).
-- Leave empty ('') to disable.
-- You can use the SAME webhook for both, or two different ones.
invoiceCreated = '', -- Webhook for "Invoice Created" logs
invoicePaid = '', -- Webhook for "Invoice Paid" logs
}