diff --git a/src/main/java/fr/inra/oresing/model/Configuration.java b/src/main/java/fr/inra/oresing/model/Configuration.java
index 8678d23f2334f4bcc111419c88fd46b3c66b9c40..5b96601383d326a1730c0aecf15cd12d0775d7ea 100644
--- a/src/main/java/fr/inra/oresing/model/Configuration.java
+++ b/src/main/java/fr/inra/oresing/model/Configuration.java
@@ -383,6 +383,7 @@ public class Configuration {
     @Setter
     @ToString
     public static class AuthorizationDescription {
+        public static AuthorizationDescription DEFAULT_INSTANCE=new AuthorizationDescription();
 
         @ApiModelProperty(notes = "The variable component that identifies the time scope of the line (must be a variable/component with a checker of type 'Date')", required = true)
         private VariableComponentKey timeScope;
diff --git a/src/main/java/fr/inra/oresing/persistence/DataRepository.java b/src/main/java/fr/inra/oresing/persistence/DataRepository.java
index 4bebb066e4da060ece8c95e0248a392de26fbfc9..07be867216e17f4568cdbfb36ce24f92f6fc6006 100644
--- a/src/main/java/fr/inra/oresing/persistence/DataRepository.java
+++ b/src/main/java/fr/inra/oresing/persistence/DataRepository.java
@@ -95,7 +95,7 @@ public class DataRepository extends JsonTableInApplicationSchemaRepositoryTempla
         return getNamedParameterJdbcTemplate().query(query, sqlParams, new JsonRowMapper<Uniqueness>());
     }
 
-    public void updateConstraintForeigData(List<UUID> uuids) {
+    public void updateConstraintForeignData(List<UUID> uuids) {
         String deleteSql = "DELETE FROM " + getTable().getSchema().getSqlIdentifier() + ".Data_Reference WHERE dataId in (:ids)";
         String insertSql = String.join(" "
                 , "INSERT INTO " + getTable().getSchema().getSqlIdentifier() + ".Data_Reference(dataId, referencedBy)"
diff --git a/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java b/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java
index ffa806ed784ea1922e44a6c59186b858561f14a2..14623ad0260334ac0b9ac14b1363d5ac15197b3d 100644
--- a/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java
+++ b/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java
@@ -34,9 +34,9 @@ import java.util.stream.Collectors;
 @Slf4j
 public class ApplicationConfigurationService {
 
+    public static final String OTHERS_DATAGROUPS = "_others_";
     private static final ImmutableSet<String> CHECKER_ON_TARGET_NAMES =
             ImmutableSet.of("Date", "Float", "Integer", "RegularExpression", "Reference");
-
     private static final ImmutableSet<String> ALL_CHECKER_NAMES = ImmutableSet.<String>builder()
             .addAll(CHECKER_ON_TARGET_NAMES)
             .add(GroovyLineChecker.NAME)
@@ -120,7 +120,9 @@ public class ApplicationConfigurationService {
             Set<String> variables = dataTypeDescription.getData().keySet();
 
             if (authorization == null) {
-                builder.missingAuthorizationForDatatype(dataType);
+                //builder.missingAuthorizationForDatatype(dataType);
+//                authorization = Configuration.AuthorizationDescription.DEFAULT_INSTANCE;
+//                dataTypeDescription.setAuthorization(authorization);
             } else {
                 VariableComponentKey timeScopeVariableComponentKey = authorization.getTimeScope();
                 verifyDatatypeTimeScopeExistsAndIsValid(builder, dataType, dataTypeDescription, variables, timeScopeVariableComponentKey);
@@ -128,14 +130,14 @@ public class ApplicationConfigurationService {
                 LinkedHashMap<String, Configuration.AuthorizationScopeDescription> authorizationScopesVariableComponentKey = authorization.getAuthorizationScopes();
                 verifyDatatypeAuthorizationScopeExistsAndIsValid(builder, dataType, configuration, variables, authorizationScopesVariableComponentKey);
                 requiredAuthorizationsAttributesBuilder.addAll(authorizationScopesVariableComponentKey.keySet());
-            }
 
-            Multiset<String> variableOccurrencesInDataGroups = TreeMultiset.create();
-            verifyDatatypeDataGroupsContainsExistingVariables(builder, dataTypeDescription, variables, variableOccurrencesInDataGroups);
+                Multiset<String> variableOccurrencesInDataGroups = TreeMultiset.create();
+                verifyDatatypeDataGroupsContainsExistingVariables(builder, dataTypeDescription, variables, variableOccurrencesInDataGroups);
 
-            verifyDatatypeBindingToExistingVariableComponent(builder, variables, variableOccurrencesInDataGroups);
-            verifyDatatypeBindingToExistingVariableComponent(builder, dataTypeDescription, dataType, variables);
-            verifyChartDescription(builder, dataType, dataTypeDescription);
+                verifyDatatypeBindingToExistingVariableComponent(builder, variables, variableOccurrencesInDataGroups);
+                verifyDatatypeBindingToExistingVariableComponent(builder, dataTypeDescription, dataType, variables);
+                verifyChartDescription(builder, dataType, dataTypeDescription);
+            }
         }
         configuration.setRequiredAuthorizationsAttributes(List.copyOf(requiredAuthorizationsAttributesBuilder.build()));
 
@@ -301,7 +303,17 @@ public class ApplicationConfigurationService {
     }
 
     private void verifyDatatypeDataGroupsContainsExistingVariables(ConfigurationParsingResult.Builder builder, Configuration.DataTypeDescription dataTypeDescription, Set<String> variables, Multiset<String> variableOccurrencesInDataGroups) {
-        for (Map.Entry<String, Configuration.DataGroupDescription> dataGroupEntry : dataTypeDescription.getAuthorization().getDataGroups().entrySet()) {
+        final LinkedHashMap<String, Configuration.DataGroupDescription> dataGroups = dataTypeDescription.getAuthorization().getDataGroups();
+        if (dataGroups.isEmpty()) {
+            final Configuration.DataGroupDescription dataGroupDescription = new Configuration.DataGroupDescription();
+            for (String variable : variables) {
+                dataGroupDescription.getData().add(variable);
+            }
+            dataGroups.put(OTHERS_DATAGROUPS, dataGroupDescription);
+            variableOccurrencesInDataGroups.addAll(variables);
+            return;
+        }
+        for (Map.Entry<String, Configuration.DataGroupDescription> dataGroupEntry : dataGroups.entrySet()) {
             String dataGroup = dataGroupEntry.getKey();
             Configuration.DataGroupDescription dataGroupDescription = dataGroupEntry.getValue();
             Set<String> dataGroupVariables = dataGroupDescription.getData();
@@ -372,7 +384,7 @@ public class ApplicationConfigurationService {
                                                 final Configuration.CompositeReferenceComponentDescription compositeReferenceComponentDescription = new Configuration.CompositeReferenceComponentDescription();
                                                 compositeReferenceComponentDescription.setReference(refType);
                                                 compositeReferenceDescription.setComponents(List.of(compositeReferenceComponentDescription));
-                                                compositeReferences.put(key, compositeReferenceDescription );
+                                                compositeReferences.put(key, compositeReferenceDescription);
                                                 //builder.authorizationScopeVariableComponentReftypeUnknown(dataType, authorizationScopeName, refType, compositesReferences);
                                             }
                                         }
diff --git a/src/main/java/fr/inra/oresing/rest/ApplicationResult.java b/src/main/java/fr/inra/oresing/rest/ApplicationResult.java
index e63a155bcc973d6c22842441870077b2698c1269..fe08cfb77606dc01716923f067fbc096d8c0a9f7 100644
--- a/src/main/java/fr/inra/oresing/rest/ApplicationResult.java
+++ b/src/main/java/fr/inra/oresing/rest/ApplicationResult.java
@@ -51,6 +51,7 @@ public class ApplicationResult {
         String label;
         Map<String, Variable> variables;
         Map<String, String> repository;
+        boolean hasAuthorizations;
 
         @Value
         public static class Variable {
diff --git a/src/main/java/fr/inra/oresing/rest/OreSiResources.java b/src/main/java/fr/inra/oresing/rest/OreSiResources.java
index 45802b555b5738da40886811cd07cce9ac66711d..8eb2215a9224f9ed3971c5638b47edbf1ec6b831 100644
--- a/src/main/java/fr/inra/oresing/rest/OreSiResources.java
+++ b/src/main/java/fr/inra/oresing/rest/OreSiResources.java
@@ -143,8 +143,9 @@ public class OreSiResources {
                 }
                 return new ApplicationResult.DataType.Variable(variable, variable, components, chartDescriptionResult);
             });
-            Map<String, String> repository = application.getConfiguration().getDataTypes().get(dataType).getRepository();
-            return new ApplicationResult.DataType(dataType, dataType, variables, Optional.ofNullable(repository).filter(m -> !m.isEmpty()).orElse(null));
+            Map<String, String> repository = dataTypeDescription.getRepository();
+            final boolean hasAuthorizations = dataTypeDescription.getAuthorization() != null;
+            return new ApplicationResult.DataType(dataType, dataType, variables, Optional.ofNullable(repository).filter(m -> !m.isEmpty()).orElse(null), hasAuthorizations);
         });
         ApplicationResult applicationResult = new ApplicationResult(application.getId().toString(), application.getName(), application.getConfiguration().getApplication().getName(), application.getComment(), application.getConfiguration().getInternationalization(), references, dataTypes, referenceSynthesis);
         return ResponseEntity.ok(applicationResult);
@@ -468,4 +469,4 @@ public class OreSiResources {
     }
 
 
-}
+}
\ No newline at end of file
diff --git a/src/main/java/fr/inra/oresing/rest/OreSiService.java b/src/main/java/fr/inra/oresing/rest/OreSiService.java
index 5e8a320a4125d71d5650447d2c6b4e06b4d89af2..3e228913f46df5587284298be393f99b91f62eb5 100644
--- a/src/main/java/fr/inra/oresing/rest/OreSiService.java
+++ b/src/main/java/fr/inra/oresing/rest/OreSiService.java
@@ -4,60 +4,16 @@ import com.google.common.base.Charsets;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Predicate;
 import com.google.common.base.Strings;
-import com.google.common.collect.BiMap;
-import com.google.common.collect.HashBiMap;
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableMultiset;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.ImmutableSetMultimap;
-import com.google.common.collect.ImmutableSortedSet;
-import com.google.common.collect.Maps;
-import com.google.common.collect.MoreCollectors;
-import com.google.common.collect.Ordering;
-import com.google.common.collect.SetMultimap;
-import com.google.common.collect.Sets;
+import com.google.common.collect.*;
 import com.google.common.primitives.Ints;
 import fr.inra.oresing.OreSiTechnicalException;
-import fr.inra.oresing.checker.CheckerFactory;
-import fr.inra.oresing.checker.DateLineChecker;
-import fr.inra.oresing.checker.FloatChecker;
-import fr.inra.oresing.checker.IntegerChecker;
-import fr.inra.oresing.checker.InvalidDatasetContentException;
-import fr.inra.oresing.checker.LineChecker;
-import fr.inra.oresing.checker.ReferenceLineChecker;
-import fr.inra.oresing.checker.ReferenceLineCheckerConfiguration;
+import fr.inra.oresing.checker.*;
 import fr.inra.oresing.groovy.Expression;
 import fr.inra.oresing.groovy.GroovyContextHelper;
 import fr.inra.oresing.groovy.StringGroovyExpression;
-import fr.inra.oresing.model.Application;
-import fr.inra.oresing.model.Authorization;
-import fr.inra.oresing.model.BinaryFile;
-import fr.inra.oresing.model.BinaryFileDataset;
-import fr.inra.oresing.model.Configuration;
-import fr.inra.oresing.model.Data;
-import fr.inra.oresing.model.Datum;
-import fr.inra.oresing.model.LocalDateTimeRange;
-import fr.inra.oresing.model.ReferenceColumn;
-import fr.inra.oresing.model.ReferenceColumnSingleValue;
-import fr.inra.oresing.model.ReferenceColumnValue;
-import fr.inra.oresing.model.ReferenceDatum;
-import fr.inra.oresing.model.ReferenceValue;
-import fr.inra.oresing.model.VariableComponentKey;
+import fr.inra.oresing.model.*;
 import fr.inra.oresing.model.chart.OreSiSynthesis;
-import fr.inra.oresing.persistence.AuthenticationService;
-import fr.inra.oresing.persistence.BinaryFileInfos;
-import fr.inra.oresing.persistence.DataRepository;
-import fr.inra.oresing.persistence.DataRow;
-import fr.inra.oresing.persistence.DataSynthesisRepository;
-import fr.inra.oresing.persistence.Ltree;
-import fr.inra.oresing.persistence.OreSiRepository;
-import fr.inra.oresing.persistence.ReferenceValueRepository;
-import fr.inra.oresing.persistence.SqlPolicy;
-import fr.inra.oresing.persistence.SqlSchema;
-import fr.inra.oresing.persistence.SqlSchemaForApplication;
-import fr.inra.oresing.persistence.SqlService;
+import fr.inra.oresing.persistence.*;
 import fr.inra.oresing.persistence.roles.OreSiRightOnApplicationRole;
 import fr.inra.oresing.persistence.roles.OreSiUserRole;
 import fr.inra.oresing.rest.validationcheckresults.DateValidationCheckResult;
@@ -88,28 +44,10 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.StringWriter;
 import java.time.Duration;
-import java.time.Instant;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.ZoneOffset;
+import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.UUID;
+import java.util.*;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.function.Consumer;
 import java.util.function.Function;
@@ -483,7 +421,7 @@ public class OreSiService {
                     repo.getRepository(app).binaryFile().store(f);
                     buildSynthesis(app.getName(), dataType);
                 });
-        if(dataType!=null){
+        if (dataType != null) {
             buildSynthesis(app.getName(), dataType);
         }
     }
@@ -528,7 +466,7 @@ public class OreSiService {
                                         }
                                     })
                     );
