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,8 +1,6 @@
|
|
|
1
1
|
USE [qualiex_common]
|
|
2
2
|
GO
|
|
3
3
|
|
|
4
|
-
begin tran
|
|
5
|
-
|
|
6
4
|
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[import].[occurrences_categories_staging]') AND type IN (N'U'))
|
|
7
5
|
DROP TABLE [import].[occurrences_categories_staging]
|
|
8
6
|
GO
|
|
@@ -10,25 +8,30 @@ GO
|
|
|
10
8
|
CREATE TABLE [import].[occurrences_categories_staging](
|
|
11
9
|
[id_batch] [uniqueidentifier] NOT NULL,
|
|
12
10
|
[row_num] [int] NOT NULL,
|
|
13
|
-
[name] [nvarchar](150) NOT NULL,
|
|
14
|
-
[description] [nvarchar](1000) NULL,
|
|
15
|
-
[is_active] [varchar](20) NULL,
|
|
11
|
+
[name] [nvarchar](150) COLLATE Latin1_General_CS_AS NOT NULL,
|
|
12
|
+
[description] [nvarchar](1000) COLLATE Latin1_General_CS_AS NULL,
|
|
13
|
+
[is_active] [varchar](20) COLLATE Latin1_General_CS_AS NULL,
|
|
16
14
|
[id_method] [int] NOT NULL,
|
|
17
|
-
[icon] [varchar](30) NULL,
|
|
18
|
-
[days_causes_analysis] [varchar](10) NULL,
|
|
19
|
-
[days_action_plan_elaboration] [varchar](10) NULL,
|
|
20
|
-
[days_action_plan_execution] [varchar](10) NULL,
|
|
21
|
-
[days_effectiveness_check] [varchar](10) NULL,
|
|
22
|
-
[days_standardization] [varchar](10) NULL,
|
|
23
|
-
[days_evaluation] [varchar](10) NULL,
|
|
24
|
-
[active_cause_analysis] [varchar](10) NULL,
|
|
25
|
-
[active_effectiveness_check] [varchar](10) NULL,
|
|
26
|
-
[active_standardization] [varchar](10) NULL,
|
|
27
|
-
[
|
|
28
|
-
[
|
|
29
|
-
[
|
|
30
|
-
[
|
|
31
|
-
|
|
15
|
+
[icon] [varchar](30) COLLATE Latin1_General_CS_AS NULL,
|
|
16
|
+
[days_causes_analysis] [varchar](10) COLLATE Latin1_General_CS_AS NULL,
|
|
17
|
+
[days_action_plan_elaboration] [varchar](10) COLLATE Latin1_General_CS_AS NULL,
|
|
18
|
+
[days_action_plan_execution] [varchar](10) COLLATE Latin1_General_CS_AS NULL,
|
|
19
|
+
[days_effectiveness_check] [varchar](10) COLLATE Latin1_General_CS_AS NULL,
|
|
20
|
+
[days_standardization] [varchar](10) COLLATE Latin1_General_CS_AS NULL,
|
|
21
|
+
[days_evaluation] [varchar](10) COLLATE Latin1_General_CS_AS NULL,
|
|
22
|
+
[active_cause_analysis] [varchar](10) COLLATE Latin1_General_CS_AS NULL,
|
|
23
|
+
[active_effectiveness_check] [varchar](10) COLLATE Latin1_General_CS_AS NULL,
|
|
24
|
+
[active_standardization] [varchar](10) COLLATE Latin1_General_CS_AS NULL,
|
|
25
|
+
[aprove_cause_analysis] [varchar](10) COLLATE Latin1_General_CS_AS NULL,
|
|
26
|
+
[aprove_action_plan_elaboration] [varchar](10) COLLATE Latin1_General_CS_AS NULL,
|
|
27
|
+
[aprove_action_plan_execution] [varchar](10) COLLATE Latin1_General_CS_AS NULL,
|
|
28
|
+
[aprove_effectiveness_check] [varchar](10) COLLATE Latin1_General_CS_AS NULL,
|
|
29
|
+
[aprove_standardization] [varchar](10) COLLATE Latin1_General_CS_AS NULL,
|
|
30
|
+
[aprove_evaluation] [varchar](10) COLLATE Latin1_General_CS_AS NULL,
|
|
31
|
+
[all_types_associated] [varchar](10) COLLATE Latin1_General_CS_AS NULL,
|
|
32
|
+
[id_rule_prioritization] [char](8) COLLATE Latin1_General_CS_AS NULL,
|
|
33
|
+
[id_company] [char](8) COLLATE Latin1_General_CS_AS NOT NULL,
|
|
34
|
+
CONSTRAINT [pk_occurrences_categories_staging] PRIMARY KEY CLUSTERED
|
|
32
35
|
(
|
|
33
36
|
[id_batch] ASC,
|
|
34
37
|
[row_num] ASC
|
|
@@ -36,6 +39,9 @@ CREATE TABLE [import].[occurrences_categories_staging](
|
|
|
36
39
|
) ON [PRIMARY]
|
|
37
40
|
GO
|
|
38
41
|
|
|
42
|
+
USE [qualiex_common]
|
|
43
|
+
GO
|
|
44
|
+
|
|
39
45
|
CREATE OR ALTER PROCEDURE [import].[validate_occurrences_categories]
|
|
40
46
|
@id_batch UNIQUEIDENTIFIER
|
|
41
47
|
AS
|
|
@@ -44,93 +50,100 @@ BEGIN
|
|
|
44
50
|
|
|
45
51
|
-- Validação 1: Nome duplicado no arquivo
|
|
46
52
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
47
|
-
SELECT @id_batch,
|
|
53
|
+
SELECT @id_batch, sub.row_num, 'Nome duplicado no arquivo'
|
|
48
54
|
FROM (
|
|
49
55
|
SELECT *, COUNT(*) OVER (PARTITION BY name) AS cnt
|
|
50
56
|
FROM import.occurrences_categories_staging WITH (NOLOCK)
|
|
51
57
|
WHERE id_batch = @id_batch
|
|
52
|
-
)
|
|
53
|
-
WHERE
|
|
58
|
+
) sub
|
|
59
|
+
WHERE sub.cnt > 1;
|
|
54
60
|
|
|
55
61
|
-- Validação 2: Nome já existente na produção
|
|
62
|
+
-- Correção: Collate explícito para resolver o conflito
|
|
56
63
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
57
|
-
SELECT @id_batch,
|
|
58
|
-
FROM import.occurrences_categories_staging
|
|
59
|
-
INNER JOIN occurrences.categories
|
|
60
|
-
ON
|
|
61
|
-
AND
|
|
62
|
-
AND
|
|
63
|
-
WHERE
|
|
64
|
+
SELECT @id_batch, ocs.row_num, 'Categoria de ocorrência já existe na base para esta unidade'
|
|
65
|
+
FROM import.occurrences_categories_staging ocs WITH (NOLOCK)
|
|
66
|
+
INNER JOIN occurrences.categories oc WITH (NOLOCK)
|
|
67
|
+
ON oc.name COLLATE Latin1_General_CS_AS = ocs.name
|
|
68
|
+
AND oc.id_company COLLATE Latin1_General_CS_AS = ocs.id_company
|
|
69
|
+
AND oc.removed = 0
|
|
70
|
+
WHERE ocs.id_batch = @id_batch;
|
|
64
71
|
|
|
65
72
|
-- Validação 3: Situação (is_active) inválida
|
|
66
73
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
67
|
-
SELECT @id_batch,
|
|
68
|
-
FROM import.occurrences_categories_staging
|
|
69
|
-
WHERE
|
|
70
|
-
AND ISNULL(
|
|
74
|
+
SELECT @id_batch, ocs.row_num, 'Situação inválida (selecione Ativo ou Inativo na planilha)'
|
|
75
|
+
FROM import.occurrences_categories_staging ocs WITH (NOLOCK)
|
|
76
|
+
WHERE ocs.id_batch = @id_batch
|
|
77
|
+
AND ISNULL(ocs.is_active, '') NOT IN ('Ativo', 'Inativo');
|
|
71
78
|
|
|
72
79
|
-- Validação 4: Booleanos inválidos (Sim / Não)
|
|
73
80
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
74
|
-
SELECT @id_batch,
|
|
75
|
-
FROM import.occurrences_categories_staging
|
|
76
|
-
WHERE
|
|
81
|
+
SELECT @id_batch, ocs.row_num, 'Valor inválido para campos de Sim/Não (Certifique-se de escolher Sim ou Não na planilha)'
|
|
82
|
+
FROM import.occurrences_categories_staging ocs WITH (NOLOCK)
|
|
83
|
+
WHERE ocs.id_batch = @id_batch
|
|
77
84
|
AND (
|
|
78
|
-
(
|
|
79
|
-
OR (
|
|
80
|
-
OR (
|
|
81
|
-
OR (
|
|
82
|
-
OR (
|
|
85
|
+
(ocs.active_cause_analysis IS NOT NULL AND ocs.active_cause_analysis NOT IN ('Sim','Não'))
|
|
86
|
+
OR (ocs.active_effectiveness_check IS NOT NULL AND ocs.active_effectiveness_check NOT IN ('Sim','Não'))
|
|
87
|
+
OR (ocs.active_standardization IS NOT NULL AND ocs.active_standardization NOT IN ('Sim','Não'))
|
|
88
|
+
OR (ocs.aprove_cause_analysis IS NOT NULL AND ocs.aprove_cause_analysis NOT IN ('Sim','Não'))
|
|
89
|
+
OR (ocs.aprove_action_plan_elaboration IS NOT NULL AND ocs.aprove_action_plan_elaboration NOT IN ('Sim','Não'))
|
|
90
|
+
OR (ocs.aprove_action_plan_execution IS NOT NULL AND ocs.aprove_action_plan_execution NOT IN ('Sim','Não'))
|
|
91
|
+
OR (ocs.aprove_effectiveness_check IS NOT NULL AND ocs.aprove_effectiveness_check NOT IN ('Sim','Não'))
|
|
92
|
+
OR (ocs.aprove_standardization IS NOT NULL AND ocs.aprove_standardization NOT IN ('Sim','Não'))
|
|
93
|
+
OR (ocs.aprove_evaluation IS NOT NULL AND ocs.aprove_evaluation NOT IN ('Sim','Não'))
|
|
94
|
+
OR (ocs.all_types_associated IS NOT NULL AND ocs.all_types_associated NOT IN ('Sim','Não'))
|
|
83
95
|
);
|
|
84
96
|
|
|
85
97
|
-- Validação 5: Prazos (Dias) devem ser numéricos
|
|
86
98
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
87
|
-
SELECT @id_batch,
|
|
88
|
-
FROM import.occurrences_categories_staging
|
|
89
|
-
WHERE
|
|
99
|
+
SELECT @id_batch, ocs.row_num, 'Os valores de prazos/dias devem ser números inteiros'
|
|
100
|
+
FROM import.occurrences_categories_staging ocs WITH (NOLOCK)
|
|
101
|
+
WHERE ocs.id_batch = @id_batch
|
|
90
102
|
AND (
|
|
91
|
-
(
|
|
92
|
-
OR (
|
|
93
|
-
OR (
|
|
94
|
-
OR (
|
|
95
|
-
OR (
|
|
96
|
-
OR (
|
|
103
|
+
(ocs.days_causes_analysis IS NOT NULL AND TRY_CAST(ocs.days_causes_analysis AS INT) IS NULL)
|
|
104
|
+
OR (ocs.days_action_plan_elaboration IS NOT NULL AND TRY_CAST(ocs.days_action_plan_elaboration AS INT) IS NULL)
|
|
105
|
+
OR (ocs.days_action_plan_execution IS NOT NULL AND TRY_CAST(ocs.days_action_plan_execution AS INT) IS NULL)
|
|
106
|
+
OR (ocs.days_effectiveness_check IS NOT NULL AND TRY_CAST(ocs.days_effectiveness_check AS INT) IS NULL)
|
|
107
|
+
OR (ocs.days_standardization IS NOT NULL AND TRY_CAST(ocs.days_standardization AS INT) IS NULL)
|
|
108
|
+
OR (ocs.days_evaluation IS NOT NULL AND TRY_CAST(ocs.days_evaluation AS INT) IS NULL)
|
|
97
109
|
);
|
|
98
110
|
|
|
99
111
|
-- Validação 6: Prazo da Análise de causa é obrigatório quando a etapa está ativa
|
|
100
112
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
101
|
-
SELECT @id_batch,
|
|
102
|
-
FROM import.occurrences_categories_staging
|
|
103
|
-
WHERE
|
|
104
|
-
AND
|
|
105
|
-
AND (
|
|
113
|
+
SELECT @id_batch, ocs.row_num, 'Prazo de Análise de causa é obrigatório quando a etapa está ativa'
|
|
114
|
+
FROM import.occurrences_categories_staging ocs WITH (NOLOCK)
|
|
115
|
+
WHERE ocs.id_batch = @id_batch
|
|
116
|
+
AND ocs.active_cause_analysis = 'Sim'
|
|
117
|
+
AND (ocs.days_causes_analysis IS NULL OR LTRIM(RTRIM(ocs.days_causes_analysis)) = '');
|
|
106
118
|
|
|
107
119
|
-- Validação 7: Prazo da Verificação de eficácia é obrigatório quando a etapa está ativa
|
|
108
120
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
109
|
-
SELECT @id_batch,
|
|
110
|
-
FROM import.occurrences_categories_staging
|
|
111
|
-
WHERE
|
|
112
|
-
AND
|
|
113
|
-
AND (
|
|
121
|
+
SELECT @id_batch, ocs.row_num, 'Prazo de Verificação de eficácia é obrigatório quando a etapa está ativa'
|
|
122
|
+
FROM import.occurrences_categories_staging ocs WITH (NOLOCK)
|
|
123
|
+
WHERE ocs.id_batch = @id_batch
|
|
124
|
+
AND ocs.active_effectiveness_check = 'Sim'
|
|
125
|
+
AND (ocs.days_effectiveness_check IS NULL OR LTRIM(RTRIM(ocs.days_effectiveness_check)) = '');
|
|
114
126
|
|
|
115
127
|
-- Validação 8: Prazo da Padronização/Divulgação é obrigatório quando a etapa está ativa
|
|
116
128
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
117
|
-
SELECT @id_batch,
|
|
118
|
-
FROM import.occurrences_categories_staging
|
|
119
|
-
WHERE
|
|
120
|
-
AND
|
|
121
|
-
AND (
|
|
129
|
+
SELECT @id_batch, ocs.row_num, 'Prazo de Padronização/Divulgação é obrigatório quando a etapa está ativa'
|
|
130
|
+
FROM import.occurrences_categories_staging ocs WITH (NOLOCK)
|
|
131
|
+
WHERE ocs.id_batch = @id_batch
|
|
132
|
+
AND ocs.active_standardization = 'Sim'
|
|
133
|
+
AND (ocs.days_standardization IS NULL OR LTRIM(RTRIM(ocs.days_standardization)) = '');
|
|
122
134
|
|
|
123
135
|
-- Validação 9: Regra de priorização informada deve existir
|
|
124
136
|
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
125
|
-
SELECT @id_batch,
|
|
126
|
-
FROM import.occurrences_categories_staging
|
|
127
|
-
WHERE
|
|
128
|
-
AND
|
|
129
|
-
AND LTRIM(RTRIM(
|
|
137
|
+
SELECT @id_batch, ocs.row_num, 'Regra de priorização não encontrada'
|
|
138
|
+
FROM import.occurrences_categories_staging ocs WITH (NOLOCK)
|
|
139
|
+
WHERE ocs.id_batch = @id_batch
|
|
140
|
+
AND ocs.id_rule_prioritization IS NOT NULL
|
|
141
|
+
AND LTRIM(RTRIM(ocs.id_rule_prioritization)) <> ''
|
|
130
142
|
AND NOT EXISTS (
|
|
131
143
|
SELECT 1 FROM occurrences.rules_prioritization rp WITH (NOLOCK)
|
|
132
|
-
|
|
133
|
-
|
|
144
|
+
-- Correção: Collation explícito aqui também!
|
|
145
|
+
WHERE rp.id COLLATE Latin1_General_CS_AS = ocs.id_rule_prioritization
|
|
146
|
+
AND rp.id_company COLLATE Latin1_General_CS_AS = ocs.id_company
|
|
134
147
|
);
|
|
135
148
|
|
|
136
149
|
-- INSERÇÃO DOS DADOS VÁLIDOS
|
|
@@ -140,40 +153,52 @@ BEGIN
|
|
|
140
153
|
days_causes_analysis, days_action_plan_elaboration, days_action_plan_execution,
|
|
141
154
|
days_effectiveness_check, days_standardization, days_evaluation,
|
|
142
155
|
active_cause_analysis, active_effectiveness_check, active_standardization,
|
|
143
|
-
|
|
156
|
+
aprove_cause_analysis, aprove_action_plan_elaboration, aprove_action_plan_execution,
|
|
157
|
+
aprove_effectiveness_check, aprove_standardization, aprove_evaluation, all_types_associated,
|
|
158
|
+
id_rule_prioritization
|
|
144
159
|
)
|
|
145
160
|
SELECT
|
|
146
|
-
|
|
147
|
-
ISNULL(
|
|
148
|
-
|
|
149
|
-
NULLIF(
|
|
150
|
-
NULLIF(
|
|
151
|
-
CASE WHEN
|
|
161
|
+
ocs.id_company,
|
|
162
|
+
ISNULL(ocs.id_method, 1) AS id_method,
|
|
163
|
+
ocs.name,
|
|
164
|
+
NULLIF(ocs.description, '') AS description,
|
|
165
|
+
NULLIF(ocs.icon, '') AS icon,
|
|
166
|
+
CASE WHEN ocs.is_active = 'Inativo' THEN 0 ELSE 1 END AS is_active,
|
|
152
167
|
SYSDATETIMEOFFSET() AS creation_date,
|
|
153
168
|
SYSDATETIMEOFFSET() AS last_modified,
|
|
154
169
|
0 AS removed,
|
|
155
|
-
CASE WHEN
|
|
156
|
-
|
|
157
|
-
ISNULL(TRY_CAST(
|
|
158
|
-
|
|
159
|
-
CASE WHEN
|
|
160
|
-
|
|
161
|
-
CASE WHEN
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
CASE WHEN
|
|
165
|
-
CASE WHEN
|
|
166
|
-
CASE WHEN
|
|
167
|
-
CASE WHEN
|
|
168
|
-
CASE WHEN
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
170
|
+
CASE WHEN ocs.active_cause_analysis = 'Sim' THEN TRY_CAST(ocs.days_causes_analysis AS INT) ELSE NULL END,
|
|
171
|
+
ISNULL(TRY_CAST(ocs.days_action_plan_elaboration AS INT), 0),
|
|
172
|
+
ISNULL(TRY_CAST(ocs.days_action_plan_execution AS INT), 0),
|
|
173
|
+
CASE WHEN ocs.active_effectiveness_check = 'Sim' THEN TRY_CAST(ocs.days_effectiveness_check AS INT) ELSE NULL END,
|
|
174
|
+
CASE WHEN ocs.active_standardization = 'Sim' THEN TRY_CAST(ocs.days_standardization AS INT) ELSE NULL END,
|
|
175
|
+
TRY_CAST(ocs.days_evaluation AS INT),
|
|
176
|
+
CASE WHEN ocs.active_cause_analysis = 'Sim' THEN 1 ELSE 0 END,
|
|
177
|
+
CASE WHEN ocs.active_effectiveness_check = 'Sim' THEN 1 ELSE 0 END,
|
|
178
|
+
CASE WHEN ocs.active_standardization = 'Sim' THEN 1 ELSE 0 END,
|
|
179
|
+
CASE WHEN ocs.aprove_cause_analysis = 'Sim' THEN 1 ELSE 0 END,
|
|
180
|
+
CASE WHEN ocs.aprove_action_plan_elaboration = 'Sim' THEN 1 ELSE 0 END,
|
|
181
|
+
CASE WHEN ocs.aprove_action_plan_execution = 'Sim' THEN 1 ELSE 0 END,
|
|
182
|
+
CASE WHEN ocs.aprove_effectiveness_check = 'Sim' THEN 1 ELSE 0 END,
|
|
183
|
+
CASE WHEN ocs.aprove_standardization = 'Sim' THEN 1 ELSE 0 END,
|
|
184
|
+
CASE WHEN ocs.aprove_evaluation = 'Sim' THEN 1 ELSE 0 END,
|
|
185
|
+
CASE WHEN ocs.all_types_associated = 'Sim' THEN 1 ELSE 0 END,
|
|
186
|
+
NULLIF(LTRIM(RTRIM(ocs.id_rule_prioritization)), '')
|
|
187
|
+
FROM import.occurrences_categories_staging ocs WITH (NOLOCK)
|
|
188
|
+
WHERE ocs.id_batch = @id_batch
|
|
189
|
+
AND NOT EXISTS (
|
|
190
|
+
SELECT 1
|
|
191
|
+
FROM import.errors e
|
|
192
|
+
WHERE e.id_batch = ocs.id_batch
|
|
193
|
+
AND e.row_num = ocs.row_num
|
|
194
|
+
);
|
|
173
195
|
|
|
174
196
|
END
|
|
175
197
|
GO
|
|
176
198
|
|
|
199
|
+
USE [qualiex_common]
|
|
200
|
+
GO
|
|
201
|
+
|
|
177
202
|
CREATE OR ALTER PROCEDURE [import].[get_errors_occurrences_categories]
|
|
178
203
|
(
|
|
179
204
|
@id_batch UNIQUEIDENTIFIER
|
|
@@ -185,14 +210,13 @@ BEGIN
|
|
|
185
210
|
SELECT
|
|
186
211
|
STRING_AGG(CAST(e.error_msg AS NVARCHAR(MAX)), '; ') WITHIN GROUP (ORDER BY e.error_msg) AS error_msg,
|
|
187
212
|
e.row_num,
|
|
188
|
-
|
|
213
|
+
ocs.name
|
|
189
214
|
FROM import.errors e WITH (NOLOCK)
|
|
190
|
-
JOIN import.occurrences_categories_staging
|
|
215
|
+
JOIN import.occurrences_categories_staging ocs WITH (NOLOCK)
|
|
216
|
+
ON ocs.row_num = e.row_num
|
|
217
|
+
AND ocs.id_batch = e.id_batch
|
|
191
218
|
WHERE e.id_batch = @id_batch
|
|
192
|
-
GROUP BY e.row_num,
|
|
219
|
+
GROUP BY e.row_num, ocs.name
|
|
193
220
|
ORDER BY e.row_num;
|
|
194
221
|
END
|
|
195
|
-
GO
|
|
196
|
-
|
|
197
|
-
-- commit
|
|
198
|
-
-- rollback
|
|
222
|
+
GO
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
USE [qualiex_common]
|
|
2
|
+
GO
|
|
3
|
+
|
|
4
|
+
IF EXISTS (SELECT * FROM sys.objects
|
|
5
|
+
WHERE object_id = OBJECT_ID(N'[import].[occurrences_causes_classification_staging]')
|
|
6
|
+
AND type IN (N'U'))
|
|
7
|
+
DROP TABLE [import].[occurrences_causes_classification_staging]
|
|
8
|
+
GO
|
|
9
|
+
|
|
10
|
+
CREATE TABLE [import].[occurrences_causes_classification_staging](
|
|
11
|
+
[id_batch] [uniqueidentifier] NOT NULL,
|
|
12
|
+
[row_num] [int] NOT NULL,
|
|
13
|
+
[name] [nvarchar](150) COLLATE Latin1_General_CS_AS NOT NULL,
|
|
14
|
+
[description] [nvarchar](1000) COLLATE Latin1_General_CS_AS NULL,
|
|
15
|
+
[is_active] [varchar](20) COLLATE Latin1_General_CS_AS NULL,
|
|
16
|
+
[id_creation_user] [char](8) COLLATE Latin1_General_CS_AS NOT NULL,
|
|
17
|
+
[id_company] [char](8) COLLATE Latin1_General_CS_AS NOT NULL,
|
|
18
|
+
CONSTRAINT [pk_occurrences_causes_classification_staging] PRIMARY KEY CLUSTERED
|
|
19
|
+
(
|
|
20
|
+
[id_batch] ASC,
|
|
21
|
+
[row_num] ASC
|
|
22
|
+
) ON [PRIMARY]
|
|
23
|
+
) ON [PRIMARY]
|
|
24
|
+
GO
|
|
25
|
+
|
|
26
|
+
USE [qualiex_common]
|
|
27
|
+
GO
|
|
28
|
+
|
|
29
|
+
CREATE OR ALTER PROCEDURE [import].[validate_occurrences_causes_classification]
|
|
30
|
+
@id_batch UNIQUEIDENTIFIER
|
|
31
|
+
AS
|
|
32
|
+
BEGIN
|
|
33
|
+
SET NOCOUNT ON;
|
|
34
|
+
|
|
35
|
+
-- Validação 1: Nome duplicado no arquivo
|
|
36
|
+
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
37
|
+
SELECT @id_batch, sub.row_num, 'Nome duplicado no arquivo'
|
|
38
|
+
FROM (
|
|
39
|
+
SELECT *, COUNT(*) OVER (PARTITION BY name) AS cnt
|
|
40
|
+
FROM import.occurrences_causes_classification_staging WITH (NOLOCK)
|
|
41
|
+
WHERE id_batch = @id_batch
|
|
42
|
+
) sub
|
|
43
|
+
WHERE sub.cnt > 1;
|
|
44
|
+
|
|
45
|
+
-- Validação 2: Nome já existente na produção
|
|
46
|
+
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
47
|
+
SELECT @id_batch, occs.row_num, 'Classificação de causa já existe na base para esta unidade'
|
|
48
|
+
FROM import.occurrences_causes_classification_staging occs WITH (NOLOCK)
|
|
49
|
+
INNER JOIN occurrences.causes_classification occ WITH (NOLOCK)
|
|
50
|
+
ON occ.name COLLATE Latin1_General_CS_AS = occs.name
|
|
51
|
+
AND occ.id_company COLLATE Latin1_General_CS_AS = occs.id_company
|
|
52
|
+
AND occ.removed = 0
|
|
53
|
+
WHERE occs.id_batch = @id_batch;
|
|
54
|
+
|
|
55
|
+
-- Validação 3: Situação (is_active) inválida
|
|
56
|
+
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
57
|
+
SELECT @id_batch, occs.row_num, 'Situação inválida (selecione Ativo ou Inativo na planilha)'
|
|
58
|
+
FROM import.occurrences_causes_classification_staging occs WITH (NOLOCK)
|
|
59
|
+
WHERE occs.id_batch = @id_batch
|
|
60
|
+
AND ISNULL(occs.is_active, '') NOT IN ('Ativo', 'Inativo');
|
|
61
|
+
|
|
62
|
+
-- INSERÇÃO DOS DADOS VÁLIDOS (Sem id_creation_user)
|
|
63
|
+
INSERT INTO occurrences.causes_classification
|
|
64
|
+
(
|
|
65
|
+
id_company, name, description, is_active,
|
|
66
|
+
creation_date, last_modified, removed
|
|
67
|
+
)
|
|
68
|
+
SELECT
|
|
69
|
+
occs.id_company,
|
|
70
|
+
occs.name,
|
|
71
|
+
NULLIF(occs.description, '') AS description,
|
|
72
|
+
CASE WHEN occs.is_active = 'Inativo' THEN 0 ELSE 1 END AS is_active,
|
|
73
|
+
SYSDATETIMEOFFSET() AS creation_date,
|
|
74
|
+
SYSDATETIMEOFFSET() AS last_modified,
|
|
75
|
+
0 AS removed
|
|
76
|
+
FROM import.occurrences_causes_classification_staging occs WITH (NOLOCK)
|
|
77
|
+
WHERE occs.id_batch = @id_batch
|
|
78
|
+
AND NOT EXISTS (
|
|
79
|
+
SELECT 1
|
|
80
|
+
FROM import.errors e
|
|
81
|
+
WHERE e.id_batch = occs.id_batch
|
|
82
|
+
AND e.row_num = occs.row_num
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
END
|
|
86
|
+
GO
|
|
87
|
+
|
|
88
|
+
USE [qualiex_common]
|
|
89
|
+
GO
|
|
90
|
+
|
|
91
|
+
CREATE OR ALTER PROCEDURE [import].[get_errors_occurrences_causes_classification]
|
|
92
|
+
(
|
|
93
|
+
@id_batch UNIQUEIDENTIFIER
|
|
94
|
+
)
|
|
95
|
+
AS
|
|
96
|
+
BEGIN
|
|
97
|
+
SET NOCOUNT ON;
|
|
98
|
+
|
|
99
|
+
SELECT
|
|
100
|
+
STRING_AGG(CAST(e.error_msg AS NVARCHAR(MAX)), '; ') WITHIN GROUP (ORDER BY e.error_msg) AS error_msg,
|
|
101
|
+
e.row_num,
|
|
102
|
+
occs.name,
|
|
103
|
+
occs.id_creation_user
|
|
104
|
+
FROM import.errors e WITH (NOLOCK)
|
|
105
|
+
JOIN import.occurrences_causes_classification_staging occs WITH (NOLOCK)
|
|
106
|
+
ON occs.row_num = e.row_num
|
|
107
|
+
AND occs.id_batch = e.id_batch
|
|
108
|
+
WHERE e.id_batch = @id_batch
|
|
109
|
+
GROUP BY e.row_num, occs.name, occs.id_creation_user
|
|
110
|
+
ORDER BY e.row_num;
|
|
111
|
+
END
|
|
112
|
+
GO
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
USE [qualiex_common]
|
|
2
|
+
GO
|
|
3
|
+
|
|
4
|
+
IF EXISTS (SELECT * FROM sys.objects
|
|
5
|
+
WHERE object_id = OBJECT_ID(N'[import].[occurrences_types_staging]')
|
|
6
|
+
AND type IN (N'U'))
|
|
7
|
+
DROP TABLE [import].[occurrences_types_staging]
|
|
8
|
+
GO
|
|
9
|
+
|
|
10
|
+
CREATE TABLE [import].[occurrences_types_staging](
|
|
11
|
+
[id_batch] [uniqueidentifier] NOT NULL,
|
|
12
|
+
[row_num] [int] NOT NULL,
|
|
13
|
+
[name] [nvarchar](150) COLLATE Latin1_General_CS_AS NOT NULL,
|
|
14
|
+
[description] [nvarchar](1000) COLLATE Latin1_General_CS_AS NULL,
|
|
15
|
+
[color] [nvarchar](10) COLLATE Latin1_General_CS_AS NULL,
|
|
16
|
+
[is_active] [varchar](20) COLLATE Latin1_General_CS_AS NULL,
|
|
17
|
+
[id_creation_user] [char](8) COLLATE Latin1_General_CS_AS NOT NULL,
|
|
18
|
+
[id_company] [char](8) COLLATE Latin1_General_CS_AS NOT NULL,
|
|
19
|
+
CONSTRAINT [pk_occurrences_types_staging] PRIMARY KEY CLUSTERED
|
|
20
|
+
(
|
|
21
|
+
[id_batch] ASC,
|
|
22
|
+
[row_num] ASC
|
|
23
|
+
) ON [PRIMARY]
|
|
24
|
+
) ON [PRIMARY]
|
|
25
|
+
GO
|
|
26
|
+
|
|
27
|
+
USE [qualiex_common]
|
|
28
|
+
GO
|
|
29
|
+
|
|
30
|
+
CREATE OR ALTER PROCEDURE [import].[validate_occurrences_types]
|
|
31
|
+
@id_batch UNIQUEIDENTIFIER
|
|
32
|
+
AS
|
|
33
|
+
BEGIN
|
|
34
|
+
SET NOCOUNT ON;
|
|
35
|
+
|
|
36
|
+
-- Validação 1: Nome duplicado no arquivo
|
|
37
|
+
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
38
|
+
SELECT @id_batch, sub.row_num, 'Nome duplicado no arquivo'
|
|
39
|
+
FROM (
|
|
40
|
+
SELECT *, COUNT(*) OVER (PARTITION BY name) AS cnt
|
|
41
|
+
FROM import.occurrences_types_staging WITH (NOLOCK)
|
|
42
|
+
WHERE id_batch = @id_batch
|
|
43
|
+
) sub
|
|
44
|
+
WHERE sub.cnt > 1;
|
|
45
|
+
|
|
46
|
+
-- Validação 2: Nome já existente na produção
|
|
47
|
+
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
48
|
+
SELECT @id_batch, ots.row_num, 'Tipo de ocorrência já existe na base para esta unidade'
|
|
49
|
+
FROM import.occurrences_types_staging ots WITH (NOLOCK)
|
|
50
|
+
INNER JOIN occurrences.types ot WITH (NOLOCK)
|
|
51
|
+
ON ot.name COLLATE Latin1_General_CS_AS = ots.name
|
|
52
|
+
AND ot.id_company COLLATE Latin1_General_CS_AS = ots.id_company
|
|
53
|
+
AND ot.removed = 0
|
|
54
|
+
WHERE ots.id_batch = @id_batch;
|
|
55
|
+
|
|
56
|
+
-- Validação 3: Situação (is_active) inválida
|
|
57
|
+
INSERT INTO import.errors (id_batch, row_num, error_msg)
|
|
58
|
+
SELECT @id_batch, ots.row_num, 'Situação inválida (selecione Ativo ou Inativo na planilha)'
|
|
59
|
+
FROM import.occurrences_types_staging ots WITH (NOLOCK)
|
|
60
|
+
WHERE ots.id_batch = @id_batch
|
|
61
|
+
AND ISNULL(ots.is_active, '') NOT IN ('Ativo', 'Inativo');
|
|
62
|
+
|
|
63
|
+
INSERT INTO occurrences.types
|
|
64
|
+
(
|
|
65
|
+
id_company, name, description, color, is_active,
|
|
66
|
+
creation_date, last_modified, removed
|
|
67
|
+
)
|
|
68
|
+
SELECT
|
|
69
|
+
ots.id_company,
|
|
70
|
+
ots.name,
|
|
71
|
+
NULLIF(ots.description, '') AS description,
|
|
72
|
+
NULLIF(ots.color, '') AS color,
|
|
73
|
+
CASE WHEN ots.is_active = 'Inativo' THEN 0 ELSE 1 END AS is_active,
|
|
74
|
+
SYSDATETIMEOFFSET() AS creation_date,
|
|
75
|
+
SYSDATETIMEOFFSET() AS last_modified,
|
|
76
|
+
0 AS removed
|
|
77
|
+
FROM import.occurrences_types_staging ots WITH (NOLOCK)
|
|
78
|
+
WHERE ots.id_batch = @id_batch
|
|
79
|
+
AND NOT EXISTS (
|
|
80
|
+
SELECT 1
|
|
81
|
+
FROM import.errors e
|
|
82
|
+
WHERE e.id_batch = ots.id_batch
|
|
83
|
+
AND e.row_num = ots.row_num
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
END
|
|
87
|
+
GO
|
|
88
|
+
|
|
89
|
+
USE [qualiex_common]
|
|
90
|
+
GO
|
|
91
|
+
|
|
92
|
+
CREATE OR ALTER PROCEDURE [import].[get_errors_occurrences_types]
|
|
93
|
+
(
|
|
94
|
+
@id_batch UNIQUEIDENTIFIER
|
|
95
|
+
)
|
|
96
|
+
AS
|
|
97
|
+
BEGIN
|
|
98
|
+
SET NOCOUNT ON;
|
|
99
|
+
|
|
100
|
+
SELECT
|
|
101
|
+
STRING_AGG(CAST(e.error_msg AS NVARCHAR(MAX)), '; ') WITHIN GROUP (ORDER BY e.error_msg) AS error_msg,
|
|
102
|
+
e.row_num,
|
|
103
|
+
ots.name,
|
|
104
|
+
ots.id_creation_user
|
|
105
|
+
FROM import.errors e WITH (NOLOCK)
|
|
106
|
+
JOIN import.occurrences_types_staging ots WITH (NOLOCK)
|
|
107
|
+
ON ots.row_num = e.row_num
|
|
108
|
+
AND ots.id_batch = e.id_batch
|
|
109
|
+
WHERE e.id_batch = @id_batch
|
|
110
|
+
GROUP BY e.row_num, ots.name, ots.id_creation_user
|
|
111
|
+
ORDER BY e.row_num;
|
|
112
|
+
END
|
|
113
|
+
GO
|