@gelabs/ovr 0.2.0 → 0.2.2
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/chunk-IB4JVGKJ.js +379 -0
- package/dist/data-mock-store.js +2 -0
- package/dist/data-prisma-store.js +3 -0
- package/dist/data.d.ts +1 -0
- package/dist/generated/client/edge.js +4 -3
- package/dist/generated/client/index-browser.js +1 -0
- package/dist/generated/client/index.d.ts +45 -1
- package/dist/generated/client/index.js +4 -3
- package/dist/generated/client/package.json +1 -1
- package/dist/generated/client/schema.prisma +1 -0
- package/dist/generated/client/wasm.js +4 -3
- package/dist/offline.d.ts +22 -19
- package/dist/offline.js +2 -375
- package/dist/types.d.ts +1 -0
- package/dist/ui-components-admin/admin-nav.js +4 -1
- package/dist/ui-components-admin/issuance-form.js +26 -12
- package/dist/ui-components-shared/ticket-receipt.js +2 -1
- package/package.json +5 -5
- package/prisma/migrations/20260611112111_init/migration.sql +142 -0
- package/prisma/migrations/20260611112121_add_ticket_sequence/migration.sql +4 -0
- package/prisma/migrations/20260612000000_split_violator_address/migration.sql +26 -0
- package/prisma/migrations/20260612000100_barangay_optional/migration.sql +2 -0
- package/prisma/migrations/20260622000000_add_issued_by/migration.sql +2 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/schema.prisma +1 -0
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
import { makeOvrTicketNo, addDays, makeBillNo, makeOrderOfPaymentNo, enrich } from './chunk-B634JHKZ.js';
|
|
2
|
+
import Dexie from 'dexie';
|
|
3
|
+
import { useState, useEffect } from 'react';
|
|
4
|
+
import { useLiveQuery } from 'dexie-react-hooks';
|
|
5
|
+
|
|
6
|
+
var db = new Dexie("eovr-offline");
|
|
7
|
+
db.version(1).stores({
|
|
8
|
+
tickets: "ovrTicketNo, paymentStatus, createdAt",
|
|
9
|
+
catalog: "code, category",
|
|
10
|
+
officers: "id",
|
|
11
|
+
meta: "key"
|
|
12
|
+
});
|
|
13
|
+
db.version(2).stores({
|
|
14
|
+
outbox: "ovrTicketNo, status, createdAt"
|
|
15
|
+
});
|
|
16
|
+
async function getMeta(key) {
|
|
17
|
+
const row = await db.meta.get(key);
|
|
18
|
+
return row?.value;
|
|
19
|
+
}
|
|
20
|
+
async function setMeta(key, value) {
|
|
21
|
+
await db.meta.put({ key, value });
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// ../ovr-offline/src/sync.ts
|
|
25
|
+
var API = "/api";
|
|
26
|
+
var LEASE_MIN = 10;
|
|
27
|
+
var LEASE_BATCH = 50;
|
|
28
|
+
function setOfflineApiBase(base) {
|
|
29
|
+
API = base.replace(/\/$/, "");
|
|
30
|
+
}
|
|
31
|
+
function offlineApiBase() {
|
|
32
|
+
return API;
|
|
33
|
+
}
|
|
34
|
+
var SessionExpired = class extends Error {
|
|
35
|
+
constructor() {
|
|
36
|
+
super("session_expired");
|
|
37
|
+
this.name = "SessionExpired";
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
function isOnline() {
|
|
41
|
+
return typeof navigator !== "undefined" ? navigator.onLine : true;
|
|
42
|
+
}
|
|
43
|
+
async function call(path, init) {
|
|
44
|
+
let res;
|
|
45
|
+
try {
|
|
46
|
+
res = await fetch(`${API}${path}`, { credentials: "include", ...init });
|
|
47
|
+
} catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
if (res.status === 401) throw new SessionExpired();
|
|
51
|
+
return res;
|
|
52
|
+
}
|
|
53
|
+
var postInit = (body) => ({
|
|
54
|
+
method: "POST",
|
|
55
|
+
headers: { "content-type": "application/json" },
|
|
56
|
+
body: JSON.stringify(body)
|
|
57
|
+
});
|
|
58
|
+
async function ensureLease(min = LEASE_MIN) {
|
|
59
|
+
if (!isOnline()) return;
|
|
60
|
+
const seqs = await getMeta("leaseSeqs") ?? [];
|
|
61
|
+
if (seqs.length >= min) return;
|
|
62
|
+
const res = await call("/sync/lease", postInit({ count: LEASE_BATCH }));
|
|
63
|
+
if (!res || !res.ok) return;
|
|
64
|
+
const { seqs: fresh } = await res.json();
|
|
65
|
+
await setMeta("leaseSeqs", [...seqs, ...fresh]);
|
|
66
|
+
}
|
|
67
|
+
async function pushOutbox() {
|
|
68
|
+
const pending = await db.outbox.toArray();
|
|
69
|
+
if (!pending.length) return;
|
|
70
|
+
const res = await call(
|
|
71
|
+
"/sync/push",
|
|
72
|
+
postInit({ tickets: pending.map((p) => p.payload) })
|
|
73
|
+
);
|
|
74
|
+
if (!res || !res.ok) return;
|
|
75
|
+
const { results } = await res.json();
|
|
76
|
+
await db.transaction("rw", db.outbox, db.tickets, async () => {
|
|
77
|
+
for (const r of results) {
|
|
78
|
+
if (r.ok) {
|
|
79
|
+
await db.outbox.delete(r.ovrTicketNo);
|
|
80
|
+
if (r.ticket) await db.tickets.put(r.ticket);
|
|
81
|
+
} else {
|
|
82
|
+
await db.outbox.update(r.ovrTicketNo, { status: "error", error: r.error });
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
async function pullAll() {
|
|
88
|
+
const [t, c, o, s] = await Promise.all([
|
|
89
|
+
call("/tickets"),
|
|
90
|
+
call("/violations"),
|
|
91
|
+
call("/officers"),
|
|
92
|
+
call("/tickets/stats")
|
|
93
|
+
]);
|
|
94
|
+
if (!t || !c || !o || !s) return;
|
|
95
|
+
if (!t.ok || !c.ok || !o.ok || !s.ok) {
|
|
96
|
+
throw new Error(
|
|
97
|
+
`sync.pullAll failed: tickets=${t.status} catalog=${c.status} officers=${o.status} stats=${s.status}`
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
const tickets = await t.json();
|
|
101
|
+
const catalog = await c.json();
|
|
102
|
+
const officers = await o.json();
|
|
103
|
+
const stats = await s.json();
|
|
104
|
+
await db.transaction(
|
|
105
|
+
"rw",
|
|
106
|
+
db.tickets,
|
|
107
|
+
db.catalog,
|
|
108
|
+
db.officers,
|
|
109
|
+
db.meta,
|
|
110
|
+
async () => {
|
|
111
|
+
await db.tickets.bulkPut(tickets);
|
|
112
|
+
await db.catalog.clear();
|
|
113
|
+
await db.catalog.bulkPut(catalog);
|
|
114
|
+
await db.officers.clear();
|
|
115
|
+
await db.officers.bulkPut(officers);
|
|
116
|
+
await db.meta.put({ key: "stats", value: stats });
|
|
117
|
+
}
|
|
118
|
+
);
|
|
119
|
+
await setMeta("lastSyncedAt", (/* @__PURE__ */ new Date()).toISOString());
|
|
120
|
+
}
|
|
121
|
+
async function sync() {
|
|
122
|
+
if (!isOnline()) return;
|
|
123
|
+
await pushOutbox();
|
|
124
|
+
await ensureLease();
|
|
125
|
+
await pullAll();
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// ../ovr-offline/src/issue.ts
|
|
129
|
+
async function popSeq() {
|
|
130
|
+
return db.transaction("rw", db.meta, async () => {
|
|
131
|
+
const row = await db.meta.get("leaseSeqs");
|
|
132
|
+
const seqs = row?.value ?? [];
|
|
133
|
+
if (seqs.length === 0) return null;
|
|
134
|
+
await db.meta.put({ key: "leaseSeqs", value: seqs.slice(1) });
|
|
135
|
+
return seqs[0];
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
async function issueTicketOffline(input, rules) {
|
|
139
|
+
let seq = await popSeq();
|
|
140
|
+
if (seq === null && isOnline()) {
|
|
141
|
+
await ensureLease(50);
|
|
142
|
+
seq = await popSeq();
|
|
143
|
+
}
|
|
144
|
+
if (seq === null) {
|
|
145
|
+
throw new Error(
|
|
146
|
+
isOnline() ? "Couldn't reserve ticket numbers \u2014 please try again." : "No offline ticket numbers left. Reconnect to the internet to reserve more."
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
const now = /* @__PURE__ */ new Date();
|
|
150
|
+
const ovrTicketNo = makeOvrTicketNo(rules.idPrefix, now.getFullYear(), seq);
|
|
151
|
+
const officer = await db.officers.get(input.officerId);
|
|
152
|
+
if (!officer) {
|
|
153
|
+
const cur = await getMeta("leaseSeqs") ?? [];
|
|
154
|
+
await setMeta("leaseSeqs", [seq, ...cur]);
|
|
155
|
+
throw new Error("That officer isn't available offline. Sync and try again.");
|
|
156
|
+
}
|
|
157
|
+
const catalog = await db.catalog.toArray();
|
|
158
|
+
const byCode = new Map(catalog.map((c) => [c.code, c]));
|
|
159
|
+
const violations = input.violations.map((x) => {
|
|
160
|
+
const c = byCode.get(x.catalogCode);
|
|
161
|
+
if (!c) throw new Error(`Unknown violation: ${x.catalogCode}`);
|
|
162
|
+
const v = {
|
|
163
|
+
catalogCode: c.code,
|
|
164
|
+
title: c.title,
|
|
165
|
+
basicFine: c.basicFine
|
|
166
|
+
};
|
|
167
|
+
if (x.details?.trim()) v.details = x.details.trim();
|
|
168
|
+
return v;
|
|
169
|
+
});
|
|
170
|
+
const basicFinesTotal = violations.reduce((s, v) => s + v.basicFine, 0);
|
|
171
|
+
const record = {
|
|
172
|
+
ovrTicketNo,
|
|
173
|
+
orderOfPaymentNo: makeOrderOfPaymentNo(ovrTicketNo),
|
|
174
|
+
billNo: makeBillNo(now, officer.office, officer.badgeNo ?? "X000", seq),
|
|
175
|
+
violator: input.violator,
|
|
176
|
+
apprehendedAt: input.apprehendedAt,
|
|
177
|
+
officer,
|
|
178
|
+
violations,
|
|
179
|
+
assessedAt: now.toISOString(),
|
|
180
|
+
dueDate: addDays(now, rules.dueWindowDays).toISOString(),
|
|
181
|
+
basicFinesTotal,
|
|
182
|
+
paymentStatus: "UNPAID",
|
|
183
|
+
createdAt: now.toISOString()
|
|
184
|
+
};
|
|
185
|
+
if (input.placeOfViolation?.trim())
|
|
186
|
+
record.placeOfViolation = input.placeOfViolation.trim();
|
|
187
|
+
if (input.remarks?.trim()) record.remarks = input.remarks.trim();
|
|
188
|
+
if (input.issuedBy?.trim()) record.issuedBy = input.issuedBy.trim();
|
|
189
|
+
const ticket = enrich(record, now, rules.surchargeRatePerMonth);
|
|
190
|
+
await db.transaction("rw", db.tickets, db.outbox, async () => {
|
|
191
|
+
await db.tickets.put(ticket);
|
|
192
|
+
await db.outbox.put({
|
|
193
|
+
ovrTicketNo,
|
|
194
|
+
createdAt: record.createdAt,
|
|
195
|
+
status: "pending",
|
|
196
|
+
payload: {
|
|
197
|
+
ovrTicketNo,
|
|
198
|
+
createdAt: record.createdAt,
|
|
199
|
+
violator: input.violator,
|
|
200
|
+
apprehendedAt: input.apprehendedAt,
|
|
201
|
+
...record.placeOfViolation ? { placeOfViolation: record.placeOfViolation } : {},
|
|
202
|
+
officerId: input.officerId,
|
|
203
|
+
violations: input.violations,
|
|
204
|
+
...record.remarks ? { remarks: record.remarks } : {}
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
if (isOnline()) void pushOutbox().catch(() => {
|
|
209
|
+
});
|
|
210
|
+
return ticket;
|
|
211
|
+
}
|
|
212
|
+
async function getIdentity() {
|
|
213
|
+
return await getMeta("identity") ?? void 0;
|
|
214
|
+
}
|
|
215
|
+
async function clearIdentity() {
|
|
216
|
+
await setMeta("identity", null);
|
|
217
|
+
}
|
|
218
|
+
function useAdminAuth() {
|
|
219
|
+
const [state, setState] = useState({ status: "loading" });
|
|
220
|
+
useEffect(() => {
|
|
221
|
+
let cancelled = false;
|
|
222
|
+
(async () => {
|
|
223
|
+
const cached = await getMeta("identity");
|
|
224
|
+
if (isOnline()) {
|
|
225
|
+
try {
|
|
226
|
+
const res = await fetch(`${offlineApiBase()}/auth/me`, {
|
|
227
|
+
credentials: "include"
|
|
228
|
+
});
|
|
229
|
+
if (res.ok) {
|
|
230
|
+
const { user } = await res.json();
|
|
231
|
+
await setMeta("identity", user);
|
|
232
|
+
if (!cancelled) setState({ status: "authed", user });
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
await setMeta("identity", null);
|
|
236
|
+
if (!cancelled) setState({ status: "unauthed" });
|
|
237
|
+
return;
|
|
238
|
+
} catch {
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
if (!cancelled) {
|
|
242
|
+
setState(
|
|
243
|
+
cached ? { status: "authed", user: cached } : { status: "unauthed" }
|
|
244
|
+
);
|
|
245
|
+
}
|
|
246
|
+
})();
|
|
247
|
+
return () => {
|
|
248
|
+
cancelled = true;
|
|
249
|
+
};
|
|
250
|
+
}, []);
|
|
251
|
+
return state;
|
|
252
|
+
}
|
|
253
|
+
var PBKDF2_ITERATIONS = 21e4;
|
|
254
|
+
function subtle() {
|
|
255
|
+
return typeof crypto !== "undefined" && crypto.subtle ? crypto.subtle : null;
|
|
256
|
+
}
|
|
257
|
+
var toHex = (buf) => Array.from(new Uint8Array(buf), (b) => b.toString(16).padStart(2, "0")).join(
|
|
258
|
+
""
|
|
259
|
+
);
|
|
260
|
+
function fromHex(hex) {
|
|
261
|
+
const out = new Uint8Array(hex.length / 2);
|
|
262
|
+
for (let i = 0; i < out.length; i++)
|
|
263
|
+
out[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);
|
|
264
|
+
return out;
|
|
265
|
+
}
|
|
266
|
+
async function deriveHashHex(password, salt, iterations) {
|
|
267
|
+
const s = subtle();
|
|
268
|
+
if (!s) return null;
|
|
269
|
+
const keyMaterial = await s.importKey(
|
|
270
|
+
"raw",
|
|
271
|
+
new TextEncoder().encode(password),
|
|
272
|
+
"PBKDF2",
|
|
273
|
+
false,
|
|
274
|
+
["deriveBits"]
|
|
275
|
+
);
|
|
276
|
+
const bits = await s.deriveBits(
|
|
277
|
+
{ name: "PBKDF2", salt, iterations, hash: "SHA-256" },
|
|
278
|
+
keyMaterial,
|
|
279
|
+
256
|
|
280
|
+
);
|
|
281
|
+
return toHex(bits);
|
|
282
|
+
}
|
|
283
|
+
async function cacheCredential(username, password, identity) {
|
|
284
|
+
if (!subtle()) return;
|
|
285
|
+
const salt = crypto.getRandomValues(new Uint8Array(16));
|
|
286
|
+
const hashHex = await deriveHashHex(password, salt, PBKDF2_ITERATIONS);
|
|
287
|
+
if (!hashHex) return;
|
|
288
|
+
const cred = {
|
|
289
|
+
username: username.trim(),
|
|
290
|
+
saltHex: toHex(salt.buffer),
|
|
291
|
+
hashHex,
|
|
292
|
+
iterations: PBKDF2_ITERATIONS,
|
|
293
|
+
identity
|
|
294
|
+
};
|
|
295
|
+
await setMeta("credential", cred);
|
|
296
|
+
}
|
|
297
|
+
async function verifyOffline(username, password) {
|
|
298
|
+
const cred = await getMeta("credential");
|
|
299
|
+
if (!cred || cred.username !== username.trim()) return null;
|
|
300
|
+
const hashHex = await deriveHashHex(
|
|
301
|
+
password,
|
|
302
|
+
fromHex(cred.saltHex),
|
|
303
|
+
cred.iterations
|
|
304
|
+
);
|
|
305
|
+
if (!hashHex || hashHex !== cred.hashHex) return null;
|
|
306
|
+
await setMeta("identity", cred.identity);
|
|
307
|
+
return cred.identity;
|
|
308
|
+
}
|
|
309
|
+
function useTickets() {
|
|
310
|
+
return useLiveQuery(() => db.tickets.orderBy("createdAt").reverse().toArray());
|
|
311
|
+
}
|
|
312
|
+
function useCatalog() {
|
|
313
|
+
return useLiveQuery(() => db.catalog.orderBy("category").toArray());
|
|
314
|
+
}
|
|
315
|
+
function useOfficers() {
|
|
316
|
+
return useLiveQuery(() => db.officers.toArray());
|
|
317
|
+
}
|
|
318
|
+
function useIdentity() {
|
|
319
|
+
return useLiveQuery(
|
|
320
|
+
async () => (await db.meta.get("identity"))?.value
|
|
321
|
+
);
|
|
322
|
+
}
|
|
323
|
+
function useStats() {
|
|
324
|
+
return useLiveQuery(
|
|
325
|
+
async () => (await db.meta.get("stats"))?.value
|
|
326
|
+
);
|
|
327
|
+
}
|
|
328
|
+
function useTicket(ovrTicketNo) {
|
|
329
|
+
return useLiveQuery(
|
|
330
|
+
async () => await db.tickets.get(ovrTicketNo) ?? null,
|
|
331
|
+
[ovrTicketNo]
|
|
332
|
+
);
|
|
333
|
+
}
|
|
334
|
+
function usePendingSync() {
|
|
335
|
+
const rows = useLiveQuery(() => db.outbox.toArray());
|
|
336
|
+
return new Set((rows ?? []).map((r) => r.ovrTicketNo));
|
|
337
|
+
}
|
|
338
|
+
function useSync() {
|
|
339
|
+
const [syncing, setSyncing] = useState(false);
|
|
340
|
+
const [online, setOnline] = useState(true);
|
|
341
|
+
const [error, setError] = useState(null);
|
|
342
|
+
useEffect(() => {
|
|
343
|
+
let cancelled = false;
|
|
344
|
+
setOnline(isOnline());
|
|
345
|
+
async function runSyncCycle() {
|
|
346
|
+
if (!isOnline()) return;
|
|
347
|
+
setSyncing(true);
|
|
348
|
+
setError(null);
|
|
349
|
+
try {
|
|
350
|
+
await sync();
|
|
351
|
+
} catch (e) {
|
|
352
|
+
if (e instanceof SessionExpired) {
|
|
353
|
+
await clearIdentity();
|
|
354
|
+
window.location.assign("/admin/login");
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
if (!cancelled) setError(e instanceof Error ? e.message : "sync failed");
|
|
358
|
+
} finally {
|
|
359
|
+
if (!cancelled) setSyncing(false);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
const onOnline = () => {
|
|
363
|
+
setOnline(true);
|
|
364
|
+
void runSyncCycle();
|
|
365
|
+
};
|
|
366
|
+
const onOffline = () => setOnline(false);
|
|
367
|
+
void runSyncCycle();
|
|
368
|
+
window.addEventListener("online", onOnline);
|
|
369
|
+
window.addEventListener("offline", onOffline);
|
|
370
|
+
return () => {
|
|
371
|
+
cancelled = true;
|
|
372
|
+
window.removeEventListener("online", onOnline);
|
|
373
|
+
window.removeEventListener("offline", onOffline);
|
|
374
|
+
};
|
|
375
|
+
}, []);
|
|
376
|
+
return { syncing, online, error };
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
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 };
|
package/dist/data-mock-store.js
CHANGED
|
@@ -82,6 +82,7 @@ function createMockStore(rules, seed) {
|
|
|
82
82
|
officer,
|
|
83
83
|
violations,
|
|
84
84
|
remarks: input.remarks?.trim() || void 0,
|
|
85
|
+
issuedBy: input.issuedBy?.trim() || void 0,
|
|
85
86
|
assessedAt,
|
|
86
87
|
dueDate: addDays(now, rules.dueWindowDays).toISOString(),
|
|
87
88
|
basicFinesTotal,
|
|
@@ -135,6 +136,7 @@ function createMockStore(rules, seed) {
|
|
|
135
136
|
officer,
|
|
136
137
|
violations,
|
|
137
138
|
remarks: input.remarks?.trim() || void 0,
|
|
139
|
+
issuedBy: input.issuedBy?.trim() || void 0,
|
|
138
140
|
assessedAt: input.createdAt,
|
|
139
141
|
dueDate: addDays(created, rules.dueWindowDays).toISOString(),
|
|
140
142
|
basicFinesTotal,
|
|
@@ -45,6 +45,7 @@ function toRecord(row) {
|
|
|
45
45
|
officer: toOfficer(row.officer),
|
|
46
46
|
violations,
|
|
47
47
|
remarks: row.remarks ?? void 0,
|
|
48
|
+
issuedBy: row.issuedBy ?? void 0,
|
|
48
49
|
assessedAt: row.assessedAt.toISOString(),
|
|
49
50
|
dueDate: row.dueDate.toISOString(),
|
|
50
51
|
basicFinesTotal: row.basicFinesTotal.toNumber(),
|
|
@@ -145,6 +146,7 @@ function createPrismaStore(rules) {
|
|
|
145
146
|
apprehendedAt: new Date(input.apprehendedAt),
|
|
146
147
|
placeOfViolation: input.placeOfViolation?.trim() || null,
|
|
147
148
|
remarks: input.remarks?.trim() || null,
|
|
149
|
+
issuedBy: input.issuedBy?.trim() || null,
|
|
148
150
|
officerId: officer.id,
|
|
149
151
|
assessedAt: now,
|
|
150
152
|
dueDate: addDays(now, rules.dueWindowDays),
|
|
@@ -228,6 +230,7 @@ function createPrismaStore(rules) {
|
|
|
228
230
|
apprehendedAt: new Date(input.apprehendedAt),
|
|
229
231
|
placeOfViolation: input.placeOfViolation?.trim() || null,
|
|
230
232
|
remarks: input.remarks?.trim() || null,
|
|
233
|
+
issuedBy: input.issuedBy?.trim() || null,
|
|
231
234
|
officerId: officer.id,
|
|
232
235
|
assessedAt: created,
|
|
233
236
|
dueDate: addDays(created, rules.dueWindowDays),
|
package/dist/data.d.ts
CHANGED
|
@@ -128,6 +128,7 @@ exports.Prisma.TicketScalarFieldEnum = {
|
|
|
128
128
|
apprehendedAt: 'apprehendedAt',
|
|
129
129
|
placeOfViolation: 'placeOfViolation',
|
|
130
130
|
remarks: 'remarks',
|
|
131
|
+
issuedBy: 'issuedBy',
|
|
131
132
|
officerId: 'officerId',
|
|
132
133
|
assessedAt: 'assessedAt',
|
|
133
134
|
dueDate: 'dueDate',
|
|
@@ -260,13 +261,13 @@ const config = {
|
|
|
260
261
|
}
|
|
261
262
|
}
|
|
262
263
|
},
|
|
263
|
-
"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\nenum UserRole {\n ENFORCER\n ADMIN\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\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\nmodel User {\n id String @id @default(cuid())\n username String @unique\n passwordHash String\n role UserRole @default(ENFORCER)\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",
|
|
264
|
-
"inlineSchemaHash": "
|
|
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\nenum UserRole {\n ENFORCER\n ADMIN\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 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\nmodel User {\n id String @id @default(cuid())\n username String @unique\n passwordHash String\n role UserRole @default(ENFORCER)\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",
|
|
265
|
+
"inlineSchemaHash": "603a054958121856a9ba32dc34198e8925acef2c7fe77cb4f72b0241397bc710",
|
|
265
266
|
"copyEngine": true
|
|
266
267
|
}
|
|
267
268
|
config.dirname = '/'
|
|
268
269
|
|
|
269
|
-
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\":\"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\":{}}")
|
|
270
|
+
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\":{}}")
|
|
270
271
|
defineDmmfProperty(exports.Prisma, config.runtimeDataModel)
|
|
271
272
|
config.engineWasm = undefined
|
|
272
273
|
config.compilerWasm = undefined
|