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