Pull request #31: rename project and ruleSet
Merge in RED/redaction-report-service from RED-1329 to master * commit 'b275e30062865af796b9685b946dc4ae9a2e82d9': rename project and ruleSet
This commit is contained in:
commit
0f236f4104
@ -20,7 +20,9 @@ public class ReportRequestMessage {
|
||||
|
||||
private String downloadId;
|
||||
|
||||
private String projectId;
|
||||
private String dossierId;
|
||||
|
||||
private String dossierTemplateId;
|
||||
|
||||
@Builder.Default
|
||||
private List<String> fileIds = new ArrayList<>();
|
||||
|
||||
@ -24,7 +24,7 @@
|
||||
<dependency>
|
||||
<groupId>com.iqser.red.service</groupId>
|
||||
<artifactId>redaction-service-api-v1</artifactId>
|
||||
<version>2.9.0</version>
|
||||
<version>2.15.0</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>com.iqser.red.service</groupId>
|
||||
@ -34,13 +34,17 @@
|
||||
<groupId>com.iqser.red.service</groupId>
|
||||
<artifactId>file-management-service-api-v1</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>com.iqser.red.service</groupId>
|
||||
<artifactId>configuration-service-api-v1</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.iqser.red.service</groupId>
|
||||
<artifactId>configuration-service-api-v1</artifactId>
|
||||
<version>2.8.0</version>
|
||||
<version>2.11.0</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>com.iqser.red.service</groupId>
|
||||
@ -57,7 +61,7 @@
|
||||
<dependency>
|
||||
<groupId>com.iqser.red.service</groupId>
|
||||
<artifactId>file-management-service-api-v1</artifactId>
|
||||
<version>2.21.0</version>
|
||||
<version>2.25.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package com.iqser.red.service.redaction.report.v1.server;
|
||||
|
||||
import com.iqser.red.commons.spring.DefaultWebMvcConfiguration;
|
||||
import com.iqser.red.service.redaction.report.v1.server.client.ProjectClient;
|
||||
import com.iqser.red.service.redaction.report.v1.server.client.DossierClient;
|
||||
import com.iqser.red.service.redaction.report.v1.server.configuration.MessagingConfiguration;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration;
|
||||
@ -14,7 +14,7 @@ import org.springframework.scheduling.annotation.EnableAsync;
|
||||
@EnableAsync
|
||||
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class})
|
||||
@Import({DefaultWebMvcConfiguration.class, MessagingConfiguration.class})
|
||||
@EnableFeignClients(basePackageClasses = {ProjectClient.class})
|
||||
@EnableFeignClients(basePackageClasses = {DossierClient.class})
|
||||
public class Application {
|
||||
|
||||
/**
|
||||
|
||||
@ -0,0 +1,9 @@
|
||||
package com.iqser.red.service.redaction.report.v1.server.client;
|
||||
|
||||
import com.iqser.red.service.file.management.v1.api.resources.DossierResource;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
|
||||
@FeignClient(name = "DossierResource", url = "${file-management-service.url}")
|
||||
public interface DossierClient extends DossierResource {
|
||||
|
||||
}
|
||||
@ -1,9 +0,0 @@
|
||||
package com.iqser.red.service.redaction.report.v1.server.client;
|
||||
|
||||
import com.iqser.red.service.file.management.v1.api.resources.ProjectResource;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
|
||||
@FeignClient(name = "ProjectResource", url = "${file-management-service.url}")
|
||||
public interface ProjectClient extends ProjectResource {
|
||||
|
||||
}
|
||||
@ -2,12 +2,12 @@ package com.iqser.red.service.redaction.report.v1.server.service;
|
||||
|
||||
import com.iqser.red.service.configuration.v1.api.model.LegalBasisMapping;
|
||||
import com.iqser.red.service.file.management.v1.api.model.FileStatus;
|
||||
import com.iqser.red.service.file.management.v1.api.model.Project;
|
||||
import com.iqser.red.service.file.management.v1.api.model.Dossier;
|
||||
import com.iqser.red.service.redaction.report.v1.api.model.ReportRequestMessage;
|
||||
import com.iqser.red.service.redaction.report.v1.api.model.ReportType;
|
||||
import com.iqser.red.service.redaction.report.v1.api.model.StoredFileInformation;
|
||||
import com.iqser.red.service.redaction.report.v1.server.client.FileStatusClient;
|
||||
import com.iqser.red.service.redaction.report.v1.server.client.ProjectClient;
|
||||
import com.iqser.red.service.redaction.report.v1.server.client.DossierClient;
|
||||
import com.iqser.red.service.redaction.report.v1.server.model.ReportRedactionEntry;
|
||||
import com.iqser.red.service.redaction.report.v1.server.storage.ReportStorageService;
|
||||
import com.iqser.red.service.redaction.v1.model.RedactionLog;
|
||||
@ -31,7 +31,7 @@ public class ReportGenerationService {
|
||||
private final WordReportGenerationService wordReportGenerationService;
|
||||
private final RedactionLogConverterService redactionLogConverterService;
|
||||
private final FileStatusClient fileStatusClient;
|
||||
private final ProjectClient projectClient;
|
||||
private final DossierClient projectClient;
|
||||
|
||||
|
||||
public List<StoredFileInformation> generateReport(ReportRequestMessage reportMessage) {
|
||||
@ -47,15 +47,15 @@ public class ReportGenerationService {
|
||||
|
||||
List<StoredFileInformation> storedFileInformation = new ArrayList<>();
|
||||
|
||||
Project project = projectClient.getProjectById(reportMessage.getProjectId());
|
||||
Dossier project = projectClient.getDossierById(reportMessage.getDossierId());
|
||||
|
||||
int i = 1;
|
||||
for (String fileId : reportMessage.getFileIds()) {
|
||||
|
||||
FileStatus fileStatus = fileStatusClient.getFileStatus(reportMessage.getProjectId(), fileId);
|
||||
FileStatus fileStatus = fileStatusClient.getFileStatus(reportMessage.getDossierId(), fileId);
|
||||
|
||||
long start = System.currentTimeMillis();
|
||||
RedactionLog redactionLog = reportStorageService.getRedactionLog(reportMessage.getProjectId(), fileId);
|
||||
RedactionLog redactionLog = reportStorageService.getRedactionLog(reportMessage.getDossierId(), fileId);
|
||||
List<LegalBasisMapping> legalBasisMappings = redactionLog.getLegalBasis();
|
||||
|
||||
List<ReportRedactionEntry> reportEntries = redactionLogConverterService.convertAndSort(redactionLog, legalBasisMappings);
|
||||
@ -71,20 +71,20 @@ public class ReportGenerationService {
|
||||
}
|
||||
|
||||
for (String templateId : reportMessage.getTemplateIds()) {
|
||||
byte[] template = wordReportGenerationService.generateReport(ReportType.WORD_SINGLE_FILE, reportEntries, redactionLog.getRuleSetId(), templateId, fileStatus, project);
|
||||
byte[] template = wordReportGenerationService.generateReport(ReportType.WORD_SINGLE_FILE, reportEntries, reportMessage.getDossierTemplateId(), templateId, fileStatus, project);
|
||||
String storageId = reportStorageService.storeObject(reportMessage.getDownloadId(), template);
|
||||
storedFileInformation.add(new StoredFileInformation(fileId, storageId, ReportType.WORD_SINGLE_FILE, templateId));
|
||||
}
|
||||
if (reportMessage.getReportTypes().contains(ReportType.WORD_SINGLE_FILE_APPENDIX_A1_TEMPLATE)) {
|
||||
byte[] wordEFSATemplate = wordReportGenerationService.generateReport(ReportType.WORD_SINGLE_FILE_APPENDIX_A1_TEMPLATE,
|
||||
reportEntries, redactionLog.getRuleSetId(), null, fileStatus, project);
|
||||
reportEntries, reportMessage.getDossierTemplateId(), null, fileStatus, project);
|
||||
String storageId = reportStorageService.storeObject(reportMessage.getDownloadId(), wordEFSATemplate);
|
||||
storedFileInformation.add(new StoredFileInformation(fileId, storageId, ReportType.WORD_SINGLE_FILE_APPENDIX_A1_TEMPLATE, null));
|
||||
}
|
||||
|
||||
if (reportMessage.getReportTypes().contains(ReportType.WORD_SINGLE_FILE_APPENDIX_A2_TEMPLATE)) {
|
||||
byte[] wordSyngentaTemplate = wordReportGenerationService.generateReport(ReportType.WORD_SINGLE_FILE_APPENDIX_A2_TEMPLATE,
|
||||
reportEntries, redactionLog.getRuleSetId(), null, fileStatus, project);
|
||||
reportEntries, reportMessage.getDossierTemplateId(), null, fileStatus, project);
|
||||
String storageId = reportStorageService.storeObject(reportMessage.getDownloadId(), wordSyngentaTemplate);
|
||||
storedFileInformation.add(new StoredFileInformation(fileId, storageId, ReportType.WORD_SINGLE_FILE_APPENDIX_A2_TEMPLATE, null));
|
||||
}
|
||||
|
||||
@ -2,7 +2,7 @@ package com.iqser.red.service.redaction.report.v1.server.service;
|
||||
|
||||
import com.iqser.red.service.configuration.v1.api.model.FileAttributesConfig;
|
||||
import com.iqser.red.service.file.management.v1.api.model.FileStatus;
|
||||
import com.iqser.red.service.file.management.v1.api.model.Project;
|
||||
import com.iqser.red.service.file.management.v1.api.model.Dossier;
|
||||
import com.iqser.red.service.file.management.v1.api.model.ReportTemplate;
|
||||
import com.iqser.red.service.redaction.report.v1.api.model.ReportType;
|
||||
import com.iqser.red.service.redaction.report.v1.server.client.FileAttributesClient;
|
||||
@ -59,9 +59,9 @@ public class WordReportGenerationService {
|
||||
}
|
||||
|
||||
|
||||
public byte[] generateReport(ReportType reportType, List<ReportRedactionEntry> reportEntries, String ruleSetId, String templateId, FileStatus fileStatus, Project project) {
|
||||
public byte[] generateReport(ReportType reportType, List<ReportRedactionEntry> reportEntries, String dossierTemplateId, String templateId, FileStatus fileStatus, Dossier project) {
|
||||
List<String> placeholders = getDefaultPlaceholders();
|
||||
Map<String, String> fileAttributePlaceholders = getFileAttributePlaceholders(ruleSetId);
|
||||
Map<String, String> fileAttributePlaceholders = getFileAttributePlaceholders(dossierTemplateId);
|
||||
placeholders.addAll(fileAttributePlaceholders.keySet());
|
||||
|
||||
byte[] template;
|
||||
@ -71,7 +71,7 @@ public class WordReportGenerationService {
|
||||
} else if (reportType.equals(ReportType.WORD_SINGLE_FILE_APPENDIX_A2_TEMPLATE)) {
|
||||
template = appendixA2Template;
|
||||
} else {
|
||||
ReportTemplate reportTemplate= reportTemplateClient.getReportTemplate(ruleSetId, templateId);
|
||||
ReportTemplate reportTemplate= reportTemplateClient.getReportTemplate(dossierTemplateId, templateId);
|
||||
String storageId = reportTemplate.getStorageId();
|
||||
template = reportStorageService.getReportTemplate(storageId);
|
||||
}
|
||||
@ -99,17 +99,17 @@ public class WordReportGenerationService {
|
||||
return defPlaceholders;
|
||||
}
|
||||
|
||||
private Map<String, String> getFileAttributePlaceholders(String ruleSetId) {
|
||||
private Map<String, String> getFileAttributePlaceholders(String dossierTemplateId) {
|
||||
Map<String, String> fileAttributePlaceholders = new HashMap<>();
|
||||
|
||||
FileAttributesConfig fileAttributesConfig = fileAttributesClient.getFileAttributes(ruleSetId);
|
||||
FileAttributesConfig fileAttributesConfig = fileAttributesClient.getFileAttributes(dossierTemplateId);
|
||||
fileAttributesConfig.getFileAttributeConfigs().forEach(fileAttributeConfig -> {
|
||||
fileAttributePlaceholders.put(fileAttributeConfig.getPlaceholder(), fileAttributeConfig.getId());
|
||||
});
|
||||
return fileAttributePlaceholders;
|
||||
}
|
||||
|
||||
private String getPlaceholderValue(String placeholder, Project project, FileStatus fileStatus, Map<String, String> fileAttributePlaceholders) {
|
||||
private String getPlaceholderValue(String placeholder, Dossier project, FileStatus fileStatus, Map<String, String> fileAttributePlaceholders) {
|
||||
if (placeholder.equals(FORMAT_DATE_ISO_PLACEHOLDER)) {
|
||||
return OffsetDateTime.now().format(FORMAT_DATE_ISO);
|
||||
}
|
||||
@ -123,7 +123,7 @@ public class WordReportGenerationService {
|
||||
return OffsetDateTime.now().format(FORMAT_TIME_ISO);
|
||||
}
|
||||
if (placeholder.equals(DOSSIER_NAME_PLACEHOLDER)) {
|
||||
return project.getProjectName();
|
||||
return project.getDossierName();
|
||||
}
|
||||
if (placeholder.equals(FILE_NAME_PLACEHOLDER)) {
|
||||
return fileStatus.getFilename();
|
||||
@ -269,4 +269,4 @@ public class WordReportGenerationService {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -20,9 +20,9 @@ public class ReportStorageService {
|
||||
private final ObjectMapper objectMapper;
|
||||
|
||||
|
||||
public RedactionLog getRedactionLog(String projectId, String fileId) {
|
||||
public RedactionLog getRedactionLog(String dossierId, String fileId) {
|
||||
|
||||
var redactionLog = storageService.getObject(StorageIdUtils.getRedactionLogStorageId(projectId, fileId));
|
||||
var redactionLog = storageService.getObject(StorageIdUtils.getRedactionLogStorageId(dossierId, fileId));
|
||||
try {
|
||||
return objectMapper.readValue(redactionLog.getInputStream(), RedactionLog.class);
|
||||
} catch (IOException e) {
|
||||
|
||||
@ -2,9 +2,9 @@ package com.iqser.red.service.redaction.report.v1.server.storage;
|
||||
|
||||
public class StorageIdUtils {
|
||||
|
||||
public static String getRedactionLogStorageId(String projectId, String fileId) {
|
||||
public static String getRedactionLogStorageId(String dossierId, String fileId) {
|
||||
|
||||
return projectId + "/" + fileId + ".REDACTION_LOG.json";
|
||||
return dossierId + "/" + fileId + ".REDACTION_LOG.json";
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -6,9 +6,9 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.iqser.red.service.configuration.v1.api.model.FileAttributeConfig;
|
||||
import com.iqser.red.service.configuration.v1.api.model.FileAttributesConfig;
|
||||
import com.iqser.red.service.configuration.v1.api.model.LegalBasisMapping;
|
||||
import com.iqser.red.service.file.management.v1.api.model.Dossier;
|
||||
import com.iqser.red.service.file.management.v1.api.model.FileAttributes;
|
||||
import com.iqser.red.service.file.management.v1.api.model.FileStatus;
|
||||
import com.iqser.red.service.file.management.v1.api.model.Project;
|
||||
import com.iqser.red.service.file.management.v1.api.model.ReportTemplate;
|
||||
import com.iqser.red.service.redaction.report.v1.api.model.ReportType;
|
||||
import com.iqser.red.service.redaction.report.v1.server.client.FileAttributesClient;
|
||||
@ -78,6 +78,8 @@ public class RedactionReportIntegrationTest {
|
||||
@Test
|
||||
public void testWordReportGeneration() throws IOException {
|
||||
|
||||
String dossierTemplateId = "dossierTemplateId";
|
||||
|
||||
ClassPathResource redactionLogResource = new ClassPathResource("files/redactionLog.json");
|
||||
|
||||
RedactionLog redactionLog = objectMapper.readValue(redactionLogResource.getInputStream(), RedactionLog.class);
|
||||
@ -93,7 +95,7 @@ public class RedactionReportIntegrationTest {
|
||||
List<FileAttributeConfig> fileAttributeConfigs = new ArrayList<>();
|
||||
fileAttributeConfigs.add(new FileAttributeConfig("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "", "Document Title", true, true, FileAttributeConfig.FileAttributeType.TEXT, "{{file.attribute.placeholder}}"));
|
||||
FileAttributesConfig fileAttributesConfig = new FileAttributesConfig("", "", fileAttributeConfigs);
|
||||
when(fileAttributesClient.getFileAttributes(redactionLog.getRuleSetId())).thenReturn(fileAttributesConfig);
|
||||
when(fileAttributesClient.getFileAttributes(dossierTemplateId)).thenReturn(fileAttributesConfig);
|
||||
|
||||
Map<String, String> attributeIdToValue = new HashMap();
|
||||
attributeIdToValue.put("3e9b9569-5d2e-4619-848b-dd0a3e96527f", "Test");
|
||||
@ -101,16 +103,16 @@ public class RedactionReportIntegrationTest {
|
||||
FileAttributes fileAttributes = new FileAttributes(attributeIdToValue);
|
||||
FileStatus fileStatus = FileStatus.builder().filename("filename").fileAttributes(fileAttributes).build();
|
||||
|
||||
Project project = Project.builder().projectId("projectId").projectName("projectName").build();
|
||||
Dossier project = Dossier.builder().dossierId("dossierId").dossierName("projectName").build();
|
||||
|
||||
String templateId = "templateId";
|
||||
String storageId = "storageId";
|
||||
when(reportTemplateClient.getReportTemplate(redactionLog.getRuleSetId(), templateId)).thenReturn(ReportTemplate.builder().storageId(storageId).build());
|
||||
when(reportTemplateClient.getReportTemplate(dossierTemplateId, templateId)).thenReturn(ReportTemplate.builder().dossierTemplateId(dossierTemplateId).storageId(storageId).build());
|
||||
|
||||
ClassPathResource templateResource = new ClassPathResource("templates/TEST_TEMPLATE.docx");
|
||||
when(reportStorageService.getReportTemplate(storageId)).thenReturn(IOUtils.toByteArray(templateResource.getInputStream()));
|
||||
byte[] report = wordReportGenerationService.generateReport(ReportType.WORD_SINGLE_FILE, reportEntries, redactionLog
|
||||
.getRuleSetId(), templateId, fileStatus, project);
|
||||
byte[] report = wordReportGenerationService.generateReport(ReportType.WORD_SINGLE_FILE, reportEntries, dossierTemplateId
|
||||
, templateId, fileStatus, project);
|
||||
|
||||
try (FileOutputStream fileOutputStream = new FileOutputStream("/tmp/efsa_template.docx")) {
|
||||
fileOutputStream.write(report);
|
||||
@ -121,7 +123,7 @@ public class RedactionReportIntegrationTest {
|
||||
@Test
|
||||
public void testExcelReportGeneration() throws IOException {
|
||||
|
||||
ClassPathResource redactionLogResource = new ClassPathResource("files/RedactedLog.txt");
|
||||
ClassPathResource redactionLogResource = new ClassPathResource("files/excelReportRedactionLog.json");
|
||||
|
||||
RedactionLog redactionLog = objectMapper.readValue(redactionLogResource.getInputStream(), RedactionLog.class);
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,348 @@
|
||||
{
|
||||
"redactionLogEntry": [
|
||||
{
|
||||
"id": "ba922aabe15e334569dc06b212b3a15b",
|
||||
"type": "address",
|
||||
"value": "regina.dorn@syngenta.com",
|
||||
"reason": "Applicant information was found",
|
||||
"matchedRule": 6,
|
||||
"legalBasis": "Reg (EC) No 1107/2009 Art. 63 (2g)",
|
||||
"redacted": true,
|
||||
"section": "B.1 Identity",
|
||||
"color": [
|
||||
0.0,
|
||||
1.0,
|
||||
1.0
|
||||
],
|
||||
"positions": [
|
||||
{
|
||||
"topLeft": {
|
||||
"x": 147.86,
|
||||
"y": 517.43
|
||||
},
|
||||
"width": 122.451065,
|
||||
"height": 11.017679,
|
||||
"page": 4
|
||||
}
|
||||
],
|
||||
"sectionNumber": 13,
|
||||
"manual": false,
|
||||
"status": null,
|
||||
"manualRedactionType": null,
|
||||
"hint": false
|
||||
},
|
||||
{
|
||||
"id": "b841bb2734863a14e95cb15efdf98172",
|
||||
"type": "address",
|
||||
"value": "+41 (61) 323 6358",
|
||||
"reason": "Applicant information was found",
|
||||
"matchedRule": 6,
|
||||
"legalBasis": "Reg (EC) No 1107/2009 Art. 63 (2g)",
|
||||
"redacted": true,
|
||||
"section": "B.1 Identity",
|
||||
"color": [
|
||||
0.0,
|
||||
1.0,
|
||||
1.0
|
||||
],
|
||||
"positions": [
|
||||
{
|
||||
"topLeft": {
|
||||
"x": 147.86,
|
||||
"y": 542.75
|
||||
},
|
||||
"width": 83.41362,
|
||||
"height": 11.017679,
|
||||
"page": 4
|
||||
}
|
||||
],
|
||||
"sectionNumber": 13,
|
||||
"manual": false,
|
||||
"status": null,
|
||||
"manualRedactionType": null,
|
||||
"hint": false
|
||||
},
|
||||
{
|
||||
"id": "d39269482f83c64453153826d8de0a5f",
|
||||
"type": "address",
|
||||
"value": "Patrick Gardinal",
|
||||
"reason": "Producer was found",
|
||||
"matchedRule": 7,
|
||||
"legalBasis": "Reg (EC) No 1107/2009 Art. 63 (2g)",
|
||||
"redacted": true,
|
||||
"section": "B.1.1.2 Producer of the plant protection product",
|
||||
"color": [
|
||||
0.0,
|
||||
1.0,
|
||||
1.0
|
||||
],
|
||||
"positions": [
|
||||
{
|
||||
"topLeft": {
|
||||
"x": 148.94,
|
||||
"y": 404.39
|
||||
},
|
||||
"width": 73.40033,
|
||||
"height": 11.017679,
|
||||
"page": 4
|
||||
}
|
||||
],
|
||||
"sectionNumber": 14,
|
||||
"manual": false,
|
||||
"status": null,
|
||||
"manualRedactionType": null,
|
||||
"hint": false
|
||||
},
|
||||
{
|
||||
"id": "9ddda875972c0fbcda02ae551cd0d07a",
|
||||
"type": "address",
|
||||
"value": "+41 (0) 61 323 60 51",
|
||||
"reason": "Producer was found",
|
||||
"matchedRule": 7,
|
||||
"legalBasis": "Reg (EC) No 1107/2009 Art. 63 (2g)",
|
||||
"redacted": true,
|
||||
"section": "B.1.1.2 Producer of the plant protection product",
|
||||
"color": [
|
||||
0.0,
|
||||
1.0,
|
||||
1.0
|
||||
],
|
||||
"positions": [
|
||||
{
|
||||
"topLeft": {
|
||||
"x": 148.94,
|
||||
"y": 328.53
|
||||
},
|
||||
"width": 94.33217,
|
||||
"height": 11.017679,
|
||||
"page": 4
|
||||
}
|
||||
],
|
||||
"sectionNumber": 14,
|
||||
"manual": false,
|
||||
"status": null,
|
||||
"manualRedactionType": null,
|
||||
"hint": false
|
||||
},
|
||||
{
|
||||
"id": "9e289c70c17cb2b3bf7c96b070d44533",
|
||||
"type": "address",
|
||||
"value": "patrick.gardinal@syngenta.com",
|
||||
"reason": "Producer was found",
|
||||
"matchedRule": 7,
|
||||
"legalBasis": "Reg (EC) No 1107/2009 Art. 63 (2g)",
|
||||
"redacted": true,
|
||||
"section": "B.1.1.2 Producer of the plant protection product",
|
||||
"color": [
|
||||
0.0,
|
||||
1.0,
|
||||
1.0
|
||||
],
|
||||
"positions": [
|
||||
{
|
||||
"topLeft": {
|
||||
"x": 148.94,
|
||||
"y": 303.21002
|
||||
},
|
||||
"width": 141.26324,
|
||||
"height": 11.017679,
|
||||
"page": 4
|
||||
}
|
||||
],
|
||||
"sectionNumber": 14,
|
||||
"manual": false,
|
||||
"status": null,
|
||||
"manualRedactionType": null,
|
||||
"hint": false
|
||||
},
|
||||
{
|
||||
"id": "10a4893ec30e268c951b8026e0dc3e11",
|
||||
"type": "address",
|
||||
"value": "Syngenta Crop Protection AG",
|
||||
"reason": "Applicant information was found",
|
||||
"matchedRule": 6,
|
||||
"legalBasis": "Reg (EC) No 1107/2009 Art. 63 (2g)",
|
||||
"redacted": true,
|
||||
"section": "B.1 Identity",
|
||||
"color": [
|
||||
0.0,
|
||||
1.0,
|
||||
1.0
|
||||
],
|
||||
"positions": [
|
||||
{
|
||||
"topLeft": {
|
||||
"x": 147.86,
|
||||
"y": 631.34
|
||||
},
|
||||
"width": 133.3113,
|
||||
"height": 11.017679,
|
||||
"page": 4
|
||||
}
|
||||
],
|
||||
"sectionNumber": 13,
|
||||
"manual": false,
|
||||
"status": null,
|
||||
"manualRedactionType": null,
|
||||
"hint": false
|
||||
},
|
||||
{
|
||||
"id": "86b754bc4e70f45038b465a66c0e927b",
|
||||
"type": "address",
|
||||
"value": "Regina Dorn",
|
||||
"reason": "Applicant information was found",
|
||||
"matchedRule": 6,
|
||||
"legalBasis": "Reg (EC) No 1107/2009 Art. 63 (2g)",
|
||||
"redacted": true,
|
||||
"section": "B.1 Identity",
|
||||
"color": [
|
||||
0.0,
|
||||
1.0,
|
||||
1.0
|
||||
],
|
||||
"positions": [
|
||||
{
|
||||
"topLeft": {
|
||||
"x": 147.86,
|
||||
"y": 555.47
|
||||
},
|
||||
"width": 57.624176,
|
||||
"height": 11.017679,
|
||||
"page": 4
|
||||
}
|
||||
],
|
||||
"sectionNumber": 13,
|
||||
"manual": false,
|
||||
"status": null,
|
||||
"manualRedactionType": null,
|
||||
"hint": false
|
||||
},
|
||||
{
|
||||
"id": "fd367ab592da09165d1bcd52cfddaf68",
|
||||
"type": "address",
|
||||
"value": "Syngenta Crop Protection AG",
|
||||
"reason": "Producer was found",
|
||||
"matchedRule": 7,
|
||||
"legalBasis": "Reg (EC) No 1107/2009 Art. 63 (2g)",
|
||||
"redacted": true,
|
||||
"section": "B.1.1.2 Producer of the plant protection product",
|
||||
"color": [
|
||||
0.0,
|
||||
1.0,
|
||||
1.0
|
||||
],
|
||||
"positions": [
|
||||
{
|
||||
"topLeft": {
|
||||
"x": 148.94,
|
||||
"y": 455.03
|
||||
},
|
||||
"width": 133.34088,
|
||||
"height": 11.017679,
|
||||
"page": 4
|
||||
}
|
||||
],
|
||||
"sectionNumber": 14,
|
||||
"manual": false,
|
||||
"status": null,
|
||||
"manualRedactionType": null,
|
||||
"hint": false
|
||||
},
|
||||
{
|
||||
"id": "3ae8841f1e9a6e022af1880aaa2853ef",
|
||||
"type": "address",
|
||||
"value": "Syngenta Crop Protection AG",
|
||||
"reason": "Producer was found",
|
||||
"matchedRule": 7,
|
||||
"legalBasis": "Reg (EC) No 1107/2009 Art. 63 (2g)",
|
||||
"redacted": true,
|
||||
"section": "B.1.1.2 Producer of the plant protection product",
|
||||
"color": [
|
||||
0.0,
|
||||
1.0,
|
||||
1.0
|
||||
],
|
||||
"positions": [
|
||||
{
|
||||
"topLeft": {
|
||||
"x": 148.94,
|
||||
"y": 391.77
|
||||
},
|
||||
"width": 133.23718,
|
||||
"height": 11.017679,
|
||||
"page": 4
|
||||
}
|
||||
],
|
||||
"sectionNumber": 14,
|
||||
"manual": false,
|
||||
"status": null,
|
||||
"manualRedactionType": null,
|
||||
"hint": false
|
||||
},
|
||||
{
|
||||
"id": "027e744e97c8c1cecb974023f8792055",
|
||||
"type": "address",
|
||||
"value": "+41 (61) 323 6155",
|
||||
"reason": "Applicant information was found",
|
||||
"matchedRule": 6,
|
||||
"legalBasis": "Reg (EC) No 1107/2009 Art. 63 (2g)",
|
||||
"redacted": true,
|
||||
"section": "B.1 Identity",
|
||||
"color": [
|
||||
0.0,
|
||||
1.0,
|
||||
1.0
|
||||
],
|
||||
"positions": [
|
||||
{
|
||||
"topLeft": {
|
||||
"x": 147.86,
|
||||
"y": 530.15
|
||||
},
|
||||
"width": 83.41362,
|
||||
"height": 11.017679,
|
||||
"page": 4
|
||||
}
|
||||
],
|
||||
"sectionNumber": 13,
|
||||
"manual": false,
|
||||
"status": null,
|
||||
"manualRedactionType": null,
|
||||
"hint": false
|
||||
},
|
||||
{
|
||||
"id": "a022f9ecad5b06f9da7bc2ebdcc97c17",
|
||||
"type": "address",
|
||||
"value": "+41 (0) 61 323 61 55",
|
||||
"reason": "Producer was found",
|
||||
"matchedRule": 7,
|
||||
"legalBasis": "Reg (EC) No 1107/2009 Art. 63 (2g)",
|
||||
"redacted": true,
|
||||
"section": "B.1.1.2 Producer of the plant protection product",
|
||||
"color": [
|
||||
0.0,
|
||||
1.0,
|
||||
1.0
|
||||
],
|
||||
"positions": [
|
||||
{
|
||||
"topLeft": {
|
||||
"x": 148.94,
|
||||
"y": 315.81
|
||||
},
|
||||
"width": 94.33217,
|
||||
"height": 11.017679,
|
||||
"page": 4
|
||||
}
|
||||
],
|
||||
"sectionNumber": 14,
|
||||
"manual": false,
|
||||
"status": null,
|
||||
"manualRedactionType": null,
|
||||
"hint": false
|
||||
}
|
||||
],
|
||||
"dictionaryVersion": 0,
|
||||
"rulesVersion": 0,
|
||||
"filename": null
|
||||
}
|
||||
@ -1 +1,42 @@
|
||||
[{"name":"1. personal data (incl. geolocation)","description":"any other personal data except for\n a. the name and address of the applicant;\n b. the names of authors of published or publicly available studies supporting such requests; and the names of all participants and observers in meetings of the Scientific Committee and the Scientific Panels, their working groups and any other ad hoc group meeting on the subject matter.\nand except for personal data (names and addresses) of individuals involved in testing on vertebrate studies or in obtaining toxicological information","reason":"Article 39(e)(1) and Article 39(e)(2) of Regulation (EC) No 178/2002"},{"name":"2. manufacturing or production process","description":"the manufacturing or production process, including the method and innovative aspects thereof, as well as other technical and industrial specifications inherent to that process or method, except for information which is relevant to the assessment of safety","reason":"Article 63(2)(a) of Regulation (EC) No 1107/2009 (making reference to Article 39 of Regulation EC No 178/2002)"},{"name":"3. links between a producer and applicant","description":"commercial links between a producer or importer and the applicant or the authorisation holder, where applicable;","reason":"Article 63(2)(a) of Regulation (EC) No 1107/2009 (making reference to Article 39 of Regulation EC No 178/2002)"},{"name":"4. commercial information","description":"commercial information revealing sourcing, market shares or business strategy of the applicant","reason":"Article 63(2)(a) of Regulation (EC) No 1107/2009 (making reference to Article 39 of Regulation EC No 178/2002)"},{"name":"5. quantitative composition","description":"quantitative composition of the subject matter of the request, except for information which is relevant to the assessment of safety","reason":"Article 63(2)(a) of Regulation (EC) No 1107/2009 (making reference to Article 39 of Regulation EC No 178/2002)"},{"name":"6. specification of impurity","description":"the specification of impurity of the active substance and the related methods of analysis for impurities in the active substance as manufactured, except for the impurities that are considered to be toxicologically, ecotoxicologically or environmentally relevant and the related methods of analysis for such impurities","reason":"Article 63(2)(b) of Regulation (EC) No 1107/2009"},{"name":"7. results of production batches","description":"results of production batches of the active substance including impurities","reason":"Article 63(2)(c) of Regulation (EC) No 1107/2009"},{"name":"8. composition of a plant protection product","description":"information on the complete composition of a plant protection product","reason":"Article 63(2)(d) of Regulation (EC) No 1107/2009"}]
|
||||
[
|
||||
{
|
||||
"name": "1. personal data (incl. geolocation)",
|
||||
"description": "any other personal data except for\n a. the name and address of the applicant;\n b. the names of authors of published or publicly available studies supporting such requests; and the names of all participants and observers in meetings of the Scientific Committee and the Scientific Panels, their working groups and any other ad hoc group meeting on the subject matter.\nand except for personal data (names and addresses) of individuals involved in testing on vertebrate studies or in obtaining toxicological information",
|
||||
"reason": "Article 39(e)(1) and Article 39(e)(2) of Regulation (EC) No 178/2002"
|
||||
},
|
||||
{
|
||||
"name": "2. manufacturing or production process",
|
||||
"description": "the manufacturing or production process, including the method and innovative aspects thereof, as well as other technical and industrial specifications inherent to that process or method, except for information which is relevant to the assessment of safety",
|
||||
"reason": "Article 63(2)(a) of Regulation (EC) No 1107/2009 (making reference to Article 39 of Regulation EC No 178/2002)"
|
||||
},
|
||||
{
|
||||
"name": "3. links between a producer and applicant",
|
||||
"description": "commercial links between a producer or importer and the applicant or the authorisation holder, where applicable;",
|
||||
"reason": "Article 63(2)(a) of Regulation (EC) No 1107/2009 (making reference to Article 39 of Regulation EC No 178/2002)"
|
||||
},
|
||||
{
|
||||
"name": "4. commercial information",
|
||||
"description": "commercial information revealing sourcing, market shares or business strategy of the applicant",
|
||||
"reason": "Article 63(2)(a) of Regulation (EC) No 1107/2009 (making reference to Article 39 of Regulation EC No 178/2002)"
|
||||
},
|
||||
{
|
||||
"name": "5. quantitative composition",
|
||||
"description": "quantitative composition of the subject matter of the request, except for information which is relevant to the assessment of safety",
|
||||
"reason": "Article 63(2)(a) of Regulation (EC) No 1107/2009 (making reference to Article 39 of Regulation EC No 178/2002)"
|
||||
},
|
||||
{
|
||||
"name": "6. specification of impurity",
|
||||
"description": "the specification of impurity of the active substance and the related methods of analysis for impurities in the active substance as manufactured, except for the impurities that are considered to be toxicologically, ecotoxicologically or environmentally relevant and the related methods of analysis for such impurities",
|
||||
"reason": "Article 63(2)(b) of Regulation (EC) No 1107/2009"
|
||||
},
|
||||
{
|
||||
"name": "7. results of production batches",
|
||||
"description": "results of production batches of the active substance including impurities",
|
||||
"reason": "Article 63(2)(c) of Regulation (EC) No 1107/2009"
|
||||
},
|
||||
{
|
||||
"name": "8. composition of a plant protection product",
|
||||
"description": "information on the complete composition of a plant protection product",
|
||||
"reason": "Article 63(2)(d) of Regulation (EC) No 1107/2009"
|
||||
}
|
||||
]
|
||||
|
||||
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user