@gelabs/ovr 0.2.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth-auth.js +1 -1
- package/dist/auth.js +1 -1
- package/dist/{chunk-MDTRBOPQ.js → chunk-2C3VCTYJ.js} +1 -1
- package/dist/chunk-3YKVH4Y7.js +126 -0
- package/dist/chunk-6YFZLXFP.js +84 -0
- package/dist/{chunk-3NZ2XUBO.js → chunk-AJ2RZTVX.js} +9 -2
- package/dist/chunk-BI4EGLPG.js +298 -0
- package/dist/{chunk-3KIDW4LT.js → chunk-BVI5XDDA.js} +1 -1
- package/dist/chunk-DJMUW5T2.js +298 -0
- package/dist/{chunk-BIQ2J75Y.js → chunk-GLIK5BHP.js} +2 -2
- package/dist/{chunk-JEYT63LE.js → chunk-IBZVIUNI.js} +1 -1
- package/dist/{chunk-4SZXBT56.js → chunk-NT72CQAI.js} +2 -2
- package/dist/{chunk-E2D7QT6N.js → chunk-TJSNVTVB.js} +1 -1
- package/dist/{chunk-5Z2IAD5I.js → chunk-TLG4C2XI.js} +2 -2
- package/dist/chunk-V7VQVDWS.js +237 -0
- package/dist/chunk-WUNTHINH.js +98 -0
- package/dist/{chunk-IF5UAVIE.js → chunk-YC7G2IOZ.js} +1 -1
- package/dist/{chunk-IB4JVGKJ.js → chunk-YGYA7KEG.js} +47 -3
- package/dist/{chunk-GDOCD7LT.js → chunk-ZUMEOZ22.js} +5 -5
- package/dist/core-i18n.d.ts +2 -2
- package/dist/core-i18n.js +1 -1
- package/dist/core.d.ts +61 -1
- package/dist/core.js +1 -1
- package/dist/data-mock-store.js +330 -12
- package/dist/data-prisma-store.js +319 -9
- package/dist/data-seed-runner.js +18 -15
- package/dist/data.d.ts +64 -3
- package/dist/generated/client/edge.js +31 -10
- package/dist/generated/client/index-browser.js +28 -7
- package/dist/generated/client/index.d.ts +3583 -577
- package/dist/generated/client/index.js +31 -10
- package/dist/generated/client/package.json +1 -1
- package/dist/generated/client/schema.prisma +48 -9
- package/dist/generated/client/wasm.js +31 -10
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/offline.d.ts +34 -1
- package/dist/offline.js +2 -2
- package/dist/types-B8MopM4b.d.ts +281 -0
- package/dist/types.d.ts +104 -1
- package/dist/types.js +1 -1
- package/dist/ui-components-admin/accounts-manager.d.ts +52 -0
- package/dist/ui-components-admin/accounts-manager.js +471 -0
- package/dist/ui-components-admin/admin-nav.d.ts +15 -1
- package/dist/ui-components-admin/admin-nav.js +388 -60
- package/dist/ui-components-admin/issuance-form.js +72 -13
- package/dist/ui-components-admin/logs-viewer.d.ts +13 -0
- package/dist/ui-components-admin/logs-viewer.js +102 -0
- package/dist/ui-components-admin/notifications-list.d.ts +5 -0
- package/dist/ui-components-admin/notifications-list.js +70 -0
- package/dist/ui-components-admin/officers-manager.d.ts +27 -0
- package/dist/ui-components-admin/officers-manager.js +271 -0
- package/dist/ui-components-admin/roles-manager.d.ts +37 -0
- package/dist/ui-components-admin/roles-manager.js +406 -0
- package/dist/ui-components-admin/ticket-preview.js +7 -7
- package/dist/ui-components-admin/tickets-table.js +56 -33
- package/dist/ui-components-admin/violations-manager.d.ts +32 -0
- package/dist/ui-components-admin/violations-manager.js +385 -0
- package/dist/ui-components-citizen/citizen-nav.js +2 -2
- package/dist/ui-components-citizen/payment-form.js +5 -5
- package/dist/ui-components-citizen/payment-qr-dialog.js +4 -4
- package/dist/ui-components-citizen/ticket-not-found.js +2 -2
- package/dist/ui-components-citizen/violation-history-table.js +3 -3
- package/dist/ui-components-shared/amount-summary.js +4 -4
- package/dist/ui-components-shared/money.js +3 -3
- package/dist/ui-components-shared/municipal-seal.js +3 -3
- package/dist/ui-components-shared/official-header.js +4 -4
- package/dist/ui-components-shared/site-header.js +4 -4
- package/dist/ui-components-shared/sonner.js +2 -2
- package/dist/ui-components-shared/theme-toggle.js +3 -3
- package/dist/ui-components-shared/ticket-receipt.js +13 -6
- package/dist/ui-components-shared/violations-table.js +4 -4
- package/dist/ui-components-ui/badge.d.ts +1 -1
- package/dist/ui-components-ui/button.d.ts +1 -1
- package/dist/ui-components-ui/dropdown-menu.js +2 -237
- package/dist/ui-components-ui/sheet.js +3 -126
- package/dist/ui-config.d.ts +1 -1
- package/dist/ui-config.js +2 -2
- package/dist/ui-server.d.ts +1 -1
- package/dist/ui-server.js +2 -2
- package/package.json +6 -6
- package/prisma/migrations/20260622010000_add_super_admin_role/migration.sql +3 -0
- package/prisma/migrations/20260622020000_add_apprehending_enforcer/migration.sql +4 -0
- package/prisma/migrations/20260622030000_custom_roles/migration.sql +30 -0
- package/prisma/migrations/20260622040000_add_activity_log/migration.sql +18 -0
- package/prisma/migrations/20260622050000_violation_catalog_management/migration.sql +5 -0
- package/prisma/schema.prisma +48 -9
- package/dist/chunk-5YYR37CF.js +0 -146
- package/dist/chunk-B634JHKZ.js +0 -181
- package/dist/types-CtBC5-TW.d.ts +0 -129
|
@@ -109,7 +109,9 @@ exports.Prisma.ViolationCatalogScalarFieldEnum = {
|
|
|
109
109
|
category: 'category',
|
|
110
110
|
basicFine: 'basicFine',
|
|
111
111
|
legalText: 'legalText',
|
|
112
|
-
|
|
112
|
+
active: 'active',
|
|
113
|
+
createdAt: 'createdAt',
|
|
114
|
+
updatedAt: 'updatedAt'
|
|
113
115
|
};
|
|
114
116
|
|
|
115
117
|
exports.Prisma.TicketScalarFieldEnum = {
|
|
@@ -130,6 +132,8 @@ exports.Prisma.TicketScalarFieldEnum = {
|
|
|
130
132
|
placeOfViolation: 'placeOfViolation',
|
|
131
133
|
remarks: 'remarks',
|
|
132
134
|
issuedBy: 'issuedBy',
|
|
135
|
+
apprehendingEnforcerId: 'apprehendingEnforcerId',
|
|
136
|
+
apprehendingEnforcerName: 'apprehendingEnforcerName',
|
|
133
137
|
officerId: 'officerId',
|
|
134
138
|
assessedAt: 'assessedAt',
|
|
135
139
|
dueDate: 'dueDate',
|
|
@@ -156,6 +160,15 @@ exports.Prisma.PaymentScalarFieldEnum = {
|
|
|
156
160
|
paidAt: 'paidAt'
|
|
157
161
|
};
|
|
158
162
|
|
|
163
|
+
exports.Prisma.RoleScalarFieldEnum = {
|
|
164
|
+
name: 'name',
|
|
165
|
+
label: 'label',
|
|
166
|
+
isSystem: 'isSystem',
|
|
167
|
+
permissions: 'permissions',
|
|
168
|
+
createdAt: 'createdAt',
|
|
169
|
+
updatedAt: 'updatedAt'
|
|
170
|
+
};
|
|
171
|
+
|
|
159
172
|
exports.Prisma.UserScalarFieldEnum = {
|
|
160
173
|
id: 'id',
|
|
161
174
|
username: 'username',
|
|
@@ -166,6 +179,17 @@ exports.Prisma.UserScalarFieldEnum = {
|
|
|
166
179
|
createdAt: 'createdAt'
|
|
167
180
|
};
|
|
168
181
|
|
|
182
|
+
exports.Prisma.ActivityLogScalarFieldEnum = {
|
|
183
|
+
id: 'id',
|
|
184
|
+
actorId: 'actorId',
|
|
185
|
+
actorUsername: 'actorUsername',
|
|
186
|
+
action: 'action',
|
|
187
|
+
summary: 'summary',
|
|
188
|
+
targetType: 'targetType',
|
|
189
|
+
targetId: 'targetId',
|
|
190
|
+
createdAt: 'createdAt'
|
|
191
|
+
};
|
|
192
|
+
|
|
169
193
|
exports.Prisma.SortOrder = {
|
|
170
194
|
asc: 'asc',
|
|
171
195
|
desc: 'desc'
|
|
@@ -198,18 +222,15 @@ exports.PaymentStatus = exports.$Enums.PaymentStatus = {
|
|
|
198
222
|
CONTESTED: 'CONTESTED'
|
|
199
223
|
};
|
|
200
224
|
|
|
201
|
-
exports.UserRole = exports.$Enums.UserRole = {
|
|
202
|
-
ENFORCER: 'ENFORCER',
|
|
203
|
-
ADMIN: 'ADMIN'
|
|
204
|
-
};
|
|
205
|
-
|
|
206
225
|
exports.Prisma.ModelName = {
|
|
207
226
|
Officer: 'Officer',
|
|
208
227
|
ViolationCatalog: 'ViolationCatalog',
|
|
209
228
|
Ticket: 'Ticket',
|
|
210
229
|
TicketViolation: 'TicketViolation',
|
|
211
230
|
Payment: 'Payment',
|
|
212
|
-
|
|
231
|
+
Role: 'Role',
|
|
232
|
+
User: 'User',
|
|
233
|
+
ActivityLog: 'ActivityLog'
|
|
213
234
|
};
|
|
214
235
|
/**
|
|
215
236
|
* Create the Client
|
|
@@ -262,8 +283,8 @@ const config = {
|
|
|
262
283
|
}
|
|
263
284
|
}
|
|
264
285
|
},
|
|
265
|
-
"inlineSchema": "// e-OVR data model — the real backend behind the `DataStore` interface.\n// Mirrors `lib/types.ts`: one canonical Ticket record, normalized into\n// ticket + violations (1:N) + payment (1:1), with officers, a violation\n// catalog, and admin users. Money is Decimal(12,2); the store converts\n// Prisma.Decimal -> number at the boundary (Decimal is not serializable\n// across the RSC -> Client boundary).\n\ngenerator client {\n provider = \"prisma-client-js\"\n // Custom in-package output (pnpm-deterministic): the generated client is a real\n // file inside this package, imported via \"./generated/client\". Do NOT rely on a\n // hoisted node_modules/.prisma. The default @prisma/client (.prisma/client) is\n // intentionally NEVER generated after this move — ALL PrismaClient/Prisma imports\n // must go through @gelabs/ovr-data/generated/client.\n output = \"../src/generated/client\"\n // \"native\" for host dev (macOS); the musl/OpenSSL-3 target runs inside the\n // node:22-alpine Docker image.\n binaryTargets = [\"native\", \"linux-musl-openssl-3.0.x\"]\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nenum ViolationCategory {\n TRAFFIC\n ORDINANCE\n}\n\nenum PaymentMethod {\n GCASH\n MAYA\n LANDBANK\n OVER_THE_COUNTER\n}\n\n/**\n * Persisted, explicit payment state (not the displayed status).\n */\nenum PaymentStatus {\n UNPAID\n PAID\n CONTESTED\n}\n\
|
|
266
|
-
"inlineSchemaHash": "
|
|
286
|
+
"inlineSchema": "// e-OVR data model — the real backend behind the `DataStore` interface.\n// Mirrors `lib/types.ts`: one canonical Ticket record, normalized into\n// ticket + violations (1:N) + payment (1:1), with officers, a violation\n// catalog, and admin users. Money is Decimal(12,2); the store converts\n// Prisma.Decimal -> number at the boundary (Decimal is not serializable\n// across the RSC -> Client boundary).\n\ngenerator client {\n provider = \"prisma-client-js\"\n // Custom in-package output (pnpm-deterministic): the generated client is a real\n // file inside this package, imported via \"./generated/client\". Do NOT rely on a\n // hoisted node_modules/.prisma. The default @prisma/client (.prisma/client) is\n // intentionally NEVER generated after this move — ALL PrismaClient/Prisma imports\n // must go through @gelabs/ovr-data/generated/client.\n output = \"../src/generated/client\"\n // \"native\" for host dev (macOS); the musl/OpenSSL-3 target runs inside the\n // node:22-alpine Docker image.\n binaryTargets = [\"native\", \"linux-musl-openssl-3.0.x\"]\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nenum ViolationCategory {\n TRAFFIC\n ORDINANCE\n}\n\nenum PaymentMethod {\n GCASH\n MAYA\n LANDBANK\n OVER_THE_COUNTER\n}\n\n/**\n * Persisted, explicit payment state (not the displayed status).\n */\nenum PaymentStatus {\n UNPAID\n PAID\n CONTESTED\n}\n\nmodel Officer {\n id String @id // slug, e.g. \"off-novelo\"\n name String // \"NOVELO, RAYMUNDO V.\"\n badgeNo String?\n office String // e.g. \"POSO\"\n\n tickets Ticket[]\n user User?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel ViolationCatalog {\n code String @id // e.g. \"A25 S1-9 S-2021\"\n title String\n category ViolationCategory\n basicFine Decimal @db.Decimal(12, 2)\n legalText String?\n active Boolean @default(true) // GE-031: false = archived (hidden from issuance)\n\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n}\n\nmodel Ticket {\n // system-generated identifiers\n ovrTicketNo String @id // \"IBA-2026-000123\"\n orderOfPaymentNo String @unique // \"IBA-2026-000123-01\"\n billNo String @unique // \"M-2026-06-03-POSO-A176-000123\"\n\n // violator snapshot (immutable facts — flat columns, not a relation)\n violatorFirstName String\n violatorMiddleName String?\n violatorLastName String\n violatorStreet String\n violatorBarangay String?\n violatorCityMunicipality String\n violatorProvince String\n violatorLicenseNumber String\n violatorPlateNumber String?\n violatorContactNo String?\n\n // enforcer-entered\n apprehendedAt DateTime\n placeOfViolation String?\n remarks String?\n issuedBy String?\n\n // GE-011: the enforcer ACCOUNT who apprehended (+ snapshot name for display).\n // Soft reference to User.id — intentionally NOT a hard FK so the attribution\n // survives if the account is later renamed or removed.\n apprehendingEnforcerId String?\n apprehendingEnforcerName String?\n\n officerId String\n officer Officer @relation(fields: [officerId], references: [id])\n\n // system-generated on confirm\n assessedAt DateTime\n dueDate DateTime\n basicFinesTotal Decimal @db.Decimal(12, 2)\n paymentStatus PaymentStatus @default(UNPAID)\n\n createdAt DateTime @default(now())\n\n violations TicketViolation[]\n payment Payment?\n\n // back filters used by listTickets (name / plate / status / recency)\n @@index([violatorLastName])\n @@index([violatorPlateNumber])\n @@index([paymentStatus])\n @@index([createdAt])\n}\n\nmodel TicketViolation {\n id String @id @default(cuid())\n ticketOvrNo String\n ticket Ticket @relation(fields: [ticketOvrNo], references: [ovrTicketNo], onDelete: Cascade)\n\n // Soft reference to ViolationCatalog.code — intentionally NOT a hard FK so the\n // snapshot (title/basicFine) survives any later catalog edit or removal.\n catalogCode String\n title String\n basicFine Decimal @db.Decimal(12, 2)\n details String?\n\n @@index([ticketOvrNo])\n}\n\nmodel Payment {\n id String @id @default(cuid())\n ticketOvrNo String @unique // one payment per ticket\n ticket Ticket @relation(fields: [ticketOvrNo], references: [ovrTicketNo], onDelete: Cascade)\n\n method PaymentMethod\n amount Decimal @db.Decimal(12, 2)\n referenceNo String @unique\n paidAt DateTime\n}\n\n// A role + its permission set (GE-013, custom roles). Permission keys come from\n// the SDK catalog (@gelabs/ovr-types PERMISSION_CATALOG); the mapping is data.\nmodel Role {\n name String @id // \"SUPER_ADMIN\" / \"ENFORCER\" / custom slug e.g. \"cashier\"\n label String // display name shown in the UI\n isSystem Boolean @default(false) // system roles can't be renamed or deleted\n permissions String[] // granted Permission keys\n\n users User[]\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel User {\n id String @id @default(cuid())\n username String @unique\n passwordHash String\n\n // Role is DATA now (see model Role): a string FK so custom roles are allowed.\n role String @default(\"ENFORCER\")\n roleRef Role @relation(fields: [role], references: [name])\n\n active Boolean @default(true)\n\n // Links a login to an enforcer (so issued tickets can attribute the officer).\n officerId String? @unique\n officer Officer? @relation(fields: [officerId], references: [id])\n\n createdAt DateTime @default(now())\n}\n\n// Audit trail (GE-022): who did what, when. Append-only. Actor is a SOFT\n// reference (snapshot username) so entries survive account deletion.\nmodel ActivityLog {\n id String @id @default(cuid())\n actorId String?\n actorUsername String?\n action String // e.g. \"auth.login\", \"account.create\", \"role.update\"\n summary String // human-readable one-liner\n targetType String? // \"account\" | \"role\" | \"ticket\" | …\n targetId String?\n\n createdAt DateTime @default(now())\n\n @@index([action])\n @@index([actorId])\n @@index([createdAt])\n}\n",
|
|
287
|
+
"inlineSchemaHash": "b1a244b0a6fa1efd29dbbc7bf66343a6833465472fdb389d5be80139b87b560a",
|
|
267
288
|
"copyEngine": true
|
|
268
289
|
}
|
|
269
290
|
|
|
@@ -284,7 +305,7 @@ if (!fs.existsSync(path.join(__dirname, 'schema.prisma'))) {
|
|
|
284
305
|
config.isBundled = true
|
|
285
306
|
}
|
|
286
307
|
|
|
287
|
-
config.runtimeDataModel = JSON.parse("{\"models\":{\"Officer\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"badgeNo\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"office\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"tickets\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Ticket\",\"nativeType\":null,\"relationName\":\"OfficerToTicket\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"OfficerToUser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ViolationCatalog\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"code\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"title\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"category\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ViolationCategory\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"basicFine\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Decimal\",\"nativeType\":[\"Decimal\",[\"12\",\"2\"]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"legalText\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Ticket\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"ovrTicketNo\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"orderOfPaymentNo\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"billNo\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"violatorFirstName\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"violatorMiddleName\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"violatorLastName\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"violatorStreet\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"violatorBarangay\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"violatorCityMunicipality\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"violatorProvince\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"violatorLicenseNumber\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"violatorPlateNumber\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"violatorContactNo\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"apprehendedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"placeOfViolation\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"remarks\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"issuedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"officerId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"officer\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Officer\",\"nativeType\":null,\"relationName\":\"OfficerToTicket\",\"relationFromFields\":[\"officerId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"assessedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"dueDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"basicFinesTotal\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Decimal\",\"nativeType\":[\"Decimal\",[\"12\",\"2\"]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"paymentStatus\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"PaymentStatus\",\"nativeType\":null,\"default\":\"UNPAID\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"violations\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TicketViolation\",\"nativeType\":null,\"relationName\":\"TicketToTicketViolation\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"payment\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Payment\",\"nativeType\":null,\"relationName\":\"PaymentToTicket\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"TicketViolation\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"ticketOvrNo\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"ticket\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Ticket\",\"nativeType\":null,\"relationName\":\"TicketToTicketViolation\",\"relationFromFields\":[\"ticketOvrNo\"],\"relationToFields\":[\"ovrTicketNo\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"catalogCode\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"title\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"basicFine\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Decimal\",\"nativeType\":[\"Decimal\",[\"12\",\"2\"]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"details\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Payment\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"ticketOvrNo\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"ticket\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Ticket\",\"nativeType\":null,\"relationName\":\"PaymentToTicket\",\"relationFromFields\":[\"ticketOvrNo\"],\"relationToFields\":[\"ovrTicketNo\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"method\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"PaymentMethod\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"amount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Decimal\",\"nativeType\":[\"Decimal\",[\"12\",\"2\"]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"referenceNo\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"paidAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"User\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"username\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"passwordHash\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"role\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"UserRole\",\"nativeType\":null,\"default\":\"ENFORCER\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"active\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"officerId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"officer\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Officer\",\"nativeType\":null,\"relationName\":\"OfficerToUser\",\"relationFromFields\":[\"officerId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false}},\"enums\":{\"ViolationCategory\":{\"values\":[{\"name\":\"TRAFFIC\",\"dbName\":null},{\"name\":\"ORDINANCE\",\"dbName\":null}],\"dbName\":null},\"PaymentMethod\":{\"values\":[{\"name\":\"GCASH\",\"dbName\":null},{\"name\":\"MAYA\",\"dbName\":null},{\"name\":\"LANDBANK\",\"dbName\":null},{\"name\":\"OVER_THE_COUNTER\",\"dbName\":null}],\"dbName\":null},\"PaymentStatus\":{\"values\":[{\"name\":\"UNPAID\",\"dbName\":null},{\"name\":\"PAID\",\"dbName\":null},{\"name\":\"CONTESTED\",\"dbName\":null}],\"dbName\":null,\"documentation\":\"* Persisted, explicit payment state (not the displayed status).\"},\"UserRole\":{\"values\":[{\"name\":\"ENFORCER\",\"dbName\":null},{\"name\":\"ADMIN\",\"dbName\":null}],\"dbName\":null}},\"types\":{}}")
|
|
308
|
+
config.runtimeDataModel = JSON.parse("{\"models\":{\"Officer\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"badgeNo\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"office\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"tickets\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Ticket\",\"nativeType\":null,\"relationName\":\"OfficerToTicket\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"user\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"OfficerToUser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ViolationCatalog\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"code\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"title\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"category\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ViolationCategory\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"basicFine\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Decimal\",\"nativeType\":[\"Decimal\",[\"12\",\"2\"]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"legalText\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"active\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":true}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Ticket\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"ovrTicketNo\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"orderOfPaymentNo\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"billNo\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"violatorFirstName\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"violatorMiddleName\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"violatorLastName\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"violatorStreet\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"violatorBarangay\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"violatorCityMunicipality\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"violatorProvince\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"violatorLicenseNumber\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"violatorPlateNumber\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"violatorContactNo\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"apprehendedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"placeOfViolation\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"remarks\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"issuedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"apprehendingEnforcerId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"apprehendingEnforcerName\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"officerId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"officer\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Officer\",\"nativeType\":null,\"relationName\":\"OfficerToTicket\",\"relationFromFields\":[\"officerId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"assessedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"dueDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"basicFinesTotal\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Decimal\",\"nativeType\":[\"Decimal\",[\"12\",\"2\"]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"paymentStatus\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"PaymentStatus\",\"nativeType\":null,\"default\":\"UNPAID\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"violations\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TicketViolation\",\"nativeType\":null,\"relationName\":\"TicketToTicketViolation\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"payment\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Payment\",\"nativeType\":null,\"relationName\":\"PaymentToTicket\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"TicketViolation\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"ticketOvrNo\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"ticket\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Ticket\",\"nativeType\":null,\"relationName\":\"TicketToTicketViolation\",\"relationFromFields\":[\"ticketOvrNo\"],\"relationToFields\":[\"ovrTicketNo\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"catalogCode\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"title\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"basicFine\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Decimal\",\"nativeType\":[\"Decimal\",[\"12\",\"2\"]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"details\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Payment\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"ticketOvrNo\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"ticket\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Ticket\",\"nativeType\":null,\"relationName\":\"PaymentToTicket\",\"relationFromFields\":[\"ticketOvrNo\"],\"relationToFields\":[\"ovrTicketNo\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"method\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"PaymentMethod\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"amount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Decimal\",\"nativeType\":[\"Decimal\",[\"12\",\"2\"]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"referenceNo\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"paidAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Role\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"label\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isSystem\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"permissions\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"users\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"User\",\"nativeType\":null,\"relationName\":\"RoleToUser\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"User\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"username\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"passwordHash\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"role\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":\"ENFORCER\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"roleRef\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Role\",\"nativeType\":null,\"relationName\":\"RoleToUser\",\"relationFromFields\":[\"role\"],\"relationToFields\":[\"name\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"active\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"officerId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"officer\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Officer\",\"nativeType\":null,\"relationName\":\"OfficerToUser\",\"relationFromFields\":[\"officerId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ActivityLog\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"actorId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"actorUsername\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"action\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"summary\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"targetType\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"targetId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false}},\"enums\":{\"ViolationCategory\":{\"values\":[{\"name\":\"TRAFFIC\",\"dbName\":null},{\"name\":\"ORDINANCE\",\"dbName\":null}],\"dbName\":null},\"PaymentMethod\":{\"values\":[{\"name\":\"GCASH\",\"dbName\":null},{\"name\":\"MAYA\",\"dbName\":null},{\"name\":\"LANDBANK\",\"dbName\":null},{\"name\":\"OVER_THE_COUNTER\",\"dbName\":null}],\"dbName\":null},\"PaymentStatus\":{\"values\":[{\"name\":\"UNPAID\",\"dbName\":null},{\"name\":\"PAID\",\"dbName\":null},{\"name\":\"CONTESTED\",\"dbName\":null}],\"dbName\":null,\"documentation\":\"* Persisted, explicit payment state (not the displayed status).\"}},\"types\":{}}")
|
|
288
309
|
defineDmmfProperty(exports.Prisma, config.runtimeDataModel)
|
|
289
310
|
config.engineWasm = undefined
|
|
290
311
|
config.compilerWasm = undefined
|
|
@@ -44,11 +44,6 @@ enum PaymentStatus {
|
|
|
44
44
|
CONTESTED
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
enum UserRole {
|
|
48
|
-
ENFORCER
|
|
49
|
-
ADMIN
|
|
50
|
-
}
|
|
51
|
-
|
|
52
47
|
model Officer {
|
|
53
48
|
id String @id // slug, e.g. "off-novelo"
|
|
54
49
|
name String // "NOVELO, RAYMUNDO V."
|
|
@@ -68,8 +63,10 @@ model ViolationCatalog {
|
|
|
68
63
|
category ViolationCategory
|
|
69
64
|
basicFine Decimal @db.Decimal(12, 2)
|
|
70
65
|
legalText String?
|
|
66
|
+
active Boolean @default(true) // GE-031: false = archived (hidden from issuance)
|
|
71
67
|
|
|
72
68
|
createdAt DateTime @default(now())
|
|
69
|
+
updatedAt DateTime @default(now()) @updatedAt
|
|
73
70
|
}
|
|
74
71
|
|
|
75
72
|
model Ticket {
|
|
@@ -96,6 +93,12 @@ model Ticket {
|
|
|
96
93
|
remarks String?
|
|
97
94
|
issuedBy String?
|
|
98
95
|
|
|
96
|
+
// GE-011: the enforcer ACCOUNT who apprehended (+ snapshot name for display).
|
|
97
|
+
// Soft reference to User.id — intentionally NOT a hard FK so the attribution
|
|
98
|
+
// survives if the account is later renamed or removed.
|
|
99
|
+
apprehendingEnforcerId String?
|
|
100
|
+
apprehendingEnforcerName String?
|
|
101
|
+
|
|
99
102
|
officerId String
|
|
100
103
|
officer Officer @relation(fields: [officerId], references: [id])
|
|
101
104
|
|
|
@@ -143,12 +146,30 @@ model Payment {
|
|
|
143
146
|
paidAt DateTime
|
|
144
147
|
}
|
|
145
148
|
|
|
149
|
+
// A role + its permission set (GE-013, custom roles). Permission keys come from
|
|
150
|
+
// the SDK catalog (@gelabs/ovr-types PERMISSION_CATALOG); the mapping is data.
|
|
151
|
+
model Role {
|
|
152
|
+
name String @id // "SUPER_ADMIN" / "ENFORCER" / custom slug e.g. "cashier"
|
|
153
|
+
label String // display name shown in the UI
|
|
154
|
+
isSystem Boolean @default(false) // system roles can't be renamed or deleted
|
|
155
|
+
permissions String[] // granted Permission keys
|
|
156
|
+
|
|
157
|
+
users User[]
|
|
158
|
+
|
|
159
|
+
createdAt DateTime @default(now())
|
|
160
|
+
updatedAt DateTime @updatedAt
|
|
161
|
+
}
|
|
162
|
+
|
|
146
163
|
model User {
|
|
147
|
-
id String
|
|
148
|
-
username String
|
|
164
|
+
id String @id @default(cuid())
|
|
165
|
+
username String @unique
|
|
149
166
|
passwordHash String
|
|
150
|
-
|
|
151
|
-
|
|
167
|
+
|
|
168
|
+
// Role is DATA now (see model Role): a string FK so custom roles are allowed.
|
|
169
|
+
role String @default("ENFORCER")
|
|
170
|
+
roleRef Role @relation(fields: [role], references: [name])
|
|
171
|
+
|
|
172
|
+
active Boolean @default(true)
|
|
152
173
|
|
|
153
174
|
// Links a login to an enforcer (so issued tickets can attribute the officer).
|
|
154
175
|
officerId String? @unique
|
|
@@ -156,3 +177,21 @@ model User {
|
|
|
156
177
|
|
|
157
178
|
createdAt DateTime @default(now())
|
|
158
179
|
}
|
|
180
|
+
|
|
181
|
+
// Audit trail (GE-022): who did what, when. Append-only. Actor is a SOFT
|
|
182
|
+
// reference (snapshot username) so entries survive account deletion.
|
|
183
|
+
model ActivityLog {
|
|
184
|
+
id String @id @default(cuid())
|
|
185
|
+
actorId String?
|
|
186
|
+
actorUsername String?
|
|
187
|
+
action String // e.g. "auth.login", "account.create", "role.update"
|
|
188
|
+
summary String // human-readable one-liner
|
|
189
|
+
targetType String? // "account" | "role" | "ticket" | …
|
|
190
|
+
targetId String?
|
|
191
|
+
|
|
192
|
+
createdAt DateTime @default(now())
|
|
193
|
+
|
|
194
|
+
@@index([action])
|
|
195
|
+
@@index([actorId])
|
|
196
|
+
@@index([createdAt])
|
|
197
|
+
}
|
|
@@ -108,7 +108,9 @@ exports.Prisma.ViolationCatalogScalarFieldEnum = {
|
|
|
108
108
|
category: 'category',
|
|
109
109
|
basicFine: 'basicFine',
|
|
110
110
|
legalText: 'legalText',
|
|
111
|
-
|
|
111
|
+
active: 'active',
|
|
112
|
+
createdAt: 'createdAt',
|
|
113
|
+
updatedAt: 'updatedAt'
|
|
112
114
|
};
|
|
113
115
|
|
|
114
116
|
exports.Prisma.TicketScalarFieldEnum = {
|
|
@@ -129,6 +131,8 @@ exports.Prisma.TicketScalarFieldEnum = {
|
|
|
129
131
|
placeOfViolation: 'placeOfViolation',
|
|
130
132
|
remarks: 'remarks',
|
|
131
133
|
issuedBy: 'issuedBy',
|
|
134
|
+
apprehendingEnforcerId: 'apprehendingEnforcerId',
|
|
135
|
+
apprehendingEnforcerName: 'apprehendingEnforcerName',
|
|
132
136
|
officerId: 'officerId',
|
|
133
137
|
assessedAt: 'assessedAt',
|
|
134
138
|
dueDate: 'dueDate',
|
|
@@ -155,6 +159,15 @@ exports.Prisma.PaymentScalarFieldEnum = {
|
|
|
155
159
|
paidAt: 'paidAt'
|
|
156
160
|
};
|
|
157
161
|
|
|
162
|
+
exports.Prisma.RoleScalarFieldEnum = {
|
|
163
|
+
name: 'name',
|
|
164
|
+
label: 'label',
|
|
165
|
+
isSystem: 'isSystem',
|
|
166
|
+
permissions: 'permissions',
|
|
167
|
+
createdAt: 'createdAt',
|
|
168
|
+
updatedAt: 'updatedAt'
|
|
169
|
+
};
|
|
170
|
+
|
|
158
171
|
exports.Prisma.UserScalarFieldEnum = {
|
|
159
172
|
id: 'id',
|
|
160
173
|
username: 'username',
|
|
@@ -165,6 +178,17 @@ exports.Prisma.UserScalarFieldEnum = {
|
|
|
165
178
|
createdAt: 'createdAt'
|
|
166
179
|
};
|
|
167
180
|
|
|
181
|
+
exports.Prisma.ActivityLogScalarFieldEnum = {
|
|
182
|
+
id: 'id',
|
|
183
|
+
actorId: 'actorId',
|
|
184
|
+
actorUsername: 'actorUsername',
|
|
185
|
+
action: 'action',
|
|
186
|
+
summary: 'summary',
|
|
187
|
+
targetType: 'targetType',
|
|
188
|
+
targetId: 'targetId',
|
|
189
|
+
createdAt: 'createdAt'
|
|
190
|
+
};
|
|
191
|
+
|
|
168
192
|
exports.Prisma.SortOrder = {
|
|
169
193
|
asc: 'asc',
|
|
170
194
|
desc: 'desc'
|
|
@@ -197,18 +221,15 @@ exports.PaymentStatus = exports.$Enums.PaymentStatus = {
|
|
|
197
221
|
CONTESTED: 'CONTESTED'
|
|
198
222
|
};
|
|
199
223
|
|
|
200
|
-
exports.UserRole = exports.$Enums.UserRole = {
|
|
201
|
-
ENFORCER: 'ENFORCER',
|
|
202
|
-
ADMIN: 'ADMIN'
|
|
203
|
-
};
|
|
204
|
-
|
|
205
224
|
exports.Prisma.ModelName = {
|
|
206
225
|
Officer: 'Officer',
|
|
207
226
|
ViolationCatalog: 'ViolationCatalog',
|
|
208
227
|
Ticket: 'Ticket',
|
|
209
228
|
TicketViolation: 'TicketViolation',
|
|
210
229
|
Payment: 'Payment',
|
|
211
|
-
|
|
230
|
+
Role: 'Role',
|
|
231
|
+
User: 'User',
|
|
232
|
+
ActivityLog: 'ActivityLog'
|
|
212
233
|
};
|
|
213
234
|
/**
|
|
214
235
|
* Create the Client
|
|
@@ -261,13 +282,13 @@ const config = {
|
|
|
261
282
|
}
|
|
262
283
|
}
|
|
263
284
|
},
|
|
264
|
-
"inlineSchema": "// e-OVR data model — the real backend behind the `DataStore` interface.\n// Mirrors `lib/types.ts`: one canonical Ticket record, normalized into\n// ticket + violations (1:N) + payment (1:1), with officers, a violation\n// catalog, and admin users. Money is Decimal(12,2); the store converts\n// Prisma.Decimal -> number at the boundary (Decimal is not serializable\n// across the RSC -> Client boundary).\n\ngenerator client {\n provider = \"prisma-client-js\"\n // Custom in-package output (pnpm-deterministic): the generated client is a real\n // file inside this package, imported via \"./generated/client\". Do NOT rely on a\n // hoisted node_modules/.prisma. The default @prisma/client (.prisma/client) is\n // intentionally NEVER generated after this move — ALL PrismaClient/Prisma imports\n // must go through @gelabs/ovr-data/generated/client.\n output = \"../src/generated/client\"\n // \"native\" for host dev (macOS); the musl/OpenSSL-3 target runs inside the\n // node:22-alpine Docker image.\n binaryTargets = [\"native\", \"linux-musl-openssl-3.0.x\"]\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nenum ViolationCategory {\n TRAFFIC\n ORDINANCE\n}\n\nenum PaymentMethod {\n GCASH\n MAYA\n LANDBANK\n OVER_THE_COUNTER\n}\n\n/**\n * Persisted, explicit payment state (not the displayed status).\n */\nenum PaymentStatus {\n UNPAID\n PAID\n CONTESTED\n}\n\
|
|
265
|
-
"inlineSchemaHash": "
|
|
285
|
+
"inlineSchema": "// e-OVR data model — the real backend behind the `DataStore` interface.\n// Mirrors `lib/types.ts`: one canonical Ticket record, normalized into\n// ticket + violations (1:N) + payment (1:1), with officers, a violation\n// catalog, and admin users. Money is Decimal(12,2); the store converts\n// Prisma.Decimal -> number at the boundary (Decimal is not serializable\n// across the RSC -> Client boundary).\n\ngenerator client {\n provider = \"prisma-client-js\"\n // Custom in-package output (pnpm-deterministic): the generated client is a real\n // file inside this package, imported via \"./generated/client\". Do NOT rely on a\n // hoisted node_modules/.prisma. The default @prisma/client (.prisma/client) is\n // intentionally NEVER generated after this move — ALL PrismaClient/Prisma imports\n // must go through @gelabs/ovr-data/generated/client.\n output = \"../src/generated/client\"\n // \"native\" for host dev (macOS); the musl/OpenSSL-3 target runs inside the\n // node:22-alpine Docker image.\n binaryTargets = [\"native\", \"linux-musl-openssl-3.0.x\"]\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nenum ViolationCategory {\n TRAFFIC\n ORDINANCE\n}\n\nenum PaymentMethod {\n GCASH\n MAYA\n LANDBANK\n OVER_THE_COUNTER\n}\n\n/**\n * Persisted, explicit payment state (not the displayed status).\n */\nenum PaymentStatus {\n UNPAID\n PAID\n CONTESTED\n}\n\nmodel Officer {\n id String @id // slug, e.g. \"off-novelo\"\n name String // \"NOVELO, RAYMUNDO V.\"\n badgeNo String?\n office String // e.g. \"POSO\"\n\n tickets Ticket[]\n user User?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel ViolationCatalog {\n code String @id // e.g. \"A25 S1-9 S-2021\"\n title String\n category ViolationCategory\n basicFine Decimal @db.Decimal(12, 2)\n legalText String?\n active Boolean @default(true) // GE-031: false = archived (hidden from issuance)\n\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n}\n\nmodel Ticket {\n // system-generated identifiers\n ovrTicketNo String @id // \"IBA-2026-000123\"\n orderOfPaymentNo String @unique // \"IBA-2026-000123-01\"\n billNo String @unique // \"M-2026-06-03-POSO-A176-000123\"\n\n // violator snapshot (immutable facts — flat columns, not a relation)\n violatorFirstName String\n violatorMiddleName String?\n violatorLastName String\n violatorStreet String\n violatorBarangay String?\n violatorCityMunicipality String\n violatorProvince String\n violatorLicenseNumber String\n violatorPlateNumber String?\n violatorContactNo String?\n\n // enforcer-entered\n apprehendedAt DateTime\n placeOfViolation String?\n remarks String?\n issuedBy String?\n\n // GE-011: the enforcer ACCOUNT who apprehended (+ snapshot name for display).\n // Soft reference to User.id — intentionally NOT a hard FK so the attribution\n // survives if the account is later renamed or removed.\n apprehendingEnforcerId String?\n apprehendingEnforcerName String?\n\n officerId String\n officer Officer @relation(fields: [officerId], references: [id])\n\n // system-generated on confirm\n assessedAt DateTime\n dueDate DateTime\n basicFinesTotal Decimal @db.Decimal(12, 2)\n paymentStatus PaymentStatus @default(UNPAID)\n\n createdAt DateTime @default(now())\n\n violations TicketViolation[]\n payment Payment?\n\n // back filters used by listTickets (name / plate / status / recency)\n @@index([violatorLastName])\n @@index([violatorPlateNumber])\n @@index([paymentStatus])\n @@index([createdAt])\n}\n\nmodel TicketViolation {\n id String @id @default(cuid())\n ticketOvrNo String\n ticket Ticket @relation(fields: [ticketOvrNo], references: [ovrTicketNo], onDelete: Cascade)\n\n // Soft reference to ViolationCatalog.code — intentionally NOT a hard FK so the\n // snapshot (title/basicFine) survives any later catalog edit or removal.\n catalogCode String\n title String\n basicFine Decimal @db.Decimal(12, 2)\n details String?\n\n @@index([ticketOvrNo])\n}\n\nmodel Payment {\n id String @id @default(cuid())\n ticketOvrNo String @unique // one payment per ticket\n ticket Ticket @relation(fields: [ticketOvrNo], references: [ovrTicketNo], onDelete: Cascade)\n\n method PaymentMethod\n amount Decimal @db.Decimal(12, 2)\n referenceNo String @unique\n paidAt DateTime\n}\n\n// A role + its permission set (GE-013, custom roles). Permission keys come from\n// the SDK catalog (@gelabs/ovr-types PERMISSION_CATALOG); the mapping is data.\nmodel Role {\n name String @id // \"SUPER_ADMIN\" / \"ENFORCER\" / custom slug e.g. \"cashier\"\n label String // display name shown in the UI\n isSystem Boolean @default(false) // system roles can't be renamed or deleted\n permissions String[] // granted Permission keys\n\n users User[]\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel User {\n id String @id @default(cuid())\n username String @unique\n passwordHash String\n\n // Role is DATA now (see model Role): a string FK so custom roles are allowed.\n role String @default(\"ENFORCER\")\n roleRef Role @relation(fields: [role], references: [name])\n\n active Boolean @default(true)\n\n // Links a login to an enforcer (so issued tickets can attribute the officer).\n officerId String? @unique\n officer Officer? @relation(fields: [officerId], references: [id])\n\n createdAt DateTime @default(now())\n}\n\n// Audit trail (GE-022): who did what, when. Append-only. Actor is a SOFT\n// reference (snapshot username) so entries survive account deletion.\nmodel ActivityLog {\n id String @id @default(cuid())\n actorId String?\n actorUsername String?\n action String // e.g. \"auth.login\", \"account.create\", \"role.update\"\n summary String // human-readable one-liner\n targetType String? // \"account\" | \"role\" | \"ticket\" | …\n targetId String?\n\n createdAt DateTime @default(now())\n\n @@index([action])\n @@index([actorId])\n @@index([createdAt])\n}\n",
|
|
286
|
+
"inlineSchemaHash": "b1a244b0a6fa1efd29dbbc7bf66343a6833465472fdb389d5be80139b87b560a",
|
|
266
287
|
"copyEngine": true
|
|
267
288
|
}
|
|
268
289
|
config.dirname = '/'
|
|
269
290
|
|
|
270
|
-
config.runtimeDataModel = JSON.parse("{\"models\":{\"Officer\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"badgeNo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"office\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tickets\",\"kind\":\"object\",\"type\":\"Ticket\",\"relationName\":\"OfficerToTicket\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"OfficerToUser\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"ViolationCatalog\":{\"fields\":[{\"name\":\"code\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"category\",\"kind\":\"enum\",\"type\":\"ViolationCategory\"},{\"name\":\"basicFine\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"legalText\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Ticket\":{\"fields\":[{\"name\":\"ovrTicketNo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"orderOfPaymentNo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"billNo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"violatorFirstName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"violatorMiddleName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"violatorLastName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"violatorStreet\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"violatorBarangay\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"violatorCityMunicipality\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"violatorProvince\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"violatorLicenseNumber\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"violatorPlateNumber\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"violatorContactNo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"apprehendedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"placeOfViolation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"remarks\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"issuedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"officerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"officer\",\"kind\":\"object\",\"type\":\"Officer\",\"relationName\":\"OfficerToTicket\"},{\"name\":\"assessedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"dueDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"basicFinesTotal\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"paymentStatus\",\"kind\":\"enum\",\"type\":\"PaymentStatus\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"violations\",\"kind\":\"object\",\"type\":\"TicketViolation\",\"relationName\":\"TicketToTicketViolation\"},{\"name\":\"payment\",\"kind\":\"object\",\"type\":\"Payment\",\"relationName\":\"PaymentToTicket\"}],\"dbName\":null},\"TicketViolation\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ticketOvrNo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ticket\",\"kind\":\"object\",\"type\":\"Ticket\",\"relationName\":\"TicketToTicketViolation\"},{\"name\":\"catalogCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"basicFine\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"details\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"Payment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ticketOvrNo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ticket\",\"kind\":\"object\",\"type\":\"Ticket\",\"relationName\":\"PaymentToTicket\"},{\"name\":\"method\",\"kind\":\"enum\",\"type\":\"PaymentMethod\"},{\"name\":\"amount\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"referenceNo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"paidAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"username\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"passwordHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"
|
|
291
|
+
config.runtimeDataModel = JSON.parse("{\"models\":{\"Officer\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"badgeNo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"office\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tickets\",\"kind\":\"object\",\"type\":\"Ticket\",\"relationName\":\"OfficerToTicket\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"OfficerToUser\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"ViolationCatalog\":{\"fields\":[{\"name\":\"code\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"category\",\"kind\":\"enum\",\"type\":\"ViolationCategory\"},{\"name\":\"basicFine\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"legalText\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"active\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Ticket\":{\"fields\":[{\"name\":\"ovrTicketNo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"orderOfPaymentNo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"billNo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"violatorFirstName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"violatorMiddleName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"violatorLastName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"violatorStreet\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"violatorBarangay\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"violatorCityMunicipality\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"violatorProvince\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"violatorLicenseNumber\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"violatorPlateNumber\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"violatorContactNo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"apprehendedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"placeOfViolation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"remarks\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"issuedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"apprehendingEnforcerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"apprehendingEnforcerName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"officerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"officer\",\"kind\":\"object\",\"type\":\"Officer\",\"relationName\":\"OfficerToTicket\"},{\"name\":\"assessedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"dueDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"basicFinesTotal\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"paymentStatus\",\"kind\":\"enum\",\"type\":\"PaymentStatus\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"violations\",\"kind\":\"object\",\"type\":\"TicketViolation\",\"relationName\":\"TicketToTicketViolation\"},{\"name\":\"payment\",\"kind\":\"object\",\"type\":\"Payment\",\"relationName\":\"PaymentToTicket\"}],\"dbName\":null},\"TicketViolation\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ticketOvrNo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ticket\",\"kind\":\"object\",\"type\":\"Ticket\",\"relationName\":\"TicketToTicketViolation\"},{\"name\":\"catalogCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"basicFine\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"details\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"Payment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ticketOvrNo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ticket\",\"kind\":\"object\",\"type\":\"Ticket\",\"relationName\":\"PaymentToTicket\"},{\"name\":\"method\",\"kind\":\"enum\",\"type\":\"PaymentMethod\"},{\"name\":\"amount\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"referenceNo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"paidAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Role\":{\"fields\":[{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"label\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isSystem\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"permissions\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"users\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"RoleToUser\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"username\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"passwordHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"roleRef\",\"kind\":\"object\",\"type\":\"Role\",\"relationName\":\"RoleToUser\"},{\"name\":\"active\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"officerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"officer\",\"kind\":\"object\",\"type\":\"Officer\",\"relationName\":\"OfficerToUser\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"ActivityLog\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"actorId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"actorUsername\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"action\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"summary\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"targetType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"targetId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}")
|
|
271
292
|
defineDmmfProperty(exports.Prisma, config.runtimeDataModel)
|
|
272
293
|
config.engineWasm = {
|
|
273
294
|
getRuntime: async () => require('./query_engine_bg.js'),
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { D as DemoAdminConfig, M as MunicipalityConfig, O as OfficeConfig, a as OfficesConfig, b as OvrConfig, c as OvrConfigInput, P as PaymentMethodConfig, R as RulesConfig, d as demoAdminConfigSchema, m as municipalityConfigSchema, o as officeConfigSchema, e as officesConfigSchema, f as ovrConfigSchema, p as paymentMethodConfigSchema, r as rulesConfigSchema } from './schema-CdsFQxIg.js';
|
|
2
2
|
export { defineOvrConfig } from './config.js';
|
|
3
|
-
export { ChargeInput, ChargeResult, IssuanceDraft, PREVIEW_PLACEHOLDER, PreviewRules, computeCharges, enrich, makeBillNo, makeOrderOfPaymentNo, makeOvrTicketNo, makePaymentRef, round2, startedMonthsSince, toPreviewTicket } from './core.js';
|
|
3
|
+
export { ChargeInput, ChargeResult, DASHBOARD_PRESETS, DashboardPreset, DashboardRange, DashboardRangePreset, DashboardStats, IssuanceDraft, PH_PROVINCES, PREVIEW_PLACEHOLDER, PhProvince, PreviewRules, citiesOfProvince, computeCharges, computeDashboardStats, customDateRange, dashboardDateRange, enrich, listProvinces, makeBillNo, makeOrderOfPaymentNo, makeOvrTicketNo, makePaymentRef, round2, startedMonthsSince, toPreviewTicket } from './core.js';
|
|
4
4
|
export { F as FormatterRules, a as Formatters, b as addDays, c as createFormatters, f as formalName, d as formatAddress, e as fullName, l as localToManilaISO } from './format-C7MSwUHK.js';
|
|
5
|
-
export { IssuedViolation, Officer, Payment, PaymentMethod, PaymentStatus, Ticket, TicketRecord, TicketStatus, ViolationCatalogItem, ViolationCategory, Violator } from './types.js';
|
|
5
|
+
export { ACTIVITY_ACTIONS, ACTIVITY_ACTION_LABELS, ALL_PERMISSIONS, ActivityAction, ActivityFilter, ActivityLog, DEFAULT_ROLE_NAME, IssuedViolation, NewActivityInput, NewOfficerInput, NewRoleInput, NewUserInput, NewViolationInput, Officer, PERMISSION_CATALOG, Payment, PaymentMethod, PaymentStatus, Permission, PermissionDef, RoleDef, SUPER_ADMIN_LOCKED_PERMISSIONS, SYSTEM_ROLES, Ticket, TicketRecord, TicketStatus, UserAccount, ViolationCatalogItem, ViolationCategory, Violator, hasPermission } from './types.js';
|
|
6
6
|
import 'zod';
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { defineOvrConfig, demoAdminConfigSchema, municipalityConfigSchema, officeConfigSchema, officesConfigSchema, ovrConfigSchema, paymentMethodConfigSchema, rulesConfigSchema } from './chunk-ZIJB7AB3.js';
|
|
2
|
-
export { PREVIEW_PLACEHOLDER, addDays, computeCharges, createFormatters, enrich, formalName, formatAddress, fullName, localToManilaISO, makeBillNo, makeOrderOfPaymentNo, makeOvrTicketNo, makePaymentRef, round2, startedMonthsSince, toPreviewTicket } from './chunk-
|
|
2
|
+
export { DASHBOARD_PRESETS, PH_PROVINCES, PREVIEW_PLACEHOLDER, addDays, citiesOfProvince, computeCharges, computeDashboardStats, createFormatters, customDateRange, dashboardDateRange, enrich, formalName, formatAddress, fullName, listProvinces, localToManilaISO, makeBillNo, makeOrderOfPaymentNo, makeOvrTicketNo, makePaymentRef, round2, startedMonthsSince, toPreviewTicket } from './chunk-BI4EGLPG.js';
|
package/dist/offline.d.ts
CHANGED
|
@@ -35,6 +35,8 @@ interface OutboxRow {
|
|
|
35
35
|
details?: string;
|
|
36
36
|
}[];
|
|
37
37
|
remarks?: string;
|
|
38
|
+
apprehendingEnforcerId?: string;
|
|
39
|
+
apprehendingEnforcerName?: string;
|
|
38
40
|
};
|
|
39
41
|
status: "pending" | "error";
|
|
40
42
|
error?: string;
|
|
@@ -80,6 +82,11 @@ interface AdminIdentity {
|
|
|
80
82
|
userId: string;
|
|
81
83
|
username: string;
|
|
82
84
|
role: string;
|
|
85
|
+
/** Display label of the role (e.g. "Super Admin"). */
|
|
86
|
+
roleLabel?: string;
|
|
87
|
+
/** Effective permissions for this user's role — drives nav + client gates.
|
|
88
|
+
* Resolved server-side (login / GET /api/auth/me) and cached for offline use. */
|
|
89
|
+
permissions: string[];
|
|
83
90
|
officerId: string | null;
|
|
84
91
|
}
|
|
85
92
|
type AuthState = {
|
|
@@ -112,6 +119,32 @@ declare function useOfficers(): Officer[] | undefined;
|
|
|
112
119
|
/** The signed-in admin identity (cached locally), reactive. `undefined` while
|
|
113
120
|
* loading, `null` if signed out. Used to tailor the admin UI to the role. */
|
|
114
121
|
declare function useIdentity(): AdminIdentity | null | undefined;
|
|
122
|
+
/** A SPECIFIC, per-ticket notification derived from the local tickets (GE-023). */
|
|
123
|
+
interface AdminNotification {
|
|
124
|
+
id: string;
|
|
125
|
+
type: "overdue" | "outstanding";
|
|
126
|
+
ovrTicketNo: string;
|
|
127
|
+
name: string;
|
|
128
|
+
at: string;
|
|
129
|
+
href: string;
|
|
130
|
+
}
|
|
131
|
+
/** Important notifications derived from the on-device tickets — one per ticket
|
|
132
|
+
* needing attention (overdue + outstanding), with the ticket no. + violator.
|
|
133
|
+
* Reactive + offline (no server table); overdue first, then most recent. */
|
|
134
|
+
declare function useNotifications(): AdminNotification[];
|
|
135
|
+
interface NotificationsState {
|
|
136
|
+
items: AdminNotification[];
|
|
137
|
+
/** Total notifications. */
|
|
138
|
+
total: number;
|
|
139
|
+
/** True when there are notifications the user hasn't acknowledged yet (drives the badge). */
|
|
140
|
+
unseen: boolean;
|
|
141
|
+
/** Acknowledge the current set — clears the badge until the notifications change. */
|
|
142
|
+
markSeen: () => void;
|
|
143
|
+
}
|
|
144
|
+
/** Notifications + read-state (GE-023). The badge clears once the user opens the
|
|
145
|
+
* bell (`markSeen`) and only reappears when the notification set changes. The
|
|
146
|
+
* "seen" marker is persisted in the offline store (survives reloads, works offline). */
|
|
147
|
+
declare function useNotificationsState(): NotificationsState;
|
|
115
148
|
/** Cached dashboard stats (as-of last sync). `undefined` until first sync. */
|
|
116
149
|
declare function useStats(): TicketStats | undefined;
|
|
117
150
|
/** A single ticket by number: `undefined` while loading, `null` if not stored. */
|
|
@@ -126,4 +159,4 @@ interface SyncState {
|
|
|
126
159
|
/** Pull from the API on mount (if online) and whenever connectivity returns. */
|
|
127
160
|
declare function useSync(): SyncState;
|
|
128
161
|
|
|
129
|
-
export { type AdminIdentity, type AuthState, type MetaRow, type OutboxRow, type PushResult, SessionExpired, type SyncState, cacheCredential, clearIdentity, db, ensureLease, getIdentity, getMeta, isOnline, issueTicketOffline, offlineApiBase, pullAll, pushOutbox, setMeta, setOfflineApiBase, sync, useAdminAuth, useCatalog, useIdentity, useOfficers, usePendingSync, useStats, useSync, useTicket, useTickets, verifyOffline };
|
|
162
|
+
export { type AdminIdentity, type AdminNotification, type AuthState, type MetaRow, type NotificationsState, type OutboxRow, type PushResult, SessionExpired, type SyncState, cacheCredential, clearIdentity, db, ensureLease, getIdentity, getMeta, isOnline, issueTicketOffline, offlineApiBase, pullAll, pushOutbox, setMeta, setOfflineApiBase, sync, useAdminAuth, useCatalog, useIdentity, useNotifications, useNotificationsState, useOfficers, usePendingSync, useStats, useSync, useTicket, useTickets, verifyOffline };
|
package/dist/offline.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export { SessionExpired, cacheCredential, clearIdentity, db, ensureLease, getIdentity, getMeta, isOnline, issueTicketOffline, offlineApiBase, pullAll, pushOutbox, setMeta, setOfflineApiBase, sync, useAdminAuth, useCatalog, useIdentity, useOfficers, usePendingSync, useStats, useSync, useTicket, useTickets, verifyOffline } from './chunk-
|
|
3
|
-
import './chunk-
|
|
2
|
+
export { SessionExpired, cacheCredential, clearIdentity, db, ensureLease, getIdentity, getMeta, isOnline, issueTicketOffline, offlineApiBase, pullAll, pushOutbox, setMeta, setOfflineApiBase, sync, useAdminAuth, useCatalog, useIdentity, useNotifications, useNotificationsState, useOfficers, usePendingSync, useStats, useSync, useTicket, useTickets, verifyOffline } from './chunk-YGYA7KEG.js';
|
|
3
|
+
import './chunk-BI4EGLPG.js';
|