forlogic-core 2.5.1 → 2.5.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/auth/services/TokenManager.d.ts +3 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1 -1
- package/docs/sql/import/00_infra.sql +210 -0
- package/docs/sql/import/validate_criteria.sql +209 -0
- package/docs/sql/import/validate_occurrences.sql +295 -0
- package/docs/sql/import/validate_occurrences_categories.sql +129 -105
- package/docs/sql/import/validate_occurrences_causes_classification.sql +112 -0
- package/docs/sql/import/validate_occurrences_types.sql +113 -0
- package/docs/sql/import/validate_risks.sql +112 -140
- package/docs/sql/import/validate_risks_categories.sql +104 -94
- package/docs/sql/import/validate_risks_groups.sql +98 -120
- package/docs/sql/import/validate_suppliers.sql +131 -52
- package/docs/sql/import/validate_suppliers_categories.sql +150 -0
- package/docs/sql/import/validate_supply_types.sql +76 -130
- package/package.json +1 -1
- package/docs/sql/import/validate_supplier_categories.sql +0 -173
|
@@ -1,32 +1,33 @@
|
|
|
1
|
+
-- =============================================================================
|
|
2
|
+
-- Importação: Riscos
|
|
3
|
+
-- Banco: qualiex_common (SQL Server)
|
|
4
|
+
-- Objetos: import.risks_staging, import.validate_risks, import.get_errors_risks
|
|
5
|
+
-- Destino: risks.risks
|
|
6
|
+
-- Aplicação no banco é MANUAL. Este arquivo é a fonte documentada.
|
|
7
|
+
-- =============================================================================
|
|
8
|
+
|
|
1
9
|
USE [qualiex_common]
|
|
2
10
|
GO
|
|
3
11
|
|
|
4
|
-
begin tran
|
|
5
|
-
|
|
6
12
|
IF EXISTS (SELECT * FROM sys.objects
|
|
7
13
|
WHERE object_id = OBJECT_ID(N'[import].[risks_staging]')
|
|
8
14
|
AND type IN (N'U'))
|
|
9
15
|
DROP TABLE [import].[risks_staging]
|
|
10
16
|
GO
|
|
11
17
|
|
|
12
|
-
SET ANSI_NULLS ON
|
|
13
|
-
GO
|
|
14
|
-
SET QUOTED_IDENTIFIER ON
|
|
15
|
-
GO
|
|
16
|
-
|
|
17
18
|
CREATE TABLE [import].[risks_staging](
|
|
18
19
|
[id_batch] [uniqueidentifier] NOT NULL,
|
|
19
20
|
[row_num] [int] NOT NULL,
|
|
20
|
-
[code] [nvarchar](10) NOT NULL,
|
|
21
|
-
[name] [nvarchar](200) NOT NULL,
|
|
22
|
-
[description] [nvarchar](max) NULL,
|
|
23
|
-
[group_name] [nvarchar](200) NOT NULL,
|
|
24
|
-
[id_responsible_user] [char](8) NOT NULL,
|
|
25
|
-
[place_name] [nvarchar](200) NULL,
|
|
26
|
-
[category_name] [nvarchar](200) NULL,
|
|
27
|
-
[is_active] [varchar](20) NULL,
|
|
28
|
-
[id_creation_user] [char](8) NOT NULL,
|
|
29
|
-
[id_company] [char](8) NOT NULL,
|
|
21
|
+
[code] [nvarchar](10) COLLATE Latin1_General_CS_AS NOT NULL,
|
|
22
|
+
[name] [nvarchar](200) COLLATE Latin1_General_CS_AS NOT NULL,
|
|
23
|
+
[description] [nvarchar](max) COLLATE Latin1_General_CS_AS NULL,
|
|
24
|
+
[group_name] [nvarchar](200) COLLATE Latin1_General_CS_AS NOT NULL,
|
|
25
|
+
[id_responsible_user] [char](8) COLLATE Latin1_General_CS_AS NOT NULL,
|
|
26
|
+
[place_name] [nvarchar](200) COLLATE Latin1_General_CS_AS NULL,
|
|
27
|
+
[category_name] [nvarchar](200) COLLATE Latin1_General_CS_AS NULL,
|
|
28
|
+
[is_active] [varchar](20) COLLATE Latin1_General_CS_AS NULL,
|
|
29
|
+
[id_creation_user] [char](8) COLLATE Latin1_General_CS_AS NOT NULL,
|
|
30
|
+
[id_company] [char](8) COLLATE Latin1_General_CS_AS NOT NULL,
|
|
30
31
|
CONSTRAINT [pk_risks_staging] PRIMARY KEY CLUSTERED
|
|
31
32
|
(
|
|
32
33
|
[id_batch] ASC,
|
|
@@ -37,6 +38,9 @@ CREATE TABLE [import].[risks_staging](
|
|
|
37
38
|
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
|
|
38
39
|
GO
|
|
39
40
|
|
|
41
|
+
USE [qualiex_common]
|
|
42
|
+
GO
|
|
43
|
+
|
|
40
44
|
CREATE OR ALTER PROCEDURE [import].[validate_risks]
|
|
41
45
|
@id_batch UNIQUEIDENTIFIER
|
|
42
46
|
AS
|
|
@@ -45,173 +49,153 @@ BEGIN
|
|
|
45
49
|
|
|
46
50
|
-- Validação 1: Código duplicado no arquivo
|
|
47
51
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
48
|
-
SELECT @id_batch,
|
|
52
|
+
SELECT @id_batch, sub.row_num, 'Código duplicado no arquivo'
|
|
49
53
|
FROM (
|
|
50
54
|
SELECT *, COUNT(*) OVER (PARTITION BY code) AS cnt
|
|
51
55
|
FROM import.risks_staging WITH (NOLOCK)
|
|
52
56
|
WHERE id_batch = @id_batch
|
|
53
57
|
AND NULLIF(RTRIM(LTRIM(code)), '') IS NOT NULL
|
|
54
|
-
)
|
|
55
|
-
WHERE
|
|
58
|
+
) sub
|
|
59
|
+
WHERE sub.cnt > 1;
|
|
56
60
|
|
|
57
61
|
-- Validação 2: Código já existente na produção
|
|
58
62
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
59
|
-
SELECT @id_batch,
|
|
60
|
-
FROM import.risks_staging
|
|
61
|
-
INNER JOIN risks.risks
|
|
62
|
-
ON
|
|
63
|
-
AND
|
|
64
|
-
AND
|
|
65
|
-
WHERE
|
|
63
|
+
SELECT @id_batch, rs.row_num, 'Código de risco já existe na base para esta unidade'
|
|
64
|
+
FROM import.risks_staging rs WITH (NOLOCK)
|
|
65
|
+
INNER JOIN risks.risks r WITH (NOLOCK)
|
|
66
|
+
ON r.code COLLATE Latin1_General_CS_AS = rs.code
|
|
67
|
+
AND r.id_company COLLATE Latin1_General_CS_AS = rs.id_company
|
|
68
|
+
AND r.removed = 0
|
|
69
|
+
WHERE rs.id_batch = @id_batch;
|
|
66
70
|
|
|
67
71
|
-- Validação 3: Nome duplicado no arquivo
|
|
68
72
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
69
|
-
SELECT @id_batch,
|
|
73
|
+
SELECT @id_batch, sub.row_num, 'Nome do risco duplicado no arquivo'
|
|
70
74
|
FROM (
|
|
71
75
|
SELECT *, COUNT(*) OVER (PARTITION BY name) AS cnt
|
|
72
76
|
FROM import.risks_staging WITH (NOLOCK)
|
|
73
77
|
WHERE id_batch = @id_batch
|
|
74
|
-
)
|
|
75
|
-
WHERE
|
|
78
|
+
) sub
|
|
79
|
+
WHERE sub.cnt > 1;
|
|
76
80
|
|
|
77
81
|
-- Validação 4: Nome já existente na produção
|
|
78
82
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
79
|
-
SELECT @id_batch,
|
|
80
|
-
FROM import.risks_staging
|
|
81
|
-
INNER JOIN risks.risks
|
|
82
|
-
ON
|
|
83
|
-
AND
|
|
84
|
-
AND
|
|
85
|
-
WHERE
|
|
83
|
+
SELECT @id_batch, rs.row_num, 'Nome do risco já existe na base para esta unidade'
|
|
84
|
+
FROM import.risks_staging rs WITH (NOLOCK)
|
|
85
|
+
INNER JOIN risks.risks r WITH (NOLOCK)
|
|
86
|
+
ON r.name COLLATE Latin1_General_CS_AS = rs.name
|
|
87
|
+
AND r.id_company COLLATE Latin1_General_CS_AS = rs.id_company
|
|
88
|
+
AND r.removed = 0
|
|
89
|
+
WHERE rs.id_batch = @id_batch;
|
|
86
90
|
|
|
87
91
|
-- Validação 5: Campos Obrigatórios Vazios
|
|
88
92
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
89
|
-
SELECT @id_batch,
|
|
90
|
-
FROM import.risks_staging
|
|
91
|
-
WHERE
|
|
93
|
+
SELECT @id_batch, rs.row_num, 'Código, Nome, Grupo e Responsável são obrigatórios'
|
|
94
|
+
FROM import.risks_staging rs WITH (NOLOCK)
|
|
95
|
+
WHERE rs.id_batch = @id_batch
|
|
92
96
|
AND (
|
|
93
|
-
NULLIF(RTRIM(LTRIM(
|
|
94
|
-
NULLIF(RTRIM(LTRIM(
|
|
95
|
-
NULLIF(RTRIM(LTRIM(
|
|
96
|
-
NULLIF(RTRIM(LTRIM(
|
|
97
|
+
NULLIF(RTRIM(LTRIM(rs.code)), '') IS NULL OR
|
|
98
|
+
NULLIF(RTRIM(LTRIM(rs.name)), '') IS NULL OR
|
|
99
|
+
NULLIF(RTRIM(LTRIM(rs.group_name)), '') IS NULL OR
|
|
100
|
+
NULLIF(RTRIM(LTRIM(rs.id_responsible_user)), '') IS NULL
|
|
97
101
|
);
|
|
98
102
|
|
|
99
103
|
-- Validação 6: Validação de Situação (Ativo / Inativo) com Regra Estrita
|
|
100
104
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
101
|
-
SELECT @id_batch,
|
|
102
|
-
FROM import.risks_staging
|
|
103
|
-
WHERE
|
|
104
|
-
AND ISNULL(
|
|
105
|
+
SELECT @id_batch, rs.row_num, 'Situação inválida (selecione Ativo ou Inativo na planilha)'
|
|
106
|
+
FROM import.risks_staging rs WITH (NOLOCK)
|
|
107
|
+
WHERE rs.id_batch = @id_batch
|
|
108
|
+
AND ISNULL(rs.is_active, '') NOT IN ('Ativo', 'Inativo');
|
|
105
109
|
|
|
106
110
|
-- Validação 7: Grupo não encontrado
|
|
107
111
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
108
|
-
SELECT @id_batch,
|
|
109
|
-
FROM import.risks_staging
|
|
112
|
+
SELECT @id_batch, rs.row_num, 'Grupo de risco não encontrado ou inativo'
|
|
113
|
+
FROM import.risks_staging rs WITH (NOLOCK)
|
|
110
114
|
LEFT JOIN risks.groups g WITH (NOLOCK)
|
|
111
|
-
ON g.name COLLATE Latin1_General_CS_AS =
|
|
112
|
-
AND g.id_company COLLATE Latin1_General_CS_AS =
|
|
115
|
+
ON g.name COLLATE Latin1_General_CS_AS = rs.group_name
|
|
116
|
+
AND g.id_company COLLATE Latin1_General_CS_AS = rs.id_company
|
|
113
117
|
AND g.removed = 0
|
|
114
|
-
WHERE
|
|
115
|
-
AND NULLIF(RTRIM(LTRIM(
|
|
118
|
+
WHERE rs.id_batch = @id_batch
|
|
119
|
+
AND NULLIF(RTRIM(LTRIM(rs.group_name)), '') IS NOT NULL
|
|
116
120
|
AND g.id IS NULL;
|
|
117
121
|
|
|
118
|
-
-- Validação 8: Responsável não encontrado
|
|
122
|
+
-- Validação 8: Responsável não encontrado ou sem acesso à unidade
|
|
119
123
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
120
|
-
SELECT @id_batch,
|
|
121
|
-
FROM import.risks_staging
|
|
124
|
+
SELECT @id_batch, rs.row_num, 'Usuário responsável não encontrado ou sem acesso à unidade'
|
|
125
|
+
FROM import.risks_staging rs WITH (NOLOCK)
|
|
122
126
|
LEFT JOIN dbo.users u WITH (NOLOCK)
|
|
123
|
-
ON u.id COLLATE Latin1_General_CS_AS =
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
WHERE
|
|
127
|
-
AND NULLIF(RTRIM(LTRIM(
|
|
128
|
-
AND u.id IS NULL;
|
|
127
|
+
ON u.id COLLATE Latin1_General_CS_AS = rs.id_responsible_user AND u.removed = 0
|
|
128
|
+
LEFT JOIN dbo.companies_users cu WITH (NOLOCK)
|
|
129
|
+
ON cu.id_user COLLATE Latin1_General_CS_AS = u.id AND cu.id_company COLLATE Latin1_General_CS_AS = rs.id_company AND cu.removed = 0
|
|
130
|
+
WHERE rs.id_batch = @id_batch
|
|
131
|
+
AND NULLIF(RTRIM(LTRIM(rs.id_responsible_user)), '') IS NOT NULL
|
|
132
|
+
AND (u.id IS NULL OR cu.id IS NULL);
|
|
129
133
|
|
|
130
134
|
-- Validação 9: Local (Place) não encontrado
|
|
131
135
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
132
|
-
SELECT @id_batch,
|
|
133
|
-
FROM import.risks_staging
|
|
136
|
+
SELECT @id_batch, rs.row_num, 'Local não encontrado ou inativo'
|
|
137
|
+
FROM import.risks_staging rs WITH (NOLOCK)
|
|
134
138
|
LEFT JOIN dbo.places p WITH (NOLOCK)
|
|
135
|
-
ON p.name COLLATE Latin1_General_CS_AS =
|
|
136
|
-
AND p.id_company COLLATE Latin1_General_CS_AS =
|
|
139
|
+
ON p.name COLLATE Latin1_General_CS_AS = rs.place_name
|
|
140
|
+
AND p.id_company COLLATE Latin1_General_CS_AS = rs.id_company
|
|
137
141
|
AND p.removed = 0
|
|
138
|
-
WHERE
|
|
139
|
-
AND NULLIF(RTRIM(LTRIM(
|
|
142
|
+
WHERE rs.id_batch = @id_batch
|
|
143
|
+
AND NULLIF(RTRIM(LTRIM(rs.place_name)), '') IS NOT NULL
|
|
140
144
|
AND p.id IS NULL;
|
|
141
145
|
|
|
142
146
|
-- Validação 10: Categoria não encontrada
|
|
143
147
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
144
|
-
SELECT @id_batch,
|
|
145
|
-
FROM import.risks_staging
|
|
146
|
-
LEFT JOIN risks.risks_categories
|
|
147
|
-
ON
|
|
148
|
-
AND
|
|
149
|
-
AND
|
|
150
|
-
WHERE
|
|
151
|
-
AND NULLIF(RTRIM(LTRIM(
|
|
152
|
-
AND
|
|
148
|
+
SELECT @id_batch, rs.row_num, 'Categoria não encontrada ou inativa'
|
|
149
|
+
FROM import.risks_staging rs WITH (NOLOCK)
|
|
150
|
+
LEFT JOIN risks.risks_categories rc WITH (NOLOCK)
|
|
151
|
+
ON rc.title COLLATE Latin1_General_CS_AS = rs.category_name
|
|
152
|
+
AND rc.id_company COLLATE Latin1_General_CS_AS = rs.id_company
|
|
153
|
+
AND rc.removed = 0
|
|
154
|
+
WHERE rs.id_batch = @id_batch
|
|
155
|
+
AND NULLIF(RTRIM(LTRIM(rs.category_name)), '') IS NOT NULL
|
|
156
|
+
AND rc.id IS NULL;
|
|
153
157
|
|
|
154
158
|
-- INSERÇÃO DOS DADOS VÁLIDOS
|
|
155
159
|
INSERT INTO risks.risks
|
|
156
160
|
(
|
|
157
|
-
id_company,
|
|
158
|
-
|
|
159
|
-
name,
|
|
160
|
-
description,
|
|
161
|
-
description_text,
|
|
162
|
-
id_group,
|
|
163
|
-
id_place,
|
|
164
|
-
id_category,
|
|
165
|
-
id_creation_user,
|
|
166
|
-
id_responsible_user,
|
|
167
|
-
creation_date,
|
|
168
|
-
last_modified,
|
|
169
|
-
is_active,
|
|
170
|
-
removed
|
|
161
|
+
id_company, code, name, description, description_text, id_group, id_place, id_category,
|
|
162
|
+
id_creation_user, id_responsible_user, creation_date, last_modified, is_active, removed
|
|
171
163
|
)
|
|
172
164
|
SELECT
|
|
173
|
-
|
|
174
|
-
LTRIM(RTRIM(
|
|
175
|
-
|
|
176
|
-
NULLIF(
|
|
177
|
-
NULLIF(
|
|
165
|
+
rs.id_company,
|
|
166
|
+
LTRIM(RTRIM(rs.code)) AS code,
|
|
167
|
+
rs.name,
|
|
168
|
+
NULLIF(rs.description, '') AS description,
|
|
169
|
+
NULLIF(rs.description, '') AS description_text,
|
|
178
170
|
g.id AS id_group,
|
|
179
171
|
p.id AS id_place,
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
172
|
+
rc.id AS id_category,
|
|
173
|
+
rs.id_creation_user,
|
|
174
|
+
rs.id_responsible_user,
|
|
183
175
|
SYSDATETIMEOFFSET() AS creation_date,
|
|
184
176
|
SYSDATETIMEOFFSET() AS last_modified,
|
|
185
|
-
CASE WHEN
|
|
177
|
+
CASE WHEN rs.is_active = 'Inativo' THEN 0 ELSE 1 END AS is_active,
|
|
186
178
|
0 AS removed
|
|
187
|
-
FROM import.risks_staging
|
|
179
|
+
FROM import.risks_staging rs WITH (NOLOCK)
|
|
188
180
|
LEFT JOIN risks.groups g WITH (NOLOCK)
|
|
189
|
-
ON g.name COLLATE Latin1_General_CS_AS =
|
|
190
|
-
AND g.id_company COLLATE Latin1_General_CS_AS = s.id_company COLLATE Latin1_General_CS_AS
|
|
191
|
-
AND g.removed = 0
|
|
192
|
-
LEFT JOIN dbo.users u WITH (NOLOCK)
|
|
193
|
-
ON u.id COLLATE Latin1_General_CS_AS = s.id_responsible_user COLLATE Latin1_General_CS_AS
|
|
194
|
-
AND u.id_company COLLATE Latin1_General_CS_AS = s.id_company COLLATE Latin1_General_CS_AS
|
|
195
|
-
AND u.removed = 0
|
|
181
|
+
ON g.name COLLATE Latin1_General_CS_AS = rs.group_name AND g.id_company COLLATE Latin1_General_CS_AS = rs.id_company AND g.removed = 0
|
|
196
182
|
LEFT JOIN dbo.places p WITH (NOLOCK)
|
|
197
|
-
ON p.name COLLATE Latin1_General_CS_AS =
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
ON c.title COLLATE Latin1_General_CS_AS = s.category_name COLLATE Latin1_General_CS_AS
|
|
202
|
-
AND c.id_company COLLATE Latin1_General_CS_AS = s.id_company COLLATE Latin1_General_CS_AS
|
|
203
|
-
AND c.removed = 0
|
|
204
|
-
WHERE s.id_batch = @id_batch
|
|
183
|
+
ON p.name COLLATE Latin1_General_CS_AS = rs.place_name AND p.id_company COLLATE Latin1_General_CS_AS = rs.id_company AND p.removed = 0
|
|
184
|
+
LEFT JOIN risks.risks_categories rc WITH (NOLOCK)
|
|
185
|
+
ON rc.title COLLATE Latin1_General_CS_AS = rs.category_name AND rc.id_company COLLATE Latin1_General_CS_AS = rs.id_company AND rc.removed = 0
|
|
186
|
+
WHERE rs.id_batch = @id_batch
|
|
205
187
|
AND NOT EXISTS (
|
|
206
188
|
SELECT 1
|
|
207
189
|
FROM import.errors e
|
|
208
|
-
WHERE e.id_batch =
|
|
209
|
-
AND e.row_num =
|
|
190
|
+
WHERE e.id_batch = rs.id_batch
|
|
191
|
+
AND e.row_num = rs.row_num
|
|
210
192
|
);
|
|
211
|
-
|
|
212
193
|
END
|
|
213
194
|
GO
|
|
214
195
|
|
|
196
|
+
USE [qualiex_common]
|
|
197
|
+
GO
|
|
198
|
+
|
|
215
199
|
CREATE OR ALTER PROCEDURE [import].[get_errors_risks]
|
|
216
200
|
(
|
|
217
201
|
@id_batch UNIQUEIDENTIFIER
|
|
@@ -221,29 +205,17 @@ BEGIN
|
|
|
221
205
|
SET NOCOUNT ON;
|
|
222
206
|
|
|
223
207
|
SELECT
|
|
224
|
-
STRING_AGG(
|
|
225
|
-
CAST(e.error_msg AS NVARCHAR(MAX)),
|
|
226
|
-
'; '
|
|
227
|
-
) WITHIN GROUP (ORDER BY e.error_msg) AS error_msg,
|
|
228
|
-
|
|
208
|
+
STRING_AGG(CAST(e.error_msg AS NVARCHAR(MAX)), '; ') WITHIN GROUP (ORDER BY e.error_msg) AS error_msg,
|
|
229
209
|
e.row_num,
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
210
|
+
rs.code,
|
|
211
|
+
rs.name,
|
|
212
|
+
rs.id_creation_user
|
|
234
213
|
FROM import.errors e WITH (NOLOCK)
|
|
235
|
-
JOIN import.risks_staging
|
|
236
|
-
ON
|
|
237
|
-
AND
|
|
214
|
+
JOIN import.risks_staging rs WITH (NOLOCK)
|
|
215
|
+
ON rs.row_num = e.row_num
|
|
216
|
+
AND rs.id_batch = e.id_batch
|
|
238
217
|
WHERE e.id_batch = @id_batch
|
|
239
|
-
GROUP BY
|
|
240
|
-
e.row_num,
|
|
241
|
-
s.code,
|
|
242
|
-
s.name,
|
|
243
|
-
s.id_creation_user
|
|
218
|
+
GROUP BY e.row_num, rs.code, rs.name, rs.id_creation_user
|
|
244
219
|
ORDER BY e.row_num;
|
|
245
220
|
END
|
|
246
221
|
GO
|
|
247
|
-
|
|
248
|
-
-- commit
|
|
249
|
-
-- rollback
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
+
-- =============================================================================
|
|
2
|
+
-- Importação: Riscos | Categorias
|
|
3
|
+
-- Banco: qualiex_common (SQL Server)
|
|
4
|
+
-- Objetos: import.risks_categories_staging, import.validate_risks_categories,
|
|
5
|
+
-- import.get_errors_risks_categories
|
|
6
|
+
-- Destino: risks.risks_categories
|
|
7
|
+
-- Aplicação no banco é MANUAL. Este arquivo é a fonte documentada.
|
|
8
|
+
-- =============================================================================
|
|
9
|
+
|
|
1
10
|
USE [qualiex_common]
|
|
2
11
|
GO
|
|
3
12
|
|
|
4
|
-
begin tran
|
|
5
|
-
|
|
6
13
|
IF EXISTS (SELECT * FROM sys.objects
|
|
7
14
|
WHERE object_id = OBJECT_ID(N'[import].[risks_categories_staging]')
|
|
8
15
|
AND type IN (N'U'))
|
|
@@ -12,17 +19,17 @@ GO
|
|
|
12
19
|
CREATE TABLE [import].[risks_categories_staging](
|
|
13
20
|
[id_batch] [uniqueidentifier] NOT NULL,
|
|
14
21
|
[row_num] [int] NOT NULL,
|
|
15
|
-
[title] [varchar](200) NOT NULL,
|
|
16
|
-
[icon] [varchar](30) NULL,
|
|
17
|
-
[color] [nvarchar](20) NULL,
|
|
18
|
-
[description] [nvarchar](max) NULL,
|
|
19
|
-
[is_active] [varchar](20) NULL,
|
|
20
|
-
[has_risks_reduction] [varchar](20) NULL,
|
|
21
|
-
[periodicity_value] [varchar](20) NULL,
|
|
22
|
+
[title] [varchar](200) COLLATE Latin1_General_CS_AS NOT NULL,
|
|
23
|
+
[icon] [varchar](30) COLLATE Latin1_General_CS_AS NULL,
|
|
24
|
+
[color] [nvarchar](20) COLLATE Latin1_General_CS_AS NULL,
|
|
25
|
+
[description] [nvarchar](max) COLLATE Latin1_General_CS_AS NULL,
|
|
26
|
+
[is_active] [varchar](20) COLLATE Latin1_General_CS_AS NULL,
|
|
27
|
+
[has_risks_reduction] [varchar](20) COLLATE Latin1_General_CS_AS NULL,
|
|
28
|
+
[periodicity_value] [varchar](20) COLLATE Latin1_General_CS_AS NULL,
|
|
22
29
|
[id_category_periodicity_type] [int] NULL,
|
|
23
30
|
[id_category_periodicity_unit_type] [int] NULL,
|
|
24
|
-
[id_creation_user] [char](8) NOT NULL,
|
|
25
|
-
[id_company] [char](8) NOT NULL,
|
|
31
|
+
[id_creation_user] [char](8) COLLATE Latin1_General_CS_AS NOT NULL,
|
|
32
|
+
[id_company] [char](8) COLLATE Latin1_General_CS_AS NOT NULL,
|
|
26
33
|
CONSTRAINT [pk_risks_categories_staging] PRIMARY KEY CLUSTERED
|
|
27
34
|
(
|
|
28
35
|
[id_batch] ASC,
|
|
@@ -33,6 +40,9 @@ CREATE TABLE [import].[risks_categories_staging](
|
|
|
33
40
|
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
|
|
34
41
|
GO
|
|
35
42
|
|
|
43
|
+
USE [qualiex_common]
|
|
44
|
+
GO
|
|
45
|
+
|
|
36
46
|
CREATE OR ALTER PROCEDURE [import].[validate_risks_categories]
|
|
37
47
|
@id_batch UNIQUEIDENTIFIER
|
|
38
48
|
AS
|
|
@@ -41,81 +51,81 @@ BEGIN
|
|
|
41
51
|
|
|
42
52
|
-- Validação 1: Título duplicado no arquivo
|
|
43
53
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
44
|
-
SELECT @id_batch,
|
|
54
|
+
SELECT @id_batch, sub.row_num, 'Título duplicado no arquivo'
|
|
45
55
|
FROM (
|
|
46
56
|
SELECT *, COUNT(*) OVER (PARTITION BY title) AS cnt
|
|
47
57
|
FROM import.risks_categories_staging WITH (NOLOCK)
|
|
48
58
|
WHERE id_batch = @id_batch
|
|
49
|
-
)
|
|
50
|
-
WHERE
|
|
59
|
+
) sub
|
|
60
|
+
WHERE sub.cnt > 1;
|
|
51
61
|
|
|
52
62
|
-- Validação 2: Título já existente na produção (mesma unidade)
|
|
53
63
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
54
|
-
SELECT @id_batch,
|
|
55
|
-
FROM import.risks_categories_staging
|
|
56
|
-
INNER JOIN risks.risks_categories
|
|
57
|
-
ON
|
|
58
|
-
AND
|
|
59
|
-
AND
|
|
60
|
-
WHERE
|
|
64
|
+
SELECT @id_batch, rcs.row_num, 'Categoria já existe na base para esta unidade'
|
|
65
|
+
FROM import.risks_categories_staging rcs WITH (NOLOCK)
|
|
66
|
+
INNER JOIN risks.risks_categories rc WITH (NOLOCK)
|
|
67
|
+
ON rc.title COLLATE Latin1_General_CS_AS = rcs.title
|
|
68
|
+
AND rc.id_company COLLATE Latin1_General_CS_AS = rcs.id_company
|
|
69
|
+
AND rc.removed = 0
|
|
70
|
+
WHERE rcs.id_batch = @id_batch;
|
|
61
71
|
|
|
62
72
|
-- Validação 3: Situação (is_active) inválida - Validação Estrita
|
|
63
73
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
64
|
-
SELECT @id_batch,
|
|
65
|
-
FROM import.risks_categories_staging
|
|
66
|
-
WHERE
|
|
67
|
-
AND ISNULL(
|
|
74
|
+
SELECT @id_batch, rcs.row_num, 'Situação inválida (selecione Ativo ou Inativo na planilha)'
|
|
75
|
+
FROM import.risks_categories_staging rcs WITH (NOLOCK)
|
|
76
|
+
WHERE rcs.id_batch = @id_batch
|
|
77
|
+
AND ISNULL(rcs.is_active, '') NOT IN ('Ativo', 'Inativo', '');
|
|
68
78
|
|
|
69
79
|
-- Validação 4: Redução de riscos (has_risks_reduction) inválida - Validação Estrita
|
|
70
80
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
71
|
-
SELECT @id_batch,
|
|
72
|
-
FROM import.risks_categories_staging
|
|
73
|
-
WHERE
|
|
74
|
-
AND
|
|
75
|
-
AND
|
|
81
|
+
SELECT @id_batch, rcs.row_num, 'Valor inválido para redução de riscos (selecione Sim ou Não na planilha)'
|
|
82
|
+
FROM import.risks_categories_staging rcs WITH (NOLOCK)
|
|
83
|
+
WHERE rcs.id_batch = @id_batch
|
|
84
|
+
AND rcs.has_risks_reduction IS NOT NULL
|
|
85
|
+
AND rcs.has_risks_reduction NOT IN ('Sim', 'Não');
|
|
76
86
|
|
|
77
87
|
-- Validação 5: Valor de periodicidade (periodicity_value) deve ser um número inteiro
|
|
78
88
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
79
|
-
SELECT @id_batch,
|
|
80
|
-
FROM import.risks_categories_staging
|
|
81
|
-
WHERE
|
|
82
|
-
AND
|
|
83
|
-
AND TRY_CAST(
|
|
89
|
+
SELECT @id_batch, rcs.row_num, 'O valor da periodicidade deve ser um número inteiro válido'
|
|
90
|
+
FROM import.risks_categories_staging rcs WITH (NOLOCK)
|
|
91
|
+
WHERE rcs.id_batch = @id_batch
|
|
92
|
+
AND rcs.periodicity_value IS NOT NULL
|
|
93
|
+
AND TRY_CAST(rcs.periodicity_value AS INT) IS NULL;
|
|
84
94
|
|
|
85
95
|
-- Validação 6: Tipo de periodicidade (id_category_periodicity_type) obrigatório e válido
|
|
86
96
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
87
|
-
SELECT @id_batch,
|
|
88
|
-
FROM import.risks_categories_staging
|
|
89
|
-
WHERE
|
|
90
|
-
AND (
|
|
91
|
-
OR
|
|
97
|
+
SELECT @id_batch, rcs.row_num, 'Tipo de periodicidade é obrigatório (Sem periodicidade, Padrão ou Definido pela análise anterior)'
|
|
98
|
+
FROM import.risks_categories_staging rcs WITH (NOLOCK)
|
|
99
|
+
WHERE rcs.id_batch = @id_batch
|
|
100
|
+
AND (rcs.id_category_periodicity_type IS NULL
|
|
101
|
+
OR rcs.id_category_periodicity_type NOT IN (1, 2, 3));
|
|
92
102
|
|
|
93
103
|
-- Validação 7: Se Tipo = 2 (Padrão), Valor da periodicidade é obrigatório e > 0
|
|
94
104
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
95
|
-
SELECT @id_batch,
|
|
96
|
-
FROM import.risks_categories_staging
|
|
97
|
-
WHERE
|
|
98
|
-
AND
|
|
99
|
-
AND (
|
|
100
|
-
OR TRY_CAST(
|
|
101
|
-
OR TRY_CAST(
|
|
105
|
+
SELECT @id_batch, rcs.row_num, 'Valor da periodicidade é obrigatório e deve ser maior que zero quando o Tipo é "Padrão"'
|
|
106
|
+
FROM import.risks_categories_staging rcs WITH (NOLOCK)
|
|
107
|
+
WHERE rcs.id_batch = @id_batch
|
|
108
|
+
AND rcs.id_category_periodicity_type = 2
|
|
109
|
+
AND (rcs.periodicity_value IS NULL
|
|
110
|
+
OR TRY_CAST(rcs.periodicity_value AS INT) IS NULL
|
|
111
|
+
OR TRY_CAST(rcs.periodicity_value AS INT) <= 0);
|
|
102
112
|
|
|
103
113
|
-- Validação 8: Se Tipo = 2 (Padrão), Unidade de tempo é obrigatória
|
|
104
114
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
105
|
-
SELECT @id_batch,
|
|
106
|
-
FROM import.risks_categories_staging
|
|
107
|
-
WHERE
|
|
108
|
-
AND
|
|
109
|
-
AND (
|
|
110
|
-
OR
|
|
115
|
+
SELECT @id_batch, rcs.row_num, 'Unidade de tempo é obrigatória quando o Tipo é "Padrão" (Dia, Semana, Mês ou Ano)'
|
|
116
|
+
FROM import.risks_categories_staging rcs WITH (NOLOCK)
|
|
117
|
+
WHERE rcs.id_batch = @id_batch
|
|
118
|
+
AND rcs.id_category_periodicity_type = 2
|
|
119
|
+
AND (rcs.id_category_periodicity_unit_type IS NULL
|
|
120
|
+
OR rcs.id_category_periodicity_unit_type NOT IN (1, 2, 3, 4));
|
|
111
121
|
|
|
112
122
|
-- Validação 9: Unidade de tempo, se preenchida, deve estar no intervalo 1..4
|
|
113
123
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
114
|
-
SELECT @id_batch,
|
|
115
|
-
FROM import.risks_categories_staging
|
|
116
|
-
WHERE
|
|
117
|
-
AND
|
|
118
|
-
AND
|
|
124
|
+
SELECT @id_batch, rcs.row_num, 'Unidade de tempo inválida (selecione Dia, Semana, Mês ou Ano na planilha)'
|
|
125
|
+
FROM import.risks_categories_staging rcs WITH (NOLOCK)
|
|
126
|
+
WHERE rcs.id_batch = @id_batch
|
|
127
|
+
AND rcs.id_category_periodicity_unit_type IS NOT NULL
|
|
128
|
+
AND rcs.id_category_periodicity_unit_type NOT IN (1, 2, 3, 4);
|
|
119
129
|
|
|
120
130
|
|
|
121
131
|
-- INSERÇÃO DOS DADOS VÁLIDOS
|
|
@@ -139,53 +149,56 @@ BEGIN
|
|
|
139
149
|
removed
|
|
140
150
|
)
|
|
141
151
|
SELECT
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
NULLIF(
|
|
145
|
-
COALESCE(NULLIF(
|
|
152
|
+
rcs.id_company,
|
|
153
|
+
rcs.title,
|
|
154
|
+
NULLIF(rcs.icon, '') AS icon,
|
|
155
|
+
COALESCE(NULLIF(rcs.color, ''), '#000000ff') AS color,
|
|
146
156
|
|
|
147
157
|
CASE
|
|
148
|
-
WHEN
|
|
158
|
+
WHEN rcs.is_active = 'Inativo' THEN 0
|
|
149
159
|
ELSE 1
|
|
150
|
-
END
|
|
160
|
+
END AS is_active,
|
|
151
161
|
|
|
152
|
-
NULLIF(
|
|
153
|
-
NULLIF(
|
|
162
|
+
NULLIF(rcs.description, '') AS description,
|
|
163
|
+
NULLIF(rcs.description, '') AS description_text,
|
|
154
164
|
|
|
155
165
|
CASE
|
|
156
|
-
WHEN
|
|
157
|
-
WHEN
|
|
166
|
+
WHEN rcs.has_risks_reduction = 'Sim' THEN 1
|
|
167
|
+
WHEN rcs.has_risks_reduction IS NOT NULL THEN 0
|
|
158
168
|
ELSE NULL
|
|
159
|
-
END
|
|
169
|
+
END AS has_risks_reduction,
|
|
160
170
|
|
|
161
171
|
CASE
|
|
162
|
-
WHEN
|
|
172
|
+
WHEN rcs.id_category_periodicity_type = 2 THEN TRY_CAST(rcs.periodicity_value AS INT)
|
|
163
173
|
ELSE NULL
|
|
164
|
-
END
|
|
174
|
+
END AS periodicity_value,
|
|
165
175
|
|
|
166
|
-
|
|
176
|
+
rcs.id_category_periodicity_type,
|
|
167
177
|
CASE
|
|
168
|
-
WHEN
|
|
178
|
+
WHEN rcs.id_category_periodicity_type = 2 THEN rcs.id_category_periodicity_unit_type
|
|
169
179
|
ELSE NULL
|
|
170
|
-
END
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
SYSDATETIMEOFFSET()
|
|
175
|
-
SYSDATETIMEOFFSET()
|
|
176
|
-
0
|
|
177
|
-
FROM import.risks_categories_staging
|
|
178
|
-
WHERE
|
|
180
|
+
END AS id_category_periodicity_unit_type,
|
|
181
|
+
|
|
182
|
+
rcs.id_creation_user,
|
|
183
|
+
rcs.id_creation_user AS id_last_modified_user,
|
|
184
|
+
SYSDATETIMEOFFSET() AS creation_date,
|
|
185
|
+
SYSDATETIMEOFFSET() AS last_modified,
|
|
186
|
+
0 AS removed
|
|
187
|
+
FROM import.risks_categories_staging rcs WITH (NOLOCK)
|
|
188
|
+
WHERE rcs.id_batch = @id_batch
|
|
179
189
|
AND NOT EXISTS (
|
|
180
190
|
SELECT 1
|
|
181
191
|
FROM import.errors e
|
|
182
|
-
WHERE e.id_batch =
|
|
183
|
-
AND e.row_num =
|
|
192
|
+
WHERE e.id_batch = rcs.id_batch
|
|
193
|
+
AND e.row_num = rcs.row_num
|
|
184
194
|
);
|
|
185
195
|
|
|
186
196
|
END
|
|
187
197
|
GO
|
|
188
198
|
|
|
199
|
+
USE [qualiex_common]
|
|
200
|
+
GO
|
|
201
|
+
|
|
189
202
|
CREATE OR ALTER PROCEDURE [import].[get_errors_risks_categories]
|
|
190
203
|
(
|
|
191
204
|
@id_batch UNIQUEIDENTIFIER
|
|
@@ -201,21 +214,18 @@ BEGIN
|
|
|
201
214
|
) WITHIN GROUP (ORDER BY e.error_msg) AS error_msg,
|
|
202
215
|
|
|
203
216
|
e.row_num,
|
|
204
|
-
|
|
205
|
-
|
|
217
|
+
rcs.title,
|
|
218
|
+
rcs.id_creation_user
|
|
206
219
|
|
|
207
220
|
FROM import.errors e WITH (NOLOCK)
|
|
208
|
-
JOIN import.risks_categories_staging
|
|
209
|
-
ON
|
|
210
|
-
AND
|
|
221
|
+
JOIN import.risks_categories_staging rcs WITH (NOLOCK)
|
|
222
|
+
ON rcs.row_num = e.row_num
|
|
223
|
+
AND rcs.id_batch = e.id_batch
|
|
211
224
|
WHERE e.id_batch = @id_batch
|
|
212
225
|
GROUP BY
|
|
213
226
|
e.row_num,
|
|
214
|
-
|
|
215
|
-
|
|
227
|
+
rcs.title,
|
|
228
|
+
rcs.id_creation_user
|
|
216
229
|
ORDER BY e.row_num;
|
|
217
230
|
END
|
|
218
231
|
GO
|
|
219
|
-
|
|
220
|
-
-- commit
|
|
221
|
-
-- rollback
|