> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aps-store.com/llms.txt
> Use this file to discover all available pages before exploring further.

# goverment.lua

Government Portal access, roles and business review. Accounts are in `config.server.lua`. More in the [Government Portal](https://docs.aps-store.com/assets/aps_cityhall/guides/government-portal.md) guide.

> [!NOTE]
>
> Runs on: **shared**. This file stays editable when the resource is escrow-protected. Restart the resource after editing.

***

## Full View

Preview File Updated: 3.7.0 - 02.11.2026

```lua config/government.lua lines expandable theme={null}
Config = Config or {}

-- ─────────────────────────────────────────────
--  Government Portal (Config.Features.government)
--
--  An app on the City Hall PC for government staff: review business
--  registrations, manage businesses, look up citizens and manage their
--  licenses, documents and bills, and read the activity log.
--
--  access   'job'    staff get in through their job (Config.Government.jobs)
--           'login'  staff sign in with an account (config.server.lua →
--                    Config.GovernmentAccounts — never put passwords here,
--                    this file is sent to every client)
--           'both'   job players get in directly, everybody else can sign in
-- ─────────────────────────────────────────────
Config.Government = {
    access = 'both',

    -- ── Job access ─────────────────────────────
    -- job name → { [minimum grade] = role }. The highest grade the player
    -- reaches decides the role.
    jobs = {
        ['government'] = { [0] = 'clerk', [2] = 'manager', [4] = 'mayor' },
        -- ['mayor']   = { [0] = 'mayor' },
        -- ['police']  = { [3] = 'auditor' },
    },

    -- ── Roles ──────────────────────────────────
    -- permissions:
    --   businesses.review   approve / reject business registrations
    --   businesses.manage   suspend, reactivate and close any business, link it
    --                       to a job, revoke permits, remove vehicles / employees
    --   permits.review      approve / reject business permit applications
    --   businesses.inspect  record inspections and fine businesses
    --   citizens.view       search citizens, see licenses, documents, bills, vehicles
    --   licenses.manage     grant and revoke licenses
    --   documents.manage    revoke documents
    --   bills.manage        cancel unpaid bills
    --   log.view            read the activity log
    --   taxes.view          see personal and business taxes and the treasury
    --   taxes.manage        add and cancel taxes
    --   treasury.manage     transfer treasury money to a job's society account
    --   '*'                 everything
    roles = {
        clerk   = { label = 'Clerk',   permissions = { 'businesses.review', 'permits.review', 'citizens.view' } },
        inspector = { label = 'Inspector', permissions = { 'businesses.inspect', 'citizens.view' } },
        auditor = { label = 'Auditor', permissions = { 'citizens.view', 'log.view', 'taxes.view' } },
        manager = { label = 'Manager', permissions = {
            'businesses.review', 'businesses.manage', 'permits.review', 'businesses.inspect', 'citizens.view',
            'licenses.manage', 'documents.manage', 'bills.manage', 'log.view', 'taxes.view', 'taxes.manage',
        } },
        mayor   = { label = 'Mayor',   permissions = { '*' } },
    },

    -- ── Login ──────────────────────────────────
    loginAttempts = 5,      -- wrong passwords before the player is locked out
    lockoutSeconds = 120,   -- lockout length

    -- ── Business registrations ─────────────────
    --   approval        new businesses wait for review before they are listed
    --   refundOnReject  share of the registration fee paid back when rejected
    --                   (0.0 = nothing, 1.0 = everything)
    --   requireReason   a reason must be entered when rejecting / suspending
    businesses = {
        approval       = true,
        refundOnReject = 1.0,
        requireReason  = true,
    },

    -- ── Inspections ────────────────────────────
    --   results   choices for an inspection
    --   maxFine   highest fine an inspector can issue (0 = no fines)
    --   dueDays   days the owner has to pay the fine (Bills & Fines)
    inspections = {
        results = { 'Passed', 'Passed with remarks', 'Failed' },
        maxFine = 50000,
        dueDays = 7,
        society = nil,   -- e.g. 'society_government' to pay fines into a society account
    },

    -- Days of activity log shown in the portal (older entries stay in the DB)
    logDays = 30,
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.