@gelabs/ovr 0.2.2 → 0.3.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-BIQ2J75Y.js → chunk-GLIK5BHP.js} +2 -2
- package/dist/{chunk-5YYR37CF.js → chunk-HGWPA7FU.js} +119 -0
- package/dist/{chunk-JEYT63LE.js → chunk-IBZVIUNI.js} +1 -1
- package/dist/chunk-IS3THKTE.js +89 -0
- 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-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 +263 -9
- package/dist/data-prisma-store.js +251 -1
- package/dist/data-seed-runner.js +18 -15
- package/dist/data.d.ts +53 -3
- package/dist/generated/client/edge.js +28 -9
- package/dist/generated/client/index-browser.js +25 -6
- package/dist/generated/client/index.d.ts +3500 -552
- package/dist/generated/client/index.js +28 -9
- package/dist/generated/client/package.json +1 -1
- package/dist/generated/client/schema.prisma +46 -9
- package/dist/generated/client/wasm.js +28 -9
- 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-CtBC5-TW.d.ts → types-BOgdk0Jw.d.ts} +119 -0
- package/dist/types.d.ts +93 -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 +386 -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-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 +4 -4
- 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/schema.prisma +46 -9
- package/dist/chunk-B634JHKZ.js +0 -181
|
@@ -130,6 +130,8 @@ exports.Prisma.TicketScalarFieldEnum = {
|
|
|
130
130
|
placeOfViolation: 'placeOfViolation',
|
|
131
131
|
remarks: 'remarks',
|
|
132
132
|
issuedBy: 'issuedBy',
|
|
133
|
+
apprehendingEnforcerId: 'apprehendingEnforcerId',
|
|
134
|
+
apprehendingEnforcerName: 'apprehendingEnforcerName',
|
|
133
135
|
officerId: 'officerId',
|
|
134
136
|
assessedAt: 'assessedAt',
|
|
135
137
|
dueDate: 'dueDate',
|
|
@@ -156,6 +158,15 @@ exports.Prisma.PaymentScalarFieldEnum = {
|
|
|
156
158
|
paidAt: 'paidAt'
|
|
157
159
|
};
|
|
158
160
|
|
|
161
|
+
exports.Prisma.RoleScalarFieldEnum = {
|
|
162
|
+
name: 'name',
|
|
163
|
+
label: 'label',
|
|
164
|
+
isSystem: 'isSystem',
|
|
165
|
+
permissions: 'permissions',
|
|
166
|
+
createdAt: 'createdAt',
|
|
167
|
+
updatedAt: 'updatedAt'
|
|
168
|
+
};
|
|
169
|
+
|
|
159
170
|
exports.Prisma.UserScalarFieldEnum = {
|
|
160
171
|
id: 'id',
|
|
161
172
|
username: 'username',
|
|
@@ -166,6 +177,17 @@ exports.Prisma.UserScalarFieldEnum = {
|
|
|
166
177
|
createdAt: 'createdAt'
|
|
167
178
|
};
|
|
168
179
|
|
|
180
|
+
exports.Prisma.ActivityLogScalarFieldEnum = {
|
|
181
|
+
id: 'id',
|
|
182
|
+
actorId: 'actorId',
|
|
183
|
+
actorUsername: 'actorUsername',
|
|
184
|
+
action: 'action',
|
|
185
|
+
summary: 'summary',
|
|
186
|
+
targetType: 'targetType',
|
|
187
|
+
targetId: 'targetId',
|
|
188
|
+
createdAt: 'createdAt'
|
|
189
|
+
};
|
|
190
|
+
|
|
169
191
|
exports.Prisma.SortOrder = {
|
|
170
192
|
asc: 'asc',
|
|
171
193
|
desc: 'desc'
|
|
@@ -198,18 +220,15 @@ exports.PaymentStatus = exports.$Enums.PaymentStatus = {
|
|
|
198
220
|
CONTESTED: 'CONTESTED'
|
|
199
221
|
};
|
|
200
222
|
|
|
201
|
-
exports.UserRole = exports.$Enums.UserRole = {
|
|
202
|
-
ENFORCER: 'ENFORCER',
|
|
203
|
-
ADMIN: 'ADMIN'
|
|
204
|
-
};
|
|
205
|
-
|
|
206
223
|
exports.Prisma.ModelName = {
|
|
207
224
|
Officer: 'Officer',
|
|
208
225
|
ViolationCatalog: 'ViolationCatalog',
|
|
209
226
|
Ticket: 'Ticket',
|
|
210
227
|
TicketViolation: 'TicketViolation',
|
|
211
228
|
Payment: 'Payment',
|
|
212
|
-
|
|
229
|
+
Role: 'Role',
|
|
230
|
+
User: 'User',
|
|
231
|
+
ActivityLog: 'ActivityLog'
|
|
213
232
|
};
|
|
214
233
|
/**
|
|
215
234
|
* Create the Client
|
|
@@ -262,8 +281,8 @@ const config = {
|
|
|
262
281
|
}
|
|
263
282
|
}
|
|
264
283
|
},
|
|
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": "
|
|
284
|
+
"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\n createdAt DateTime @default(now())\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",
|
|
285
|
+
"inlineSchemaHash": "948b8e2b9f08100a5cb74a4dbec02a37dac3df40478d75c13f8e01ac2d61c4be",
|
|
267
286
|
"copyEngine": true
|
|
268
287
|
}
|
|
269
288
|
|
|
@@ -284,7 +303,7 @@ if (!fs.existsSync(path.join(__dirname, 'schema.prisma'))) {
|
|
|
284
303
|
config.isBundled = true
|
|
285
304
|
}
|
|
286
305
|
|
|
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\":{}}")
|
|
306
|
+
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\":\"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
307
|
defineDmmfProperty(exports.Prisma, config.runtimeDataModel)
|
|
289
308
|
config.engineWasm = undefined
|
|
290
309
|
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."
|
|
@@ -96,6 +91,12 @@ model Ticket {
|
|
|
96
91
|
remarks String?
|
|
97
92
|
issuedBy String?
|
|
98
93
|
|
|
94
|
+
// GE-011: the enforcer ACCOUNT who apprehended (+ snapshot name for display).
|
|
95
|
+
// Soft reference to User.id — intentionally NOT a hard FK so the attribution
|
|
96
|
+
// survives if the account is later renamed or removed.
|
|
97
|
+
apprehendingEnforcerId String?
|
|
98
|
+
apprehendingEnforcerName String?
|
|
99
|
+
|
|
99
100
|
officerId String
|
|
100
101
|
officer Officer @relation(fields: [officerId], references: [id])
|
|
101
102
|
|
|
@@ -143,12 +144,30 @@ model Payment {
|
|
|
143
144
|
paidAt DateTime
|
|
144
145
|
}
|
|
145
146
|
|
|
147
|
+
// A role + its permission set (GE-013, custom roles). Permission keys come from
|
|
148
|
+
// the SDK catalog (@gelabs/ovr-types PERMISSION_CATALOG); the mapping is data.
|
|
149
|
+
model Role {
|
|
150
|
+
name String @id // "SUPER_ADMIN" / "ENFORCER" / custom slug e.g. "cashier"
|
|
151
|
+
label String // display name shown in the UI
|
|
152
|
+
isSystem Boolean @default(false) // system roles can't be renamed or deleted
|
|
153
|
+
permissions String[] // granted Permission keys
|
|
154
|
+
|
|
155
|
+
users User[]
|
|
156
|
+
|
|
157
|
+
createdAt DateTime @default(now())
|
|
158
|
+
updatedAt DateTime @updatedAt
|
|
159
|
+
}
|
|
160
|
+
|
|
146
161
|
model User {
|
|
147
|
-
id String
|
|
148
|
-
username String
|
|
162
|
+
id String @id @default(cuid())
|
|
163
|
+
username String @unique
|
|
149
164
|
passwordHash String
|
|
150
|
-
|
|
151
|
-
|
|
165
|
+
|
|
166
|
+
// Role is DATA now (see model Role): a string FK so custom roles are allowed.
|
|
167
|
+
role String @default("ENFORCER")
|
|
168
|
+
roleRef Role @relation(fields: [role], references: [name])
|
|
169
|
+
|
|
170
|
+
active Boolean @default(true)
|
|
152
171
|
|
|
153
172
|
// Links a login to an enforcer (so issued tickets can attribute the officer).
|
|
154
173
|
officerId String? @unique
|
|
@@ -156,3 +175,21 @@ model User {
|
|
|
156
175
|
|
|
157
176
|
createdAt DateTime @default(now())
|
|
158
177
|
}
|
|
178
|
+
|
|
179
|
+
// Audit trail (GE-022): who did what, when. Append-only. Actor is a SOFT
|
|
180
|
+
// reference (snapshot username) so entries survive account deletion.
|
|
181
|
+
model ActivityLog {
|
|
182
|
+
id String @id @default(cuid())
|
|
183
|
+
actorId String?
|
|
184
|
+
actorUsername String?
|
|
185
|
+
action String // e.g. "auth.login", "account.create", "role.update"
|
|
186
|
+
summary String // human-readable one-liner
|
|
187
|
+
targetType String? // "account" | "role" | "ticket" | …
|
|
188
|
+
targetId String?
|
|
189
|
+
|
|
190
|
+
createdAt DateTime @default(now())
|
|
191
|
+
|
|
192
|
+
@@index([action])
|
|
193
|
+
@@index([actorId])
|
|
194
|
+
@@index([createdAt])
|
|
195
|
+
}
|
|
@@ -129,6 +129,8 @@ exports.Prisma.TicketScalarFieldEnum = {
|
|
|
129
129
|
placeOfViolation: 'placeOfViolation',
|
|
130
130
|
remarks: 'remarks',
|
|
131
131
|
issuedBy: 'issuedBy',
|
|
132
|
+
apprehendingEnforcerId: 'apprehendingEnforcerId',
|
|
133
|
+
apprehendingEnforcerName: 'apprehendingEnforcerName',
|
|
132
134
|
officerId: 'officerId',
|
|
133
135
|
assessedAt: 'assessedAt',
|
|
134
136
|
dueDate: 'dueDate',
|
|
@@ -155,6 +157,15 @@ exports.Prisma.PaymentScalarFieldEnum = {
|
|
|
155
157
|
paidAt: 'paidAt'
|
|
156
158
|
};
|
|
157
159
|
|
|
160
|
+
exports.Prisma.RoleScalarFieldEnum = {
|
|
161
|
+
name: 'name',
|
|
162
|
+
label: 'label',
|
|
163
|
+
isSystem: 'isSystem',
|
|
164
|
+
permissions: 'permissions',
|
|
165
|
+
createdAt: 'createdAt',
|
|
166
|
+
updatedAt: 'updatedAt'
|
|
167
|
+
};
|
|
168
|
+
|
|
158
169
|
exports.Prisma.UserScalarFieldEnum = {
|
|
159
170
|
id: 'id',
|
|
160
171
|
username: 'username',
|
|
@@ -165,6 +176,17 @@ exports.Prisma.UserScalarFieldEnum = {
|
|
|
165
176
|
createdAt: 'createdAt'
|
|
166
177
|
};
|
|
167
178
|
|
|
179
|
+
exports.Prisma.ActivityLogScalarFieldEnum = {
|
|
180
|
+
id: 'id',
|
|
181
|
+
actorId: 'actorId',
|
|
182
|
+
actorUsername: 'actorUsername',
|
|
183
|
+
action: 'action',
|
|
184
|
+
summary: 'summary',
|
|
185
|
+
targetType: 'targetType',
|
|
186
|
+
targetId: 'targetId',
|
|
187
|
+
createdAt: 'createdAt'
|
|
188
|
+
};
|
|
189
|
+
|
|
168
190
|
exports.Prisma.SortOrder = {
|
|
169
191
|
asc: 'asc',
|
|
170
192
|
desc: 'desc'
|
|
@@ -197,18 +219,15 @@ exports.PaymentStatus = exports.$Enums.PaymentStatus = {
|
|
|
197
219
|
CONTESTED: 'CONTESTED'
|
|
198
220
|
};
|
|
199
221
|
|
|
200
|
-
exports.UserRole = exports.$Enums.UserRole = {
|
|
201
|
-
ENFORCER: 'ENFORCER',
|
|
202
|
-
ADMIN: 'ADMIN'
|
|
203
|
-
};
|
|
204
|
-
|
|
205
222
|
exports.Prisma.ModelName = {
|
|
206
223
|
Officer: 'Officer',
|
|
207
224
|
ViolationCatalog: 'ViolationCatalog',
|
|
208
225
|
Ticket: 'Ticket',
|
|
209
226
|
TicketViolation: 'TicketViolation',
|
|
210
227
|
Payment: 'Payment',
|
|
211
|
-
|
|
228
|
+
Role: 'Role',
|
|
229
|
+
User: 'User',
|
|
230
|
+
ActivityLog: 'ActivityLog'
|
|
212
231
|
};
|
|
213
232
|
/**
|
|
214
233
|
* Create the Client
|
|
@@ -261,13 +280,13 @@ const config = {
|
|
|
261
280
|
}
|
|
262
281
|
}
|
|
263
282
|
},
|
|
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": "
|
|
283
|
+
"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\n createdAt DateTime @default(now())\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",
|
|
284
|
+
"inlineSchemaHash": "948b8e2b9f08100a5cb74a4dbec02a37dac3df40478d75c13f8e01ac2d61c4be",
|
|
266
285
|
"copyEngine": true
|
|
267
286
|
}
|
|
268
287
|
config.dirname = '/'
|
|
269
288
|
|
|
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\":\"
|
|
289
|
+
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\":\"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
290
|
defineDmmfProperty(exports.Prisma, config.runtimeDataModel)
|
|
272
291
|
config.engineWasm = {
|
|
273
292
|
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, 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';
|