-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathschema.sql
More file actions
639 lines (575 loc) · 26.6 KB
/
Copy pathschema.sql
File metadata and controls
639 lines (575 loc) · 26.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
-- GesCon — schema v1. Convenção de exclusão lógica estilo Protheus
-- (R_E_C_N_O_/D_E_L_E_T_/R_E_C_D_E_L_), mesma que o AdvEditor usa.
-- Tabela de metadados SX3 (títulos/tipos de coluna pro FWMBrowse).
CREATE TABLE IF NOT EXISTS SX3 (
R_E_C_N_O_ INTEGER PRIMARY KEY AUTOINCREMENT,
D_E_L_E_T_ TEXT DEFAULT ' ',
X3_ARQUIVO TEXT NOT NULL,
X3_ORDEM INTEGER NOT NULL,
X3_CAMPO TEXT NOT NULL,
X3_TIPO TEXT NOT NULL,
X3_TAMANHO INTEGER NOT NULL,
X3_DECIMAL INTEGER DEFAULT 0,
X3_QUICK TEXT DEFAULT 'N',
X3_VLADB TEXT DEFAULT '',
X3_TITULO TEXT
);
CREATE TABLE IF NOT EXISTS CON (
R_E_C_N_O_ INTEGER PRIMARY KEY AUTOINCREMENT,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ INTEGER DEFAULT 0,
CON_CODIGO TEXT NOT NULL,
CON_NOME TEXT NOT NULL,
CON_CPF TEXT,
CON_EMAIL TEXT,
CON_TEL TEXT
);
CREATE TABLE IF NOT EXISTS UNI (
R_E_C_N_O_ INTEGER PRIMARY KEY AUTOINCREMENT,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ INTEGER DEFAULT 0,
UNI_CODIGO TEXT NOT NULL UNIQUE,
UNI_BLOCO TEXT,
UNI_FRACAO REAL NOT NULL DEFAULT 0,
UNI_CONDOMINO TEXT
);
CREATE TABLE IF NOT EXISTS DES (
R_E_C_N_O_ INTEGER PRIMARY KEY AUTOINCREMENT,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ INTEGER DEFAULT 0,
DES_DESCR TEXT NOT NULL,
DES_CATEG TEXT,
DES_VALOR REAL NOT NULL DEFAULT 0,
DES_COMPET TEXT NOT NULL,
DES_DTLANC TEXT
);
CREATE TABLE IF NOT EXISTS COB (
R_E_C_N_O_ INTEGER PRIMARY KEY AUTOINCREMENT,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ INTEGER DEFAULT 0,
COB_UNIDADE TEXT NOT NULL,
COB_COMPET TEXT NOT NULL,
COB_VALOR REAL NOT NULL DEFAULT 0,
COB_VENCTO TEXT,
COB_STATUS TEXT NOT NULL DEFAULT 'pendente',
COB_DTPAG TEXT
);
CREATE TABLE IF NOT EXISTS USR (
R_E_C_N_O_ INTEGER PRIMARY KEY AUTOINCREMENT,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ INTEGER DEFAULT 0,
USR_LOGIN TEXT NOT NULL,
USR_SENHA TEXT NOT NULL,
USR_PERFIL TEXT DEFAULT 'ADMIN'
);
-- Tabelas de relatório (Plano 2): snapshot recalculado do zero (DELETE +
-- INSERT) toda vez que o relatório é aberto, mesmo padrão que
-- GcFecharMes já usa pra gravar Cobrança — FWMBrowse só sabe abrir uma
-- tabela física por alias (SELECT rowid ..., UPDATE/DELETE ... WHERE
-- rowid = ?), não dá pra apontar pra uma query parametrizada ou VIEW sem
-- rowid direto. Read-only por convenção, mas tecnicamente editável pela
-- mesma limitação já aceita na tela de Cobranças (ver ARQUITETURA.md).
CREATE TABLE IF NOT EXISTS RPT_INADIM (
R_E_C_N_O_ INTEGER PRIMARY KEY AUTOINCREMENT,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ INTEGER DEFAULT 0,
RIN_UNIDADE TEXT,
RIN_COMPET TEXT,
RIN_VALOR REAL,
RIN_VENCTO TEXT,
RIN_ATRASO INTEGER
);
CREATE TABLE IF NOT EXISTS RPT_EXTRATO (
R_E_C_N_O_ INTEGER PRIMARY KEY AUTOINCREMENT,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ INTEGER DEFAULT 0,
REX_COMPET TEXT,
REX_VALOR REAL,
REX_VENCTO TEXT,
REX_STATUS TEXT,
REX_DTPAG TEXT
);
CREATE TABLE IF NOT EXISTS RPT_DESCAT (
R_E_C_N_O_ INTEGER PRIMARY KEY AUTOINCREMENT,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ INTEGER DEFAULT 0,
RDC_CATEG TEXT,
RDC_TOTAL REAL
);
-- GesCon — CFG_BOLETO: configuração do beneficiário para geração de boletos.
-- Uma única linha (estilo MV; INSERT/UPDATE direto).
CREATE TABLE IF NOT EXISTS CFG_BOLETO (
R_E_C_N_O_ INTEGER PRIMARY KEY AUTOINCREMENT,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ INTEGER DEFAULT 0,
CFG_BANCO TEXT NOT NULL DEFAULT '237',
CFG_AGENCIA TEXT NOT NULL,
CFG_CONTA TEXT NOT NULL,
CFG_COBRT TEXT NOT NULL,
CFG_CARTEIRA TEXT NOT NULL
);
-- GesCon — GCT_TOKEN: tokens temporários para acesso condômino.
CREATE TABLE IF NOT EXISTS GCT_TOKEN (
TOKEN TEXT PRIMARY KEY,
USR_LOGIN TEXT NOT NULL,
CON_CODIGO TEXT NOT NULL,
UNI_CODIGO TEXT NOT NULL,
CRIPTADO TEXT NOT NULL,
VALIDO_ATE TEXT NOT NULL,
USADO INTEGER DEFAULT 0,
TOK_PERFIL TEXT,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ INTEGER DEFAULT 0
);
-- GesCon — RPT_COND_COBRANCAS: snapshot de cobranças filtrado por unidade
-- (para acesso read-only do condômino via portal).
CREATE TABLE IF NOT EXISTS RPT_COND_COBRANCAS (
RCC_UNIDADE TEXT NOT NULL,
RCC_COMPET TEXT NOT NULL,
RCC_VALOR REAL,
RCC_VENCTO TEXT,
RCC_STATUS TEXT,
RCC_DTPAG TEXT,
R_E_C_N_O_ INTEGER PRIMARY KEY AUTOINCREMENT,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ INTEGER DEFAULT 0
);
-- Metadados SX3 (títulos/tipos de coluna pro FWMBrowse — ver browseColumns
-- em pkg/vm/browse.go do AdvPP: sem essas linhas, o browse cai no fallback
-- de mostrar toda coluna física como texto, sem título amigável).
-- Limpa TUDO antes de reinserir: o SX3 e metadado, reconstruido por inteiro
-- por este arquivo. A lista de X3_ARQUIVO que existia aqui cobria 11 das 24
-- tabelas, entao cada bootstrap repetido duplicava as outras 13 -- o banco de
-- desenvolvimento chegou a ter 4 copias de cada coluna de AVISOS.
DELETE FROM SX3;
INSERT INTO SX3 (X3_ARQUIVO, X3_ORDEM, X3_CAMPO, X3_TIPO, X3_TAMANHO, X3_DECIMAL, X3_TITULO) VALUES
('CON', 1, 'CON_CODIGO', 'C', 10, 0, 'Código'),
('CON', 2, 'CON_NOME', 'C', 60, 0, 'Nome'),
('CON', 3, 'CON_CPF', 'C', 14, 0, 'CPF'),
('CON', 4, 'CON_EMAIL', 'C', 60, 0, 'E-mail'),
('CON', 5, 'CON_TEL', 'C', 20, 0, 'Telefone'),
('UNI', 1, 'UNI_CODIGO', 'C', 10, 0, 'Unidade'),
('UNI', 2, 'UNI_BLOCO', 'C', 10, 0, 'Bloco'),
('UNI', 3, 'UNI_FRACAO', 'N', 8, 4, 'Fração Ideal'),
('UNI', 4, 'UNI_CONDOMINO', 'C', 10, 0, 'Cód. Condômino'),
('DES', 1, 'DES_DESCR', 'C', 80, 0, 'Descrição'),
('DES', 2, 'DES_CATEG', 'C', 30, 0, 'Categoria'),
('DES', 3, 'DES_VALOR', 'N', 14, 2, 'Valor'),
('DES', 4, 'DES_COMPET', 'C', 7, 0, 'Competência'),
('DES', 5, 'DES_DTLANC', 'C', 10, 0, 'Data Lançamento'),
('COB', 1, 'COB_UNIDADE', 'C', 10, 0, 'Unidade'),
('COB', 2, 'COB_COMPET', 'C', 7, 0, 'Competência'),
('COB', 3, 'COB_VALOR', 'N', 14, 2, 'Valor'),
('COB', 4, 'COB_VENCTO', 'C', 10, 0, 'Vencimento'),
('COB', 5, 'COB_STATUS', 'C', 10, 0, 'Status'),
('COB', 6, 'COB_DTPAG', 'C', 10, 0, 'Data Pagamento'),
('RPT_INADIM', 1, 'RIN_UNIDADE', 'C', 10, 0, 'Unidade'),
('RPT_INADIM', 2, 'RIN_COMPET', 'C', 7, 0, 'Competência'),
('RPT_INADIM', 3, 'RIN_VALOR', 'N', 14, 2, 'Valor'),
('RPT_INADIM', 4, 'RIN_VENCTO', 'C', 10, 0, 'Vencimento'),
('RPT_INADIM', 5, 'RIN_ATRASO', 'N', 5, 0, 'Dias de Atraso'),
('RPT_EXTRATO', 1, 'REX_COMPET', 'C', 7, 0, 'Competência'),
('RPT_EXTRATO', 2, 'REX_VALOR', 'N', 14, 2, 'Valor'),
('RPT_EXTRATO', 3, 'REX_VENCTO', 'C', 10, 0, 'Vencimento'),
('RPT_EXTRATO', 4, 'REX_STATUS', 'C', 10, 0, 'Status'),
('RPT_EXTRATO', 5, 'REX_DTPAG', 'C', 10, 0, 'Data Pagamento'),
('RPT_DESCAT', 1, 'RDC_CATEG', 'C', 30, 0, 'Categoria'),
('RPT_DESCAT', 2, 'RDC_TOTAL', 'N', 14, 2, 'Total');
-- USR_PERFIL e TOK_PERFIL nasceram como ALTER TABLE ADD COLUMN. O SQLite nao
-- tem IF NOT EXISTS para ADD COLUMN, entao reaplicar o schema abortava com
-- "duplicate column name" -- e o bootstrap saia 1 sem que ninguem visse.
-- Agora as colunas moram no CREATE TABLE das proprias tabelas.
-- Metadados SX3 para CFG_BOLETO
INSERT INTO SX3 (X3_ARQUIVO, X3_ORDEM, X3_CAMPO, X3_TIPO, X3_TAMANHO, X3_DECIMAL, X3_TITULO) VALUES
('CFG_BOLETO', 1, 'CFG_BANCO', 'C', 4, 0, 'Código do Banco'),
('CFG_BOLETO', 2, 'CFG_AGENCIA', 'C', 10, 0, 'Agência'),
('CFG_BOLETO', 3, 'CFG_CONTA', 'C', 15, 0, 'Conta Corrente'),
('CFG_BOLETO', 4, 'CFG_COBRT', 'C', 15, 0, 'Carta/Cedente ou Convênio'),
('CFG_BOLETO', 5, 'CFG_CARTEIRA', 'C', 10, 0, 'Carteira');
-- Metadados SX3 para GCT_TOKEN
INSERT INTO SX3 (X3_ARQUIVO, X3_ORDEM, X3_CAMPO, X3_TIPO, X3_TAMANHO, X3_DECIMAL, X3_TITULO) VALUES
('GCT_TOKEN', 1, 'TOKEN', 'C', 36, 0, 'Token'),
('GCT_TOKEN', 2, 'USR_LOGIN', 'C', 40, 0, 'Gerado por'),
('GCT_TOKEN', 3, 'CON_CODIGO', 'C', 10, 0, 'Condômino'),
('GCT_TOKEN', 4, 'UNI_CODIGO', 'C', 10, 0, 'Unidade'),
('GCT_TOKEN', 5, 'CRIPTADO', 'C', 19, 0, 'Criado em'),
('GCT_TOKEN', 6, 'VALIDO_ATE', 'C', 19, 0, 'Válido até'),
('GCT_TOKEN', 7, 'USADO', 'N', 1, 0, 'Usado');
-- Metadados SX3 para RPT_COND_COBRANCAS
INSERT INTO SX3 (X3_ARQUIVO, X3_ORDEM, X3_CAMPO, X3_TIPO, X3_TAMANHO, X3_DECIMAL, X3_TITULO) VALUES
('RPT_COND_COBRANCAS', 1, 'RCC_UNIDADE', 'C', 10, 0, 'Unidade'),
('RPT_COND_COBRANCAS', 2, 'RCC_COMPET', 'C', 7, 0, 'Competência'),
('RPT_COND_COBRANCAS', 3, 'RCC_VALOR', 'N', 14, 2, 'Valor'),
('RPT_COND_COBRANCAS', 4, 'RCC_VENCTO', 'C', 10, 0, 'Vencimento'),
('RPT_COND_COBRANCAS', 5, 'RCC_STATUS', 'C', 10, 0, 'Status'),
('RPT_COND_COBRANCAS', 6, 'RCC_DTPAG', 'C', 10, 0, 'Data Pagamento');
-- Metadados SX3 para USR_PERFIL
INSERT INTO SX3 (X3_ARQUIVO, X3_ORDEM, X3_CAMPO, X3_TIPO, X3_TAMANHO, X3_DECIMAL, X3_TITULO) VALUES
('USR', 3, 'USR_PERFIL', 'C', 20, 0, 'Perfil do Usuário');
-- ============================================================================
-- Sistema Contábil em Partida Dupla (v2.0)
-- 6 tabelas para suportar lançamentos manuais + automáticos, rateio,
-- fechamento de período com validação D/C, e auditoria.
-- ============================================================================
CREATE TABLE IF NOT EXISTS PLANO_CONTAS (
R_E_C_N_O_ INTEGER PRIMARY KEY AUTOINCREMENT,
PLA_CODIGO TEXT UNIQUE NOT NULL,
PLA_NOME TEXT NOT NULL,
PLA_TIPO TEXT NOT NULL,
PLA_ATIVO NUMERIC DEFAULT 1,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ NUMERIC,
CHECK(PLA_TIPO IN ('ATIVO', 'PASSIVO', 'RECEITA', 'DESPESA'))
);
CREATE INDEX IF NOT EXISTS IDX_PLANO_CONTAS_ATIVO ON PLANO_CONTAS(PLA_ATIVO, D_E_L_E_T_);
CREATE TABLE IF NOT EXISTS REPARTICAO (
R_E_C_N_O_ INTEGER PRIMARY KEY AUTOINCREMENT,
REP_CODIGO TEXT UNIQUE NOT NULL,
REP_NOME TEXT NOT NULL,
REP_ATIVO NUMERIC DEFAULT 1,
REP_DETALHE TEXT,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ NUMERIC
);
CREATE INDEX IF NOT EXISTS IDX_REPARTICAO_ATIVO ON REPARTICAO(REP_ATIVO, D_E_L_E_T_);
CREATE TABLE IF NOT EXISTS EXERCICIO (
R_E_C_N_O_ INTEGER PRIMARY KEY AUTOINCREMENT,
EXE_CODIGO TEXT UNIQUE NOT NULL,
EXE_INICIO DATE NOT NULL,
EXE_FIM DATE NOT NULL,
EXE_ATIVO NUMERIC DEFAULT 0,
EXE_FECHADO NUMERIC DEFAULT 0,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ NUMERIC
);
CREATE INDEX IF NOT EXISTS IDX_EXERCICIO_ATIVO ON EXERCICIO(EXE_ATIVO, EXE_FECHADO, D_E_L_E_T_);
CREATE TABLE IF NOT EXISTS LANCAMENTOS (
LAN_ID INTEGER PRIMARY KEY AUTOINCREMENT,
LAN_DATA DATE NOT NULL,
LAN_CONTA_DEB TEXT NOT NULL,
LAN_CONTA_CRED TEXT NOT NULL,
LAN_VALOR NUMERIC NOT NULL,
LAN_DESCR TEXT,
LAN_REFERENCIA NUMERIC,
LAN_TIPO TEXT NOT NULL,
LAN_DATA_HORA DATETIME,
LAN_USUARIO TEXT,
LAN_EXERCICIO TEXT NOT NULL,
R_E_C_N_O_ INTEGER,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ NUMERIC,
FOREIGN KEY(LAN_CONTA_DEB) REFERENCES PLANO_CONTAS(PLA_CODIGO),
FOREIGN KEY(LAN_CONTA_CRED) REFERENCES PLANO_CONTAS(PLA_CODIGO),
FOREIGN KEY(LAN_EXERCICIO) REFERENCES EXERCICIO(EXE_CODIGO),
CHECK(LAN_VALOR > 0),
CHECK(LAN_TIPO IN ('MANUAL', 'AUTOMATICO_DESPESA', 'AUTOMATICO_RATEIO')),
CHECK(LAN_CONTA_DEB != LAN_CONTA_CRED)
);
CREATE INDEX IF NOT EXISTS IDX_LANCAMENTOS_EXERCICIO ON LANCAMENTOS(LAN_EXERCICIO, D_E_L_E_T_);
CREATE INDEX IF NOT EXISTS IDX_LANCAMENTOS_TIPO ON LANCAMENTOS(LAN_TIPO, D_E_L_E_T_);
CREATE INDEX IF NOT EXISTS IDX_LANCAMENTOS_REFERENCIA ON LANCAMENTOS(LAN_REFERENCIA, D_E_L_E_T_);
CREATE TABLE IF NOT EXISTS RATEIO_DETALHE (
RAT_ID INTEGER PRIMARY KEY AUTOINCREMENT,
RAT_LANCAMENTO INTEGER NOT NULL,
RAT_UNIDADE TEXT NOT NULL,
RAT_VALOR NUMERIC NOT NULL,
RAT_PERCENTUAL NUMERIC,
R_E_C_N_O_ INTEGER,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ NUMERIC,
FOREIGN KEY(RAT_LANCAMENTO) REFERENCES LANCAMENTOS(LAN_ID),
FOREIGN KEY(RAT_UNIDADE) REFERENCES UNI(UNI_CODIGO),
CHECK(RAT_VALOR > 0)
);
CREATE INDEX IF NOT EXISTS IDX_RATEIO_LANCAMENTO ON RATEIO_DETALHE(RAT_LANCAMENTO, D_E_L_E_T_);
CREATE INDEX IF NOT EXISTS IDX_RATEIO_UNIDADE ON RATEIO_DETALHE(RAT_UNIDADE, D_E_L_E_T_);
CREATE TABLE IF NOT EXISTS AUDITORIA (
AUD_ID INTEGER PRIMARY KEY AUTOINCREMENT,
AUD_DATA_HORA DATETIME NOT NULL,
AUD_TIPO TEXT NOT NULL,
AUD_DESCRICAO TEXT,
AUD_SEVERIDADE TEXT NOT NULL,
AUD_RECNO_LAN NUMERIC,
AUD_RECNO_COB NUMERIC,
AUD_EXERCICIO TEXT,
R_E_C_N_O_ INTEGER,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ NUMERIC,
CHECK(AUD_SEVERIDADE IN ('CRITICA', 'AVISO', 'INFO')),
CHECK(AUD_TIPO IN ('DESEQUILIBRIO_CONTABIL', 'COB_ORFAO', 'LAN_ORFAO', 'OUTRO'))
);
CREATE INDEX IF NOT EXISTS IDX_AUDITORIA_EXERCICIO ON AUDITORIA(AUD_EXERCICIO, AUD_SEVERIDADE, D_E_L_E_T_);
CREATE TABLE IF NOT EXISTS RPT_BALANCETE (
R_E_C_N_O_ INTEGER PRIMARY KEY AUTOINCREMENT,
RPT_EXERCICIO TEXT NOT NULL,
RPT_RECEITAS NUMERIC,
RPT_DESPESAS NUMERIC,
RPT_SALDO NUMERIC,
RPT_DATA_GERACAO DATETIME,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ NUMERIC,
UNIQUE(RPT_EXERCICIO, D_E_L_E_T_)
);
-- Metadados SX3 para PLANO_CONTAS
DELETE FROM SX3 WHERE X3_ARQUIVO IN ('PLANO_CONTAS','REPARTICAO','EXERCICIO','LANCAMENTOS','RATEIO_DETALHE','AUDITORIA','RPT_BALANCETE');
INSERT INTO SX3 (X3_ARQUIVO, X3_ORDEM, X3_CAMPO, X3_TIPO, X3_TAMANHO, X3_DECIMAL, X3_TITULO) VALUES
('PLANO_CONTAS', 1, 'PLA_CODIGO', 'C', 10, 0, 'Código Conta'),
('PLANO_CONTAS', 2, 'PLA_NOME', 'C', 80, 0, 'Nome Conta'),
('PLANO_CONTAS', 3, 'PLA_TIPO', 'C', 15, 0, 'Tipo'),
('PLANO_CONTAS', 4, 'PLA_ATIVO', 'N', 1, 0, 'Ativo'),
('REPARTICAO', 1, 'REP_CODIGO', 'C', 20, 0, 'Código Repartição'),
('REPARTICAO', 2, 'REP_NOME', 'C', 80, 0, 'Nome Repartição'),
('REPARTICAO', 3, 'REP_ATIVO', 'N', 1, 0, 'Ativo'),
('REPARTICAO', 4, 'REP_DETALHE', 'C', 200, 0, 'Detalhes'),
('EXERCICIO', 1, 'EXE_CODIGO', 'C', 7, 0, 'Código Exercício'),
('EXERCICIO', 2, 'EXE_INICIO', 'D', 10, 0, 'Data Início'),
('EXERCICIO', 3, 'EXE_FIM', 'D', 10, 0, 'Data Fim'),
('EXERCICIO', 4, 'EXE_ATIVO', 'N', 1, 0, 'Ativo'),
('EXERCICIO', 5, 'EXE_FECHADO', 'N', 1, 0, 'Fechado'),
('LANCAMENTOS', 1, 'LAN_DATA', 'D', 10, 0, 'Data Lançamento'),
('LANCAMENTOS', 2, 'LAN_CONTA_DEB', 'C', 10, 0, 'Conta Débito'),
('LANCAMENTOS', 3, 'LAN_CONTA_CRED', 'C', 10, 0, 'Conta Crédito'),
('LANCAMENTOS', 4, 'LAN_VALOR', 'N', 14, 2, 'Valor'),
('LANCAMENTOS', 5, 'LAN_DESCR', 'C', 200, 0, 'Descrição'),
('LANCAMENTOS', 6, 'LAN_TIPO', 'C', 20, 0, 'Tipo Lançamento'),
('LANCAMENTOS', 7, 'LAN_EXERCICIO', 'C', 7, 0, 'Exercício'),
('LANCAMENTOS', 8, 'LAN_DATA_HORA', 'C', 19, 0, 'Data/Hora'),
('LANCAMENTOS', 9, 'LAN_USUARIO', 'C', 40, 0, 'Usuário'),
('RATEIO_DETALHE', 1, 'RAT_LANCAMENTO', 'N', 10, 0, 'ID Lançamento'),
('RATEIO_DETALHE', 2, 'RAT_UNIDADE', 'C', 10, 0, 'Unidade'),
('RATEIO_DETALHE', 3, 'RAT_VALOR', 'N', 14, 2, 'Valor Rateado'),
('RATEIO_DETALHE', 4, 'RAT_PERCENTUAL', 'N', 8, 4, 'Percentual'),
('AUDITORIA', 1, 'AUD_DATA_HORA', 'C', 19, 0, 'Data/Hora'),
('AUDITORIA', 2, 'AUD_TIPO', 'C', 25, 0, 'Tipo Anomalia'),
('AUDITORIA', 3, 'AUD_DESCRICAO', 'C', 200, 0, 'Descrição'),
('AUDITORIA', 4, 'AUD_SEVERIDADE', 'C', 10, 0, 'Severidade'),
('AUDITORIA', 5, 'AUD_EXERCICIO', 'C', 7, 0, 'Exercício'),
('RPT_BALANCETE', 1, 'RPT_EXERCICIO', 'C', 7, 0, 'Exercício'),
('RPT_BALANCETE', 2, 'RPT_RECEITAS', 'N', 14, 2, 'Receitas'),
('RPT_BALANCETE', 3, 'RPT_DESPESAS', 'N', 14, 2, 'Despesas'),
('RPT_BALANCETE', 4, 'RPT_SALDO', 'N', 14, 2, 'Saldo'),
('RPT_BALANCETE', 5, 'RPT_DATA_GERACAO', 'C', 19, 0, 'Data Geração');
-- Seed data for accounting system
INSERT OR IGNORE INTO PLANO_CONTAS (PLA_CODIGO, PLA_NOME, PLA_TIPO, PLA_ATIVO)
VALUES
('1000', 'Caixa', 'ATIVO', 1),
('1100', 'Banco', 'ATIVO', 1),
('2000', 'Contas a Pagar', 'PASSIVO', 1),
('2100', 'Débitos Anteriores', 'PASSIVO', 1),
('3000', 'Receita Condominial', 'RECEITA', 1),
('3100', 'Multas e Juros', 'RECEITA', 1),
('4000', 'Despesa Comum', 'DESPESA', 1),
('4100', 'Despesa Extraordinária', 'DESPESA', 1),
('4200', 'Água/Luz/Condomínio', 'DESPESA', 1),
('4300', 'Limpeza', 'DESPESA', 1),
('4400', 'Segurança', 'DESPESA', 1),
('4500', 'Manutenção', 'DESPESA', 1),
('4600', 'Seguros', 'DESPESA', 1),
('4700', 'Impostos e Taxas', 'DESPESA', 1),
('4800', 'Depreciação', 'DESPESA', 1),
('4900', 'Ajustes e Créditos', 'DESPESA', 1),
('5000', 'Contas a Receber', 'ATIVO', 1),
('6000', 'Capital/Patrimônio', 'PASSIVO', 1),
('6100', 'Lucros Acumulados', 'PASSIVO', 1),
('7000', 'Outras Contas', 'ATIVO', 1);
INSERT OR IGNORE INTO EXERCICIO (EXE_CODIGO, EXE_INICIO, EXE_FIM, EXE_ATIVO, EXE_FECHADO)
VALUES
('2025-01', '20250101', '20250131', 1, 0);
INSERT OR IGNORE INTO REPARTICAO (REP_CODIGO, REP_NOME, REP_ATIVO)
VALUES
('FRACAO', 'Fração Ideal', 1),
('METRAGEM', 'Por Metragem', 1),
('FIXO', 'Valor Fixo', 1);
-- Seed units for testing
INSERT OR IGNORE INTO UNI (UNI_CODIGO, UNI_BLOCO, UNI_FRACAO)
VALUES
('101', 'A', 0.05),
('102', 'A', 0.05),
('103', 'B', 0.05),
('104', 'B', 0.05),
('105', 'C', 0.05),
('106', 'C', 0.05),
('107', 'D', 0.05),
('108', 'D', 0.05),
('109', 'E', 0.05),
('110', 'E', 0.05),
('111', 'F', 0.05),
('112', 'F', 0.05),
('113', 'G', 0.05),
('114', 'G', 0.05),
('115', 'H', 0.05),
('116', 'H', 0.05),
('117', 'I', 0.05),
('118', 'I', 0.05),
('119', 'J', 0.05),
('120', 'J', 0.05);
-- ============================================================================
-- Portal do Condômino v2 — Tabelas de snapshot (avisos, extratos, agenda)
-- ============================================================================
-- AVISOS: Mural de avisos (anúncios publicados pelos admin)
CREATE TABLE IF NOT EXISTS AVISOS (
AVI_ID INTEGER PRIMARY KEY AUTOINCREMENT,
AVI_TITULO TEXT NOT NULL,
AVI_CORPO TEXT NOT NULL,
AVI_DATA_CRIACAO DATETIME DEFAULT CURRENT_TIMESTAMP,
AVI_ATIVO INTEGER DEFAULT 1 CHECK(AVI_ATIVO IN (0, 1)),
R_E_C_N_O_ INTEGER UNIQUE,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ NUMERIC
);
CREATE INDEX IF NOT EXISTS IDX_AVISOS_ATIVO ON AVISOS(AVI_ATIVO, D_E_L_E_T_);
-- RPT_PORTAL_EXTRATOS: Snapshot de faturas por unidade/mês
-- Regenerado 100% (DELETE + INSERT) a cada fechamento de período
CREATE TABLE IF NOT EXISTS RPT_PORTAL_EXTRATOS (
REX_ID INTEGER PRIMARY KEY AUTOINCREMENT,
REX_COMPETENCIA TEXT NOT NULL,
REX_UNIDADE TEXT NOT NULL,
REX_VALOR NUMERIC NOT NULL,
REX_VENCIMENTO DATE NOT NULL,
REX_STATUS TEXT DEFAULT 'PENDENTE' CHECK(REX_STATUS IN ('PENDENTE', 'PAGO')),
REX_DATA_PAGAMENTO DATE,
R_E_C_N_O_ INTEGER UNIQUE,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ NUMERIC,
UNIQUE(REX_COMPETENCIA, REX_UNIDADE, D_E_L_E_T_),
FOREIGN KEY(REX_UNIDADE) REFERENCES UNI(UNI_CODIGO)
);
CREATE INDEX IF NOT EXISTS IDX_RPT_PORTAL_EXTRATOS_UNIDADE ON RPT_PORTAL_EXTRATOS(REX_UNIDADE, D_E_L_E_T_);
CREATE INDEX IF NOT EXISTS IDX_RPT_PORTAL_EXTRATOS_COMPETENCIA ON RPT_PORTAL_EXTRATOS(REX_COMPETENCIA, D_E_L_E_T_);
CREATE INDEX IF NOT EXISTS IDX_RPT_PORTAL_EXTRATOS_STATUS ON RPT_PORTAL_EXTRATOS(REX_STATUS, D_E_L_E_T_);
-- RPT_PORTAL_AGENDA: Próximos vencimentos (próximos 12 meses)
-- Regenerado 100% (DELETE + INSERT) a cada fechamento de período
CREATE TABLE IF NOT EXISTS RPT_PORTAL_AGENDA (
REA_ID INTEGER PRIMARY KEY AUTOINCREMENT,
REA_UNIDADE TEXT NOT NULL,
REA_COMPETENCIA TEXT NOT NULL,
REA_VENCIMENTO DATE NOT NULL,
REA_VALOR NUMERIC NOT NULL,
R_E_C_N_O_ INTEGER UNIQUE,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ NUMERIC,
FOREIGN KEY(REA_UNIDADE) REFERENCES UNI(UNI_CODIGO)
);
CREATE INDEX IF NOT EXISTS IDX_RPT_PORTAL_AGENDA_UNIDADE ON RPT_PORTAL_AGENDA(REA_UNIDADE, D_E_L_E_T_);
CREATE INDEX IF NOT EXISTS IDX_RPT_PORTAL_AGENDA_VENCIMENTO ON RPT_PORTAL_AGENDA(REA_VENCIMENTO, D_E_L_E_T_);
-- Metadados SX3 para AVISOS
INSERT INTO SX3 (X3_ARQUIVO, X3_ORDEM, X3_CAMPO, X3_TIPO, X3_TAMANHO, X3_DECIMAL, X3_TITULO) VALUES
('AVISOS', 1, 'AVI_ID', 'N', 10, 0, 'ID Aviso'),
('AVISOS', 2, 'AVI_TITULO', 'C', 255, 0, 'Título'),
('AVISOS', 3, 'AVI_CORPO', 'M', 0, 0, 'Corpo'),
('AVISOS', 4, 'AVI_DATA_CRIACAO', 'C', 19, 0, 'Data Criação'),
('AVISOS', 5, 'AVI_ATIVO', 'N', 1, 0, 'Ativo');
-- Metadados SX3 para RPT_PORTAL_EXTRATOS
INSERT INTO SX3 (X3_ARQUIVO, X3_ORDEM, X3_CAMPO, X3_TIPO, X3_TAMANHO, X3_DECIMAL, X3_TITULO) VALUES
('RPT_PORTAL_EXTRATOS', 1, 'REX_ID', 'N', 10, 0, 'ID Extrato'),
('RPT_PORTAL_EXTRATOS', 2, 'REX_COMPETENCIA', 'C', 7, 0, 'Competência'),
('RPT_PORTAL_EXTRATOS', 3, 'REX_UNIDADE', 'C', 10, 0, 'Unidade'),
('RPT_PORTAL_EXTRATOS', 4, 'REX_VALOR', 'N', 14, 2, 'Valor'),
('RPT_PORTAL_EXTRATOS', 5, 'REX_VENCIMENTO', 'D', 10, 0, 'Vencimento'),
('RPT_PORTAL_EXTRATOS', 6, 'REX_STATUS', 'C', 10, 0, 'Status'),
('RPT_PORTAL_EXTRATOS', 7, 'REX_DATA_PAGAMENTO', 'D', 10, 0, 'Data Pagamento');
-- Metadados SX3 para RPT_PORTAL_AGENDA
INSERT INTO SX3 (X3_ARQUIVO, X3_ORDEM, X3_CAMPO, X3_TIPO, X3_TAMANHO, X3_DECIMAL, X3_TITULO) VALUES
('RPT_PORTAL_AGENDA', 1, 'REA_ID', 'N', 10, 0, 'ID Agenda'),
('RPT_PORTAL_AGENDA', 2, 'REA_UNIDADE', 'C', 10, 0, 'Unidade'),
('RPT_PORTAL_AGENDA', 3, 'REA_COMPETENCIA', 'C', 7, 0, 'Competência'),
('RPT_PORTAL_AGENDA', 4, 'REA_VENCIMENTO', 'D', 10, 0, 'Vencimento'),
('RPT_PORTAL_AGENDA', 5, 'REA_VALOR', 'N', 14, 2, 'Valor');
-- ANOMALIA_LOG: histórico de anomalias detectadas
CREATE TABLE IF NOT EXISTS ANOMALIA_LOG (
ANL_ID INTEGER PRIMARY KEY AUTOINCREMENT,
ANL_TIPO TEXT NOT NULL,
ANL_PERIODO TEXT NOT NULL,
ANL_UNIDADE TEXT,
ANL_VALOR NUMERIC,
ANL_DESCRICAO TEXT,
ANL_LANCAMENTO_ID INTEGER,
ANL_COBRANCA_ID INTEGER,
ANL_CRIADO_EM DATETIME DEFAULT CURRENT_TIMESTAMP,
ANL_RESOLVIDO_EM DATETIME,
ANL_STATUS TEXT DEFAULT 'ABERTO' CHECK(ANL_STATUS IN ('ABERTO', 'RESOLVIDO', 'IGNORADO')),
R_E_C_N_O_ INTEGER UNIQUE,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ NUMERIC
);
CREATE INDEX IF NOT EXISTS IDX_ANOMALIA_TIPO ON ANOMALIA_LOG(ANL_TIPO, D_E_L_E_T_);
CREATE INDEX IF NOT EXISTS IDX_ANOMALIA_PERIODO ON ANOMALIA_LOG(ANL_PERIODO, D_E_L_E_T_);
-- ALERTA: notificações crÃticas em tempo real
CREATE TABLE IF NOT EXISTS ALERTA (
ALT_ID INTEGER PRIMARY KEY AUTOINCREMENT,
ALT_TIPO TEXT NOT NULL CHECK(ALT_TIPO IN ('CRITICO', 'AVISO', 'INFO')),
ALT_ANOMALIA_ID INTEGER,
ALT_MENSAGEM TEXT NOT NULL,
ALT_CRIADO_EM DATETIME DEFAULT CURRENT_TIMESTAMP,
ALT_VISTO INTEGER DEFAULT 0,
ALT_VISTO_EM DATETIME,
R_E_C_N_O_ INTEGER UNIQUE,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ NUMERIC,
FOREIGN KEY(ALT_ANOMALIA_ID) REFERENCES ANOMALIA_LOG(ANL_ID)
);
CREATE INDEX IF NOT EXISTS IDX_ALERTA_TIPO ON ALERTA(ALT_TIPO, ALT_VISTO, D_E_L_E_T_);
-- DASHBOARD_CACHE: snapshot diário para performance
CREATE TABLE IF NOT EXISTS DASHBOARD_CACHE (
DSH_ID INTEGER PRIMARY KEY AUTOINCREMENT,
DSH_DATA DATE NOT NULL,
DSH_PERIODO TEXT NOT NULL,
DSH_ANOMALIAS_TOTAL NUMERIC,
DSH_DESEQUILIBRIO_COUNT NUMERIC,
DSH_LAN_ORFAO_COUNT NUMERIC,
DSH_COB_ORFAO_COUNT NUMERIC,
DSH_RATEIO_INVALID_COUNT NUMERIC,
DSH_TIMING_COUNT NUMERIC,
DSH_USUARIO_COUNT NUMERIC,
DSH_JSON TEXT,
DSH_ATUALIZADO_EM DATETIME,
R_E_C_N_O_ INTEGER UNIQUE,
D_E_L_E_T_ TEXT DEFAULT ' ',
R_E_C_D_E_L_ NUMERIC
);
CREATE UNIQUE INDEX IF NOT EXISTS IDX_DASHBOARD_DATA_PERIODO ON DASHBOARD_CACHE(DSH_DATA, DSH_PERIODO, D_E_L_E_T_);
-- Metadados SX3 para TOK_PERFIL
INSERT INTO SX3 (X3_ARQUIVO, X3_ORDEM, X3_CAMPO, X3_TIPO, X3_TAMANHO, X3_DECIMAL, X3_TITULO) VALUES
('GCT_TOKEN', 8, 'TOK_PERFIL', 'C', 20, 0, 'Perfil do Token');
-- ============================================================================
-- Metadados SX3 das tabelas de auditoria (Portal v3)
-- Sem estas linhas o FWMBrowse abre ANOMALIA_LOG, ALERTA e DASHBOARD_CACHE
-- sem coluna nenhuma -- as telas do menu Auditoria dependem disto.
-- ============================================================================
DELETE FROM SX3 WHERE X3_ARQUIVO IN ('ANOMALIA_LOG','ALERTA','DASHBOARD_CACHE');
INSERT INTO SX3 (X3_ARQUIVO, X3_ORDEM, X3_CAMPO, X3_TIPO, X3_TAMANHO, X3_DECIMAL, X3_TITULO) VALUES
('ANOMALIA_LOG', 1, 'ANL_ID', 'N', 10, 0, 'ID'),
('ANOMALIA_LOG', 2, 'ANL_TIPO', 'C', 40, 0, 'Tipo'),
('ANOMALIA_LOG', 3, 'ANL_PERIODO', 'C', 7, 0, 'Período'),
('ANOMALIA_LOG', 4, 'ANL_UNIDADE', 'C', 20, 0, 'Unidade'),
('ANOMALIA_LOG', 5, 'ANL_VALOR', 'N', 14, 2, 'Valor'),
('ANOMALIA_LOG', 6, 'ANL_DESCRICAO', 'C',255, 0, 'Descrição'),
('ANOMALIA_LOG', 7, 'ANL_LANCAMENTO_ID', 'N', 10, 0, 'Lançamento'),
('ANOMALIA_LOG', 8, 'ANL_COBRANCA_ID', 'N', 10, 0, 'Cobrança'),
('ANOMALIA_LOG', 9, 'ANL_CRIADO_EM', 'C', 19, 0, 'Detectada em'),
('ANOMALIA_LOG',10, 'ANL_RESOLVIDO_EM', 'C', 19, 0, 'Resolvida em'),
('ANOMALIA_LOG',11, 'ANL_STATUS', 'C', 20, 0, 'Status');
INSERT INTO SX3 (X3_ARQUIVO, X3_ORDEM, X3_CAMPO, X3_TIPO, X3_TAMANHO, X3_DECIMAL, X3_TITULO) VALUES
('ALERTA', 1, 'ALT_ID', 'N', 10, 0, 'ID'),
('ALERTA', 2, 'ALT_TIPO', 'C', 20, 0, 'Tipo'),
('ALERTA', 3, 'ALT_ANOMALIA_ID', 'N', 10, 0, 'Anomalia'),
('ALERTA', 4, 'ALT_MENSAGEM', 'C',255, 0, 'Mensagem'),
('ALERTA', 5, 'ALT_CRIADO_EM', 'C', 19, 0, 'Criado em'),
('ALERTA', 6, 'ALT_VISTO', 'N', 1, 0, 'Visto'),
('ALERTA', 7, 'ALT_VISTO_EM', 'C', 19, 0, 'Visto em');
INSERT INTO SX3 (X3_ARQUIVO, X3_ORDEM, X3_CAMPO, X3_TIPO, X3_TAMANHO, X3_DECIMAL, X3_TITULO) VALUES
('DASHBOARD_CACHE', 1, 'DSH_ID', 'N', 10, 0, 'ID'),
('DASHBOARD_CACHE', 2, 'DSH_DATA', 'C', 10, 0, 'Data'),
('DASHBOARD_CACHE', 3, 'DSH_PERIODO', 'C', 7, 0, 'Período'),
('DASHBOARD_CACHE', 4, 'DSH_ANOMALIAS_TOTAL', 'N', 10, 0, 'Total'),
('DASHBOARD_CACHE', 5, 'DSH_DESEQUILIBRIO_COUNT', 'N', 10, 0, 'Desequilíbrio'),
('DASHBOARD_CACHE', 6, 'DSH_LAN_ORFAO_COUNT', 'N', 10, 0, 'Lanç. órfãos'),
('DASHBOARD_CACHE', 7, 'DSH_COB_ORFAO_COUNT', 'N', 10, 0, 'Cobr. órfãs'),
('DASHBOARD_CACHE', 8, 'DSH_RATEIO_INVALID_COUNT','N', 10, 0, 'Rateio inválido'),
('DASHBOARD_CACHE', 9, 'DSH_TIMING_COUNT', 'N', 10, 0, 'Timing'),
('DASHBOARD_CACHE',10, 'DSH_USUARIO_COUNT', 'N', 10, 0, 'Usuário'),
('DASHBOARD_CACHE',11, 'DSH_ATUALIZADO_EM', 'C', 19, 0, 'Atualizado em');
-- USR_LOGIN faltava: o browse de usuarios abria com uma coluna so.
-- USR_SENHA fica fora de proposito -- hash nao se mostra em tela.
INSERT INTO SX3 (X3_ARQUIVO, X3_ORDEM, X3_CAMPO, X3_TIPO, X3_TAMANHO, X3_DECIMAL, X3_TITULO) VALUES
('USR', 1, 'USR_LOGIN', 'C', 50, 0, 'Login');