Court / DOJ¶
The Court module turns PulseCAD into a full judicial system: warrants, criminal cases, a hearing docket, sentencing tied to your penal code, a custody roster, and even an AI judge you can talk to. It plugs into the tools your community already uses — arrest reports open cases, warrant reports become signable warrants, convictions build a defendant's rap sheet, and rulings notify the defendant in the portal, on Discord, and in game.
Court is optional and fully per-community. Every capability is an on/off toggle, and the whole thing can run in one of five modes — from a purely human bench to a hands-off AI courtroom. Open it from the Court tile on the community hub. The tile only appears when Court is enabled and your plan includes it.
This is a paid module (Professional and up)
Court is available on Professional and Enterprise plans. The OFF mode is always available at no cost — you only need the entitlement to run one of the active modes. See Admin → Billing for your plan.
The five modes¶
The mode decides who makes the decisions — a human, a deterministic script, or the AI. Set it in Admin → Court.
| Mode | Who runs the court | What it does |
|---|---|---|
| OFF | Nobody | Court is completely hidden. No Court tile, no warrant/case actions anywhere. This is the default for a new community. |
| MANUAL | Human judges | The classic bench. Staff sign/deny warrants, mark charge dispositions, run report reviews, and pronounce sentences by hand. No AI is ever called. |
| RULES | A deterministic script | A transparent, repeatable "robot judge" — no AI. Sentences come straight from the penal code at a configured anchor (or a sentencing grid), and reports are graded against a checklist. Same result every time, fully auditable. |
| AI | The AI judge | The AI judge reviews reports, converses over warrants, presides over contested cases, and pronounces sentences. Everything stays inside your penal-code limits (see below). |
| HYBRID | AI drafts, human confirms | The AI does the work, but a human must confirm verdicts and sentences above a class threshold you set. Minor matters can be finalized by the AI; serious ones always wait for a person. |
AI and HYBRID need an API key
AI and HYBRID require a saved AI key for your chosen provider (see Choosing the judge). If no key is present, the judge simply can't be reached — warrant chambers and case proceedings report the judge as unavailable, and you fall back to acting manually. Configure the key in Admin → AI Assist.
Even in OFF, one setting still applies: warrant approval (court / supervisor / auto) governs how warrant reports are handled, so a community that doesn't want a courthouse can still route warrants sensibly.
Capability toggles (modules)¶
Beyond the mode, every capability is its own switch. Turn on exactly what fits how your community plays. Core modules default on; advanced ones default off. Nothing appears in any UI unless its toggle is on, and a module's AI parts only run in AI/HYBRID (its deterministic parts run in RULES; in MANUAL a human does it).
Core modules (on by default)¶
| Module | What it enables |
|---|---|
| Warrants | Search / arrest / bench warrants, the warrant queue, and signing. |
| Cases | Criminal cases, the docket, and the case file. |
| Hearings | Scheduled hearings / arraignments on the docket. |
| Rap sheet | A defendant's derived criminal history on the MDT person query and in the case file. |
| Corrections | The custody roster and the INCARCERATED countdown after a jail sentence. |
| Civ plea | Civilians plead Guilty / Not Guilty / No Contest from the portal. |
| Self-bail | Civilians post bail from the portal to clear a hold. |
| Report review | Judicial legal-sufficiency review of the underlying report. |
| Notify | The clerk/judge Notify action (push a court alert to a chosen audience). |
Advanced modules (off by default)¶
| Module | What it enables |
|---|---|
| Trials | Full adversarial proceedings — an AI prosecutor and public defender argue the case. |
| Legal assistant | An "ask the judge" Q&A helper and DA charge screening. |
| Civil court | Small claims, protective/restraining orders, name changes, marriage/divorce records. |
| Parole | Parole/probation tracking and early-release hearings. |
| Bail bonds | A bondsman role/business posting bonds. |
| Bounty | Fugitive bounties on failure-to-appear bench warrants. |
| Pardons | Pardons/commutations that vacate a sentence and seal the record. |
| Appeals | A second review of a closed case. |
| Evidence | Surface report evidence to the judge to weigh. |
| Roles | Formalize the courthouse cast (DA, public defender, magistrate, clerk, bailiff, probation, court reporter). |
Some advanced modules are ahead of their dedicated UI
The core modules plus appeals and the AI trial-style proceedings are live end-to-end today. The remaining advanced toggles (civil court, parole, bail bonds, bounty, pardons, evidence, legal assistant, roles) exist as server switches so they can light up incrementally — full dedicated screens for these are still being built out. Enabling them won't break anything; they simply don't all have a finished front end yet.
Choosing the judge¶
Under Admin → Court you configure the judge's identity and behavior. This colors every AI ruling and appears on the DOJ terminal, judgments, and notifications.
- Name / title / jurisdiction — e.g. "The Honorable A. Vance," "Superior Court of San Andreas." The jurisdiction becomes the DOJ terminal header.
- Temperament — a consistent judicial personality that shapes tone and sentencing severity (never lawfulness):
- Lenient — merciful; favors warnings, fines, probation, and the low end of each range (or below the minimum) for minor or first-time offenders.
- Balanced — even-handed; sentences around the middle, adjusting for aggravating/mitigating factors.
- Strict — firm; leans to the high end and jails where the code allows, especially for repeat offenders.
- Tone —
rp(in-character, formal courtroom voice) orplain(procedural language). - Provider & model — see below.
- Auto-bail — set a bail figure automatically so a number always exists.
OpenAI (ChatGPT) or Anthropic (Claude)¶
The AI judge can run on either provider — your choice, your key, your cost.
| Provider | Default model | Notes |
|---|---|---|
| OpenAI (ChatGPT) | gpt-4o |
Key must begin with sk-. |
| Anthropic (Claude) | claude-opus-4-8 |
Key must begin with sk-ant-. Opus is chosen by default for its legal reasoning. |
The provider and model live under the judge settings; the API key is the same one you save in Admin → AI Assist (it's shared with the other AI features, stored encrypted). Pick the provider that matches the key you've saved. You can override the model with any model name the provider offers.
The AI never overrides your rules
Whatever the provider or temperament, the AI only chooses within the penal-code ranges you set. The server hard-clamps every number it produces, so the judge can never invent a charge, exceed your maximums, or contradict your configuration.
Sentencing and the penal code¶
Your penal code is the source of truth and the hard ceiling. Each offense carries a jail range in days (jailMin / jailMax), a fine, and a bail figure, edited in Admin → Penal Code. The base sentence is pure penal-code math; the judge (human or AI) only picks within the range, and the server re-clamps the result.
For every guilty charge:
- Jail = a pick inside
[jailMin, jailMax]× counts. Where the discretion lives. - Fine = the code fine × counts (a judge may reduce, never exceed).
- Bail = the charge's bail figure.
- License action = whatever the penal code prescribes (suspend / revoke), wired to the enforcement engine.
Then your sentencing rules apply (all in Admin → Court):
| Setting | Effect |
|---|---|
| Stacking | consecutive (sum every charge), concurrent (longest charge only), or capped (sum, capped at a max). |
| Max jail days | The overall ceiling when stacking is capped. |
| Priors rule | none, percent (add a % per prior case), or strikes (three-strikes → the ceiling on a felony). |
| Include shared priors | Count convictions from your data-sharing partners toward priors and strikes. |
| Time-served credit | Subtract pretrial detention days from the jail term. |
| Minutes per day | Optional in-game conversion for timed auto-release (see Custody). |
jailMin == jailMax = zero AI wiggle room
Set an offense's min and max equal and the sentence for it is fully deterministic — even in AI mode, the judge has nothing to decide.
RULES-mode mechanics¶
In RULES mode (and as the backbone the AI/HYBRID modes clamp to) sentencing is scripted from these, which stack:
- Anchor — land at the
min,midpoint, ormaxof each penal range. - Sentencing grid — an optional guidelines matrix (offense class × prior-count bucket → jail days / fine) that overrides the bare anchor.
- Sufficiency checklist — a deterministic report gate (minimum narrative length, charge support, evidence-for-felony, signature) that can flag or kick back a weak report.
- Weighted scoring and a jury-roll RNG (a seedable, reproducible dismissal chance) are optional extras for communities that want a tunable or unpredictable element.
How cases and warrants begin¶
Court hooks into the records workflow — officers rarely "open a case" by hand.
- Arrest → case. When an arrest report is approved in Records, a criminal case opens automatically (numbered
CR-YY-####), and in AI/RULES mode the judge immediately begins reviewing it. A report naming several defendants opens a case for each. - Warrant report → warrant. When an officer files a Search / Arrest / Bench warrant report in Records, it becomes a linked
Warrantin Requested status, with the report narrative auto-populated as the probable-cause affidavit. Records is the front door — there's no separate "request warrant" step. - Not-guilty plea → contested case. When a civilian pleads Not Guilty on a citation, a case opens so it can be argued.
- Failure to appear → bench warrant. The Process overdue action sweeps unpaid citations past their court date into active bench warrants.
You can also open a case manually from the Court terminal when you need to.
An active warrant makes someone WANTED automatically
Once a warrant is Signed/Active, the subject shows as WANTED in MDT person and plate lookups, BOLOs, and in-game ALPR — no extra step. Signing is the trigger.
The DOJ Court terminal¶
The Court surface is styled as a Department of Justice judicial terminal. What you see depends on the hat you're wearing — the header has an "Act as" switcher because the same account can be the judge, a filing officer, or a civilian defendant:
- Judge · Bench (owner / admin /
court/judgerole, or super-admin) — full judicial powers. - Law Enforcement — the officer view of cases you filed.
- Your civilian character — the defendant view of your own matters.
Bench¶
The judge's landing page: the nameplate, live stat tiles (pending warrants, open cases, hearings today, in custody), and a "Needs your ruling" queue that surfaces pending warrants, cases ready for sentencing, and reports flagged deficient.
Warrants & the Chambers¶
The Warrants queue lists every warrant with its subject, basis, requester, and status. Open one to see the application and the probable-cause affidavit.
Warrants move through: Requested → Signed → Active → Served, or Denied / Expunged. Signing, denying, and expunging are judicial acts (court staff only); serving and activating are field actions.
- MANUAL / HYBRID — the judge writes findings and clicks Sign or Deny.
- AI / HYBRID — a Chambers · Judicial Inquiry panel opens: the officer converses with the AI judge, which reads the affidavit and the subject's rap sheet, asks clarifying questions, and rules with written reasoning. In
AImode a grant/deny applies immediately; inHYBRIDit stays advisory for a human to confirm. A denied warrant can be re-argued (a motion to reconsider) until the court re-rules.
The court's decision (signed judge + date, or a declined stamp + reason) is stamped back onto the linked warrant report so the document always shows the real outcome.
Cases & the case file¶
The Cases list is row-scoped: staff see everything, supervisors see their department, officers see cases they filed, and defendants see their own. Opening a case gives you the file:
- Charges & disposition — each charge with its penal-code range; judges set Guilty / Not Guilty / Dismissed / Reduced.
- Case proceedings — a persistent, turn-based courtroom chat shared by the judge, officer, and defendant. In AI mode the judge drives it: staging openings, questioning parties, and (with the trial flow) voicing a prosecutor and public defender. Officers and defendants see a read-only timeline and only get a compose box when the court is waiting on them ("Action required"); they can speak out of turn, but they're warned it may prejudice the case.
- Report sufficiency — the review verdict (Strong / Adequate / Weak / Deficient) with deficiencies and reasoning, plus Proceed / Kick back / Dismiss actions.
- Sentencing — a penal-code-driven panel where the judge sets per-charge jail days (bounded by the range), a time-served credit, and pronounces the sentence.
- Rap sheet and Hearings panels alongside.
HYBRID confirm gates
In HYBRID mode the AI drafts a verdict or sentence and parks it for a human. The judge sees a "The court has drafted a verdict/sentence for your confirmation" prompt with Confirm and Reject buttons. Anything above your auto-handle max class (infraction / misdemeanor / felony) always requires this confirmation; at or below it, the AI may finalize on its own.
Report sufficiency review¶
The judge grades whether the report's facts support the elements of each charge — substance, not grammar or length. A short but complete report passes; a long but baseless one fails. In AI/HYBRID the AI runs it; in RULES/MANUAL it's the deterministic checklist. A deficient report can be dismissed, reduced, or kicked back to the officer (tagged [COURT] so it's distinct from a supervisor kickback) to amend and refile.
Docket, Custody, Judgments¶
- Docket — all scheduled hearings across cases, sorted by date.
- Custody — the corrections roster.
- Judgments — the permanent record of rulings and court documents (sentencing orders, dismissals, signed/served/denied warrants).
Notify¶
Rather than a passive board, a clerk or judge can push a court alert (warrant signed, verdict, court date) to a chosen audience: all on-duty officers, dispatch, need-to-know, or just me. It fans out over the live connection and, optionally, to Discord.
Custody & corrections¶
A jail sentence adds the defendant to the Custody Roster with an INCARCERATED flag. By default release is manual — a judge clicks Release when the sentence is served. If you set minutes per day, the roster shows a live countdown and the defendant becomes eligible for release when it hits zero.
The sentence is emitted to FiveM as well — PulseCAD is the source of truth for the sentence, but each community's own jail script decides how the in-game jail actually works (see below).
What civilians do¶
From the Civilian Portal, a defendant can:
- Plead on a citation or charge — Guilty or No Contest turns the fine into a bill to pay; Not Guilty opens a case to contest it.
- Post bail to clear a hold (deducts in-game money when your community uses the money economy).
- Argue their case in the proceedings chat when the court invites them, and appoint counsel — the AI public defender by default, or name a real player as their lawyer.
- Appeal a closed case once, which stays the prior judgment and reopens the matter for reconsideration.
What officers do (MDT)¶
From the Law Enforcement MDT:
- Rap sheet on the person query — prior convictions, pending charges, past sentences, and outstanding warrants (including shared-partner priors when enabled).
- Serve warrant — act on an active court warrant in the field.
- File warrant reports and arrest reports that feed the court automatically.
- Court kickbacks surface back to the filing officer (as a
[COURT]-tagged returned report) to amend and refile.
Discord integration¶
When a court Discord channel is configured (Admin → Court), the Discord bot can post court activity and act on it:
- Warrant requests post as embeds with Sign and Deny buttons — a judge can rule straight from Discord (the bot verifies the Discord user maps to a court-staff member first).
- Verdicts are posted to the court channel.
- Court-date reminders can be sent.
FiveM integration¶
Court rulings reach the game through the FiveM resource:
- Sentence — a
sentenceevent (jail days + your minutes-per-day) is emitted so your community's own jail script puts the player away however it implements jail. PulseCAD does not force an in-game mechanic. - Notification — any ruling sends the defendant an in-game notice ("Court Ruling: …"), useful even for communities without a custom jail script.
- Fines and bail — when the money economy is enabled, court fines and posted bail are deducted in game via the same proven fine mechanism used for citations; on
cad_onlythey're recorded in PulseCAD without touching in-game money.
These are targeted to the specific player by their license, so on a multi-server community only the server the defendant is online on acts.
Related¶
- Admin — enable Court, pick the mode, configure the judge, sentencing rules, penal-code ranges, the AI key, and the Discord court channel.
- Civilian Portal — pleas, self-bail, appeals, and appointing counsel.
- Law Enforcement (MDT) — rap sheets, serving warrants, and filing the reports that open cases.
- Data Sharing — how shared-partner convictions count toward priors.
- Discord and FiveM — where rulings are announced and enforced.