forlogic-core 2.4.13 → 2.4.14
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 +4 -0
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1 -1
- package/dist/types.d.ts +1 -0
- package/docs/sql/import/validate_occurrences_categories.sql +47 -21
- package/docs/sql/import/validate_risks.sql +24 -11
- package/docs/sql/import/validate_risks_groups.sql +34 -18
- package/package.json +1 -1
package/dist/types.d.ts
CHANGED
|
@@ -24,13 +24,9 @@ CREATE TABLE [import].[occurrences_categories_staging](
|
|
|
24
24
|
[active_cause_analysis] [varchar](10) NULL,
|
|
25
25
|
[active_effectiveness_check] [varchar](10) NULL,
|
|
26
26
|
[active_standardization] [varchar](10) NULL,
|
|
27
|
-
[aprove_cause_analysis] [varchar](10) NULL,
|
|
28
|
-
[aprove_action_plan_elaboration] [varchar](10) NULL,
|
|
29
|
-
[aprove_action_plan_execution] [varchar](10) NULL,
|
|
30
|
-
[aprove_effectiveness_check] [varchar](10) NULL,
|
|
31
|
-
[aprove_standardization] [varchar](10) NULL,
|
|
32
27
|
[aprove_evaluation] [varchar](10) NULL,
|
|
33
28
|
[all_types_associated] [varchar](10) NULL,
|
|
29
|
+
[id_rule_prioritization] [char](8) NULL,
|
|
34
30
|
[id_company] [char](8) NOT NULL,
|
|
35
31
|
CONSTRAINT [pk_occurrences_categories_staging] PRIMARY KEY CLUSTERED
|
|
36
32
|
(
|
|
@@ -82,11 +78,6 @@ BEGIN
|
|
|
82
78
|
(s.active_cause_analysis IS NOT NULL AND s.active_cause_analysis COLLATE Latin1_General_CS_AS NOT IN ('Sim','Não'))
|
|
83
79
|
OR (s.active_effectiveness_check IS NOT NULL AND s.active_effectiveness_check COLLATE Latin1_General_CS_AS NOT IN ('Sim','Não'))
|
|
84
80
|
OR (s.active_standardization IS NOT NULL AND s.active_standardization COLLATE Latin1_General_CS_AS NOT IN ('Sim','Não'))
|
|
85
|
-
OR (s.aprove_cause_analysis IS NOT NULL AND s.aprove_cause_analysis COLLATE Latin1_General_CS_AS NOT IN ('Sim','Não'))
|
|
86
|
-
OR (s.aprove_action_plan_elaboration IS NOT NULL AND s.aprove_action_plan_elaboration COLLATE Latin1_General_CS_AS NOT IN ('Sim','Não'))
|
|
87
|
-
OR (s.aprove_action_plan_execution IS NOT NULL AND s.aprove_action_plan_execution COLLATE Latin1_General_CS_AS NOT IN ('Sim','Não'))
|
|
88
|
-
OR (s.aprove_effectiveness_check IS NOT NULL AND s.aprove_effectiveness_check COLLATE Latin1_General_CS_AS NOT IN ('Sim','Não'))
|
|
89
|
-
OR (s.aprove_standardization IS NOT NULL AND s.aprove_standardization COLLATE Latin1_General_CS_AS NOT IN ('Sim','Não'))
|
|
90
81
|
OR (s.aprove_evaluation IS NOT NULL AND s.aprove_evaluation COLLATE Latin1_General_CS_AS NOT IN ('Sim','Não'))
|
|
91
82
|
OR (s.all_types_associated IS NOT NULL AND s.all_types_associated COLLATE Latin1_General_CS_AS NOT IN ('Sim','Não'))
|
|
92
83
|
);
|
|
@@ -105,6 +96,43 @@ BEGIN
|
|
|
105
96
|
OR (s.days_evaluation IS NOT NULL AND TRY_CAST(s.days_evaluation AS INT) IS NULL)
|
|
106
97
|
);
|
|
107
98
|
|
|
99
|
+
-- Validação 6: Prazo da Análise de causa é obrigatório quando a etapa está ativa
|
|
100
|
+
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
101
|
+
SELECT @id_batch, s.row_num, 'Prazo de Análise de causa é obrigatório quando a etapa está ativa'
|
|
102
|
+
FROM import.occurrences_categories_staging s WITH (NOLOCK)
|
|
103
|
+
WHERE s.id_batch = @id_batch
|
|
104
|
+
AND s.active_cause_analysis COLLATE Latin1_General_CS_AS = 'Sim'
|
|
105
|
+
AND (s.days_causes_analysis IS NULL OR LTRIM(RTRIM(s.days_causes_analysis)) = '');
|
|
106
|
+
|
|
107
|
+
-- Validação 7: Prazo da Verificação de eficácia é obrigatório quando a etapa está ativa
|
|
108
|
+
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
109
|
+
SELECT @id_batch, s.row_num, 'Prazo de Verificação de eficácia é obrigatório quando a etapa está ativa'
|
|
110
|
+
FROM import.occurrences_categories_staging s WITH (NOLOCK)
|
|
111
|
+
WHERE s.id_batch = @id_batch
|
|
112
|
+
AND s.active_effectiveness_check COLLATE Latin1_General_CS_AS = 'Sim'
|
|
113
|
+
AND (s.days_effectiveness_check IS NULL OR LTRIM(RTRIM(s.days_effectiveness_check)) = '');
|
|
114
|
+
|
|
115
|
+
-- Validação 8: Prazo da Padronização/Divulgação é obrigatório quando a etapa está ativa
|
|
116
|
+
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
117
|
+
SELECT @id_batch, s.row_num, 'Prazo de Padronização/Divulgação é obrigatório quando a etapa está ativa'
|
|
118
|
+
FROM import.occurrences_categories_staging s WITH (NOLOCK)
|
|
119
|
+
WHERE s.id_batch = @id_batch
|
|
120
|
+
AND s.active_standardization COLLATE Latin1_General_CS_AS = 'Sim'
|
|
121
|
+
AND (s.days_standardization IS NULL OR LTRIM(RTRIM(s.days_standardization)) = '');
|
|
122
|
+
|
|
123
|
+
-- Validação 9: Regra de priorização informada deve existir
|
|
124
|
+
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
125
|
+
SELECT @id_batch, s.row_num, 'Regra de priorização não encontrada'
|
|
126
|
+
FROM import.occurrences_categories_staging s WITH (NOLOCK)
|
|
127
|
+
WHERE s.id_batch = @id_batch
|
|
128
|
+
AND s.id_rule_prioritization IS NOT NULL
|
|
129
|
+
AND LTRIM(RTRIM(s.id_rule_prioritization)) <> ''
|
|
130
|
+
AND NOT EXISTS (
|
|
131
|
+
SELECT 1 FROM occurrences.rules_prioritization rp WITH (NOLOCK)
|
|
132
|
+
WHERE rp.id = s.id_rule_prioritization COLLATE Latin1_General_CS_AS
|
|
133
|
+
AND rp.id_company = s.id_company COLLATE Latin1_General_CS_AS
|
|
134
|
+
);
|
|
135
|
+
|
|
108
136
|
-- INSERÇÃO DOS DADOS VÁLIDOS
|
|
109
137
|
INSERT INTO occurrences.categories
|
|
110
138
|
(
|
|
@@ -112,8 +140,7 @@ BEGIN
|
|
|
112
140
|
days_causes_analysis, days_action_plan_elaboration, days_action_plan_execution,
|
|
113
141
|
days_effectiveness_check, days_standardization, days_evaluation,
|
|
114
142
|
active_cause_analysis, active_effectiveness_check, active_standardization,
|
|
115
|
-
|
|
116
|
-
aprove_effectiveness_check, aprove_standardization, aprove_evaluation, all_types_associated
|
|
143
|
+
aprove_evaluation, all_types_associated, id_rule_prioritization
|
|
117
144
|
)
|
|
118
145
|
SELECT
|
|
119
146
|
s.id_company,
|
|
@@ -125,22 +152,21 @@ BEGIN
|
|
|
125
152
|
SYSDATETIMEOFFSET() AS creation_date,
|
|
126
153
|
SYSDATETIMEOFFSET() AS last_modified,
|
|
127
154
|
0 AS removed,
|
|
128
|
-
|
|
155
|
+
CASE WHEN s.active_cause_analysis COLLATE Latin1_General_CS_AS = 'Sim'
|
|
156
|
+
THEN TRY_CAST(s.days_causes_analysis AS INT) ELSE NULL END,
|
|
129
157
|
ISNULL(TRY_CAST(s.days_action_plan_elaboration AS INT), 0),
|
|
130
158
|
ISNULL(TRY_CAST(s.days_action_plan_execution AS INT), 0),
|
|
131
|
-
|
|
132
|
-
|
|
159
|
+
CASE WHEN s.active_effectiveness_check COLLATE Latin1_General_CS_AS = 'Sim'
|
|
160
|
+
THEN TRY_CAST(s.days_effectiveness_check AS INT) ELSE NULL END,
|
|
161
|
+
CASE WHEN s.active_standardization COLLATE Latin1_General_CS_AS = 'Sim'
|
|
162
|
+
THEN TRY_CAST(s.days_standardization AS INT) ELSE NULL END,
|
|
133
163
|
TRY_CAST(s.days_evaluation AS INT),
|
|
134
164
|
CASE WHEN s.active_cause_analysis COLLATE Latin1_General_CS_AS = 'Sim' THEN 1 ELSE 0 END,
|
|
135
165
|
CASE WHEN s.active_effectiveness_check COLLATE Latin1_General_CS_AS = 'Sim' THEN 1 ELSE 0 END,
|
|
136
166
|
CASE WHEN s.active_standardization COLLATE Latin1_General_CS_AS = 'Sim' THEN 1 ELSE 0 END,
|
|
137
|
-
CASE WHEN s.aprove_cause_analysis COLLATE Latin1_General_CS_AS = 'Sim' THEN 1 ELSE 0 END,
|
|
138
|
-
CASE WHEN s.aprove_action_plan_elaboration COLLATE Latin1_General_CS_AS = 'Sim' THEN 1 ELSE 0 END,
|
|
139
|
-
CASE WHEN s.aprove_action_plan_execution COLLATE Latin1_General_CS_AS = 'Sim' THEN 1 ELSE 0 END,
|
|
140
|
-
CASE WHEN s.aprove_effectiveness_check COLLATE Latin1_General_CS_AS = 'Sim' THEN 1 ELSE 0 END,
|
|
141
|
-
CASE WHEN s.aprove_standardization COLLATE Latin1_General_CS_AS = 'Sim' THEN 1 ELSE 0 END,
|
|
142
167
|
CASE WHEN s.aprove_evaluation COLLATE Latin1_General_CS_AS = 'Sim' THEN 1 ELSE 0 END,
|
|
143
|
-
CASE WHEN s.all_types_associated COLLATE Latin1_General_CS_AS = 'Sim' THEN 1 ELSE 0 END
|
|
168
|
+
CASE WHEN s.all_types_associated COLLATE Latin1_General_CS_AS = 'Sim' THEN 1 ELSE 0 END,
|
|
169
|
+
NULLIF(LTRIM(RTRIM(s.id_rule_prioritization)), '')
|
|
144
170
|
FROM import.occurrences_categories_staging s WITH (NOLOCK)
|
|
145
171
|
WHERE s.id_batch = @id_batch
|
|
146
172
|
AND NOT EXISTS (SELECT 1 FROM import.errors e WHERE e.id_batch = s.id_batch AND e.row_num = s.row_num);
|
|
@@ -21,7 +21,7 @@ CREATE TABLE [import].[risks_staging](
|
|
|
21
21
|
[name] [nvarchar](200) NOT NULL,
|
|
22
22
|
[description] [nvarchar](max) NULL,
|
|
23
23
|
[group_name] [nvarchar](200) NOT NULL,
|
|
24
|
-
[
|
|
24
|
+
[id_responsible_user] [char](8) NOT NULL,
|
|
25
25
|
[place_name] [nvarchar](200) NULL,
|
|
26
26
|
[category_name] [nvarchar](200) NULL,
|
|
27
27
|
[is_active] [varchar](20) NULL,
|
|
@@ -43,6 +43,7 @@ AS
|
|
|
43
43
|
BEGIN
|
|
44
44
|
SET NOCOUNT ON;
|
|
45
45
|
|
|
46
|
+
-- Validação 1: Código duplicado no arquivo
|
|
46
47
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
47
48
|
SELECT @id_batch, s.row_num, 'Código duplicado no arquivo'
|
|
48
49
|
FROM (
|
|
@@ -53,6 +54,7 @@ BEGIN
|
|
|
53
54
|
) s
|
|
54
55
|
WHERE s.cnt > 1;
|
|
55
56
|
|
|
57
|
+
-- Validação 2: Código já existente na produção
|
|
56
58
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
57
59
|
SELECT @id_batch, s.row_num, 'Código de risco já existe na base para esta unidade'
|
|
58
60
|
FROM import.risks_staging s WITH (NOLOCK)
|
|
@@ -62,6 +64,7 @@ BEGIN
|
|
|
62
64
|
AND t.removed = 0
|
|
63
65
|
WHERE s.id_batch = @id_batch;
|
|
64
66
|
|
|
67
|
+
-- Validação 3: Nome duplicado no arquivo
|
|
65
68
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
66
69
|
SELECT @id_batch, s.row_num, 'Nome do risco duplicado no arquivo'
|
|
67
70
|
FROM (
|
|
@@ -71,6 +74,7 @@ BEGIN
|
|
|
71
74
|
) s
|
|
72
75
|
WHERE s.cnt > 1;
|
|
73
76
|
|
|
77
|
+
-- Validação 4: Nome já existente na produção
|
|
74
78
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
75
79
|
SELECT @id_batch, s.row_num, 'Nome do risco já existe na base para esta unidade'
|
|
76
80
|
FROM import.risks_staging s WITH (NOLOCK)
|
|
@@ -80,6 +84,7 @@ BEGIN
|
|
|
80
84
|
AND t.removed = 0
|
|
81
85
|
WHERE s.id_batch = @id_batch;
|
|
82
86
|
|
|
87
|
+
-- Validação 5: Campos Obrigatórios Vazios
|
|
83
88
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
84
89
|
SELECT @id_batch, s.row_num, 'Código, Nome, Grupo e Responsável são obrigatórios'
|
|
85
90
|
FROM import.risks_staging s WITH (NOLOCK)
|
|
@@ -88,15 +93,17 @@ BEGIN
|
|
|
88
93
|
NULLIF(RTRIM(LTRIM(s.code)), '') IS NULL OR
|
|
89
94
|
NULLIF(RTRIM(LTRIM(s.name)), '') IS NULL OR
|
|
90
95
|
NULLIF(RTRIM(LTRIM(s.group_name)), '') IS NULL OR
|
|
91
|
-
NULLIF(RTRIM(LTRIM(s.
|
|
96
|
+
NULLIF(RTRIM(LTRIM(s.id_responsible_user)), '') IS NULL
|
|
92
97
|
);
|
|
93
98
|
|
|
99
|
+
-- Validação 6: Validação de Situação (Ativo / Inativo) com Regra Estrita
|
|
94
100
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
95
101
|
SELECT @id_batch, s.row_num, 'Situação inválida (selecione Ativo ou Inativo na planilha)'
|
|
96
102
|
FROM import.risks_staging s WITH (NOLOCK)
|
|
97
103
|
WHERE s.id_batch = @id_batch
|
|
98
104
|
AND ISNULL(s.is_active, '') COLLATE Latin1_General_CS_AS NOT IN ('Ativo', 'Inativo');
|
|
99
105
|
|
|
106
|
+
-- Validação 7: Grupo não encontrado
|
|
100
107
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
101
108
|
SELECT @id_batch, s.row_num, 'Grupo de risco não encontrado ou inativo'
|
|
102
109
|
FROM import.risks_staging s WITH (NOLOCK)
|
|
@@ -108,31 +115,35 @@ BEGIN
|
|
|
108
115
|
AND NULLIF(RTRIM(LTRIM(s.group_name)), '') IS NOT NULL
|
|
109
116
|
AND g.id IS NULL;
|
|
110
117
|
|
|
118
|
+
-- Validação 8: Responsável não encontrado
|
|
111
119
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
112
120
|
SELECT @id_batch, s.row_num, 'Usuário responsável não encontrado'
|
|
113
121
|
FROM import.risks_staging s WITH (NOLOCK)
|
|
114
122
|
LEFT JOIN dbo.users u WITH (NOLOCK)
|
|
115
|
-
ON u.
|
|
123
|
+
ON u.id COLLATE Latin1_General_CS_AS = s.id_responsible_user COLLATE Latin1_General_CS_AS
|
|
124
|
+
AND u.id_company COLLATE Latin1_General_CS_AS = s.id_company COLLATE Latin1_General_CS_AS
|
|
116
125
|
AND u.removed = 0
|
|
117
126
|
WHERE s.id_batch = @id_batch
|
|
118
|
-
AND NULLIF(RTRIM(LTRIM(s.
|
|
127
|
+
AND NULLIF(RTRIM(LTRIM(s.id_responsible_user)), '') IS NOT NULL
|
|
119
128
|
AND u.id IS NULL;
|
|
120
129
|
|
|
130
|
+
-- Validação 9: Local (Place) não encontrado
|
|
121
131
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
122
132
|
SELECT @id_batch, s.row_num, 'Local não encontrado ou inativo'
|
|
123
133
|
FROM import.risks_staging s WITH (NOLOCK)
|
|
124
|
-
LEFT JOIN
|
|
125
|
-
ON p.
|
|
134
|
+
LEFT JOIN dbo.places p WITH (NOLOCK)
|
|
135
|
+
ON p.name COLLATE Latin1_General_CS_AS = s.place_name COLLATE Latin1_General_CS_AS
|
|
126
136
|
AND p.id_company COLLATE Latin1_General_CS_AS = s.id_company COLLATE Latin1_General_CS_AS
|
|
127
137
|
AND p.removed = 0
|
|
128
138
|
WHERE s.id_batch = @id_batch
|
|
129
139
|
AND NULLIF(RTRIM(LTRIM(s.place_name)), '') IS NOT NULL
|
|
130
140
|
AND p.id IS NULL;
|
|
131
141
|
|
|
142
|
+
-- Validação 10: Categoria não encontrada
|
|
132
143
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
133
144
|
SELECT @id_batch, s.row_num, 'Categoria não encontrada ou inativa'
|
|
134
145
|
FROM import.risks_staging s WITH (NOLOCK)
|
|
135
|
-
LEFT JOIN risks.
|
|
146
|
+
LEFT JOIN risks.risks_categories c WITH (NOLOCK)
|
|
136
147
|
ON c.title COLLATE Latin1_General_CS_AS = s.category_name COLLATE Latin1_General_CS_AS
|
|
137
148
|
AND c.id_company COLLATE Latin1_General_CS_AS = s.id_company COLLATE Latin1_General_CS_AS
|
|
138
149
|
AND c.removed = 0
|
|
@@ -140,6 +151,7 @@ BEGIN
|
|
|
140
151
|
AND NULLIF(RTRIM(LTRIM(s.category_name)), '') IS NOT NULL
|
|
141
152
|
AND c.id IS NULL;
|
|
142
153
|
|
|
154
|
+
-- INSERÇÃO DOS DADOS VÁLIDOS
|
|
143
155
|
INSERT INTO risks.risks
|
|
144
156
|
(
|
|
145
157
|
id_company,
|
|
@@ -178,13 +190,14 @@ BEGIN
|
|
|
178
190
|
AND g.id_company COLLATE Latin1_General_CS_AS = s.id_company COLLATE Latin1_General_CS_AS
|
|
179
191
|
AND g.removed = 0
|
|
180
192
|
LEFT JOIN dbo.users u WITH (NOLOCK)
|
|
181
|
-
ON u.
|
|
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
|
|
182
195
|
AND u.removed = 0
|
|
183
|
-
LEFT JOIN
|
|
184
|
-
ON p.
|
|
196
|
+
LEFT JOIN dbo.places p WITH (NOLOCK)
|
|
197
|
+
ON p.name COLLATE Latin1_General_CS_AS = s.place_name COLLATE Latin1_General_CS_AS
|
|
185
198
|
AND p.id_company COLLATE Latin1_General_CS_AS = s.id_company COLLATE Latin1_General_CS_AS
|
|
186
199
|
AND p.removed = 0
|
|
187
|
-
LEFT JOIN risks.
|
|
200
|
+
LEFT JOIN risks.risks_categories c WITH (NOLOCK)
|
|
188
201
|
ON c.title COLLATE Latin1_General_CS_AS = s.category_name COLLATE Latin1_General_CS_AS
|
|
189
202
|
AND c.id_company COLLATE Latin1_General_CS_AS = s.id_company COLLATE Latin1_General_CS_AS
|
|
190
203
|
AND c.removed = 0
|
|
@@ -16,7 +16,7 @@ CREATE TABLE [import].[risks_groups_staging](
|
|
|
16
16
|
[name] [nvarchar](200) NOT NULL,
|
|
17
17
|
[description] [nvarchar](max) NULL,
|
|
18
18
|
[is_active] [varchar](20) NULL,
|
|
19
|
-
[
|
|
19
|
+
[id_responsible_user] [char](8) NOT NULL,
|
|
20
20
|
[place_name] [nvarchar](200) NULL,
|
|
21
21
|
[rule_name] [nvarchar](200) NULL,
|
|
22
22
|
[id_creation_user] [char](8) NOT NULL,
|
|
@@ -37,6 +37,7 @@ AS
|
|
|
37
37
|
BEGIN
|
|
38
38
|
SET NOCOUNT ON;
|
|
39
39
|
|
|
40
|
+
-- Validação 1: Código duplicado no arquivo
|
|
40
41
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
41
42
|
SELECT @id_batch, s.row_num, 'Código duplicado no arquivo'
|
|
42
43
|
FROM (
|
|
@@ -47,15 +48,17 @@ BEGIN
|
|
|
47
48
|
) s
|
|
48
49
|
WHERE s.cnt > 1;
|
|
49
50
|
|
|
51
|
+
-- Validação 2: Código já existente na produção (mesma unidade)
|
|
50
52
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
51
53
|
SELECT @id_batch, s.row_num, 'Código de grupo já existe na base para esta unidade'
|
|
52
54
|
FROM import.risks_groups_staging s WITH (NOLOCK)
|
|
53
55
|
INNER JOIN risks.groups t WITH (NOLOCK)
|
|
54
|
-
ON t.code = s.code COLLATE Latin1_General_CS_AS
|
|
56
|
+
ON t.code COLLATE Latin1_General_CS_AS = s.code COLLATE Latin1_General_CS_AS
|
|
57
|
+
AND t.id_company COLLATE Latin1_General_CS_AS = s.id_company COLLATE Latin1_General_CS_AS
|
|
55
58
|
AND t.removed = 0
|
|
56
|
-
AND t.id_company = s.id_company COLLATE Latin1_General_CS_AS
|
|
57
59
|
WHERE s.id_batch = @id_batch;
|
|
58
60
|
|
|
61
|
+
-- Validação 3: Nome duplicado no arquivo
|
|
59
62
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
60
63
|
SELECT @id_batch, s.row_num, 'Nome do grupo duplicado no arquivo'
|
|
61
64
|
FROM (
|
|
@@ -65,53 +68,60 @@ BEGIN
|
|
|
65
68
|
) s
|
|
66
69
|
WHERE s.cnt > 1;
|
|
67
70
|
|
|
71
|
+
-- Validação 4: Nome já existente na produção (mesma unidade)
|
|
68
72
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
69
73
|
SELECT @id_batch, s.row_num, 'Nome do grupo já existe na base para esta unidade'
|
|
70
74
|
FROM import.risks_groups_staging s WITH (NOLOCK)
|
|
71
75
|
INNER JOIN risks.groups t WITH (NOLOCK)
|
|
72
|
-
ON t.name = s.name COLLATE Latin1_General_CS_AS
|
|
76
|
+
ON t.name COLLATE Latin1_General_CS_AS = s.name COLLATE Latin1_General_CS_AS
|
|
77
|
+
AND t.id_company COLLATE Latin1_General_CS_AS = s.id_company COLLATE Latin1_General_CS_AS
|
|
73
78
|
AND t.removed = 0
|
|
74
|
-
AND t.id_company = s.id_company COLLATE Latin1_General_CS_AS
|
|
75
79
|
WHERE s.id_batch = @id_batch;
|
|
76
80
|
|
|
81
|
+
-- Validação 5: Situação (is_active) inválida - Validação Estrita
|
|
77
82
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
78
83
|
SELECT @id_batch, s.row_num, 'Situação inválida (selecione Ativo ou Inativo na planilha)'
|
|
79
84
|
FROM import.risks_groups_staging s WITH (NOLOCK)
|
|
80
85
|
WHERE s.id_batch = @id_batch
|
|
81
86
|
AND ISNULL(s.is_active, '') COLLATE Latin1_General_CS_AS NOT IN ('Ativo', 'Inativo', '');
|
|
82
87
|
|
|
88
|
+
-- Validação 6: Responsável não encontrado
|
|
83
89
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
84
90
|
SELECT @id_batch, s.row_num, 'Usuário responsável não encontrado'
|
|
85
91
|
FROM import.risks_groups_staging s WITH (NOLOCK)
|
|
86
92
|
LEFT JOIN dbo.users u WITH (NOLOCK)
|
|
87
|
-
ON u.
|
|
93
|
+
ON u.id COLLATE Latin1_General_CS_AS = s.id_responsible_user COLLATE Latin1_General_CS_AS
|
|
94
|
+
AND u.id_company COLLATE Latin1_General_CS_AS = s.id_company COLLATE Latin1_General_CS_AS
|
|
88
95
|
AND u.removed = 0
|
|
89
96
|
WHERE s.id_batch = @id_batch
|
|
90
|
-
AND NULLIF(RTRIM(LTRIM(s.
|
|
97
|
+
AND NULLIF(RTRIM(LTRIM(s.id_responsible_user)), '') IS NOT NULL
|
|
91
98
|
AND u.id IS NULL;
|
|
92
99
|
|
|
100
|
+
-- Validação 7: Local (Place) não encontrado (Opcional)
|
|
93
101
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
94
102
|
SELECT @id_batch, s.row_num, 'Local não encontrado ou inativo'
|
|
95
103
|
FROM import.risks_groups_staging s WITH (NOLOCK)
|
|
96
|
-
LEFT JOIN
|
|
97
|
-
ON p.
|
|
98
|
-
AND p.id_company = s.id_company COLLATE Latin1_General_CS_AS
|
|
104
|
+
LEFT JOIN dbo.places p WITH (NOLOCK)
|
|
105
|
+
ON p.name COLLATE Latin1_General_CS_AS = s.place_name COLLATE Latin1_General_CS_AS
|
|
106
|
+
AND p.id_company COLLATE Latin1_General_CS_AS = s.id_company COLLATE Latin1_General_CS_AS
|
|
99
107
|
AND p.removed = 0
|
|
100
108
|
WHERE s.id_batch = @id_batch
|
|
101
109
|
AND NULLIF(RTRIM(LTRIM(s.place_name)), '') IS NOT NULL
|
|
102
110
|
AND p.id IS NULL;
|
|
103
111
|
|
|
112
|
+
-- Validação 8: Regra (Rule) não encontrada (Opcional)
|
|
104
113
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
105
114
|
SELECT @id_batch, s.row_num, 'Regra não encontrada ou inativa'
|
|
106
115
|
FROM import.risks_groups_staging s WITH (NOLOCK)
|
|
107
|
-
LEFT JOIN risks.
|
|
108
|
-
ON r.
|
|
109
|
-
AND r.id_company = s.id_company COLLATE Latin1_General_CS_AS
|
|
116
|
+
LEFT JOIN risks.analysis_rules r WITH (NOLOCK)
|
|
117
|
+
ON r.name COLLATE Latin1_General_CS_AS = s.rule_name COLLATE Latin1_General_CS_AS
|
|
118
|
+
AND (r.id_company IS NULL OR r.id_company COLLATE Latin1_General_CS_AS = s.id_company COLLATE Latin1_General_CS_AS)
|
|
110
119
|
AND r.removed = 0
|
|
111
120
|
WHERE s.id_batch = @id_batch
|
|
112
121
|
AND NULLIF(RTRIM(LTRIM(s.rule_name)), '') IS NOT NULL
|
|
113
122
|
AND r.id IS NULL;
|
|
114
123
|
|
|
124
|
+
-- INSERÇÃO DOS DADOS VÁLIDOS
|
|
115
125
|
INSERT INTO risks.groups
|
|
116
126
|
(
|
|
117
127
|
id_company,
|
|
@@ -147,11 +157,17 @@ BEGIN
|
|
|
147
157
|
0 AS removed
|
|
148
158
|
FROM import.risks_groups_staging s WITH (NOLOCK)
|
|
149
159
|
LEFT JOIN dbo.users u WITH (NOLOCK)
|
|
150
|
-
ON u.
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
LEFT JOIN
|
|
154
|
-
ON
|
|
160
|
+
ON u.id COLLATE Latin1_General_CS_AS = s.id_responsible_user COLLATE Latin1_General_CS_AS
|
|
161
|
+
AND u.id_company COLLATE Latin1_General_CS_AS = s.id_company COLLATE Latin1_General_CS_AS
|
|
162
|
+
AND u.removed = 0
|
|
163
|
+
LEFT JOIN dbo.places p WITH (NOLOCK)
|
|
164
|
+
ON p.name COLLATE Latin1_General_CS_AS = s.place_name COLLATE Latin1_General_CS_AS
|
|
165
|
+
AND p.id_company COLLATE Latin1_General_CS_AS = s.id_company COLLATE Latin1_General_CS_AS
|
|
166
|
+
AND p.removed = 0
|
|
167
|
+
LEFT JOIN risks.analysis_rules r WITH (NOLOCK)
|
|
168
|
+
ON r.name COLLATE Latin1_General_CS_AS = s.rule_name COLLATE Latin1_General_CS_AS
|
|
169
|
+
AND (r.id_company IS NULL OR r.id_company COLLATE Latin1_General_CS_AS = s.id_company COLLATE Latin1_General_CS_AS)
|
|
170
|
+
AND r.removed = 0
|
|
155
171
|
WHERE s.id_batch = @id_batch
|
|
156
172
|
AND NOT EXISTS (
|
|
157
173
|
SELECT 1
|