-            dataRepository.updateConstraintForeigData(uuids);
+            dataRepository.updateConstraintForeignData(uuids);
             errors.addAll(uniquenessBuilder.getErrors());
             InvalidDatasetContentException.checkErrorsIsEmpty(errors);
         }
@@ -628,12 +566,16 @@ public class OreSiService {
                                                                                ImmutableSet<LineChecker> lineCheckers,
                                                                                Configuration.DataTypeDescription dataTypeDescription,
                                                                                BinaryFileDataset binaryFileDataset) {
-        DateLineChecker timeScopeDateLineChecker = lineCheckers.stream()
-                .filter(lineChecker -> lineChecker instanceof DateLineChecker)
-                .map(lineChecker -> (DateLineChecker) lineChecker)
-                .filter(dateLineChecker -> dateLineChecker.getTarget().equals(dataTypeDescription.getAuthorization().getTimeScope()))
-                .collect(MoreCollectors.onlyElement());
+        final Configuration.AuthorizationDescription authorization = dataTypeDescription.getAuthorization();
+        final boolean haveAuthorizations = authorization != null;
 
+        final DateLineChecker timeScopeDateLineChecker = haveAuthorizations?
+                lineCheckers.stream()
+                    .filter(lineChecker -> lineChecker instanceof DateLineChecker)
+                    .map(lineChecker -> (DateLineChecker) lineChecker)
+                    .filter(dateLineChecker -> dateLineChecker.getTarget().equals(authorization.getTimeScope()))
+                    .collect(MoreCollectors.onlyElement())
+                :null;
 
         return rowWithData -> {
             Datum datum = Datum.copyOf(rowWithData.getDatum());
@@ -668,26 +610,41 @@ public class OreSiService {
                 errors.addAll(rowErrors);
                 return Stream.empty();
             }
-
-            String timeScopeValue = datum.get(dataTypeDescription.getAuthorization().getTimeScope());
-            LocalDateTimeRange timeScope = LocalDateTimeRange.parse(timeScopeValue, timeScopeDateLineChecker);
+            LocalDateTimeRange timeScope;
+            if (timeScopeDateLineChecker!=null) {
+                String timeScopeValue = datum.get(authorization.getTimeScope());
+                timeScope = LocalDateTimeRange.parse(timeScopeValue, timeScopeDateLineChecker);
+            } else {
+                timeScope = LocalDateTimeRange.always();
+            }
 
             Map<String, String> requiredAuthorizations = new LinkedHashMap<>();
-            dataTypeDescription.getAuthorization().getAuthorizationScopes().forEach((authorizationScope, authorizationScopeDescription) -> {
-                VariableComponentKey variableComponentKey = authorizationScopeDescription.getVariableComponentKey();
-                String requiredAuthorization = datum.get(variableComponentKey);
-                Ltree.checkSyntax(requiredAuthorization);
-                requiredAuthorizations.put(authorizationScope, requiredAuthorization);
-            });
+            if(haveAuthorizations) {
+                authorization.getAuthorizationScopes().forEach((authorizationScope, authorizationScopeDescription) -> {
+                    VariableComponentKey variableComponentKey = authorizationScopeDescription.getVariableComponentKey();
+                    String requiredAuthorization = datum.get(variableComponentKey);
+                    Ltree.checkSyntax(requiredAuthorization);
+                    requiredAuthorizations.put(authorizationScope, requiredAuthorization);
+                });
+            }
             checkTimescopRangeInDatasetRange(timeScope, errors, binaryFileDataset, rowWithData.getLineNumber());
             checkRequiredAuthorizationInDatasetRange(requiredAuthorizations, errors, binaryFileDataset, rowWithData.getLineNumber());
             // String rowId = Hashing.sha256().hashString(line.toString(), Charsets.UTF_8).toString();
             String rowId = UUID.randomUUID().toString();
             final List<String> uniquenessValues = uniquenessBuilder.test(datum, rowWithData.getLineNumber());
-            if(uniquenessValues ==null) {
+            if (uniquenessValues == null) {
                 return Stream.of((Data) null);
-            };
-            Stream<Data> dataStream = dataTypeDescription.getAuthorization().getDataGroups().entrySet().stream().map(entry -> {
+            }
+            LinkedHashMap<String, Configuration.DataGroupDescription> dataGroups;
+            if(!haveAuthorizations){
+                dataGroups=new LinkedHashMap<>();
+                final Configuration.DataGroupDescription dataGroupDescription = new Configuration.DataGroupDescription();
+                dataGroupDescription.setData(dataTypeDescription.getData().keySet());
+                dataGroups.put("_default_", dataGroupDescription);
+            }else{
+                dataGroups= authorization.getDataGroups();
+            }
+            Stream<Data> dataStream = dataGroups.entrySet().stream().map(entry -> {
                 String dataGroup = entry.getKey();
                 Configuration.DataGroupDescription dataGroupDescription = entry.getValue();
 
@@ -1017,7 +974,7 @@ public class OreSiService {
      * @param formatDescription
      * @param linesIterator
      */
-    private void readPostHeader(Configuration.FormatDescription formatDescription,  ImmutableList<String> headerRow, Datum constantValues, Iterator<CSVRecord> linesIterator) {
+    private void readPostHeader(Configuration.FormatDescription formatDescription, ImmutableList<String> headerRow, Datum constantValues, Iterator<CSVRecord> linesIterator) {
         ImmutableSetMultimap<Integer, Configuration.HeaderConstantDescription> perRowNumberConstants =
                 formatDescription.getConstants().stream()
                         .collect(
@@ -1026,7 +983,7 @@ public class OreSiService {
                                         Function.identity()
                                 )
                         );
-        for (int lineNumber = formatDescription.getHeaderLine()+1; lineNumber < formatDescription.getFirstRowLine(); lineNumber++) {
+        for (int lineNumber = formatDescription.getHeaderLine() + 1; lineNumber < formatDescription.getFirstRowLine(); lineNumber++) {
             CSVRecord row = linesIterator.next();
             ImmutableSet<Configuration.HeaderConstantDescription> constantDescriptions = perRowNumberConstants.get(lineNumber);
             constantDescriptions.forEach(constant -> {
@@ -1102,12 +1059,6 @@ public class OreSiService {
         return computeDefaultValueFn;
     }
 
-    @Value
-    private static class ComputedValuesContext {
-        ImmutableMap<VariableComponentKey, Function<Datum, String>> defaultValueFns;
-        ImmutableSet<VariableComponentKey> replaceEnabled;
-    }
-
     public String getDataCsv(DownloadDatasetQuery downloadDatasetQuery, String nameOrId, String dataType, String locale) {
         DownloadDatasetQuery downloadDatasetQueryCopy = DownloadDatasetQuery.buildDownloadDatasetQuery(downloadDatasetQuery, nameOrId, dataType, getApplication(nameOrId));
         List<DataRow> list = findData(downloadDatasetQueryCopy, nameOrId, dataType);
@@ -1363,20 +1314,20 @@ public class OreSiService {
                 .filter(entry -> Strings.isNullOrEmpty(variable) || entry.getKey().equals(variable))
                 .anyMatch(entry -> entry.getValue().getChartDescription() != null);
         String sql;
-        if(hasChartDescription) {
+        if (hasChartDescription) {
             sql = application.getConfiguration().getDataTypes().get(dataType).getData().entrySet().stream()
                     .filter(entry -> Strings.isNullOrEmpty(variable) || entry.getKey().equals(variable))
                     .filter(entry -> entry.getValue().getChartDescription() != null)
                     .map(entry -> entry.getValue().getChartDescription().toSQL(entry.getKey(), dataType))
                     .collect(Collectors.joining(", \n"));
-        }else {
+        } else {
             sql = Configuration.Chart.toSQL(dataType);
         }
         List<OreSiSynthesis> oreSiSynthesisList = new LinkedList<>();
-        final List<OreSiSynthesis> oreSiSynthesis  = repo.buildSynthesis(sql, hasChartDescription);
+        final List<OreSiSynthesis> oreSiSynthesis = repo.buildSynthesis(sql, hasChartDescription);
         repo.storeAll(oreSiSynthesis.stream());
 
-        return !hasChartDescription?Map.of("__NO-CHART",oreSiSynthesis):oreSiSynthesis.stream().collect(Collectors.groupingBy(OreSiSynthesis::getVariable));
+        return !hasChartDescription ? Map.of("__NO-CHART", oreSiSynthesis) : oreSiSynthesis.stream().collect(Collectors.groupingBy(OreSiSynthesis::getVariable));
     }
 
     public Map<String, List<OreSiSynthesis>> getSynthesis(String nameOrId, String dataType) {
@@ -1396,7 +1347,13 @@ public class OreSiService {
     }
 
     public Map<Ltree, List<ReferenceValue>> getReferenceDisplaysById(Application application, Set<String> listOfDataIds) {
-        return repo.getRepository(application).referenceValue(). getReferenceDisplaysById(listOfDataIds);
+        return repo.getRepository(application).referenceValue().getReferenceDisplaysById(listOfDataIds);
+    }
+
+    @Value
+    private static class ComputedValuesContext {
+        ImmutableMap<VariableComponentKey, Function<Datum, String>> defaultValueFns;
+        ImmutableSet<VariableComponentKey> replaceEnabled;
     }
 
     @Value
@@ -1439,10 +1396,10 @@ public class OreSiService {
 
         public List<String> test(Datum datum, int lineNumber) {
             UniquenessKeys uniquenessKeys = new UniquenessKeys(datum, uniquenessDescription);
-            uniquenessInFile.compute(uniquenessKeys, (k,v) -> v==null?new LinkedList<>():v)
+            uniquenessInFile.compute(uniquenessKeys, (k, v) -> v == null ? new LinkedList<>() : v)
                     .add(lineNumber);
-            boolean isInError = uniquenessInFile.get(uniquenessKeys).size()>1;
-            return isInError?null:uniquenessKeys.getValues();
+            boolean isInError = uniquenessInFile.get(uniquenessKeys).size() > 1;
+            return isInError ? null : uniquenessKeys.getValues();
         }
 
         private CsvRowValidationCheckResult getErrorForEntry(Map.Entry<UniquenessKeys, List<Integer>> entry) {
@@ -1464,7 +1421,7 @@ public class OreSiService {
                     .collect(Collectors.toList());
         }
 
-        public Map<String, String> getUniquenessKey(UniquenessKeys uniquenessKeys){
+        public Map<String, String> getUniquenessKey(UniquenessKeys uniquenessKeys) {
             Map<String, String> uniquenessKeyMap = new HashMap<>();
             for (int i = 0; i < uniquenessDescription.size(); i++) {
                 uniquenessKeyMap.put(uniquenessDescription.get(i).getId(), uniquenessKeys.getValues().get(i));
@@ -1476,6 +1433,7 @@ public class OreSiService {
     class UniquenessKeys implements Comparable<UniquenessKeys> {
         List<String> values = new LinkedList<>();
         List<VariableComponentKey> uniquenessDescription;
+
         public UniquenessKeys(Datum datum, List<VariableComponentKey> uniquenessDescription) {
             this.uniquenessDescription = uniquenessDescription;
             this.values = uniquenessDescription.stream()
diff --git a/src/test/java/fr/inra/oresing/rest/Fixtures.java b/src/test/java/fr/inra/oresing/rest/Fixtures.java
index d27aac4bc71ee2a9efcd8f4a5cad67eca3cd2026..d5c74df3575a6f9a55300c0919419aa863ad560d 100644
--- a/src/test/java/fr/inra/oresing/rest/Fixtures.java
+++ b/src/test/java/fr/inra/oresing/rest/Fixtures.java
@@ -152,12 +152,13 @@ public class Fixtures {
                 "   }", plateforme, projet, site);
     }
 
-    public String getProgressiveYamlWithNoReferenceForAuthorizationScopeApplicationConfigurationResourceName() {
-        return "/data/progressiveyaml/testAuthorizationScopeWithoutReference.yaml";
-    }
-
-    public String getProgressiveYamlWithReferenceAndNoHierarchicalReferenceForAuthorizationScopeApplicationConfigurationResourceName() {
-        return "/data/progressiveyaml/testAuthorizationScopeWithReferenceAndNoHierarchicalReference.yaml";
+    public Map<String, String> getProgressiveYaml() {
+        Map<String, String> yamls = new LinkedHashMap<>();
+        yamls.put("testAuthorizationScopeWithoutReference", "/data/progressiveyaml/testAuthorizationScopeWithoutReference.yaml");
+        yamls.put("testAuthorizationScopeWithReferenceAndNoHierarchicalReference", "/data/progressiveyaml/testAuthorizationScopeWithReferenceAndNoHierarchicalReference.yaml");
+        yamls.put("yamlWithEmptyDatagroup", "/data/progressiveyaml/testEmptyDatagroup.yaml");
+        yamls.put("yamlWithoutAuthorization", "/data/progressiveyaml/noAuthorization.yaml");
+        return yamls;
     }
 
     public Map<String, String> getProgressiveYamlReferentielFiles() {
@@ -678,6 +679,7 @@ public class Fixtures {
                 .put("meteo_m", "/data/foret/data/meteo/mensuel/hesse-hesse_1_meteo_m_01-2012_03-2012.csv")*/
                 .build();
     }
+
     public Map<String, Integer> getForetEssaiSynthesisSize() {
         ImmutableMap.Builder<String, Integer> builder = ImmutableMap.builder();
         return builder
diff --git a/src/test/java/fr/inra/oresing/rest/OreSiResourcesTest.java b/src/test/java/fr/inra/oresing/rest/OreSiResourcesTest.java
index 6579f9349cffac6de647d9584961a57aa0fb2a8b..50b81a6951e1167a415c013b904350889513d04a 100644
--- a/src/test/java/fr/inra/oresing/rest/OreSiResourcesTest.java
+++ b/src/test/java/fr/inra/oresing/rest/OreSiResourcesTest.java
@@ -592,10 +592,49 @@ public class OreSiResourcesTest {
         }
     }
 
+    @Test
+    public void testProgressiveYamlWithoutAuthorization() throws Exception {
+
+        URL resource = getClass().getResource(fixtures.getProgressiveYaml().get("yamlWithoutAuthorization"));
+        try (InputStream in = Objects.requireNonNull(resource).openStream()) {
+            MockMultipartFile configuration = new MockMultipartFile("file", "progressive.yaml", "text/plain", in);
+            //définition de l'application
+            authenticationService.addUserRightCreateApplication(userId);
+
+            String result =  mockMvc.perform(MockMvcRequestBuilders.multipart("/api/v1/applications/progressive")
+                            .file(configuration)
+                            .cookie(authCookie))
+                    .andExpect(status().is2xxSuccessful())
+                    //.andExpect(jsonPath("$.id", IsNull.notNullValue()))
+                    .andReturn().getResponse().getContentAsString();
+        }
+        progressiveYamlAddReferencesAndData();
+    }
+
+    @Test
+    public void testProgressiveYamlWitEmptyDatagroup() throws Exception {
+
+        URL resource = getClass().getResource(fixtures.getProgressiveYaml().get("yamlWithEmptyDatagroup"));
+        try (InputStream in = Objects.requireNonNull(resource).openStream()) {
+            MockMultipartFile configuration = new MockMultipartFile("file", "progressive.yaml", "text/plain", in);
+            //définition de l'application
+            authenticationService.addUserRightCreateApplication(userId);
+
+            String result =  mockMvc.perform(MockMvcRequestBuilders.multipart("/api/v1/applications/progressive")
+                            .file(configuration)
+                            .cookie(authCookie))
+                    .andExpect(status().is2xxSuccessful())
+                    //.andExpect(jsonPath("$.id", IsNull.notNullValue()))
+                    .andReturn().getResponse().getContentAsString();
+        }
+
+        progressiveYamlAddReferencesAndData();
+    }
+
     @Test
     public void tesProgressiveYamlWithNoReference() throws Exception {
 
-        URL resource = getClass().getResource(fixtures.getProgressiveYamlWithNoReferenceForAuthorizationScopeApplicationConfigurationResourceName());
+        URL resource = getClass().getResource(fixtures.getProgressiveYaml().get("testAuthorizationScopeWithoutReference"));
         try (InputStream in = Objects.requireNonNull(resource).openStream()) {
             MockMultipartFile configuration = new MockMultipartFile("file", "progressive.yaml", "text/plain", in);
             //définition de l'application
@@ -621,7 +660,7 @@ public class OreSiResourcesTest {
     @Test
     public void tesProgressiveYaml() throws Exception {
 
-        URL resource = getClass().getResource(fixtures.getProgressiveYamlWithReferenceAndNoHierarchicalReferenceForAuthorizationScopeApplicationConfigurationResourceName());
+        URL resource = getClass().getResource(fixtures.getProgressiveYaml().get("testAuthorizationScopeWithReferenceAndNoHierarchicalReference"));
         try (InputStream in = Objects.requireNonNull(resource).openStream()) {
             MockMultipartFile configuration = new MockMultipartFile("file", "progressive.yaml", "text/plain", in);
             //définition de l'application
@@ -635,6 +674,10 @@ public class OreSiResourcesTest {
                     .andReturn().getResponse().getContentAsString();
         }
 
+        progressiveYamlAddReferencesAndData();
+    }
+
+    private void progressiveYamlAddReferencesAndData() throws Exception {
         String response;
         // Ajout de referentiel
         for (Map.Entry<String, String> e : fixtures.getProgressiveYamlReferentielFiles().entrySet()) {
diff --git a/src/test/resources/data/progressiveyaml/noAuthorization.yaml b/src/test/resources/data/progressiveyaml/noAuthorization.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..e7fd1139122502745529e96e342aec4b112cbec7
--- /dev/null
+++ b/src/test/resources/data/progressiveyaml/noAuthorization.yaml
@@ -0,0 +1,75 @@
+version: 0
+
+application:
+  name: Application de test
+  version: 1
+
+references:
+  agroécosystème:
+    keyColumns: [ nom ]
+    columns:
+      nom:
+  sites:
+    keyColumns: [ nom du site ]
+    columns:
+      Agroécosystème:
+      nom du site:
+  parcelles:
+    keyColumns: [ site, nom de la parcelle ]
+    columns:
+      site:
+      nom de la parcelle:
+
+dataTypes:
+  date_de_visite:
+    data:
+      date:
+        components:
+          day:
+            checker:
+              name: Date
+              params:
+                pattern: dd/MM/yyyy
+          time:
+      localisation:
+        components:
+          agroecosysteme:
+#            checker:
+#              name: Reference
+#              params:
+#                refType: agroécosystème
+      relevant:
+        components:
+          numero:
+    format:
+      constants:
+        - rowNumber: 1
+          columnNumber: 2
+          boundTo:
+            variable: relevant
+            component: numero
+          exportHeader: relevant_number
+      headerLine: 2
+      firstRowLine: 3
+      columns:
+        - header: date
+          boundTo:
+            variable: date
+            component: day
+        - header: heure
+          boundTo:
+            variable: date
+            component: time
+        - header: agroecosysteme
+          boundTo:
+            variable: localisation
+            component: agroecosysteme
+
+#    authorization:
+#      authorizationScopes:
+#        localization:
+#          variable: localisation
+#          component: agroecosysteme
+#      timeScope:
+#        variable: date
+#        component: day
\ No newline at end of file
diff --git a/src/test/resources/data/progressiveyaml/testEmptyDatagroup.yaml b/src/test/resources/data/progressiveyaml/testEmptyDatagroup.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..2b908964b6afa9cc62e08c3661c1234cc297493a
--- /dev/null
+++ b/src/test/resources/data/progressiveyaml/testEmptyDatagroup.yaml
@@ -0,0 +1,75 @@
+version: 0
+
+application:
+  name: Application de test
+  version: 1
+
+references:
+  agroécosystème:
+    keyColumns: [ nom ]
+    columns:
+      nom:
+  sites:
+    keyColumns: [ nom du site ]
+    columns:
+      Agroécosystème:
+      nom du site:
+  parcelles:
+    keyColumns: [ site, nom de la parcelle ]
+    columns:
+      site:
+      nom de la parcelle:
+
+dataTypes:
+  date_de_visite:
+    data:
+      date:
+        components:
+          day:
+            checker:
+              name: Date
+              params:
+                pattern: dd/MM/yyyy
+          time:
+      localisation:
+        components:
+          agroecosysteme:
+            checker:
+              name: Reference
+              params:
+                refType: agroécosystème
+      relevant:
+        components:
+          numero:
+    format:
+      constants:
+        - rowNumber: 1
+          columnNumber: 2
+          boundTo:
+            variable: relevant
+            component: numero
+          exportHeader: relevant_number
+      headerLine: 2
+      firstRowLine: 3
+      columns:
+        - header: date
+          boundTo:
+            variable: date
+            component: day
+        - header: heure
+          boundTo:
+            variable: date
+            component: time
+        - header: agroecosysteme
+          boundTo:
+            variable: localisation
+            component: agroecosysteme
+
+    authorization:
+      authorizationScopes:
+        localization:
+          variable: localisation
+          component: agroecosysteme
+      timeScope:
+        variable: date
+        component: day
\ No newline at end of file
diff --git a/ui/src/components/datatype/DataTypeDetailsPanel.vue b/ui/src/components/datatype/DataTypeDetailsPanel.vue
index 9689a0631eb382943bcf72a8e36593412390af74..3e96fcfc89f31e602c1acbf3868b8f94993b82d2 100644
--- a/ui/src/components/datatype/DataTypeDetailsPanel.vue
+++ b/ui/src/components/datatype/DataTypeDetailsPanel.vue
@@ -6,9 +6,10 @@
     :closeCb="closeCb"
   >
     <div class="Panel-buttons">
-      <b-button type="is-dark" icon-left="key" @click="consultAuthorization">{{
+      <b-button type="is-dark" icon-left="key" @click="consultAuthorization" v-if="dataType && dataType.hasAuthorizations">{{
         $t("dataTypesManagement.consult-authorization")
       }}</b-button>
+      <div v-else>{{$t('dataTypesManagement.no_authorization',  dataType)}}</div>
     </div>
   </SidePanel>
 </template>
@@ -44,4 +45,4 @@ export default class DataTypeDetailsPanel extends Vue {
     margin-bottom: 0.5rem;
   }
 }
-</style>
+</style>
\ No newline at end of file
diff --git a/ui/src/locales/en.json b/ui/src/locales/en.json
index e6cb579064a4bf8b717a68e2a2326cf9760412be..a108a680d2139b13c9bcb9f0bb7e9f450a19876e 100644
--- a/ui/src/locales/en.json
+++ b/ui/src/locales/en.json
@@ -218,6 +218,7 @@
         "data":"Data"
     },
     "dataTypesManagement": {
+        "no_authorization": "No authorization management for {localName}",
         "data-types": "Data types",
         "consult-authorization": "Consult authorizations",
         "réinitialiser": "Reset",
diff --git a/ui/src/locales/fr.json b/ui/src/locales/fr.json
index 09170cc081130b0c1e7059d9fa1b9a62fd156300..91942acb25399eed0d6b4271ed5c3c2ff5a8badc 100644
--- a/ui/src/locales/fr.json
+++ b/ui/src/locales/fr.json
@@ -218,6 +218,7 @@
         "data": "Données"
     },
     "dataTypesManagement": {
+        "no_authorization": "Pas de gestion des autorisations pour {localName}",
         "data-types": "Type de données",
         "consult-authorization": "Consulter les autorisations",
         "réinitialiser": "Réinitialiser",
diff --git a/ui/src/services/InternationalisationService.js b/ui/src/services/InternationalisationService.js
index ded0aef60fb55ae6ae98fb89a53e98f8e0532e49..16274df271d8523df303a0469ce434ed9b20450c 100644
--- a/ui/src/services/InternationalisationService.js
+++ b/ui/src/services/InternationalisationService.js
@@ -96,12 +96,13 @@ export class InternationalisationService extends Fetcher {
     if (application.internationalization != null) {
       let applicationDataTypes = application.internationalization.dataTypes;
       for (let applicationDataType in applicationDataTypes) {
+            localStorage.getItem(LOCAL_STORAGE_LANG)
         application.dataTypes[applicationDataType] = {
           ...application.dataTypes[applicationDataType],
           localName:
             applicationDataTypes[applicationDataType].internationalizationName?.[
               localStorage.getItem(LOCAL_STORAGE_LANG)
-            ],
+            ]||applicationDataType,
         };
       }
     } else {
@@ -158,4 +159,4 @@ export class InternationalisationService extends Fetcher {
     }
     return refs.references;
   }
-}
+}
\ No newline at end of file