From 23a46b4be35277e06ec89f48730eeb694e686be8 Mon Sep 17 00:00:00 2001
From: Kenmegne <stephanie.kenmegne@gmail.com>
Date: Thu, 18 Jun 2026 15:40:06 +0000
Subject: [PATCH] add fdx-commons and fdx-consultation

---
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/api/supervision/TransfertManagerImpl.java                                   |  133 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/InsertDataProductionInDataProductionToDeleteQuery.java                            |   35 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/helpers/ConnexionStatutSessionHandler.java                    |   89 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/dataproduction/metadata/ProductionMetaDataDAOImpl.java                        |   52 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/log/UserActionStatDto.java                                                      |   21 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/ProductionMetaDataRoute.java                          |   98 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/filters/CORSFilter.java                                               |   47 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/ActionDAOImpl.java                                             |   71 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/DataProductionType.java                                                             |    9 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/Sexe.java                                                                              |   37 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/JournalConnexionUtilisateurManager.java                  |   30 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/stats/TableauBordGlobalRSImpl.java                                    |  164 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/UserTypeFichierWithReferentielSearchRS.java               |   33 
 fdx-commons/fdxcommons-dao-ifaces/nb-configuration.xml                                                                                                                     |   18 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ExtensionFichierManager.java                                |   25 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/supervision/StandaloneServerStateEntityManager.java                     |   19 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTableColumnData.java                                                            |   31 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedTableauBordResponse.java                                     |   82 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/AdministrationCronBean.java                                   |  157 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/TableConfigurationDAO.java                                          |   16 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/UserDto.java                                                                    |   49 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/context/AppContext.java                                                                            |   48 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/configuration/CodeStatutHttp.java                                                   |  124 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/natureproduction/NatureProductionFichierDAOImpl.java              |   47 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTableRow.java                                                                   |   27 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/UserDAO.java                                               |   50 
 fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/db/validators/CriteriaQueryValidator.java                                              |   19 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/ReferentielToImportData.java                                                                  |   69 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/RoleManagerImpl.java                                         |  358 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DeleteDataProductionTask.java                          |   43 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/remoteaction/RemoteConfigurationManagerImpl.java                            |  174 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/GroupByQuery.java                                                                 |   42 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxApiTable.java                                                                   |  133 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ReferentielDAOImpl.java                                           |   77 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/UserRS.java                                        |  132 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/StructureLigneManagerImpl.java                                  |   39 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonSelectQueryResult.java                                               |   41 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/JsonFdxParsedDataAction.java                                                                 |   73 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonApiTypeFichierInsertData.java                                        |  127 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/AppColumnDefinitions.java                                               |   42 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/TableauBordSearchRSImpl.java                                  |   57 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/remoteaction/PlanificationManagerImpl.java                                  |   67 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproduction/DataProductionManagerImpl.java                               |  124 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/abstracts/PaginationWithCriteriaEntityDAO.java                            |   65 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ValidateurFichierToExport.java                                                                |   29 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/dataproduction/DataProductionManager.java                               |   25 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableConfigurationDto.java                                                |   44 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/ConnexionStatutsDecoder.java                         |   40 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/DataProductionDecoder.java                           |   41 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/integration/ColumnDefinitionDto.java                                                          |   19 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/DataProductionEndpoint.java                                   |   41 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/natureproduction/NatureProductionFichierId.java                                        |   22 
 fdx-commons/fdxcommons-service-impl/.gitignore                                                                                                                             |   50 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/UserManager.java                                         |   71 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/dataproduction/CommonDataProductionDto.java                                                   |   52 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/remoteaction/RemoteConfigurationManager.java                            |   26 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ValidateurFichierConfigurationSearch.java                            |   26 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/GroupeParticipantSlimDto.java                                                     |   33 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ParticipantDAOImpl.java                                           |   49 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/TypeFichierDataBadRequest.java                                                 |   12 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jms/messages/ActivationApiUserMessage.java                                                         |   16 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/ExtensionFichierRS.java                               |   70 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/abstracts/PaginationWithSearchEnityDAO.java                               |  196 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/StatListResult.java                                                       |   26 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/JournalConnexionUtilisateurDto.java                                             |   34 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/camel/CustomCamelContext.java                                               |   35 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/remotedataproduction/enums/TypePas.java                                                            |   43 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/FdxConsultationInsert.java                                                        |   27 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ReferentielDto.java                                                               |   50 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/ReferentielDataConsumer.java                           |   24 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ApplicationSourceManager.java                               |   19 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedTableauBord.java                                             |   50 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/UpdateDataProductionQuery.java                                                    |   35 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/MoreThanOneTableDataNotFoundException.java                                     |   11 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/searchs/UserParticipantDAO.java                                           |   21 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/GroupeParticipantSlimResponse.java                                 |   51 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/metadata/constraint/ProductionMetaDataConstraint.java                               |   27 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/dto/JpqlQueryElement.java                                                          |   34 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/DataInMemory.java                                                                             |   38 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/GroupeNoeudsToExport.java                                                                     |   29 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonFdxParsedData.java                                                   |   36 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/connection/DBConnection.java                                                              |   23 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TableauBordSpecificSearch.java                                       |   31 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/LatestDataProductionTokenQuery.java                                               |   50 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/helpers/TransfertDataMessageSessionHandler.java               |   50 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/CommonsTools.java                                                                                  | 1560 +
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/JAXRSConfiguration.java                                               |   13 
 fdx-consultation/fdxconsultation-service-impl/src/main/resources/natureProductionFichiers.xml                                                                              |  168 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ApplicationSourcesToExport.java                                                               |   27 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/FdxApiColumnDefinitions.java                                            |   23 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedTableConfiguration.java                                      |   85 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/ReferentielSearchRS.java                                  |   11 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/Constantes.java                                                                               |   23 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/PaysRSImpl.java                                           |  175 
 fdx-consultation/fdxconsultation-service-impl/src/main/resources/application.properties                                                                                    |   10 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ApplicationSourceDto.java                                                         |   32 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/CriteriaLogicConnector.java                                                            |   10 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/supervision/AgentConfigurationEntityDAO.java                              |   16 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/settings/DisplayOptions.java                                                        |   28 
 fdx-commons/fdxcommons-dao-ifaces/pom.xml                                                                                                                                  |  154 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/JsonTableUtil.java                                                                           |  112 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/CommonAppContext.java                                                                              |   31 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTableColumns.java                                                               |   54 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/resolvers/ObjectMapperContextResolver.java                                 |   33 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/RoleValidationRS.java                              |  115 
 fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/interceptor/AfterUserAction.java                                                       |   16 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DataProductionWorkerGroup.java                         |   16 
 fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/GroupeNoeudReporting.java                                 |   52 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/timers/DeleteDataProductionTimer.java                    |   33 
 fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/db/ImportReferentielHelper.java                                                        |   14 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/json/CreateJsonTableIfNotExistQuery.java                                          |  161 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/consumption/DataConsumptionOperationsRSImpl.java                      |  130 
 fdx-consultation/pom.xml                                                                                                                                                   |   41 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/ParticipantToFichiersEncoder.java                    |   35 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ExtensionFichierDto.java                                                          |   49 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/dto/TableauBordFlatResponse.java                                              |   33 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeOperation.java                                                                     |   52 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/RoleManager.java                                         |   62 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableConfigurationSlimDto.java                                            |   22 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/ColumnDefinitionId.java                                                                |   26 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/DataInMemoryHandlerImpl.java                                         |  128 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/integration/TableDefinitionManager.java                                 |   19 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/StandaloneServerStateEntity.java                                        |   73 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/search/CriteriaEntitySearch.java                                                                   |   27 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonDelete.java                                                                   |  100 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/ReferentielConsumptionHelperImpl.java                                |   92 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/MessageSystemeDto.java                                                          |   26 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/jpql/JpqlQueryCriterion.java                                             |   53 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/ValidateurFichier.java                                                                 |   99 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/search/Search.java                                                                                 |   29 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/GroupeNoeudRSImpl.java                                    |  175 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/jpql/JqplQueryString.java                                                         |   54 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/security/ActionSecurity.java                                         |  167 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/remoteaction/RemoteConfigurationDAO.java                                  |   17 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/StandaloneServerStateEntityEncoder.java              |   34 
 fdx-commons/fdxcommons-service-impl/src/main/java/com/megatim/fdxcommons/service/impl/startup/StartupBean.java                                                             |   14 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonSelectQuery.java                                                              |  214 
 fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/abstracts/AbstractCrudDAO.java                                                           |  185 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/ActionManager.java                                       |   20 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ExtensionFichierManagerImpl.java                                |  136 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonFdxInsert.java                                                                |   26 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/remoteaction/PlanificationManager.java                                  |   17 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/RoutageDAOImpl.java                                               |   54 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ValidateurFichierManager.java                               |   23 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/log/ApiUserActionLogDAO.java                                              |   21 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/documents/DocumentManager.java                                          |   19 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/GroupeParticipantRSImpl.java                              |  179 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/searchs/UserTypeFichierManager.java                                     |   23 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/MaxDataProductionIdQuery.java                                                     |   47 
 fdx-commons/nb-configuration.xml                                                                                                                                           |   18 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableauBordColumnDto.java                                                 |   22 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/ParticipantRS.java                                    |   66 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/validation/JsonDataValidationError.java                                           |  293 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/CriteriaEntityPersisted.java                                                  |   85 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/DataWithTokenToDataProductionQuery.java                                           |   42 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/JournalActionUtilisateurDAOImpl.java                           |   44 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/TypeFichierFormDto.java                                                           |   45 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/FdxApiInsert.java                                                                 |   52 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/integration/FdxConsultationIntegrationData.java                                                    |   33 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/ConnectionUtil.java                                                                          |   30 
 fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools/src/main/java/com/megatim/fdxconsultation/tools/CommonTools.java                                       |  404 
 fdx-commons/fdxcommons-core-impl/.gitignore                                                                                                                                |   50 
 fdx-commons/fdxcommons-service-ifaces/pom.xml                                                                                                                              |  150 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/Insert.java                                                                       |   10 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/dataproduction/DataProductionDAO.java                                     |   19 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/TableName.java                                                                    |   13 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/integration/TableDefinitionDAOImpl.java                                       |   31 
 fdx-consultation/fdxconsultation-dao-impl/pom.xml                                                                                                                          |  143 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/stats/TableauBordRSImpl.java                                          |  181 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/EtatOperation.java                                                                     |   28 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/JpqlTable.java                                                                     |   52 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ValidateurFichierConfigurationToExport.java                                                   |   24 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/PaysToExport.java                                                                             |   31 
 fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/db/ImportZipValidatorImpl.java                                                             |  133 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/api/token/ApiTokenRSImpl.java                                         |  268 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/TransfertDataMessageConsumer.java                      |   33 
 fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/integration/TableDefinitionDAO.java                                                      |   34 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/RoutageSlimResponse.java                                           |   47 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeMessageSysteme.java                                                                |   44 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/ActionDAO.java                                             |   16 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/jpql/JpqlWhereQueryString.java                                                    |  186 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/documents/Category.java                                                             |   27 
 fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/interceptor/BeforeActionImpl.java                                                          |   42 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/TableConfiguration.java                                                       |  101 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/PaysManagerImpl.java                                            |  127 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/TableauBordsEndpoint.java                                     |   75 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/SftpConfiguration.java                                                                       |  145 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dtos/reporting/CustomFieldDto.java                                                  |   19 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/FileProperties.java                                                                          |   33 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/TypeFichierDataRow.java                                                           |   12 
 fdx-commons/README.md                                                                                                                                                      |   43 
 fdx-commons/fdxcommons-dao-impl/src/main/resources/app.properties                                                                                                          |    6 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/documents/CategoryDAO.java                                                |   16 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/helpers/StandaloneServerStateSessionHandler.java              |   50 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/dto/TableauBordColumnResponse.java                                            |   21 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/TableDataNotFoundException.java                                                |   13 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/ReferentielSearchRSImpl.java                                  |   50 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/AliasedQueryCriterion.java                                               |  113 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/SupervisionData.java                                                    |   17 
 fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/abstracts/CustomDAOIfaces.java                                                           |  197 
 fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/helper/referentiel/TableDefinitionCheckerImpl.java                                         |  131 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/LocalConfiguration.java                                                                      |   80 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/DeleteQuery.java                                                                  |   94 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/dataproduction/DataProductionTaskType.java                               |    9 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/settings/DisplayOptionsManager.java                                     |   14 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/StructureLigneDAO.java                                        |   16 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/RoutingCheckerImpl.java                                              |   29 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/TableauBordUserSpecificSearchDAO.java                               |   12 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/historique/ReferentielIntegrationHistoriqueDAOImpl.java           |   72 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/CategorieFichier.java                                                                  |   43 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/BadColumnTypeException.java                                                    |   11 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractGenericCrudResourceIFaces.java                  |   61 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/StatResultDto.java                                                        |   25 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/TypeFichierDataColumn.java                                                        |   12 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/searchs/TypeFichierReferentielManager.java                              |   21 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/supervision/SupervisionRSImpl.java                                         |   78 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DataProductionTaskFactory.java                         |   49 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/daoimpl/documents/CategoryDAOImpl.java                                                 |   67 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonDataRowToUpdate.java                                                 |  153 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/dataproduction/DataProductionRS.java                              |   71 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeExtension.java                                                                     |   43 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/PageData.java                                                                                 |   25 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/Noeud.java                                                                             |  111 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/resolvers/JacksonMapperFormat.java                                                                 |   30 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/FdxParsedData.java                                                       |   32 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/ParserUtils.java                                                                             |  420 
 fdx-consultation/fdxconsultation-core-impl/nb-configuration.xml                                                                                                            |   18 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/PreparedStatementProcessor.java                                                   |   16 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonAttributNotExistException.java                                                    |   30 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/helper/TableauBordHandler.java                                          |   94 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/ActionManagerImpl.java                                       |   33 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/SelectQuery.java                                                                  |  145 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/ActionDto.java                                                                  |  109 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/JsonFdxTable.java                                                                  |  282 
 fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/interceptor/InterceptorHandler.java                                                    |   17 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/GroupeParticipantManager.java                               |   29 
 fdx-consultation/fdxconsultation-service-impl/src/main/webapp/index.html                                                                                                   |   10 
 fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/abstracts/CustomManagerIFaces.java                                                     |  136 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxConsultationTable.java                                                          |   96 
 fdx-commons/fdxcommons-core-ifaces/nb-configuration.xml                                                                                                                    |   18 
 fdx-commons/fdxcommons-service-impl/nb-configuration.xml                                                                                                                   |   19 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/DefaultTypeFichierDataColumn.java                                        |   29 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordColumnManagerImpl.java                                     |   27 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/RoutageDetailsResponse.java                                        |   81 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ApplicationSourceManagerImpl.java                               |   39 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/GroupeParticipant.java                                                                 |  113 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproduction/DataProductionToDeleteManagerImpl.java                       |   26 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/CamelBootstrap.java                                             |   78 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/JournalActionUtilisateurDto.java                                                |   34 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/StatutDataProduction.java                                                              |   13 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/AgentConfigurationEntity.java                                           |   55 
 fdx-consultation/fdxconsultation-tools-module/pom.xml                                                                                                                      |   21 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/JournalConnexionUtilisateurDAO.java                        |   19 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/base/BaseEntity.java                                                                               |   56 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/DasboardTypeFichierSearchRS.java                          |   33 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/searchs/UserTypeFichierManagerImpl.java                                     |   53 
 fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/PaysReporting.java                                        |   51 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/settings/SettingRS.java                                           |   22 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/ApiUserActionsRoute.java                              |   26 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/DasboardTypeFichierSearchRSImpl.java                          |   59 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/dto/TableauBordResponse.java                                                  |   36 
 fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/administration/RoleReporting.java                                     |   75 
 fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/db/validators/ParametersValidator.java                                                 |   18 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/UserValidationRSImpl.java                              |  230 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/TypeFichierDto.java                                                               |   66 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jms/messages/ApiTokenMessageType.java                                                              |    9 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ApiTokenSearch.java                                                  |   13 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/TypeFichierRS.java                                    |   66 
 fdx-consultation/fdxconsultation-model/pom.xml                                                                                                                             |  160 
 fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/interceptor/AfterUserActionImpl.java                                                       |   77 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ValidateurFichierConfigurationList.java                                                       |   27 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/message/systeme/MessageSystemeManagerImpl.java                              |  136 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/TypeFichierManagerImpl.java                                     |  178 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/CriteriaEntityFromView.java                                                                   |   49 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/JsonFdxTableColumns.java                                                           |  114 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/TypeFichierRSImpl.java                                    |  179 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/UpdateQuery.java                                                                  |   69 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/FileUtilities.java                                                                                 |   39 
 fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools-entities/src/main/java/com/megatim/fdxconsultation/tools/context/AppContextEntity.java                 |   16 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/favoritessearch/FavoriteSearchManagerImpl.java                              |   72 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/documents/DocumentRSImpl.java                                         |   58 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/NatureProductionFichiersToExport.java                                                         |   27 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ApplicationSourceDAO.java                                     |   16 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonValidationExceptionMapperCustom.java                                              |   79 
 fdx-consultation/fdxconsulation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/RoutageRSImpl.java                                         |   76 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/jpql/JpqlParsedQueryCriterion.java                                       |  156 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/DeleteTableDataQuery.java                                                         |   49 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/dto/TableConfigurationResponse.java                                           |   43 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/integration/AppColumnDeleter.java                                       |   13 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/log/util/QueryExtendsWithApiUserActionSummarySearch.java                      |  106 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/GroupeParticipantDAOImpl.java                                     |   52 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/dto/FdxTableRowDto.java                                                            |   36 
 fdx-consultation/fdxconsultation-reporting/nb-configuration.xml                                                                                                            |   18 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproduction/metadata/ProductionMetaDataManagerImpl.java                  |   33 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/abstracts/CustomDAOWithCriteriaEntityIfaces.java                          |   76 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ParticipantDto.java                                                               |   64 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/db/ReferentielDataSaverImpl.java                                            |  586 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/ParticipantSearchRS.java                                  |   11 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/remoteaction/PlanificationDAO.java                                        |   17 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ApiTypeFichierDataRow.java                                               |   33 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/NoeudSlimResponse.java                                             |   51 
 fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/tools/XmlUtils.java                                                                        |   31 
 fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/db/ImportReferentielHelperImpl.java                                                        |   26 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/WhereQueryParameters.java                                                |   97 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/dataproduction/metadata/CreateDataProductionQuery.java                        |   63 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/RoleRS.java                                        |  125 
 fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/administration/JournalActionUtilisateurReporting.java                 |   44 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/Gravite.java                                                                           |   25 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/ReferentielRSImpl.java                                    |  174 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractFormModelIFaces.java                            |   30 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/PaysDto.java                                                                      |   51 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/ApiJsonFdxTable.java                                                               |   72 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/authentification/LoginRequest.java                                                  |   15 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordGlobalSearchManagerImpl.java                               |   25 
 fdx-consultation/fdxconsultation-core-ifaces/.gitignore                                                                                                                    |   50 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/RoutageManager.java                                         |   38 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/UserTypeFichierWithReferentielSearchRSImpl.java               |   55 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/helper/TableInsert.java                                                 |   21 
 fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/api/token/ApiTokenReporting.java                                      |   53 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/ValidateurFichierConfigurationId.java                                                  |   23 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/log/ApiUserActionLog.java                                                           |   56 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/integration/ColumnDefinitionDAOImpl.java                                      |   50 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/RemoteTypeAction.java                                                                  |   49 
 fdx-consultation/fdxconsultation-core-ifaces/pom.xml                                                                                                                       |  156 
 fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/administration/JournalConnexionUtilisateurReporting.java              |   42 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/OrderByType.java                                                                       |   13 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/IndexColumnDefinition.java                                              |   35 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/CodeStatutHttpSearch.java                                            |   26 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/JournalConnexionUtilisateurSearch.java                               |   36 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/dataproduction/DataProductionDto.java                                                         |   54 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ApiUpdateTypeFichierData.java                                            |   47 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/documents/CategoryManagerImpl.java                                          |   76 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/message/systeme/MessageSystemeDAO.java                                    |   28 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/DeletedColumnDefinition.java                                            |   31 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/MessageSysteme.java                                                 |  135 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/StatististiquesDAO.java                                             |   17 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/TypeFichierDAOImpl.java                                           |   82 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/PaysDAO.java                                                  |   16 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/DefaultTypeFichierDataRow.java                                           |   31 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/PaysSlimResponse.java                                              |   47 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ParticipantsToExport.java                                                                     |   27 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/UserTypeFichierSearchRS.java                              |   35 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordResult.java                                                |  124 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/GroupeNoeudManager.java                                     |   29 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/out/RemoteConfigurationRoute.java                        |   36 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/UserSesionApplication.java                                          |  100 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/search/SearchCriteria.java                                                                         |   27 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/FdxConsultationColumnDefinitions.java                                   |   26 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/remotedataproduction/enums/ScheduleAction.java                                                     |   47 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/filters/AfterUserActionFilter.java                                    |   78 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jms/messages/ApiTokenMessage.java                                                                  |   15 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/remoteaction/Planification.java                                                     |   79 
 fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/ReferentielReporting.java                                 |   52 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/TypeFichierConsultationDAO.java                               |   17 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/RoleSearchRSImpl.java                                         |   50 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/NumberOperator.java                                                                    |   37 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/GenericReportingManagerIFaces.java                             |  254 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/validation/TableDataValidationError.java                                          |  174 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/InsertQuery.java                                                                  |  103 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/remoteaction/PlanificationDAOImpl.java                                        |   33 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/LocalDateTimeValueParseError.java                                              |   13 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/searchs/TypeFichierReferentielManagerImpl.java                              |   41 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/StructureLigneManager.java                                  |   19 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/searchs/UserTypeFichierDAO.java                                           |   22 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DataProductionTask.java                                |   10 
 fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/administration/UserReporting.java                                     |   74 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/PaginationWithCriteriaEntity.java                              |   27 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/dataproduction/metadata/CreateProductionMetaDataQuery.java                    |   85 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ValidateurFichierSlimDto.java                                                     |   30 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractUniqueElementIFace.java                         |   11 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/dataproduction/DataProductionToDeleteManager.java                       |   16 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/log/UserActionLogRSImpl.java                                          |  165 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/api/token/ApiTokenDAO.java                                                |   17 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/remoteproduction/PlanificationDto.java                                                        |   70 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/CriteriaFormRequest.java                                                                      |   24 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/QueryParam.java                                                          |   24 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonFdxApiInsert.java                                                             |   41 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonInsertQuery.java                                                              |  144 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/metadata/constraint/ProductionMetaDataValidator.java                                |   26 
 fdx-consultation/fdxconsultation-dao-ifaces/nb-configuration.xml                                                                                                           |   18 
 fdx-consultation/fdxconsultation-service-impl/src/main/webapp/WEB-INF/beans.xml                                                                                            |    6 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/api/token/ApiToken.java                                                             |   85 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/FonctionAggregationCriterion.java                                             |   53 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/DataProductionIdColumnDefinition.java                                   |   31 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/UserRSImpl.java                                        |  269 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/GroupeNoeudSearch.java                                               |   21 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/log/UserActionLogDAO.java                                                 |   16 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/RoutageDto.java                                                                   |  111 
 fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/log/ApiUserActionLogReporting.java                                    |   43 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/favoritessearch/FavoriteSearchRSImpl.java                             |  130 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/FavoriteSearchDto.java                                                          |   23 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/EchecIntegrationQueries.java                                                      |   37 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonFdxTableStructure.java                                               |   75 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/GroupeParticipantsToExport.java                                                               |   27 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/UserManagerImpl.java                                         |  648 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/searchs/DashboardFichierManager.java                                    |   21 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/configuration/CodeStatutHttpDAOImpl.java                                      |   30 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ApplicationSourceDAOImpl.java                                     |   40 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ValidateurFichierDAO.java                                     |   17 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/MessageEncoder.java                                                 |   34 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/DefaultJsonTypeFichierDataRow.java                                       |   41 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dtos/reporting/CustomTypeFichierReportConfigurationFromView.java                    |   31 
 fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/DynamicTableCreator.java                                            |   13 
 fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/tools/CommonUtilities.java                                                                 |   56 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ReferentielManagerImpl.java                                     |  162 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/integration/JsonFdxConsultationIntegrationData.java                                                |   33 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/BadQueryCriteriaException.java                                                 |   11 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/RoutageDAO.java                                               |   73 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/enums/TypeResultatConfiguration.java                                                |   48 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableauBordDto.java                                                       |   36 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/TypeFichierSlimResponse.java                                       |   63 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/TableauBordHandlerImpl.java                                          |  276 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/supervision/StandaloneServerStateEntityDAOImpl.java                           |   57 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/supervision/AgentConfigurationEntityManagerImpl.java                        |   32 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractReadWithCriteriaEntityIFaces.java               |   53 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/CustomColumns.java                                                                           |   47 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableauBordQueryPojo.java                                                 |   32 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/ApplicationData.java                                                |   33 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ValidateurFichierConfigurationDAOImpl.java                        |   55 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/log/dtos/ApiUserActionSummarySearch.java                                            |   21 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/jaxb/util/JaxBUtil.java                                                                            |   40 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/AggregationQuery.java                                                             |   99 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproduction/DataProductionHandlerImpl.java                               |   37 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonStructureIterator.java                                                        |  135 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/api/supervision/TransfertDataMessageToTransfert.java                        |  100 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableauBordGlobalSearchDAOImpl.java                                     |   28 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/GroupeParticipantDAO.java                                     |   16 
 fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/NoeudReporting.java                                       |   56 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/ColumnStatus.java                                                                      |   24 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/Role.java                                                            |  176 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/RoutageSearch.java                                                   |   26 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/timer/processor/DeleteDataProductionJob.java                      |   13 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractCUDWithCriteriaEntityIFaces.java                |   45 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/settings/DisplayOptionsDAO.java                                           |   16 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/GroupeNoeudSlimResponse.java                                       |   51 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/FonctionAggregation.java                                                               |   47 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/BadDataValueException.java                                                     |   13 
 fdx-commons/fdxcommons-tools/nb-configuration.xml                                                                                                                          |   18 
 fdx-commons/fdxcommons-service-impl/pom.xml                                                                                                                                |  164 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/log/UserActionLogManagerImpl.java                                           |  110 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/ParticipantRSImpl.java                                    |  175 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/RoleDAO.java                                               |   21 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/JsonColumnDefinition.java                                                                     |   46 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/RoutageId.java                                                                         |   19 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/ExtensionFichierRSImpl.java                               |  173 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/supervision/StandaloneServerStateEntityDAO.java                           |   15 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/RequestHandlerImpl.java                                              |  105 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/AppColumnDefinition.java                                                          |   21 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/TypeFichierSearchRS.java                                  |   11 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/SelectResult.java                                                                             |   36 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/supervision/AgentConfigurationEntityDAOImpl.java                              |   55 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/formodel/RoleFormModel.java                                                         |   30 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/dto/TableauBordRequest.java                                                   |   33 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/configuration/CodeStatutHttpManagerImpl.java                                |  186 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/CategorySlimDto.java                                                            |   17 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/formodel/UserFormModel.java                                                         |   28 
 fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/TableDefinitionFilter.java                                          |   19 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/ImportReferentielException.java                                                         |   25 
 fdx-consultation/fdxconsultation-model/nb-configuration.xml                                                                                                                |   18 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/settings/DisplayOptionsRSImpl.java                                    |   38 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/TypeFichierManager.java                                     |   30 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/GroupeParticipantSearch.java                                         |   23 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/ReferentielRS.java                                    |   66 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/favoritessearch/FavoriteSearchManager.java                              |   20 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ReferentielDAO.java                                           |   22 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/log/ApiUserActionLogDAOImpl.java                                              |  156 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/MessageSystemeEndpoint.java                                   |   87 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/dto/StandaloneDashboardResponse.java                                    |   25 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/RoutageRS.java                                        |   85 
 fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools-entities/pom.xml                                                                                       |   52 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/integration/ColumnDefinitionManager.java                                |   30 
 fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/GroupeParticipantReporting.java                           |   52 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/search/SearchColumn.java                                                                           |   32 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/TableauBordColumn.java                                                        |   76 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/log/ApiUserActionLogManager.java                                        |   26 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/mappers/MapStructMapper.java                                                                       |  185 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/RoutagesToExport.java                                                                         |   27 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/TypeFichierDAO.java                                           |   12 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/Select.java                                                                       |   14 
 fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools/src/main/java/com/megatim/fdxconsultation/tools/context/AppCommonContext.java                          |   69 
 fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/ValidateurTypeFichierParser.java                                    |   12 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/Operateur.java                                                                         |   79 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/UpdateQueryPojo.java                                                                          |   42 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/ResultSetExtractor.java                                                           |   47 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/TableauBordsGlobalEndpoint.java                               |   54 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/stats/TableauBordGlobalRS.java                                    |  123 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonAlredyExistException.java                                                         |   37 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedTableConfigurationResponse.java                              |   55 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/TypeFichierSlimDto.java                                                           |   36 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/QueryMetaData.java                                                                |   10 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/Routage.java                                                                           |  152 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/stats/TableauBordRS.java                                          |  122 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/GeneriConsultingManagerIFaces.java                             |   89 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractGenericConsultingCompositePKResourceIFaces.java |   69 
 fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/interceptor/InterceptorHandlerImpl.java                                                    |  158 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ReferentielManager.java                                     |   34 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/dto/SupervisionFilterModalFormRequest.java                              |   25 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/settings/SettingsManagerImpl.java                                           |   24 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/CriteriaEntityPersistedDAO.java                                     |   16 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/metadata/ProductionMetaDataId.java                                                  |   26 
 fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/integration/AppColumnCreator.java                                                      |   13 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/searchs/UserParticipantManager.java                                     |   21 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/TypeFichierReferentielSearchRS.java                       |   32 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/GenericCrudManagerIFaces.java                                  |   58 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/log/UserActionLogManager.java                                           |   27 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/historique/ReferentielIntegrationHistoriqueManagerImpl.java     |   38 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/remoteaction/RemoteConfigurationRS.java                           |   19 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/timers/processor/DataIntegrationProcessor.java           |   53 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/StandaloneServerStateConsumerRoute.java               |   26 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/filters/SecurityFilter.java                                           |   54 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeDonnee.java                                                                        |   61 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeIdMessageSysteme.java                                                              |   53 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/CommonDataProduction.java                                                           |   73 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/FdxColumnNotFoundException.java                                                         |   12 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ParticipantManager.java                                     |   28 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/BaseEntityDto.java                                                              |   29 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/ColumnNotFoundException.java                                                   |   12 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/TokenColumnDefinition.java                                              |   34 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/AppFileUtils.java                                                                                  |   30 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonFdxParsedDataRow.java                                                |  267 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/searchs/UserParticipantManagerImpl.java                                     |   54 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/documents/DocumentDAO.java                                                |   16 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/ApplicationForbidenException.java                                                       |   29 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/WhereQueryString.java                                                             |  160 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/log/UserActionStatData.java                                                     |   22 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dtos/reporting/CustomTypeFichierReportConfiguration.java                            |   30 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TableauBordGlobalSearch.java                                         |   28 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/RoleValidationRSImpl.java                              |  260 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TransfertSearch.java                                                 |   14 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ExtensionFichierSlimDto.java                                                      |   28 
 fdx-commons/pom.xml                                                                                                                                                        |   27 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/integration/EchecIntegrationDAOImpl.java                                      |   46 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ValidateurFichierConfigurationSlimDto.java                                        |   26 
 fdx-consultation/fdxconsultation-core-impl/pom.xml                                                                                                                         |  202 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/searchs/TypeFichierReferentielSearchDAO.java                              |   21 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/TranfertDecoder.java                                 |   41 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/FdxConsultationTableInsert.java                                      |   83 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/settings/DisplayOptionsManagerImpl.java                                     |   29 
 fdx-consultation/fdxconsultation-dao-ifaces/.gitignore                                                                                                                     |   50 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/NoeudRSImpl.java                                          |  188 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonInsert.java                                                                   |   15 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/log/ApiUserActionLogRSImpl.java                                       |  198 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CountQuery.java                                                                   |   95 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/LocalDateTimeAdapter.java                                                              |   31 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/MessagesSystemeCronBean.java                                  |  103 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/GroupeNoeud.java                                                                       |  114 
 fdx-commons/fdxcommons-dao-impl/nb-configuration.xml                                                                                                                       |   18 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/ParticipantSearchRSImpl.java                                  |   52 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/StatutConfiguration.java                                                |   13 
 fdx-consultation/README.md                                                                                                                                                 |   43 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/HistoriqueMotDePasseDAO.java                               |   24 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/startup/StartupBean.java                                              |  303 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/enums/StatResultType.java                                                           |   13 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/TableauBordGlobalSearchRSImpl.java                            |   48 
 fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/integration/ColumnDefinitionDAO.java                                                     |   84 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/dataproduction/metadata/ProductionMetaDataManager.java                  |   18 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/message/systeme/MessageSystemeManager.java                              |   60 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/ExtensionFichierSlimResponse.java                                  |   52 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/FichiersEndpoint.java                                         |   55 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeStatut.java                                                                        |   37 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ParticipantManagerImpl.java                                     |  143 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/TableauBordColumnManager.java                                     |   17 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/natureproduction/NatureProductionFichierManagerImpl.java        |   34 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/customtypefichier/DynamicClassCreatorImpl.java                              |  150 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/DataProductionSource.java                                                           |   47 
 fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/helper/referentiel/ReferentielXmlDataReaderImpl.java                                       |  175 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/filters/BeforeUserActionFilter.java                                   |   34 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/JournalConnexionUtilisateurRSImpl.java                 |  220 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/UserWebSocket.java                                                  |   52 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/GroupeNoeudSlimDto.java                                                           |   32 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/TableauBordColumnDAO.java                                           |   16 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/security/RoleSecurity.java                                           |  252 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ValidateurFichierDto.java                                                         |   33 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxbentity/adapter/LocalDateAdapter.java                                                           |   27 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/favoritessearch/FavoriteSearch.java                                                 |   33 
 fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/interceptor/BeforeAction.java                                                          |   16 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/TableauBordSearchRS.java                                  |    7 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/JsonDataUtil.java                                                                            |  206 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTable.java                                                                      |  251 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/ManagerWithCriteriaEntityIFaces.java                           |  112 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonResultSetProcessor.java                                                       |  143 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/PaysManager.java                                            |   24 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/JournalActionUtilisateur.java                                        |  111 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/TestRS.java                                           |   27 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/configuration/CodeStatutHttpManager.java                                |   29 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/UserActionLogConsumer.java                             |   25 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/Participant.java                                                                       |  130 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ApiTypeFichierDataColumn.java                                            |   29 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/CriteriaEntityPersistedManager.java                               |   21 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/ColumnDefinition.java                                                                  |   71 
 fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/integration/json/TypeFichierJsonDAO.java                                                 |   29 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/AdministrationNumberDto.java                                                    |   23 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/supervision/SupervisionRS.java                                    |   45 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/customtypefichier/CustomTypeFichierManagerImpl.java                         |  105 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/FdxParsedDataAction.java                                                                     |   74 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/log/UserActionLogRS.java                                          |   14 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/documents/DocumentRS.java                                         |   44 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/TableauBordGlobalSearchDAO.java                                     |   12 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/ApplicationSource.java                                                                 |   96 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordUserSpecificSearchManagerImpl.java                         |   25 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/PaysRS.java                                           |   68 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/remoteproduction/RemoteConfigurationDto.java                                                  |   47 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/searchs/UserTypeFichierDAOIml.java                                                 |  134 
 fdx-consultation/fdxconsultation-service-ifaces/nb-configuration.xml                                                                                                       |   18 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/Action.java                                                          |  220 
 fdx-consultation/fdxconsultation-reporting/pom.xml                                                                                                                         |   88 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/enums/TypeConfigurationTableauBord.java                                             |   48 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/tools/SourceCompiler.java                                               |   29 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordManagerImpl.java                                           |  316 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/ExtensionFichier.java                                                                  |   90 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/log/UserActionLogDAOImpl.java                                                 |   44 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/FonctionAggregationCriterionDto.java                                      |   17 
 fdx-commons/fdxcommons-model/nb-configuration.xml                                                                                                                          |   18 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/TableNotCummulativeException.java                                              |   13 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ParticipantDAO.java                                           |   14 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/NoeudDAOImpl.java                                                 |   29 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/HistoriqueMotDePasse.java                                            |  139 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/daoimpl/documents/DocumentDAOImpl.java                                                 |   48 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/TableauBordDAO.java                                                 |   44 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableConfigurationDAOImpl.java                                          |   60 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/factory/FdxConsultationTableFactory.java                                    |   31 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ValidateurFichierConfigurationManager.java                  |   20 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dataproduction/DataProduction.java                                                  |   26 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/UserActionsRoute.java                                    |   34 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonFdxParsedDataIterator.java                                           |   36 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ParsedQueryCriterion.java                                                |  132 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/supervision/TransfertManager.java                                       |   25 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/InformationGeneraleDto.java                                                     |   24 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/historique/ReferentielIntegrationHistoriqueManager.java     |   22 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/mappers/MapStructMapper.java                                                        |  203 
 fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/helper/referentiel/TableDefinitionFilterImpl.java                                          |  107 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/api/token/ApiTokenRS.java                                         |  120 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/NoeudSlimDto.java                                                                 |   33 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/CriteriaEntity.java                                                                           |   97 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/supervision/StandaloneServerStateEntityManagerImpl.java                     |   71 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/json/TypeFichierJson.java                                                              |   56 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/ActionSlimDto.java                                                              |  110 
 fdx-commons/fdxcommons-service-impl/src/main/webapp/WEB-INF/beans.xml                                                                                                      |    6 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/RoleRSImpl.java                                        |  270 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/ParticipantSlimResponse.java                                       |   54 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/customtypefichier/CustomTypeFichierManager.java                         |   58 
 fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/db/ImportZipValidatorIfaces.java                                                       |   25 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/camel/helper/FileInsertionProcess.java                                      |  331 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/BrokerProperties.java                                                                        |   17 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/ConnexionStatutEndpoint.java                                  |   41 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/jpql/JpqlWhereQueryParameters.java                                       |   97 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/User.java                                                            |  252 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/NoeudsToExport.java                                                                           |   28 
 fdx-commons/fdxcommons-service-impl/src/main/webapp/index.html                                                                                                             |   10 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/utils/CriteriaEntitySearchUtil.java                                         |  103 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/remoteaction/RemoteConfigurationDAOImpl.java                                  |   33 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/Transfert.java                                                          |   90 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/TableauBord.java                                                              |   81 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/StandaloneServerStateEndpoint.java                            |   64 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/TableDefinitionId.java                                                                 |   24 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/StandaloneServerStateConsumer.java                     |   31 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/JournalConnexionUtilisateurDAOImpl.java                        |   44 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/DateCreationColumnDefinition.java                                       |   31 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/ProductionMetaDaConsumer.java                          |   52 
 fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/TypeFichierReporting.java                                 |   64 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/supervision/AgentConfigurationEntityManager.java                        |   18 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/helpers/TableauBordGlobalSessionHandler.java                  |   51 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/dataproduction/DataProductionToDeleteDAO.java                             |   16 
 fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/natureproduction/NatureProductionFichierDAO.java                                         |   25 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/settings/DisplayOptionsRS.java                                    |   32 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/documents/Document.java                                                             |   33 
 fdx-commons/fdxcommons-core-impl/pom.xml                                                                                                                                   |  272 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/settings/SettingsManager.java                                           |   12 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/out/DirectToTokenGenerationKafkaRoute.java               |   31 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/remoteaction/RemoteConfigurationId.java                                                            |   23 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/GroupingColumnDto.java                                                    |   20 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ApplicationSourceSearch.java                                         |   21 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/JournalActionUtilisateurRS.java                    |   92 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/jpql/JpqlQueryParam.java                                                 |   24 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/NoeudDAO.java                                                 |   37 
 fdx-commons/fdxcommons-model/pom.xml                                                                                                                                       |  221 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeActionSysteme.java                                                                 |   44 
 fdx-consultation/fdxconsultation-core-impl/.gitignore                                                                                                                      |   50 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ParticipantSearch.java                                               |   21 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/QueryCriteriaCorrectValue.java                                           |  227 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/RoutageManagerImpl.java                                         |  173 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/log/UserActionLogDto.java                                                       |   34 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/JournalActionUtilisateurSearch.java                                  |   36 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/ConnexionStatutsEncoder.java                         |   35 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/StatutReferentiel.java                                                                 |   48 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/CodeStatutHttpDto.java                                                          |   43 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/TypeFichierReferentielForUserSearchRSImpl.java                |   51 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/natureproduction/NatureProductionFichierManager.java        |   20 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/CriteriaLocalDateTimeValue.java                                          |   49 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/FdxTableDefinition.java                                                  |  124 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DefaultDataProductionWorkerGroup.java                  |   81 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/favoritessearch/FavoriteSearchDAO.java                                    |   15 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/RoutageSlimDto.java                                                               |   62 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/TableDefinitionQueries.java                                                       |  169 
 fdx-consultation/fdxconsultation-dao-ifaces/pom.xml                                                                                                                        |  142 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/documents/DocumentManageImpl.java                                           |   85 
 fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/helper/referentiel/ReferentielToImportDataReaderImpl.java                                  |   76 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/UserSessionBean.java                                          |   23 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/adapters/LocalDateTimeAdapter.java                                                  |   25 
 fdx-consultation/fdxconsultation-service-impl/nb-configuration.xml                                                                                                         |   21 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/integration/ColumnDefinitionResource.java                         |   23 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/Referentiel.java                                                                       |  140 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/GroupeNoeudManagerImpl.java                                     |  132 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/UserParticipantSearchRSImpl.java                              |   79 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/natureproduction/NatureProduction.java                                                 |   36 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CurrentDataProductionQuery.java                                                   |   42 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/StatScalarResult.java                                                     |   19 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/TableauBordGlobalSearchManager.java                               |    8 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/TableDefinitionManagerImpl.java                                 |   34 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/searchs/DashboardFichierManagerImpl.java                                    |   41 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/EtatTransfert.java                                                      |   82 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonTypeFichierDataRow.java                                                       |   18 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TypeFichierReferentielSearch.java                                    |   28 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/GroupeNoeudDAOImpl.java                                           |   53 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/documents/CategoryManager.java                                          |   22 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/SimpleData.java                                                                   |   35 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ExtensionFichiersToExport.java                                                                |   27 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/UserParticipantSearchRS.java                              |   45 
 fdx-consultation/fdxconsultation-dao-impl/src/main/resources/META-INF/persistence.xml                                                                                      |  122 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/ApiTokenDto.java                                                                |   35 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractGenericValidationIFaces.java                    |   99 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/TypeFichierExistNotException.java                                                       |   13 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/CriteriaEntityPersistedDAOImpl.java                                     |   84 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/UserTypeFichierSearchRSImpl.java                              |   50 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/TransfertEncoder.java                                |   40 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ValidateurFichierConfigurationDAO.java                        |   17 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/CamelProperties.java                                                                         |   37 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/RoleDto.java                                                                    |   60 
 fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/db/validators/CriteriaQueryValidatorImpl.java                                              |  244 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonUpdate.java                                                                   |  101 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/integration/EchecIntegrationDAO.java                                      |   16 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/documents/CategoryRSImpl.java                                         |   66 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/JournalActionUtilisateurManagerImpl.java                     |  122 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/EditPasswordDto.java                                                            |   20 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableauBordDAOImpl.java                                                 |  302 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/CamelRouteConfiguration.java                                                                 |   60 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/JournalConnexionUtilisateurManagerImpl.java                  |  121 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/ParticipantToFichiersDecoder.java                    |   40 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/supervision/TransfertDAO.java                                             |   37 
 fdx-commons/fdxcommons-core-ifaces/pom.xml                                                                                                                                 |  133 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/SearchAnnotationOperateur.java                                                         |   19 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/DataProductionUpdateIdColumnDefinition.java                             |   34 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableConfigurationManagerImpl.java                                    |   24 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/ConnexionStatutConsumer.java                           |   23 
 fdx-commons/fdxcommons-tools/pom.xml                                                                                                                                       |  354 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/QueryParameterFromView.java                                                                   |   37 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/PermanentDeleteQuery.java                                                         |   50 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/JournalActionUtilisateurManager.java                     |   30 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/RoutageRSImpl.java                                        |  189 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/UserSearch.java                                                      |   19 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/RoleDAOImpl.java                                               |   53 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/TableDefinition.java                                                                   |   44 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/NoeudManagerImpl.java                                           |  132 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/RoleSlimDto.java                                                                |   33 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/HistoriqueMotDePasseManager.java                         |   36 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/natureproduction/NatureProductionFichier.java                                          |   83 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/TypeFichiersToExport.java                                                                     |   27 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/DefaultPreparedStatementProcessor.java                                            |   64 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/documents/CategoryRS.java                                         |   49 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/searchentities/ColumnDefinitionSearch.java                                                         |   31 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/StructureLigneDAOImpl.java                                        |   40 
 fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/interceptor/LoggingInterceptorBinding.java                                             |   27 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/PaysSearch.java                                                      |   22 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/api/token/ApiTokenManager.java                                          |   29 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/ExportExcelGenerator.java                                      |   66 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/base/BaseEntity.java                                                                |   54 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/MessageDecoder.java                                                 |   39 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/log/UserActionLog.java                                                                             |   63 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ValidateurFichierConfigurationManagerImpl.java                  |   40 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/OrderByDefinition.java                                                                        |   31 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ExtensionFichierDAOImpl.java                                      |   51 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/chat/UserChatListRSImpl.java                                          |   49 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/searchs/UserParticipantDAOIml.java                                                 |   81 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/log/ApiUserActionLogRS.java                                       |   90 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/GlobalDasboardTypeFichierSearchRSImpl.java                    |   42 
 fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/customtypefichier/DynamicClassCreator.java                                             |   17 
 fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/ParticipantReporting.java                                 |   56 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/supervision/TransfertDaoDynamicWhereString.java                               |   76 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/QueryCriterion.java                                                      |   47 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/JournalActionUtilisateurRSImpl.java                    |  221 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/NoeudManager.java                                           |   29 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/TransfertEndpoint.java                                        |   41 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/AppColumnDeleterImpl.java                                       |   74 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/chat/UserChatListRS.java                                          |   31 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/UserValidationRS.java                              |  109 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/dataproduction/ProductionMetaDataDto.java                                                     |   31 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/HistoriqueMotDePasseManagerImpl.java                         |   52 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/integration/EchecIntegration.java                                                   |   33 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/DocumentDto.java                                                                |   24 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/resolvers/JacksonMapperFormat.java                                         |   26 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/TypeFichier.java                                                                       |  121 
 fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/integration/json/JsonStructureDAO.java                                                   |   48 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/DynamicTableCreatorImpl.java                                    |   38 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/helper/DataConsumptionOperations.java                                   |   32 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/FileDataProductionTask.java                            |   93 
 fdx-consultation/fdxconsultation-service-impl/src/main/webapp/WEB-INF/web.xml                                                                                              |   16 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/StructureLigneToExport.java                                                                   |   27 
 fdx-commons/fdxcommons-dao-impl/pom.xml                                                                                                                                    |  180 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/log/ContainerContextDto.java                                                                       |   34 
 fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/RoutageReporting.java                                     |   64 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/EnCoursProductionColumnDefinition.java                                  |   40 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/configuration/CodeStatutHttpDAO.java                                      |   14 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/JournalConnexionUtilisateur.java                                     |  111 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/remoteaction/RemoteConfiguration.java                                               |   59 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/TransfertDataMessageRoute.java                        |   28 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/TypeFichierReferentielSearchRSImpl.java                       |   41 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTableColumn.java                                                                |   36 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/ReferentialConsumerRoute.java                         |   30 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/authentication/AuthenticationRS.java                              |  110 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonTypeFichierInsertMetaData.java                                                |   22 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/enums/FileExtension.java                                                               |   28 
 fdx-commons/fdxcommons-core-ifaces/.gitignore                                                                                                                              |   50 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/GroupeNoeudDto.java                                                               |   55 
 fdx-commons/fdxcommons-service-impl/src/main/java/com/megatim/fdxcommons/service/impl/JAXRSConfiguration.java                                                              |   28 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/EchecIntegrationManagerImpl.java                                |   26 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/supervision/TransfertDAOImpl.java                                             |  303 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/consumption/DataConsumptionOperationsRS.java                      |   63 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ReferentielsToExport.java                                                                     |   27 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/ParticipantToFichierDto.java                                                    |   23 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTableName.java                                                                  |   89 
 fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/referentiel/historique/ReferentielIntegrationHistoriqueDAO.java                          |   21 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/api/token/ApiTokenDAOImpl.java                                                     |   52 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/GlobalDasboardSearchRS.java                               |    7 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/searchentities/TableDefinitionSearch.java                                                          |   25 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableauBordSlimDto.java                                                   |   27 
 fdx-commons/fdxcommons-dao-ifaces/.gitignore                                                                                                                               |   50 
 fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/TableDefinitionChecker.java                                         |   17 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DataProductionWorker.java                              |   42 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/AbstractCrudManager.java                                       |   90 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonRessourceNotFoundException.java                                                   |   45 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/settings/DisplayOptionsDAOImpl.java                                           |   62 
 fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/configuration/CodeStatutHttpReporting.java                            |   41 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ReferentielSlimDto.java                                                           |   35 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/security/UserSecurity.java                                           |   37 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ReferentielSearch.java                                               |   22 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/CriteriaEntityPersistedManagerImpl.java                               |  225 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/EtatIntegration.java                                                                   |   13 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TypeFichierSearch.java                                               |   24 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/ApiUserActionLogConsumer.java                          |   29 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/historique/ReferentielIntegrationHistoriqueId.java                                     |   23 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/favoritessearch/FavoriteSearchRS.java                             |   56 
 fdx-consultation/fdxconsultation-core-ifaces/nb-configuration.xml                                                                                                          |   18 
 fdx-consultation/fdxconsultation-service-ifaces/.gitignore                                                                                                                 |   50 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/Pays.java                                                                              |   98 
 fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/ExtensionFichierReporting.java                            |   56 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/SqlUtilities.java                                                                            |   27 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonApplicationServerException.java                                                   |   18 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/dataproduction/metadata/ProductionMetaDataDAO.java                        |   19 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/message/systeme/MessageSystemeDAOImpl.java                                    |   56 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/InsertionLocalDateTimeValue.java                                         |   88 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/dto/StandaloneDashboardRequest.java                                     |   20 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/settings/SettingRSImpl.java                                           |   28 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/metadata/ProductionMetaData.java                                                    |   74 
 fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/ReferentielConsumptionHelper.java                                               |   12 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/TypeFichierUpdateMetaData.java                                                    |   16 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/dataproduction/DataProductionToDeleteDAOImpl.java                             |   38 
 fdx-commons/fdxcommons-service-ifaces/nb-configuration.xml                                                                                                                 |   18 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/GroupeNoeudDAO.java                                           |   16 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/SearchColumnUtil.java                                                                        |   88 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/DataConsumptionOperationsImpl.java                                   |  168 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ParticipantSlimDto.java                                                           |   43 
 fdx-consultation/nb-configuration.xml                                                                                                                                      |   18 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ConsultationTypeFichierInsertData.java                                   |   44 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/DataProductionToDelete.java                                                         |   31 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CreateTableIfNotExistQuery.java                                                   |  135 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/NoeudSearch.java                                                     |   22 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/ColumnDefinitionManagerImpl.java                                |   60 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/ValidateurFichierConfiguration.java                                                    |   76 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/PaysSlimDto.java                                                                  |   30 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/CriteriaEntityFromViewToQueryCriterion.java                                                  |   49 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/ActionRS.java                                      |   15 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/CategoryDto.java                                                                |   21 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/api/token/ApiTokenStatut.java                                                       |   37 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/GroupeNoeudRS.java                                    |   70 
 fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools-entities/src/main/java/com/megatim/fdxconsultation/tools/CommonsToolsEntity.java                       |  430 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/BetweenOperatorValues.java                                                                    |   39 
 fdx-consultation/fdxconsultation-service-impl/.gitignore                                                                                                                   |   50 
 fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/dataproduction/DataProductionHandler.java                                              |   17 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/search/EnumValue.java                                                                              |   19 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/utils/BaseEntityUtil.java                                                     |   34 
 fdx-commons/fdxcommons-service-impl/src/main/webapp/WEB-INF/web.xml                                                                                                        |    8 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ValidateurFichierSearch.java                                         |   23 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/dataproduction/DataProductionTaskInfo.java                               |  130 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/timers/DataIntegrationTimer.java                         |   31 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/sockets/DataProductionSessionHandler.java                                   |   49 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/NoeudDto.java                                                                     |   56 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/ReferentielSlimResponse.java                                       |   52 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/Utils.java                                                            |   48 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/GroupeParticipantRS.java                              |   70 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/TypeFichierSearchRSImpl.java                                  |   50 
 fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools/pom.xml                                                                                                |  148 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/supervision/TransfertMessageKey.java                                          |   29 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ValidateurFichierConfigurationDto.java                                            |   49 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/TypeFichierReportingManagerIFaces.java                         |  160 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractGenericReportingIFaces.java                     |   57 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonCountQuery.java                                                               |  111 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ApiTypeFichierInsertData.java                                            |   53 
 fdx-commons/fdxcommons-core-impl/nb-configuration.xml                                                                                                                      |   18 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/PaginationWithSearchEntity.java                                |   37 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TableauBordSearch.java                                               |   24 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/FdxUpdate.java                                                                    |   69 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/dto/FdxTableColumnDataDto.java                                                     |   63 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ExtensionFichierDAO.java                                      |   16 
 fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/ReferentielToImportDataReader.java                                  |   13 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/json/JsonStructure.java                                                                |   77 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/TableConfigurationManager.java                                    |   12 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/FdxInsert.java                                                                    |   24 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/api/token/ApiTokenManagerImpl.java                                          |  232 
 fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/helper/referentiel/ValidateurTypeFichierParserImpl.java                                    |  335 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CustomQueries.java                                                                |   89 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/utils/FdxTableUtils.java                                                    |   38 
 fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/DataInMemoryHandler.java                                                        |   14 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/TableauBordManager.java                                           |   42 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ApplicationSourceSlimDto.java                                                     |   30 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedCriteriaEntityPersisted.java                                 |  166 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/GroupeParticipantManagerImpl.java                               |  138 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/AppColumnCreatorImpl.java                                       |   77 
 fdx-consultation/fdxconsultation-service-ifaces/pom.xml                                                                                                                    |  125 
 fdx-consultation/fdxconsultation-service-impl/pom.xml                                                                                                                      |  242 
 fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/db/ReferentielDataSaver.java                                                           |   13 
 fdx-consultation/fdxconsultation-dao-impl/nb-configuration.xml                                                                                                             |   18 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/timers/processor/DeleteDataProductionJobImpl.java        |  101 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/searchs/TypeFichierReferentielSearchDAOImpl.java                                   |  130 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/FdxConsultationIndexColumnDefinition.java                               |   27 
 fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/utils/SearchCriteriaBuilderUtil.java                                                     |  166 
 fdx-commons/fdxcommons-service-ifaces/.gitignore                                                                                                                           |   50 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/CriteriaEntityFromViewToJqplQueryCriterion.java                                              |   50 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ValidateurFichierManagerImpl.java                               |   94 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/JsonTableDefinition.java                                                                      |   59 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/helper/RequestHandler.java                                              |   21 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/RoleSearchRS.java                                         |   11 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/helper/RoutingChecker.java                                              |   21 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/historique/ReferentielIntegrationHistorique.java                                       |   75 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/enums/FonctionAggregationOperateur.java                                             |   69 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/DateMiseAJourColumnDefinition.java                                      |   34 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/HistoriqueMotDePasseDAOImpl.java                               |   85 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/daoimpl/favoritessearch/FavoriteSearchDAOImpl.java                                     |   39 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CreateDataProductionQuery.java                                                    |   73 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/integration/EchecIntegrationManager.java                                |   17 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/RoleSearch.java                                                      |   39 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/remoteaction/RemoteConfigurationRSImpl.java                           |  136 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dtos/reporting/ReportingDto.java                                                    |   23 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/DataProductionEncoder.java                           |   34 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/GroupeParticipantDto.java                                                         |   53 
 fdx-consultation/fdxconsultation-reporting/.gitignore                                                                                                                      |   50 
 fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/ReferentielXmlDataReader.java                                       |   14 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/SensTransfert.java                                                      |   41 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/ParentIdColumnDefinition.java                                           |   35 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ValidateurFichierDAOImpl.java                                     |   53 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonParsedQueryCriterion.java                                            |  137 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableauBordColumnDAOImpl.java                                           |   45 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/SelectDataProductionQuery.java                                                    |   35 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/log/ApiUserActionLogManagerImpl.java                                        |  100 
 fdx-consultation/fdxconsultation-model/.gitignore                                                                                                                          |   50 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/authentication/AuthenticationRSImpl.java                              |  177 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableauBordUserSpecificSearchDAOImpl.java                               |   28 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/UserSlimDto.java                                                                |   42 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/StructureLigneSearch.java                                            |   22 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/StandaloneServerStateEntityDecoder.java              |   39 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/TypeFichierInsertMetaData.java                                                    |   16 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonApplicationValidationException.java                                               |   29 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/SelectQueryResult.java                                                   |   37 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/historique/pojo/TableDefinitionFiltered.java                                           |   29 
 fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ExtensionFichierSearch.java                                          |   22 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/UserDAOImpl.java                                               |  140 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/dataproduction/DataProductionRSImpl.java                              |  164 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/QueryParameter.java                                                                           |   68 
 fdx-consultation/fdxconsultation-dao-impl/.gitignore                                                                                                                       |   50 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/ApplicationEndpoint.java                                      |   84 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedCriteriaEntityFromView.java                                  |   89 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/PaysDAOImpl.java                                                  |   44 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/integration/dto/ApiIntegrationDataDto.java                                                         |   71 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractFormDataIFaces.java                             |   38 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/integration/ColumnDefinitionResourceImpl.java                         |   32 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/TableauBordUserSpecificSearchManager.java                         |    8 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/NoeudRS.java                                          |   70 
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/FdxParsedDataRow.java                                                    |  123 
 fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/JournalActionUtilisateurDAO.java                           |   17 
 fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/ConnectedStatutsRoute.java                            |   28 
 fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/StructureLigne.java                                                                    |  113 
 fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/dataproduction/DataProductionDAOImpl.java                                     |   53 
 fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/CommonReadManager.java                                         |  133 
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordRequestError.java                                          |   83 
 fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/JournalConnexionUtilisateurRS.java                 |   94 
 984 files changed, 63,692 insertions(+), 0 deletions(-)

diff --git a/fdx-commons/README.md b/fdx-commons/README.md
new file mode 100644
index 0000000..33958c0
--- /dev/null
+++ b/fdx-commons/README.md
@@ -0,0 +1,43 @@
+
+# Back-end Projet MGT.FS
+
+## Tools : 
+    1. OS: Windows 10 ;
+    2. IDE: NetBeans 12.0 ;
+    3. Language: Java 8.0 ;
+    4. Maven 3.1 ;
+    5. WildFly 17 ;
+    6. Git  2.41 ;
+    7. EJB 3.0
+    8. L'API JPA 2.1 
+    9. provider: Hibernate
+    10. Transaction-type: JTA
+    11. Data-Source
+    12. Postgres SQL 14.3
+    13. PostMan
+    14. PowerAMC
+    15. Bitbucket
+
+## prérequis :
+    1. Installation du Serveur d'application WildFly ;
+    2. Installation du SGBD  ;
+    3. Installation du JDK ;
+    4. Installation de Maven ;
+
+
+
+## Lancement:
+    1. Creation d'une Base de donnée sur postgres si vous utilisé postgres  ;
+    2. Creation d'une Datasource nomé fileDS dans WildFly ;
+    3. Build du module parent ;
+    4. deploiment du War (source_file_service-impl-1.0-SNAPSHOT.war) dans WildFly ;
+
+
+
+## Lien de Test de L'API (Collection Du Projet)
+
+
+
+## Team Dev
+    Victor E...
+    Leonel F...
diff --git a/fdx-commons/fdxcommons-core-ifaces/.gitignore b/fdx-commons/fdxcommons-core-ifaces/.gitignore
new file mode 100644
index 0000000..b24d71e
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/.gitignore
@@ -0,0 +1,50 @@
+# These are some examples of commonly ignored file patterns.
+# You should customize this list as applicable to your project.
+# Learn more about .gitignore:
+#     https://www.atlassian.com/git/tutorials/saving-changes/gitignore
+
+# Node artifact files
+node_modules/
+dist/
+
+# Compiled Java class files
+*.class
+
+# Compiled Python bytecode
+*.py[cod]
+
+# Log files
+*.log
+
+# Package files
+*.jar
+
+# Maven
+target/
+dist/
+
+# JetBrains IDE
+.idea/
+
+# Unit test reports
+TEST*.xml
+
+# Generated by MacOS
+.DS_Store
+
+# Generated by Windows
+Thumbs.db
+
+# Applications
+*.app
+*.exe
+*.war
+
+# Large media files
+*.mp4
+*.tiff
+*.avi
+*.flv
+*.mov
+*.wmv
+
diff --git a/fdx-commons/fdxcommons-core-ifaces/nb-configuration.xml b/fdx-commons/fdxcommons-core-ifaces/nb-configuration.xml
new file mode 100644
index 0000000..a65c451
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/nb-configuration.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+    <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+        <!--
+Properties that influence various parts of the IDE, especially code formatting and the like. 
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+        <netbeans.hint.jdkPlatform>JDK_1.8</netbeans.hint.jdkPlatform>
+    </properties>
+</project-shared-configuration>
diff --git a/fdx-commons/fdxcommons-core-ifaces/pom.xml b/fdx-commons/fdxcommons-core-ifaces/pom.xml
new file mode 100644
index 0000000..105de5b
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/pom.xml
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+        <groupId>com.megatim.fdxcommons</groupId>
+        <artifactId>fdxcommons</artifactId>
+        <version>1.0</version>
+    </parent>
+    
+    <groupId>com.megatim.fdxcommons.core.ifaces</groupId>
+    <artifactId>fdxcommons-core-ifaces</artifactId>
+    <packaging>jar</packaging>
+    
+    <properties>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+        <jakartaee>8.0</jakartaee>
+    </properties>
+    
+    <dependencies>
+        <dependency>
+            <groupId>com.megatim.fdxcommons.dao.ifaces</groupId>
+            <artifactId>fdxcommons-dao-ifaces</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>javax</groupId>
+            <artifactId>javaee-api</artifactId>
+            <version>${jakartaee}</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.bekosoftware</groupId>
+            <artifactId>genericDAOLayer</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.bekosoftware</groupId>
+            <artifactId>genericManagerLayer</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatimgroup</groupId>
+            <artifactId>mgt-commons-tools</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxcommons.tools</groupId>
+            <artifactId>fdxcommons-tools</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>        
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-core</artifactId>
+            <version>5.3.0.Final</version>
+            <scope>compile</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        
+    </dependencies>
+    <name>fdxcommons-core-ifaces</name>
+</project>
\ No newline at end of file
diff --git a/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/abstracts/CustomManagerIFaces.java b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/abstracts/CustomManagerIFaces.java
new file mode 100644
index 0000000..520808b
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/abstracts/CustomManagerIFaces.java
@@ -0,0 +1,136 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.core.ifaces.abstracts;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.search.SearchColumn;
+import com.megatim.fdxcommons.tools.utils.SqlUtilities;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import com.megatim.fdxcommons.dao.ifaces.abstracts.CustomDAOIfaces;
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+
+/**
+ *
+ * @author ASUS
+ * @param <T> : Entite reelle
+ * @param <ID> : Classe de l'identifiant
+ * @param <S> : entité de recherche
+ * @param <U> : entité qui représente un utilisateur
+ */
+public interface CustomManagerIFaces<T, ID, S, U> {
+
+    <R extends CustomDAOIfaces<T, ID, S>> R getDao();
+
+    default T save(T entity) {
+        return getDao().save(entity);
+    }
+
+    default void delete(T entity) {
+        getDao().delete(entity);
+    }
+
+    public default T getById(ID id, U connectedUser) {
+        T entity = getDao().getById(id);
+        return entity;
+    }
+
+    public default T getById(ID id) {
+
+        return getDao().getById(id);
+    }
+
+    public default List<T> findWithPagination(Integer pageNumber, Integer pagesize, S searchEntity, U connectedUser) {
+        return getDao().findWithPagination(pageNumber, pagesize, searchEntity);
+    }
+
+    public default List<T> getAll(S searchEntity, U connectedUser) {
+        List<T> data = getDao().getAll(searchEntity);
+        return data;
+    }
+
+    public default List<T> getAll(S searchEntity) {
+        List<T> data = getDao().getAll(searchEntity);
+        return data;
+    }
+
+    public default List<T> getAll() {
+        return getDao().getAll(null);
+    }
+
+    public default Long count(S searchEntity) {
+        return getDao().count(searchEntity);
+    }
+
+    public default List<SearchColumn> getSearchColumns(Class<T> classe) {
+        List<SearchColumn> searchColumns = new ArrayList<>();
+        List<Field> fields = Arrays.asList(classe.getDeclaredFields());
+
+        for (Field f : fields) {
+            CriteriaEntitySearch searchAnn = f.getAnnotation(CriteriaEntitySearch.class);
+            if (searchAnn != null) {
+                SearchColumn searchColumn = new SearchColumn();
+                searchColumn.setLibelle(searchAnn.libelle());
+//                searchColumn.setName(searchAnn.fieldName().isEmpty() ? f.getName() : searchAnn.fieldName());
+
+                TypeDonnee typeDonnee = getTypeDonnee(f, searchAnn);
+
+                if (typeDonnee != null) {
+                    searchColumn.setTypeDonnee(typeDonnee);
+                    searchColumns.add(searchColumn);
+                }
+
+            }
+        }
+        return searchColumns;
+    }
+
+    public default TypeDonnee getTypeDonnee(Field field, CriteriaEntitySearch searchAnn) {
+        Class<?> fieldClass = field.getType();
+        TypeDonnee typeDonnee = null;
+
+        if (fieldClass.isPrimitive()) {
+            typeDonnee = SqlUtilities.typeDonneeFromJavaClass(fieldClass);
+
+        } else if (fieldClass.isEnum()) {
+            Enumerated enumerated = field.getAnnotation(Enumerated.class);
+            typeDonnee = enumerated == null || enumerated.value().equals(EnumType.ORDINAL) ? TypeDonnee.NUMERIQUE : TypeDonnee.ALPHANUMERIQUE;
+
+        } else if (!fieldClass.isInterface() && !Collection.class.isAssignableFrom(fieldClass) && !Map.class.isAssignableFrom(fieldClass)) {
+            String[] fieldPath = searchAnn.fieldName().split("\\.");
+            if (fieldPath.length < 2) {
+                typeDonnee = SqlUtilities.typeDonneeFromJavaClass(fieldClass);
+            } else {
+                typeDonnee = SqlUtilities.typeDonneeFromJavaClass(getFieldType(fieldClass, Arrays.copyOfRange(fieldPath, 1, fieldPath.length)));
+            }
+        }
+
+        return typeDonnee;
+    }
+
+    public default Class<?> getFieldType(Class<?> classe, String[] fieldPath) {
+        String fieldName = fieldPath[0];
+        List<Field> fields = Arrays.asList(classe.getDeclaredFields());
+        Optional<Field> optField = fields.stream().filter(f -> f.getName().equals(fieldName)).findFirst();
+
+        if (optField.isPresent()) {
+            Field field = optField.get();
+            if (fieldPath.length == 1) {
+                return field.getType();
+            } else {
+                return getFieldType(field.getType(), Arrays.copyOfRange(fieldPath, 1, fieldPath.length));
+            }
+        } else {
+            return null;
+        }
+    }
+}
diff --git a/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/customtypefichier/DynamicClassCreator.java b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/customtypefichier/DynamicClassCreator.java
new file mode 100644
index 0000000..8cbdbc8
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/customtypefichier/DynamicClassCreator.java
@@ -0,0 +1,17 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.core.ifaces.customtypefichier;
+
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface DynamicClassCreator {
+
+    void createDynamicClasses(List<TableDefinition> tableDefinitions);
+}
diff --git a/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/dataproduction/DataProductionHandler.java b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/dataproduction/DataProductionHandler.java
new file mode 100644
index 0000000..6009568
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/dataproduction/DataProductionHandler.java
@@ -0,0 +1,17 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.core.ifaces.dataproduction;
+
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface DataProductionHandler {
+
+    CommonDataProduction handle(String codeTypeFichier, String connectedParticipant, String referentielVersion, String fileName);
+
+}
diff --git a/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/db/ImportReferentielHelper.java b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/db/ImportReferentielHelper.java
new file mode 100644
index 0000000..166836b
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/db/ImportReferentielHelper.java
@@ -0,0 +1,14 @@
+package com.megatim.fdxcommons.core.ifaces.db;
+
+import com.megatim.fdxcommons.model.pojo.ReferentielToImportData;
+import java.io.File;
+
+/**
+ *
+ * @author lenovo
+ */
+public interface ImportReferentielHelper {
+
+    ReferentielToImportData extractData(File referentielFile) throws Exception;
+
+}
diff --git a/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/db/ImportZipValidatorIfaces.java b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/db/ImportZipValidatorIfaces.java
new file mode 100644
index 0000000..eaf6f08
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/db/ImportZipValidatorIfaces.java
@@ -0,0 +1,25 @@
+package com.megatim.fdxcommons.core.ifaces.db;
+
+import com.megatim.fdxcommons.model.pojo.ReferentielToImportData;
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import java.io.File;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ImportZipValidatorIfaces {
+
+    /**
+     * Méthode qui extrait les informations des colonnes dans chaque validateur
+     *
+     * @param validatorDir
+     * @param referentielToImportData
+     * @return : Map<version_referentiel,
+     * Map<codeTypeFichier, Liste_colonnes_validateur>> @throws Exception
+     * @throws java.lang.Exception
+     */
+    public List<TableDefinition> getTableDefinitions(File validatorDir, final ReferentielToImportData referentielToImportData) throws Exception;
+    
+}
diff --git a/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/db/ReferentielDataSaver.java b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/db/ReferentielDataSaver.java
new file mode 100644
index 0000000..50fd803
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/db/ReferentielDataSaver.java
@@ -0,0 +1,13 @@
+package com.megatim.fdxcommons.core.ifaces.db;
+
+import com.megatim.fdxcommons.model.pojo.ReferentielToImportData;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ReferentielDataSaver {
+
+    public void persist(ReferentielToImportData referentielToImportData) throws Exception;
+    
+}
diff --git a/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/db/validators/CriteriaQueryValidator.java b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/db/validators/CriteriaQueryValidator.java
new file mode 100644
index 0000000..58f8448
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/db/validators/CriteriaQueryValidator.java
@@ -0,0 +1,19 @@
+package com.megatim.fdxcommons.core.ifaces.db.validators;
+
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.pojo.BetweenOperatorValues;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntity;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * @author lenovo
+ */
+public interface CriteriaQueryValidator {
+
+    List<String> validate(CriteriaEntity criterion, Map<String, ColumnDefinition> columnDefinitionsMap);
+
+    public BetweenOperatorValues getBetweenOperatorValues(Object value);
+
+}
diff --git a/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/db/validators/ParametersValidator.java b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/db/validators/ParametersValidator.java
new file mode 100644
index 0000000..38726d8
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/db/validators/ParametersValidator.java
@@ -0,0 +1,18 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.core.ifaces.db.validators;
+
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.pojo.QueryParameterFromView;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ParametersValidator {
+    List<String> validate(List<QueryParameterFromView> parametersFromView, Map<String, ColumnDefinition> columnDefinitionsMap);
+}
diff --git a/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/DataInMemoryHandler.java b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/DataInMemoryHandler.java
new file mode 100644
index 0000000..909a561
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/DataInMemoryHandler.java
@@ -0,0 +1,14 @@
+package com.megatim.fdxcommons.core.ifaces.helper;
+
+import com.megatim.fdxcommons.model.pojo.DataInMemory;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface DataInMemoryHandler {
+
+    void initializeDataInMemory();
+
+    DataInMemory getDataInMemory();
+}
diff --git a/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/ReferentielConsumptionHelper.java b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/ReferentielConsumptionHelper.java
new file mode 100644
index 0000000..c0d6dfa
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/ReferentielConsumptionHelper.java
@@ -0,0 +1,12 @@
+package com.megatim.fdxcommons.core.ifaces.helper;
+
+import com.megatim.fdxcommons.model.pojo.ReferentielToImportData;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ReferentielConsumptionHelper {
+    
+    void consume(ReferentielToImportData referentielToImportData) throws Exception;
+}
diff --git a/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/DynamicTableCreator.java b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/DynamicTableCreator.java
new file mode 100644
index 0000000..0015397
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/DynamicTableCreator.java
@@ -0,0 +1,13 @@
+package com.megatim.fdxcommons.core.ifaces.helper.referentiel;
+
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import java.util.List;
+
+/**
+ *
+ * @author lenovo
+ */
+public interface DynamicTableCreator {
+    
+    public void createDynamicTables(List<TableDefinition> tableDefinitions) throws Exception;
+}
diff --git a/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/ReferentielToImportDataReader.java b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/ReferentielToImportDataReader.java
new file mode 100644
index 0000000..6780014
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/ReferentielToImportDataReader.java
@@ -0,0 +1,13 @@
+package com.megatim.fdxcommons.core.ifaces.helper.referentiel;
+
+import com.megatim.fdxcommons.model.pojo.ReferentielToImportData;
+import java.io.File;
+
+/**
+ *
+ * @author lenovo
+ */
+public interface ReferentielToImportDataReader {
+    
+    public ReferentielToImportData getData(File referentielDirectory) throws Exception;
+}
diff --git a/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/ReferentielXmlDataReader.java b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/ReferentielXmlDataReader.java
new file mode 100644
index 0000000..68357ce
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/ReferentielXmlDataReader.java
@@ -0,0 +1,14 @@
+package com.megatim.fdxcommons.core.ifaces.helper.referentiel;
+
+import com.megatim.fdxcommons.model.pojo.ReferentielToImportData;
+import java.io.File;
+
+/**
+ *
+ * @author lenovo
+ */
+public interface ReferentielXmlDataReader {
+    
+    void readData(File referentielXmlFileDirectory, ReferentielToImportData referentielToImportData) throws Exception;
+    
+}
diff --git a/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/TableDefinitionChecker.java b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/TableDefinitionChecker.java
new file mode 100644
index 0000000..840a18b
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/TableDefinitionChecker.java
@@ -0,0 +1,17 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.core.ifaces.helper.referentiel;
+
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import com.megatim.fdxcommons.model.referentiel.natureproduction.NatureProductionFichier;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface TableDefinitionChecker {
+    boolean isSame(TableDefinition previousRefTableDef, TableDefinition nextRefTableDef, List<NatureProductionFichier> natureProductionFichiers);
+}
diff --git a/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/TableDefinitionFilter.java b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/TableDefinitionFilter.java
new file mode 100644
index 0000000..011814d
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/TableDefinitionFilter.java
@@ -0,0 +1,19 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.core.ifaces.helper.referentiel;
+
+import com.megatim.fdxcommons.model.pojo.ReferentielToImportData;
+import com.megatim.fdxcommons.model.referentiel.historique.ReferentielIntegrationHistorique;
+import com.megatim.fdxcommons.model.referentiel.historique.pojo.TableDefinitionFiltered;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface TableDefinitionFilter {
+
+    public TableDefinitionFiltered doFilter(String previousRef, ReferentielToImportData referentielToImportData,  List<ReferentielIntegrationHistorique> refsHistoriqueIntegration);
+}
diff --git a/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/ValidateurTypeFichierParser.java b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/ValidateurTypeFichierParser.java
new file mode 100644
index 0000000..b8d69bf
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/helper/referentiel/ValidateurTypeFichierParser.java
@@ -0,0 +1,12 @@
+package com.megatim.fdxcommons.core.ifaces.helper.referentiel;
+
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ValidateurTypeFichierParser {
+
+    public TableDefinition parseToColumnDefinition(String validatorPath, String codeTypeFichier, String referentielVersion) throws Exception;
+}
diff --git a/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/integration/AppColumnCreator.java b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/integration/AppColumnCreator.java
new file mode 100644
index 0000000..b7e61f5
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/integration/AppColumnCreator.java
@@ -0,0 +1,13 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.core.ifaces.integration;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface AppColumnCreator {
+    void create();
+}
diff --git a/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/interceptor/AfterUserAction.java b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/interceptor/AfterUserAction.java
new file mode 100644
index 0000000..19956c8
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/interceptor/AfterUserAction.java
@@ -0,0 +1,16 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.core.ifaces.interceptor;
+
+import com.megatim.fdxcommons.model.log.ContainerContextDto;
+import com.megatim.fdxcommons.model.log.UserActionLog;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface AfterUserAction {
+    UserActionLog filter(ContainerContextDto containerContext) throws Exception;
+}
diff --git a/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/interceptor/BeforeAction.java b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/interceptor/BeforeAction.java
new file mode 100644
index 0000000..3d34b1a
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/interceptor/BeforeAction.java
@@ -0,0 +1,16 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.core.ifaces.interceptor;
+
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ResourceInfo;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface BeforeAction {
+    void filter(ContainerRequestContext crc, ResourceInfo resourceInfo);
+}
diff --git a/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/interceptor/InterceptorHandler.java b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/interceptor/InterceptorHandler.java
new file mode 100644
index 0000000..a541521
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/interceptor/InterceptorHandler.java
@@ -0,0 +1,17 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.core.ifaces.interceptor;
+
+import java.lang.reflect.Parameter;
+import javax.ws.rs.core.MultivaluedMap;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface InterceptorHandler {
+
+    String finalMessage(LoggingInterceptorBinding interceptorBinding, Parameter[] parameters, MultivaluedMap<String, String> queryParams, Object requestEntity, Object responseEntity) throws Exception;
+}
diff --git a/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/interceptor/LoggingInterceptorBinding.java b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/interceptor/LoggingInterceptorBinding.java
new file mode 100644
index 0000000..beac54b
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-ifaces/src/main/java/com/megatim/fdxcommons/core/ifaces/interceptor/LoggingInterceptorBinding.java
@@ -0,0 +1,27 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.core.ifaces.interceptor;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import javax.interceptor.InterceptorBinding;
+
+/**
+ *
+ * @author ASUS
+ */
+@InterceptorBinding
+@Target({ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface LoggingInterceptorBinding {
+
+    public String message();
+
+    public Class<?> classe() default String.class; //classe de l'objet retourné
+    
+    public boolean shouldCopyData() default true;
+}
diff --git a/fdx-commons/fdxcommons-core-impl/.gitignore b/fdx-commons/fdxcommons-core-impl/.gitignore
new file mode 100644
index 0000000..b24d71e
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-impl/.gitignore
@@ -0,0 +1,50 @@
+# These are some examples of commonly ignored file patterns.
+# You should customize this list as applicable to your project.
+# Learn more about .gitignore:
+#     https://www.atlassian.com/git/tutorials/saving-changes/gitignore
+
+# Node artifact files
+node_modules/
+dist/
+
+# Compiled Java class files
+*.class
+
+# Compiled Python bytecode
+*.py[cod]
+
+# Log files
+*.log
+
+# Package files
+*.jar
+
+# Maven
+target/
+dist/
+
+# JetBrains IDE
+.idea/
+
+# Unit test reports
+TEST*.xml
+
+# Generated by MacOS
+.DS_Store
+
+# Generated by Windows
+Thumbs.db
+
+# Applications
+*.app
+*.exe
+*.war
+
+# Large media files
+*.mp4
+*.tiff
+*.avi
+*.flv
+*.mov
+*.wmv
+
diff --git a/fdx-commons/fdxcommons-core-impl/nb-configuration.xml b/fdx-commons/fdxcommons-core-impl/nb-configuration.xml
new file mode 100644
index 0000000..a65c451
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-impl/nb-configuration.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+    <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+        <!--
+Properties that influence various parts of the IDE, especially code formatting and the like. 
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+        <netbeans.hint.jdkPlatform>JDK_1.8</netbeans.hint.jdkPlatform>
+    </properties>
+</project-shared-configuration>
diff --git a/fdx-commons/fdxcommons-core-impl/pom.xml b/fdx-commons/fdxcommons-core-impl/pom.xml
new file mode 100644
index 0000000..c2bbf54
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-impl/pom.xml
@@ -0,0 +1,272 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+        <groupId>com.megatim.fdxcommons</groupId>
+        <artifactId>fdxcommons</artifactId>
+        <version>1.0</version>
+    </parent>
+    
+    <groupId>com.megatim.fdxcommons.core.impl</groupId>  
+    <artifactId>fdxcommons-core-impl</artifactId>
+    <packaging>jar</packaging>
+    
+    <properties>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
+        <jakartaee>8.0</jakartaee>
+    </properties>
+    
+    <!--    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.apache.camel</groupId>
+                <artifactId>camel-bom</artifactId>
+                <version>3.14.8</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>-->
+    
+    <dependencies>        
+        <dependency>
+            <groupId>com.megatim.fdxcommons.dao.impl</groupId>
+            <artifactId>fdxcommons-dao-impl</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxcommons.core.ifaces</groupId>
+            <artifactId>fdxcommons-core-ifaces</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxcommons.tools</groupId>
+            <artifactId>fdxcommons-tools</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>javax</groupId>
+            <artifactId>javaee-api</artifactId>
+            <version>${jakartaee}</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.bekosoftware</groupId>
+            <artifactId>genericManagerLayer</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatimgroup</groupId>
+            <artifactId>mgt-commons-tools</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.ibm.icu</groupId>
+            <artifactId>icu4j</artifactId>
+            <version>61.1</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>commons-validator</groupId>
+            <artifactId>commons-validator</artifactId>
+            <version>1.6</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.11.0</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>        
+        
+        <!--        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core</artifactId>
+            <version>3.14.8</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>        -->
+        
+        <!--        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-endpointdsl</artifactId>
+            <version>3.14.8</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>  -->
+              
+        <!--        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-cdi</artifactId>
+            <version>3.14.8</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>-->
+                
+    </dependencies>    
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <compilerArguments>
+                        <endorseddirs>${endorsed.dir}</endorseddirs>
+                    </compilerArguments>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <version>2.3</version>
+                <configuration>
+                    <failOnMissingWebXml>false</failOnMissingWebXml>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>2.6</version>
+                <executions>
+                    <execution>
+                        <phase>validate</phase>
+                        <goals>
+                            <goal>copy</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${endorsed.dir}</outputDirectory>
+                            <silent>true</silent>
+                            <artifactItems>
+                                <artifactItem>
+                                    <groupId>javax</groupId>
+                                    <artifactId>javaee-api</artifactId>
+                                    <version>${jakartaee}</version>
+                                    <type>jar</type>
+                                </artifactItem>
+                            </artifactItems>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+    <name>fdxcommons-core-impl</name>
+</project>
\ No newline at end of file
diff --git a/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/db/ImportReferentielHelperImpl.java b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/db/ImportReferentielHelperImpl.java
new file mode 100644
index 0000000..fcda00a
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/db/ImportReferentielHelperImpl.java
@@ -0,0 +1,26 @@
+package com.megatim.fdxcommons.core.impl.db;
+
+import com.megatim.fdxcommons.core.ifaces.db.ImportReferentielHelper;
+import com.megatim.fdxcommons.core.ifaces.helper.referentiel.ReferentielToImportDataReader;
+import com.megatim.fdxcommons.model.pojo.ReferentielToImportData;
+import java.io.File;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author lenovo
+ */
+@Dependent
+public class ImportReferentielHelperImpl implements ImportReferentielHelper {
+
+    @Inject
+    private ReferentielToImportDataReader referentielToImportDataReader;
+
+
+    @Override
+    public ReferentielToImportData extractData(File referentielFile) throws Exception {
+        return referentielToImportDataReader.getData(referentielFile);
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/db/ImportZipValidatorImpl.java b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/db/ImportZipValidatorImpl.java
new file mode 100644
index 0000000..292bb60
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/db/ImportZipValidatorImpl.java
@@ -0,0 +1,133 @@
+package com.megatim.fdxcommons.core.impl.db;
+
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxcommons.model.referentiel.ValidateurFichierConfiguration;
+import com.megatim.fdxcommons.core.ifaces.db.ImportZipValidatorIfaces;
+import com.megatim.fdxcommons.core.ifaces.helper.referentiel.ValidateurTypeFichierParser;
+import com.megatim.fdxcommons.tools.exceptions.ImportReferentielException;
+import com.megatim.fdxcommons.model.pojo.ReferentielToImportData;
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.LinkOption;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class ImportZipValidatorImpl implements ImportZipValidatorIfaces {
+
+    @Inject
+    private ValidateurTypeFichierParser validateurTypeFichierParser;
+
+    @Override
+    public List<TableDefinition> getTableDefinitions(File validatorDir, ReferentielToImportData referentielToImportData) throws Exception {
+
+        List<TableDefinition> tableDefinitions = new ArrayList<>();
+
+        if (validatorDir.isDirectory()) {
+            for (Referentiel referentiel : referentielToImportData.getReferentiels()) {
+                Path referentielPath = Paths.get(validatorDir.getAbsolutePath(), referentiel.getVersion());
+
+                //S'il n'existe pas un chemin correspondant à la version du referentiel en_cours
+                if (!Files.exists(referentielPath, LinkOption.NOFOLLOW_LINKS)) {
+                    if (referentiel.getVersion().equals(referentielToImportData.getReferentielEnCours().getVersion())) {
+                        throw new ImportReferentielException("Le répertoire '" + referentiel.getVersion() + "' des validateurs est introuvable");
+                    } else {
+                        continue;
+                    }
+                }
+
+                //Si ce chemin n'est pas celui d'un répertoire
+                if (!Files.isDirectory(referentielPath, LinkOption.NOFOLLOW_LINKS)) {
+                    throw new ImportReferentielException("'" + referentiel.getVersion() + "' n'est pas un répertoire dans le repertoire des validateurs");
+                }
+
+                //Liste des configurations de validateurs associées au reférentiel en cours de traitement
+                List<ValidateurFichierConfiguration> validateursConfiguratioForReferentiel
+                        = validateurFichierConfigurationForCurrentReferentiel(referentiel, referentielToImportData);
+
+                Map<String, ValidateurFichierConfiguration> mapValidateurConfByFileName = fileNameToValidateurConfiguration(validateursConfiguratioForReferentiel);
+
+                //Liste des répertoires des participants du referentiel en cours de traitement
+                File[] participantDirectories = (new File(validatorDir.getAbsolutePath(), referentiel.getVersion())).listFiles();
+                for (File participantDirectory : participantDirectories) {
+
+                    //Si le fichier en cours de traitement est un répertoire   
+                    if (participantDirectory.isDirectory()) {
+
+                        //Liste des validateurs contenus dans le dossier d'un participant
+                        File[] validateurs = participantDirectory.listFiles();
+
+                        for (File validatorFile : validateurs) {
+
+                            if (validatorFile.isFile()) {
+
+                                if (mapValidateurConfByFileName.containsKey(validatorFile.getName())) {
+                                    TableDefinition tableDefinition = new TableDefinition();
+                                    String codeTypeFichier = mapValidateurConfByFileName.get(validatorFile.getName()).getTypeFichier().getCode();
+
+                                    try {
+                                        tableDefinition = validateurTypeFichierParser.parseToColumnDefinition(validatorFile.getAbsolutePath(),
+                                                codeTypeFichier, referentiel.getVersion());
+                                    } catch (Exception ex) {
+                                        tableDefinition.setColumnDefinitions(new ArrayList<>());
+                                        Logger.getLogger(ImportZipValidatorImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+                                    }
+                                    if (tableDefinition.getColumnDefinitions() != null && !tableDefinition.getColumnDefinitions().isEmpty()) {
+                                        tableDefinitions.add(tableDefinition);
+                                    }
+                                }
+                            }
+                        }
+
+                    }
+                }
+            }
+        }
+
+        return tableDefinitions;
+    }
+
+    private List<ValidateurFichierConfiguration> validateurFichierConfigurationForCurrentReferentiel(Referentiel referentielEnCours, ReferentielToImportData referentielToImportData) {
+        return referentielToImportData.getValidateurFichierConfigurations()
+                .stream()
+                .filter(p -> p.getReferentiel().getVersion().equals(referentielEnCours.getVersion()))
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * Classer les configurations des validateurs par nom du fichier
+     *
+     * @param validateursConf
+     * @return
+     */
+    private Map<String, ValidateurFichierConfiguration> fileNameToValidateurConfiguration(List<ValidateurFichierConfiguration> validateursConfiguration) {
+        Map<String, ValidateurFichierConfiguration> mapValidateurConf = new HashMap<>();
+
+        for (ValidateurFichierConfiguration vc : validateursConfiguration) {
+            File file = new File(vc.getFileName());
+            /**
+             * Dans le fichier zip du referentiel, le nom du fichier de
+             * validateur est en chemin absolu Raison pour laquelle il faut
+             * passer un objet de type 'File' afin de recupérer le nom relatif
+             * du fichier
+             */
+            mapValidateurConf.put(file.getName(), vc);
+        }
+
+        return mapValidateurConf;
+    }
+}
diff --git a/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/db/validators/CriteriaQueryValidatorImpl.java b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/db/validators/CriteriaQueryValidatorImpl.java
new file mode 100644
index 0000000..7a398f8
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/db/validators/CriteriaQueryValidatorImpl.java
@@ -0,0 +1,244 @@
+package com.megatim.fdxcommons.core.impl.db.validators;
+
+import static com.megatim.fdxcommons.model.enumeration.Operateur.*;
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.pojo.BetweenOperatorValues;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntity;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationValidationException;
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeParseException;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import javax.enterprise.context.Dependent;
+import com.megatim.fdxcommons.core.ifaces.db.validators.CriteriaQueryValidator;
+
+/**
+ *
+ * @author lenovo
+ */
+@Dependent
+public class CriteriaQueryValidatorImpl implements CriteriaQueryValidator {
+
+    @Override
+    public List<String> validate(CriteriaEntity criterion, Map<String, ColumnDefinition> columnDefinitionsMap) {
+        List<String> errors = new ArrayList<>();
+//        int index = 1;
+//        String numeroElt = " : Elément numéro " + index;
+        TypeDonnee typeDonnee = null;
+
+        if (criterion != null && isNotEmptyCriteria(criterion)) {
+            if (criterion.getSubCriterias().isEmpty()) {
+                if (!validateCriteriaNomColonne(columnDefinitionsMap, criterion)) {
+                    errors.add("Colonne '" + criterion.getNomColonne() + "' des critères de sélection est introuvable");
+
+                } else if ((typeDonnee = TypeDonnee.fromValeur(columnDefinitionsMap.get(criterion.getNomColonne().toLowerCase()).getTypeDonnee())) == null) {
+                    errors.add("Le type de la colonne '" + criterion.getNomColonne() + "est introuvable");
+
+                } else if (!validateCriteriaEntityValue(criterion, typeDonnee)) {
+                    errors.add("Type de données de la colonne " + criterion.getNomColonne() + " incorrect");
+                }
+            } else {
+                if (criterion.getCriteriaLogicConnector() == null) {
+                    errors.add("Le connecteur logique est absent");
+                }
+                for (CriteriaEntity c : criterion.getSubCriterias()) {
+                    errors.addAll(validate(c, columnDefinitionsMap));
+                }
+            }
+        }
+        return errors;
+    }
+
+    private boolean validateCriteriaNomColonne(Map<String, ColumnDefinition> columnDefinitionsMap, CriteriaEntity c) {
+        return c.getNomColonne() != null
+                && !c.getNomColonne().isEmpty()
+                && columnDefinitionsMap.containsKey(c.getNomColonne().toLowerCase());
+    }
+
+    private boolean validateCriteriaEntityValue(CriteriaEntity criteriaEntity, TypeDonnee typeDonnee) {
+        switch (criteriaEntity.getOperateur()) {
+            case LIKE:
+                return (criteriaEntity.getCriteriaValue() instanceof String) && columTypeIsString(typeDonnee);
+            case IN:
+            case NOT_IN:
+                return (criteriaEntity.getCriteriaValue() instanceof List<?>) && elementsOfList((List) criteriaEntity.getCriteriaValue(), typeDonnee);
+            case LOWER_OR_EQUALS_THAN:
+            case LOWER_THAN:
+            case GREATER_OR_EQUALS_THAN:
+            case GREATER_THAN:
+            case EQUALS:
+            case NOT_EQUALS:
+                return (criteriaEntity.getCriteriaValue() instanceof Comparable<?>) && criteriaValueHasCorrectType(criteriaEntity.getCriteriaValue(), typeDonnee);
+            case BETWEEN:
+            case NOT_BETWEEN:
+                BetweenOperatorValues betweenOperatorValues = getBetweenOperatorValues(criteriaEntity.getCriteriaValue());
+                criteriaEntity.setCriteriaValue(betweenOperatorValues);
+
+                return betweenOperatorValues != null
+                        && criteriaValueHasCorrectType(betweenOperatorValues.getLowerBound(), typeDonnee)
+                        && criteriaValueHasCorrectType(betweenOperatorValues.getUpperBound(), typeDonnee)
+                        && betweenOperatorValuesAreCorrect(betweenOperatorValues, typeDonnee);
+            case IS_NULL:
+            case IS_NOT_NULL:
+                return criteriaEntity.getCriteriaValue() == null;
+        }
+        return false;
+    }
+
+    @Override
+    public BetweenOperatorValues getBetweenOperatorValues(Object value) {
+        BetweenOperatorValues betweenOperatorValues = null;
+        if (!(value instanceof LinkedHashMap)) {
+            throw new CommonApplicationValidationException("LinkedHashMap est attendu");
+        }
+        LinkedHashMap<String, String> map = (LinkedHashMap) value;
+        String lowerBound = null;
+        String upperBound = null;
+
+        for (String key : map.keySet()) {
+            if (key.equalsIgnoreCase("lowerBound")) {
+                lowerBound = map.get(key);
+            }
+            if (key.equalsIgnoreCase("upperBound")) {
+                upperBound = map.get(key);
+            }
+        }
+        StringBuilder message = new StringBuilder("");
+
+        if (lowerBound == null) {
+            message.append("Borne inférieure absente\n");
+        }
+        if (upperBound == null) {
+            message.append("Borne supérieure absente");
+        }
+        if (message.length() > 0) {
+            throw new CommonApplicationValidationException(message.toString());
+        }
+        betweenOperatorValues = new BetweenOperatorValues(lowerBound, upperBound);
+
+        return betweenOperatorValues;
+    }
+
+    /**
+     * Vérifier que le borne inférieure est bel et bien inférieure à la borne
+     * supérieure
+     *
+     * @param betweenOperatorValues
+     * @param columnType
+     * @return
+     */
+    private boolean betweenOperatorValuesAreCorrect(BetweenOperatorValues betweenOperatorValues, TypeDonnee typeDonnee) {
+        boolean result = false;
+        switch (typeDonnee) {
+
+            case NUMERIQUE:
+                try {
+                Long lowerBound = Long.valueOf(betweenOperatorValues.getLowerBound().toString());
+                Long upperBound = Long.valueOf(betweenOperatorValues.getUpperBound().toString());
+
+                result = lowerBound <= upperBound;
+                if (!result) {
+                    throw new CommonApplicationValidationException("La borne inférieure ne peut être supérieure à la borne supérieure");
+                }
+            } catch (NumberFormatException ex) {
+            }
+            break;
+
+            case DECIMAL:
+                try {
+                BigDecimal lowerBound = new BigDecimal(betweenOperatorValues.getLowerBound().toString());
+                BigDecimal upperBound = new BigDecimal(betweenOperatorValues.getUpperBound().toString());
+
+                result = lowerBound.compareTo(upperBound) <= 0;
+                if (!result) {
+                    throw new CommonApplicationValidationException("La borne inférieure ne peut être supérieure à la borne supérieure");
+                }
+            } catch (NumberFormatException ex) {
+            }
+            break;
+
+            case DATE:
+                try {
+                Timestamp lowerBound = Timestamp.valueOf(LocalDateTime.parse(betweenOperatorValues.getLowerBound().toString()));
+                Timestamp upperBound = Timestamp.valueOf(LocalDateTime.parse(betweenOperatorValues.getUpperBound().toString()));
+
+                result = lowerBound.before(upperBound);
+                if (!result) {
+                    throw new CommonApplicationValidationException("La borne inférieure ne peut être supérieure à la borne supérieure");
+                }
+            } catch (DateTimeParseException ex) {
+            }
+            break;
+
+            default:
+                throw new CommonApplicationValidationException("L'opérarateur 'BETWEEN' n'est pas valable pour ce type de données " + typeDonnee);
+
+        }
+        return result;
+    }
+
+    private boolean elementsOfList(List<?> elements, TypeDonnee typeDonnee) {
+        boolean result = true;
+
+        for (Object elt : elements) {
+            result = criteriaValueHasCorrectType(elt, typeDonnee);
+
+            if (!result) {
+                break;
+            }
+        }
+        return result;
+    }
+
+    private boolean criteriaValueHasCorrectType(Object value, TypeDonnee typeDonnee) {
+        boolean result = false;
+
+        switch (typeDonnee) {
+            case NUMERIQUE:
+                try {
+                Long.valueOf(value.toString());
+                result = true;
+            } catch (NumberFormatException ex) {
+            }
+            break;
+
+            case DECIMAL:
+                 try {
+                new BigDecimal(value.toString());
+                result = true;
+            } catch (Exception ex) {
+            }
+            break;
+
+            case DATE:
+                try {
+                Timestamp.valueOf(LocalDateTime.parse(value.toString()));
+                result = true;
+            } catch (IllegalArgumentException ex) {
+            }
+            break;
+
+            case ALPHANUMERIQUE:
+                result = value instanceof String;
+                break;
+
+            default:
+                throw new CommonApplicationValidationException("Type de données inconnu");
+        }
+        return result;
+    }
+
+    private boolean columTypeIsString(TypeDonnee typeDonnee) {
+        return typeDonnee.equals(TypeDonnee.ALPHANUMERIQUE);
+    }
+
+    private boolean isNotEmptyCriteria(CriteriaEntity c) {
+        return c.getNomColonne() != null && !c.getNomColonne().isEmpty() && c.getOperateur() != null
+                || c.getSubCriterias() != null && !c.getSubCriterias().isEmpty();
+    }
+}
diff --git a/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/helper/referentiel/ReferentielToImportDataReaderImpl.java b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/helper/referentiel/ReferentielToImportDataReaderImpl.java
new file mode 100644
index 0000000..8df963a
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/helper/referentiel/ReferentielToImportDataReaderImpl.java
@@ -0,0 +1,76 @@
+package com.megatim.fdxcommons.core.impl.helper.referentiel;
+
+import com.megatim.fdxcommons.core.ifaces.db.ImportZipValidatorIfaces;
+import com.megatim.fdxcommons.core.ifaces.helper.referentiel.ReferentielToImportDataReader;
+import com.megatim.fdxcommons.core.ifaces.helper.referentiel.ReferentielXmlDataReader;
+import com.megatim.fdxcommons.tools.exceptions.ImportReferentielException;
+import com.megatim.fdxcommons.model.enumeration.StatutReferentiel;
+import com.megatim.fdxcommons.model.pojo.ReferentielToImportData;
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxcommons.tools.CommonAppContext;
+import com.megatim.fdxcommons.tools.AppFileUtils;
+import java.io.File;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author lenovo
+ */
+@Dependent
+public class ReferentielToImportDataReaderImpl implements ReferentielToImportDataReader {
+
+    @Inject
+    private ReferentielXmlDataReader referentielXmlDataReader;
+
+    @Inject
+    private ImportZipValidatorIfaces importValidator;
+
+    @Override
+    public ReferentielToImportData getData(File referentielFile) throws Exception {
+
+        //On décompresse le fichier zip du référentiel dans le répertoire temporaire du serveur
+        File unzipDirectory = AppFileUtils.unzipFileInDirectory(referentielFile.getAbsolutePath(), CommonAppContext.TEMP_DIR);
+
+        //Dans le répertoire décompressé, on décompresse encore le fichier contenant les fichiers xml des entités du référentiel
+        File unzipReferentielDirectory = AppFileUtils.unzipFileInDirectory((unzipDirectory + File.separator + CommonAppContext.REFERENTIEL_ZIP_FILE_NAME), unzipDirectory.getAbsolutePath());
+
+        //Indique le répertoire des validateurs du référentiel
+        File validateursDirectory = new File(unzipDirectory + File.separator + CommonAppContext.UNZIP_REFERENTIEL_VALIDATEUR_DIR_NAME);
+
+        ReferentielToImportData referentielToImportData = new ReferentielToImportData();
+        referentielToImportData.setFileName(referentielFile.getName());
+        referentielXmlDataReader.readData(unzipReferentielDirectory, referentielToImportData);
+
+        Referentiel referentielEncours = getReferentielEncours(referentielToImportData);
+        referentielToImportData.setReferentielEnCours(referentielEncours);
+
+        //On extrait la définition des tables associées aux validateur (structures lignes) du référentiel EN COURS
+        List<TableDefinition> tableDefinitions = importValidator.getTableDefinitions(validateursDirectory, referentielToImportData);
+        referentielToImportData.setTableDefinitions(tableDefinitions);
+
+        return referentielToImportData;
+
+    }
+
+    private Referentiel getReferentielEncours(ReferentielToImportData referentielToImportData) throws Exception {
+        List<Referentiel> referentiels = referentielToImportData.getReferentiels()
+                .stream()
+                .filter(p -> p.getStatutReferentiel().equals(StatutReferentiel.EN_COURS))
+                .collect(Collectors.toList());
+
+        if (referentiels == null || referentiels.isEmpty()) {
+            throw new ImportReferentielException("Cette archive n'a pas de referentiel avec le statut EN COURS");
+        }
+
+        if (referentiels.size() > 1) {
+            throw new ImportReferentielException(referentiels.size() + " réferentiels en cours trouvés");
+        }
+
+        return referentiels.get(0);
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/helper/referentiel/ReferentielXmlDataReaderImpl.java b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/helper/referentiel/ReferentielXmlDataReaderImpl.java
new file mode 100644
index 0000000..6c71a9b
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/helper/referentiel/ReferentielXmlDataReaderImpl.java
@@ -0,0 +1,175 @@
+package com.megatim.fdxcommons.core.impl.helper.referentiel;
+
+import com.megatim.fdxcommons.core.ifaces.helper.referentiel.ReferentielXmlDataReader;
+import com.megatim.fdxcommons.model.jaxb.ApplicationSourcesToExport;
+import com.megatim.fdxcommons.model.jaxb.ExtensionFichiersToExport;
+import com.megatim.fdxcommons.model.jaxb.GroupeNoeudsToExport;
+import com.megatim.fdxcommons.model.jaxb.GroupeParticipantsToExport;
+import com.megatim.fdxcommons.model.jaxb.NatureProductionFichiersToExport;
+import com.megatim.fdxcommons.model.jaxb.NoeudsToExport;
+import com.megatim.fdxcommons.model.jaxb.ParticipantsToExport;
+import com.megatim.fdxcommons.model.jaxb.PaysToExport;
+import com.megatim.fdxcommons.model.jaxb.ReferentielsToExport;
+import com.megatim.fdxcommons.model.jaxb.RoutagesToExport;
+import com.megatim.fdxcommons.model.jaxb.StructureLigneToExport;
+import com.megatim.fdxcommons.model.jaxb.TypeFichiersToExport;
+import com.megatim.fdxcommons.model.jaxb.ValidateurFichierConfigurationToExport;
+import com.megatim.fdxcommons.model.jaxb.ValidateurFichierToExport;
+import com.megatim.fdxcommons.model.pojo.ReferentielToImportData;
+import com.megatim.fdxcommons.model.referentiel.ValidateurFichierConfiguration;
+import com.megatim.fdxcommons.core.impl.tools.XmlUtils;
+import java.io.File;
+import java.util.List;
+import javax.enterprise.context.Dependent;
+
+/**
+ *
+ * @author lenovo
+ */
+@Dependent
+public class ReferentielXmlDataReaderImpl implements ReferentielXmlDataReader {
+
+    @Override
+    public void readData(File referentielXmlFileDirectory, ReferentielToImportData referentielToImportData) throws Exception {
+
+        if (referentielXmlFileDirectory.isDirectory()) {
+
+            File[] xmlFiles = referentielXmlFileDirectory.listFiles();
+
+            for (File xmlFile : xmlFiles) {
+
+                switch (xmlFile.getName()) {
+
+                    case "applicationSources.xml":
+                        readApplicationSources(xmlFile, referentielToImportData);
+                        break;
+
+                    case "extensionFichiers.xml":
+                        readExtensionFichiers(xmlFile, referentielToImportData);
+                        break;
+
+                    case "groupeNoeuds.xml":
+                        readGroupeNoeuds(xmlFile, referentielToImportData);
+                        break;
+
+                    case "structureLignes.xml":
+                        readStructureLignes(xmlFile, referentielToImportData);
+                        break;
+
+                    case "validateurFichiers.xml":
+                        readValidateurFichiers(xmlFile, referentielToImportData);
+                        break;
+
+                    case "groupeParticipants.xml":
+                        readGroupeParticipants(xmlFile, referentielToImportData);
+                        break;
+
+                    case "noeuds.xml":
+                        readNoeuds(xmlFile, referentielToImportData);
+                        break;
+
+                    case "participants.xml":
+                        readParticipants(xmlFile, referentielToImportData);
+                        break;
+
+                    case "pays.xml":
+                        readPays(xmlFile, referentielToImportData);
+                        break;
+
+                    case "referentiels.xml":
+                        readReferentiels(xmlFile, referentielToImportData);
+                        break;
+
+                    case "routages.xml":
+                        readRoutages(xmlFile, referentielToImportData);
+                        break;
+
+                    case "typeFichiers.xml":
+                        readTypeFichiers(xmlFile, referentielToImportData);
+                        break;
+
+                    case "validateurFichierConfigurations.xml":
+                        readValidateurFichierConfiguration(xmlFile, referentielToImportData);
+                        break;
+
+                    case "natureProductionFichiers.xml":
+                        readNatureProductionFichiers(xmlFile, referentielToImportData);
+                        break;
+                }
+            }
+
+        }
+
+    }
+
+    private void readValidateurFichierConfiguration(File xmlFile, ReferentielToImportData referentielToImportData) throws Exception {
+        ValidateurFichierConfigurationToExport validateurFichierConfigurationToExport = (ValidateurFichierConfigurationToExport) XmlUtils.unMarshal(xmlFile, ValidateurFichierConfigurationToExport.class);
+        List<ValidateurFichierConfiguration> validateurFichierConfigurations = validateurFichierConfigurationToExport.getValidateurFichierConfigurationList().getValidateurFichierConfigurationList();
+        referentielToImportData.setValidateurFichierConfigurations(validateurFichierConfigurations);
+    }
+
+    private void readTypeFichiers(File xmlFile, ReferentielToImportData referentielToImportData) throws Exception {
+        TypeFichiersToExport typeFichiersToExport = (TypeFichiersToExport) XmlUtils.unMarshal(xmlFile, TypeFichiersToExport.class);
+        referentielToImportData.setTypeFichiers(typeFichiersToExport.getTypeFichiersList());
+    }
+
+    private void readRoutages(File xmlFile, ReferentielToImportData referentielToImportData) throws Exception {
+        RoutagesToExport routagesToExport = (RoutagesToExport) XmlUtils.unMarshal(xmlFile, RoutagesToExport.class);
+        referentielToImportData.setRoutages(routagesToExport.getRoutageList());
+    }
+
+    private void readReferentiels(File xmlFile, ReferentielToImportData referentielToImportData) throws Exception {
+        ReferentielsToExport referentielsToExport = (ReferentielsToExport) XmlUtils.unMarshal(xmlFile, ReferentielsToExport.class);
+        referentielToImportData.setReferentiels(referentielsToExport.getReferentielList());
+    }
+
+    private void readPays(File xmlFile, ReferentielToImportData referentielToImportData) throws Exception {
+        PaysToExport paysToExport = (PaysToExport) XmlUtils.unMarshal(xmlFile, PaysToExport.class);
+        referentielToImportData.setPays(paysToExport.getPaysList());
+    }
+
+    private void readParticipants(File xmlFile, ReferentielToImportData referentielToImportData) throws Exception {
+        ParticipantsToExport participantsToExport = (ParticipantsToExport) XmlUtils.unMarshal(xmlFile, ParticipantsToExport.class);
+        referentielToImportData.setParticipants(participantsToExport.getParticipants());
+    }
+
+    private void readNoeuds(File xmlFile, ReferentielToImportData referentielToImportData) throws Exception {
+        NoeudsToExport noeudsToExport = (NoeudsToExport) XmlUtils.unMarshal(xmlFile, NoeudsToExport.class);
+        referentielToImportData.setNoeuds(noeudsToExport.getNoeuds());
+    }
+
+    private void readGroupeParticipants(File xmlFile, ReferentielToImportData referentielToImportData) throws Exception {
+        GroupeParticipantsToExport groupeParticipantsToExport = (GroupeParticipantsToExport) XmlUtils.unMarshal(xmlFile, GroupeParticipantsToExport.class);
+        referentielToImportData.setGroupeParticipants(groupeParticipantsToExport.getGroupeParticipants());
+    }
+
+    private void readValidateurFichiers(File xmlFile, ReferentielToImportData referentielToImportData) throws Exception {
+        ValidateurFichierToExport validateurFichierToExport = (ValidateurFichierToExport) XmlUtils.unMarshal(xmlFile, ValidateurFichierToExport.class);
+        referentielToImportData.setValidateurFichiers(validateurFichierToExport.getValidateurFichierList());
+    }
+
+    private void readStructureLignes(File xmlFile, ReferentielToImportData referentielToImportData) throws Exception {
+        StructureLigneToExport structureLigneToExport = (StructureLigneToExport) XmlUtils.unMarshal(xmlFile, StructureLigneToExport.class);
+        referentielToImportData.setStructureLignes(structureLigneToExport.getStructureLigneList());
+    }
+
+    private void readGroupeNoeuds(File xmlFile, ReferentielToImportData referentielToImportData) throws Exception {
+        GroupeNoeudsToExport groupeNoeudsToExport = (GroupeNoeudsToExport) XmlUtils.unMarshal(xmlFile, GroupeNoeudsToExport.class);
+        referentielToImportData.setGroupeNoeuds(groupeNoeudsToExport.getGroupeNoeuds());
+    }
+
+    private void readExtensionFichiers(File xmlFile, ReferentielToImportData referentielToImportData) throws Exception {
+        ExtensionFichiersToExport extensionFichiersToExport = (ExtensionFichiersToExport) XmlUtils.unMarshal(xmlFile, ExtensionFichiersToExport.class);
+        referentielToImportData.setExtensionFichiers(extensionFichiersToExport.getExtensionFichiers());
+    }
+
+    private void readApplicationSources(File xmlFile, ReferentielToImportData referentielToImportData) throws Exception {
+        ApplicationSourcesToExport applicationSourcesToExport = (ApplicationSourcesToExport) XmlUtils.unMarshal(xmlFile, ApplicationSourcesToExport.class);
+        referentielToImportData.setApplicationSources(applicationSourcesToExport.getApplicationSourceList());
+    }
+
+    private void readNatureProductionFichiers(File xmlFile, ReferentielToImportData referentielToImportData) throws Exception {
+        NatureProductionFichiersToExport natureProductionFichiersToExport = (NatureProductionFichiersToExport) XmlUtils.unMarshal(xmlFile, NatureProductionFichiersToExport.class);
+        referentielToImportData.setNatureProductionFichiers(natureProductionFichiersToExport.getNatureProductionFichierList());
+    }
+}
diff --git a/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/helper/referentiel/TableDefinitionCheckerImpl.java b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/helper/referentiel/TableDefinitionCheckerImpl.java
new file mode 100644
index 0000000..a0affee
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/helper/referentiel/TableDefinitionCheckerImpl.java
@@ -0,0 +1,131 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.core.impl.helper.referentiel;
+
+import com.megatim.fdxcommons.core.ifaces.helper.referentiel.TableDefinitionChecker;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import com.megatim.fdxcommons.model.referentiel.natureproduction.NatureProduction;
+import com.megatim.fdxcommons.model.referentiel.natureproduction.NatureProductionFichier;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import javax.enterprise.context.Dependent;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class TableDefinitionCheckerImpl implements TableDefinitionChecker {
+
+    @Override
+    public boolean isSame(TableDefinition previousRefTableDef, TableDefinition nextRefTableDef, List<NatureProductionFichier> natureProductionFichiers) {
+        if (!previousRefTableDef.getCodeTypeFichier().equals(nextRefTableDef.getCodeTypeFichier())) {
+            throw new IllegalArgumentException();
+        }
+        return isSameNatureProductionFichier(previousRefTableDef.getReferentielVersion(), nextRefTableDef.getReferentielVersion(), natureProductionFichiers)
+                && isSame(previousRefTableDef, nextRefTableDef)
+                && isSame(nextRefTableDef.getColumnDefinitions(), previousRefTableDef.getColumnDefinitions());
+    }
+
+    private boolean isSameNatureProductionFichier(String refVersion, String previousRef, List<NatureProductionFichier> natureProductionFichiers) {
+        Optional<NatureProductionFichier> natureProdFichOpt = natureProductionFichiers.stream().filter(p -> p.getReferentiel().getVersion().equals(refVersion)).findFirst();
+        Optional<NatureProductionFichier> previousNatureProdFichOpt = natureProductionFichiers.stream().filter(p -> p.getReferentiel().getVersion().equals(previousRef)).findFirst();
+
+        if (natureProdFichOpt.isPresent() && previousNatureProdFichOpt.isPresent()) {
+            return natureProdFichOpt.get().getNatureProduction().equals(previousNatureProdFichOpt.get().getNatureProduction());
+        } else if (!natureProdFichOpt.isPresent() && !previousNatureProdFichOpt.isPresent()) {
+            return true;
+        } else {
+            if (natureProdFichOpt.isPresent()) {
+                return natureProdFichOpt.get().getNatureProduction().equals(NatureProduction.REFERENTIELLE);
+            } else {
+                return previousNatureProdFichOpt.get().getNatureProduction().equals(NatureProduction.REFERENTIELLE);
+            }
+        }
+    }
+
+    private boolean isSame(TableDefinition previousRefTableDef, TableDefinition nextRefTableDef) {
+        return isSameColumnDelimiter(previousRefTableDef, nextRefTableDef)
+                && isSameLineDelimiter(previousRefTableDef, nextRefTableDef)
+                && isSameHeaderPresent(previousRefTableDef, nextRefTableDef);
+    }
+
+    private boolean isSameColumnDelimiter(TableDefinition previousRefTableDef, TableDefinition nextRefTableDef) {
+        if (previousRefTableDef.getColumnDelimiter() != null && nextRefTableDef.getColumnDelimiter() != null) {
+            return previousRefTableDef.getColumnDelimiter().equals(nextRefTableDef.getColumnDelimiter());
+        } else {
+            return previousRefTableDef.getColumnDelimiter() == null && nextRefTableDef.getColumnDelimiter() == null;
+        }
+    }
+
+    private boolean isSameLineDelimiter(TableDefinition previousRefTableDef, TableDefinition nextRefTableDef) {
+        if (previousRefTableDef.getLineDelimiter() != null && nextRefTableDef.getLineDelimiter() != null) {
+            return previousRefTableDef.getLineDelimiter().equals(nextRefTableDef.getLineDelimiter());
+        } else {
+            return previousRefTableDef.getLineDelimiter() == null && nextRefTableDef.getLineDelimiter() == null;
+        }
+    }
+
+    private boolean isSameHeaderPresent(TableDefinition previousRefTableDef, TableDefinition nextRefTableDef) {
+        if (previousRefTableDef.getHeaderPresent() != null && nextRefTableDef.getHeaderPresent() != null) {
+            return previousRefTableDef.getHeaderPresent().equals(nextRefTableDef.getHeaderPresent());
+        } else {
+            return previousRefTableDef.getHeaderPresent() == null && nextRefTableDef.getHeaderPresent() == null;
+        }
+    }
+
+    private boolean isSame(List<ColumnDefinition> newRefColumnDef, List<ColumnDefinition> oldRefColumnDef) {
+        boolean isSame = true;
+
+        if (newRefColumnDef.size() != oldRefColumnDef.size()) {
+            return false;
+        }
+        Map<String, ColumnDefinition> currentRefColDefToMap = newRefColumnDef.stream().collect(Collectors.toMap(ColumnDefinition::getName, Function.identity()));
+
+        for (ColumnDefinition c : oldRefColumnDef) {
+            ColumnDefinition oldColDef = currentRefColDefToMap.get(c.getName());
+
+            if (oldColDef == null) {
+                isSame = false;
+                break;
+            }
+
+            isSame = isSameFormatDate(c, oldColDef)
+                    && isSamePosition(c, oldColDef)
+                    && isSameTypeDonnee(c, oldColDef)
+                    && isSameTaille(c, oldColDef)
+                    && isSameTaillePartieDecimale(c, oldColDef);
+
+            if (!isSame) {
+                break;
+            }
+        }
+        return isSame;
+    }
+
+    private boolean isSameFormatDate(ColumnDefinition newColDef, ColumnDefinition oldColDef) {
+        return (newColDef.getFormatDate() == null ? oldColDef.getFormatDate() == null : newColDef.getFormatDate().trim().equalsIgnoreCase(oldColDef.getFormatDate()));
+    }
+
+    private boolean isSamePosition(ColumnDefinition newColDef, ColumnDefinition oldColDef) {
+        return newColDef.getPosition() == oldColDef.getPosition();
+    }
+
+    private boolean isSameTypeDonnee(ColumnDefinition newColDef, ColumnDefinition oldColDef) {
+        return (newColDef.getTypeDonnee() == null ? oldColDef.getTypeDonnee() == null : newColDef.getTypeDonnee().trim().equalsIgnoreCase(oldColDef.getTypeDonnee()));
+    }
+
+    private boolean isSameTaille(ColumnDefinition newColDef, ColumnDefinition oldColDef) {
+        return newColDef.getTaille() == oldColDef.getTaille();
+    }
+
+    private boolean isSameTaillePartieDecimale(ColumnDefinition newColDef, ColumnDefinition oldColDef) {
+        return newColDef.getTaillePartieDecimale() == oldColDef.getTaillePartieDecimale();
+    }
+}
diff --git a/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/helper/referentiel/TableDefinitionFilterImpl.java b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/helper/referentiel/TableDefinitionFilterImpl.java
new file mode 100644
index 0000000..221153c
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/helper/referentiel/TableDefinitionFilterImpl.java
@@ -0,0 +1,107 @@
+package com.megatim.fdxcommons.core.impl.helper.referentiel;
+
+import com.megatim.fdxcommons.core.ifaces.helper.referentiel.TableDefinitionChecker;
+import com.megatim.fdxcommons.core.ifaces.helper.referentiel.TableDefinitionFilter;
+import com.megatim.fdxcommons.model.pojo.ReferentielToImportData;
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import com.megatim.fdxcommons.model.referentiel.historique.ReferentielIntegrationHistorique;
+import com.megatim.fdxcommons.model.referentiel.historique.pojo.TableDefinitionFiltered;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class TableDefinitionFilterImpl implements TableDefinitionFilter {
+
+    @Inject
+    private TableDefinitionChecker tableDefinitionChecker;
+
+    @Override
+    public TableDefinitionFiltered doFilter(String previousRef, ReferentielToImportData referentielToImportData, List<ReferentielIntegrationHistorique> refsHistoriqueIntegration) {
+        final int refEncours = Integer.parseInt(referentielToImportData.getReferentielEnCours().getVersion());
+        int indexDebut = previousRef == null ? 1 : Integer.parseInt(previousRef) + 1;
+
+        while (indexDebut <= refEncours) {
+            compareTableDefinition(indexDebut, referentielToImportData, refsHistoriqueIntegration);
+            indexDebut++;
+        }
+
+        return new TableDefinitionFiltered(tablesToCreate(referentielToImportData, refsHistoriqueIntegration), refsHistoriqueIntegration);
+    }
+
+    private List<TableDefinition> tablesToCreate(ReferentielToImportData referentielToImportData, List<ReferentielIntegrationHistorique> refsHistoriqueIntegration) {
+        List<TableDefinition> tablesToCreate = new ArrayList<>();
+
+        refsHistoriqueIntegration.stream().forEach(h -> {
+            referentielToImportData
+                    .getTableDefinitions()
+                    .stream()
+                    .filter(p -> h.getCodeTypeFichier().equals(p.getCodeTypeFichier()) && h.getReferentielVersion().equals(p.getReferentielVersion()))
+                    .findFirst()
+                    .ifPresent(c -> tablesToCreate.add(c));
+        });
+
+        return tablesToCreate;
+    }
+
+    private void compareTableDefinition(int index, ReferentielToImportData referentielToImportData, List<ReferentielIntegrationHistorique> refsHistoriqueIntegration) {
+        String refVersion = referentielVersion(index);
+        String previousRef = referentielVersion(index - 1);
+
+        List<TableDefinition> newTableDef = referentielToImportData.getTableDefinitions().stream().filter(p -> p.getReferentielVersion().equals(refVersion)).collect(Collectors.toList());
+
+        newTableDef.stream().forEach(nt -> {
+            Optional<ReferentielIntegrationHistorique> optRefHist
+                    = refsHistoriqueIntegration
+                            .stream()
+                            .filter(r -> r.getCodeTypeFichier().equals(nt.getCodeTypeFichier()) && r.getDependingReferentiels().contains(previousRef))
+                            .findFirst();
+
+            if (optRefHist.isPresent()) {
+                Optional<TableDefinition> oldTableDef
+                        = referentielToImportData.getTableDefinitions()
+                                .stream()
+                                .filter(p -> p.getReferentielVersion().equals(optRefHist.get().getReferentielVersion()) && p.getCodeTypeFichier().equals(nt.getCodeTypeFichier()))
+                                .findFirst();
+
+                if (oldTableDef.isPresent() && tableDefinitionChecker.isSame(nt, oldTableDef.get(), referentielToImportData.getNatureProductionFichiers())) {
+                    ReferentielIntegrationHistorique refHist = optRefHist.get();
+                    refHist.getDependingReferentiels().add(refVersion);
+                } else {
+                    addNewReferentielIntegrationHistorique(nt.getCodeTypeFichier(), refVersion, refsHistoriqueIntegration);
+                }
+            } else {
+                addNewReferentielIntegrationHistorique(nt.getCodeTypeFichier(), refVersion, refsHistoriqueIntegration);
+            }
+        });
+
+    }
+
+    private void addNewReferentielIntegrationHistorique(String codeTypeFichier, String refVersion, List<ReferentielIntegrationHistorique> refsHistoriqueIntegration) {
+        refsHistoriqueIntegration.add(new ReferentielIntegrationHistorique(codeTypeFichier,
+                refVersion,
+                new HashSet<>(Arrays.asList(refVersion))));
+    }
+
+    private String referentielVersion(int ref) {
+        return generateZeros(6 - (ref + "").length()) + ref;
+    }
+
+    private String generateZeros(int nbOfZero) {
+        StringBuilder str = new StringBuilder();
+        for (int i = 0; i < nbOfZero; i++) {
+            str.append("0");
+        }
+        return str.toString();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/helper/referentiel/ValidateurTypeFichierParserImpl.java b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/helper/referentiel/ValidateurTypeFichierParserImpl.java
new file mode 100644
index 0000000..8e5492c
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/helper/referentiel/ValidateurTypeFichierParserImpl.java
@@ -0,0 +1,335 @@
+package com.megatim.fdxcommons.core.impl.helper.referentiel;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.pojo.Constantes;
+import com.megatim.fdxcommons.core.ifaces.helper.referentiel.ValidateurTypeFichierParser;
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import com.megatim.fdxcommons.model.integration.enums.FileExtension;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationValidationException;
+import java.io.File;
+import java.text.Normalizer;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.enterprise.context.Dependent;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class ValidateurTypeFichierParserImpl implements ValidateurTypeFichierParser {
+
+    @Override
+    public TableDefinition parseToColumnDefinition(String validatorPath, String codeTypeFichier, String referentielVersion) throws Exception {
+        File file = new File(validatorPath);
+        return retrieveFieldsFromValidator(file, codeTypeFichier, referentielVersion);
+    }
+
+    /**
+     * Méthode permettant d'extraire les éléments du validateur XML
+     *
+     * @param file : Fichier du validateur
+     * @return
+     * @throws Exception
+     */
+    private TableDefinition retrieveFieldsFromValidator(File file, String codeTypeFichier, String referentielVersion) throws Exception {
+        Document doc = intialize(file);
+        NodeList entityList = doc.getElementsByTagName("entity"); //Liste des noeud <entity>
+
+        //Map qui stocke le champ à une position, ainsi que les caractéristiques de champ(typeDonnee, taille, index de debut d'extraction)
+        Map<Integer, Map<String, String>> mapParams = new HashMap<>();
+        int position = 1;
+        TableDefinition tableDefinition = new TableDefinition();
+
+        //Le validateur XML doit avoir au moins deux balises <entity> pour être conforme
+        if (entityList.getLength() >= 2) {
+
+            //Liste des noeud de type <validation> du deuxième Noeud <entity>
+            final Node entityNode = entityList.item(1);
+            NodeList entityFileLineChildren = entityNode.getChildNodes();
+            tableDefinition = tableDefinition(entityNode);
+
+            //Map qui contient champ set son nombe d'occurrence dans le fichier en coures de traitement
+            Map<String, Integer> mapFieldName = new HashMap<>();
+
+            //parcours de la balise <entity> pour récupérer ses enfants
+            for (int i = 0; i < entityFileLineChildren.getLength(); i++) {
+
+                if (entityFileLineChildren.item(i) != null && entityFileLineChildren.item(i).getAttributes() != null) {
+
+                    //balise <validation>
+                    Node validation = entityFileLineChildren.item(i);
+
+                    if (validation != null) {
+                        Map<String, String> mapAttributes = new HashMap<>();
+
+                        //Liste des assertions de la balise <validation>
+                        NodeList assertions = validation.getChildNodes();
+
+                        for (int r = 0; r < assertions.getLength(); r++) {
+
+                            Node assertion = assertions.item(r);
+
+                            if (assertion != null && assertion.getAttributes() != null) {
+                                NamedNodeMap assertionAttributes = assertion.getAttributes();
+
+                                for (int q = 0; q < assertionAttributes.getLength(); q++) {
+                                    String assertionAttributeName = assertionAttributes.item(q).getNodeName();
+                                    String assertionAttributeValue = assertionAttributes.item(q).getNodeValue();
+
+                                    if (assertionAttributeName.equalsIgnoreCase(Constantes.ERROR_CODE)) {
+                                        String fieldName = constructFieldName(assertionAttributeValue, codeTypeFichier);
+
+                                        //Stocker le nbre d'occurrences trouvés dans la map
+                                        if (mapFieldName.containsKey(fieldName)) {
+                                            Integer nbOccurrences = mapFieldName.get(fieldName);
+                                            mapFieldName.replace(fieldName, nbOccurrences + 1);
+
+                                        } else {
+                                            mapFieldName.put(fieldName, 1);
+                                        }
+                                        Integer nbOccurrences = mapFieldName.get(fieldName);
+                                        String finalFieldName = nbOccurrences == 1 ? fieldName : fieldName + (nbOccurrences - 1);
+
+                                        mapAttributes.put(Constantes.FIELD_NAME, finalFieldName);
+                                        break;
+                                    }
+                                }
+
+                                //Liste des balises <param-value> de la balise <assertion>
+                                NodeList params = assertion.getChildNodes();
+                                Integer positionAttribute = null;
+
+                                for (int j = 0; j < params.getLength(); j++) {
+
+                                    if (params.item(j) != null && params.item(j).getAttributes() != null) {
+
+                                        //Les attributs de la balise <param-value>
+                                        NamedNodeMap attributesParamValue = params.item(j).getAttributes();
+
+                                        if (attributesParamValue.getLength() == 2) {
+
+                                            String nodeValue = attributesParamValue.item(0).getNodeValue();
+                                            String nextNodeValue = attributesParamValue.item(1).getNodeValue();
+
+                                            if (!nodeValue.equalsIgnoreCase(Constantes.EQUAL_PARAM)
+                                                    && !nextNodeValue.equalsIgnoreCase(Constantes.EQUAL_PARAM)
+                                                    && !nodeValue.equalsIgnoreCase(Constantes.LIGNE)
+                                                    && !nextNodeValue.equalsIgnoreCase(Constantes.LIGNE)
+                                                    && !nodeValue.equalsIgnoreCase(Constantes.EQUAL_VALUE)
+                                                    && !nextNodeValue.equalsIgnoreCase(Constantes.EQUAL_VALUE)) {
+                                                mapAttributes.put(nodeValue, nextNodeValue);
+
+                                                if (nodeValue.equalsIgnoreCase(Constantes.POSITION)) {
+                                                    positionAttribute = Integer.valueOf(nextNodeValue);
+                                                }
+                                            }
+                                        }
+                                        if (mapAttributes.size() > 2) {//On ne garde pas les informatios sur la taille de la ligne
+                                            mapParams.put(positionAttribute != null ? positionAttribute : position, mapAttributes);
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    position++;
+                }
+            }
+        }
+        tableDefinition.setColumnDefinitions(getColumnsDefinition(mapParams, codeTypeFichier, referentielVersion));
+        tableDefinition.setCodeTypeFichier(codeTypeFichier);
+        tableDefinition.setReferentielVersion(referentielVersion);
+
+        return tableDefinition;
+
+    }
+
+    private TableDefinition tableDefinition(Node entityNode) {
+        TableDefinition tableDefinition = new TableDefinition();
+        NamedNodeMap attributes = entityNode.getAttributes();
+
+        for (int i = 0; i < attributes.getLength(); i++) {
+            String assertionAttributeName = attributes.item(i).getNodeName();
+            String assertionAttributeValue = attributes.item(i).getNodeValue();
+
+            if (assertionAttributeName.equalsIgnoreCase(Constantes.COLUMN_DELIMITER)) {
+                tableDefinition.setColumnDelimiter(assertionAttributeValue);
+            } else if (assertionAttributeName.equalsIgnoreCase(Constantes.LINE_DELIMITER)) {
+                tableDefinition.setLineDelimiter(assertionAttributeValue);
+            } else if (assertionAttributeName.equalsIgnoreCase(Constantes.HEADER_PRESENT)) {
+                tableDefinition.setHeaderPresent(Boolean.valueOf(assertionAttributeValue));
+            } else if (assertionAttributeName.equalsIgnoreCase(Constantes.EXTENSION)) {
+                tableDefinition.setExtension(FileExtension.fromValeur(assertionAttributeValue));
+            }
+        }
+        return tableDefinition;
+    }
+
+    /**
+     * Méthode utilitaire pour extraire les données dans un fichier xml
+     *
+     * @param array
+     * @return
+     * @throws Exception
+     */
+    private Document intialize(File file) throws Exception {
+
+        /**
+         * Défini un factory qui aide à obtenir un parseur qui produit un arbre
+         * d'objets DOM à partir d'un document XML.
+         */
+        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+
+        /**
+         * création d'un objet du builder pour parser le fichier XML.
+         */
+        DocumentBuilder db = dbf.newDocumentBuilder();
+
+        Document doc = db.parse(file);
+
+        doc.getDocumentElement().normalize();
+
+        return doc;
+    }
+
+    /**
+     * Méthode qui met les informations du validateur dans un ColumnDefinition
+     * pour utilisation future
+     *
+     * @param mapStructure
+     * @return
+     */
+    private List<ColumnDefinition> getColumnsDefinition(Map<Integer, Map<String, String>> mapStructure, String codeTypeFichier, String referentielVersion) throws CommonApplicationValidationException {
+        List<ColumnDefinition> columns = new ArrayList<>();
+
+        for (Integer key : mapStructure.keySet()) {
+            ColumnDefinition column = new ColumnDefinition();
+            Map<String, String> value = mapStructure.get(key);
+            final String typeDonnee = value.get(Constantes.TYPE_DONNEE);
+
+            if (typeDonnee != null) {
+                column.setPosition(key);
+
+                if (value.get(Constantes.TAILLE) != null) {
+                    column.setTaille(Integer.parseInt(value.get(Constantes.TAILLE)));
+                } else {//Valeur par défaut
+
+                    if (typeDonnee.equalsIgnoreCase(TypeDonnee.ALPHANUMERIQUE.toString())) {
+                        column.setTaille(255);
+                    } else if (typeDonnee.equalsIgnoreCase(TypeDonnee.NUMERIQUE.toString())) {
+                        column.setTaille(17);
+                    } else if (typeDonnee.equalsIgnoreCase(TypeDonnee.DECIMAL.toString())) {
+                        column.setTaille(17);
+                        column.setTaillePartieDecimale(3);
+                    }
+                }
+                column.setPosition(key);
+                column.setName(value.get(Constantes.FIELD_NAME).trim().toLowerCase());
+                column.setTypeDonnee(TypeDonnee.fromValeur(typeDonnee).getValue().trim());
+                column.setCodeTypeFichier(codeTypeFichier.trim());
+                column.setReferentielVersion(referentielVersion.trim());
+
+                if (typeDonnee.equalsIgnoreCase(TypeDonnee.DECIMAL.toString()) && value.get(Constantes.TAILLE) != null) {
+
+                    if (value.get(Constantes.TAILLE_PARTIE_DECIMALE) != null) {
+                        column.setTaillePartieDecimale(Integer.parseInt(value.get(Constantes.TAILLE_PARTIE_DECIMALE)));
+                    }
+                } else if (typeDonnee.equalsIgnoreCase(TypeDonnee.DATE.toString())) {
+                    String separateurDate = value.get(Constantes.SEPARATEUR_DATE);
+                    String formatDate = value.get(Constantes.FORMAT_DATE);
+
+                    if (formatDate != null && !formatDate.isEmpty()) {
+
+                        if (separateurDate != null && !separateurDate.isEmpty()) {
+
+                            if (separateurDate.equals("-") || separateurDate.equals("/")) {
+                                formatDate = addSeparateurToDateFormat(formatDate, separateurDate, column.getName());
+
+                            } else {
+                                throw new CommonApplicationValidationException("Le séparateur de date du champ " + column.getName() + " ne peut être " + separateurDate);
+                            }
+                        }
+                        column.setFormatDate(formatDate);
+                    } else {
+                        throw new CommonApplicationValidationException("Le format date du champ " + column.getName() + " est absent");
+                    }
+                }
+
+                columns.add(column);
+            }
+        }
+
+        return columns;
+    }
+
+    /**
+     * Méthode qui ajoute le séparateur renseigné dans le validateur au format
+     *
+     * @param formatDate
+     * @param separateurDate
+     * @param columnName
+     * @return
+     */
+    private String addSeparateurToDateFormat(String formatDate, String separateurDate, String columnName) {
+        StringBuilder dateValue = new StringBuilder();
+
+        switch (formatDate) {
+            case "ddMMyyyy":
+                dateValue.append("dd").append(separateurDate).append("MM").append(separateurDate).append("yyyy");
+                break;
+            case "ddyyyyMM":
+                dateValue.append("dd").append(separateurDate).append("yyyy").append(separateurDate).append("MM");
+                break;
+            case "MMddyyyy":
+                dateValue.append("MM").append(separateurDate).append("dd").append(separateurDate).append("yyyy");
+                break;
+            case "MMyyyydd":
+                dateValue.append("MM").append(separateurDate).append("yyyy").append(separateurDate).append("dd");
+                break;
+            case "yyyyddMM":
+                dateValue.append("yyyy").append(separateurDate).append("dd").append(separateurDate).append("MM");
+                break;
+            case "yyyyMMdd":
+                dateValue.append("yyyy").append(separateurDate).append("MM").append(separateurDate).append("dd");
+                break;
+            case "yyyy":
+                dateValue.append("yyyy");
+                break;
+            case "yyyyMM":
+                dateValue.append("yyyy").append(separateurDate).append("MM");
+            case "MMyyyy":
+                dateValue.append("MM").append(separateurDate).append("yyyy");
+                break;
+            default:
+                throw new CommonApplicationValidationException("Le format date " + formatDate + " du champ" + columnName + " n'est pas acceptable ");
+        }
+
+        return dateValue.toString();
+    }
+
+    private String constructFieldName(String fieldName, String codeTypeFichier) {
+
+        fieldName = fieldName.startsWith(codeTypeFichier)
+                ? fieldName.substring(6)
+                : fieldName;
+        fieldName = fieldName.equalsIgnoreCase("int") ? "_" + fieldName : fieldName;
+        return removeAccents(fieldName.replaceAll(" ", "_"));
+    }
+
+    private String removeAccents(String input) {
+        // Normalize to decomposed form (NFD): é → e + ´, è → e + `
+        String normalized = Normalizer.normalize(input, Normalizer.Form.NFD);
+        // Remove all diacritical marks (accents)
+        return normalized.replaceAll("\\p{M}", "");
+    }
+}
diff --git a/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/interceptor/AfterUserActionImpl.java b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/interceptor/AfterUserActionImpl.java
new file mode 100644
index 0000000..de57034
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/interceptor/AfterUserActionImpl.java
@@ -0,0 +1,77 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.core.impl.interceptor;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.AfterUserAction;
+import com.megatim.fdxcommons.core.ifaces.interceptor.InterceptorHandler;
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.model.log.ContainerContextDto;
+import com.megatim.fdxcommons.model.log.UserActionLog;
+import com.megatim.fdxcommons.tools.context.AppContext;
+import java.lang.reflect.Method;
+import java.time.LocalDateTime;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import ua_parser.Client;
+import ua_parser.Parser;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class AfterUserActionImpl implements AfterUserAction {
+
+    @Inject
+    private InterceptorHandler handler;
+
+    @Override
+    public UserActionLog filter(ContainerContextDto containerContext) throws Exception {
+        Method method = containerContext.getResourceInfo().getResourceMethod();
+
+        if (method != null && method.getAnnotation(LoggingInterceptorBinding.class) != null) {
+            return logMethodInvocation(method, containerContext);
+        } else {
+            return null;
+        }
+    }
+
+    private UserActionLog logMethodInvocation(Method method, ContainerContextDto containerContext) throws Exception {
+        Object responseEntity = containerContext.getContainerResponseContext().getEntity();
+        Object requestEntity = containerContext.getContainerRequestContext().getProperty("entity");
+        final int status = containerContext.getContainerResponseContext().getStatus();
+
+        UserActionLog log = new UserActionLog();
+        log.setDateAction(LocalDateTime.now());
+        log.setUserName(containerContext.getSecurityContext().getUserPrincipal() != null
+                ? containerContext.getSecurityContext().getUserPrincipal().getName()
+                : null);
+        log.setStatus(status);
+        log.setMotif(log.getStatus() != null ? log.getStatus().toString() + " (" + AppContext.registre_codes_http.get(log.getStatus().toString()) + ")" : null);
+        log.setIpAddress(containerContext.getHttpServletRequest().getRemoteAddr());
+        log.setHttpMethod(containerContext.getContainerRequestContext().getMethod());
+        log.setRelativePath(containerContext.getUriInfo().getPath());
+        Parser uaParser = new Parser();
+        Client c = uaParser.parse(containerContext.getHttpServletRequest().getHeader("User-Agent"));
+        log.setUserAgent(c.userAgent.family);
+
+        if (status < 400) {
+            log.setMessage(message(method, requestEntity, responseEntity, containerContext));
+        } else {
+            log.setMessage("Erreur " + status);
+        }
+        return log;
+    }
+
+    private String message(Method method, Object requestEntity, Object responseEntity, ContainerContextDto containerContext) throws Exception {
+        LoggingInterceptorBinding ann = method.getAnnotation(LoggingInterceptorBinding.class);
+        return handler.finalMessage(ann,
+                method.getParameters(),
+                containerContext.getContainerRequestContext().getUriInfo().getPathParameters(),
+                requestEntity,
+                responseEntity);
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/interceptor/BeforeActionImpl.java b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/interceptor/BeforeActionImpl.java
new file mode 100644
index 0000000..c016352
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/interceptor/BeforeActionImpl.java
@@ -0,0 +1,42 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.core.impl.interceptor;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.BeforeAction;
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.lang.reflect.Method;
+import java.util.stream.Collectors;
+import javax.enterprise.context.Dependent;
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ResourceInfo;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class BeforeActionImpl implements BeforeAction {
+
+    @Override
+    public void filter(ContainerRequestContext crc, ResourceInfo resourceInfo) {
+        Method method = resourceInfo.getResourceMethod();
+        LoggingInterceptorBinding ann = method.getAnnotation(LoggingInterceptorBinding.class);
+
+        if (crc.hasEntity() && ann != null && ann.shouldCopyData()) {
+            InputStream inputStream = crc.getEntityStream();
+            String body = new BufferedReader(new InputStreamReader(inputStream))
+                    .lines().collect(Collectors.joining("\n"));
+
+            crc.setProperty("entity", body);
+
+            // Replace the original input stream with a new one after reading it
+            crc.setEntityStream(new ByteArrayInputStream(body.getBytes()));
+        }
+    }
+}
diff --git a/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/interceptor/InterceptorHandlerImpl.java b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/interceptor/InterceptorHandlerImpl.java
new file mode 100644
index 0000000..93902e7
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/interceptor/InterceptorHandlerImpl.java
@@ -0,0 +1,158 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.core.impl.interceptor;
+
+import com.google.gson.Gson;
+import com.google.gson.internal.LinkedTreeMap;
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.core.ifaces.interceptor.InterceptorHandler;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Parameter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Optional;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import javax.enterprise.context.Dependent;
+import javax.ws.rs.core.MultivaluedMap;
+
+/**
+ * {} : Les paramètres de requête sont entre accolades () : La valeur de retour
+ * entre les parenthèses [] : L'entité de requête est entre les crochets
+ *
+ * @author ASUS
+ */
+@Dependent
+public class InterceptorHandlerImpl implements InterceptorHandler {
+
+    @Override
+    public String finalMessage(LoggingInterceptorBinding interceptorBinding, Parameter[] parameters, MultivaluedMap<String, String> queryParams, Object requestEntity, Object responseEntity) throws Exception {
+        //Recherche des références au paramètres de la requête
+        String message = infoFromPathParameters(interceptorBinding.message(), queryParams);
+
+        //Recherche des références aux éléments du tableau de paramètres
+        message = infoFromParameters(message, parameters, requestEntity);
+
+        //Recherche des références à la valeur de retour
+        return infoFromReturnValue(message, interceptorBinding.classe(), responseEntity);
+    }
+
+    private String infoFromPathParameters(String message, MultivaluedMap<String, String> queryParams) throws Exception {
+        if (!queryParams.isEmpty()) {
+            Pattern pattern = Pattern.compile("\\{\\S{1,}\\}");
+            Matcher matcher = pattern.matcher(message);
+
+            while (matcher.find()) {
+                String group = matcher.group();
+                String fieldName = group.substring(1, group.length() - 1);
+
+                if (queryParams.containsKey(fieldName)) {
+                    message = message.replace(group, queryParams.getFirst(fieldName));
+                }
+            }
+        }
+        return message;
+    }
+
+    private String infoFromReturnValue(String message, Class<?> classe, Object dataToProcess) throws Exception {
+        Pattern pattern = Pattern.compile("\\(\\S{1,}\\)");
+        Matcher matcher = pattern.matcher(message);
+
+        while (matcher.find()) {
+            String group = matcher.group();
+            String fieldName = group.substring(1, group.length() - 1);
+            String[] fieldPath = fieldName.split("\\.");
+            String fieldValue = value(fieldPath, classe, dataToProcess);
+            message = message.replace(group, fieldValue);
+        }
+
+        return message;
+    }
+
+    private String infoFromParameters(String message, Parameter[] parameters, Object requestEntity) throws Exception {
+        if (parameters.length > 0) {
+            Pattern pattern = Pattern.compile("\\[\\d{1,}\\S*\\]");
+            Matcher matcher = pattern.matcher(message);
+
+            while (matcher.find()) {
+                String group = matcher.group();
+                String fieldName = group.substring(1, group.length() - 1);
+                String[] fieldPath = fieldName.split("\\.");
+                int index = Integer.parseInt(fieldPath[0]);
+
+                if (requestEntity != null && index < parameters.length) {
+                    Object obj = new Gson().fromJson(requestEntity.toString(), parameters[index].getType());
+                    String value = "";
+
+                    if (fieldPath.length == 1) {
+                        value = value(fieldPath, parameters[index].getType(), obj);
+                    } else {
+                        value = value(Arrays.copyOfRange(fieldPath, 1, fieldPath.length),
+                                parameters[index].getType(), obj);
+                    }
+
+                    message = message.replace(group, value);
+                }
+            }
+        }
+        return message;
+    }
+
+    private String value(String[] fieldPath, Class<?> classe, Object dataToProcess) throws Exception {
+
+        if (dataToProcess instanceof Collection) {
+            return valueFromCollection(fieldPath, classe, (Collection) dataToProcess);
+
+        } else {
+            return valueFromField(fieldPath, classe, dataToProcess);
+        }
+    }
+
+    private String valueFromCollection(String[] fieldPath, Class<?> classe, Collection collection) throws Exception {
+        List<String> values = new ArrayList<>();
+        for (Object obj : collection) {
+            values.add(valueFromField(fieldPath, classe, obj));
+        }
+        return "[" + values.stream().collect(Collectors.joining(",")) + "]";
+    }
+
+    private String valueFromLinkedTreeMap(LinkedTreeMap dataToProcess, String field) {
+        return dataToProcess.get(field).toString();
+    }
+
+    private String valueFromField(String[] fieldPath, Class<?> classe, Object dataToProcess) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
+        if (dataToProcess instanceof LinkedTreeMap) {
+            return valueFromLinkedTreeMap((LinkedTreeMap) dataToProcess, fieldPath[0]);
+        } else {
+            String methodName = "get" + (fieldPath[0].charAt(0) + "").toUpperCase() + fieldPath[0].substring(1);
+            Method method = classe.getMethod(methodName);
+            Object obj = method.invoke(classe.cast(dataToProcess));
+
+            if (fieldPath.length == 1) {
+                return obj.toString();
+
+            } else {
+                Class<?> classToParse = fieldType(fieldPath[0], classe);
+                return valueFromField(Arrays.copyOfRange(fieldPath, 1, fieldPath.length), classToParse, obj);
+            }
+        }
+    }
+
+    private Class<?> fieldType(String fieldName, Class<?> classe) {
+        Optional<Field> optionalField = Arrays.asList(classe.getDeclaredFields()).stream().filter(f -> f.getName().equals(fieldName)).findFirst();
+
+        if (optionalField.isPresent()) {
+            return optionalField.get().getType();
+        } else {
+            return null;
+        }
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/tools/CommonUtilities.java b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/tools/CommonUtilities.java
new file mode 100644
index 0000000..e02a38c
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/tools/CommonUtilities.java
@@ -0,0 +1,56 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.core.impl.tools;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * @author ASUS
+ */
+public class CommonUtilities {
+
+    /**
+     * Méthode qui récupère l'encodage d'un fichier
+     *
+     * @param file : Fichier dont on veut connaître l'encodage
+     * @return : retourne l'encodage le plus probable
+     * @throws FileNotFoundException
+     * @throws IOException
+     */
+    public static Charset getCharset(File file) throws FileNotFoundException, IOException {
+        return StandardCharsets.UTF_8;
+    }
+
+    public static Map<String, ColumnDefinition> columnDefinitionsToMap(List<ColumnDefinition> columnDefinitions) {
+        Map<String, ColumnDefinition> columnDefinitionsMap = new HashMap<>();
+        columnDefinitions.stream().forEach(c -> columnDefinitionsMap.put(c.getName(), c));
+
+        return columnDefinitionsMap;
+    }
+
+    public static Class<?> fullQualifiedNameTypeFromTypeDonnee(TypeDonnee typeDonnee) {
+        switch (typeDonnee) {
+            case NUMERIQUE:
+                return java.lang.Long.class;
+            case DATE:
+                return java.time.LocalDateTime.class;
+            case DECIMAL:
+                return java.math.BigDecimal.class;
+            default:
+                return java.lang.String.class;
+        }
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/tools/XmlUtils.java b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/tools/XmlUtils.java
new file mode 100644
index 0000000..b451926
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/tools/XmlUtils.java
@@ -0,0 +1,31 @@
+package com.megatim.fdxcommons.core.impl.tools;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+/**
+ *
+ * @author lenovo
+ */
+public class XmlUtils {
+
+    private XmlUtils() {
+    }
+
+    public static Object unMarshal(File xmlFile, Class<?> classe) throws JAXBException, FileNotFoundException, XMLStreamException {
+        XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
+        XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(new FileInputStream(xmlFile));
+
+        JAXBContext jaxbContext = JAXBContext.newInstance(classe);
+        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
+        return jaxbUnmarshaller.unmarshal(xmlStreamReader);
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-dao-ifaces/.gitignore b/fdx-commons/fdxcommons-dao-ifaces/.gitignore
new file mode 100644
index 0000000..b24d71e
--- /dev/null
+++ b/fdx-commons/fdxcommons-dao-ifaces/.gitignore
@@ -0,0 +1,50 @@
+# These are some examples of commonly ignored file patterns.
+# You should customize this list as applicable to your project.
+# Learn more about .gitignore:
+#     https://www.atlassian.com/git/tutorials/saving-changes/gitignore
+
+# Node artifact files
+node_modules/
+dist/
+
+# Compiled Java class files
+*.class
+
+# Compiled Python bytecode
+*.py[cod]
+
+# Log files
+*.log
+
+# Package files
+*.jar
+
+# Maven
+target/
+dist/
+
+# JetBrains IDE
+.idea/
+
+# Unit test reports
+TEST*.xml
+
+# Generated by MacOS
+.DS_Store
+
+# Generated by Windows
+Thumbs.db
+
+# Applications
+*.app
+*.exe
+*.war
+
+# Large media files
+*.mp4
+*.tiff
+*.avi
+*.flv
+*.mov
+*.wmv
+
diff --git a/fdx-commons/fdxcommons-dao-ifaces/nb-configuration.xml b/fdx-commons/fdxcommons-dao-ifaces/nb-configuration.xml
new file mode 100644
index 0000000..a65c451
--- /dev/null
+++ b/fdx-commons/fdxcommons-dao-ifaces/nb-configuration.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+    <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+        <!--
+Properties that influence various parts of the IDE, especially code formatting and the like. 
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+        <netbeans.hint.jdkPlatform>JDK_1.8</netbeans.hint.jdkPlatform>
+    </properties>
+</project-shared-configuration>
diff --git a/fdx-commons/fdxcommons-dao-ifaces/pom.xml b/fdx-commons/fdxcommons-dao-ifaces/pom.xml
new file mode 100644
index 0000000..b7cb18b
--- /dev/null
+++ b/fdx-commons/fdxcommons-dao-ifaces/pom.xml
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+        <groupId>com.megatim.fdxcommons</groupId>
+        <artifactId>fdxcommons</artifactId>
+        <version>1.0</version>
+    </parent>
+    
+    <groupId>com.megatim.fdxcommons.dao.ifaces</groupId>
+    <artifactId>fdxcommons-dao-ifaces</artifactId>
+    <packaging>jar</packaging>
+    
+    <properties>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
+        <jakartaee>8.0</jakartaee>
+    </properties>
+    
+    <dependencies>
+        <dependency>
+            <groupId>com.megatim.fdxcommons.model</groupId>
+            <artifactId>fdxcommons-model</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>javax</groupId>
+            <artifactId>javaee-api</artifactId>
+            <version>${jakartaee}</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.bekosoftware</groupId>
+            <artifactId>genericDAOLayer</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatimgroup</groupId>
+            <artifactId>mgt-commons-tools</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-core</artifactId>
+            <version>5.3.0.Final</version>
+            <scope>compile</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+    </dependencies>
+    
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <compilerArguments>
+                        <endorseddirs>${endorsed.dir}</endorseddirs>
+                    </compilerArguments>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <version>2.3</version>
+                <configuration>
+                    <failOnMissingWebXml>false</failOnMissingWebXml>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>2.6</version>
+                <executions>
+                    <execution>
+                        <phase>validate</phase>
+                        <goals>
+                            <goal>copy</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${endorsed.dir}</outputDirectory>
+                            <silent>true</silent>
+                            <artifactItems>
+                                <artifactItem>
+                                    <groupId>javax</groupId>
+                                    <artifactId>javaee-api</artifactId>
+                                    <version>${jakartaee}</version>
+                                    <type>jar</type>
+                                </artifactItem>
+                            </artifactItems>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+    <name>fdxcommons-dao-ifaces</name>
+</project>
\ No newline at end of file
diff --git a/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/abstracts/AbstractCrudDAO.java b/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/abstracts/AbstractCrudDAO.java
new file mode 100644
index 0000000..bf262d2
--- /dev/null
+++ b/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/abstracts/AbstractCrudDAO.java
@@ -0,0 +1,185 @@
+package com.megatim.fdxcommons.dao.ifaces.abstracts;
+
+import com.megatim.fdxcommons.dao.ifaces.utils.SearchCriteriaBuilderUtil;
+import com.megatim.fdxcommons.model.search.SearchCriteria;
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.EntityManager;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface AbstractCrudDAO<T, ID, U> {
+
+    public EntityManager getEntityManager();
+
+    public Class<T> getManagedEntityClass();
+
+    public T getById(ID id);
+
+    public default T save(T entity) {
+        return getEntityManager().merge(entity);
+    }
+
+    public default void delete(T entity) {
+        getEntityManager().remove(entity);
+    }
+
+    public default long count(U searchEntity) {
+        CriteriaBuilder qb = getEntityManager().getCriteriaBuilder();
+        CriteriaQuery<Long> cq = qb.createQuery(Long.class);
+        Root<T> root = cq.from(getManagedEntityClass());
+
+        List<SearchCriteria> searchCriterias = SearchCriteriaBuilderUtil.getSearchCriterias(searchEntity, getManagedEntityClass(), root, new ArrayList<>());
+        List<Predicate> predicates = createPedicates(searchCriterias, qb, root);
+
+        cq.select(qb.count(root));
+        cq.where(predicates.toArray(new Predicate[predicates.size()]));
+
+        return (long) getEntityManager().createQuery(cq).getSingleResult();
+    }
+
+    public default List<T> getAll(U searchEntity) {
+        CriteriaBuilder qb = getEntityManager().getCriteriaBuilder();
+        CriteriaQuery<T> cq = qb.createQuery(getManagedEntityClass());
+
+        Root<T> root = cq.from(getManagedEntityClass());
+
+        List<SearchCriteria> searchCriterias = SearchCriteriaBuilderUtil.getSearchCriterias(searchEntity, getManagedEntityClass(), root, new ArrayList<>());
+
+        List<Predicate> predicates = new ArrayList<>();
+
+        try {
+            predicates = createPedicates(searchCriterias, qb, root);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        cq.select(root);
+        cq.where(predicates.toArray(new Predicate[predicates.size()]));
+
+        return getEntityManager().createQuery(cq).getResultList();
+    }
+
+    public default List<T> findWithPagination(Integer pageNumber, Integer pagesize, U searchEntity) {
+        CriteriaBuilder qb = getEntityManager().getCriteriaBuilder();
+        CriteriaQuery<T> cq = qb.createQuery(getManagedEntityClass());
+
+        Root<T> root = cq.from(getManagedEntityClass());
+
+        List<SearchCriteria> searchCriterias = SearchCriteriaBuilderUtil.getSearchCriterias(searchEntity, getManagedEntityClass(), root, new ArrayList<>());
+
+        List<Predicate> predicates = new ArrayList<>();
+
+        try {
+            predicates = createPedicates(searchCriterias, qb, root);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        cq.select(root);
+        cq.where(predicates.toArray(new Predicate[predicates.size()]));
+
+        TypedQuery<T> typedQuery = getEntityManager().createQuery(cq);
+
+        typedQuery.setFirstResult((pageNumber - 1) * pagesize);
+        typedQuery.setMaxResults(pagesize);
+
+        return typedQuery.getResultList();
+    }
+
+    /**
+     * Méthode qui les prédicats à partir des critères de recherche
+     *
+     * @param searchCriterias
+     * @param cb
+     * @param root
+     * @return
+     */
+    public default List<Predicate> createPedicates(List<SearchCriteria> searchCriterias, CriteriaBuilder cb, Root<T> root) {
+        List<Predicate> predicates = new ArrayList<>();
+
+        searchCriterias.parallelStream().forEach(s -> {
+
+            if (s.getFieldValue() != null) {
+                Predicate predicate = null;
+                switch (s.getOperateur()) {
+                    case EQUALS:
+                        predicate = cb.equal(s.getFrom().get(s.getFieldName()), s.getFieldValue());
+                        predicates.add(predicate);
+                        break;
+
+                    case NOT_EQUALS:
+                        predicate = cb.notEqual(s.getFrom().get(s.getFieldName()), s.getFieldValue());
+                        predicates.add(predicate);
+                        break;
+
+                    case LIKE:
+                        if (s.getFieldValue() instanceof String) {
+                            predicate = cb.like(s.getFrom().get(s.getFieldName()), "%" + s.getFieldValue().toString() + "%");
+                            predicates.add(predicate);
+                        }
+                        break;
+
+                    case GREATER_THAN:
+                        if (s.getFieldValue() instanceof Number) {
+                            predicate = cb.gt(s.getFrom().get(s.getFieldName()), (Number) s.getFieldValue());
+                            predicates.add(predicate);
+
+                        } else if (s.getFieldValue() instanceof LocalDate) {
+                            predicate = cb.greaterThan(s.getFrom().get(s.getFieldName()), (LocalDate) s.getFieldValue());
+                            predicates.add(predicate);
+                        }
+                        break;
+
+                    case GREATER_OR_EQUALS_THAN:
+                        if (s.getFieldValue() instanceof Number) {
+                            predicate = cb.ge(root.get(s.getFieldName()), (Number) s.getFieldValue());
+                            predicates.add(predicate);
+                        } else if (s.getFieldValue() instanceof LocalDate) {
+                            predicate = cb.greaterThanOrEqualTo(root.get(s.getFieldName()), (LocalDate) s.getFieldValue());
+                            predicates.add(predicate);
+                        }
+                        break;
+
+                    case LESS_THAN:
+                        if (s.getFieldValue() instanceof Number) {
+                            predicate = cb.lt(s.getFrom().get(s.getFieldName()), (Number) s.getFieldValue());
+                            predicates.add(predicate);
+                        } else if (s.getFieldValue() instanceof LocalDate) {
+                            predicate = cb.lessThan(s.getFrom().get(s.getFieldName()), (LocalDate) s.getFieldValue());
+                            predicates.add(predicate);
+                        }
+                        break;
+
+                    case LESS_OR_EQUALS_THAN:
+                        if (s.getFieldValue() instanceof Number) {
+                            predicate = cb.le(s.getFrom().get(s.getFieldName()), (Number) s.getFieldValue());
+                            predicates.add(predicate);
+                        } else if (s.getFieldValue() instanceof LocalDate) {
+                            predicate = cb.lessThanOrEqualTo(s.getFrom().get(s.getFieldName()), (LocalDate) s.getFieldValue());
+                            predicates.add(predicate);
+                        }
+                        break;
+                    case IN:
+                        if (s.getFieldValue() instanceof java.util.Collection) {
+                            predicate = s.getFrom().get(s.getFieldName()).in(s.getFieldValue());
+                            predicates.add(predicate);
+                        }
+                        break;
+                    default:
+
+                }
+            }
+        });
+
+        return predicates;
+    }
+}
diff --git a/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/abstracts/CustomDAOIfaces.java b/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/abstracts/CustomDAOIfaces.java
new file mode 100644
index 0000000..b1a7d10
--- /dev/null
+++ b/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/abstracts/CustomDAOIfaces.java
@@ -0,0 +1,197 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.dao.ifaces.abstracts;
+
+import com.megatim.fdxcommons.dao.ifaces.utils.SearchCriteriaBuilderUtil;
+import static com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur.EQUALS;
+import static com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur.GREATER_OR_EQUALS_THAN;
+import static com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur.GREATER_THAN;
+import static com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur.IN;
+import static com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur.LESS_OR_EQUALS_THAN;
+import static com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur.LESS_THAN;
+import static com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur.LIKE;
+import static com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur.NOT_EQUALS;
+import com.megatim.fdxcommons.model.search.SearchCriteria;
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.EntityManager;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface CustomDAOIfaces<T, ID, U> {
+
+    default T save(T entity) {
+        return getEntityManager().merge(entity);
+    }
+
+    default void delete(T entity) {
+        getEntityManager().remove(entity);
+    }
+
+    public Class<T> getManagedEntityClass();
+
+    public EntityManager getEntityManager();
+
+    public T getById(ID id);
+
+    public default long count(U searchEntity) {
+        CriteriaBuilder qb = getEntityManager().getCriteriaBuilder();
+        CriteriaQuery<Long> cq = qb.createQuery(Long.class);
+        Root<T> root = cq.from(getManagedEntityClass());
+
+        List<SearchCriteria> searchCriterias = SearchCriteriaBuilderUtil.getSearchCriterias(searchEntity, getManagedEntityClass(), root, new ArrayList<>());
+        List<Predicate> predicates = createPedicates(searchCriterias, qb, root);
+
+        cq.select(qb.count(root));
+        cq.where(predicates.toArray(new Predicate[predicates.size()]));
+
+        return (long) getEntityManager().createQuery(cq).getSingleResult();
+    }
+
+    public default List<T> getAll(U searchEntity) {
+        CriteriaBuilder qb = getEntityManager().getCriteriaBuilder();
+        CriteriaQuery<T> cq = qb.createQuery(getManagedEntityClass());
+
+        Root<T> root = cq.from(getManagedEntityClass());
+
+        List<SearchCriteria> searchCriterias = SearchCriteriaBuilderUtil.getSearchCriterias(searchEntity, getManagedEntityClass(), root, new ArrayList<>());
+
+        List<Predicate> predicates = new ArrayList<>();
+
+        try {
+            predicates = createPedicates(searchCriterias, qb, root);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        cq.select(root);
+        cq.where(predicates.toArray(new Predicate[predicates.size()]));
+
+        return getEntityManager().createQuery(cq).getResultList();
+    }
+
+    public default List<T> findWithPagination(Integer pageNumber, Integer pagesize, U searchEntity) {
+        CriteriaBuilder qb = getEntityManager().getCriteriaBuilder();
+        CriteriaQuery<T> cq = qb.createQuery(getManagedEntityClass());
+
+        Root<T> root = cq.from(getManagedEntityClass());
+
+        List<SearchCriteria> searchCriterias = SearchCriteriaBuilderUtil.getSearchCriterias(searchEntity, getManagedEntityClass(), root, new ArrayList<>());
+
+        List<Predicate> predicates = new ArrayList<>();
+
+        try {
+            predicates = createPedicates(searchCriterias, qb, root);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        cq.select(root);
+        cq.where(predicates.toArray(new Predicate[predicates.size()]));
+
+        TypedQuery<T> typedQuery = getEntityManager().createQuery(cq);
+
+        typedQuery.setFirstResult((pageNumber - 1) * pagesize);
+        typedQuery.setMaxResults(pagesize);
+
+        return typedQuery.getResultList();
+    }
+
+    /**
+     * Méthode qui les prédicats à partir des critères de recherche
+     *
+     * @param searchCriterias
+     * @param cb
+     * @param root
+     * @return
+     */
+    public default List<Predicate> createPedicates(List<SearchCriteria> searchCriterias, CriteriaBuilder cb, Root<T> root) {
+        List<Predicate> predicates = new ArrayList<>();
+
+        searchCriterias.stream().forEach(s -> {
+
+            if (s.getFieldValue() != null) {
+                Predicate predicate = null;
+                switch (s.getOperateur()) {
+                    case EQUALS:
+                        predicate = cb.equal(s.getFrom().get(s.getFieldName()), s.getFieldValue());
+                        predicates.add(predicate);
+                        break;
+
+                    case NOT_EQUALS:
+                        predicate = cb.notEqual(s.getFrom().get(s.getFieldName()), s.getFieldValue());
+                        predicates.add(predicate);
+                        break;
+
+                    case LIKE:
+                        if (s.getFieldValue() instanceof String) {
+                            predicate = cb.like(s.getFrom().get(s.getFieldName()), "%" + s.getFieldValue().toString() + "%");
+                            predicates.add(predicate);
+                        }
+                        break;
+
+                    case GREATER_THAN:
+                        if (s.getFieldValue() instanceof Number) {
+                            predicate = cb.gt(s.getFrom().get(s.getFieldName()), (Number) s.getFieldValue());
+                            predicates.add(predicate);
+
+                        } else if (s.getFieldValue() instanceof LocalDate) {
+                            predicate = cb.greaterThan(s.getFrom().get(s.getFieldName()), (LocalDate) s.getFieldValue());
+                            predicates.add(predicate);
+                        }
+                        break;
+
+                    case GREATER_OR_EQUALS_THAN:
+                        if (s.getFieldValue() instanceof Number) {
+                            predicate = cb.ge(root.get(s.getFieldName()), (Number) s.getFieldValue());
+                            predicates.add(predicate);
+                        } else if (s.getFieldValue() instanceof LocalDate) {
+                            predicate = cb.greaterThanOrEqualTo(root.get(s.getFieldName()), (LocalDate) s.getFieldValue());
+                            predicates.add(predicate);
+                        }
+                        break;
+
+                    case LESS_THAN:
+                        if (s.getFieldValue() instanceof Number) {
+                            predicate = cb.lt(s.getFrom().get(s.getFieldName()), (Number) s.getFieldValue());
+                            predicates.add(predicate);
+                        } else if (s.getFieldValue() instanceof LocalDate) {
+                            predicate = cb.lessThan(s.getFrom().get(s.getFieldName()), (LocalDate) s.getFieldValue());
+                            predicates.add(predicate);
+                        }
+                        break;
+
+                    case LESS_OR_EQUALS_THAN:
+                        if (s.getFieldValue() instanceof Number) {
+                            predicate = cb.le(s.getFrom().get(s.getFieldName()), (Number) s.getFieldValue());
+                            predicates.add(predicate);
+                        } else if (s.getFieldValue() instanceof LocalDate) {
+                            predicate = cb.lessThanOrEqualTo(s.getFrom().get(s.getFieldName()), (LocalDate) s.getFieldValue());
+                            predicates.add(predicate);
+                        }
+                        break;
+                    case IN:
+                        if (s.getFieldValue() instanceof java.util.Collection) {
+                            predicate = s.getFrom().get(s.getFieldName()).in(s.getFieldValue());
+                            predicates.add(predicate);
+                        }
+                        break;
+                    default:
+
+                }
+            }
+        });
+
+        return predicates;
+    }
+}
diff --git a/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/integration/ColumnDefinitionDAO.java b/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/integration/ColumnDefinitionDAO.java
new file mode 100644
index 0000000..73dccdc
--- /dev/null
+++ b/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/integration/ColumnDefinitionDAO.java
@@ -0,0 +1,84 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.dao.ifaces.integration;
+
+import com.megatim.fdxcommons.dao.ifaces.abstracts.CustomDAOIfaces;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.integration.ColumnDefinitionId;
+import com.megatim.fdxcommons.model.searchentities.ColumnDefinitionSearch;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
+import javax.persistence.Query;
+import javax.persistence.Tuple;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ColumnDefinitionDAO extends CustomDAOIfaces<ColumnDefinition, ColumnDefinitionId, ColumnDefinitionSearch> {
+
+    public default ColumnDefinition findByNameAndReferentielAndTypeFichier(String columnName, String referentielVersion, String codeTypeFichier) {
+        Query query = getEntityManager().createQuery("SELECT c FROM ColumnDefinition c "
+                + " WHERE c.name = :columnName AND c.referentielVersion = :referentielVersion "
+                + " AND  c.codeTypeFichier = :codeTypeFichier");
+
+        query.setParameter("columnName", columnName);
+        query.setParameter("referentielVersion", referentielVersion);
+        query.setParameter("codeTypeFichier", codeTypeFichier);
+
+        Optional<ColumnDefinition> optColumnDef = ((List<ColumnDefinition>) query.getResultList()).stream().findFirst();
+
+        return optColumnDef.isPresent() ? optColumnDef.get() : null;
+    }
+
+    public default List<ColumnDefinition> findByReferentielAndTypeFichier(String referentielVersion, String codeTypeFichier) {
+        return getEntityManager()
+                .createQuery("SELECT c FROM ColumnDefinition c"
+                        + " WHERE c.referentielVersion = :referentielVersion AND  c.codeTypeFichier = :codeTypeFichier", ColumnDefinition.class)
+                .setParameter("referentielVersion", referentielVersion)
+                .setParameter("codeTypeFichier", codeTypeFichier)
+                .getResultList();
+
+    }
+
+    public default List<ColumnDefinition> findByReferentiel(String referentielVersion) {
+        return getEntityManager()
+                .createQuery("SELECT c FROM ColumnDefinition c"
+                        + " WHERE c.referentielVersion = :referentielVersion ", ColumnDefinition.class)
+                .setParameter("referentielVersion", referentielVersion)
+                .getResultList();
+    }
+
+    public default Set<String> findTypeFichierByReferentiel(String referentielVersion) {
+        Set<String> typeFichiers = new HashSet<>();
+        List<ColumnDefinition> columnDefinitions = findByReferentiel(referentielVersion);
+
+        columnDefinitions.stream().forEach(c -> {
+            if (!typeFichiers.contains(c.getCodeTypeFichier())) {
+                typeFichiers.add(c.getCodeTypeFichier());
+            }
+        });
+        return typeFichiers;
+    }
+
+    @Override
+    public default ColumnDefinition getById(ColumnDefinitionId id) {
+        Query query = getEntityManager().createQuery("SELECT c FROM ColumnDefinition c"
+                + " WHERE c.referentielVersion = :referentielVersion AND  c.codeTypeFichier = :codeTypeFichier"
+                + " AND c.name = :name");
+
+        query.setParameter("referentielVersion", id.getReferentielVersion());
+        query.setParameter("codeTypeFichier", id.getCodeTypeFichier());
+        query.setParameter("name", id.getName());
+
+        Optional<ColumnDefinition> optColumnDef = ((List<ColumnDefinition>) query.getResultList()).stream().findFirst();
+
+        return optColumnDef.isPresent() ? optColumnDef.get() : null;
+    }
+
+    List<Tuple> byRefVersionAndByTypeFichier();
+}
diff --git a/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/integration/TableDefinitionDAO.java b/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/integration/TableDefinitionDAO.java
new file mode 100644
index 0000000..36b00d5
--- /dev/null
+++ b/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/integration/TableDefinitionDAO.java
@@ -0,0 +1,34 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.dao.ifaces.integration;
+
+import com.megatim.fdxcommons.dao.ifaces.abstracts.CustomDAOIfaces;
+import com.megatim.fdxcommons.model.integration.TableDefinitionId;
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import com.megatim.fdxcommons.model.searchentities.TableDefinitionSearch;
+import java.util.List;
+import java.util.Optional;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface TableDefinitionDAO extends CustomDAOIfaces<TableDefinition, TableDefinitionId, TableDefinitionSearch> {
+
+    @Override
+    public default TableDefinition getById(TableDefinitionId id) {
+        Query query = getEntityManager().createQuery("SELECT t FROM TableDefinition t "
+                + " WHERE t.referentielVersion = :referentielVersion AND  t.codeTypeFichier = :codeTypeFichier");
+
+        query.setParameter("referentielVersion", id.getReferentielVersion());
+        query.setParameter("codeTypeFichier", id.getCodeTypeFichier());
+
+        Optional<TableDefinition> optTableDef = ((List<TableDefinition>) query.getResultList()).stream().findFirst();
+
+        return optTableDef.isPresent() ? optTableDef.get() : null;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/integration/json/JsonStructureDAO.java b/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/integration/json/JsonStructureDAO.java
new file mode 100644
index 0000000..7f8e544
--- /dev/null
+++ b/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/integration/json/JsonStructureDAO.java
@@ -0,0 +1,48 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.dao.ifaces.integration.json;
+
+import com.megatim.fdxcommons.dao.ifaces.abstracts.CustomDAOIfaces;
+import com.megatim.fdxcommons.model.integration.json.JsonStructure;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface JsonStructureDAO extends CustomDAOIfaces<JsonStructure, Long, JsonStructure> {
+
+    default JsonStructure loadSubJsonStructure(JsonStructure jsonStructure) {
+        List<JsonStructure> children = getChildren(jsonStructure.getId());
+        List<JsonStructure> subJsonStructure = new ArrayList<>();
+
+        for (JsonStructure j : children) {
+            subJsonStructure.add(loadSubJsonStructure(j));
+        }
+        jsonStructure.getFields().clear();
+        jsonStructure.getFields().addAll(subJsonStructure);
+
+        return jsonStructure;
+    }
+
+    default List<JsonStructure> getChildren(Long id) {
+        Query query = getEntityManager().createQuery("SELECT j from JsonStructure j where j.parent.id = :id ");
+        query.setParameter("id", id);
+
+        return (List<JsonStructure>) query.getResultList();
+    }
+
+    @Override
+    public default JsonStructure getById(Long id) {
+        Query query = getEntityManager().createQuery("SELECT j from JsonStructure j where j.id = :id ");
+        query.setParameter("id", id);
+        Optional<JsonStructure> optJsonStructure = ((List<JsonStructure>) query.getResultList()).stream().findFirst();
+
+        return optJsonStructure.isPresent() ? optJsonStructure.get() : null;
+    }
+}
diff --git a/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/integration/json/TypeFichierJsonDAO.java b/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/integration/json/TypeFichierJsonDAO.java
new file mode 100644
index 0000000..6e5960d
--- /dev/null
+++ b/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/integration/json/TypeFichierJsonDAO.java
@@ -0,0 +1,29 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.dao.ifaces.integration.json;
+
+import com.megatim.fdxcommons.dao.ifaces.abstracts.CustomDAOIfaces;
+import com.megatim.fdxcommons.model.integration.json.TypeFichierJson;
+import java.util.List;
+import java.util.Optional;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface TypeFichierJsonDAO extends CustomDAOIfaces<TypeFichierJson, Long, TypeFichierJson> {
+
+    @Override
+    public default TypeFichierJson getById(Long id) {
+        Query query = getEntityManager().createQuery("SELECT t from TypeFichierJson t where t.id = :id ");
+        query.setParameter("id", id);
+        Optional<TypeFichierJson> optJsonStructure = ((List<TypeFichierJson>) query.getResultList()).stream().findFirst();
+
+        return optJsonStructure.isPresent() ? optJsonStructure.get() : null;
+    }
+
+    TypeFichierJson findByReferentielAndByTypeFichier(String referentielVersion, String codeTypeFichier);
+}
diff --git a/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/natureproduction/NatureProductionFichierDAO.java b/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/natureproduction/NatureProductionFichierDAO.java
new file mode 100644
index 0000000..892d17a
--- /dev/null
+++ b/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/natureproduction/NatureProductionFichierDAO.java
@@ -0,0 +1,25 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.dao.ifaces.natureproduction;
+
+import com.megatim.fdxcommons.dao.ifaces.abstracts.CustomDAOIfaces;
+import com.megatim.fdxcommons.model.referentiel.natureproduction.NatureProductionFichier;
+import com.megatim.fdxcommons.model.referentiel.natureproduction.NatureProductionFichierId;
+import java.util.List;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface NatureProductionFichierDAO extends CustomDAOIfaces<NatureProductionFichier, NatureProductionFichierId, NatureProductionFichier> {
+
+    default List<NatureProductionFichier> getByReferentiel(String referentielVersion) {
+        Query query = getEntityManager().createQuery("SELECT n from NatureProductionFichier n where n.referentiel.version = :referentielVersion");
+        query.setParameter("referentielVersion", referentielVersion);
+
+        return query.getResultList();
+    }
+}
diff --git a/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/referentiel/historique/ReferentielIntegrationHistoriqueDAO.java b/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/referentiel/historique/ReferentielIntegrationHistoriqueDAO.java
new file mode 100644
index 0000000..a1987bc
--- /dev/null
+++ b/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/referentiel/historique/ReferentielIntegrationHistoriqueDAO.java
@@ -0,0 +1,21 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.dao.ifaces.referentiel.historique;
+
+import com.megatim.fdxcommons.dao.ifaces.abstracts.CustomDAOIfaces;
+import com.megatim.fdxcommons.model.referentiel.historique.ReferentielIntegrationHistorique;
+import com.megatim.fdxcommons.model.referentiel.historique.ReferentielIntegrationHistoriqueId;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ReferentielIntegrationHistoriqueDAO extends CustomDAOIfaces<ReferentielIntegrationHistorique, ReferentielIntegrationHistoriqueId, ReferentielIntegrationHistorique> {
+
+    public ReferentielIntegrationHistorique suitableIntegrationHistorique(String codeTypeFichier, String refVersion);
+
+    List<ReferentielIntegrationHistorique> suitableIntegrationHistorique(String refVersion);
+}
diff --git a/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/utils/SearchCriteriaBuilderUtil.java b/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/utils/SearchCriteriaBuilderUtil.java
new file mode 100644
index 0000000..1938ebe
--- /dev/null
+++ b/fdx-commons/fdxcommons-dao-ifaces/src/main/java/com/megatim/fdxcommons/dao/ifaces/utils/SearchCriteriaBuilderUtil.java
@@ -0,0 +1,166 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.dao.ifaces.utils;
+
+import com.megatim.fdxcommons.model.enumeration.NumberOperator;
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.search.Search;
+import com.megatim.fdxcommons.model.search.SearchCriteria;
+import java.beans.IntrospectionException;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import javax.persistence.criteria.From;
+import javax.persistence.criteria.Join;
+import javax.persistence.criteria.Root;
+
+/**
+ *
+ * @author ASUS
+ */
+public class SearchCriteriaBuilderUtil {
+
+    private SearchCriteriaBuilderUtil() {
+    }
+
+    public static <T, U> List<SearchCriteria> getSearchCriterias(U searchEntity, Class<T> entityClass, Root<?> root, List<SearchCriteria> externalSearchCriterias) {
+        Field[] entityFields = entityClass.getDeclaredFields();
+        List<SearchCriteria> searchCriterias = new ArrayList<>();
+
+        if (externalSearchCriterias != null) {
+            searchCriterias.addAll(externalSearchCriterias);
+        }
+
+        if (searchEntity == null) {
+            return searchCriterias;
+        }
+
+        Field[] searchEntityFields = searchEntity.getClass().getDeclaredFields();
+        for (Field searchEntityField : searchEntityFields) {
+            Search searchAnnotation = searchEntityField.getAnnotation(Search.class);
+
+            if (searchAnnotation != null && searchAnnotation.fieldName() != null && !searchAnnotation.fieldName().isEmpty()) {
+                String[] fieldPath = searchAnnotation.fieldName().split("\\.");
+                if (fieldPath.length == 1) {
+                    if (isSearchFieldDescriptionCorrect(searchAnnotation.fieldName(), searchEntityField, entityFields)) {
+                        searchCriterias.add(createSearchCriteria(searchAnnotation, searchAnnotation.fieldName(), searchEntityField, searchEntity, root));
+                    }
+                } else if (fieldPath.length > 1) {
+                    Join<Object, Object> join = null;
+                    String fieldName = fieldPath[fieldPath.length - 1];
+                    for (int i = 0; i < fieldPath.length - 1; i++) {
+                        if (i == 0) {
+                            join = root.join(fieldPath[i]);
+                        } else {
+                            if (join != null) {
+                                join = join.join(fieldPath[i]);
+                            }
+                        }
+                    }
+                    if (isSearchHierarchicalFieldDescriptionCorrect(fieldPath, searchEntityField, entityFields)) {
+                        searchCriterias.add(createSearchCriteria(searchAnnotation, fieldName, searchEntityField, searchEntity, join));
+                    }
+                }
+            }
+
+        }
+        return searchCriterias;
+    }
+
+    private static SearchCriteria createSearchCriteria(Search searchAnnotation, String fieldName, Field searchEntityField, Object searchEntity, From<?, ?> from) {
+        SearchCriteria searchCriteria = new SearchCriteria();
+        searchCriteria.setFrom(from);
+        searchCriteria.setFieldName(fieldName);
+        searchCriteria.setOperateur(searchAnnotation.operateur());
+        searchCriteria.setFieldType(searchEntityField.getType());
+        Object fieldValue = getFieldValue(searchEntityField, searchEntity);
+        searchCriteria.setFieldValue(fieldValue);
+
+        if (searchAnnotation.operateur().equals(SearchAnnotationOperateur.NUMBER_OPERATOR)) {
+            try {
+                searchCriteria.setNumberOperator(getNumberOperatorFieldValue(searchAnnotation.operatorFieldName(), searchEntity));
+            } catch (IntrospectionException ex) {
+            }
+        }
+        return searchCriteria;
+    }
+
+    private static Object getFieldValue(Field field, Object searchEntity) {
+        Object value = null;
+        field.setAccessible(true);
+        try {
+            Method method = new PropertyDescriptor(field.getName(), searchEntity.getClass()).getReadMethod();
+            value = (Comparable<?>) method.invoke(searchEntity);
+        } catch (IllegalArgumentException | IllegalAccessException | InvocationTargetException | java.beans.IntrospectionException ex) {
+        }
+        return value;
+    }
+
+    private static NumberOperator getNumberOperatorFieldValue(String operatorFieldName, Object searchEntity) throws java.beans.IntrospectionException {
+        NumberOperator numberOperator = NumberOperator.UNKNOW;
+        Field[] fields = searchEntity.getClass().getDeclaredFields();
+        for (Field field : fields) {
+            if (field.getName().equals(operatorFieldName)) {
+                field.setAccessible(true);
+                try {
+                    Method method = new PropertyDescriptor(field.getName(), searchEntity.getClass()).getReadMethod();
+                    Object value = method.invoke(searchEntity);
+                    if (value instanceof NumberOperator) {
+                        numberOperator = (NumberOperator) value;
+                    }
+                } catch (IllegalArgumentException | IllegalAccessException | InvocationTargetException ex) {
+                }
+            }
+        }
+        return numberOperator;
+    }
+
+    private static boolean isSearchHierarchicalFieldDescriptionCorrect(String[] fieldPath, Field searchEntityField, Field[] entityFields) {
+        String fieldName = fieldPath[0];
+        if (fieldPath.length == 1) {
+            return isSearchFieldDescriptionCorrect(fieldName, searchEntityField, entityFields);
+        } else {
+
+            Class<?> clazz = getFieldClass(fieldName, entityFields);
+            if (clazz != null) {
+                Field[] subFields = clazz.getDeclaredFields();
+                String[] subFieldPath = Arrays.copyOfRange(fieldPath, 1, fieldPath.length);
+                return isSearchHierarchicalFieldDescriptionCorrect(subFieldPath, searchEntityField, subFields);
+            } else {
+                return false;
+            }
+        }
+
+    }
+
+    private static Class<?> getFieldClass(String fieldName, Field[] entityFields) {
+        int index = getIndex(fieldName, entityFields);
+        return (index != -1) ? entityFields[index].getType() : null;
+    }
+
+    private static boolean isSearchFieldDescriptionCorrect(String fieldName, Field searchEntityField, Field[] entityFields) {
+        int index = getIndex(fieldName, entityFields);
+        return (index != -1) && isFieldTypeEquals(searchEntityField, entityFields[index]);
+    }
+
+    private static int getIndex(String fieldName, Field[] entityFields) {
+        int index = 0;
+        for (Field field : entityFields) {
+            if (fieldName.equals(field.getName())) {
+                return index;
+            }
+            index++;
+        }
+        return -1;
+    }
+
+    private static boolean isFieldTypeEquals(Field searchEntityField, Field entityField) {
+        return searchEntityField.getType().equals(entityField.getType());
+    }
+}
diff --git a/fdx-commons/fdxcommons-dao-impl/nb-configuration.xml b/fdx-commons/fdxcommons-dao-impl/nb-configuration.xml
new file mode 100644
index 0000000..a65c451
--- /dev/null
+++ b/fdx-commons/fdxcommons-dao-impl/nb-configuration.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+    <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+        <!--
+Properties that influence various parts of the IDE, especially code formatting and the like. 
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+        <netbeans.hint.jdkPlatform>JDK_1.8</netbeans.hint.jdkPlatform>
+    </properties>
+</project-shared-configuration>
diff --git a/fdx-commons/fdxcommons-dao-impl/pom.xml b/fdx-commons/fdxcommons-dao-impl/pom.xml
new file mode 100644
index 0000000..0543be5
--- /dev/null
+++ b/fdx-commons/fdxcommons-dao-impl/pom.xml
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+        <groupId>com.megatim.fdxcommons</groupId>
+        <artifactId>fdxcommons</artifactId>
+        <version>1.0</version>
+    </parent>
+    
+    <groupId>com.megatim.fdxcommons.dao.impl</groupId>
+    <artifactId>fdxcommons-dao-impl</artifactId>
+    <packaging>jar</packaging>
+    
+    <properties>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
+        <jakartaee>8.0</jakartaee>
+    </properties>    
+    
+    <dependencies>
+        <dependency>
+            <groupId>com.megatim.fdxcommons.dao.ifaces</groupId>
+            <artifactId>fdxcommons-dao-ifaces</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxcommons.tools</groupId>
+            <artifactId>fdxcommons-tools</artifactId>
+            <version>1.0</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>javax</groupId>
+            <artifactId>javaee-api</artifactId>
+            <version>${jakartaee}</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.12</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.megatimgroup</groupId>
+            <artifactId>mgt-commons-tools</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.hibernate.validator</groupId>
+            <artifactId>hibernate-validator</artifactId>
+            <version>6.0.13.Final</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-core</artifactId>
+            <version>5.4.2.Final</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>org.postgresql</groupId>
+            <artifactId>postgresql</artifactId>
+            <version>42.7.3</version>
+        </dependency>
+    </dependencies>
+    
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <compilerArguments>
+                        <endorseddirs>${endorsed.dir}</endorseddirs>
+                    </compilerArguments>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <version>2.3</version>
+                <configuration>
+                    <failOnMissingWebXml>false</failOnMissingWebXml>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>2.6</version>
+                <executions>
+                    <execution>
+                        <phase>validate</phase>
+                        <goals>
+                            <goal>copy</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${endorsed.dir}</outputDirectory>
+                            <silent>true</silent>
+                            <artifactItems>
+                                <artifactItem>
+                                    <groupId>javax</groupId>
+                                    <artifactId>javaee-api</artifactId>
+                                    <version>${jakartaee}</version>
+                                    <type>jar</type>
+                                </artifactItem>
+                            </artifactItems>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+    <name>fdxcommons-dao-impl</name>
+</project>
\ No newline at end of file
diff --git a/fdx-commons/fdxcommons-dao-impl/src/main/resources/app.properties b/fdx-commons/fdxcommons-dao-impl/src/main/resources/app.properties
new file mode 100644
index 0000000..33f4664
--- /dev/null
+++ b/fdx-commons/fdxcommons-dao-impl/src/main/resources/app.properties
@@ -0,0 +1,6 @@
+user.name=postgres
+password=mela
+adresse.ip=localhost
+port=5432
+database.name=fdxCommonsDB
+sgbd.name=megatim
\ No newline at end of file
diff --git a/fdx-commons/fdxcommons-model/nb-configuration.xml b/fdx-commons/fdxcommons-model/nb-configuration.xml
new file mode 100644
index 0000000..a65c451
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/nb-configuration.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+    <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+        <!--
+Properties that influence various parts of the IDE, especially code formatting and the like. 
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+        <netbeans.hint.jdkPlatform>JDK_1.8</netbeans.hint.jdkPlatform>
+    </properties>
+</project-shared-configuration>
diff --git a/fdx-commons/fdxcommons-model/pom.xml b/fdx-commons/fdxcommons-model/pom.xml
new file mode 100644
index 0000000..f41f028
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/pom.xml
@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+        <groupId>com.megatim.fdxcommons</groupId>
+        <artifactId>fdxcommons</artifactId>
+        <version>1.0</version>
+    </parent>
+    
+    <groupId>com.megatim.fdxcommons.model</groupId>
+    <artifactId>fdxcommons-model</artifactId>
+    <version>1.0</version>
+    <packaging>jar</packaging>
+    
+    <properties>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <jakartaee>8.0</jakartaee>
+        <version.lombok>1.18.18</version.lombok>
+        <version.mapstruct>1.4.2.Final</version.mapstruct>
+        <version.mapstruct-lombok>0.2.0</version.mapstruct-lombok>
+    </properties>
+    
+    <dependencies>
+        <dependency>
+            <groupId>javax</groupId>
+            <artifactId>javaee-api</artifactId>
+            <version>${jakartaee}</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>${version.lombok}</version>
+            <optional>true</optional>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim</groupId>
+            <artifactId>rs-security-core</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.mapstruct</groupId>
+            <artifactId>mapstruct</artifactId>
+            <version>${version.mapstruct}</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok-mapstruct-binding</artifactId>
+            <version>${version.mapstruct-lombok}</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.hibernate.validator</groupId>
+            <artifactId>hibernate-validator</artifactId>
+            <version>6.0.13.Final</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        
+        <!-- Apiee -->
+        <dependency>
+            <groupId>com.github.phillip-kruger</groupId>
+            <artifactId>apiee-core</artifactId>
+            <version>1.0.8</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        
+        <dependency>
+            <groupId>com.megatim</groupId>
+            <artifactId>reporting-adhoc</artifactId>
+            <version>1.0</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-core</artifactId>
+            <version>5.4.2.Final</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.github.ua-parser</groupId>
+            <artifactId>uap-java</artifactId>
+            <version>1.6.1</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        
+    </dependencies>
+    
+    <build>
+        <plugins>
+            <!-- ... -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.5.1</version>
+                <configuration>
+                    <source>1.8</source> 
+                    <target>1.8</target> 
+                    <annotationProcessorPaths>
+                        <path>
+                            <groupId>org.mapstruct</groupId>
+                            <artifactId>mapstruct-processor</artifactId>
+                            <version>${version.mapstruct}</version>
+                        </path>
+                        <path>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                            <version>${version.lombok}</version>
+                        </path>
+                        <path>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok-mapstruct-binding</artifactId>
+                            <version>${version.mapstruct-lombok}</version>
+                        </path>
+                    </annotationProcessorPaths>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+    
+    <name>fdxcommons-model</name>
+    
+</project>
\ No newline at end of file
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/base/BaseEntity.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/base/BaseEntity.java
new file mode 100644
index 0000000..5e738dc
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/base/BaseEntity.java
@@ -0,0 +1,56 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.base;
+
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+@MappedSuperclass
+public class BaseEntity {
+
+    @Column(name = "TYPE_OPERATION")
+    @Enumerated(EnumType.STRING)
+    protected TypeOperation typeOperation = TypeOperation.AJOUTER;
+
+    @CriteriaEntitySearch(libelle = "Date création", rang = 1)
+    @Column(name = "DATE_CREATION")
+    @Temporal(TemporalType.TIMESTAMP)
+    protected Date dateCreation = new Date();
+
+    @CriteriaEntitySearch(libelle = "Crée par", rang = 2)
+    @Column(name = "USER_CREATION")
+    protected String utilisateurCreation;
+
+    @CriteriaEntitySearch(libelle = "Date dernière regen.", rang = 3, visible = false)
+    @Column(name = "DATE_DERN_MOD")
+    @Temporal(TemporalType.TIMESTAMP)
+    protected Date dateDerniereModification;
+
+    @CriteriaEntitySearch(libelle = "Modifié par", rang = 4, visible = false)
+    @Column(name = "USER_UPDATE")
+    protected String utilisateurModification;
+
+    @Column(name = "DATE_SUPPR")
+    @Temporal(TemporalType.TIMESTAMP)
+    protected Date dateSuppression;
+
+    @Column(name = "USER_DELETE")
+    protected String utilisateurSuppression;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/BrokerProperties.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/BrokerProperties.java
new file mode 100644
index 0000000..0676f2e
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/BrokerProperties.java
@@ -0,0 +1,17 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.camel;
+
+/**
+ *
+ * @author ASUS
+ */
+public class BrokerProperties {
+
+    public static String HOSTNAME = "broker.hostname";
+    public static String PORT_NUMBER = "broker.port-number";
+    public static String USER_NAME = "broker.user-name";
+    public static String PASSWORD = "broker.password";
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/CamelProperties.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/CamelProperties.java
new file mode 100644
index 0000000..7e8c619
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/CamelProperties.java
@@ -0,0 +1,37 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.camel;
+
+/**
+ *
+ * @author ASUS
+ */
+public class CamelProperties {
+
+    public static String ERROR_DIR = "error";
+
+    public static String STANDALONE_TMP_DIR_PROPERTY = "fdx.api.integration-standalone-temp-dir";
+    public static String CONSULTATION_TMP_DIR = "fdx.api.integration-consultation-temp-dir";
+
+    public static String REFERENTIEL_LOCAL_PATH_PROPERTY = "fdx.api.referentiel-integration-local-path";
+    public static String FICHIER_LOCAL_PATH_PROPERTY = "fdx.api.fichier-integration-local-path";
+    public static String STANDALONE_DESTINATION_DIR_PROPERTY = "fdx.api.integration-standalone-destination-dir";
+    public static String CONSULTATION_DESTINATION_DIR_PROPERTY = "fdx.api.integration-consultation-destination-dir";
+
+    public static String REFERENTIEL_REMOTE_PATH_PROPERTY = "fdx.api.referentiel-integration-remote-path";
+    public static String FICHIER_REMOTE_PATH_PROPERTY = "fdx.api.fichier-integration-remote-path";
+    public static String STANDALONE_REMOTE_DIR_PROPERTY = "fdx.integration-standalone-remote";
+    public static String CONSULTATION_REMOTE_DIR_PROPERTY = "fdx.integration-consultation-remote";
+
+    public static String STANDALONE_USER_NAME = "fdx.integration-standalone-username";
+    public static String STANDALONE_PASSWORD = "fdx.integration-standalone-password";
+    public static String STANDALONE_HOST_NAME = "fdx.integration-standalone-hostname";
+    public static String STANDALONE_PORT = "fdx.integration-standalone-port";
+    public static String CONSULTATION_USER_NAME = "fdx.integration-consultation-username";
+    public static String CONSULTATION_PASSWORD = "fdx.integration-consultation-password";
+    public static String CONSULTATION_HOST_NAME = "fdx.integration-consultation-hostname";
+    public static String CONSULTATION_PORT = "fdx.integration-consultation-port";
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/CamelRouteConfiguration.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/CamelRouteConfiguration.java
new file mode 100644
index 0000000..de00848
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/CamelRouteConfiguration.java
@@ -0,0 +1,60 @@
+package com.megatim.fdxcommons.model.camel;
+
+import java.io.IOException;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class CamelRouteConfiguration {
+
+    private final LocalConfiguration localConfiguration;
+    private final SftpConfiguration sftpConfiguration;
+
+    public CamelRouteConfiguration(String configurationFilePath) {
+        FileProperties fileProperties = new FileProperties(configurationFilePath);
+        localConfiguration = new LocalConfiguration(fileProperties);
+        sftpConfiguration = new SftpConfiguration(fileProperties);
+    }
+
+    public boolean isStandaloneSftpConfigCorrect() throws IOException {
+        return sftpConfiguration.isStandaloneCorrect();
+    }
+
+    public boolean isStandaloneLocalConfigCorrect() throws IOException {
+        return localConfiguration.isStandaloneCorrect();
+    }
+
+    public boolean isConsultationConfigCorrect() throws IOException {
+        return localConfiguration.isConsultationCorrect() || sftpConfiguration.isConsultationCorrect();
+    }
+
+    public LocalConfiguration getLocalConfiguration() {
+        return localConfiguration;
+    }
+
+    public SftpConfiguration getSftpConfiguration() {
+        return sftpConfiguration;
+    }
+
+    public String standaloneURI() throws IOException {
+        return isStandaloneStfpConfigCorrect()
+                ? getSftpConfiguration().standaloneRouteURI()
+                : getLocalConfiguration().standaloneRouteURI();
+    }
+
+    public String consultationURI() throws IOException {
+        return isConsultationStfpConfigCorrect()
+                ? getSftpConfiguration().consultationRouteURI()
+                : getLocalConfiguration().consultationRouteURI();
+    }
+
+    private boolean isStandaloneStfpConfigCorrect() throws IOException {
+        return sftpConfiguration.isStandaloneCorrect();
+    }
+
+    private boolean isConsultationStfpConfigCorrect() throws IOException {
+        return sftpConfiguration.isStandaloneCorrect();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/FileProperties.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/FileProperties.java
new file mode 100644
index 0000000..311fac3
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/FileProperties.java
@@ -0,0 +1,33 @@
+package com.megatim.fdxcommons.model.camel;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class FileProperties {
+
+    private final String configurationFilePath;
+    private final List<Properties> cachedProperties = new ArrayList<>(1);
+
+    public FileProperties(String configurationFilePath) {
+        this.configurationFilePath = configurationFilePath;
+    }
+
+    public Properties properties() throws FileNotFoundException, IOException {
+        if (cachedProperties.isEmpty()) {
+            try (FileInputStream fis = new FileInputStream(configurationFilePath)) {
+                Properties properties = new Properties();
+                properties.load(fis);
+                cachedProperties.add(properties);
+            }
+        }
+        return cachedProperties.get(0);
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/LocalConfiguration.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/LocalConfiguration.java
new file mode 100644
index 0000000..2b9ac03
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/LocalConfiguration.java
@@ -0,0 +1,80 @@
+package com.megatim.fdxcommons.model.camel;
+
+import java.io.IOException;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class LocalConfiguration {
+
+    private final FileProperties fileProperties;
+
+    public LocalConfiguration(FileProperties fileProperties) {
+        this.fileProperties = fileProperties;
+    }
+
+    public String referentielRouteURI() throws IOException {
+        return "file:" + referentielLocalPath() + "?include=.*.zip" + routeParameters();
+    }
+
+    public String fichierRouteURI() throws IOException {
+        return "file:" + fichierLocalPath() + "?include=.*\\.(csv|txt)$" + routeParameters();
+    }
+
+    public String standaloneTmpRouteURI() throws IOException {
+        return "file:" + standaloneTmpDir() + "?include=.*\\.(csv|txt)$&delete=true" + routeParameters();
+    }
+
+    public String standaloneRouteURI() throws IOException {
+        return "file:" + standaloneDestinationDir() + "?include=.*\\.(csv|txt)$" + routeParameters();
+    }
+
+    public String standaloneTmpDir() throws IOException {
+        return fileProperties.properties().getProperty(CamelProperties.STANDALONE_TMP_DIR_PROPERTY);
+    }
+
+    public String consultationTmpRouteURI() throws IOException {
+        return "file:" + consultationTmpDir() + "?include=.*\\.(csv|txt)$&delete=true" + routeParameters();
+    }
+
+    public String consultationRouteURI() throws IOException {
+        return "file:" + consultationDestinationDir() + "?include=.*\\.(csv|txt)$" + routeParameters();
+    }
+
+    public String consultationTmpDir() throws IOException {
+        return fileProperties.properties().getProperty(CamelProperties.CONSULTATION_TMP_DIR);
+    }
+
+    public boolean isStandaloneCorrect() throws IOException {
+        return referentielLocalPath() != null
+                && fichierLocalPath() != null
+                && standaloneTmpDir() != null
+                && standaloneDestinationDir() != null;
+    }
+
+    public boolean isConsultationCorrect() throws IOException {
+        return consultationTmpDir() != null && consultationDestinationDir() != null;
+    }
+
+    private String routeParameters() {
+        return "&moveFailed=" + CamelProperties.ERROR_DIR + "&noop=true&readLock=rename";
+    }
+
+    public String referentielLocalPath() throws IOException {
+        return fileProperties.properties().getProperty(CamelProperties.REFERENTIEL_LOCAL_PATH_PROPERTY);
+    }
+
+    public String fichierLocalPath() throws IOException {
+        return fileProperties.properties().getProperty(CamelProperties.FICHIER_LOCAL_PATH_PROPERTY);
+    }
+
+    private String standaloneDestinationDir() throws IOException {
+        return fileProperties.properties().getProperty(CamelProperties.STANDALONE_DESTINATION_DIR_PROPERTY);
+    }
+
+    public String consultationDestinationDir() throws IOException {
+        return fileProperties.properties().getProperty(CamelProperties.CONSULTATION_DESTINATION_DIR_PROPERTY);
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/SftpConfiguration.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/SftpConfiguration.java
new file mode 100644
index 0000000..f731730
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/camel/SftpConfiguration.java
@@ -0,0 +1,145 @@
+package com.megatim.fdxcommons.model.camel;
+
+import java.io.IOException;
+
+public class SftpConfiguration {
+
+    private final FileProperties fileProperties;
+
+    public SftpConfiguration(FileProperties fileProperties) {
+        this.fileProperties = fileProperties;
+    }
+
+    public String referentielRouteURI() throws IOException {
+        return buildURI(referentielRemotePath(), standaloneHostName(), standalonePort(), standaloneUserName(), standalonePassword());
+    }
+
+    public String fichierRouteURI() throws IOException {
+        return buildURI(fichierRemotePath(), standaloneHostName(), standalonePort(), standaloneUserName(), standalonePassword());
+    }
+
+    public String standaloneRouteURI() throws IOException {
+        return buildURI(standaloneDestinationDir(), standaloneHostName(), standalonePort(), standaloneUserName(), standalonePassword());
+    }
+
+    public String consultationRouteURI() throws IOException {
+        return buildURI(consultationDestinationDir(), consultationHostName(), consultationPort(), consultationUserName(), consultationPassword());
+    }
+
+    public String standaloneTmpDir() throws IOException {
+        return fileProperties.properties().getProperty(CamelProperties.STANDALONE_TMP_DIR_PROPERTY);
+    }
+
+    public String consultationTmpDir() throws IOException {
+        return fileProperties.properties().getProperty(CamelProperties.CONSULTATION_TMP_DIR);
+    }
+
+    private String buildURI(String path, String hostName, int port, String userName, String password) throws IOException {
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder
+                .append(firstURIpart(hostName, port))
+                .append(path)
+                .append(secondURIpart(userName, password));
+        return stringBuilder.toString();
+    }
+
+    private String firstURIpart(String hostName, int port) throws IOException {
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder
+                .append("sftp:")
+                .append(hostName)
+                .append(":")
+                .append(port)
+                .append("/");
+        return stringBuilder.toString();
+    }
+
+    private String secondURIpart(String userName, String password) throws IOException {
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder
+                .append("?username=").append(userName)
+                .append("&password=").append(password)
+                .append("&streamDownload=true&stepwise=false&disconnect=true&useUserKnownHostsFile=false&readLock=changed&readLockLoggingLevel=ERROR")
+                .append("&jschLoggingLevel=ERROR&runLoggingLevel=OFF&moveFailed=error&delete=true");
+        return stringBuilder.toString();
+    }
+
+    public boolean isStandaloneCorrect() throws IOException {
+        return standaloneRemote()
+                && referentielRemotePath() != null
+                && fichierRemotePath() != null
+                && standaloneDestinationDir() != null
+                && standaloneUserName() != null
+                && standalonePassword() != null
+                && standaloneHostName() != null;
+    }
+
+    public boolean isConsultationCorrect() throws IOException {
+        return consultationRemote()
+                && consultationDestinationDir() != null
+                && consultationUserName() != null
+                && consultationPassword() != null
+                && consultationHostName() != null;
+    }
+
+    private String referentielRemotePath() throws IOException {
+        return fileProperties.properties().getProperty(CamelProperties.REFERENTIEL_REMOTE_PATH_PROPERTY);
+    }
+
+    private String fichierRemotePath() throws IOException {
+        return fileProperties.properties().getProperty(CamelProperties.FICHIER_REMOTE_PATH_PROPERTY);
+    }
+
+    private boolean standaloneRemote() throws IOException {
+        String remoteIntegrationProperty = fileProperties.properties().getProperty(CamelProperties.STANDALONE_REMOTE_DIR_PROPERTY);
+        return remoteIntegrationProperty != null && Boolean.parseBoolean(remoteIntegrationProperty);
+    }
+
+    private boolean consultationRemote() throws IOException {
+        String remoteIntegrationProperty = fileProperties.properties().getProperty(CamelProperties.CONSULTATION_REMOTE_DIR_PROPERTY);
+        return remoteIntegrationProperty != null && Boolean.parseBoolean(remoteIntegrationProperty);
+    }
+
+    private String standaloneDestinationDir() throws IOException {
+        return fileProperties.properties().getProperty(CamelProperties.STANDALONE_DESTINATION_DIR_PROPERTY);
+    }
+
+    private String consultationDestinationDir() throws IOException {
+        return fileProperties.properties().getProperty(CamelProperties.CONSULTATION_DESTINATION_DIR_PROPERTY);
+    }
+
+    private String standaloneUserName() throws IOException {
+        return fileProperties.properties().getProperty(CamelProperties.STANDALONE_USER_NAME);
+    }
+
+    private String standalonePassword() throws IOException {
+        return fileProperties.properties().getProperty(CamelProperties.STANDALONE_PASSWORD);
+    }
+
+    private String standaloneHostName() throws IOException {
+        return fileProperties.properties().getProperty(CamelProperties.STANDALONE_HOST_NAME);
+    }
+
+    private int standalonePort() throws IOException {
+        String portProperty = fileProperties.properties().getProperty(CamelProperties.STANDALONE_PORT);
+        return portProperty != null ? Integer.parseInt(portProperty) : 22;
+    }
+
+    private String consultationUserName() throws IOException {
+        return fileProperties.properties().getProperty(CamelProperties.CONSULTATION_USER_NAME);
+    }
+
+    private String consultationPassword() throws IOException {
+        return fileProperties.properties().getProperty(CamelProperties.CONSULTATION_PASSWORD);
+    }
+
+    private String consultationHostName() throws IOException {
+        return fileProperties.properties().getProperty(CamelProperties.CONSULTATION_HOST_NAME);
+    }
+
+    private int consultationPort() throws IOException {
+        String portProperty = fileProperties.properties().getProperty(CamelProperties.CONSULTATION_PORT);
+        return portProperty != null ? Integer.parseInt(portProperty) : 22;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/CommonDataProduction.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/CommonDataProduction.java
new file mode 100644
index 0000000..843bc97
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/CommonDataProduction.java
@@ -0,0 +1,73 @@
+package com.megatim.fdxcommons.model.dataproduction;
+
+import com.megatim.fdxcommons.model.enumeration.StatutDataProduction;
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Id;
+import javax.persistence.MappedSuperclass;
+import javax.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+@NoArgsConstructor
+@MappedSuperclass
+public class CommonDataProduction implements Serializable {
+
+    @Id
+    private Long id;
+
+    @NotNull(message = "Le type de fichier est obligatoire")
+    @CriteriaEntitySearch(libelle = "Type du Fichier", rang = 1)
+    protected String codeTypeFichier;
+
+    @CriteriaEntitySearch(libelle = "Participant", rang = 2)
+    protected String codeParticipant;
+
+    @NotNull(message = "Le référentiel est obligatoire")
+    @CriteriaEntitySearch(libelle = "Référentiel", rang = 3)
+    protected String referentielVersion;
+
+    @NotNull(message = "La source est obligatoire")
+    @Enumerated(EnumType.STRING)
+    @CriteriaEntitySearch(libelle = "Source de la production", rang = 4)
+    protected DataProductionSource source;
+
+    @NotNull(message = "La date est obligatoire")
+    @CriteriaEntitySearch(libelle = "Date création de la production", rang = 0)
+    protected LocalDateTime dateProduction;
+
+    @CriteriaEntitySearch(libelle = "Nom du Fichier", rang = 5)
+    protected String fileName;
+
+    @NotNull(message = "La statut de la production est obligatoire")
+    @Enumerated(EnumType.STRING)
+    protected StatutDataProduction statutDataProduction = StatutDataProduction.A_CONSOMMER;
+
+    protected LocalDateTime fileDate;
+
+    @Enumerated(EnumType.STRING)
+    protected DataProductionType dataProductionType = DataProductionType.ADD;
+
+    protected String token;
+
+    protected LocalDateTime dateMiseAJour;
+
+    protected Long nbreElements = 0L;
+
+    protected Long tailleFichier = 0L;//en octet
+
+    protected String integrationFileName;// Nom du fichier généré pour consommation par Standalone et Consultation
+
+    protected String tokenDirectory;
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/DataProductionSource.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/DataProductionSource.java
new file mode 100644
index 0000000..f706076
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/DataProductionSource.java
@@ -0,0 +1,47 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Enum.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dataproduction;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.megatim.fdxcommons.model.search.EnumValue;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum DataProductionSource {
+    API("API"), FICHIER("FICHIER");
+
+    private final String value;
+
+    private DataProductionSource(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String toString() {
+        return this.value;
+    }
+
+    @JsonValue
+    public String getValue() {
+        return this.value;
+    }
+
+    @EnumValue
+    public static DataProductionSource fromValue(String value) {
+        if (value == null) {
+            return null;
+        }
+        if (value.equalsIgnoreCase("api")) {
+            return DataProductionSource.API;
+        } else if (value.equalsIgnoreCase("fichier")) {
+            return DataProductionSource.FICHIER;
+        } else {
+            return null;
+
+        }
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/DataProductionToDelete.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/DataProductionToDelete.java
new file mode 100644
index 0000000..6144750
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/DataProductionToDelete.java
@@ -0,0 +1,31 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dataproduction;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ * Cette entité est utilisé pour les types de fichier referentielle dont il faut supprimer les anciennes données à chaque nouvelle production
+ * @author ASUS
+ */
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@Entity
+public class DataProductionToDelete implements Serializable {
+
+    @Id
+    private Long id;// Id de la production à conserver
+
+    private LocalDateTime dateCreation;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/DataProductionType.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/DataProductionType.java
new file mode 100644
index 0000000..6198fb5
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/DataProductionType.java
@@ -0,0 +1,9 @@
+package com.megatim.fdxcommons.model.dataproduction;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum DataProductionType {
+    ADD, UPDATE, DELETE;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/metadata/ProductionMetaData.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/metadata/ProductionMetaData.java
new file mode 100644
index 0000000..f6369ff
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/metadata/ProductionMetaData.java
@@ -0,0 +1,74 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dataproduction.metadata;
+
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import com.megatim.fdxcommons.model.dataproduction.metadata.constraint.ProductionMetaDataConstraint;
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.CollectionTable;
+import javax.persistence.ElementCollection;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Transient;
+import javax.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+@NoArgsConstructor
+@ProductionMetaDataConstraint
+@Entity
+public class ProductionMetaData implements Serializable {
+
+    @NotNull(message = "L'identifiant de la production est obligatoire")
+    @Id
+    private Long productionId;
+
+    @NotNull(message = "Le type de production est obligatoire")
+    private String dataProductionType;
+
+    private Long startIndex; //Index de debut dans le cas d'un ADD
+
+    @NotNull(message = "Le nombre d'éléments de la production est obligatoire")
+    private Long nbreElts;
+
+    @Transient
+    private CommonDataProduction dataProduction;
+
+    @ElementCollection(targetClass = Long.class, fetch = FetchType.EAGER)
+    @CollectionTable(
+            name = "productionMetaData_indexes", // Name of the table for the collection
+            joinColumns = {
+                @JoinColumn(name = "productionId")
+            } // Foreign key column in the collection table
+    )
+    private final Set<Long> indexes = new HashSet<>();//Liste des indexes dans le cas d'un Update
+
+    public ProductionMetaData(Long productionId, Long nbreElts) {
+        this.productionId = productionId;
+        this.nbreElts = nbreElts;
+    }
+
+    public ProductionMetaData(Long productionId, Long startIndex, Long nbreElts) {
+        this.productionId = productionId;
+        this.startIndex = startIndex;
+        this.nbreElts = nbreElts;
+    }
+
+    public ProductionMetaData(CommonDataProduction dataProduction) {
+        this.dataProduction = dataProduction;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/metadata/ProductionMetaDataId.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/metadata/ProductionMetaDataId.java
new file mode 100644
index 0000000..0201dfd
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/metadata/ProductionMetaDataId.java
@@ -0,0 +1,26 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dataproduction.metadata;
+
+import java.io.Serializable;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ *
+ * @author ASUS
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class ProductionMetaDataId implements Serializable{
+
+    private Long fdxIndex;
+
+    private Long lineNumber;
+
+    private Long productionId;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/metadata/constraint/ProductionMetaDataConstraint.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/metadata/constraint/ProductionMetaDataConstraint.java
new file mode 100644
index 0000000..c8b608d
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/metadata/constraint/ProductionMetaDataConstraint.java
@@ -0,0 +1,27 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dataproduction.metadata.constraint;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import javax.validation.Constraint;
+import javax.validation.Payload;
+
+/**
+ *
+ * @author ASUS
+ */
+@Documented
+@Constraint(validatedBy = ProductionMetaDataValidator.class)
+@Target( { ElementType.TYPE })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ProductionMetaDataConstraint {
+    String message() default "L'index de début est obligatoire pour les productions d'ajout ";
+    Class<?>[] groups() default {};
+    Class<? extends Payload>[] payload() default {};
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/metadata/constraint/ProductionMetaDataValidator.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/metadata/constraint/ProductionMetaDataValidator.java
new file mode 100644
index 0000000..82abdba
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dataproduction/metadata/constraint/ProductionMetaDataValidator.java
@@ -0,0 +1,26 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dataproduction.metadata.constraint;
+
+import com.megatim.fdxcommons.model.dataproduction.DataProductionType;
+import com.megatim.fdxcommons.model.dataproduction.metadata.ProductionMetaData;
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+
+/**
+ *
+ * @author ASUS
+ */
+public class ProductionMetaDataValidator implements ConstraintValidator<ProductionMetaDataConstraint, ProductionMetaData> {
+
+    @Override
+    public void initialize(ProductionMetaDataConstraint cons) {
+    }
+
+    @Override
+    public boolean isValid(ProductionMetaData pmd, ConstraintValidatorContext cxt) {
+        return pmd.getDataProductionType().equals(DataProductionType.ADD) ? pmd.getStartIndex() != null : true;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/dataproduction/CommonDataProductionDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/dataproduction/CommonDataProductionDto.java
new file mode 100644
index 0000000..1744aeb
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/dataproduction/CommonDataProductionDto.java
@@ -0,0 +1,52 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.dataproduction;
+
+import com.megatim.fdxcommons.model.dataproduction.DataProductionSource;
+import com.megatim.fdxcommons.model.dataproduction.DataProductionType;
+import com.megatim.fdxcommons.model.enumeration.StatutDataProduction;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class CommonDataProductionDto {
+
+    private Long id;
+
+    private String codeTypeFichier;
+
+    private String codeParticipant;
+
+    private String referentielVersion;
+
+    private DataProductionSource source;
+
+    private LocalDateTime dateProduction;
+
+    private String fileName;
+
+    private StatutDataProduction statutDataProduction;
+
+    private LocalDateTime fileDate;
+
+    private DataProductionType dataProductionType;
+
+    private String token;
+
+    private LocalDateTime dateMiseAJour;
+
+    private Long nbreElements;
+
+    private Long tailleFichier;
+
+    private String integrationFileName;
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/dataproduction/DataProductionDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/dataproduction/DataProductionDto.java
new file mode 100644
index 0000000..f4f1b93
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/dataproduction/DataProductionDto.java
@@ -0,0 +1,54 @@
+package com.megatim.fdxcommons.model.dtos.dataproduction;
+
+import com.megatim.fdxcommons.model.dataproduction.DataProductionType;
+import com.megatim.fdxcommons.model.enumeration.StatutDataProduction;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class DataProductionDto {
+
+    private Long id;
+
+    @PrintColumn(libelle = "Type du Fichier")
+    private String codeTypeFichier;
+
+    @PrintColumn(libelle = "Participant")
+    private String codeParticipant;
+
+    @PrintColumn(libelle = "Référentiel")
+    private String referentielVersion;
+
+    @PrintColumn(libelle = "Source de la production")
+    private String source;
+
+    @PrintColumn(libelle = "Date de la production")
+    private LocalDateTime dateProduction;
+
+    @PrintColumn(libelle = "Nom du fichier")
+    private String fileName;
+
+    private StatutDataProduction statutDataProduction;
+
+    private LocalDateTime fileDate;
+
+    private DataProductionType dataProductionType;
+
+    private String token;
+
+    private LocalDateTime dateMiseAJour;
+
+    private Long nbreElements;
+
+    private Long tailleFichier;
+
+    private String integrationFileName;
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/dataproduction/ProductionMetaDataDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/dataproduction/ProductionMetaDataDto.java
new file mode 100644
index 0000000..4c402f9
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/dataproduction/ProductionMetaDataDto.java
@@ -0,0 +1,31 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.dataproduction;
+
+import com.megatim.fdxcommons.model.dataproduction.DataProductionType;
+import java.util.Set;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class ProductionMetaDataDto {
+
+    private Long productionId;
+
+    private DataProductionType dataProductionType;
+
+    private Long startIndex; //Index de debut dans le cas d'un ADD
+
+    private Long nbreElts;
+
+    private CommonDataProductionDto dataProduction;
+
+    private Set<Long> indexes;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/integration/ColumnDefinitionDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/integration/ColumnDefinitionDto.java
new file mode 100644
index 0000000..df57db7
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/integration/ColumnDefinitionDto.java
@@ -0,0 +1,19 @@
+package com.megatim.fdxcommons.model.dtos.integration;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class ColumnDefinitionDto {
+
+    private String name;
+    private TypeDonnee typeDonnee;
+    private String formatDate;
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ApplicationSourceDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ApplicationSourceDto.java
new file mode 100644
index 0000000..5da6552
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ApplicationSourceDto.java
@@ -0,0 +1,32 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class ApplicationSourceDto {
+
+    private String libelle;
+
+    private String description;
+
+    private LocalDateTime dateCreation;
+
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+
+    private ReferentielSlimDto referentiel;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ApplicationSourceSlimDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ApplicationSourceSlimDto.java
new file mode 100644
index 0000000..0250bf9
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ApplicationSourceSlimDto.java
@@ -0,0 +1,30 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class ApplicationSourceSlimDto {
+
+    private String libelle;
+
+    private String description;
+
+    private LocalDateTime dateCreation;
+
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ExtensionFichierDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ExtensionFichierDto.java
new file mode 100644
index 0000000..bde6e73
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ExtensionFichierDto.java
@@ -0,0 +1,49 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import com.megatim.fdxcommons.model.enumeration.TypeExtension;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class ExtensionFichierDto {
+
+    @PrintColumn(libelle = "Libellé", rang = 2)
+    private String extension;
+
+    @PrintColumn(libelle = "Libellé", rang = 3)
+    private TypeExtension typeExtension;
+
+    @PrintColumn(libelle = "Libellé", rang = 1)
+    private String libelle;
+
+    @PrintColumn(libelle = "DATE CREATION", rang = 5)
+    private LocalDateTime dateCreation;
+
+    @PrintColumn(libelle = "DATE DERN. MISE A JOUR", rang = 6)
+    private LocalDateTime dateMiseAjour;
+
+    @PrintColumn(libelle = "CREE PAR", rang = 7)
+    private String createBy;
+
+    @PrintColumn(libelle = "MODIFIE PAR", rang = 8)
+    private String lastModifiedBy;
+
+    private ReferentielSlimDto referentiel;
+
+    @PrintColumn(rang = 4, libelle = "Référentiel")
+    public String getReferentielVersion() {
+        return referentiel.getVersion();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ExtensionFichierSlimDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ExtensionFichierSlimDto.java
new file mode 100644
index 0000000..0ae0efb
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ExtensionFichierSlimDto.java
@@ -0,0 +1,28 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import com.megatim.fdxcommons.model.enumeration.TypeExtension;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class ExtensionFichierSlimDto {
+
+    private String extension;
+
+    private TypeExtension typeExtension;
+
+    private String libelle;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/GroupeNoeudDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/GroupeNoeudDto.java
new file mode 100644
index 0000000..db27d19
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/GroupeNoeudDto.java
@@ -0,0 +1,55 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class GroupeNoeudDto {
+
+    @PrintColumn(libelle = "Code", rang = 1)
+    private String code;
+
+    @PrintColumn(libelle = "Libellé", rang = 2)
+    private String libelle;
+
+    @PrintColumn(libelle = "Libellé", rang = 3)
+    private String description;
+
+    @PrintColumn(libelle = "DATE CREATION", rang = 5)
+    private LocalDateTime dateCreation;
+
+    @PrintColumn(libelle = "DATE DERN. MISE A JOUR", rang = 6)
+    private LocalDateTime dateMiseAjour;
+
+    @PrintColumn(libelle = "CREE PAR", rang = 7)
+    private String createBy;
+
+    @PrintColumn(libelle = "MODIFIE PAR", rang = 8)
+    private String lastModifiedBy;
+
+    private ReferentielSlimDto referentiel;
+
+//    private List<NoeudSlimDto> noeuds = new ArrayList<>();
+//
+//    private List<RoutageSlimDto> routageEnvois = new ArrayList<>();
+//
+//    private List<RoutageSlimDto> routageReceptions = new ArrayList<>();
+
+    @PrintColumn(rang = 4, libelle = "Référentiel")
+    public String getReferentielVersion() {
+        return referentiel.getVersion();
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/GroupeNoeudSlimDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/GroupeNoeudSlimDto.java
new file mode 100644
index 0000000..5eb8528
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/GroupeNoeudSlimDto.java
@@ -0,0 +1,32 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class GroupeNoeudSlimDto {
+
+    private String code;
+
+    private String libelle;
+
+    private String description;
+
+    private LocalDateTime dateCreation;
+
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/GroupeParticipantDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/GroupeParticipantDto.java
new file mode 100644
index 0000000..413239a
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/GroupeParticipantDto.java
@@ -0,0 +1,53 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class GroupeParticipantDto {
+
+    @PrintColumn(libelle = "Code", rang = 1)
+    private String code;
+
+    @PrintColumn(libelle = "Libellé", rang = 2)
+    private String libelle;
+
+    @PrintColumn(libelle = "Libellé", rang = 3)
+    private String description;
+
+    @PrintColumn(libelle = "DATE CREATION", rang = 5)
+    private LocalDateTime dateCreation;
+
+    @PrintColumn(libelle = "DATE DERN. MISE A JOUR", rang = 6)
+    private LocalDateTime dateMiseAjour;
+
+    @PrintColumn(libelle = "CREE PAR", rang = 7)
+    private String createBy;
+
+    @PrintColumn(libelle = "MODIFIE PAR", rang = 8)
+    private String lastModifiedBy;
+
+    private ReferentielSlimDto referentiel;
+
+//    private List<Participant> participants = new ArrayList<>();
+//
+//    private List<Routage> routageEnvois = new ArrayList<>();
+//
+//    private List<Routage> routageReceptions = new ArrayList<>();
+
+    @PrintColumn(rang = 4, libelle = "Référentiel")
+    public String getReferentielVersion() {
+        return referentiel.getVersion();
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/GroupeParticipantSlimDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/GroupeParticipantSlimDto.java
new file mode 100644
index 0000000..152311c
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/GroupeParticipantSlimDto.java
@@ -0,0 +1,33 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class GroupeParticipantSlimDto {
+
+    private String code;
+
+    private String libelle;
+
+    private String description;
+
+    private LocalDateTime dateCreation;
+
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/NoeudDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/NoeudDto.java
new file mode 100644
index 0000000..5e29522
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/NoeudDto.java
@@ -0,0 +1,56 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class NoeudDto {
+
+    @PrintColumn(libelle = "Code", rang = 1)
+    private String code;
+
+    @PrintColumn(libelle = "Libellé", rang = 2)
+    private String libelle;
+
+    @PrintColumn(libelle = "DATE CREATION", rang = 5)
+    private LocalDateTime dateCreation;
+
+    @PrintColumn(libelle = "DATE DERN. MISE A JOUR", rang = 6)
+    private LocalDateTime dateMiseAjour;
+
+    @PrintColumn(libelle = "CREE PAR", rang = 7)
+    private String createBy;
+
+    @PrintColumn(libelle = "MODIFIE PAR", rang = 8)
+    private String lastModifiedBy;
+
+    private ReferentielSlimDto referentiel;
+
+    private ParticipantSlimDto participant;
+    
+//    private List<RoutageSlimDto> routageEnvois = new ArrayList<>();
+//
+//    private List<RoutageSlimDto> routageReceptions = new ArrayList<>();
+
+    @PrintColumn(rang = 3, libelle = "Référentiel")
+    public String getReferentielVersion() {
+        return referentiel.getVersion();
+    }
+
+    @PrintColumn(rang = 4, libelle = "Participant")
+    public String getParticipantDescription() {
+        return participant.getCode() + "- " + participant.getLibelle();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/NoeudSlimDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/NoeudSlimDto.java
new file mode 100644
index 0000000..8096b2d
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/NoeudSlimDto.java
@@ -0,0 +1,33 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class NoeudSlimDto {
+
+    @PrintColumn(libelle = "Code", rang = 2)
+    private String code;
+
+    @PrintColumn(libelle = "Libellé", rang = 1)
+    private String libelle;
+
+    private LocalDateTime dateCreation;
+
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ParticipantDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ParticipantDto.java
new file mode 100644
index 0000000..ee8309b
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ParticipantDto.java
@@ -0,0 +1,64 @@
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import com.megatim.reporting.adhoc.annotations.PrintList;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class ParticipantDto {
+
+    @PrintColumn(libelle = "Code", rang = 1)
+    private String code;
+
+    @PrintColumn(libelle = "Libellé", rang = 2)
+    private String libelle;
+
+    private String description;
+
+    private String rue;
+
+    private String adresse;
+
+    private String ville;
+
+    private String email;
+
+    @PrintColumn(libelle = "DATE CREATION", rang = 5)
+    private LocalDateTime dateCreation;
+
+    @PrintColumn(libelle = "DATE DERN. MISE A JOUR", rang = 6)
+    private LocalDateTime dateMiseAjour;
+
+    @PrintColumn(libelle = "CREE PAR", rang = 7)
+    private String createBy;
+
+    @PrintColumn(libelle = "MODIFIE PAR", rang = 8)
+    private String lastModifiedBy;
+
+    private ReferentielSlimDto referentiel;
+
+    private PaysSlimDto pays;
+
+    @PrintList(titre = "Liste des noeuds", classe = NoeudSlimDto.class, rang = 1)
+    private List<NoeudSlimDto> noeuds = new ArrayList<>();
+
+    @PrintColumn(libelle = "Référentiel", rang = 3)
+    public String getReferentielVersion() {
+        return referentiel.getVersion();
+    }
+
+    @PrintColumn(libelle = "Pays", rang = 4)
+    public String getPaysDescription() {
+        return pays.getLibelle();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ParticipantSlimDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ParticipantSlimDto.java
new file mode 100644
index 0000000..77076f3
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ParticipantSlimDto.java
@@ -0,0 +1,43 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class ParticipantSlimDto {
+
+    @PrintColumn(libelle = "Code")
+    private String code;
+
+    @PrintColumn(libelle = "Libellé")
+    private String libelle;
+
+    private String description;
+
+    private String rue;
+
+    private String adresse;
+
+    private String ville;
+
+    private String email;
+
+    private LocalDateTime dateCreation;
+
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/PaysDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/PaysDto.java
new file mode 100644
index 0000000..1b08869
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/PaysDto.java
@@ -0,0 +1,51 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import com.megatim.reporting.adhoc.annotations.PrintList;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class PaysDto {
+
+    @PrintColumn(libelle = "Code", rang = 2)
+    private String code;
+
+    @PrintColumn(libelle = "Libellé", rang = 1)
+    private String libelle;
+
+    @PrintColumn(libelle = "DATE CREATION", rang = 4)
+    private LocalDateTime dateCreation;
+
+    @PrintColumn(libelle = "DATE DERN. MISE A JOUR", rang = 5)
+    private LocalDateTime dateMiseAjour;
+
+    @PrintColumn(libelle = "CREE PAR", rang = 6)
+    private String createBy;
+
+    @PrintColumn(libelle = "MODIFIE PAR", rang = 7)
+    private String lastModifiedBy;
+
+    private ReferentielSlimDto referentiel;
+
+    @PrintList(titre = "Liste des participants", classe = ParticipantSlimDto.class)
+    private List<ParticipantSlimDto> participants = new ArrayList<>();
+
+    @PrintColumn(rang = 3, libelle = "Référentiel")
+    public String getReferentielVersion() {
+        return referentiel.getVersion();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/PaysSlimDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/PaysSlimDto.java
new file mode 100644
index 0000000..5da9e43
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/PaysSlimDto.java
@@ -0,0 +1,30 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class PaysSlimDto {
+
+    private String code;
+
+    private String libelle;
+
+    private LocalDateTime dateCreation;
+
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ReferentielDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ReferentielDto.java
new file mode 100644
index 0000000..9e7b523
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ReferentielDto.java
@@ -0,0 +1,50 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import com.megatim.fdxcommons.model.enumeration.StatutReferentiel;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class ReferentielDto {
+
+    @PrintColumn(libelle = "Version", rang = 1)
+    private String version;
+
+    private StatutReferentiel statutReferentiel;
+
+    @PrintColumn(libelle = "Description", rang = 2)
+    private String description;
+
+    @PrintColumn(libelle = "DATE CREATION", rang = 4)
+    private LocalDateTime dateCreation;
+    
+    @PrintColumn(libelle = "DATE DERN. MISE A JOUR", rang = 5)
+    private LocalDateTime dateMiseAjour;
+
+    @PrintColumn(libelle = "CREE PAR", rang = 6)
+    private String createBy;
+
+    @PrintColumn(libelle = "MODIFIE PAR", rang = 7)
+    private String lastModifiedBy;
+    
+    private LocalDateTime dateGeneration;
+
+//    private List<ExtensionFichierSlimDto> extensionFichiers = new ArrayList<>();
+
+    @PrintColumn(libelle = "Statut Référentiel", rang = 3)
+    public String getStatutReferentielDescription() {
+        return statutReferentiel.getValue();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ReferentielSlimDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ReferentielSlimDto.java
new file mode 100644
index 0000000..ea5519c
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ReferentielSlimDto.java
@@ -0,0 +1,35 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import com.megatim.fdxcommons.model.enumeration.StatutReferentiel;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class ReferentielSlimDto {
+
+    private StatutReferentiel statutReferentiel;
+
+    private String version;
+
+    private String description;
+
+    private LocalDateTime dateCreation;
+
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+
+    private LocalDateTime dateGeneration;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/RoutageDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/RoutageDto.java
new file mode 100644
index 0000000..5fc70a7
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/RoutageDto.java
@@ -0,0 +1,111 @@
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * @author ASUS
+ */
+public class RoutageDto {
+
+    private String code;
+
+    @PrintColumn(libelle = "DATE CREATION", rang = 3)
+    private LocalDateTime dateCreation;
+
+    @PrintColumn(libelle = "DATE DERN. MISE A JOUR", rang = 4)
+    private LocalDateTime dateMiseAjour;
+
+    @PrintColumn(libelle = "CREE PAR", rang = 5)
+    private String createBy;
+
+    @PrintColumn(libelle = "MODIFIE PAR", rang = 6)
+    private String lastModifiedBy;
+
+    private TypeFichierSlimDto typeFichier;
+
+    private ReferentielSlimDto referentiel;
+
+//    private List<NoeudSlimDto> noeudsEnvoi = new ArrayList<>();
+//
+//    private List<GroupeNoeudSlimDto> groupeNoeudsEnvoi = new ArrayList<>();
+//
+//    private List<ParticipantSlimDto> participantsEnvoi = new ArrayList<>();
+//
+//    private List<GroupeParticipantSlimDto> groupeParticipantsEnvoi = new ArrayList<>();
+//
+//    private List<NoeudSlimDto> noeudsReception = new ArrayList<>();
+//
+//    private List<GroupeNoeudSlimDto> groupeNoeudsReception = new ArrayList<>();
+//
+//    private List<ParticipantSlimDto> participantsReception = new ArrayList<>();
+//
+//    private List<GroupeParticipantSlimDto> groupeParticipantsReception = new ArrayList<>();
+    
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getCode() {
+        return this.code;
+    }
+
+    public LocalDateTime getDateCreation() {
+        return dateCreation;
+    }
+
+    public void setDateCreation(LocalDateTime dateCreation) {
+        this.dateCreation = dateCreation;
+    }
+
+    public LocalDateTime getDateMiseAjour() {
+        return dateMiseAjour;
+    }
+
+    public void setDateMiseAjour(LocalDateTime dateMiseAjour) {
+        this.dateMiseAjour = dateMiseAjour;
+    }
+
+    public String getCreateBy() {
+        return createBy;
+    }
+
+    public void setCreateBy(String createBy) {
+        this.createBy = createBy;
+    }
+
+    public String getLastModifiedBy() {
+        return lastModifiedBy;
+    }
+
+    public void setLastModifiedBy(String lastModifiedBy) {
+        this.lastModifiedBy = lastModifiedBy;
+    }
+
+    public TypeFichierSlimDto getTypeFichier() {
+        return typeFichier;
+    }
+
+    public void setTypeFichier(TypeFichierSlimDto typeFichier) {
+        this.typeFichier = typeFichier;
+    }
+
+    public ReferentielSlimDto getReferentiel() {
+        return referentiel;
+    }
+
+    public void setReferentiel(ReferentielSlimDto referentiel) {
+        this.referentiel = referentiel;
+    }
+
+    @PrintColumn(libelle = "TypeFichier", rang = 1)
+    public String getTypeFichierDescription() {
+        return typeFichier.getLibelle();
+    }
+
+    @PrintColumn(libelle = "Référentiel", rang = 2)
+    public String getReferentielVersion() {
+        return referentiel.getVersion();
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/RoutageSlimDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/RoutageSlimDto.java
new file mode 100644
index 0000000..549a597
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/RoutageSlimDto.java
@@ -0,0 +1,62 @@
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * @author ASUS
+ */
+public class RoutageSlimDto {
+
+    @PrintColumn(libelle = "Code", rang = 1)
+    private String code;
+    
+    private LocalDateTime dateCreation;
+
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+    
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getCode() {
+        return this.code;
+    }
+
+    public LocalDateTime getDateCreation() {
+        return dateCreation;
+    }
+
+    public void setDateCreation(LocalDateTime dateCreation) {
+        this.dateCreation = dateCreation;
+    }
+
+    public LocalDateTime getDateMiseAjour() {
+        return dateMiseAjour;
+    }
+
+    public void setDateMiseAjour(LocalDateTime dateMiseAjour) {
+        this.dateMiseAjour = dateMiseAjour;
+    }
+
+    public String getCreateBy() {
+        return createBy;
+    }
+
+    public void setCreateBy(String createBy) {
+        this.createBy = createBy;
+    }
+
+    public String getLastModifiedBy() {
+        return lastModifiedBy;
+    }
+
+    public void setLastModifiedBy(String lastModifiedBy) {
+        this.lastModifiedBy = lastModifiedBy;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/TypeFichierDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/TypeFichierDto.java
new file mode 100644
index 0000000..823214c
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/TypeFichierDto.java
@@ -0,0 +1,66 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import com.megatim.fdxcommons.model.enumeration.CategorieFichier;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class TypeFichierDto {
+
+    @PrintColumn(libelle = "Code", rang = 1)
+    private String code;
+
+    @PrintColumn(libelle = "Libellé", rang = 2)
+    private String libelle;
+
+    private String description;
+
+    @PrintColumn(libelle = "DATE CREATION", rang = 6)
+    private LocalDateTime dateCreation;
+
+    @PrintColumn(libelle = "DATE DERN. MISE A JOUR", rang = 7)
+    private LocalDateTime dateMiseAjour;
+
+    @PrintColumn(libelle = "CREE PAR", rang = 8)
+    private String createBy;
+
+    @PrintColumn(libelle = "MODIFIE PAR", rang = 9)
+    private String lastModifiedBy;
+
+    private CategorieFichier categorieFichier;
+
+    private ParticipantSlimDto participant;
+
+    private ReferentielSlimDto referentiel;
+
+    private ExtensionFichierSlimDto extensionFichier;
+    
+//    private List<RoutageSlimDto> routages = new ArrayList<>();
+
+    @PrintColumn(libelle = "Catégorie Fichier", rang = 3)
+    public String getCategorieFichierDescription() {
+        return categorieFichier.getValue();
+    }
+
+    @PrintColumn(libelle = "Référentiel", rang = 4)
+    public String getReferentielVersion() {
+        return referentiel.getVersion();
+    }
+
+    @PrintColumn(rang = 5, libelle = "Participant")
+    public String getParticipantDescription() {
+        return participant.getCode() + "- " + participant.getLibelle();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/TypeFichierFormDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/TypeFichierFormDto.java
new file mode 100644
index 0000000..1c8e18e
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/TypeFichierFormDto.java
@@ -0,0 +1,45 @@
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import com.megatim.fdxcommons.model.enumeration.CategorieFichier;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class TypeFichierFormDto {
+
+    @PrintColumn(libelle = "Code", rang = 1)
+    private String code;
+
+    @PrintColumn(libelle = "Libellé", rang = 2)
+    private String libelle;
+
+    private String description;
+
+    @PrintColumn(libelle = "DATE CREATION", rang = 6)
+    private LocalDateTime dateCreation;
+
+    @PrintColumn(libelle = "DATE DERN. MISE A JOUR", rang = 7)
+    private LocalDateTime dateMiseAjour;
+
+    @PrintColumn(libelle = "CREE PAR", rang = 8)
+    private String createBy;
+
+    @PrintColumn(libelle = "MODIFIE PAR", rang = 9)
+    private String lastModifiedBy;
+
+    private CategorieFichier categorieFichier;
+
+    private ParticipantSlimDto participant;
+
+    private ReferentielSlimDto referentiel;
+
+    private ExtensionFichierSlimDto extensionFichier;
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/TypeFichierSlimDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/TypeFichierSlimDto.java
new file mode 100644
index 0000000..9aa0146
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/TypeFichierSlimDto.java
@@ -0,0 +1,36 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import com.megatim.fdxcommons.model.enumeration.CategorieFichier;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class TypeFichierSlimDto {
+
+    private String code;
+
+    private String libelle;
+
+    private String description;
+
+    private LocalDateTime dateCreation;
+
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+
+    private CategorieFichier categorieFichier;
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ValidateurFichierConfigurationDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ValidateurFichierConfigurationDto.java
new file mode 100644
index 0000000..972d380
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ValidateurFichierConfigurationDto.java
@@ -0,0 +1,49 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class ValidateurFichierConfigurationDto {
+
+    @PrintColumn(libelle = "Nom du fichier", rang = 1)
+    private String fileName;
+
+    @PrintColumn(libelle = "DATE CREATION", rang = 4)
+    private LocalDateTime dateCreation;
+
+    @PrintColumn(libelle = "DATE DERN. MISE A JOUR", rang = 5)
+    private LocalDateTime dateMiseAjour;
+
+    @PrintColumn(libelle = "CREE PAR", rang = 6)
+    private String createBy;
+
+    @PrintColumn(libelle = "MODIFIE PAR", rang = 7)
+    private String lastModifiedBy;
+
+    private TypeFichierSlimDto typeFichier;
+
+    private ReferentielSlimDto referentiel;
+
+    @PrintColumn(libelle = "TypeFichier", rang = 2)
+    public String getTypeFichierDescription() {
+        return typeFichier.getLibelle();
+    }
+
+    @PrintColumn(libelle = "Référentiel", rang = 3)
+    public String getReferentielVersion() {
+        return referentiel.getVersion();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ValidateurFichierConfigurationSlimDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ValidateurFichierConfigurationSlimDto.java
new file mode 100644
index 0000000..cfa9326
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ValidateurFichierConfigurationSlimDto.java
@@ -0,0 +1,26 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter @Setter
+public class ValidateurFichierConfigurationSlimDto {
+     private String fileName;
+
+    private LocalDateTime dateCreation;
+
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ValidateurFichierDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ValidateurFichierDto.java
new file mode 100644
index 0000000..ef21657
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ValidateurFichierDto.java
@@ -0,0 +1,33 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class ValidateurFichierDto {
+
+    private String id;
+
+    private int nombrePosition;
+
+    private LocalDateTime dateCreation;
+
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+
+    private TypeFichierSlimDto typeFichier;
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ValidateurFichierSlimDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ValidateurFichierSlimDto.java
new file mode 100644
index 0000000..66c5dc4
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/referentiel/ValidateurFichierSlimDto.java
@@ -0,0 +1,30 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.referentiel;
+
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class ValidateurFichierSlimDto {
+
+    private String id;
+
+    private int nombrePosition;
+
+    private LocalDateTime dateCreation;
+
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/remoteproduction/PlanificationDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/remoteproduction/PlanificationDto.java
new file mode 100644
index 0000000..97bde45
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/remoteproduction/PlanificationDto.java
@@ -0,0 +1,70 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.remoteproduction;
+
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.model.remotedataproduction.enums.ScheduleAction;
+import com.megatim.fdxcommons.model.remotedataproduction.enums.TypePas;
+import java.time.LocalDateTime;
+import java.util.Date;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+@NoArgsConstructor
+public class PlanificationDto {
+
+    private Long id;
+
+    private String description;
+
+    private Boolean executeOnce;
+
+    private Boolean active;
+    
+    private LocalDateTime nextExecution;
+
+    private ScheduleAction scheduleAction;
+
+    private int heureDebutTache;
+    private int minuteDebutTache;
+    private int secondeDebutTache;
+
+    private int heureFinTache;
+    private int minuteFinTache;
+    private int secondeFinTache;
+
+    private int intervalleTache;
+
+    private TypePas typePas;
+
+    private boolean monday;
+    private boolean tuesday;
+    private boolean wednesday;
+    private boolean thursday;
+    private boolean friday;
+    private boolean saturday;
+    private boolean sunday;
+    
+    private TypeOperation typeOperation;
+
+    private Date dateCreation;
+
+    private String utilisateurCreation;
+
+    private Date dateDerniereModification;
+
+    private String utilisateurModification;
+
+    private Date dateSuppression;
+
+    private String utilisateurSuppression;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/remoteproduction/RemoteConfigurationDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/remoteproduction/RemoteConfigurationDto.java
new file mode 100644
index 0000000..3734cf4
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/dtos/remoteproduction/RemoteConfigurationDto.java
@@ -0,0 +1,47 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.dtos.remoteproduction;
+
+import com.megatim.fdxcommons.model.enumeration.RemoteTypeAction;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import java.util.Date;
+import java.util.List;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+@NoArgsConstructor
+public class RemoteConfigurationDto {
+
+    private String codeTypeFichier;
+
+    private String codeParticipant;
+
+    private String url;
+
+    private TypeOperation typeOperation;
+
+    private RemoteTypeAction remoteTypeAction;
+
+    private Date dateCreation;
+
+    private String utilisateurCreation;
+
+    private Date dateDerniereModification;
+
+    private String utilisateurModification;
+
+    private Date dateSuppression;
+
+    private String utilisateurSuppression;
+
+    private List<PlanificationDto> planifications;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/CategorieFichier.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/CategorieFichier.java
new file mode 100644
index 0000000..46a5e7c
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/CategorieFichier.java
@@ -0,0 +1,43 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Enum.java to edit this template
+ */
+package com.megatim.fdxcommons.model.enumeration;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum CategorieFichier {
+    STRUCTURE("STRUCTURE"),
+    SEMI_STRUCTURE("SEMI STRUCTURE"),
+    NON_STRUCTURE("NON STRUCTURE");
+
+    private final String value;
+
+    private CategorieFichier(String value) {
+        this.value = value;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public static CategorieFichier fromValeur(String value) {
+        switch (value) {
+            case "STRUCTURE":
+                return CategorieFichier.STRUCTURE;
+            case "SEMI STRUCTURE":
+                return CategorieFichier.SEMI_STRUCTURE;
+            case "NON STRUCTURE":
+                return CategorieFichier.NON_STRUCTURE;
+            default:
+                return null;
+        }
+    }
+
+    @Override
+    public String toString() {
+        return value;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/ColumnStatus.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/ColumnStatus.java
new file mode 100644
index 0000000..cd9ef3d
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/ColumnStatus.java
@@ -0,0 +1,24 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Enum.java to edit this template
+ */
+package com.megatim.fdxcommons.model.enumeration;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum ColumnStatus {
+    ADD("ADD"), MODIFY("MODIFY");
+    
+    private final String status;
+    
+    private ColumnStatus(String status) {
+        this.status = status;
+    }
+    
+    @Override
+    public String toString() {
+        return status;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/CriteriaLogicConnector.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/CriteriaLogicConnector.java
new file mode 100644
index 0000000..be2f152
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/CriteriaLogicConnector.java
@@ -0,0 +1,10 @@
+package com.megatim.fdxcommons.model.enumeration;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum CriteriaLogicConnector {
+    OR, 
+    AND;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/EtatIntegration.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/EtatIntegration.java
new file mode 100644
index 0000000..6600d96
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/EtatIntegration.java
@@ -0,0 +1,13 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Enum.java to edit this template
+ */
+package com.megatim.fdxcommons.model.enumeration;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum EtatIntegration {
+    NOUVEAU, ENVOYE;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/EtatOperation.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/EtatOperation.java
new file mode 100644
index 0000000..4fe44c6
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/EtatOperation.java
@@ -0,0 +1,28 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxcommons.model.enumeration;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+public enum EtatOperation {
+    
+    ATTENTE_VALIDATION("ATTENTE VALIDATION"),
+    ACTIF("ACTIF"),
+    REJETE("REJETE"),
+    INNACTIF("INNACTIF");
+
+    private final String etat;
+
+    private EtatOperation(String etat) {
+        this.etat = etat;
+    }
+
+    @JsonValue
+    public String getEtat() {
+        return etat;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/FonctionAggregation.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/FonctionAggregation.java
new file mode 100644
index 0000000..2cad948
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/FonctionAggregation.java
@@ -0,0 +1,47 @@
+package com.megatim.fdxcommons.model.enumeration;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.megatim.fdxcommons.model.search.EnumValue;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum FonctionAggregation {
+
+    MAX("MAXIMUM"),
+    MIN("MINIMUM"),
+    SUM("SOMME"),
+    COUNT("COMPTE"),
+    AVG("MOYENNE");
+
+    private final String value;
+
+    private FonctionAggregation(String value) {
+        this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+        return value;
+    }
+
+    @EnumValue
+    public static FonctionAggregation fromValeur(String value) {
+        
+        if (value.equalsIgnoreCase("MAXIMUM")) {
+            return FonctionAggregation.MAX;
+        } else if (value.equalsIgnoreCase("MINIMUM")) {
+            return FonctionAggregation.MIN;
+        } else if (value.equalsIgnoreCase("SOMME")) {
+            return FonctionAggregation.SUM;
+        } else if (value.equalsIgnoreCase("COMPTE")) {
+            return FonctionAggregation.COUNT;
+        } else if (value.equalsIgnoreCase("MOYENNE")) {
+            return FonctionAggregation.AVG;
+        } else {
+            return null;
+        }
+        
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/Gravite.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/Gravite.java
new file mode 100644
index 0000000..3fdbeaf
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/Gravite.java
@@ -0,0 +1,25 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxcommons.model.enumeration;
+
+public enum Gravite {
+
+  INFO("info"),
+  WARNING("warning"),
+  ERROR("error");
+    
+  private String name = "";
+   
+  //Constructeur
+  Gravite(String name){
+    this.name = name;
+  }
+   
+  @Override
+  public String toString(){
+    return name;
+  }
+  
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/NumberOperator.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/NumberOperator.java
new file mode 100644
index 0000000..c82d3dc
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/NumberOperator.java
@@ -0,0 +1,37 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Enum.java to edit this template
+ */
+package com.megatim.fdxcommons.model.enumeration;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum NumberOperator {
+    UNKNOW(""),
+    EQUALS("="),
+    NOT_EQUALS("!="),
+    GREATER_THAN(">"),
+    GREATER_OR_EQUALS_THAN(">="),
+    LESS_THAN("<"),
+    LESS_OR_EQUALS_THAN("<=");
+
+    private String name = "";
+
+    NumberOperator(String name) {
+        this.name = name;
+    }
+
+    @JsonValue
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public String toString() {
+        return name;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/Operateur.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/Operateur.java
new file mode 100644
index 0000000..d364fac
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/Operateur.java
@@ -0,0 +1,79 @@
+package com.megatim.fdxcommons.model.enumeration;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum Operateur {
+
+    LIKE("LIKE"),
+    EQUALS("="), NOT_EQUALS("<>"),
+    GREATER_THAN(">"), GREATER_OR_EQUALS_THAN(">="),
+    LOWER_THAN("<"), LOWER_OR_EQUALS_THAN("<="),
+    IN("IN"), NOT_IN("NOT IN"),
+    IS_NULL("IS NULL"), IS_NOT_NULL("IS NOT NULL"),
+    BETWEEN("BETWEEN"), NOT_BETWEEN("NOT BETWEEN");
+
+    private final String value;
+
+    private Operateur(String value) {
+        this.value = value;
+    }
+
+    public static Operateur fromValeur(String value) {
+        String cleanValue = value.trim().toUpperCase();
+        cleanValue = cleanValue.replaceAll("\\s+", " ");//remplacer plusieurs chaines vides par une seule chaine vide
+
+        switch (cleanValue) {
+
+            case "LIKE":
+                return Operateur.LIKE;
+
+            case "=":
+                return Operateur.EQUALS;
+
+            case "<>":
+                return Operateur.NOT_EQUALS;
+
+            case ">":
+                return Operateur.GREATER_THAN;
+
+            case ">=":
+                return Operateur.GREATER_OR_EQUALS_THAN;
+
+            case "<":
+                return Operateur.LOWER_THAN;
+
+            case "<=":
+                return Operateur.LOWER_OR_EQUALS_THAN;
+
+            case "IN":
+                return Operateur.IN;
+
+            case "NOT IN":
+                return Operateur.NOT_IN;
+
+            case "IS NULL":
+                return Operateur.IS_NULL;
+
+            case "IS NOT NULL":
+                return Operateur.IS_NOT_NULL;
+
+            case "BETWEEN":
+                return Operateur.BETWEEN;
+
+            case "NOT BETWEEN":
+                return Operateur.NOT_BETWEEN;
+
+            default:
+                return null;
+        }
+    }
+
+    @JsonValue
+    public String getValue() {
+        return value;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/OrderByType.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/OrderByType.java
new file mode 100644
index 0000000..18c1bb7
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/OrderByType.java
@@ -0,0 +1,13 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Enum.java to edit this template
+ */
+package com.megatim.fdxcommons.model.enumeration;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum OrderByType {
+    ASC, DESC;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/RemoteTypeAction.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/RemoteTypeAction.java
new file mode 100644
index 0000000..8cfbb28
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/RemoteTypeAction.java
@@ -0,0 +1,49 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Enum.java to edit this template
+ */
+package com.megatim.fdxcommons.model.enumeration;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.megatim.fdxcommons.model.search.EnumValue;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum RemoteTypeAction {
+    AJOUTER("AJOUTER"),
+    CONSULTER("CONSULTER"),
+    SUPPRIMER("SUPPRIMER");
+
+    private final String name;
+
+    private RemoteTypeAction(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public String toString() {
+        return name;
+    }
+
+    @JsonValue
+    public String getName() {
+        return name;
+    }
+
+    @EnumValue
+    public static TypeOperation fromValeur(String value) {
+        if (value == null) {
+            return null;
+        }
+        if (value.equalsIgnoreCase("ajouter")) {
+            return TypeOperation.AJOUTER;
+        } else if (value.equalsIgnoreCase("consulter")) {
+            return TypeOperation.CONSULTER;
+        } else {
+            return null;
+
+        }
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/SearchAnnotationOperateur.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/SearchAnnotationOperateur.java
new file mode 100644
index 0000000..3800191
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/SearchAnnotationOperateur.java
@@ -0,0 +1,19 @@
+package com.megatim.fdxcommons.model.enumeration;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum SearchAnnotationOperateur {
+    EQUALS, 
+    NOT_EQUALS, 
+    LIKE, 
+    LEFT_LIKE, 
+    RIGHT_LIKE, 
+    GREATER_THAN, 
+    GREATER_OR_EQUALS_THAN, 
+    LESS_THAN, 
+    LESS_OR_EQUALS_THAN, 
+    IN, 
+    NUMBER_OPERATOR;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/Sexe.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/Sexe.java
new file mode 100644
index 0000000..52d8812
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/Sexe.java
@@ -0,0 +1,37 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxcommons.model.enumeration;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+public enum Sexe {
+
+    FEMME("FEMME"),
+    HOMME("HOMME");
+
+    private String name;
+
+    private Sexe(String name) {
+        this.name = name;
+    }
+
+    @JsonValue
+    public String getName() {
+        return name;
+    }
+
+    public static Sexe fromValeur(String value) {
+        switch (value) {
+            case "FEMME":
+                return Sexe.FEMME;
+            case "HOMME":
+                return Sexe.HOMME;
+            default:
+                return null;
+        }
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/StatutDataProduction.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/StatutDataProduction.java
new file mode 100644
index 0000000..7149ab0
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/StatutDataProduction.java
@@ -0,0 +1,13 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Enum.java to edit this template
+ */
+package com.megatim.fdxcommons.model.enumeration;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum StatutDataProduction {
+    A_CONSOMMER, CONSOMME, ENCOURS_DE_PRODUCTION, ENCOURS_DE_CONSOMMATION;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/StatutReferentiel.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/StatutReferentiel.java
new file mode 100644
index 0000000..1eeb90c
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/StatutReferentiel.java
@@ -0,0 +1,48 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Enum.java to edit this template
+ */
+package com.megatim.fdxcommons.model.enumeration;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.megatim.fdxcommons.model.search.EnumValue;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum StatutReferentiel {
+    ARCHIVE("ARCHIVE"),
+    EN_PREPARATION("EN PREPARATION"),
+    EN_COURS("EN COURS");
+
+    private final String value;
+
+    private StatutReferentiel(String value) {
+        this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+        return value;
+    }
+
+    @EnumValue
+    public static StatutReferentiel fromValeur(String value) {
+        switch (value) {
+            case "ARCHIVE":
+                return StatutReferentiel.ARCHIVE;
+            case "EN PREPARATION":
+                return StatutReferentiel.EN_PREPARATION;
+            case "EN COURS":
+                return StatutReferentiel.EN_COURS;
+            default:
+                return null;
+        }
+    }
+
+    @Override
+    public String toString() {
+        return value;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeActionSysteme.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeActionSysteme.java
new file mode 100644
index 0000000..aae6240
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeActionSysteme.java
@@ -0,0 +1,44 @@
+package com.megatim.fdxcommons.model.enumeration;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ *
+ * @author lenovo
+ */
+public enum TypeActionSysteme {
+
+    DECONNEXION("DECONNEXION"),
+    INFORMATION("INFORMATION"),
+    AUCUNE("AUCUNE");
+
+    private String name = "";
+
+    //Constructeur
+    TypeActionSysteme(String name) {
+        this.name = name;
+    }
+    
+    @JsonValue
+    public String getName() {
+        return name;
+    }
+    
+    public static TypeActionSysteme fromValeur(String value) {
+        switch (value) {
+            case "DECONNEXION":
+                return TypeActionSysteme.DECONNEXION;
+            case "INFORMATION":
+                return TypeActionSysteme.INFORMATION;
+            case "AUCUNE":
+                return TypeActionSysteme.AUCUNE;
+            default:
+                return null;
+        }
+    }
+
+    @Override
+    public String toString() {
+        return name;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeDonnee.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeDonnee.java
new file mode 100644
index 0000000..b6be8e3
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeDonnee.java
@@ -0,0 +1,61 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Enum.java to edit this template
+ */
+package com.megatim.fdxcommons.model.enumeration;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ *
+ * @author STEPHANIE
+ */
+public enum TypeDonnee {
+    ALPHANUMERIQUE("ALPHANUMERIQUE"),
+    NUMERIQUE("NUMERIQUE"),
+    DECIMAL("DECIMAL"),
+    DATE("DATE"),
+    ENUM("ENUMERATION"),
+    OBJET("OBJET");
+
+    private final String value;
+
+    private TypeDonnee(String value) {
+        this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+        return value;
+    }
+
+    public static TypeDonnee fromValeur(String value) {
+        if (value != null) {
+            if (value.equalsIgnoreCase(TypeDonnee.ALPHANUMERIQUE.getValue())) {
+                return TypeDonnee.ALPHANUMERIQUE;
+
+            } else if (value.equalsIgnoreCase(TypeDonnee.NUMERIQUE.getValue())) {
+                return TypeDonnee.NUMERIQUE;
+
+            } else if (value.equalsIgnoreCase(TypeDonnee.DATE.getValue())) {
+                return TypeDonnee.DATE;
+
+            } else if (value.equalsIgnoreCase(TypeDonnee.DECIMAL.getValue())) {
+                return TypeDonnee.DECIMAL;
+
+            } else if (value.equalsIgnoreCase(TypeDonnee.ENUM.getValue())) {
+                return TypeDonnee.ENUM;
+
+            } else {
+                return null;
+            }
+        } else {
+            return null;
+        }
+    }
+
+    @Override
+    public String toString() {
+        return value;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeExtension.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeExtension.java
new file mode 100644
index 0000000..0508f35
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeExtension.java
@@ -0,0 +1,43 @@
+package com.megatim.fdxcommons.model.enumeration;
+
+import com.megatim.fdxcommons.model.search.EnumValue;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum TypeExtension {
+
+    TEXTE("TEXTE"),
+    CSV("CSV"),
+    AUTRES("AUTRES");
+
+    private final String value;
+
+    private TypeExtension(String value) {
+        this.value = value;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    @EnumValue
+    public static TypeExtension fromValeur(String value) {
+        switch (value) {
+            case "TEXTE":
+                return TypeExtension.TEXTE;
+            case "CSV":
+                return TypeExtension.CSV;
+            case "AUTRES":
+                return TypeExtension.AUTRES;
+            default:
+                return null;
+        }
+    }
+
+    @Override
+    public String toString() {
+        return value;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeIdMessageSysteme.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeIdMessageSysteme.java
new file mode 100644
index 0000000..7213d1d
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeIdMessageSysteme.java
@@ -0,0 +1,53 @@
+package com.megatim.fdxcommons.model.enumeration;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ *
+ * @author lenovo
+ */
+public enum TypeIdMessageSysteme {
+
+    ALERTE_MOT_DE_PASSE_EXPIRE("ALERTE MOT DE PASSE EXPIRE"),
+    MOT_DE_PASSE_EXPIRE("MOT DE PASSE EXPIRE"),
+    MODIFICATION_GROUPE_UTILISATEUR("MODIFICATION GROUPE UTILISATEUR"),
+    MODIFICATION_INFORMATION_UTILISATEUR("MODIFICATION INFORMATION UTILISATEUR"),
+    SUPPRESSION_COMPTE_UTILISATEUR("SUPPRESSION COMPTE UTILISATEUR"),
+    SUPPRESSION_GROUPE_UTILISATEUR("SUPPRESSION GROUPE UTILISATEUR");
+
+    private String name = "";
+
+    //Constructeur
+    TypeIdMessageSysteme(String name) {
+        this.name = name;
+    }
+    
+    @JsonValue
+    public String getName() {
+        return name;
+    }
+    
+    public static TypeIdMessageSysteme fromValeur(String value) {
+        switch (value) {
+            case "ALERTE MOT DE PASSE EXPIRE":
+                return TypeIdMessageSysteme.ALERTE_MOT_DE_PASSE_EXPIRE;
+            case "MOT DE PASSE EXPIRE":
+                return TypeIdMessageSysteme.MOT_DE_PASSE_EXPIRE;
+            case "MODIFICATION GROUPE UTILISATEUR":
+                return TypeIdMessageSysteme.MODIFICATION_GROUPE_UTILISATEUR;
+            case "MODIFICATION INFORMATION UTILISATEUR":
+                return TypeIdMessageSysteme.MODIFICATION_INFORMATION_UTILISATEUR;
+            case "SUPPRESSION COMPTE UTILISATEUR":
+                return TypeIdMessageSysteme.SUPPRESSION_COMPTE_UTILISATEUR;
+            case "SUPPRESSION GROUPE UTILISATEUR":
+                return TypeIdMessageSysteme.SUPPRESSION_GROUPE_UTILISATEUR;
+            default:
+                return null;
+        }
+    }
+
+    @Override
+    public String toString() {
+        return name;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeMessageSysteme.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeMessageSysteme.java
new file mode 100644
index 0000000..62aa85e
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeMessageSysteme.java
@@ -0,0 +1,44 @@
+package com.megatim.fdxcommons.model.enumeration;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ *
+ * @author lenovo
+ */
+public enum TypeMessageSysteme {
+
+    INFO("INFO"),
+    AVERTISSEMENT("AVERTISSEMENT"),
+    ERREUR("ERREUR");
+
+    private String name = "";
+
+    //Constructeur
+    TypeMessageSysteme(String name) {
+        this.name = name;
+    }
+    
+    @JsonValue
+    public String getName() {
+        return name;
+    }
+    
+    public static TypeMessageSysteme fromValeur(String value) {
+        switch (value) {
+            case "INFO":
+                return TypeMessageSysteme.INFO;
+            case "AVERTISSEMENT":
+                return TypeMessageSysteme.AVERTISSEMENT;
+            case "ERREUR":
+                return TypeMessageSysteme.ERREUR;
+            default:
+                return null;
+        }
+    }
+
+    @Override
+    public String toString() {
+        return name;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeOperation.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeOperation.java
new file mode 100644
index 0000000..609d062
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeOperation.java
@@ -0,0 +1,52 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxcommons.model.enumeration;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.megatim.fdxcommons.model.search.EnumValue;
+
+public enum TypeOperation {
+
+    AJOUTER("ajouter"),
+    SUPPRIMER("supprimer"),
+    MODIFIER("modifier"),
+    CONSULTER("consulter");
+
+    private final String name;
+
+    private TypeOperation(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public String toString() {
+        return name;
+    }
+
+    @JsonValue
+    public String getName() {
+        return name;
+    }
+
+    @EnumValue
+    public static TypeOperation fromValeur(String value) {
+        if (value == null) {
+            return null;
+        }
+        if (value.equalsIgnoreCase("ajouter")) {
+            return TypeOperation.AJOUTER;
+        } else if (value.equalsIgnoreCase("supprimer")) {
+            return TypeOperation.SUPPRIMER;
+        } else if (value.equalsIgnoreCase("modifier")) {
+            return TypeOperation.MODIFIER;
+        } else if (value.equalsIgnoreCase("consulter")) {
+            return TypeOperation.CONSULTER;
+        } else {
+            return null;
+
+        }
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeStatut.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeStatut.java
new file mode 100644
index 0000000..7bd83a6
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/enumeration/TypeStatut.java
@@ -0,0 +1,37 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxcommons.model.enumeration;
+
+/**
+ *
+ * @author bissey
+ */
+public enum TypeStatut {
+    ACTIF("ACTIF"),
+    INNACTIF("INNACTIF");
+
+    private String etat;
+
+    private TypeStatut(String etat) {
+        this.etat = etat;
+    }
+
+    public String getEtat() {
+        return etat;
+    }
+
+    public static TypeStatut fromValeur(String value) {
+        switch (value) {
+            case "ACTIF":
+                return TypeStatut.ACTIF;
+            case "INNACTIF":
+                return TypeStatut.INNACTIF;
+            default:
+                return null;
+        }
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/ColumnDefinition.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/ColumnDefinition.java
new file mode 100644
index 0000000..d120680
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/ColumnDefinition.java
@@ -0,0 +1,71 @@
+package com.megatim.fdxcommons.model.integration;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.Transient;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Entity
+@NoArgsConstructor
+@Getter
+@Setter
+@IdClass(ColumnDefinitionId.class)
+public class ColumnDefinition implements Serializable {
+
+    @Id
+    private String codeTypeFichier;
+
+    @Id
+    private String referentielVersion;
+
+    @Id
+    private String name;
+
+    private String typeDonnee;
+
+    private int taille;
+
+    private int taillePartieDecimale;
+
+    private String formatDate;
+
+    private int position;
+
+    @Transient
+    private boolean required;
+
+    @Transient
+    private boolean collection;
+
+    public ColumnDefinition(String codeTypeFichier, String referentielVersion, String name, String typeDonnee, int taille, int taillePartieDecimale, String formatDate, int position) {
+        this.codeTypeFichier = codeTypeFichier;
+        this.referentielVersion = referentielVersion;
+        this.name = name;
+        this.typeDonnee = typeDonnee;
+        this.taille = taille;
+        this.taillePartieDecimale = taillePartieDecimale;
+        this.formatDate = formatDate;
+        this.position = position;
+    }
+
+    public ColumnDefinition(String name, String typeDonnee, int taille, boolean required, boolean collection) {
+        this.name = name;
+        this.typeDonnee = typeDonnee;
+        this.taille = taille;
+        this.required = required;
+        this.collection = collection;
+    }
+
+    @Override
+    public String toString() {
+        return "ColumnDefinition{" + "codeTypeFichier=" + codeTypeFichier + ", referentielVersion=" + referentielVersion + ", name=" + name + ", typeDonnee=" + typeDonnee + '}';
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/ColumnDefinitionId.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/ColumnDefinitionId.java
new file mode 100644
index 0000000..e6394ca
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/ColumnDefinitionId.java
@@ -0,0 +1,26 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.integration;
+
+import java.io.Serializable;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ *
+ * @author ASUS
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class ColumnDefinitionId implements Serializable {
+
+    private String codeTypeFichier;
+
+    private String referentielVersion;
+
+    private String name;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/TableDefinition.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/TableDefinition.java
new file mode 100644
index 0000000..4f55b57
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/TableDefinition.java
@@ -0,0 +1,44 @@
+package com.megatim.fdxcommons.model.integration;
+
+import com.megatim.fdxcommons.model.integration.enums.FileExtension;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.Transient;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ *
+ * @author lenovo
+ */
+@Setter
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+@Entity
+@IdClass(TableDefinitionId.class)
+public class TableDefinition implements Serializable {
+
+    @Id
+    private String referentielVersion;
+    @Id
+    private String codeTypeFichier;
+    private Boolean headerPresent;
+    private String columnDelimiter;
+    private String lineDelimiter;
+    
+    @Enumerated(EnumType.STRING)
+    private FileExtension extension;
+
+    @Transient
+    private List<ColumnDefinition> columnDefinitions = new ArrayList<>();
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/TableDefinitionId.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/TableDefinitionId.java
new file mode 100644
index 0000000..6d74380
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/TableDefinitionId.java
@@ -0,0 +1,24 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.integration;
+
+import java.io.Serializable;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ *
+ * @author ASUS
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class TableDefinitionId implements Serializable {
+
+    private String codeTypeFichier;
+
+    private String referentielVersion;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/enums/FileExtension.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/enums/FileExtension.java
new file mode 100644
index 0000000..58e650b
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/enums/FileExtension.java
@@ -0,0 +1,28 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.integration.enums;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum FileExtension {
+    CSV, TXT, XLS, XLSX;
+
+    public static FileExtension fromValeur(String value) {
+        switch (value.toUpperCase()) {
+            case "CSV":
+                return FileExtension.CSV;
+            case "TXT":
+                return FileExtension.TXT;
+            case "XLS":
+                return FileExtension.XLS;
+            case "XLSX":
+                return FileExtension.XLSX;
+            default:
+                return null;
+        }
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/json/JsonStructure.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/json/JsonStructure.java
new file mode 100644
index 0000000..a32a3ab
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/json/JsonStructure.java
@@ -0,0 +1,77 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.integration.json;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.*;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+@Entity
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class JsonStructure implements Serializable {
+
+    @Id
+    @SequenceGenerator(name = "SEQ_TYPE_FICHIER_JSON", sequenceName = "SEQ_TYPE_FICHIER_JSON", allocationSize = 1, initialValue = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_TYPE_FICHIER_JSON")
+    @XmlTransient
+    private Long id;
+
+    @NotNull(message = "Le type de données est obligatoire")
+    @Enumerated(EnumType.STRING)
+    @XmlAttribute
+    private TypeDonnee typeDonnee;
+
+    @NotNull(message = "Le nom est obligatoire")
+    @XmlAttribute
+    private String name;
+
+    @Min(value = 1, message = "La taille doit être supérieure à 0")
+    @XmlAttribute
+    private int lengthh;
+
+    @XmlAttribute
+    private boolean required;
+
+    @XmlAttribute
+    private boolean collection;
+
+    @XmlAttribute
+    private String formatDate;
+
+    @XmlAttribute
+    private String codeDelimiteurDate;
+
+    @OneToOne
+    @XmlTransient
+    private TypeFichierJson typeFichierJson;
+
+    @ManyToOne
+    @XmlTransient
+    private JsonStructure parent;
+
+    @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true)
+    @XmlElement(name = "jsonStructure") 
+    private List<JsonStructure> fields = new ArrayList<>();
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/json/TypeFichierJson.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/json/TypeFichierJson.java
new file mode 100644
index 0000000..62992dc
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/integration/json/TypeFichierJson.java
@@ -0,0 +1,56 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.integration.json;
+
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import java.io.Serializable;
+import javax.persistence.*;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ * @author ASUS
+ */
+@Getter
+@Setter
+@Entity
+@NoArgsConstructor
+@XmlRootElement(name = "typeFichierJson")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class TypeFichierJson implements Serializable {
+
+    @Id
+    @SequenceGenerator(name = "SEQ_TYPE_FICHIER",
+            sequenceName = "SEQ_TYPE_FICHIER",
+            allocationSize = 1,
+            initialValue = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_TYPE_FICHIER")
+    @XmlTransient
+    private Long id;
+
+    @OneToOne(cascade = CascadeType.MERGE)
+    @JoinColumn(name = "referentiel_version")
+    private Referentiel referentiel;
+    
+    @OneToOne(cascade = CascadeType.MERGE)
+    @JoinColumn(name = "type_fichier_code")
+    private TypeFichier typeFichier;
+
+    @OneToOne(cascade = CascadeType.ALL)
+    @JoinColumn(name = "json_structure_id")
+    private JsonStructure jsonStructure;
+
+    public TypeFichierJson(TypeFichier typeFichier, JsonStructure jsonStructure) {
+        this.typeFichier = typeFichier;
+        this.jsonStructure = jsonStructure;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ApplicationSourcesToExport.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ApplicationSourcesToExport.java
new file mode 100644
index 0000000..e26ca81
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ApplicationSourcesToExport.java
@@ -0,0 +1,27 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.jaxb;
+
+import com.megatim.fdxcommons.model.referentiel.ApplicationSource;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Setter
+@Getter
+@XmlRootElement(name = "sources")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class ApplicationSourcesToExport {
+
+    private List<ApplicationSource> applicationSourceList = new ArrayList<>();
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ExtensionFichiersToExport.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ExtensionFichiersToExport.java
new file mode 100644
index 0000000..a104502
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ExtensionFichiersToExport.java
@@ -0,0 +1,27 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.jaxb;
+
+import com.megatim.fdxcommons.model.referentiel.ExtensionFichier;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@XmlRootElement(name = "ExtensionFichiersToExport")
+@XmlAccessorType(XmlAccessType.FIELD)
+@Setter
+@Getter
+public class ExtensionFichiersToExport {
+
+    private List<ExtensionFichier> extensionFichiers = new ArrayList<>();
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/GroupeNoeudsToExport.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/GroupeNoeudsToExport.java
new file mode 100644
index 0000000..7744cc5
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/GroupeNoeudsToExport.java
@@ -0,0 +1,29 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.jaxb;
+
+import com.megatim.fdxcommons.model.referentiel.GroupeNoeud;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@XmlRootElement(name = "GroupeNoeudsToExport")
+@XmlAccessorType(XmlAccessType.FIELD)
+@Setter
+@Getter
+public class GroupeNoeudsToExport {
+
+    @XmlElement(name = "groupeNoeuds")
+    private List<GroupeNoeud> groupeNoeuds = new ArrayList<>();
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/GroupeParticipantsToExport.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/GroupeParticipantsToExport.java
new file mode 100644
index 0000000..90cd40b
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/GroupeParticipantsToExport.java
@@ -0,0 +1,27 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.jaxb;
+
+import com.megatim.fdxcommons.model.referentiel.GroupeParticipant;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@XmlRootElement(name = "GroupeParticipantsToExport")
+@XmlAccessorType(XmlAccessType.FIELD)
+@Setter
+@Getter
+public class GroupeParticipantsToExport {
+
+    private List<GroupeParticipant> groupeParticipants = new ArrayList<>();
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/NatureProductionFichiersToExport.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/NatureProductionFichiersToExport.java
new file mode 100644
index 0000000..006031e
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/NatureProductionFichiersToExport.java
@@ -0,0 +1,27 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.jaxb;
+
+import com.megatim.fdxcommons.model.referentiel.natureproduction.NatureProductionFichier;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@XmlRootElement(name = "NatureProductionFichiersToExport")
+@XmlAccessorType(XmlAccessType.FIELD)
+@Setter
+@Getter
+public class NatureProductionFichiersToExport {
+
+    private List<NatureProductionFichier> natureProductionFichierList = new ArrayList<>();
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/NoeudsToExport.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/NoeudsToExport.java
new file mode 100644
index 0000000..9b49902
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/NoeudsToExport.java
@@ -0,0 +1,28 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.jaxb;
+
+import com.megatim.fdxcommons.model.referentiel.Noeud;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@XmlRootElement(name = "NoeudsToExport")
+@XmlAccessorType(XmlAccessType.FIELD)
+@Setter
+@Getter
+public class NoeudsToExport {
+
+    private List<Noeud> noeuds = new ArrayList<>();
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ParticipantsToExport.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ParticipantsToExport.java
new file mode 100644
index 0000000..f8aa858
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ParticipantsToExport.java
@@ -0,0 +1,27 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.jaxb;
+
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@XmlRootElement(name = "ParticipantsToExport")
+@XmlAccessorType(XmlAccessType.FIELD)
+@Setter
+@Getter
+public class ParticipantsToExport {
+
+    private List<Participant> participants = new ArrayList<>();
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/PaysToExport.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/PaysToExport.java
new file mode 100644
index 0000000..f7f64e5
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/PaysToExport.java
@@ -0,0 +1,31 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.jaxb;
+
+import com.megatim.fdxcommons.model.referentiel.Pays;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ *
+ * @author ASUS
+ */
+@XmlRootElement(name = "PaysToExport")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class PaysToExport {
+
+    private List<Pays> paysList = new ArrayList<>();
+
+    public List<Pays> getPaysList() {
+        return paysList;
+    }
+
+    public void setPaysList(List<Pays> paysList) {
+        this.paysList = paysList;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ReferentielsToExport.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ReferentielsToExport.java
new file mode 100644
index 0000000..590f170
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ReferentielsToExport.java
@@ -0,0 +1,27 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.jaxb;
+
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@XmlRootElement(name = "ReferentielsToExport")
+@XmlAccessorType(XmlAccessType.FIELD)
+@Setter
+@Getter
+public class ReferentielsToExport {
+
+    private List<Referentiel> referentielList = new ArrayList<>();
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/RoutagesToExport.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/RoutagesToExport.java
new file mode 100644
index 0000000..6e277f6
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/RoutagesToExport.java
@@ -0,0 +1,27 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.jaxb;
+
+import com.megatim.fdxcommons.model.referentiel.Routage;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@XmlRootElement(name = "RoutagesToExport")
+@XmlAccessorType(XmlAccessType.FIELD)
+@Setter
+@Getter
+public class RoutagesToExport {
+
+    private List<Routage> routageList = new ArrayList<>();
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/StructureLigneToExport.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/StructureLigneToExport.java
new file mode 100644
index 0000000..04616b9
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/StructureLigneToExport.java
@@ -0,0 +1,27 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.jaxb;
+
+import com.megatim.fdxcommons.model.referentiel.StructureLigne;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@XmlRootElement(name = "StructureLigneToExport")
+@XmlAccessorType(XmlAccessType.FIELD)
+@Setter
+@Getter
+public class StructureLigneToExport {
+
+    private List<StructureLigne> structureLigneList = new ArrayList<>();
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/TypeFichiersToExport.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/TypeFichiersToExport.java
new file mode 100644
index 0000000..4390c0a
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/TypeFichiersToExport.java
@@ -0,0 +1,27 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.jaxb;
+
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@XmlRootElement(name = "TypeFichiersToExport")
+@XmlAccessorType(XmlAccessType.FIELD)
+@Setter
+@Getter
+public class TypeFichiersToExport {
+
+    private List<TypeFichier> typeFichiersList = new ArrayList<>();
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ValidateurFichierConfigurationList.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ValidateurFichierConfigurationList.java
new file mode 100644
index 0000000..eac0f48
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ValidateurFichierConfigurationList.java
@@ -0,0 +1,27 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.jaxb;
+
+import com.megatim.fdxcommons.model.referentiel.ValidateurFichierConfiguration;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@XmlRootElement(name = "ValidateurFichierConfigurationList")
+@XmlAccessorType(XmlAccessType.FIELD)
+@Setter
+@Getter
+public class ValidateurFichierConfigurationList {
+    
+     private List<ValidateurFichierConfiguration> validateurFichierConfigurationList = new ArrayList<>();
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ValidateurFichierConfigurationToExport.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ValidateurFichierConfigurationToExport.java
new file mode 100644
index 0000000..386488d
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ValidateurFichierConfigurationToExport.java
@@ -0,0 +1,24 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@XmlRootElement(name = "ValidateurFichierConfigurationToExport")
+@XmlAccessorType(XmlAccessType.FIELD)
+@Setter
+@Getter
+public class ValidateurFichierConfigurationToExport {
+    
+    private ValidateurFichierConfigurationList validateurFichierConfigurationList;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ValidateurFichierToExport.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ValidateurFichierToExport.java
new file mode 100644
index 0000000..2810af4
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxb/ValidateurFichierToExport.java
@@ -0,0 +1,29 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.jaxb;
+
+import com.megatim.fdxcommons.model.referentiel.ValidateurFichier;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@XmlRootElement(name = "ValidateurFichierToExport")
+@XmlAccessorType(XmlAccessType.FIELD)
+@Setter
+@Getter
+public class ValidateurFichierToExport {
+
+    @XmlElement(name = "ValidateurFichier")
+    private List<ValidateurFichier> validateurFichierList = new ArrayList<>();
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxbentity/adapter/LocalDateAdapter.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxbentity/adapter/LocalDateAdapter.java
new file mode 100644
index 0000000..30b9401
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jaxbentity/adapter/LocalDateAdapter.java
@@ -0,0 +1,27 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.jaxbentity.adapter;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import javax.xml.bind.annotation.adapters.XmlAdapter;
+
+/**
+ *
+ * @author ASUS
+ */
+public class LocalDateAdapter extends XmlAdapter<String, LocalDate> {
+
+    @Override
+    public LocalDate unmarshal(String v) throws Exception {
+        return LocalDate.parse(v);
+    }
+
+    @Override
+    public String marshal(LocalDate v) throws Exception {
+        return v.toString();
+    }
+    
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jms/messages/ActivationApiUserMessage.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jms/messages/ActivationApiUserMessage.java
new file mode 100644
index 0000000..10824be
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jms/messages/ActivationApiUserMessage.java
@@ -0,0 +1,16 @@
+package com.megatim.fdxcommons.model.jms.messages;
+
+import java.io.Serializable;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class ActivationApiUserMessage implements Serializable {
+    private String codeParticipant;
+    private boolean activate;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jms/messages/ApiTokenMessage.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jms/messages/ApiTokenMessage.java
new file mode 100644
index 0000000..345e368
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jms/messages/ApiTokenMessage.java
@@ -0,0 +1,15 @@
+package com.megatim.fdxcommons.model.jms.messages;
+
+import java.io.Serializable;
+import lombok.Data;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Data
+public class ApiTokenMessage implements Serializable {
+    private String codeParticipant;
+    private String token;
+    private ApiTokenMessageType apiTokenMessageType;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jms/messages/ApiTokenMessageType.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jms/messages/ApiTokenMessageType.java
new file mode 100644
index 0000000..29c6cd2
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/jms/messages/ApiTokenMessageType.java
@@ -0,0 +1,9 @@
+package com.megatim.fdxcommons.model.jms.messages;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public enum ApiTokenMessageType {
+    ADD, UPDATE, LOCKED, UNLOCKED;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/log/ContainerContextDto.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/log/ContainerContextDto.java
new file mode 100644
index 0000000..c49dab3
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/log/ContainerContextDto.java
@@ -0,0 +1,34 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.log;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ContainerResponseContext;
+import javax.ws.rs.container.ResourceInfo;
+import javax.ws.rs.core.SecurityContext;
+import javax.ws.rs.core.UriInfo;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter @Setter
+public class ContainerContextDto {
+
+    private ContainerRequestContext containerRequestContext;
+    
+    private ContainerResponseContext containerResponseContext;
+    
+    private SecurityContext securityContext;
+
+    private HttpServletRequest httpServletRequest;
+
+    private UriInfo uriInfo;
+    
+     private ResourceInfo resourceInfo;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/log/UserActionLog.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/log/UserActionLog.java
new file mode 100644
index 0000000..eda1b4a
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/log/UserActionLog.java
@@ -0,0 +1,63 @@
+package com.megatim.fdxcommons.model.log;
+
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.SequenceGenerator;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Entity
+@Getter
+@Setter
+public class UserActionLog implements Serializable {
+
+    @Id
+    @SequenceGenerator(name = "SEQ_USER_ACTION_LOGS",
+            sequenceName = "SEQ_USER_ACTION_LOGS",
+            allocationSize = 1,
+            initialValue = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_USER_ACTION_LOGS")
+    private Long id;
+
+    @NotEmpty(message = "La description est obligatoire")
+    @CriteriaEntitySearch(libelle = "Description", rang = 2)
+    @Lob
+    private String message;
+
+    @CriteriaEntitySearch(libelle = "Utilisateur", rang = 5)
+    private String userName;
+
+    //@XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    @NotNull(message = "La date de l'action est obligatoire")
+    @CriteriaEntitySearch(libelle = "Date et heure", rang = 1)
+    private LocalDateTime dateAction;
+
+    @CriteriaEntitySearch(libelle = "Adresse IP", rang = 4)
+    @NotEmpty(message = "L'addresse IP est obligatoire")
+    private String ipAddress;
+
+    @CriteriaEntitySearch(libelle = "Statut requete", visible = false)
+    private Integer status;
+
+    @CriteriaEntitySearch(libelle = "Navigateur", rang = 3)
+    private String userAgent;
+    
+    @CriteriaEntitySearch(libelle = "Path", visible = false)
+    private String relativePath;
+
+    private String httpMethod;
+    
+    private String motif;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/mappers/MapStructMapper.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/mappers/MapStructMapper.java
new file mode 100644
index 0000000..e4416a8
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/mappers/MapStructMapper.java
@@ -0,0 +1,185 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.model.mappers;
+
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import com.megatim.fdxcommons.model.dataproduction.DataProductionSource;
+import com.megatim.fdxcommons.model.dataproduction.metadata.ProductionMetaData;
+import com.megatim.fdxcommons.model.dtos.dataproduction.CommonDataProductionDto;
+import com.megatim.fdxcommons.model.dtos.dataproduction.ProductionMetaDataDto;
+import com.megatim.fdxcommons.model.dtos.integration.ColumnDefinitionDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.ExtensionFichierDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.ExtensionFichierSlimDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.GroupeNoeudDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.GroupeNoeudSlimDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.GroupeParticipantDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.GroupeParticipantSlimDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.NoeudDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.NoeudSlimDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.ParticipantDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.ParticipantSlimDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.PaysDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.PaysSlimDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.ReferentielDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.ReferentielSlimDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.RoutageDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.RoutageSlimDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.TypeFichierDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.TypeFichierSlimDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.ValidateurFichierConfigurationDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.ValidateurFichierConfigurationSlimDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.ValidateurFichierDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.ValidateurFichierSlimDto;
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntity;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.referentiel.ExtensionFichier;
+import com.megatim.fdxcommons.model.referentiel.GroupeNoeud;
+import com.megatim.fdxcommons.model.referentiel.GroupeParticipant;
+import com.megatim.fdxcommons.model.referentiel.Noeud;
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import com.megatim.fdxcommons.model.referentiel.Pays;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxcommons.model.referentiel.Routage;
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxcommons.model.referentiel.ValidateurFichier;
+import com.megatim.fdxcommons.model.referentiel.ValidateurFichierConfiguration;
+import java.util.List;
+import org.mapstruct.InjectionStrategy;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingConstants;
+import org.mapstruct.ValueMapping;
+
+/**
+ *
+ * @author ASUS
+ */
+@Mapper(componentModel = "cdi", injectionStrategy = InjectionStrategy.FIELD)
+public interface MapStructMapper {
+
+    ExtensionFichierDto extensionFichierToExtensionFichierDto(ExtensionFichier extensionFichier);
+
+    ExtensionFichierSlimDto extensionFichierToExtensionFichierSlimDto(ExtensionFichier extensionFichier);
+
+    List<ExtensionFichierDto> extensionFichierListToExtensionFichierDtoList(List<ExtensionFichier> extensionFichiers);
+
+    GroupeNoeudDto groupeNoeudToGroupeNoeudDto(GroupeNoeud groupeNoeud);
+
+    GroupeNoeudSlimDto groupeNoeudToGroupeNoeudSlimDto(GroupeNoeud groupeNoeud);
+
+    List<GroupeNoeudDto> groupeNoeudListToGroupeNoeudDtoList(List<GroupeNoeud> groupeNoeuds);
+
+    GroupeParticipantDto groupeParticipantToGroupeParticipantDto(GroupeParticipant groupeParticipant);
+
+    GroupeParticipantSlimDto groupeParticipantToGroupeParticipantSlimDto(GroupeParticipant groupeParticipant);
+
+    List<GroupeParticipantDto> groupeParticipantListToGroupeParticipantDtoList(List<GroupeParticipant> groupeParticipants);
+
+    NoeudDto noeudToNoeudDto(Noeud noeud);
+
+    List<NoeudDto> noeudListToNoeudDtoList(List<Noeud> noeuds);
+
+    NoeudSlimDto noeudToNoeudSlimDto(Noeud noeud);
+
+    ParticipantDto participantToPartcipantDto(Participant participant);
+
+    List<ParticipantDto> participantListToParticipantDtoList(List<Participant> participants);
+
+    ParticipantSlimDto participantToParticipantSlimDto(Participant participant);
+
+    List<ParticipantSlimDto> participantListToPartcipantSlimDtoList(List<Participant> participants);
+
+    PaysDto paysToPaysDto(Pays pays);
+
+    List<PaysDto> paysListToPaysDtoList(List<Pays> pays);
+
+    PaysSlimDto paysToPaysSlimDto(Pays pays);
+
+    List<PaysSlimDto> paysListToPaysSlimDtoList(List<Pays> pays);
+
+    ReferentielDto referentielToReferentielDto(Referentiel referentiel);
+
+    ReferentielSlimDto referentielToReferentielSlimDto(Referentiel referentiel);
+
+    List<ReferentielDto> referentielListToReferentielDtoList(List<Referentiel> referentiels);
+
+    RoutageDto routageToRoutageDto(Routage routage);
+
+    RoutageSlimDto routageToRoutageSlimDto(Routage routage);
+
+    List<RoutageDto> routageListToRoutageDtoList(List<Routage> routages);
+
+    TypeFichierDto typeFichierToTypeFichierDto(TypeFichier typeFichier);
+
+    TypeFichierSlimDto typeFichierToTypeFichierSlimDto(TypeFichier typeFichier);
+
+    TypeFichier typeFichierSlimDtoToTypeFichier(TypeFichierSlimDto typeFichier);
+
+    List<TypeFichierDto> typeFichierListToTypeFichierDtoList(List<TypeFichier> typeFichiers);
+
+    ValidateurFichierConfigurationDto validateurFichierConfigurationToValidateurFichierConfigurationDto(ValidateurFichierConfiguration validateurFichierConfiguration);
+
+    ValidateurFichierConfigurationSlimDto validateurFichierConfigurationToValidateurFichierConfigurationSlimDto(ValidateurFichierConfiguration validateurFichierConfiguration);
+
+    List<ValidateurFichierConfigurationDto> validateurFichierConfigurationListToValidateurFichierConfigurationDtoList(List<ValidateurFichierConfiguration> validateurFichierConfigurations);
+
+    ValidateurFichierDto validateurFichierToValidateurFichierDto(ValidateurFichier validateurFichier);
+
+    ValidateurFichierSlimDto validateurFichierToValidateurFichierSlimDto(ValidateurFichier validateurFichier);
+
+    List<ValidateurFichierDto> validateurFichierListToValidateurFichierDtoList(List<ValidateurFichier> validateurFichiers);
+
+    @ValueMapping(target = MappingConstants.NULL, source = MappingConstants.ANY_UNMAPPED)
+    @ValueMapping(target = "NUMERIQUE", source = "NUMERIQUE")
+    @ValueMapping(target = "ALPHANUMERIQUE", source = "ALPHANUMERIQUE")
+    @ValueMapping(target = "DATE", source = "DATE")
+    @ValueMapping(target = "DECIMAL", source = "DECIMAL")
+    TypeDonnee stringToTypeDonnee(String typeDonnee);
+
+    String typeOperationToString(TypeOperation typeOperation);
+
+    ColumnDefinitionDto columnDefinitionToColumnDefinitionDto(ColumnDefinition columnDefinitionDto);
+
+    List<ColumnDefinitionDto> columnDefinitionListToColumnDefinitionDtoList(List<ColumnDefinition> data);
+
+    default CriteriaEntity criteriaEntityFromViewToCriteriaEntity(CriteriaEntityFromView ce) {
+        if (ce == null
+                || (ce.getSubCriterias() == null || ce.getSubCriterias().isEmpty()
+                && (ce.getNomColonne() == null || ce.getNomColonne().isEmpty()
+                || ce.getOperateur() == null || ce.getOperateur() == null))) {
+            return null;
+        } else {
+            if (ce.getSubCriterias() != null && !ce.getSubCriterias().isEmpty()) {
+                CriteriaEntity finalCriterion = new CriteriaEntity();
+                finalCriterion.setCriteriaLogicConnector(ce.getCriteriaLogicConnector());
+
+                for (CriteriaEntityFromView cev : ce.getSubCriterias()) {
+                    CriteriaEntity criteriaEntity = criteriaEntityFromViewToCriteriaEntity(cev);
+                    if (criteriaEntity != null) {
+                        finalCriterion.getSubCriterias().add(criteriaEntity);
+                    }
+                }
+                return finalCriterion;
+            } else {
+                return new CriteriaEntity(ce.getNomColonne(), ce.getCriteriaValue(), ce.getOperateur(), ce.isEndOfTheDay());
+            }
+        }
+    }
+
+    List<CriteriaEntity> criteriaEntityFromViewListToCriteriaEntityList(List<CriteriaEntityFromView> ces);
+
+    String dataProductionSourceToString(DataProductionSource source);
+
+    CriteriaEntityFromView criteriaEntityToCriteriaEntityFromView(CriteriaEntity ce);
+
+    ProductionMetaDataDto productionMetaDataToProductionMetaDataDto(ProductionMetaData metatData);
+
+    CommonDataProductionDto commonDataProductionToCommonDataProductionDto(CommonDataProduction cd);
+
+    ProductionMetaData productionMetaDataDtoToProductionMetaData(ProductionMetaDataDto dto);
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/BetweenOperatorValues.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/BetweenOperatorValues.java
new file mode 100644
index 0000000..ed042d6
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/BetweenOperatorValues.java
@@ -0,0 +1,39 @@
+package com.megatim.fdxcommons.model.pojo;
+
+/**
+ * POJO à utiliser pour stocker les bornes de l'opérateur BETWEEN
+ *
+ * @author ASUS
+ */
+public class BetweenOperatorValues {
+
+    private Object lowerBound;
+    private Object upperBound;
+
+    public BetweenOperatorValues(Object lowerBound, Object upperBound) {
+        this.lowerBound = lowerBound;
+        this.upperBound = upperBound;
+
+    }
+
+    public Object getUpperBound() {
+        return upperBound;
+    }
+
+    public void setUpperBound(Object upperBound) {
+        this.upperBound = upperBound;
+    }
+
+    public Object getLowerBound() {
+        return lowerBound;
+    }
+
+    public void setLowerBound(Object lowerBound) {
+        this.lowerBound = lowerBound;
+    }
+
+    @Override
+    public String toString() {
+        return '{' + "lowerBound=" + lowerBound + ", upperBound=" + upperBound + '}';
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/Constantes.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/Constantes.java
new file mode 100644
index 0000000..59cc59f
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/Constantes.java
@@ -0,0 +1,23 @@
+package com.megatim.fdxcommons.model.pojo;
+
+/**
+ *
+ * @author ASUS
+ */
+public class Constantes {
+    public static final String FIELD_NAME  = "field-name";
+    public static final String TAILLE  = "taille";
+    public static final String POSITION  = "position";
+    public static final String TYPE_DONNEE  = "typeDonnee";
+    public static final String TAILLE_PARTIE_DECIMALE  = "taillePartieDecimale";
+    public static final String EQUAL_PARAM  = "equalParam";
+    public static final String EQUAL_VALUE  = "equalValue";
+    public static final String FORMAT_DATE  = "formatDate";
+    public static final String SEPARATEUR_DATE  = "separateurDate";
+    public static final String ERROR_CODE  = "error-code";
+    public static final String HEADER_PRESENT  = "header-present";
+    public static final String LINE_DELIMITER  = "line-delimiter";
+    public static final String COLUMN_DELIMITER  = "column-delimiter";
+    public static final String LIGNE  = "ligne";
+    public static final String EXTENSION  = "extension";
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/CriteriaEntity.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/CriteriaEntity.java
new file mode 100644
index 0000000..aec1aa3
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/CriteriaEntity.java
@@ -0,0 +1,97 @@
+package com.megatim.fdxcommons.model.pojo;
+
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Entité permettant de construire un critère de recherche
+ *
+ * @author ASUS
+ */
+public class CriteriaEntity {
+
+    //nom de la colonne 
+    private String nomColonne;
+
+    //Valeur de comparaison lors de le recherche
+    private Object criteriaValue;
+
+    //Operateur de recherche
+    private Operateur operateur;
+
+    private boolean endOfTheDay = false;
+
+    private CriteriaLogicConnector criteriaLogicConnector;
+
+    private List<CriteriaEntity> subCriterias = new ArrayList<>();
+
+    public CriteriaEntity() {
+    }
+
+    public CriteriaEntity(String nomColonne, Object criteriaValue, Operateur operateur) {
+        this(nomColonne, criteriaValue, operateur, false);
+    }
+
+    public CriteriaEntity(String nomColonne, Object criteriaValue, Operateur operateur, boolean endOfTheDay) {
+        this.nomColonne = nomColonne;
+        this.criteriaValue = criteriaValue;
+        this.operateur = operateur;
+        this.endOfTheDay = endOfTheDay;
+    }
+
+    public CriteriaEntity(String nomColonne, Operateur operateur) {
+        this.nomColonne = nomColonne;
+        this.operateur = operateur;
+    }
+
+    public String getNomColonne() {
+        return nomColonne;
+    }
+
+    public void setNomColonne(String nomColonne) {
+        this.nomColonne = nomColonne;
+    }
+
+    public Object getCriteriaValue() {
+        return criteriaValue;
+    }
+
+    public void setCriteriaValue(Object criteriaValue) {
+        this.criteriaValue = criteriaValue;
+    }
+
+    public Operateur getOperateur() {
+        return operateur;
+    }
+
+    public void setOperateur(Operateur operateur) {
+        this.operateur = operateur;
+    }
+
+    public boolean isEndOfTheDay() {
+        return endOfTheDay;
+    }
+
+    public void setEndOfTheDay(boolean endOfTheDay) {
+        this.endOfTheDay = endOfTheDay;
+    }
+
+    public List<CriteriaEntity> getSubCriterias() {
+        return subCriterias;
+    }
+
+    public void setSubCriterias(List<CriteriaEntity> subCriterias) {
+        this.subCriterias = subCriterias;
+    }
+
+    public CriteriaLogicConnector getCriteriaLogicConnector() {
+        return criteriaLogicConnector;
+    }
+
+    public void setCriteriaLogicConnector(CriteriaLogicConnector criteriaLogicConnector) {
+        this.criteriaLogicConnector = criteriaLogicConnector;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/CriteriaEntityFromView.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/CriteriaEntityFromView.java
new file mode 100644
index 0000000..9a9da8d
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/CriteriaEntityFromView.java
@@ -0,0 +1,49 @@
+package com.megatim.fdxcommons.model.pojo;
+
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.ArrayList;
+import java.util.List;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * POJO permettant de contenir les critères de recherche provenant directement
+ * de la vue
+ *
+ * @author ASUS
+ */
+@ApiModel(description = "Structure représentant le critère de sélection des lignes pour un type de fichier")
+@Getter
+@Setter
+public class CriteriaEntityFromView {
+
+    //nom de la colonne 
+    @ApiModelProperty(value = "nom d'une colonne du type de fichier", required = true)
+    private String nomColonne;
+
+    @ApiModelProperty(value = "valeur du critère sur la colonne", required = true)
+    private Object criteriaValue;
+
+    @ApiModelProperty(value = "opérateur logique", required = true, allowableValues = "IN,NOT IN,IS NULL,IS NOT NULL,BETWEEN,NOT BETWEEN,LIKE,...")
+    private Operateur operateur;
+    
+    private boolean endOfTheDay = false;
+
+    private CriteriaLogicConnector criteriaLogicConnector;
+
+    private List<CriteriaEntityFromView> subCriterias = new ArrayList<>();
+
+    public CriteriaEntityFromView() {
+
+    }
+
+    public CriteriaEntityFromView(String nomColonne, Object criteriaValue, Operateur operateur) {
+        this.nomColonne = nomColonne;
+        this.criteriaValue = criteriaValue;
+        this.operateur = operateur;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/CriteriaFormRequest.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/CriteriaFormRequest.java
new file mode 100644
index 0000000..72179d6
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/CriteriaFormRequest.java
@@ -0,0 +1,24 @@
+package com.megatim.fdxcommons.model.pojo;
+
+/**
+ *
+ * @author lenovo
+ */
+public class CriteriaFormRequest {
+
+    private CriteriaEntityFromView criteria;
+
+    public CriteriaFormRequest() {}
+
+    public CriteriaFormRequest(CriteriaEntityFromView criteria) {
+        this.criteria = criteria;
+    }
+
+    public CriteriaEntityFromView getCriteria() {
+        return criteria;
+    }
+
+    public void setCriteria(CriteriaEntityFromView criteria) {
+        this.criteria = criteria;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/DataInMemory.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/DataInMemory.java
new file mode 100644
index 0000000..98c1311
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/DataInMemory.java
@@ -0,0 +1,38 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.pojo;
+
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxcommons.model.referentiel.natureproduction.NatureProductionFichier;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+@NoArgsConstructor
+public class DataInMemory {
+
+    private Referentiel referentielEnCours;
+
+    private Map<String, TypeFichier> codeTypeFichierToTypeFichiers = new HashMap<>();
+
+    private Map<String, Map<String, ColumnDefinition>> typeFichierToColumnDefinitions = new HashMap<>();
+    
+    private Map<String, NatureProductionFichier> typeFichierToNatureProductionsFichiers = new HashMap<>();
+    
+    private Map<String, Set<String>> typeFichierToParticipantsEnvoi = new HashMap<>();
+    
+    private Map<String, Set<String>> typeFichierToParticipantsReception = new HashMap<>();
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/JsonColumnDefinition.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/JsonColumnDefinition.java
new file mode 100644
index 0000000..3931d01
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/JsonColumnDefinition.java
@@ -0,0 +1,46 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.pojo;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import java.util.HashMap;
+import java.util.Map;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class JsonColumnDefinition {
+
+    private final TypeDonnee typeDonnee;
+
+    private final String name;
+
+    private final int lengthh;
+
+    private final boolean required;
+
+    private final boolean collection;
+
+    private String formatDate;
+
+    private String codeDelimiteurDate;
+
+    private final Map<String,JsonColumnDefinition> columnNameToColumnDefinition = new HashMap<>();
+
+    public JsonColumnDefinition(TypeDonnee typeDonnee, String name, int lengthh, String formatDate, boolean required, boolean collection) {
+        this.typeDonnee = typeDonnee;
+        this.name = name;
+        this.lengthh = lengthh;
+        this.required = required;
+        this.collection = collection;
+        this.formatDate = formatDate;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/JsonTableDefinition.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/JsonTableDefinition.java
new file mode 100644
index 0000000..c420fe6
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/JsonTableDefinition.java
@@ -0,0 +1,59 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.pojo;
+
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonTableDefinition {
+
+    private final String tableName;
+    private final String parentTableName;
+    /**
+<<<<<<< HEAD
+     * Nom du champ au niveau du parent qui contenir la donnée si champ encours de definition est une liste ou un objet.
+     * Utilisé uniquement pour faciliter l'extraction des données 
+=======
+     * Nom du champ au niveau du parent qui contenir la donnée si champ encours
+     * de definition est une liste ou un objet. Utilisé uniquement pour
+     * faciliter l'extraction des données
+>>>>>>> 5b75241178fbfc33b6de4290c8bdad4b7cbbf3b8
+     */
+    private final String parentFieldName;
+    private final List<ColumnDefinition> columnDefs;
+    private final List<JsonTableDefinition> tablesDefinition = new ArrayList<>();
+
+    public JsonTableDefinition(String tableName, List<ColumnDefinition> columnDefs, String parentTableName, String parentFieldName) {
+        this.tableName = tableName;
+        this.columnDefs = columnDefs;
+        this.parentTableName = parentTableName;
+        this.parentFieldName = parentFieldName;
+    }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public List<ColumnDefinition> getColumnDefs() {
+        return columnDefs;
+    }
+
+    public List<JsonTableDefinition> getTablesDefinition() {
+        return tablesDefinition;
+    }
+
+    public String getParentTableName() {
+        return parentTableName;
+    }
+
+    public String getParentFieldName() {
+        return parentFieldName;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/OrderByDefinition.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/OrderByDefinition.java
new file mode 100644
index 0000000..ed00db3
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/OrderByDefinition.java
@@ -0,0 +1,31 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.pojo;
+
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class OrderByDefinition {
+
+    private String fieldName;
+
+    private OrderByType orderByType = OrderByType.ASC;
+
+    public OrderByDefinition(String fieldName, OrderByType orderByType) {
+        this.fieldName = fieldName;
+        this.orderByType = orderByType;
+    }
+
+    public OrderByDefinition(String fieldName) {
+        this.fieldName = fieldName;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/PageData.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/PageData.java
new file mode 100644
index 0000000..0cade5c
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/PageData.java
@@ -0,0 +1,25 @@
+package com.megatim.fdxcommons.model.pojo;
+
+import java.util.List;
+import java.util.Map;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class PageData {
+
+    private List<Map<String, Object>> loadedData;
+
+    private int pageNumber;
+
+    private int pageSize;
+
+    private long totalNumberOfElements;
+    
+    private String token;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/QueryParameter.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/QueryParameter.java
new file mode 100644
index 0000000..6b884f8
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/QueryParameter.java
@@ -0,0 +1,68 @@
+package com.megatim.fdxcommons.model.pojo;
+
+/**
+ * Entité utilisée pour la construction des paramètres des requêtes préparées
+ *
+ * @author ASUS
+ */
+public class QueryParameter {
+
+    private int index; // index du paramètre dans la requête
+
+    private String nomColonne; // nom de la colonne
+
+    private Object parameterValue; // Nouvelle valeur à mettre en BD
+
+    private String value;
+
+    public QueryParameter() {
+    }
+
+    public QueryParameter(int index, String nomColonne) {
+        this.index = index;
+        this.nomColonne = nomColonne;
+    }
+
+    public QueryParameter(String nomColonne, Object parameterValue) {
+        this.nomColonne = nomColonne;
+        this.parameterValue = parameterValue;
+    }
+
+    public int getIndex() {
+        return index;
+    }
+
+    public void setIndex(int index) {
+        this.index = index;
+    }
+
+    public String getNomColonne() {
+        return nomColonne;
+    }
+
+    public void setNomColonne(String nomColonne) {
+        this.nomColonne = nomColonne;
+    }
+
+    public Object getParameterValue() {
+        return parameterValue;
+    }
+
+    public void setParameterValue(Object parameterValue) {
+        this.parameterValue = parameterValue;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String toString() {
+        return "QueryParameter{" + "index=" + index + ", nomColonne=" + nomColonne + ", parameterValue=" + parameterValue + ", value=" + value + '}';
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/QueryParameterFromView.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/QueryParameterFromView.java
new file mode 100644
index 0000000..ede2c51
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/QueryParameterFromView.java
@@ -0,0 +1,37 @@
+package com.megatim.fdxcommons.model.pojo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * POJO permettant de contenir les valeurs(provenant directement de la vue) à
+ * mettre à jour en BD
+ *
+ * @author ASUS
+ */
+@ApiModel(description="Structure représentant la valeur de mise à jour d'une colonne pour un type de fichier")
+public class QueryParameterFromView {
+
+    @ApiModelProperty(value = "nom d'une colonne du type de fichier", required = true)
+    private String nomColonne; // nom de la colonne
+    
+    @ApiModelProperty(value = "valeur à mettre à jour pour la colonne sélectionnée", required = true)
+    private String parameterValue;
+
+    public String getNomColonne() {
+        return nomColonne;
+    }
+
+    public void setNomColonne(String nomColonne) {
+        this.nomColonne = nomColonne;
+    }
+
+    public String getParameterValue() {
+        return parameterValue;
+    }
+
+    public void setParameterValue(String parameterValue) {
+        this.parameterValue = parameterValue;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/ReferentielToImportData.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/ReferentielToImportData.java
new file mode 100644
index 0000000..80c1a9b
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/ReferentielToImportData.java
@@ -0,0 +1,69 @@
+package com.megatim.fdxcommons.model.pojo;
+
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import com.megatim.fdxcommons.model.integration.json.TypeFichierJson;
+import com.megatim.fdxcommons.model.referentiel.ApplicationSource;
+import com.megatim.fdxcommons.model.referentiel.ExtensionFichier;
+import com.megatim.fdxcommons.model.referentiel.GroupeNoeud;
+import com.megatim.fdxcommons.model.referentiel.GroupeParticipant;
+import com.megatim.fdxcommons.model.referentiel.Noeud;
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import com.megatim.fdxcommons.model.referentiel.Pays;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxcommons.model.referentiel.Routage;
+import com.megatim.fdxcommons.model.referentiel.StructureLigne;
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxcommons.model.referentiel.ValidateurFichier;
+import com.megatim.fdxcommons.model.referentiel.ValidateurFichierConfiguration;
+import com.megatim.fdxcommons.model.referentiel.natureproduction.NatureProductionFichier;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class ReferentielToImportData implements Serializable {
+
+    private List<ApplicationSource> applicationSources = new ArrayList<>();
+
+    private List<ExtensionFichier> extensionFichiers = new ArrayList<>();
+
+    private List<GroupeNoeud> groupeNoeuds = new ArrayList<>();
+
+    private List<GroupeParticipant> groupeParticipants = new ArrayList<>();
+
+    private List<Noeud> noeuds = new ArrayList<>();
+
+    private List<Participant> participants = new ArrayList<>();
+
+    private List<Pays> pays = new ArrayList<>();
+
+    private List<Referentiel> referentiels = new ArrayList<>();
+
+    private List<Routage> routages = new ArrayList<>();
+
+    private List<StructureLigne> structureLignes = new ArrayList<>();
+
+    private List<TypeFichier> typeFichiers = new ArrayList<>();
+
+    private List<ValidateurFichierConfiguration> validateurFichierConfigurations = new ArrayList<>();
+
+    private List<ValidateurFichier> validateurFichiers = new ArrayList<>();
+
+    private List<TableDefinition> tableDefinitions = new ArrayList<>();
+
+    private List<NatureProductionFichier> natureProductionFichiers = new ArrayList<>();
+    
+    private List<TypeFichierJson> typeFichiersJson = new ArrayList<>();
+
+    private Referentiel referentielEnCours;
+
+    private String fileName;
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/SelectResult.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/SelectResult.java
new file mode 100644
index 0000000..39906d7
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/SelectResult.java
@@ -0,0 +1,36 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.pojo;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * @author ASUS
+ */
+public class SelectResult {
+    private int lastReadIndex = -1;
+    
+    List<Map<String, Object>> loadedData = new ArrayList<>();
+
+    public int getLastReadIndex() {
+        return lastReadIndex;
+    }
+
+    public void setLastReadIndex(int lastReadIndex) {
+        this.lastReadIndex = lastReadIndex;
+    }
+
+    public List<Map<String, Object>> getLoadedData() {
+        return loadedData;
+    }
+
+    public void setLoadedData(List<Map<String, Object>> loadedData) {
+        this.loadedData = loadedData;
+    }
+    
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/UpdateQueryPojo.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/UpdateQueryPojo.java
new file mode 100644
index 0000000..cef8e38
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/pojo/UpdateQueryPojo.java
@@ -0,0 +1,42 @@
+package com.megatim.fdxcommons.model.pojo;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public class UpdateQueryPojo {
+
+    private CriteriaEntityFromView criterionFromView;
+
+    private CriteriaEntity criterion;
+
+    private List<QueryParameterFromView> parameters = new ArrayList<>();
+
+    public CriteriaEntityFromView getCriterionFromView() {
+        return criterionFromView;
+    }
+
+    public void setCriteriasFromView(CriteriaEntityFromView criterionFromView) {
+        this.criterionFromView = criterionFromView;
+    }
+
+    public CriteriaEntity getCriterion() {
+        return criterion;
+    }
+
+    public void setCriterion(CriteriaEntity criterion) {
+        this.criterion = criterion;
+    }
+
+    public List<QueryParameterFromView> getParameters() {
+        return parameters;
+    }
+
+    public void setParameters(List<QueryParameterFromView> parameters) {
+        this.parameters = parameters;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/ApplicationSource.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/ApplicationSource.java
new file mode 100644
index 0000000..6310e74
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/ApplicationSource.java
@@ -0,0 +1,96 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.referentiel;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Entity
+@Getter
+@Setter
+@NoArgsConstructor
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class ApplicationSource implements Serializable {
+
+    @Id
+    @NotEmpty(message = "Le libellé obligatoire")
+    private String libelle;
+
+    private String description;
+
+    @NotNull(message = "L'application source doit être associée à un réfrérentiel en préparation")
+    @ManyToOne
+    private Referentiel referentiel;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateCreation;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+    
+    @OneToMany(mappedBy = "applicationSource", cascade = CascadeType.ALL)
+    @XmlTransient
+    @JsonIgnore
+    private Set<StructureLigne> structureLignes = new HashSet<>();
+
+    @Override
+    public String toString() {
+        return this.getLibelle();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final ApplicationSource other = (ApplicationSource) obj;
+        if (this.getLibelle() != null && !this.getLibelle().equals(other.getLibelle())) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 5;
+        hash = 19 * hash + Objects.hashCode(this.libelle);
+        return hash;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/ExtensionFichier.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/ExtensionFichier.java
new file mode 100644
index 0000000..621aca9
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/ExtensionFichier.java
@@ -0,0 +1,90 @@
+package com.megatim.fdxcommons.model.referentiel;
+
+import com.megatim.fdxcommons.model.enumeration.TypeExtension;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Objects;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+
+/**
+ *
+ * @author ASUS
+ */
+@Entity
+@Getter
+@Setter
+@XmlRootElement(name = "extensionFichiers")
+@XmlAccessorType(XmlAccessType.FIELD)
+@NoArgsConstructor
+public class ExtensionFichier implements Serializable {
+
+    @Id
+    @NotEmpty(message = "Extension du fichier obligatoire")
+    @CriteriaEntitySearch(libelle = "Extension", rang = 1)
+    private String extension;
+
+    @NotEmpty(message = "Le libellé du fichier est obligatoire")
+    @CriteriaEntitySearch(libelle = "Libellé", rang = 2)
+    private String libelle;
+
+    @Enumerated(EnumType.STRING)
+    @NotNull(message = "Le type d'extension du fichier est obligatoire")
+    @CriteriaEntitySearch(libelle = "Type extension", rang = 3)
+    private TypeExtension typeExtension;
+
+    @NotNull(message = "L'extension de fichier doit être associée à un réfrérentiel en préparation")
+    @ManyToOne
+    @CriteriaEntitySearch(libelle = "Référentiel", fieldName = "referentiel.version", rang = 4)
+    private Referentiel referentiel;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateCreation;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+
+    @Override
+    public String toString() {
+        return this.getLibelle() + " (" + this.getExtension() + ")";
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 53 * hash + Objects.hashCode(this.extension);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (!(obj instanceof ExtensionFichier)) {
+            return false;
+        }
+        ExtensionFichier other = (ExtensionFichier) obj;
+        if (this.getExtension() != null && !this.getExtension().equals(other.getExtension())) {
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/GroupeNoeud.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/GroupeNoeud.java
new file mode 100644
index 0000000..49a73ae
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/GroupeNoeud.java
@@ -0,0 +1,114 @@
+package com.megatim.fdxcommons.model.referentiel;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+
+/**
+ *
+ * @author ASUS
+ */
+@Entity
+@Getter
+@Setter
+@XmlRootElement(name = "groupeNoeuds")
+@XmlAccessorType(XmlAccessType.FIELD)
+@NoArgsConstructor
+public class GroupeNoeud implements Serializable {
+
+    @Id
+    @NotEmpty(message = "Code obligatoire")
+    @CriteriaEntitySearch(libelle = "Code", rang = 1)
+    private String code;
+
+    @NotEmpty(message = "Libellé obligatoire")
+    @CriteriaEntitySearch(libelle = "Libellé", rang = 2)
+    private String libelle;
+
+    private String description;
+
+    @NotNull(message = "Le groupe de noeud doit être associé à un référentiel en préparation")
+    @ManyToOne
+    @CriteriaEntitySearch(libelle = "Référentiel", fieldName = "referentiel.version", rang = 3)
+    private Referentiel referentiel;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateCreation;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+
+    @Size(min = 1, message = "Un noeud au moins doit être sélectionné")
+    @ManyToMany
+    @JoinTable(
+            name = "groupe_noeud_association",
+            joinColumns = @JoinColumn(name = "groupe_id"),
+            inverseJoinColumns = @JoinColumn(name = "noeud_id"))
+    private Set<Noeud> noeuds = new HashSet<>();
+
+    @XmlTransient
+    @ManyToMany(mappedBy = "groupeNoeudsEnvoi")
+    @JsonIgnore
+    private Set<Routage> routageEnvois = new HashSet<>();
+
+    @XmlTransient
+    @ManyToMany(mappedBy = "groupeNoeudsReception")
+    @JsonIgnore
+    private Set<Routage> routageReceptions = new HashSet<>();
+
+    @Override
+    public String toString() {
+        return this.getLibelle();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (!(obj instanceof GroupeNoeud)) {
+            return false;
+        }
+        final GroupeNoeud other = (GroupeNoeud) obj;
+        if (this.getCode() != null && !this.getCode().equals(other.getCode())) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 59 * hash + Objects.hashCode(this.code);
+        return hash;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/GroupeParticipant.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/GroupeParticipant.java
new file mode 100644
index 0000000..61a2273
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/GroupeParticipant.java
@@ -0,0 +1,113 @@
+package com.megatim.fdxcommons.model.referentiel;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+
+/**
+ *
+ * @author ASUS
+ */
+@Entity
+@Getter
+@Setter
+@NoArgsConstructor
+@XmlRootElement(name = "groupeParticipants")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class GroupeParticipant implements Serializable {
+
+    @Id
+    @NotEmpty(message = "Code obligatoire")
+    @CriteriaEntitySearch(libelle = "Code", rang = 1)
+    private String code;
+
+    @NotEmpty(message = "Libellé obligatoire")
+    @CriteriaEntitySearch(libelle = "Libellé", rang = 2)
+    private String libelle;
+
+    private String description;
+
+    @NotNull(message = "Le groupe de participants doit être associé à un référentiel en préparation")
+    @ManyToOne
+    @CriteriaEntitySearch(libelle = "Référentiel", fieldName = "referentiel.version", rang = 3)
+    private Referentiel referentiel;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateCreation;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+    @Size(min = 1, message = "Un participant doit au moins être sélectionné")
+    @ManyToMany
+    @JoinTable(
+            name = "grpe_pct_ass",
+            joinColumns = @JoinColumn(name = "groupe_id"),
+            inverseJoinColumns = @JoinColumn(name = "participant_id"))
+    private Set<Participant> participants = new HashSet<>();
+
+    @XmlTransient
+    @JsonIgnore
+    @ManyToMany(mappedBy = "groupeParticipantsEnvoi")
+    private Set<Routage> routageEnvois = new HashSet<>();
+
+    @XmlTransient
+    @JsonIgnore
+    @ManyToMany(mappedBy = "groupeParticipantsReception")
+    private Set<Routage> routageReceptions = new HashSet<>();
+
+    @Override
+    public String toString() {
+        return this.getCode() + " " + this.getLibelle();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (!(obj instanceof GroupeParticipant)) {
+            return false;
+        }
+        final GroupeParticipant other = (GroupeParticipant) obj;
+        if (this.getCode() != null && !this.getCode().equals(other.getCode())) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 97 * hash + Objects.hashCode(this.code);
+        return hash;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/LocalDateTimeAdapter.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/LocalDateTimeAdapter.java
new file mode 100644
index 0000000..f3910a7
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/LocalDateTimeAdapter.java
@@ -0,0 +1,31 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.referentiel;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import javax.xml.bind.annotation.adapters.XmlAdapter;
+
+/**
+ *
+ * @author ASUS
+ */
+public class LocalDateTimeAdapter extends XmlAdapter<String, LocalDateTime> {
+
+    @Override
+    public LocalDateTime unmarshal(String v) throws Exception {
+        try {
+            return LocalDateTime.parse(v);
+        } catch (Exception ex) {
+            return LocalDateTime.parse(v, DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss"));
+        }
+    }
+
+    @Override
+    public String marshal(LocalDateTime v) throws Exception {
+        return v.toString();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/Noeud.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/Noeud.java
new file mode 100644
index 0000000..b0f3f2b
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/Noeud.java
@@ -0,0 +1,111 @@
+package com.megatim.fdxcommons.model.referentiel;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+
+/**
+ *
+ * @author ASUS
+ */
+@Entity
+@Getter
+@Setter
+@NoArgsConstructor
+@XmlRootElement(name = "noeuds")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class Noeud implements Serializable {
+
+    @Id
+    @NotEmpty(message = "Code obligatoire")
+    @Size(min = 4, message = "Le format du code est incorrect")
+    @Size(max = 16, message = "Le format du code est incorrect")
+    @CriteriaEntitySearch(libelle = "Code", rang = 1)
+    private String code;
+
+    @NotEmpty(message = "Libellé obligatoire")
+    @CriteriaEntitySearch(libelle = "Libellé", rang = 2)
+    private String libelle;
+
+    @NotNull(message = "Le noeud doit être associé à un référentiel en préparation")
+    @ManyToOne
+    @CriteriaEntitySearch(libelle = "Référentiel", fieldName = "referentiel.version", rang = 3)
+    private Referentiel referentiel;
+
+    @NotNull(message = "Participant obligatoire")
+    @ManyToOne
+    @CriteriaEntitySearch(libelle = "Participant", fieldName = "participant.code", rang = 4)
+    private Participant participant;
+
+    @XmlTransient
+    @ManyToMany(mappedBy = "noeuds")
+    @JsonIgnore
+    private Set<GroupeNoeud> groupeNoeuds;
+
+    @XmlTransient
+    @ManyToMany(mappedBy = "noeudsEnvoi")
+    @JsonIgnore
+    private Set<Routage> routageEnvois = new HashSet<>();
+
+    @XmlTransient
+    @ManyToMany(mappedBy = "noeudsReception")
+    @JsonIgnore
+    private Set<Routage> routageReceptions = new HashSet<>();
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateCreation;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+
+    @Override
+    public String toString() {
+        return this.getCode() + " - " + this.getLibelle();
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 53 * hash + Objects.hashCode(this.code);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (!(obj instanceof Noeud)) {
+            return false;
+        }
+        Noeud other = (Noeud) obj;
+        if (this.getCode() != null && !this.getCode().equals(other.getCode())) {
+            return false;
+        }
+        return true;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/Participant.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/Participant.java
new file mode 100644
index 0000000..8f17f22
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/Participant.java
@@ -0,0 +1,130 @@
+package com.megatim.fdxcommons.model.referentiel;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+
+/**
+ *
+ * @author ASUS
+ */
+@Entity
+@Getter
+@Setter
+@XmlRootElement(name = "participants")
+@XmlAccessorType(XmlAccessType.FIELD)
+@NoArgsConstructor
+public class Participant implements Serializable {
+
+    @Id
+    @NotEmpty(message = "Code obligatoire")
+    @Size(min = 3, message = "Le champ code doit avoir 3 caractères")
+    @Size(max = 3, message = "Le champ code doit avoir 3 caractères")
+    @CriteriaEntitySearch(libelle = "Code", fieldName = "code", rang = 1)
+    private String code;
+
+    @NotEmpty(message = "Libellé obligatoire")
+    @CriteriaEntitySearch(libelle = "Libellé", fieldName = "code", rang = 2)
+    private String libelle;
+
+    private String description;
+
+    private String rue;
+
+    private String adresse;
+
+    private String ville;
+
+    private String email;
+
+    @NotNull(message = "Le participant doit être associé à un référentiel en préparation")
+    @ManyToOne
+    @CriteriaEntitySearch(libelle = "Référentiel", fieldName = "referentiel.version", rang = 3)
+    private Referentiel referentiel;
+
+    @NotNull(message = "Pays obligatoire")
+    @ManyToOne
+    @CriteriaEntitySearch(libelle = "Pays", fieldName = "pays.code", rang = 4)
+    private Pays pays;
+
+    @XmlTransient
+    @OneToMany(mappedBy = "participant")
+    @JsonIgnore
+    private Set<Noeud> noeuds;
+
+    @XmlTransient
+    @ManyToMany(mappedBy = "participants")
+    @JsonIgnore
+    private Set<GroupeParticipant> groupeParticipants;
+
+    @XmlTransient
+    @ManyToMany(mappedBy = "participantsEnvoi")
+    @JsonIgnore
+    private Set<Routage> routageEnvois = new HashSet<>();
+
+    @XmlTransient
+    @ManyToMany(mappedBy = "participantsReception")
+    @JsonIgnore
+    private Set<Routage> routageReceptions = new HashSet<>();
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateCreation;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+
+    @Override
+    public String toString() {
+        return this.getCode() + " - " + this.getLibelle();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final Participant other = (Participant) obj;
+        if (this.getCode() != null && !this.getCode().equals(other.getCode())) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 13 * hash + Objects.hashCode(this.code);
+        return hash;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/Pays.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/Pays.java
new file mode 100644
index 0000000..69b8f59
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/Pays.java
@@ -0,0 +1,98 @@
+package com.megatim.fdxcommons.model.referentiel;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+
+/**
+ *
+ * @author ASUS
+ */
+@Entity
+@Getter
+@Setter
+@NoArgsConstructor
+@XmlRootElement(name = "paysList")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class Pays implements Serializable {
+
+    @Id
+    @NotEmpty(message = "Code obligatoire")
+    @CriteriaEntitySearch(libelle = "Code", rang = 1)
+    private String code;
+
+    @NotEmpty(message = "Libelle obligatoire")
+    @CriteriaEntitySearch(libelle = "Libellé", rang = 2)
+    private String libelle;
+
+    @XmlTransient
+    @OneToMany(mappedBy = "pays")
+    @JsonIgnore
+    Set<Participant> participants = new HashSet<>();
+
+    @NotNull(message = "Le pays doit être associé à un référentiel en préparation")
+    @ManyToOne(cascade = CascadeType.REFRESH)
+    @CriteriaEntitySearch(libelle = "Référentiel", fieldName = "referentiel.version", rang = 3)
+    private Referentiel referentiel;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    @CriteriaEntitySearch(libelle = "Date enregistrement", visible = false)
+    private LocalDateTime dateCreation;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+
+    @Override
+    public String toString() {
+        return this.getCode() + " - " + this.getLibelle();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final Pays other = (Pays) obj;
+        if (this.getCode() != null && !this.getCode().equals(other.getCode())) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 5;
+        hash = 29 * hash + Objects.hashCode(this.code);
+        return hash;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/Referentiel.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/Referentiel.java
new file mode 100644
index 0000000..e09c0bd
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/Referentiel.java
@@ -0,0 +1,140 @@
+package com.megatim.fdxcommons.model.referentiel;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.megatim.fdxcommons.model.enumeration.StatutReferentiel;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+
+/**
+ *
+ * @author ASUS
+ */
+@Entity
+@Getter
+@Setter
+@NoArgsConstructor
+@XmlRootElement(name = "referentielList")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class Referentiel implements Serializable {
+
+    @Id
+    @NotBlank(message = "La version est obligatoire")
+    @CriteriaEntitySearch(libelle = "Version", rang = 1)
+    private String version;
+
+    @NotBlank(message = "La description est obligatoire")
+    @CriteriaEntitySearch(libelle = "Description", rang = 2)
+    private String description;
+
+    @NotNull(message = "Le statut du référentiel est obligatoire")
+    @Enumerated(EnumType.STRING)
+    @CriteriaEntitySearch(libelle = "Statut Referentiel", rang = 3)
+    private StatutReferentiel statutReferentiel;
+
+    @OneToMany(mappedBy = "referentiel")
+    @XmlTransient
+    @JsonIgnore
+    private Set<ExtensionFichier> extensionFichiers = new HashSet<>();
+
+    @OneToMany(mappedBy = "referentiel")
+    @XmlTransient
+    @JsonIgnore
+    private Set<ApplicationSource> applicationSources = new HashSet<>();
+
+    @XmlTransient
+    @OneToMany(mappedBy = "referentiel")
+    @JsonIgnore
+    private Set<Routage> routages = new HashSet<>();
+
+    @XmlTransient
+    @OneToMany(mappedBy = "referentiel")
+    @JsonIgnore
+    private Set<Pays> pays = new HashSet<>();
+
+    @XmlTransient
+    @OneToMany(mappedBy = "referentiel")
+    @JsonIgnore
+    private Set<Participant> participants = new HashSet<>();
+
+    @XmlTransient
+    @OneToMany(mappedBy = "referentiel")
+    @JsonIgnore
+    private Set<ValidateurFichierConfiguration> validateurFichierConfigurations = new HashSet<>();
+
+    @XmlTransient
+    @OneToMany(mappedBy = "referentiel")
+    @JsonIgnore
+    private Set<Noeud> noeuds = new HashSet<>();
+
+    @XmlTransient
+    @OneToMany(mappedBy = "referentiel")
+    @JsonIgnore
+    private Set<GroupeParticipant> groupeParticipants = new HashSet<>();
+
+    @XmlTransient
+    @OneToMany(mappedBy = "referentiel")
+    @JsonIgnore
+    private Set<GroupeNoeud> groupeNoeuds = new HashSet<>();
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateCreation;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateGeneration;
+
+    @Override
+    public String toString() {
+        return this.getVersion();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final Referentiel other = (Referentiel) obj;
+        if (this.getVersion() != null && !this.getVersion().equals(other.getVersion())) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 3;
+        hash = 61 * hash + Objects.hashCode(this.version);
+        return hash;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/Routage.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/Routage.java
new file mode 100644
index 0000000..6ddd156
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/Routage.java
@@ -0,0 +1,152 @@
+package com.megatim.fdxcommons.model.referentiel;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+import javax.validation.constraints.NotNull;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+
+/**
+ *
+ * @author ASUS
+ */
+@Entity
+@IdClass(RoutageId.class)
+@Getter
+@Setter
+@XmlRootElement(name = "routageList")
+@XmlAccessorType(XmlAccessType.FIELD)
+@NoArgsConstructor
+public class Routage implements Serializable {
+
+    @Id
+    @NotNull(message = "Le type de fichier est obligatoire")
+    @ManyToOne
+    @CriteriaEntitySearch(libelle = "TypeFichier", fieldName = "typeFichier.code")
+    private TypeFichier typeFichier;
+
+    @Id
+    @NotNull(message = "Le routage doit être associé à un réfrérentiel en préparation")
+    @ManyToOne
+    @CriteriaEntitySearch(libelle = "Référentiel", fieldName = "referentiel.version")
+    private Referentiel referentiel;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateCreation;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateMiseAjour;
+
+    @ManyToMany
+    @JoinTable(
+            name = "rtge_nd",
+            joinColumns = {
+                @JoinColumn(name = "referentiel"),
+                @JoinColumn(name = "typeFichier")},
+            inverseJoinColumns = @JoinColumn(name = "noeud_id"))
+    private Set<Noeud> noeudsEnvoi = new HashSet<>();
+
+    @ManyToMany
+    @JoinTable(
+            name = "rtge_grpe_nd",
+            joinColumns = {
+                @JoinColumn(name = "referentiel"),
+                @JoinColumn(name = "typeFichier")},
+            inverseJoinColumns = @JoinColumn(name = "groupe_noeud_id"))
+    private Set<GroupeNoeud> groupeNoeudsEnvoi = new HashSet<>();
+
+    @ManyToMany
+    @JoinTable(
+            name = "rtge_pct",
+            joinColumns = {
+                @JoinColumn(name = "referentiel"),
+                @JoinColumn(name = "typeFichier")},
+            inverseJoinColumns = @JoinColumn(name = "participant_id"))
+    private Set<Participant> participantsEnvoi = new HashSet<>();
+
+    @ManyToMany
+    @JoinTable(
+            name = "rtge_grpe_pct",
+            joinColumns = {
+                @JoinColumn(name = "referentiel"),
+                @JoinColumn(name = "typeFichier")},
+            inverseJoinColumns = @JoinColumn(name = "groupe_participant_id"))
+    private Set<GroupeParticipant> groupeParticipantsEnvoi = new HashSet<>();
+
+    @ManyToMany
+    @JoinTable(
+            name = "rtge_nd_rcpt",
+            joinColumns = {
+                @JoinColumn(name = "referentiel"),
+                @JoinColumn(name = "typeFichier")},
+            inverseJoinColumns = @JoinColumn(name = "noeud_id"))
+    private Set<Noeud> noeudsReception = new HashSet<>();
+
+    @ManyToMany
+    @JoinTable(
+            name = "rtge_grpe_noeud_rcpt",
+            joinColumns = {
+                @JoinColumn(name = "referentiel"),
+                @JoinColumn(name = "typeFichier")},
+            inverseJoinColumns = @JoinColumn(name = "groupe_noeud_id"))
+    private Set<GroupeNoeud> groupeNoeudsReception = new HashSet<>();
+
+    @ManyToMany
+    @JoinTable(
+            name = "rtge_pct_rcpt",
+            joinColumns = {
+                @JoinColumn(name = "referentiel"),
+                @JoinColumn(name = "typeFichier")},
+            inverseJoinColumns = @JoinColumn(name = "participant_id"))
+    private Set<Participant> participantsReception = new HashSet<>();
+
+    @ManyToMany
+    @JoinTable(
+            name = "rtge_grpe_pct_rcpt",
+            joinColumns = {
+                @JoinColumn(name = "referentiel"),
+                @JoinColumn(name = "typeFichier")},
+            inverseJoinColumns = @JoinColumn(name = "grpe_pct_id"))
+    private Set<GroupeParticipant> groupeParticipantsReception = new HashSet<>();
+
+    private String createBy;
+
+    private String lastModifiedBy;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        Routage routage = (Routage) o;
+        return referentiel != null && referentiel.equals(routage.getReferentiel())
+                && typeFichier != null && typeFichier.equals(routage.getTypeFichier());
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 3;
+        hash = 79 * hash + Objects.hashCode(this.typeFichier);
+        hash = 79 * hash + Objects.hashCode(this.referentiel);
+        return hash;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/RoutageId.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/RoutageId.java
new file mode 100644
index 0000000..1639071
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/RoutageId.java
@@ -0,0 +1,19 @@
+package com.megatim.fdxcommons.model.referentiel;
+
+import java.io.Serializable;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ *
+ * @author ASUS
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class RoutageId implements Serializable {
+
+    private String typeFichier;
+    private String referentiel;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/StructureLigne.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/StructureLigne.java
new file mode 100644
index 0000000..64d3043
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/StructureLigne.java
@@ -0,0 +1,113 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.referentiel;
+
+import com.megatim.fdxcommons.model.enumeration.EtatIntegration;
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Objects;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.hibernate.validator.constraints.Range;
+
+/**
+ *
+ * @author ASUS
+ */
+@Entity
+@Getter
+@Setter
+@NoArgsConstructor
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class StructureLigne implements Serializable {
+
+    @Id
+    @NotEmpty(message = "L'identifiant est obligatoire")
+    private String id;
+
+    @Range(min = 1, message = "La position doit être supérieure à 0")
+    private int position;
+
+    @NotEmpty(message = "Le code est obligatoire")
+    private String code;
+
+    private String designation;
+
+    @Range(min = 1, message = "La taille doit être supérieure à 0")
+    private int taille;
+
+    private String source;
+
+    private String formatDate;
+
+    @Enumerated(EnumType.STRING)
+    @NotNull(message = "Le type de données est obligatoire")
+    private TypeDonnee typeDonnee;
+
+    @NotNull(message = "Le validateur de fichier doit être indiqué")
+    @ManyToOne
+    private ValidateurFichier validateurFichier;
+
+    @ManyToOne
+    private ApplicationSource applicationSource;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateCreation;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+
+//    @Enumerated(EnumType.STRING)
+//    private EtatIntegration etatIntegration = EtatIntegration.NOUVEAU;
+
+    @Override
+    public String toString() {
+        return this.code + " - " + this.designation;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (!(obj instanceof StructureLigne)) {
+            return false;
+        }
+        final StructureLigne other = (StructureLigne) obj;
+        if (this.getId() != null && !this.getId().equals(other.getId())) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 5;
+        hash = 47 * hash + Objects.hashCode(this.code);
+        return hash;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/TypeFichier.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/TypeFichier.java
new file mode 100644
index 0000000..6752827
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/TypeFichier.java
@@ -0,0 +1,121 @@
+package com.megatim.fdxcommons.model.referentiel;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.megatim.fdxcommons.model.enumeration.CategorieFichier;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+
+/**
+ *
+ * @author ASUS
+ */
+@Entity
+@Getter
+@Setter
+@XmlRootElement(name = "typeFichiersList")
+@XmlAccessorType(XmlAccessType.FIELD)
+@NoArgsConstructor
+public class TypeFichier implements Serializable {
+
+    @Id
+    @CriteriaEntitySearch(libelle = "Code", rang = 1)
+    private String code;
+
+    @NotEmpty(message = "Le libellé du type de fichier est obligatoire")
+    @CriteriaEntitySearch(libelle = "Libellé", rang = 2)
+    private String libelle;
+
+    private String description;
+
+    @ManyToOne
+    @CriteriaEntitySearch(libelle = "Participant", fieldName = "participant.code", rang = 3)
+    private Participant participant;
+
+    @NotNull(message = "Le type de fichier doit être associé à un référentiel en préparation")
+    @ManyToOne
+    @CriteriaEntitySearch(libelle = "Référentiel", fieldName = "referentiel.version", rang = 4)
+    private Referentiel referentiel;
+
+    @XmlTransient
+    @JsonIgnore
+    @OneToMany(mappedBy = "typeFichier")
+    private Set<Routage> routages = new HashSet<>();
+
+    @XmlTransient
+    @JsonIgnore
+    @OneToMany(mappedBy = "typeFichier")
+    private Set<ValidateurFichierConfiguration> validateurFichierConfigurations = new HashSet<>();
+
+    @XmlTransient
+    @JsonIgnore
+    @OneToMany(mappedBy = "typeFichier")
+    private Set<ValidateurFichier> validateurFichiers = new HashSet<>();
+
+    @NotNull(message = "La catégorie de fichier est obligatoire")
+    @Enumerated(EnumType.STRING)
+    private CategorieFichier categorieFichier;
+
+    @NotNull(message = "L'extension du type de fichier est obligatoire")
+    @ManyToOne
+    private ExtensionFichier extensionFichier;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateCreation;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+
+    @Override
+    public String toString() {
+        return this.getCode() + " - " + this.getLibelle();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (!(obj instanceof TypeFichier)) {
+            return false;
+        }
+        final TypeFichier other = (TypeFichier) obj;
+        if (this.getCode() != null && !this.getCode().equals(other.getCode())) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 3;
+        hash = 17 * hash + Objects.hashCode(this.code);
+        return hash;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/ValidateurFichier.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/ValidateurFichier.java
new file mode 100644
index 0000000..ac59c89
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/ValidateurFichier.java
@@ -0,0 +1,99 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.referentiel;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.validation.constraints.NotNull;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.hibernate.validator.constraints.Range;
+
+/**
+ *
+ * @author ASUS
+ */
+@Entity
+@Getter
+@Setter
+@NoArgsConstructor
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class ValidateurFichier implements Serializable {
+
+    @Id
+    @NotNull(message = "Aucun identifiant spécifié")
+    private String id;
+
+    @Range(min = 1, message = "Le nombre de position doit être supérieure à 0")
+    private int nombrePosition;
+
+    @NotNull(message = "Le type de fichier est obligatoire")
+    @ManyToOne
+    private TypeFichier typeFichier;
+
+    @OneToMany(mappedBy = "validateurFichier", cascade = CascadeType.ALL)
+    @XmlTransient
+    @JsonIgnore
+    private Set<StructureLigne> structureLignes = new HashSet<>();
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateCreation;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+
+//    @Enumerated(EnumType.STRING)
+//    private EtatIntegration etatIntegration = EtatIntegration.NOUVEAU;
+    @Override
+    public String toString() {
+        return this.typeFichier.toString();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (!(obj instanceof ValidateurFichier)) {
+            return false;
+        }
+        final ValidateurFichier other = (ValidateurFichier) obj;
+        if (this.getTypeFichier() != null && !this.getTypeFichier().equals(other.getTypeFichier())) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 3;
+        hash = 53 * hash + Objects.hashCode(this.typeFichier);
+        return hash;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/ValidateurFichierConfiguration.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/ValidateurFichierConfiguration.java
new file mode 100644
index 0000000..d94e347
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/ValidateurFichierConfiguration.java
@@ -0,0 +1,76 @@
+package com.megatim.fdxcommons.model.referentiel;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Objects;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.ManyToOne;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Entity
+@XmlRootElement(name = "validateurFichierConfigurationList")
+@XmlAccessorType(XmlAccessType.FIELD)
+@IdClass(ValidateurFichierConfigurationId.class)
+@Getter
+@Setter
+@NoArgsConstructor
+public class ValidateurFichierConfiguration implements Serializable {
+
+    @Id
+    @NotNull(message = "Le type de fichier est obligatoire")
+    @ManyToOne
+    private TypeFichier typeFichier;
+
+    @Id
+    @NotNull(message = "La configuration du validateur doit être associée à un réfrérentiel en préparation")
+    @ManyToOne
+    private Referentiel referentiel;
+
+    @NotEmpty(message = "Le fichier de validation est obligatoire")
+    private String fileName;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateCreation;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        ValidateurFichierConfiguration other = (ValidateurFichierConfiguration) o;
+        return referentiel != null && referentiel.equals(other.getReferentiel())
+                && typeFichier != null && typeFichier.equals(other.getTypeFichier());
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 5;
+        hash = 71 * hash + Objects.hashCode(this.typeFichier);
+        hash = 71 * hash + Objects.hashCode(this.referentiel);
+        return hash;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/ValidateurFichierConfigurationId.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/ValidateurFichierConfigurationId.java
new file mode 100644
index 0000000..7effab0
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/ValidateurFichierConfigurationId.java
@@ -0,0 +1,23 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.referentiel;
+
+import java.io.Serializable;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ *
+ * @author ASUS
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class ValidateurFichierConfigurationId implements Serializable {
+    private String typeFichier;
+    private String referentiel;
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/historique/ReferentielIntegrationHistorique.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/historique/ReferentielIntegrationHistorique.java
new file mode 100644
index 0000000..5f1e936
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/historique/ReferentielIntegrationHistorique.java
@@ -0,0 +1,75 @@
+package com.megatim.fdxcommons.model.referentiel.historique;
+
+import java.io.Serializable;
+import java.util.Objects;
+import java.util.Set;
+import javax.persistence.CollectionTable;
+import javax.persistence.ElementCollection;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.JoinColumn;
+import javax.validation.constraints.NotEmpty;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+@Entity
+@IdClass(ReferentielIntegrationHistoriqueId.class)
+@NoArgsConstructor
+@AllArgsConstructor
+public class ReferentielIntegrationHistorique implements Serializable {
+
+    @Id
+    @NotEmpty(message = "Le code du type fichier est obligatoire")
+    private String codeTypeFichier;
+
+    @Id
+    @NotEmpty(message = "La version du référentiel est obligatoire")
+    private String referentielVersion;
+
+    @ElementCollection(targetClass = String.class, fetch = FetchType.EAGER)
+     @CollectionTable(
+        name = "ref_int_historique_depending_refs", // Name of the table for the collection
+        joinColumns = {@JoinColumn(name = "codetypefichier"), @JoinColumn(name = "referentielversion")} // Foreign key column in the collection table
+    )
+    private Set<String> dependingReferentiels;
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 67 * hash + Objects.hashCode(this.codeTypeFichier);
+        hash = 67 * hash + Objects.hashCode(this.referentielVersion);
+        hash = 67 * hash + Objects.hashCode(this.dependingReferentiels);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final ReferentielIntegrationHistorique other = (ReferentielIntegrationHistorique) obj;
+        
+        if (other.getCodeTypeFichier() != null && other.getReferentielVersion() != null) {
+            return other.getCodeTypeFichier().equals(this.codeTypeFichier) && other.getReferentielVersion().equals(this.referentielVersion);
+        } else {
+            return false;
+        }
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/historique/ReferentielIntegrationHistoriqueId.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/historique/ReferentielIntegrationHistoriqueId.java
new file mode 100644
index 0000000..cef098d
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/historique/ReferentielIntegrationHistoriqueId.java
@@ -0,0 +1,23 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.referentiel.historique;
+
+import java.io.Serializable;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ *
+ * @author ASUS
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class ReferentielIntegrationHistoriqueId implements Serializable {
+
+    private String codeTypeFichier;
+    private String referentielVersion;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/historique/pojo/TableDefinitionFiltered.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/historique/pojo/TableDefinitionFiltered.java
new file mode 100644
index 0000000..4c6262c
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/historique/pojo/TableDefinitionFiltered.java
@@ -0,0 +1,29 @@
+package com.megatim.fdxcommons.model.referentiel.historique.pojo;
+
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import com.megatim.fdxcommons.model.referentiel.historique.ReferentielIntegrationHistorique;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public class TableDefinitionFiltered {
+
+    private final List<TableDefinition> tablesToCreate;
+    private final List<ReferentielIntegrationHistorique> refIntegrationHistorique;
+
+    public TableDefinitionFiltered(List<TableDefinition> tablesToCreate, List<ReferentielIntegrationHistorique> refIntegrationHistorique) {
+        this.tablesToCreate = tablesToCreate;
+        this.refIntegrationHistorique = refIntegrationHistorique;
+    }
+
+    public List<TableDefinition> getTablesToCreate() {
+        return tablesToCreate;
+    }
+
+    public List<ReferentielIntegrationHistorique> getRefIntegrationHistorique() {
+        return refIntegrationHistorique;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/natureproduction/NatureProduction.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/natureproduction/NatureProduction.java
new file mode 100644
index 0000000..fcca8ee
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/natureproduction/NatureProduction.java
@@ -0,0 +1,36 @@
+package com.megatim.fdxcommons.model.referentiel.natureproduction;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum NatureProduction {
+    REFERENTIELLE("REFERENTIELLE"),
+    CUMMULATIVE("CUMMULATIVE");
+
+    private final String value;
+
+    private NatureProduction(String value) {
+        this.value = value;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public static NatureProduction fromValue(String value) {
+        switch (value) {
+            case "REFERENTIELLE":
+                return NatureProduction.REFERENTIELLE;
+            case "CUMMULATIVE":
+                return NatureProduction.CUMMULATIVE;
+            default:
+                return null;
+        }
+    }
+
+    @Override
+    public String toString() {
+        return value;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/natureproduction/NatureProductionFichier.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/natureproduction/NatureProductionFichier.java
new file mode 100644
index 0000000..83888a1
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/natureproduction/NatureProductionFichier.java
@@ -0,0 +1,83 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.referentiel.natureproduction;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.megatim.fdxcommons.model.referentiel.LocalDateTimeAdapter;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.ManyToOne;
+import javax.validation.constraints.NotNull;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.CreationTimestamp;
+import org.hibernate.annotations.UpdateTimestamp;
+
+/**
+ *
+ * @author ASUS
+ */
+@Entity
+@IdClass(NatureProductionFichierId.class)
+@Getter
+@Setter
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+@JsonInclude(JsonInclude.Include.NON_EMPTY)
+public class NatureProductionFichier implements Serializable {
+
+    @Id
+    @NotNull(message = "Le type de fichier est obligatoire")
+    @ManyToOne
+    private TypeFichier typeFichier;
+
+    @Id
+    @NotNull(message = "L'élement doit être associé à un réfrérentiel en préparation")
+    @ManyToOne
+    private Referentiel referentiel;
+
+    @NotNull(message = "La nature de la production est obligatoire")
+    @Enumerated(value = EnumType.STRING)
+    private NatureProduction natureProduction;
+
+    @JsonFormat(pattern = "dd/MM/yyyy HH:mm:ss")
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    @CreationTimestamp
+    private LocalDateTime dateCreation;
+
+    @JsonFormat(pattern = "dd/MM/yyyy HH:mm:ss")
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    @UpdateTimestamp
+    private LocalDateTime dateMiseAjour;
+
+    private String createBy;
+
+    private String lastModifiedBy;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        NatureProductionFichier natureProductionFichier = (NatureProductionFichier) o;
+        return referentiel != null && referentiel.equals(natureProductionFichier.getReferentiel())
+                && typeFichier != null && typeFichier.equals(natureProductionFichier.getTypeFichier());
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/natureproduction/NatureProductionFichierId.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/natureproduction/NatureProductionFichierId.java
new file mode 100644
index 0000000..6694375
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/referentiel/natureproduction/NatureProductionFichierId.java
@@ -0,0 +1,22 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.referentiel.natureproduction;
+
+import java.io.Serializable;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ *
+ * @author ASUS
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class NatureProductionFichierId implements Serializable {
+    private String typeFichier;
+    private String referentiel;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/remoteaction/RemoteConfigurationId.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/remoteaction/RemoteConfigurationId.java
new file mode 100644
index 0000000..fa055e6
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/remoteaction/RemoteConfigurationId.java
@@ -0,0 +1,23 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.remoteaction;
+
+import java.io.Serializable;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ *
+ * @author ASUS
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class RemoteConfigurationId implements Serializable {
+
+    private String codeTypeFichier;
+    private String codeParticipant;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/remotedataproduction/enums/ScheduleAction.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/remotedataproduction/enums/ScheduleAction.java
new file mode 100644
index 0000000..59f1eb0
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/remotedataproduction/enums/ScheduleAction.java
@@ -0,0 +1,47 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Enum.java to edit this template
+ */
+package com.megatim.fdxcommons.model.remotedataproduction.enums;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum ScheduleAction {
+
+    AJOUTER("AJOUTER"),
+    SUPPRIMER("SUPPRIMER"),
+    MODIFIER("MODIFIER"),
+    NEUTRE("NEUTRE");
+
+    private String type = "";
+
+    private ScheduleAction(String type) {
+        this.type = type;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public static ScheduleAction fromValeur(String value) {
+        switch (value) {
+            case "AJOUTER":
+                return ScheduleAction.AJOUTER;
+            case "SUPPRIMER":
+                return ScheduleAction.SUPPRIMER;
+            case "MODIFIER":
+                return ScheduleAction.MODIFIER;
+            case "NEUTRE":
+                return ScheduleAction.NEUTRE;
+            default:
+                return null;
+        }
+    }
+
+    @Override
+    public String toString() {
+        return type;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/remotedataproduction/enums/TypePas.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/remotedataproduction/enums/TypePas.java
new file mode 100644
index 0000000..ecd8c26
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/remotedataproduction/enums/TypePas.java
@@ -0,0 +1,43 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Enum.java to edit this template
+ */
+package com.megatim.fdxcommons.model.remotedataproduction.enums;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum TypePas {
+    MINUTE("Minutes"),
+    HEUR("Heurs");
+
+    private final String value;
+
+    private TypePas(String value) {
+        this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+        return value;
+    }
+
+    public static TypePas fromValeur(String value) {
+        switch (value) {
+            case "MINUTE":
+                return TypePas.MINUTE;
+            case "HEUR":
+                return TypePas.HEUR;
+            default:
+                return null;
+        }
+    }
+
+    @Override
+    public String toString() {
+        return value;
+    }
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/search/CriteriaEntitySearch.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/search/CriteriaEntitySearch.java
new file mode 100644
index 0000000..ca56e66
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/search/CriteriaEntitySearch.java
@@ -0,0 +1,27 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.model.search;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ *
+ * @author ASUS
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface CriteriaEntitySearch {
+
+    public String libelle();
+
+    public String fieldName() default "";
+
+    public int rang() default 0;
+    
+    public boolean visible() default true;//Permet de definir si le champ sera visible à l'utilisateur final ou pas
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/search/EnumValue.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/search/EnumValue.java
new file mode 100644
index 0000000..58c4c8d
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/search/EnumValue.java
@@ -0,0 +1,19 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.model.search;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ *
+ * @author ASUS
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+public @interface EnumValue {
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/search/Search.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/search/Search.java
new file mode 100644
index 0000000..4da5900
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/search/Search.java
@@ -0,0 +1,29 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.model.search;
+
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ *
+ * @author ASUS
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface Search {
+    public String fieldName() default "";
+
+    public String dateFormat() default "";
+
+    public boolean endOfDay() default false;
+
+    public String operatorFieldName() default "";
+
+    public SearchAnnotationOperateur operateur() default SearchAnnotationOperateur.LIKE;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/search/SearchColumn.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/search/SearchColumn.java
new file mode 100644
index 0000000..b1c2dae
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/search/SearchColumn.java
@@ -0,0 +1,32 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.search;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import java.util.ArrayList;
+import java.util.List;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class SearchColumn {
+
+    private TypeDonnee typeDonnee;
+
+    private String libelle;
+
+    private Class<?> classe;
+
+    private List<String> valuesOfEnum = new ArrayList<>();
+    
+    private int rang;
+    
+    private String fieldName;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/search/SearchCriteria.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/search/SearchCriteria.java
new file mode 100644
index 0000000..12a6c6c
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/search/SearchCriteria.java
@@ -0,0 +1,27 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.search;
+
+import com.megatim.fdxcommons.model.enumeration.NumberOperator;
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import javax.persistence.criteria.From;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class SearchCriteria {
+
+    private String fieldName;
+    private Class<?> fieldType;
+    private SearchAnnotationOperateur operateur;
+    private NumberOperator numberOperator = NumberOperator.UNKNOW;
+    private Object fieldValue;
+    private From<?, ?> from;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/searchentities/ColumnDefinitionSearch.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/searchentities/ColumnDefinitionSearch.java
new file mode 100644
index 0000000..30c9f1a
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/searchentities/ColumnDefinitionSearch.java
@@ -0,0 +1,31 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.search.Search;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class ColumnDefinitionSearch {
+
+    @Search(fieldName = "referentielVersion", operateur = SearchAnnotationOperateur.EQUALS)
+    private String referentielVersion;
+
+    @Search(fieldName = "codeTypeFichier", operateur = SearchAnnotationOperateur.EQUALS)
+    private String codeTypeFichier;
+
+    @Search(fieldName = "name", operateur = SearchAnnotationOperateur.EQUALS)
+    private String columnName;
+    
+//    @Search(fieldName = "etatIntegration", operateur = SearchAnnotationOperateur.EQUALS)
+//    private EtatIntegration etatIntegration;
+}
diff --git a/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/searchentities/TableDefinitionSearch.java b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/searchentities/TableDefinitionSearch.java
new file mode 100644
index 0000000..6635123
--- /dev/null
+++ b/fdx-commons/fdxcommons-model/src/main/java/com/megatim/fdxcommons/model/searchentities/TableDefinitionSearch.java
@@ -0,0 +1,25 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.search.Search;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class TableDefinitionSearch {
+
+    @Search(fieldName = "referentielVersion", operateur = SearchAnnotationOperateur.EQUALS)
+    private String referentielVersion;
+
+    @Search(fieldName = "codeTypeFichier", operateur = SearchAnnotationOperateur.EQUALS)
+    private String codeTypeFichier;
+}
diff --git a/fdx-commons/fdxcommons-service-ifaces/.gitignore b/fdx-commons/fdxcommons-service-ifaces/.gitignore
new file mode 100644
index 0000000..b24d71e
--- /dev/null
+++ b/fdx-commons/fdxcommons-service-ifaces/.gitignore
@@ -0,0 +1,50 @@
+# These are some examples of commonly ignored file patterns.
+# You should customize this list as applicable to your project.
+# Learn more about .gitignore:
+#     https://www.atlassian.com/git/tutorials/saving-changes/gitignore
+
+# Node artifact files
+node_modules/
+dist/
+
+# Compiled Java class files
+*.class
+
+# Compiled Python bytecode
+*.py[cod]
+
+# Log files
+*.log
+
+# Package files
+*.jar
+
+# Maven
+target/
+dist/
+
+# JetBrains IDE
+.idea/
+
+# Unit test reports
+TEST*.xml
+
+# Generated by MacOS
+.DS_Store
+
+# Generated by Windows
+Thumbs.db
+
+# Applications
+*.app
+*.exe
+*.war
+
+# Large media files
+*.mp4
+*.tiff
+*.avi
+*.flv
+*.mov
+*.wmv
+
diff --git a/fdx-commons/fdxcommons-service-ifaces/nb-configuration.xml b/fdx-commons/fdxcommons-service-ifaces/nb-configuration.xml
new file mode 100644
index 0000000..a65c451
--- /dev/null
+++ b/fdx-commons/fdxcommons-service-ifaces/nb-configuration.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+    <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+        <!--
+Properties that influence various parts of the IDE, especially code formatting and the like. 
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+        <netbeans.hint.jdkPlatform>JDK_1.8</netbeans.hint.jdkPlatform>
+    </properties>
+</project-shared-configuration>
diff --git a/fdx-commons/fdxcommons-service-ifaces/pom.xml b/fdx-commons/fdxcommons-service-ifaces/pom.xml
new file mode 100644
index 0000000..0ffb728
--- /dev/null
+++ b/fdx-commons/fdxcommons-service-ifaces/pom.xml
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+        <groupId>com.megatim.fdxcommons</groupId>
+        <artifactId>fdxcommons</artifactId>
+        <version>1.0</version>
+    </parent>
+    
+    <groupId>com.megatim.fdxcommons.service.ifaces</groupId>
+    <artifactId>fdxcommons-service-ifaces</artifactId>
+    <packaging>jar</packaging>
+    
+    <properties>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>        
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <failOnMissingWebXml>false</failOnMissingWebXml>
+        <jakartaee>8.0</jakartaee>
+    </properties>
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.jboss.resteasy</groupId>
+            <artifactId>resteasy-multipart-provider</artifactId>
+            <version>3.6.3.Final</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxcommons.tools</groupId>
+            <artifactId>fdxcommons-tools</artifactId>
+            <version>1.0</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxcommons.model</groupId>
+            <artifactId>fdxcommons-model</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim</groupId>
+            <artifactId>application-backend-commons-tools</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxcommons.core.ifaces</groupId>
+            <artifactId>fdxcommons-core-ifaces</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim</groupId>
+            <artifactId>rs-security-core</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>javax</groupId>
+            <artifactId>javaee-api</artifactId>
+            <version>${jakartaee}</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.ibm.icu</groupId>
+            <artifactId>icu4j</artifactId>
+            <version>61.1</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+    </dependencies>
+    <name>fdxcommons-service-ifaces</name>
+</project>
\ No newline at end of file
diff --git a/fdx-commons/fdxcommons-service-impl/.gitignore b/fdx-commons/fdxcommons-service-impl/.gitignore
new file mode 100644
index 0000000..b24d71e
--- /dev/null
+++ b/fdx-commons/fdxcommons-service-impl/.gitignore
@@ -0,0 +1,50 @@
+# These are some examples of commonly ignored file patterns.
+# You should customize this list as applicable to your project.
+# Learn more about .gitignore:
+#     https://www.atlassian.com/git/tutorials/saving-changes/gitignore
+
+# Node artifact files
+node_modules/
+dist/
+
+# Compiled Java class files
+*.class
+
+# Compiled Python bytecode
+*.py[cod]
+
+# Log files
+*.log
+
+# Package files
+*.jar
+
+# Maven
+target/
+dist/
+
+# JetBrains IDE
+.idea/
+
+# Unit test reports
+TEST*.xml
+
+# Generated by MacOS
+.DS_Store
+
+# Generated by Windows
+Thumbs.db
+
+# Applications
+*.app
+*.exe
+*.war
+
+# Large media files
+*.mp4
+*.tiff
+*.avi
+*.flv
+*.mov
+*.wmv
+
diff --git a/fdx-commons/fdxcommons-service-impl/nb-configuration.xml b/fdx-commons/fdxcommons-service-impl/nb-configuration.xml
new file mode 100644
index 0000000..a4186d1
--- /dev/null
+++ b/fdx-commons/fdxcommons-service-impl/nb-configuration.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+    <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+        <!--
+Properties that influence various parts of the IDE, especially code formatting and the like. 
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+        <org-netbeans-modules-maven-jaxws.rest_2e_config_2e_type>ide</org-netbeans-modules-maven-jaxws.rest_2e_config_2e_type>
+        <netbeans.hint.jdkPlatform>JDK_1.8</netbeans.hint.jdkPlatform>
+    </properties>
+</project-shared-configuration>
diff --git a/fdx-commons/fdxcommons-service-impl/pom.xml b/fdx-commons/fdxcommons-service-impl/pom.xml
new file mode 100644
index 0000000..fde526d
--- /dev/null
+++ b/fdx-commons/fdxcommons-service-impl/pom.xml
@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+        <artifactId>fdxcommons</artifactId>
+        <groupId>com.megatim.fdxcommons</groupId>
+        <version>1.0</version>
+    </parent>
+    
+    <groupId>com.megatim.fdxcommons.service.impl</groupId>
+    <artifactId>fdxcommons-service-impl</artifactId>
+    <version>1.0</version>
+    <packaging>war</packaging>
+    
+    <name>fdxcommons-service-impl</name>
+    
+    <properties>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <failOnMissingWebXml>false</failOnMissingWebXml>
+        <jakartaee>8.0</jakartaee>
+        <serveur.jboss.repertoire.deploiement.war>D:\wildfly-17.0.0.Final-web-local\standalone\deployments\fdxcommons-service-impl-1.0.war</serveur.jboss.repertoire.deploiement.war>
+        <repertoire.target.generation.war>C:\Users\ASUS\Documents\NetBeansProjects\share_sources\fdx-commons\fdxcommons-service-impl\target\fdxcommons-service-impl-1.0.war</repertoire.target.generation.war>
+    </properties>
+   
+    <dependencies>
+        <dependency>
+            <groupId>com.megatim.fdxcommons.service.ifaces</groupId>
+            <artifactId>fdxcommons-service-ifaces</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim</groupId>
+            <artifactId>rs-security-core</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxcommons.tools</groupId>
+            <artifactId>fdxcommons-tools</artifactId>
+            <version>1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxcommons.core.impl</groupId>
+            <artifactId>fdxcommons-core-impl</artifactId>
+            <version>1.0</version>
+        </dependency>    
+        <dependency>
+            <groupId>com.megatim.fdxcommons.model</groupId>
+            <artifactId>fdxcommons-model</artifactId>
+            <version>1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim</groupId>
+            <artifactId>application-backend-commons-tools</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>javax</groupId>
+            <artifactId>javaee-api</artifactId>
+            <version>${jakartaee}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim</groupId> 
+            <artifactId>module-compression</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.jboss.resteasy</groupId>
+            <artifactId>resteasy-multipart-provider</artifactId>
+            <version>3.6.3.Final</version>
+            <scope>provided</scope>
+        </dependency>
+        
+    </dependencies>
+        
+    <build>
+        <plugins>
+            
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <compilerArguments>
+                        <endorseddirs>${endorsed.dir}</endorseddirs>
+                    </compilerArguments>
+                    <annotationProcessorPaths>
+                        <path>
+                            <groupId>org.mapstruct</groupId>
+                            <artifactId>mapstruct-processor</artifactId>
+                            <version>1.5.3.Final</version>
+                        </path>
+                        <path>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                            <version>1.18.22</version>
+                        </path>
+                    </annotationProcessorPaths>
+                </configuration>
+            </plugin>
+            
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <version>2.6</version>
+            </plugin>
+            
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>2.6</version>
+                <executions>
+                    <execution>
+                        <phase>validate</phase>
+                        <goals>
+                            <goal>copy</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${endorsed.dir}</outputDirectory>
+                            <silent>true</silent>
+                            <artifactItems>
+                                <artifactItem>
+                                    <groupId>javax</groupId>
+                                    <artifactId>javaee-api</artifactId>
+                                    <version>${jakartaee}</version>
+                                    <type>jar</type>
+                                </artifactItem>
+                            </artifactItems>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <!--  Ant run maven plugin -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <version>1.8</version>
+                <executions>
+                    <execution>
+                        <id>mkdir-files-artifact-repo</id>
+                        <phase>install</phase>
+                        <configuration>
+                            <tasks>
+                                <delete file="${serveur.jboss.repertoire.deploiement.war}"/>
+                                <copy file="${repertoire.target.generation.war}" tofile="${serveur.jboss.repertoire.deploiement.war}"/>
+                            </tasks>
+                        </configuration>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+    
+</project>
diff --git a/fdx-commons/fdxcommons-service-impl/src/main/java/com/megatim/fdxcommons/service/impl/JAXRSConfiguration.java b/fdx-commons/fdxcommons-service-impl/src/main/java/com/megatim/fdxcommons/service/impl/JAXRSConfiguration.java
new file mode 100644
index 0000000..803738d
--- /dev/null
+++ b/fdx-commons/fdxcommons-service-impl/src/main/java/com/megatim/fdxcommons/service/impl/JAXRSConfiguration.java
@@ -0,0 +1,28 @@
+package com.megatim.fdxcommons.service.impl;
+
+import io.swagger.annotations.Contact;
+import io.swagger.annotations.Info;
+import io.swagger.annotations.SwaggerDefinition;
+import javax.ws.rs.ApplicationPath;
+import javax.ws.rs.core.Application;
+
+/**
+ * Configures JAX-RS for the application.
+ *
+ * @author Leonel FOFOU
+ */
+@ApplicationPath("fdx-commons")
+@SwaggerDefinition(info = @Info(
+        title = "Financial Data Exchange API",
+        description = "API Web pour l'interfaçage des fichiers de la plateforme Fdx",
+        version = "1.0.0",
+        contact = @Contact(
+                name = "Megatim group",
+                email = "contact@megatimgroup.com",
+                url = "http://megatimgroup.com"
+        )
+    )
+)
+public class JAXRSConfiguration extends Application {
+
+}
diff --git a/fdx-commons/fdxcommons-service-impl/src/main/java/com/megatim/fdxcommons/service/impl/startup/StartupBean.java b/fdx-commons/fdxcommons-service-impl/src/main/java/com/megatim/fdxcommons/service/impl/startup/StartupBean.java
new file mode 100644
index 0000000..df359d2
--- /dev/null
+++ b/fdx-commons/fdxcommons-service-impl/src/main/java/com/megatim/fdxcommons/service/impl/startup/StartupBean.java
@@ -0,0 +1,14 @@
+package com.megatim.fdxcommons.service.impl.startup;
+
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+
+/**
+ *
+ * @author lenovo
+ */
+@Singleton
+@Startup
+public class StartupBean {
+
+}
diff --git a/fdx-commons/fdxcommons-service-impl/src/main/webapp/WEB-INF/beans.xml b/fdx-commons/fdxcommons-service-impl/src/main/webapp/WEB-INF/beans.xml
new file mode 100644
index 0000000..f8e2542
--- /dev/null
+++ b/fdx-commons/fdxcommons-service-impl/src/main/webapp/WEB-INF/beans.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd"
+       bean-discovery-mode="all">
+</beans>
\ No newline at end of file
diff --git a/fdx-commons/fdxcommons-service-impl/src/main/webapp/WEB-INF/web.xml b/fdx-commons/fdxcommons-service-impl/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..7dc72fb
--- /dev/null
+++ b/fdx-commons/fdxcommons-service-impl/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app version="4.0" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
+    <session-config>
+        <session-timeout>
+            30
+        </session-timeout>
+    </session-config>
+</web-app>
diff --git a/fdx-commons/fdxcommons-service-impl/src/main/webapp/index.html b/fdx-commons/fdxcommons-service-impl/src/main/webapp/index.html
new file mode 100644
index 0000000..f67377e
--- /dev/null
+++ b/fdx-commons/fdxcommons-service-impl/src/main/webapp/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>API GAD </title>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    </head>
+    <body>
+        <h1>API GAD PROJECT </h1>
+    </body>
+</html>
diff --git a/fdx-commons/fdxcommons-tools/nb-configuration.xml b/fdx-commons/fdxcommons-tools/nb-configuration.xml
new file mode 100644
index 0000000..a65c451
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/nb-configuration.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+    <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+        <!--
+Properties that influence various parts of the IDE, especially code formatting and the like. 
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+        <netbeans.hint.jdkPlatform>JDK_1.8</netbeans.hint.jdkPlatform>
+    </properties>
+</project-shared-configuration>
diff --git a/fdx-commons/fdxcommons-tools/pom.xml b/fdx-commons/fdxcommons-tools/pom.xml
new file mode 100644
index 0000000..b48e7aa
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/pom.xml
@@ -0,0 +1,354 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>com.megatim.fdxcommons</groupId>
+        <artifactId>fdxcommons</artifactId>
+        <version>1.0</version>
+    </parent>
+
+    <groupId>com.megatim.fdxcommons.tools</groupId>
+    <artifactId>fdxcommons-tools</artifactId>
+    <version>1.0</version>
+    <packaging>jar</packaging>
+
+    <name>fdxcommons-tools</name>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>2.3.2</version>
+                <configuration>
+                    <debug>false</debug>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+    </properties>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.apache.camel</groupId>
+                <artifactId>camel-bom</artifactId>
+                <version>3.7.0</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>javax</groupId>
+            <artifactId>javaee-api</artifactId>
+            <version>8.0</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.xmlbeans</groupId>
+                    <artifactId>xmlbeans</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>io.github.classgraph</groupId>
+            <artifactId>classgraph</artifactId>
+            <version>4.8.90</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.xmlbeans</groupId>
+                    <artifactId>xmlbeans</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>3.17</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.xmlbeans</groupId>
+                    <artifactId>xmlbeans</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-scratchpad</artifactId>
+            <version>3.17</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.xmlbeans</groupId>
+                    <artifactId>xmlbeans</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>net.sf.jasperreports</groupId>
+            <artifactId>jasperreports</artifactId>
+            <version>6.19.1</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.xmlbeans</groupId>
+                    <artifactId>xmlbeans</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>net.sf.jasperreports</groupId>
+            <artifactId>jasperreports-fonts</artifactId>
+            <version>6.19.1</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.xmlbeans</groupId>
+                    <artifactId>xmlbeans</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.opencsv</groupId>
+            <artifactId>opencsv</artifactId>
+            <version>4.1</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.xmlbeans</groupId>
+                    <artifactId>xmlbeans</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim</groupId>
+            <artifactId>export-excel</artifactId>
+            <version>1.0</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.xmlbeans</groupId>
+                    <artifactId>xmlbeans</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxcommons.model</groupId>
+            <artifactId>fdxcommons-model</artifactId>
+            <version>1.0</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.xmlbeans</groupId>
+                    <artifactId>xmlbeans</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tika</groupId>
+            <artifactId>tika-parser-text-module</artifactId>
+            <version>2.9.0</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.xmlbeans</groupId>
+                    <artifactId>xmlbeans</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim</groupId>
+            <artifactId>module-compression</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.xmlbeans</groupId>
+                    <artifactId>xmlbeans</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>31.1-jre</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.xmlbeans</groupId>
+                    <artifactId>xmlbeans</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-endpointdsl</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-kafka</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-cdi</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-jta</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-jdbc</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-ftp</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-rabbitmq</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.fasterxml.jackson.datatype</groupId>
+            <artifactId>jackson-datatype-jsr310</artifactId>
+            <version>2.13.1</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>jackson-annotations</artifactId>
+                    <groupId>com.fasterxml.jackson.core</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>jackson-core</artifactId>
+                    <groupId>com.fasterxml.jackson.core</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>jackson-databind</artifactId>
+                    <groupId>com.fasterxml.jackson.core</groupId>
+                </exclusion>
+                <exclusion>
+                    <groupId>com.fasterxml.jackson.module</groupId>
+                    <artifactId>jackson-module-jaxb-annotations</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-jackson</artifactId>
+            <exclusions>
+                <exclusion>
+                    <artifactId>jackson-annotations</artifactId>
+                    <groupId>com.fasterxml.jackson.core</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>jackson-core</artifactId>
+                    <groupId>com.fasterxml.jackson.core</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>jackson-databind</artifactId>
+                    <groupId>com.fasterxml.jackson.core</groupId>
+                </exclusion>
+                <exclusion>
+                    <groupId>com.fasterxml.jackson.module</groupId>
+                    <artifactId>jackson-module-jaxb-annotations</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>com.sun.xml.bind</groupId>
+                    <artifactId>jaxb-core</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>javax.xml.bind</groupId>
+                    <artifactId>jaxb-api</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>com.sun.xml.bind</groupId>
+                    <artifactId>jaxb-impl</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>com.sun.xml.ws</groupId>
+                    <artifactId>jaxws-rt</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>com.sun.xml.bind</groupId>
+            <artifactId>jaxb-impl</artifactId>
+            <version>2.3.2</version>
+        </dependency>
+        <dependency>
+            <groupId>jakarta.xml.bind</groupId>
+            <artifactId>jakarta.xml.bind-api</artifactId>
+            <version>2.3.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jaxb</groupId>
+            <artifactId>jaxb-runtime</artifactId>
+            <version>2.3.3</version>
+        </dependency>
+
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/AppFileUtils.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/AppFileUtils.java
new file mode 100644
index 0000000..79649ea
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/AppFileUtils.java
@@ -0,0 +1,30 @@
+package com.megatim.fdxcommons.tools;
+
+import com.megatim.module.compression.impl.JavaZipZip4Impl;
+import java.io.File;
+import java.nio.file.Paths;
+
+/**
+ *
+ * @author lenovo
+ */
+public class AppFileUtils {
+
+    private AppFileUtils() {
+    }
+
+    public static File unzipFileInDirectory(String source, String destination) throws Exception {
+        File sourceFile = new File(source);
+        File destinationFile = new File(destination);
+
+        String sourceFileName = sourceFile.getName();
+        int lastIndex = sourceFileName.lastIndexOf(".");
+        String unzipFileName = sourceFileName.substring(0, lastIndex);
+
+        JavaZipZip4Impl zip = new JavaZipZip4Impl();
+        zip.unZipFile(sourceFile, destinationFile);
+
+        return Paths.get(destination, unzipFileName).toFile();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/CommonAppContext.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/CommonAppContext.java
new file mode 100644
index 0000000..f42672c
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/CommonAppContext.java
@@ -0,0 +1,31 @@
+package com.megatim.fdxcommons.tools;
+
+import java.io.File;
+
+/**
+ *
+ * @author lenovo
+ */
+public class CommonAppContext {
+
+    public static final String SERVER_DIR = getCurrentDirectory().getParent();
+    public static final String APP_DIR = SERVER_DIR + File.separator + "standalone" + File.separator + "apifdx";
+    public static final String TEMP_DIR = APP_DIR + File.separator + "tmp";
+    public static final String UPLOAD_DIR = APP_DIR + File.separator + "upload";
+    public static final String DOWNLOAD_DIR = APP_DIR + File.separator + "download";
+    public static final String DATA_DIR = APP_DIR + File.separator + "data";
+
+    public static final String REFERENTIEL_ZIP_FILE_NAME = "referentiel.zip";
+    public static final String UNZIP_REFERENTIEL_VALIDATEUR_DIR_NAME = "validateurs";
+    public static final String UNZIP_REFERENTIEL_VALIDATEUR_JSON_DIR_NAME = "validateursjson";
+
+    public static final String TOKEN_GENERATION_EXCHANGE = "tokenAuthentificationExchange";
+    public static final String TOKEN_GENERATION_QUEUE = "tokenAuthentificationQueue";
+    public static final String TOKEN_GENERATION_ROUTING_KEY = "tokenAuthentificationRoutingKey";
+
+    public static File getCurrentDirectory() {
+        String fileName = (String) System.getProperties().get("user.dir");
+        return new File(fileName);
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/CommonsTools.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/CommonsTools.java
new file mode 100644
index 0000000..94fd17a
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/CommonsTools.java
@@ -0,0 +1,1560 @@
+package com.megatim.fdxcommons.tools;
+
+import com.lowagie.text.Document;
+import com.lowagie.text.pdf.PdfContentByte;
+import com.lowagie.text.pdf.PdfImportedPage;
+import com.lowagie.text.pdf.PdfReader;
+import com.lowagie.text.pdf.PdfWriter;
+import com.opencsv.CSVReader;
+import com.opencsv.CSVReaderBuilder;
+import io.github.classgraph.ClassGraph;
+import io.github.classgraph.ClassInfoList;
+import io.github.classgraph.ScanResult;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.security.spec.InvalidKeySpecException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.PBEKeySpec;
+import java.lang.annotation.Annotation;
+import java.text.NumberFormat;
+import java.util.Calendar;
+import java.util.Iterator;
+import net.sf.jasperreports.engine.JasperExportManager;
+import net.sf.jasperreports.engine.JasperFillManager;
+import net.sf.jasperreports.engine.JasperPrint;
+import net.sf.jasperreports.engine.JasperReport;
+import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
+import net.sf.jasperreports.engine.util.JRLoader;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+//import org.apache.poi.hwpf.HWPFDocument;
+//import org.apache.poi.hwpf.extractor.WordExtractor;
+import org.apache.poi.xwpf.usermodel.XWPFDocument;
+import org.apache.poi.xwpf.usermodel.XWPFParagraph;
+import org.apache.poi.xwpf.usermodel.XWPFRun;
+//import org.dhatim.fastexcel.reader.Row;
+import com.megatim.export.excel.Export;
+import com.megatim.fdxcommons.tools.context.AppContext;
+import java.io.InputStream;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.time.format.FormatStyle;
+import java.util.Locale;
+import java.util.stream.IntStream;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import javax.ws.rs.core.MultivaluedMap;
+
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+/**
+ *
+ * @author ABEGA
+ */
+public class CommonsTools {
+
+    /**
+     * Methode permettant de fusionner plusieur pdf
+     *
+     * @param inputPdfList
+     * @param outputStream
+     * @throws Exception
+     */
+    public static void mergePdfFiles(List<InputStream> inputPdfList, OutputStream outputStream) throws Exception {
+        //Create document and pdfReader objects.
+        Document document = new Document();
+        List<PdfReader> readers
+                = new ArrayList<>();
+        int totalPages = 0;
+
+        //Create pdf Iterator object using inputPdfList.
+        Iterator<InputStream> pdfIterator
+                = inputPdfList.iterator();
+
+        // Create reader list for the input pdf files.
+        while (pdfIterator.hasNext()) {
+            InputStream pdf = pdfIterator.next();
+            PdfReader pdfReader = new PdfReader(pdf);
+            readers.add(pdfReader);
+            totalPages = totalPages + pdfReader.getNumberOfPages();
+        }
+
+        // Create writer for the outputStream
+        PdfWriter writer = PdfWriter.getInstance(document, outputStream);
+
+        //Open document.
+        document.open();
+
+        //Contain the pdf data.
+        PdfContentByte pageContentByte = writer.getDirectContent();
+
+        PdfImportedPage pdfImportedPage;
+        int currentPdfReaderPage = 1;
+        Iterator<PdfReader> iteratorPDFReader = readers.iterator();
+
+        // Iterate and process the reader list.
+        while (iteratorPDFReader.hasNext()) {
+            PdfReader pdfReader = iteratorPDFReader.next();
+            //Create page and add content.
+            while (currentPdfReaderPage <= pdfReader.getNumberOfPages()) {
+                document.newPage();
+                pdfImportedPage = writer.getImportedPage(
+                        pdfReader, currentPdfReaderPage);
+                pageContentByte.addTemplate(pdfImportedPage, 0, 0);
+                currentPdfReaderPage++;
+            }
+            currentPdfReaderPage = 1;
+        }
+
+        //Close document and outputStream.
+        outputStream.flush();
+        document.close();
+        outputStream.close();
+
+    }
+
+    /**
+     * Permet de convertir un tableau de bytes en un fichier
+     *
+     * @param nomFichier
+     * @param content
+     * @return
+     */
+    public static File convertBytesArrayToFile(String nomFichier, byte[] content) {
+
+        //Variables
+        FileOutputStream fileOuputStream = null;
+        File fichier = null;
+
+        try {
+
+            //Variables
+            fileOuputStream = new FileOutputStream(nomFichier);
+
+            //On lit le fichier
+            fileOuputStream.write(content);
+
+            //On ferme le fichier
+            fileOuputStream.close();
+
+        } catch (Exception ex) {
+
+            //On affiche l'erreur
+            ex.printStackTrace();
+
+        }
+
+        return new File(nomFichier);
+    }
+
+    /**
+     * Permet de convertir un fichier en tableau de bytes
+     *
+     * @param fichier
+     * @return
+     */
+    public static byte[] convertFileToBytesArray(File fichier) {
+
+        //Variables
+        byte[] byteArray = new byte[(int) fichier.length()];
+
+        try {
+
+            //Variables
+            FileInputStream inputStream = new FileInputStream(fichier);
+
+            //On lit le fichier
+            inputStream.read(byteArray);
+
+            //On ferme le fichier
+            inputStream.close();
+
+        } catch (Exception ex) {
+
+            //On affiche l'erreur
+            ex.printStackTrace();
+
+        }
+
+        return byteArray;
+    }
+
+    /**
+     * Permet d'exporter en excel dans repertoire donn�
+     *
+     * @param datas
+     * @param repertoireGeneration
+     * @return
+     */
+    public static File exporterEnExcel(List datas, File fichier) {
+
+        try {
+
+            //On effectue l'export
+            Export.exportExcel(datas, fichier.getAbsolutePath());
+
+        } catch (Exception ex) {
+
+            //On affiche l'erreur
+            ex.printStackTrace();
+
+        }
+
+        return fichier;
+    }
+
+    /**
+     * Permet de verifier si une liste de valeurs est contenu dans une chaine
+     *
+     * @param chaine
+     * @param tab
+     * @return
+     */
+    public static boolean contains(String chaine, List<String> tab) {
+
+        //Variables
+        boolean bool = false;
+
+        //Si non vide
+        if (tab != null && !tab.isEmpty()) {
+
+            //On parcourt la liste des valeurs
+            for (String valeur : tab) {
+
+                //Si la chaine est contenu dans la chaine
+                if (chaine.contains(valeur)) {
+
+                    //On set la valeur
+                    bool = true;
+
+                    //On sort
+                    break;
+
+                }
+
+            }
+
+        }
+
+        return bool;
+    }
+
+    /**
+     * Cette methode permet les donnees depuis un fichier excel
+     *
+     * @param file
+     * @return
+     */
+    public static List<Cell> readExcelFile(File file) {
+
+        //On definit de variables de reference
+        FileInputStream inputStream = null;
+        Workbook workbook = null;
+        Sheet firstSheet = null;
+        Iterator<Row> iterator = null;
+
+        //Declaration
+        List<Cell> cellules = new ArrayList<Cell>();
+
+        try {
+
+            //Affectation
+            inputStream = new FileInputStream(file);
+            workbook = new XSSFWorkbook(inputStream);
+            firstSheet = workbook.getSheetAt(0);
+            //iterator = firstSheet.iterator();
+
+            for (int rowNumber = firstSheet.getFirstRowNum(); rowNumber <= firstSheet.getLastRowNum(); rowNumber++) {
+                Row row = firstSheet.getRow(rowNumber);
+                if (row == null) {
+                    // This row is completely empty
+                } else {
+                    // The row has data
+                    for (int cellNumber = row.getFirstCellNum(); cellNumber <= row.getLastCellNum(); cellNumber++) {
+                        Cell cell = row.getCell(cellNumber, Row.MissingCellPolicy.RETURN_BLANK_AS_NULL);
+
+//                         if (cell == null || cell.getCellType() == Cell.CELL_TYPE_BLANK) {
+//                             
+//                            //On ajoute la cellule
+//                            cellules.add(cell);
+//                             
+//                         } else {
+//                             
+//                             
+//                             
+//                         }
+                        //On ajoute la cellule
+                        cellules.add(cell);
+//                         if(cell != null){
+//                             System.out.println(">>>>>>>>>>>>>"+cell.getCellValue());
+//                         }else{
+//                             System.out.println("Cell NULLL>>>>>>>>>>>>>");
+//                         }
+
+                    }
+                }
+            }
+
+            //On parcour la feuille
+//            while (iterator.hasNext()) {
+//                Row nextRow = iterator.next();
+//                Iterator<Cell> cellIterator = nextRow.cellIterator();
+//                
+//                //On parcour les cellules
+//                while (cellIterator.hasNext()) {
+//                    
+//                    //On ajoute les cellules
+//                    cellules.add(cellIterator.next());
+//                }
+//            }
+//            
+            //On ferme le classeur
+            workbook.close();
+
+            //On ferme le stream
+            inputStream.close();
+
+        } catch (Exception ex) {
+
+            //On affiche l'erreur
+            ex.printStackTrace();
+
+        } finally {
+            try {
+                inputStream.close();
+            } catch (IOException ex) {
+
+                //On affiche l'erreur
+                ex.printStackTrace();
+
+            }
+        }
+
+        return cellules;
+    }
+
+    /**
+     * Permet de lire un fichier csv
+     *
+     * @param file
+     * @return
+     * @throws Exception
+     */
+    public static List<String[]> readCsvFile(File file) throws Exception {
+
+        //Variables
+        List<String[]> allData = null;
+        InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(file), "UTF-8");
+        CSVReader csvReader = null;
+
+        try {
+
+            // create csvReader object and skip first Line 
+            try {
+
+                //On lit le fichier
+                csvReader = new CSVReaderBuilder(inputStreamReader)
+                        .withSkipLines(1)
+                        .build();
+
+                //On recup�re les donn�es
+                allData = csvReader.readAll();
+
+            } catch (Exception ex) {
+
+                //On affiche l'erreur
+                ex.printStackTrace();
+
+            } finally {
+
+                //On ferme le reader
+                csvReader.close();
+            }
+
+        } finally {
+
+            //On ferme le fichier
+            inputStreamReader.close();
+        }
+
+        return allData;
+    }
+
+    /**
+     * Permet de mettre de mettre l'heure � minuit
+     *
+     * @param date
+     * @return
+     */
+    public static Date passerHeureAMinuit(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+
+        return calendar.getTime();
+    }
+
+    /**
+     * Permet de retourner la liste des codes valeurs ch�que
+     *
+     * @return
+     */
+    public static List<String> getCodeValeursCheque() {
+
+        //Variables
+        List<String> liste = new ArrayList<String>();
+
+        //On charge
+        liste.add("30");
+        liste.add("33");
+
+        return liste;
+    }
+
+    /**
+     * Permet de retourner la liste des codes valeurs virement
+     *
+     * @return
+     */
+    public static List<String> getCodeValeursVirement() {
+
+        //Variables
+        List<String> liste = new ArrayList<String>();
+
+        //On charge
+        liste.add("10");
+        liste.add("13");
+
+        return liste;
+    }
+
+    /**
+     * permet de g��nrer en pdf
+     *
+     * @param datas
+     * @param pdfFile
+     * @param reportFilePath
+     * @param params
+     * @return
+     * @throws Exception
+     */
+    public static File genererFichierPdf(List<?> datas, String pdfFile, String reportFilePath, Map params) throws Exception {
+
+        // Creation d'un File sur le fichier
+        File reportFile = new File(reportFilePath);
+        File fichierGenerer = new File(pdfFile);
+
+        //On cree le fichier s'ile n'existe pas
+        if (!fichierGenerer.exists()) {
+
+            //On cree le fichier
+            fichierGenerer.createNewFile();
+
+        }
+
+        // Chargement du Rapport
+        JasperReport report = null;
+
+        // Etat rempli
+        JasperPrint jasperPrint = null;
+
+        // Chargement du report
+        report = (JasperReport) JRLoader.loadObject(reportFile);
+        jasperPrint = JasperFillManager.fillReport(report, params, new JRBeanCollectionDataSource(datas, false));
+
+        OutputStream output = new FileOutputStream(fichierGenerer);
+        JasperExportManager.exportReportToPdfStream(jasperPrint, output);
+        output.close();
+
+        return fichierGenerer;
+    }
+
+    /**
+     * Permet de modifier un document word
+     *
+     * @param map
+     * @param pathFile
+     * @param repertoireDestination
+     * @return
+     * @throws Exception
+     */
+    public static String updateWordFileToOtherFile(Map<String, Object> map, String pathFile, String fileName, String repertoireDestination) throws Exception {
+
+        try {
+//            System.out.println("---------------------------updateWordFileToOtherFile----------1111111111111--------------------------------------"+pathFile);
+            //Variables
+            FileInputStream fis = new FileInputStream(pathFile);
+            XWPFDocument doc = new XWPFDocument(fis);
+            FileOutputStream out = null;
+            //String fileName = genererValeurAleatoire() + ".docx";
+            String filePathDestination = repertoireDestination + File.separator + fileName + ".docx";
+
+            //On parcourt le document
+            for (Map.Entry<String, Object> entry : map.entrySet()) {
+                for (XWPFParagraph p : doc.getParagraphs()) {
+                    List<XWPFRun> runs = p.getRuns();
+                    if (runs != null) {
+                        for (XWPFRun r : runs) {
+                            String text = r.getText(0);
+
+                            //On verifie s'il elle contient la cle
+                            if (text != null && text.contains(entry.getKey())) {
+
+                                //Si la valeur est non vide
+                                if (entry.getValue() != null) {
+
+                                    //On dermine le type
+                                    if (entry.getValue() instanceof String) {
+                                        text = text.replace(entry.getKey(), (String) entry.getValue());
+                                        r.setText(text, 0);
+                                    } else {
+                                        text = text.replace(entry.getKey(), entry.getValue().toString());
+                                        r.setText(text, 0);
+                                    }
+
+                                } else {
+                                    r.setText("", 0);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+
+            //On ecrit dans le fichier
+            out = new FileOutputStream(new File(filePathDestination));
+            doc.write(out);
+            out.close();
+            doc.close();
+
+            return filePathDestination;
+
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+
+        return null;
+    }
+
+    /**
+     * Permet de generer des nomre aleatorement
+     *
+     * @return
+     */
+    public static String genererValeurAleatoire() {
+        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
+        String nombre = format.format(new Date()) + String.valueOf((int) (Math.random() * 1000000000));
+        return nombre;
+    }
+
+    /**
+     * Permet de charger des classes qui ont une annotation pr�cise
+     *
+     * @param pkgName
+     * @param annotation
+     * @return
+     */
+    public static List<Annotation> getAnnotations(final String pkgName, String annotation) {
+
+        //Variables
+        List<Class<?>> classRefs = new ArrayList<>();
+
+        List<Annotation> annotations = new ArrayList<>();
+
+        try ( ScanResult scanResult = new ClassGraph().acceptPackages(pkgName).enableAllInfo().scan()) {
+
+            //On recup�re les classes annot�es
+            ClassInfoList liste = scanResult.getClassesWithAnnotation(annotation);
+
+            //On charge les classes
+            classRefs = liste.loadClasses();
+
+            //On parcourt les classes
+            for (Class<?> classe : classRefs) {
+
+                //On parcourt les annotations
+                for (Annotation annotationDeclaree : classe.getDeclaredAnnotations()) {
+
+                    //On ajoute l'annotation
+                    annotations.add(annotationDeclaree);
+
+                }
+
+            }
+
+        } catch (Exception e) {
+
+            //On affiche les traces
+            e.printStackTrace();
+
+        }
+
+        return annotations;
+    }
+
+    /**
+     * Permet de charger des classes qui ont une annotation pr�cise
+     *
+     * @param pkgName
+     * @param annotation
+     * @return
+     */
+    public static List<Class<?>> getAnnotatedClasses(final String pkgName, String annotation) {
+
+        //Variables
+        List<Class<?>> classRefs = new ArrayList<>();
+
+        try ( ScanResult scanResult = new ClassGraph().acceptPackages(pkgName).enableAllInfo().scan()) {
+
+            //On recup�re les classes annot�es
+            ClassInfoList liste = scanResult.getClassesWithAnnotation(annotation);
+
+            //On charge les classes
+            classRefs = liste.loadClasses();
+
+        } catch (Exception e) {
+
+            //On affiche les traces
+            e.printStackTrace();
+
+        }
+
+        return classRefs;
+    }
+
+    /**
+     * Permet verifier si une chaine est contenu un tableau de chaine
+     *
+     * @param value
+     * @param tab
+     * @return
+     * @throws Exception
+     */
+    public static boolean in(String value, String tab[]) {
+
+        //Variables
+        boolean bool = false;
+
+        //Si non null
+        if (tab != null && value != null) {
+
+            //On parcourt la chaine
+            for (String obj : tab) {
+
+                //Si  trouv�
+                if (obj.equalsIgnoreCase(value)) {
+
+                    //On marque comme trouv�
+                    bool = true;
+
+                    //On sort
+                    break;
+
+                }
+
+            }
+
+        }
+
+        return bool;
+
+    }
+
+    /**
+     * Permet verifier si une chaine est contenu un tableau de chaine
+     *
+     * @param value
+     * @param tab
+     * @return
+     * @throws Exception
+     */
+    public static boolean contains(String value, String tab[]) {
+
+        //Variables
+        boolean bool = false;
+
+        //Si non null
+        if (tab != null && value != null) {
+
+            //On parcourt la chaine
+            for (String obj : tab) {
+
+                //Si  trouv�
+                if (value.contains(obj)) {
+
+                    //On marque comme trouv�
+                    bool = true;
+
+                    //On sort
+                    break;
+
+                }
+
+            }
+
+        }
+
+        return bool;
+
+    }
+
+    /**
+     * Permet de charger le fichier
+     *
+     * @param contenuDuFichier
+     * @return
+     * @throws Exception
+     */
+    public static List<String> lireFichier(File fichier) throws Exception {
+
+        //Variables
+        List<String> lignes = null;
+
+        //On charge le fichier
+        lignes = chargerLesDonnees(new FileInputStream(fichier));
+
+        return lignes;
+    }
+
+    /**
+     * Permet de charger le fichier
+     *
+     * @param contenuDuFichier
+     * @return
+     * @throws Exception
+     */
+    public static List<String> chargerLesDonnees(Object contenuDuFichier) throws Exception {
+
+        //Variables
+        FileInputStream fichier = (FileInputStream) contenuDuFichier;
+        InputStreamReader inputStreamReader = new InputStreamReader(fichier);
+        BufferedReader entree;
+        List<String> contenuFichier;
+        String ligne = null;
+
+        //Affectation
+        entree = new BufferedReader((Reader) inputStreamReader);
+        contenuFichier = new ArrayList<String>();
+
+        //On parcourt ligne par ligne le fichier
+        while (true) {
+
+            //On lie une ligne dans le fichier
+            ligne = entree.readLine();
+
+            //Traitement si la ligne est non null
+            if (ligne != null) {
+
+                //On recupere la ligne
+                contenuFichier.add(ligne);
+            } else {
+
+                //On sort de la boucle
+                break;
+
+            }
+        }
+
+        //On close
+        entree.close();
+
+        return contenuFichier;
+
+    }
+
+    /**
+     * Permet de decouper le traitement en plusieurs processus
+     *
+     * @param <T>
+     * @param list
+     * @param subListNumber
+     * @return
+     */
+    public static <T> List<List<T>> splitList(List<T> list, int subListNumber) {
+
+        //Liste a retourner
+        List<List<T>> splitted = new ArrayList<List<T>>();
+
+        //Si la liste est vide
+        if (list == null || list.size() == 0) {
+            return splitted;
+        }
+
+        //CAs sp?cifique du nombre de sous liste inf?rieur ? 1
+        if (subListNumber <= 1) {
+
+            //Ajout de la liste courante ? la liste des sous liste
+            splitted.add(list);
+
+            //retour de la liste des sous liste
+            return splitted;
+        }
+
+        //Taille de la liste
+        int listSize = list.size();
+
+        //taille de la sous liste
+        int subListSize = Math.max(listSize / (subListNumber - 1), 1);
+
+        //parcours de la liste a splitter
+        for (int i = 0; i < listSize; i += subListSize) {
+
+            //Ajout de la sous-liste
+            splitted.add(new ArrayList<T>(list.subList(i, Math.min(listSize, i + subListSize))));
+        }
+
+        //On retourne la liste des sous-liste
+        return splitted;
+
+    }
+
+    /**
+     * Retourn le chemin courant
+     *
+     * @return
+     */
+    public static File getCurrentDirectory() {
+        String fileName = (String) System.getProperties().get("user.dir");
+        return new File(fileName);
+    }
+
+    public static Properties loadProperties(String filename) {
+        Properties properties = new Properties();
+
+        try {
+
+            //On charge le fichier de config
+            properties.load(new FileInputStream(filename));
+
+        } catch (Exception ex) {
+
+            //On affiche l'erreur
+            ex.printStackTrace();
+
+        }
+
+        return properties;
+    }
+
+    /**
+     * Permet d'ecrire le fichier sur el disque
+     *
+     * @param content
+     * @param filename
+     * @throws IOException
+     */
+    public static void ecrireFichier(byte[] content, String filename) throws IOException {
+        File file = new File(filename);
+        if (!file.exists()) {
+            file.createNewFile();
+        }
+        FileOutputStream fop = new FileOutputStream(file);
+        fop.write(content);
+        fop.flush();
+        fop.close();
+    }
+
+    /**
+     * Permet de recup�erer le nom du fichier
+     *
+     * @param headers
+     * @return
+     */
+    public static String getNomFichier(MultivaluedMap<String, String> headers) {
+        String[] contentDisposition = headers.getFirst("Content-Disposition").split(";");
+        for (String filename : contentDisposition) {
+            if ((filename.trim().startsWith("filename"))) {
+                String[] name = filename.split("=");
+                String finalFileName = name[1].trim().replaceAll("\"", "");
+                return finalFileName;
+            }
+        }
+        return "";
+    }
+//
+//    /**
+//     * Permet de convertir un object java en json
+//     *
+//     * @param objects
+//     * @return
+//     */
+//    public static String convertirJavaToJson(List<Object> objects) {
+//
+//        //Variables
+//        ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
+//        StringBuilder json = new StringBuilder();
+//
+//        try {
+//
+//            //Si non null
+//            if (objects != null && !objects.isEmpty()) {
+//
+//                //On parcourt la liste
+//                for (Object obj : objects) {
+//
+//                    //On parse en json
+//                    json.append(convertirJavaToJson(obj));
+//
+//                }
+//
+//            }
+//
+//        } catch (Exception ex) {
+//
+//            //On affiche l'erreur
+//            ex.printStackTrace();
+//
+//        }
+//
+//        return json.toString();
+//
+//    }
+
+    /**
+     * Permet de convertir un object java en json
+     *
+     * @param object
+     * @return
+     */
+//    public static String convertirJavaToJson(Object object) {
+//
+//        //Variables
+//        ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
+//        String json = null;
+//
+//        try {
+//
+//            //On convertit en json
+//            json = ow.writeValueAsString(object);
+//
+//        } catch (Exception ex) {
+//
+//            //On affiche l'erreur
+//            ex.printStackTrace();
+//
+//        }
+//
+//        return json;
+//
+//    }
+    /**
+     * Permet de hacher le mot de passe
+     *
+     * @param password
+     * @return
+     * @throws NoSuchAlgorithmException
+     * @throws InvalidKeySpecException
+     */
+    public static String encryptPassword(String password) {
+
+        try {
+
+            int iterations = 1000;
+            char[] chars = password.toCharArray();
+            byte[] salt = getSalt();
+
+            PBEKeySpec spec = new PBEKeySpec(chars, salt, iterations, 64 * 8);
+            SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
+
+            byte[] hash = skf.generateSecret(spec).getEncoded();
+            return iterations + ":" + toHex(salt) + ":" + toHex(hash);
+
+        } catch (Exception ex) {
+
+            //On affiche le message d'errreur
+            ex.printStackTrace();
+
+        }
+
+        return null;
+    }
+
+    /**
+     *
+     * @return @throws NoSuchAlgorithmException
+     */
+    public static byte[] getSalt() throws NoSuchAlgorithmException {
+        SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
+        byte[] salt = new byte[16];
+        sr.nextBytes(salt);
+        return salt;
+    }
+
+    /**
+     *
+     * @param array
+     * @return
+     * @throws NoSuchAlgorithmException
+     */
+    public static String toHex(byte[] array) throws NoSuchAlgorithmException {
+        BigInteger bi = new BigInteger(1, array);
+        String hex = bi.toString(16);
+
+        int paddingLength = (array.length * 2) - hex.length();
+        if (paddingLength > 0) {
+            return String.format("%0" + paddingLength + "d", 0) + hex;
+        } else {
+            return hex;
+        }
+    }
+
+    /**
+     * Permet de valider le mot de passe
+     *
+     * @param originalPassword
+     * @param storedPassword
+     * @return
+     * @throws NoSuchAlgorithmException
+     * @throws InvalidKeySpecException
+     */
+    public static boolean validerMotDePasse(String originalPassword, String storedPassword)
+            throws NoSuchAlgorithmException, InvalidKeySpecException {
+        String[] parts = storedPassword.split(":");
+        int iterations = Integer.parseInt(parts[0]);
+
+        byte[] salt = fromHex(parts[1]);
+        byte[] hash = fromHex(parts[2]);
+
+        PBEKeySpec spec = new PBEKeySpec(originalPassword.toCharArray(),
+                salt, iterations, hash.length * 8);
+        SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
+        byte[] testHash = skf.generateSecret(spec).getEncoded();
+
+        int diff = hash.length ^ testHash.length;
+        for (int i = 0; i < hash.length && i < testHash.length; i++) {
+            diff |= hash[i] ^ testHash[i];
+        }
+        return diff == 0;
+    }
+
+    /**
+     * Permet de convertir un hexadeicmal en tableau de byte
+     *
+     * @param hex
+     * @return
+     * @throws NoSuchAlgorithmException
+     */
+    public static byte[] fromHex(String hex) throws NoSuchAlgorithmException {
+        byte[] bytes = new byte[hex.length() / 2];
+        for (int i = 0; i < bytes.length; i++) {
+            bytes[i] = (byte) Integer.parseInt(hex.substring(2 * i, 2 * i + 2), 16);
+        }
+        return bytes;
+    }
+
+    /**
+     * Permet de convertir une chaine en date
+     *
+     * @param formatSource
+     * @param date
+     * @return
+     */
+    public static Date getStringToDate(String formatSource, String date) {
+
+        //Variables
+        SimpleDateFormat valeur = new SimpleDateFormat(formatSource);
+
+        try {
+
+            return valeur.parse(date);
+
+        } catch (Exception ex) {
+
+            //On affiche l'erreur
+            ex.printStackTrace();
+
+            return null;
+
+        }
+    }
+
+    /**
+     * Permet de generer des nomre aleatorement
+     *
+     * @return
+     */
+    public static synchronized String genererChaineAleatoire() {
+        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
+        String nombre = format.format(new Date()) + String.valueOf((int) (Math.random() * 1000000000));
+        return nombre;
+    }
+
+    /**
+     * Echapper des caractere pour une requete sql
+     *
+     * @param chaine
+     * @return
+     */
+    public static String echapperCaractereRequete(String chaine) {
+
+        //Si non null
+        if (chaine != null) {
+
+            //on echappe
+            chaine = chaine.replaceAll("'", "''");
+
+            //On retourne
+            return chaine;
+
+        } else {
+            return "";
+        }
+
+    }
+
+    /**
+     * Permet de determiner le nombre d'occurences de cheques
+     *
+     * @param ncheque
+     * @return
+     */
+    public static int getNombreChequesTrouve(Map<String, Object> nbreOccurencesCheques, String numeroCheque) {
+
+        //Variables
+        int nbre = 0;
+
+        //On teste si la liste est non vide
+        if (nbreOccurencesCheques != null && nbreOccurencesCheques.get(numeroCheque.trim()) != null) {
+
+            //On recupere le nombre
+            nbre = ((BigDecimal) nbreOccurencesCheques.get(numeroCheque.trim())).intValue();
+
+        }
+
+        return nbre;
+
+    }
+
+    /**
+     * Permet de mettre la premi�re lettre en majuscule uniquement
+     *
+     * @param chaine
+     * @return
+     */
+    public static String mettreLesPremieresLettresChaineEnMajuscule(String chaine) {
+
+        //Vairiables
+        String resultat = "";
+        String tab[] = null;
+
+        //On splitte sur la base des espaces
+        tab = chaine.split(" ");
+
+        if (tab != null) {
+
+            //On parcourt la chaine
+            for (int i = 0; i < tab.length; i++) {
+
+                //Si nous ne sommes pas encore arriv� � la fin de la chaine
+                if (i < (tab.length - 1)) {
+                    resultat = resultat + mettrePremiereLettreEnMajuscule(tab[i]) + " ";
+                } else {
+                    resultat = resultat + mettrePremiereLettreEnMajuscule(tab[i]);
+                }
+
+            }
+
+        }
+
+        return resultat;
+    }
+
+    /**
+     * Permet de mettre la premi�re lettre en majuscule uniquement
+     *
+     * @param chaine
+     * @return
+     */
+    public static String mettrePremiereLettreEnMajuscule(String chaine) {
+
+        //Variables
+        String resultat = "";
+
+        if (chaine != null && !chaine.isEmpty()) {
+
+            //On met toute la chaine en minuscule
+            resultat = chaine.toLowerCase();
+
+            //On met la premiere lettre en majucule
+            char premiereLettre = resultat.charAt(0);
+
+            // convert it to an UpperCase letter
+            char premiereLettreMajuscule = Character.toUpperCase(premiereLettre);
+
+            //On ajoute remplace la premiere lettre
+            resultat = resultat.replaceFirst(Character.toString(resultat.charAt(0)), Character.toString(premiereLettreMajuscule));
+
+        }
+
+        return resultat;
+    }
+
+    /**
+     * Permet de convertir la date en toutes lettres
+     *
+     * @param date
+     * @param langue
+     * @param format
+     * @return
+     */
+    public static String convertirDateEnToutesLettres(Date date, Locale langue, FormatStyle format) {
+
+        //Variables
+        LocalDate dateConvertie = null;
+        String resultat = "";
+
+        //Si non null
+        if (date != null) {
+
+            //On convertit la date en type LocalDate
+            dateConvertie = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+
+            //On convertit en toutes lettres
+            resultat = dateConvertie.format(DateTimeFormatter.ofLocalizedDate(format).withLocale(langue));
+
+        }
+
+        return resultat;
+
+    }
+
+    /**
+     * Permet de formatter une date
+     * @param format
+     * @param date
+     * @return 
+     */
+    public static String formaterDate(String format, LocalDateTime date) {
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
+        String formattedDate = date.format(formatter);
+        return formattedDate;
+    }
+    
+    /**
+     * Permet de formatter une date
+     *
+     * @return the datePresentation
+     */
+    public static String formaterDate(String format, Date date) {
+
+        if (date != null) {
+            return new SimpleDateFormat(format).format(date);
+        } else {
+            return "";
+        }
+    }
+
+    /**
+     * Permet de formatter une date recu yyyyMMdd en ce format dd/MM/yy
+     *
+     * @return the datePresentation
+     */
+    public static String formatetterDate3(String dateAformatee) {
+
+        //On formate la date jj/MM/yyyy
+        String dateFormatee = null;
+
+        if (dateAformatee != null) {
+
+            String annee = dateAformatee.substring(0, 2);
+            String mois = dateAformatee.substring(2, 4);
+            String jour = dateAformatee.substring(4, 6);
+            dateFormatee = jour + "/" + mois + "/" + annee;
+
+            return dateFormatee;
+
+        } else {
+
+            return dateAformatee;
+
+        }
+    }
+
+    /**
+     * Prend une date au format yyyyMMdd et la transforme au format dd/MM/yyyy
+     *
+     * @param date
+     */
+    public static String formaterDateddMMyyyy(String date) {
+
+        //On formate la date jj/MM/yyyy
+        String dateFormatee = null;
+
+        if (date != null) {
+
+            String annee = date.substring(0, 4);
+            String mois = date.substring(4, 6);
+            String jour = date.substring(6, 8);
+            dateFormatee = jour + "/" + mois + "/" + annee;
+
+            return dateFormatee;
+        } else {
+            return date;
+        }
+
+    }
+
+    /**
+     * Prend une date au format yyyyMMddHHmmss et la transforme au format
+     * dd/MM/yyyy � HH:mm:ss
+     *
+     * @param date
+     */
+    public static String formaterDateddMMyyyyHHmmss(String date) {
+
+        //On formate la date jj/MM/yyyy
+        String dateFormatee = null;
+        String heureFormatee = null;
+
+        if (date != null) {
+
+            String annee = date.substring(0, 4);
+            String mois = date.substring(4, 6);
+            String jour = date.substring(6, 8);
+            String heure = date.substring(8, 10);
+            String minute = date.substring(10, 12);
+            String seconde = date.substring(12, 14);
+
+            dateFormatee = jour + "/" + mois + "/" + annee;
+            heureFormatee = heure + ":" + minute + ":" + seconde;
+
+            return dateFormatee + " � " + heureFormatee;
+        } else {
+            return date;
+        }
+
+    }
+
+    /**
+     * Prend une date au format yyMMdd et la transforme au format dd/MM/yy
+     *
+     * @param date
+     */
+    public static String formaterDateyyMMdd(String date) {
+
+        //On formate la date jj/MM/yyyy
+        String dateFormatee = null;
+
+        if (date != null) {
+
+            String annee = date.substring(0, 2);
+            String mois = date.substring(2, 4);
+            String jour = date.substring(4, 6);
+            dateFormatee = jour + "/" + mois + "/" + annee;
+
+            return dateFormatee;
+        } else {
+            return date;
+        }
+
+    }
+
+    /**
+     * On affiche l'etat du virement
+     *
+     * @param item
+     * @return
+     */
+    public static String getCodeAgenceToRIB(String rib) {
+
+        //On test si le rib respecte la taille
+        if (rib != null && rib.length() >= 10) {
+            return rib.substring(5, 10);
+        } else {
+            return rib;
+        }
+
+    }
+
+    /**
+     * Permet de formatter une date recu yyyyMMdd en ce format dd/MM/yyyy
+     *
+     * @return the datePresentation
+     */
+    public static String formaterDateAuFormat(String format, String date) {
+
+        //Variables
+        Date valeur = null;
+        String dateFinale = "";
+        SimpleDateFormat formatDest = new SimpleDateFormat("dd/MM/yyyy");
+
+        //On recup�re la date
+        if (date != null && !date.trim().isEmpty()) {
+
+            try {
+
+                //Onr recupere la date
+                valeur = new SimpleDateFormat(format).parse(date);
+
+                //On formate au bon format
+                dateFinale = formatDest.format(valeur);
+
+            } catch (ParseException ex) {
+
+                //On affiche l'erreur
+                ex.printStackTrace();
+
+            }
+        }
+
+        return dateFinale;
+
+    }
+
+    /**
+     * Fonction permettant d'appliquer le s�parateur de millier sur les montants
+     *
+     * @param montant
+     * @return
+     */
+    public static String separateurMillier(BigDecimal montant) {
+        NumberFormat numberFormat = NumberFormat.getInstance(java.util.Locale.FRENCH);
+        return (numberFormat.format(montant));
+    }
+
+    /**
+     * Permet de formatter une date
+     *
+     * @param formatSource
+     * @param date
+     * @param formatDestinataire
+     * @return
+     */
+    public static String formaterDateAuFormat(String formatSource, String date, String formatDestinataire) {
+
+        //Variables
+        Date valeur = null;
+        String dateFinale = "";
+        SimpleDateFormat format = new SimpleDateFormat(formatDestinataire);
+
+        //On recup�re la date
+        if (date != null && !date.trim().isEmpty()) {
+
+            try {
+
+                //Onr recupere la date
+                valeur = new SimpleDateFormat(formatSource).parse(date);
+
+                //On formate au bon format
+                dateFinale = format.format(valeur);
+
+            } catch (ParseException ex) {
+
+                //On affiche l'erreur
+                ex.printStackTrace();
+
+            }
+        }
+
+        return dateFinale;
+
+    }
+
+    /**
+     * Permet determiner confirmation Sygma
+     *
+     * @param taille
+     * @param chaine
+     * @return
+     */
+    public static String determinerConfirmation(String dateReglement) {
+
+        //On teste si la chaine est non vide
+        if (dateReglement != null && !dateReglement.isEmpty()) {
+            return "Confirm�";
+        } else {
+            return "Non Confirm�";
+        }
+
+    }
+
+    public static String getFileExtension(String fileName) {
+        String extension = "";
+
+        try {
+            extension = fileName.substring(fileName.lastIndexOf("."));
+        } catch (Exception e) {
+            extension = "";
+        }
+
+        return extension;
+
+    }
+
+    /**
+     * Permet de retourer la taille en Kilo d'un fichier
+     *
+     * @param file
+     * @return
+     */
+    public static double getFileSizeKiloOctects(double octets) {
+        return (double) octets / 1024;
+    }
+
+    /**
+     * Permet de convertir un type en long en type Date
+     *
+     * @param file
+     * @return
+     */
+    public static Date convertLongTODate(Long time) {
+
+        //Variables
+        Calendar c = Calendar.getInstance();
+        Date date = null;
+
+        //Si non null
+        if (time != null) {
+
+            //On set la valeur
+            c.setTimeInMillis(time);
+
+            //On recup�re la date
+            date = c.getTime();
+
+        }
+
+        return date;
+    }
+    
+    public static String buildErrorMessage(List<String> errors) {
+        StringBuilder stringBuilder = new StringBuilder("");
+        int size = errors.size();
+        IntStream.range(0, size).forEach(index -> {
+            String message = errors.get(index);
+            if ((index + 1) < size) {
+                stringBuilder.append(message).append("\n");
+            } else {
+                stringBuilder.append(message);
+            }
+        });
+        return stringBuilder.toString();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/FileUtilities.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/FileUtilities.java
new file mode 100644
index 0000000..85c564b
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/FileUtilities.java
@@ -0,0 +1,39 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.nio.charset.UnsupportedCharsetException;
+import org.apache.tika.parser.txt.CharsetDetector;
+import org.apache.tika.parser.txt.CharsetMatch;
+
+/**
+ *
+ * @author ASUS
+ */
+public class FileUtilities {
+    public static Charset getCharset(File file) throws FileNotFoundException, IOException {
+        
+        try ( InputStream stream = new FileInputStream(file);  InputStream input = new BufferedInputStream(stream);) {
+            CharsetDetector charsetDetector = new CharsetDetector();
+
+            charsetDetector.setText(input);
+
+            CharsetMatch charsetMatch = charsetDetector.detect();
+            String charsetName = charsetMatch != null ? charsetMatch.getName() : "UTF-8";
+
+            return Charset.forName(charsetName);
+
+        } catch(UnsupportedCharsetException ex) {
+             return Charset.forName("UTF-8");
+        }
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/context/AppContext.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/context/AppContext.java
new file mode 100644
index 0000000..6554d8f
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/context/AppContext.java
@@ -0,0 +1,48 @@
+package com.megatim.fdxcommons.tools.context;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ *
+ * @author ASUS
+ */
+public class AppContext {
+    public static final String PROPERTY_FILE_PATH = System.getProperty("api-file");
+    public static final String BROKER_FILE_PATH = System.getProperty("broker-file");
+
+    public static final String USER_ACTION_TO_FDX_CONS_DIRECT = "userActionToFdxConsDirect";
+    public static final String USER_ACTION_TO_FDX_CONS_EXCHANGE = "userActionToFdxConsExchange";
+    public static final String USER_ACTION_TO_FDX_CONS_QUEUE = "userActionToFdxConsQueue";
+    public static final String USER_ACTION_TO_FDX_CONS_ROUTING_KEY = "userActionToFdxConsRoutingKey";
+    public static final String DELETE_DATAPRODUCTION_TIMER = "delete-dataproduction-timer";
+
+    /* Format de date */
+    public static String FORMAT_DATE_DDSlashMMSlashYYYY = "dd/MM/yyyy";
+    public static String FORMAT_DATE_MMSlashDDSlashYYYY = "MM/dd/yyyy";
+    public static String FORMAT_DATE_DDMMYYYYHHMMSS = "ddMMyyyyHHmmss";
+    public static String FORMAT_DATE_YYYYMMDD = "yyyyMMdd";
+    public static String FORMAT_DATE_HEURE_CLASSIQUE = "dd/MM/yyyy HH:mm:ss";
+    public static String FORMAT_DATE_YYYYTIRETMMTIRETDD = "yyyy-MM-dd";
+    public static String FORMAT_DATE_YYYYTIRETMMTIRETDD_HHMMSS = "yyyy-MM-dd HH:mm:ss";
+    public static String FORMAT_ANNEE_YYYY = "yyyy";
+    public static String FORMAT_ANNEE_YY = "yy";
+
+    public static final String BROKER = "localhost:9092&maxRequestSize=100000000";
+
+    public static final String REFERENTIEL_INTEGRATION_EXCHANGE = "referentielIntegrationExchange";
+    public static final String REFERENTIEL_INTEGRATION_QUEUE = "referentielIntegrationQueue";
+    public static final String REFERENTIEL_INTEGRATION_ROUTING_KEY = "referentielIntegrationRoutingKey";
+
+    public static final String DATA_INTEGRATION_EXCHANGE = "dataIntegrationExchange";
+    public static final String DATA_INTEGRATION_QUEUE = "dataIntegrationQueue";
+    public static final String DATA_INTEGRATION_ROUTING_KEY = "dataIntegrationRoutingKey";
+
+    public static final String REMOTE_CONFIGURATION_EXCHANGE = "remoteConfigurationExchange";
+    public static final String REMOTE_CONFIGURATION_QUEUE = "remoteConfigurationQueue";
+    public static final String REMOTE_CONFIGURATION_ROUTING_KEY = "remoteConfigurationRoutingKey";
+
+    /* Variables */
+    public static Map<String, String> registre_codes_http = new HashMap<>();
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/connection/DBConnection.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/connection/DBConnection.java
new file mode 100644
index 0000000..0b5c195
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/connection/DBConnection.java
@@ -0,0 +1,23 @@
+package com.megatim.fdxcommons.tools.database.connection;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import javax.sql.DataSource;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class DBConnection {
+
+    private final DataSource dataSource;
+
+    public DBConnection(DataSource dataSource) {
+        this.dataSource = dataSource;
+    }
+
+    public Connection connection() throws SQLException {
+        return dataSource.getConnection();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/AppColumnDefinition.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/AppColumnDefinition.java
new file mode 100644
index 0000000..14a10bb
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/AppColumnDefinition.java
@@ -0,0 +1,21 @@
+package com.megatim.fdxcommons.tools.database.contrat;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface AppColumnDefinition {
+
+    String name();
+
+    String type();
+
+    boolean isNull();
+
+    Object defaultValue();
+
+    default boolean isPrimaryKey() {
+        return false;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/DefaultPreparedStatementProcessor.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/DefaultPreparedStatementProcessor.java
new file mode 100644
index 0000000..68250b7
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/DefaultPreparedStatementProcessor.java
@@ -0,0 +1,64 @@
+package com.megatim.fdxcommons.tools.database.contrat;
+
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryParam;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class DefaultPreparedStatementProcessor implements PreparedStatementProcessor {
+
+    private final AtomicInteger lastIndex;
+
+    public DefaultPreparedStatementProcessor() {
+        lastIndex = new AtomicInteger(0);
+    }
+
+    public DefaultPreparedStatementProcessor(int startIndex) {
+        lastIndex = new AtomicInteger(startIndex);
+    }
+
+    @Override
+    public void process(PreparedStatement statement, List<QueryParam> queryParameters) throws NamingException, SQLException {
+        processStatement(statement, queryParameters);
+    }
+
+    @Override
+    public int lastProcessedIndex() {
+        return lastIndex.get();
+    }
+
+    private void processStatement(PreparedStatement preparedStatement, List<QueryParam> params) throws SQLException {
+
+        int statementIndex = 1;
+
+        for (QueryParam parameter : params) {
+
+            Object value = parameter.getParamValue();
+            if (value instanceof String) {
+                preparedStatement.setString(statementIndex, value.toString());
+            } else if (value instanceof Integer) {
+                preparedStatement.setInt(statementIndex, (Integer) value);
+            } else if (value instanceof Long) {
+                preparedStatement.setLong(statementIndex, (Long) value);
+            } else if (value instanceof Double) {
+                preparedStatement.setDouble(statementIndex, (Double) value);
+            } else if (value instanceof LocalDateTime) {
+                preparedStatement.setTimestamp(statementIndex, Timestamp.valueOf((LocalDateTime) value));
+            } else {
+                preparedStatement.setObject(statementIndex, value);
+            }
+
+            statementIndex++;
+        }
+
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/Insert.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/Insert.java
new file mode 100644
index 0000000..9dd6bbd
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/Insert.java
@@ -0,0 +1,10 @@
+package com.megatim.fdxcommons.tools.database.contrat;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface Insert {
+
+    long insert(TypeFichierInsertMetaData insertMetaData) throws Exception;
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonInsert.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonInsert.java
new file mode 100644
index 0000000..750d3c8
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonInsert.java
@@ -0,0 +1,15 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.contrat;
+
+import com.megatim.fdxcommons.tools.database.queries.metadata.JsonFdxParsedDataIterator;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface JsonInsert {
+    long insert(JsonFdxParsedDataIterator parsedDataIterator) throws Exception;
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonResultSetProcessor.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonResultSetProcessor.java
new file mode 100644
index 0000000..04f6892
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonResultSetProcessor.java
@@ -0,0 +1,143 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.contrat;
+
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.pojo.JsonTableDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.IndexColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.ParentIdColumnDefinition;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonResultSetProcessor {
+
+    private final ResultSet resultSet;
+    private final JsonTableDefinition tableDefinition;
+
+    public JsonResultSetProcessor(ResultSet resultSet, JsonTableDefinition tableDefinition) {
+        this.resultSet = resultSet;
+        this.tableDefinition = tableDefinition;
+    }
+
+    public Map<Long, Object> process() throws SQLException {
+        Map<Long, Object> data = new HashMap<>();
+
+        while (resultSet.next()) {
+            mergeData(resultSet, tableDefinition, data, null);
+        }
+        return data;
+    }
+
+    /**
+     *
+     * @param resSet : ligne de données à traiter
+     * @param tableDefinition : structure de la donnée à extraire
+     * @param data : données ayant été extraites lors des précédents parcours
+     * @param parentId : L'id du parent de la donnée
+     * @return : retourne les données extraites
+     * @throws SQLException
+     */
+    private Object mergeData(ResultSet resSet, JsonTableDefinition tableDefinition, Map<Long, Object> data, Long parentId) throws SQLException {
+        Map<String, String> columnsAliasToColumnName = columnsAliasToColumnName(tableDefinition.getColumnDefs(), tableDefinition.getTableName());
+        String indexAlias = columnAlias(tableDefinition.getTableName(), new IndexColumnDefinition().name());
+        final Long fdxIndex = resSet.getLong(indexAlias);
+
+        String parentIdAlias = null;
+        Long childParentId = null;
+
+        if (parentId != null) {
+            parentIdAlias = columnAlias(tableDefinition.getTableName(), new ParentIdColumnDefinition().name());
+            childParentId = resSet.getLong(parentIdAlias);
+        }
+
+        if (parentId == null || parentId.equals(childParentId)) {
+            if (data.containsKey(fdxIndex)) {
+                Object obj = data.get(fdxIndex);
+                Map map = (Map) obj;
+
+                for (JsonTableDefinition t : tableDefinition.getTablesDefinition()) {
+                    Object ob = (Map) map.get(t.getParentFieldName());
+                    Map<Long, Object> m = new HashMap<>();
+
+                    if (ob != null) {
+                        m = (Map) ob;
+                    }
+                    map.put(t.getParentFieldName(), mergeData(resSet, t, m, fdxIndex));
+                    data.put(fdxIndex, map);
+                }
+
+            } else {
+                Map<String, Object> simpleData = simpleData = retrieveData(resSet, columnsAliasToColumnName);
+                data.put(fdxIndex, simpleData);
+
+                for (JsonTableDefinition t : tableDefinition.getTablesDefinition()) {
+                    String newParentIdAlias = columnAlias(t.getTableName(), new ParentIdColumnDefinition().name());
+                    Long newChildParentId = resSet.getLong(newParentIdAlias);
+
+                    if (newChildParentId.equals(fdxIndex)) { 
+                        Map<Long, Object> m = new HashMap<>();
+                        mergeData(resSet, t, m, fdxIndex);
+                        simpleData.put(t.getParentFieldName(), m);
+                    }
+                }
+
+                return data;
+            }
+        }
+        return data;
+    }
+
+
+    /**
+     * Extraction des données simples d'un objet
+     *
+     * @param resultSet
+     * @param columnsAliasToColumnName
+     * @return
+     * @throws SQLException
+     */
+    private Map<String, Object> retrieveData(ResultSet resultSet, Map<String, String> columnsAliasToColumnName) throws SQLException {
+        ResultSetMetaData metaData = resultSet.getMetaData();
+        int columnCount = metaData.getColumnCount();
+        Map<String, Object> selectResult = new HashMap<>();
+
+        for (int i = 1; i <= columnCount; i++) {
+            if (columnsAliasToColumnName.containsKey(metaData.getColumnName(i).trim().toLowerCase())) {
+                selectResult.put(columnsAliasToColumnName.get(metaData.getColumnName(i).trim().toLowerCase()), resultSet.getObject(i));
+            }
+        }
+        return selectResult;
+    }
+
+    /**
+     * Méthode qui associe chaque alias de colonne au nom réel de colonne
+     *
+     * @param columnsDef
+     * @param tableName : table
+     * @return
+     */
+    private Map<String, String> columnsAliasToColumnName(List<ColumnDefinition> columnsDef, String tableName) {
+        Map<String, String> columnsAliasToColumnName = new HashMap<>();
+
+        columnsDef.stream().forEach(c -> {
+            columnsAliasToColumnName.put(columnAlias(tableName, c.getName()), c.getName());
+        });
+        columnsAliasToColumnName.put(columnAlias(tableName, new IndexColumnDefinition().name()), new IndexColumnDefinition().name());
+        columnsAliasToColumnName.put(columnAlias(tableName, new ParentIdColumnDefinition().name()), new ParentIdColumnDefinition().name());
+        return columnsAliasToColumnName;
+    }
+
+    private String columnAlias(String tableName, String columnName) {
+        return (tableName + "_" + columnName).toLowerCase();
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonStructureIterator.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonStructureIterator.java
new file mode 100644
index 0000000..8f1c2fd
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonStructureIterator.java
@@ -0,0 +1,135 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.contrat;
+
+import com.megatim.fdxcommons.model.pojo.JsonTableDefinition;
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.integration.json.JsonStructure;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonStructureIterator {
+
+    private final JsonStructure jsonStructure;
+    private final String tableName;
+
+    public JsonStructureIterator(String tableName, JsonStructure jsonStructure) {
+        this.jsonStructure = jsonStructure;
+        this.tableName = tableName;
+    }
+
+    /**
+     * ColumnDefinition mais avec le nom complet de la colonne (exples :
+     * adresse.ville, cpteBanque.rib pour les colonnes de niveau 2)
+     *
+     * @return
+     */
+    public List<ColumnDefinition> columnsDefinitionWithFullQualifiedName() {
+        List<ColumnDefinition> columnsDefinition = new ArrayList<>();
+
+        List<JsonStructure> fields = jsonStructure.getFields();
+        List<JsonStructure> fieldsWithoutParent = fields.stream().filter(f -> !f.getTypeDonnee().equals(TypeDonnee.OBJET)).collect(Collectors.toList());
+        List<JsonStructure> fieldsWithParent = fields.stream().filter(f -> f.getTypeDonnee().equals(TypeDonnee.OBJET)).collect(Collectors.toList());
+
+        columnsDefinition.addAll(columnsDefinitionWithFullQualifiedName(fieldsWithoutParent, ""));
+        fieldsWithParent.stream().forEach(j -> columnsDefinition.addAll(columnsDefinitionWithFullQualifiedName(j, "")));
+
+        return columnsDefinition;
+    }
+
+    public JsonTableDefinition tableDefinition() throws SQLException {
+        List<JsonStructure> fields = jsonStructure.getFields();
+
+        List<JsonStructure> simpleFields = fields.stream().filter(f -> !f.isCollection() && !f.getTypeDonnee().equals(TypeDonnee.OBJET)).collect(Collectors.toList());
+        JsonTableDefinition tableDefinition = new JsonTableDefinition(tableName.toLowerCase(), columnsDefinition(simpleFields), null, "");
+
+        List<JsonStructure> objectFields = fields.stream().filter(f -> f.isCollection() || f.getTypeDonnee().equals(TypeDonnee.OBJET)).collect(Collectors.toList());
+
+        for (JsonStructure j : objectFields) {
+            tableDefinition.getTablesDefinition().add(tableDefinition(j, tableName, j.getName()));
+        }
+        return tableDefinition;
+    }
+
+    private List<ColumnDefinition> columnsDefinitionWithFullQualifiedName(JsonStructure jsonStructure, String parentFullQualifiedName) {
+        List<ColumnDefinition> columnsDefinition = new ArrayList<>();
+
+        for (JsonStructure j : jsonStructure.getFields()) {
+            if (j.getTypeDonnee().equals(TypeDonnee.OBJET)) {
+                if (parentFullQualifiedName.isEmpty()) {
+                    columnsDefinition.addAll(columnsDefinitionWithFullQualifiedName(j, jsonStructure.getName()));
+                } else {
+                    columnsDefinition.addAll(columnsDefinitionWithFullQualifiedName(j, parentFullQualifiedName + "." + jsonStructure.getName()));
+                }
+            } else {
+                if (parentFullQualifiedName.isEmpty()) {
+                    columnsDefinition.add(columnDefinitionWithFullQualifiedName(j, jsonStructure.getName()));
+                } else {
+                    columnsDefinition.add(columnDefinitionWithFullQualifiedName(j, parentFullQualifiedName + "." + jsonStructure.getName()));
+                }
+
+            }
+        }
+        return columnsDefinition;
+    }
+
+    private JsonTableDefinition tableDefinition(JsonStructure jsonStruct, String parentTableName, String parentFieldName) {
+        JsonTableDefinition tableDef = null;
+
+        if (jsonStruct.getTypeDonnee().equals(TypeDonnee.OBJET)) {
+            List<JsonStructure> simpleFields = jsonStruct.getFields().stream().filter(f -> !f.isCollection() && !f.getTypeDonnee().equals(TypeDonnee.OBJET)).collect(Collectors.toList());
+            tableDef = new JsonTableDefinition((parentTableName + "_" + jsonStruct.getName()).toLowerCase(), columnsDefinition(simpleFields), parentTableName.toLowerCase(), parentFieldName);
+
+            List<JsonStructure> objectFields = jsonStruct.getFields().stream().filter(f -> f.isCollection() || f.getTypeDonnee().equals(TypeDonnee.OBJET)).collect(Collectors.toList());
+
+            for (JsonStructure j : objectFields) {
+                String newParentTableName = parentTableName.isEmpty() ? jsonStruct.getName() : parentTableName + "_" + jsonStruct.getName();
+                String newParentFieldName = parentFieldName.isEmpty() ? jsonStruct.getName() : parentFieldName + "." + j.getName();
+                tableDef.getTablesDefinition().add(tableDefinition(j, newParentTableName, newParentFieldName));
+            }
+        } else if (jsonStruct.isCollection()) {
+            tableDef = new JsonTableDefinition((parentTableName + "_" + jsonStruct.getName()).toLowerCase(), columnsDefinition(Arrays.asList(jsonStruct)), parentTableName.toLowerCase(), parentFieldName);
+        }
+        return tableDef;
+    }
+
+    private List<ColumnDefinition> columnsDefinition(List<JsonStructure> fields) {
+        List<ColumnDefinition> columnsDefinition = new ArrayList<>();
+        fields.stream().forEach(f -> columnsDefinition.add(new ColumnDefinition(f.getName(), f.getTypeDonnee().name(), f.getLengthh(), f.isRequired(), f.isCollection())));
+
+        return columnsDefinition;
+    }
+
+    private List<ColumnDefinition> columnsDefinitionWithFullQualifiedName(List<JsonStructure> fields, String parentFullQualifiedName) {
+        List<ColumnDefinition> columnsDefinition = new ArrayList<>();
+        fields.stream().forEach(f -> {
+            if (parentFullQualifiedName.isEmpty()) {
+                columnsDefinition.add(new ColumnDefinition(f.getName(), f.getTypeDonnee().name(), f.getLengthh(), f.isRequired(), f.isCollection()));
+            } else {
+                columnsDefinition.add(new ColumnDefinition(parentFullQualifiedName + "." + f.getName(), f.getTypeDonnee().name(), f.getLengthh(), f.isRequired(), f.isCollection()));
+            }
+        }
+        );
+
+        return columnsDefinition;
+    }
+
+    private ColumnDefinition columnDefinitionWithFullQualifiedName(JsonStructure f, String parentFullQualifiedName) {
+        if (parentFullQualifiedName.isEmpty()) {
+            return new ColumnDefinition(f.getName(), f.getTypeDonnee().name(), f.getLengthh(), f.isRequired(), f.isCollection());
+        } else {
+            return new ColumnDefinition(parentFullQualifiedName + "." + f.getName(), f.getTypeDonnee().name(), f.getLengthh(), f.isRequired(), f.isCollection());
+        }
+
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonTypeFichierDataRow.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonTypeFichierDataRow.java
new file mode 100644
index 0000000..569f778
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonTypeFichierDataRow.java
@@ -0,0 +1,18 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.contrat;
+
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface JsonTypeFichierDataRow {
+
+    List<TypeFichierDataColumn> columns() throws Exception;
+
+    List<JsonTypeFichierDataRow> children();
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonTypeFichierInsertMetaData.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonTypeFichierInsertMetaData.java
new file mode 100644
index 0000000..e6aa133
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonTypeFichierInsertMetaData.java
@@ -0,0 +1,22 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.contrat;
+
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface JsonTypeFichierInsertMetaData {
+
+    String tableName();
+
+    TypeFichierDataRow row() throws Exception;
+
+    List<String> columnNames() throws Exception;
+
+    List<JsonTypeFichierInsertMetaData> children() throws Exception;
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/PreparedStatementProcessor.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/PreparedStatementProcessor.java
new file mode 100644
index 0000000..97e88bb
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/PreparedStatementProcessor.java
@@ -0,0 +1,16 @@
+package com.megatim.fdxcommons.tools.database.contrat;
+
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryParam;
+import java.sql.PreparedStatement;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface PreparedStatementProcessor {
+
+    void process(PreparedStatement statement, List<QueryParam> queryParameters) throws Exception;
+    
+    int lastProcessedIndex();
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/QueryMetaData.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/QueryMetaData.java
new file mode 100644
index 0000000..bad6628
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/QueryMetaData.java
@@ -0,0 +1,10 @@
+package com.megatim.fdxcommons.tools.database.contrat;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface QueryMetaData<T> {
+
+    T execute() throws Exception;
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/ResultSetExtractor.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/ResultSetExtractor.java
new file mode 100644
index 0000000..95623c5
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/ResultSetExtractor.java
@@ -0,0 +1,47 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.contrat;
+
+import com.megatim.fdxcommons.model.pojo.JsonTableDefinition;
+import java.sql.ResultSet;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public class ResultSetExtractor {
+
+    private final ResultSet resultSet;
+    private final JsonTableDefinition tableDefinition;
+    private SimpleData data;
+    private final List<ResultSetExtractor> resultSetsExtractor = new ArrayList<>();
+
+    public ResultSetExtractor(ResultSet resultSet, JsonTableDefinition tableDefinition) {
+        this.resultSet = resultSet;
+        this.tableDefinition = tableDefinition;
+    }
+
+    public ResultSet getResultSet() {
+        return resultSet;
+    }
+
+    public JsonTableDefinition getTableDefinition() {
+        return tableDefinition;
+    }
+
+    public SimpleData getData() {
+        return data;
+    }
+
+    public void setData(SimpleData data) {
+        this.data = data;
+    }
+
+    public List<ResultSetExtractor> getResultSetsExtractor() {
+        return resultSetsExtractor;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/Select.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/Select.java
new file mode 100644
index 0000000..15bfcb3
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/Select.java
@@ -0,0 +1,14 @@
+package com.megatim.fdxcommons.tools.database.contrat;
+
+import com.megatim.fdxcommons.tools.database.tables.FdxTableRow;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface Select {
+
+    List<FdxTableRow> rows() throws Exception;
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/SimpleData.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/SimpleData.java
new file mode 100644
index 0000000..c4777a0
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/SimpleData.java
@@ -0,0 +1,35 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.contrat;
+
+import java.util.Map;
+
+/**
+ *
+ * @author ASUS
+ */
+public class SimpleData {
+    private final Long index;
+    private final Map<String, Object> data;
+
+    public SimpleData(Long index, Map<String, Object> data) {
+        this.index = index;
+        this.data = data;
+    }
+
+    public Long getIndex() {
+        return index;
+    }
+
+    public Map<String, Object> getData() {
+        return data;
+    }
+
+    @Override
+    public String toString() {
+        return "SimpleData{" + "index=" + index + ", data=" + data + '}';
+    }
+    
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/TableName.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/TableName.java
new file mode 100644
index 0000000..ea9d59a
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/TableName.java
@@ -0,0 +1,13 @@
+package com.megatim.fdxcommons.tools.database.contrat;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface TableName {
+
+    String name(Connection connection) throws SQLException;
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/TypeFichierDataColumn.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/TypeFichierDataColumn.java
new file mode 100644
index 0000000..1f89886
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/TypeFichierDataColumn.java
@@ -0,0 +1,12 @@
+package com.megatim.fdxcommons.tools.database.contrat;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface TypeFichierDataColumn {
+
+    String column();
+
+    Object value() throws Exception;
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/TypeFichierDataRow.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/TypeFichierDataRow.java
new file mode 100644
index 0000000..2e5a590
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/TypeFichierDataRow.java
@@ -0,0 +1,12 @@
+package com.megatim.fdxcommons.tools.database.contrat;
+
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface TypeFichierDataRow {
+    
+    List<TypeFichierDataColumn> columns() throws Exception;
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/TypeFichierInsertMetaData.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/TypeFichierInsertMetaData.java
new file mode 100644
index 0000000..012ae4a
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/TypeFichierInsertMetaData.java
@@ -0,0 +1,16 @@
+package com.megatim.fdxcommons.tools.database.contrat;
+
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface TypeFichierInsertMetaData {
+
+    String tableName();
+    
+    List<TypeFichierDataRow> rows() throws Exception;
+
+    List<String> columnNames() throws Exception;
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/TypeFichierUpdateMetaData.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/TypeFichierUpdateMetaData.java
new file mode 100644
index 0000000..01652f7
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/TypeFichierUpdateMetaData.java
@@ -0,0 +1,16 @@
+package com.megatim.fdxcommons.tools.database.contrat;
+
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface TypeFichierUpdateMetaData {
+
+    String tableName();
+
+    TypeFichierDataRow row() throws Exception;
+
+    List<String> columnNames() throws Exception;
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/BadColumnTypeException.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/BadColumnTypeException.java
new file mode 100644
index 0000000..a6feeb7
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/BadColumnTypeException.java
@@ -0,0 +1,11 @@
+package com.megatim.fdxcommons.tools.database.exceptions;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class BadColumnTypeException extends Exception {
+    public BadColumnTypeException(String message) {
+        super(message);
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/BadDataValueException.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/BadDataValueException.java
new file mode 100644
index 0000000..cff8293
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/BadDataValueException.java
@@ -0,0 +1,13 @@
+package com.megatim.fdxcommons.tools.database.exceptions;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class BadDataValueException extends Exception {
+
+    public BadDataValueException(String message) {
+        super(message);
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/BadQueryCriteriaException.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/BadQueryCriteriaException.java
new file mode 100644
index 0000000..225bdcf
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/BadQueryCriteriaException.java
@@ -0,0 +1,11 @@
+package com.megatim.fdxcommons.tools.database.exceptions;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class BadQueryCriteriaException extends Exception {
+    public BadQueryCriteriaException(String message) {
+        super(message);
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/ColumnNotFoundException.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/ColumnNotFoundException.java
new file mode 100644
index 0000000..1a6c05e
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/ColumnNotFoundException.java
@@ -0,0 +1,12 @@
+package com.megatim.fdxcommons.tools.database.exceptions;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class ColumnNotFoundException extends Exception {
+
+    public ColumnNotFoundException(String message) {
+        super(message);
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/LocalDateTimeValueParseError.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/LocalDateTimeValueParseError.java
new file mode 100644
index 0000000..99f9a4c
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/LocalDateTimeValueParseError.java
@@ -0,0 +1,13 @@
+package com.megatim.fdxcommons.tools.database.exceptions;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class LocalDateTimeValueParseError extends Exception {
+
+    public LocalDateTimeValueParseError(String message) {
+        super(message);
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/MoreThanOneTableDataNotFoundException.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/MoreThanOneTableDataNotFoundException.java
new file mode 100644
index 0000000..097362a
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/MoreThanOneTableDataNotFoundException.java
@@ -0,0 +1,11 @@
+package com.megatim.fdxcommons.tools.database.exceptions;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class MoreThanOneTableDataNotFoundException extends Exception {
+    public MoreThanOneTableDataNotFoundException(String message) {
+        super(message);
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/TableDataNotFoundException.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/TableDataNotFoundException.java
new file mode 100644
index 0000000..a570266
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/TableDataNotFoundException.java
@@ -0,0 +1,13 @@
+package com.megatim.fdxcommons.tools.database.exceptions;
+
+import javax.ws.rs.WebApplicationException;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class TableDataNotFoundException extends WebApplicationException {
+    public TableDataNotFoundException(String message) {
+        super(message);
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/TableNotCummulativeException.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/TableNotCummulativeException.java
new file mode 100644
index 0000000..96042a3
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/TableNotCummulativeException.java
@@ -0,0 +1,13 @@
+package com.megatim.fdxcommons.tools.database.exceptions;
+
+import javax.ws.rs.WebApplicationException;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class TableNotCummulativeException extends WebApplicationException {
+    public TableNotCummulativeException(String message) {
+        super(message);
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/TypeFichierDataBadRequest.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/TypeFichierDataBadRequest.java
new file mode 100644
index 0000000..e7c8b6e
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/exceptions/TypeFichierDataBadRequest.java
@@ -0,0 +1,12 @@
+package com.megatim.fdxcommons.tools.database.exceptions;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class TypeFichierDataBadRequest extends Exception {
+
+    public TypeFichierDataBadRequest(String message) {
+        super(message);
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/AggregationQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/AggregationQuery.java
new file mode 100644
index 0000000..fab1510
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/AggregationQuery.java
@@ -0,0 +1,99 @@
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.model.enumeration.FonctionAggregation;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.contrat.DefaultPreparedStatementProcessor;
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import com.megatim.fdxcommons.tools.database.queries.metadata.WhereQueryParameters;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.IntStream;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class AggregationQuery implements QueryMetaData<List<String[]>> {
+
+    private final String tableName;
+    private final Connection connection;
+    private final QueryCriterion queryCriterion;
+    private final String targetColumn;
+    private final FonctionAggregation fonctionAggregation;
+    private final List<String> groupingColumns;
+
+    public AggregationQuery(String tableName, Connection connection, QueryCriterion queryCriterion, String targetColumn, List<String> groupingColumns, FonctionAggregation fonctionAggregation) {
+        this.tableName = tableName;
+        this.targetColumn = targetColumn;
+        this.connection = connection;
+        this.queryCriterion = queryCriterion;
+        this.groupingColumns = groupingColumns;
+        this.fonctionAggregation = fonctionAggregation;
+    }
+
+    @Override
+    public List<String[]> execute() throws Exception {
+
+        System.out.println("<------------------------------------------------------------------------------------------------------------------------------->");
+        System.out.println(aggregationQuery());
+        System.out.println("<------------------------------------------------------------------------------------------------------------------------------->");
+
+        try (PreparedStatement statement = connection.prepareStatement(aggregationQuery())) {
+
+            new DefaultPreparedStatementProcessor().process(statement, new WhereQueryParameters(queryCriterion).parameters());
+
+            try ( ResultSet resultSet = statement.executeQuery()) {
+
+                List<String[]> results = new ArrayList<>();
+
+                while (resultSet.next()) {
+
+                    String[] result = new String[groupingColumns.size() + 1];
+                    result[0] = resultSet.getString(aggregationColumnName());
+                    for (int i = 0; i < groupingColumns.size(); i++) {
+                        String r = resultSet.getString(groupingColumns.get(i));
+                        result[i + 1] = r != null ? r : "";
+                    }
+
+                    results.add(result);
+                }
+
+                return results;
+
+            }
+        }
+    }
+
+    private String aggregationQuery() {
+        StringBuilder query = new StringBuilder("SELECT COALESCE(" + fonctionAggregation.toString() + "(" + targetColumn + "), 0) AS " + aggregationColumnName()
+                + groupingColumnsSelection() + " FROM ").append(tableName);
+        query.append(new WhereQueryString(queryCriterion).query());
+        query.append(new GroupByQuery(groupingColumns).query());
+        return query.toString();
+    }
+
+    private String aggregationColumnName() {
+        return tableName + "_" + fonctionAggregation.toString();
+    }
+
+    private String groupingColumnsSelection() {
+        StringBuilder query = new StringBuilder();
+
+        int size = groupingColumns.size();
+        if (size > 0) {
+            query.append(", ");
+        }
+        IntStream.range(0, size).forEach(index -> {
+            String column = groupingColumns.get(index);
+            query.append(column);
+            if ((index + 1) < size) {
+                query.append(",");
+            }
+        });
+
+        return query.toString();
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CountQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CountQuery.java
new file mode 100644
index 0000000..2067896
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CountQuery.java
@@ -0,0 +1,95 @@
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.contrat.DefaultPreparedStatementProcessor;
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import com.megatim.fdxcommons.tools.database.queries.metadata.WhereQueryParameters;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.IntStream;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class CountQuery implements QueryMetaData<List<String[]>> {
+
+    private final String tableName;
+    private final Connection connection;
+    private final QueryCriterion queryCriterion;
+    private final List<String> groupingColumns;
+
+    public CountQuery(String tableName, Connection connection, QueryCriterion queryCriterion, List<String> groupingColumns) {
+        this.tableName = tableName;
+        this.connection = connection;
+        this.queryCriterion = queryCriterion;
+        this.groupingColumns = groupingColumns;
+    }
+
+    @Override
+    public List<String[]> execute() throws Exception {
+
+        System.out.println("<------------------------------------------------------------------------------------------------------------------------------->");
+        System.out.println(countQuery());
+        System.out.println("<------------------------------------------------------------------------------------------------------------------------------->");
+
+        try ( PreparedStatement statement = connection.prepareStatement(countQuery())) {
+
+            new DefaultPreparedStatementProcessor().process(statement, new WhereQueryParameters(queryCriterion).parameters());
+
+            try ( ResultSet resultSet = statement.executeQuery()) {
+
+                List<String[]> results = new ArrayList<>();
+
+                while (resultSet.next()) {
+
+                    String[] result = new String[groupingColumns.size() + 1];
+                    result[0] = resultSet.getString(countColumnName());
+                    for (int i = 0; i < groupingColumns.size(); i++) {
+
+                        String r = resultSet.getString(groupingColumns.get(i));
+                        result[i + 1] = r != null ? r : "";
+                    }
+
+                    results.add(result);
+                }
+
+                return results;
+            }
+        }
+    }
+
+    private String countQuery() {
+        StringBuilder query = new StringBuilder("SELECT COUNT(*) AS " + countColumnName() + groupingColumnsSelection() + " FROM ").append(tableName);
+        query.append(new WhereQueryString(queryCriterion).query());
+
+        query.append(new GroupByQuery(groupingColumns).query());
+        return query.toString();
+    }
+
+    private String countColumnName() {
+        return tableName + "_count";
+    }
+
+    private String groupingColumnsSelection() {
+        StringBuilder query = new StringBuilder();
+
+        int size = groupingColumns.size();
+        if (size > 0) {
+            query.append(", ");
+        }
+        IntStream.range(0, size).forEach(index -> {
+            String column = groupingColumns.get(index);
+            query.append(column);
+            if ((index + 1) < size) {
+                query.append(",");
+            }
+        });
+
+        return query.toString();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CreateDataProductionQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CreateDataProductionQuery.java
new file mode 100644
index 0000000..7df1a81
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CreateDataProductionQuery.java
@@ -0,0 +1,73 @@
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class CreateDataProductionQuery implements QueryMetaData<Long> {
+
+    private final CommonDataProduction dataProduction;
+    private final Connection connection;
+
+    public CreateDataProductionQuery(CommonDataProduction dataProduction, Connection connection) {
+        this.dataProduction = dataProduction;
+        this.connection = connection;
+    }
+
+    private String queryString() {
+        return "INSERT INTO dataproduction(id, dateproduction, referentielversion, codetypefichier, codeparticipant, source, filename, statutdataproduction, filedate, dataProductionType, token, nbreElements, tailleFichier, tokenDirectory)"
+                + " VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+    }
+
+    @Override
+    public Long execute() throws NamingException, SQLException {
+
+        System.out.println("<-------------------------------------------------------------------------->");
+        System.out.println(queryString());
+        System.out.println("<-------------------------------------------------------------------------->");
+
+        String getNextIdQuery = "SELECT nextval('SEQ_DATA_PRODUCTION')";
+
+        try (
+                 PreparedStatement statement = connection.prepareStatement(queryString());  PreparedStatement getIdStatement = connection.prepareStatement(getNextIdQuery);// Fetch the next sequence value
+                ) {
+
+            long generatedId = dataProduction.getId() != null ? dataProduction.getId() : 0;
+
+            if (dataProduction.getId() == null || dataProduction.getId() <= 0) {//Si l'id de la production n'est pas encore initialisé (FdxApi)
+                ResultSet resultSet = getIdStatement.executeQuery();
+                if (resultSet.next()) {
+                    generatedId = resultSet.getLong(1);
+                }
+            }
+
+            statement.setLong(1, generatedId);
+            statement.setTimestamp(2, dataProduction.getDateProduction() != null ? Timestamp.valueOf(dataProduction.getDateProduction()) : null);
+            statement.setString(3, dataProduction.getReferentielVersion());
+            statement.setString(4, dataProduction.getCodeTypeFichier());
+            statement.setString(5, dataProduction.getCodeParticipant());
+            statement.setString(6, dataProduction.getSource().name());
+            statement.setString(7, dataProduction.getFileName());
+            statement.setString(8, dataProduction.getStatutDataProduction().name());
+            statement.setTimestamp(9, dataProduction.getFileDate() != null ? Timestamp.valueOf(dataProduction.getFileDate()) : null);
+            statement.setString(10, dataProduction.getDataProductionType().name());
+            statement.setString(11, dataProduction.getToken());
+            statement.setLong(12, dataProduction.getNbreElements());
+            statement.setLong(13, dataProduction.getTailleFichier());
+            statement.setString(14, dataProduction.getTokenDirectory());
+
+            statement.executeUpdate();
+
+            return generatedId;
+        }
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CreateTableIfNotExistQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CreateTableIfNotExistQuery.java
new file mode 100644
index 0000000..908925e
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CreateTableIfNotExistQuery.java
@@ -0,0 +1,135 @@
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import static com.megatim.fdxcommons.model.enumeration.TypeDonnee.ALPHANUMERIQUE;
+import static com.megatim.fdxcommons.model.enumeration.TypeDonnee.DATE;
+import static com.megatim.fdxcommons.model.enumeration.TypeDonnee.DECIMAL;
+import static com.megatim.fdxcommons.model.enumeration.TypeDonnee.NUMERIQUE;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.tools.database.contrat.AppColumnDefinition;
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import com.megatim.fdxcommons.tools.database.contrat.TableName;
+import com.megatim.fdxcommons.tools.database.exceptions.BadColumnTypeException;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.AppColumnDefinitions;
+import java.sql.Connection;
+import java.sql.JDBCType;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class CreateTableIfNotExistQuery implements QueryMetaData<Void> {
+
+    private final Connection connection;
+    private final AppColumnDefinitions appColumnDefinitions;
+    private final TableName tableName;
+    private final List<ColumnDefinition> columnDefinitions;
+
+    public CreateTableIfNotExistQuery(
+            TableName tableName,
+            List<ColumnDefinition> columnDefinitions,
+            AppColumnDefinitions appColumnDefinitions,
+            Connection connection
+    ) {
+        this.connection = connection;
+        this.appColumnDefinitions = appColumnDefinitions;
+        this.tableName = tableName;
+        this.columnDefinitions = columnDefinitions;
+    }
+
+    @Override
+    public Void execute() throws SQLException, NamingException, BadColumnTypeException {
+
+        String query = query(tableName, columnDefinitions);
+
+        try ( Statement stmt = connection.createStatement()) {
+            stmt.execute(query);
+        }
+
+        return null;
+    }
+
+    private String query(TableName tableName, List<ColumnDefinition> columns) throws BadColumnTypeException, SQLException {
+
+        StringBuilder query = new StringBuilder("CREATE TABLE IF NOT EXISTS " + tableName.name(connection) + "(");
+        List<AppColumnDefinition> primaryKeys = new ArrayList<>();
+
+        //Ordonner les colonnes par ordre croissant des positions, afin de les insérer dans cet ordre
+        Collections.sort(columns, (ColumnDefinition c1, ColumnDefinition c2) -> Integer.valueOf(c1.getPosition()).compareTo(c2.getPosition()));
+
+        for (ColumnDefinition columnDefinition : columns) {
+            query.append(columnDefinition.getName().toLowerCase()).append(" ").append(sqlColumnType(columnDefinition)).append(", ");
+        }
+
+        for (AppColumnDefinition appColumnDefinition : appColumnDefinitions.appColumns()) {
+            query.append(columnDefinitonString(appColumnDefinition)).append(", ");
+
+            if (appColumnDefinition.isPrimaryKey()) {
+                primaryKeys.add(appColumnDefinition);
+            }
+        }
+        if (!primaryKeys.isEmpty()) {
+            query.append(" PRIMARY KEY(");
+            primaryKeys.stream().forEach(pk -> query.append(pk.name()).append(", "));
+
+            //Retirer la dernière virgule
+            query.replace(query.length() - 2, query.length(), "));");
+        } else {
+            //Retirer la dernière virgule
+            query.replace(query.length() - 2, query.length(), ");");
+        }
+
+        return query.toString();
+    }
+
+    private String sqlColumnType(ColumnDefinition column) throws BadColumnTypeException {
+        switch (TypeDonnee.fromValeur(column.getTypeDonnee())) {
+            case ALPHANUMERIQUE:
+                return jdbcType(column) + "(" + column.getTaille() + ")";
+            case NUMERIQUE:
+                return jdbcType(column).getName();
+            case DATE:
+                return jdbcType(column).getName() + " NULL";
+            case DECIMAL:
+                return jdbcType(column) + "(" + column.getTaille() + "," + column.getTaillePartieDecimale() + ")";
+        }
+        throw new BadColumnTypeException("Type de colonne incorrect " + column.getTypeDonnee());
+    }
+
+    private JDBCType jdbcType(ColumnDefinition column) throws BadColumnTypeException {
+        switch (TypeDonnee.fromValeur(column.getTypeDonnee())) {
+            case NUMERIQUE:
+                return column.getTaille() < 5 ? JDBCType.SMALLINT : JDBCType.BIGINT;
+            case DECIMAL:
+                return JDBCType.DECIMAL;
+            case DATE:
+                return JDBCType.TIMESTAMP;
+            case ALPHANUMERIQUE:
+                return JDBCType.VARCHAR;
+        }
+        throw new BadColumnTypeException("Type de colonne incorrect " + column.getName());
+    }
+
+    private String columnDefinitonString(AppColumnDefinition column) throws BadColumnTypeException {
+        StringBuilder definition = new StringBuilder();
+        definition
+                .append(column.name().toLowerCase())
+                .append(" ")
+                .append(column.type())
+                .append(" ")
+                .append(column.isNull() ? "NULL " : "NOT NULL ");
+        if (column.defaultValue() != null) {
+            definition
+                    .append("DEFAULT ")
+                    .append(column.defaultValue());
+        }
+        return definition.toString();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CurrentDataProductionQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CurrentDataProductionQuery.java
new file mode 100644
index 0000000..44bb563
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CurrentDataProductionQuery.java
@@ -0,0 +1,42 @@
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class CurrentDataProductionQuery implements QueryMetaData<Long> {
+
+    private final String codeTypeFichier;
+    private final String referentielVersion;
+    private final Connection connection;
+
+    public CurrentDataProductionQuery(String codeTypeFichier, String referentielVersion, Connection connection) {
+        this.codeTypeFichier = codeTypeFichier;
+        this.referentielVersion = referentielVersion;
+        this.connection = connection;
+    }
+
+    @Override
+    public Long execute() throws Exception {
+        String query = "SELECT MAX(id) FROM dataproduction WHERE codetypefichier  = ? AND referentielversion = ?";
+        Long id = null;
+
+        try (PreparedStatement statement = connection.prepareStatement(query);) {
+
+            statement.setString(1, codeTypeFichier);
+            statement.setString(2, referentielVersion);
+            ResultSet resultSet = statement.executeQuery();
+
+            if (resultSet.next()) {
+                id = resultSet.getLong(1);
+            }
+        }
+        return id;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CustomQueries.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CustomQueries.java
new file mode 100644
index 0000000..e9fa997
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CustomQueries.java
@@ -0,0 +1,89 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionIdColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.IndexColumnDefinition;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public class CustomQueries {
+
+    public Long selectMinIndexOfDataProduction(Long dataProdcutionId, String tableName, Connection connection) throws SQLException {
+        String query = "SELECT MIN(" + new IndexColumnDefinition().name() + ")"
+                + " FROM " + tableName
+                + " WHERE " + new DataProductionIdColumnDefinition().name() + " = " + dataProdcutionId;
+        Long min = null;
+
+        try ( PreparedStatement statement = connection.prepareStatement(query);  ResultSet resultSet = statement.executeQuery()) {
+            while (resultSet.next()) {
+                min = resultSet.getLong(1);
+            }
+        }
+        return min;
+    }
+
+    public boolean fdxIndexExists(Long index, String tableName, Connection connection) throws SQLException {
+        String query = "SELECT * FROM " + tableName + " WHERE " + new IndexColumnDefinition().name() + " = ?";
+
+        boolean exists = false;
+
+        try ( PreparedStatement statement = connection.prepareStatement(query);) {
+            statement.setLong(1, index);
+            ResultSet resultSet = statement.executeQuery();
+
+            if (resultSet.next()) {
+                exists = true;
+            }
+        }
+        return exists;
+    }
+
+    public void deleteWhereIndexLowerThan(Long fdx_index, String tableName, Connection connection) throws SQLException {
+        String query = "DELETE FROM " + tableName + " WHERE " + new IndexColumnDefinition().name() + " < ?";
+
+        try ( PreparedStatement statement = connection.prepareStatement(query);) {
+            statement.setLong(1, fdx_index);
+
+            statement.executeUpdate();
+        }
+    }
+
+    public Long countDataproductionElements(String token, Connection connection) throws SQLException {
+        String query = "SELECT COUNT(*) FROM " + CommonDataProduction.class.getSimpleName() + " WHERE token = ?";
+
+        try ( PreparedStatement statement = connection.prepareStatement(query);) {
+            statement.setString(1, token);
+            ResultSet result = statement.executeQuery();
+
+            result.next();
+            return result.getLong(1);
+        }
+    }
+
+    public List<Long> indexes(Long productionId, Connection connection) throws SQLException {
+        String query = "SELECT indexes FROM  productionMetaData_indexes WHERE productionId = ? ORDER BY indexes";
+        List<Long> indexes = new ArrayList<>();
+
+        try ( PreparedStatement statement = connection.prepareStatement(query);) {
+            statement.setLong(1, productionId);
+            ResultSet resultSet = statement.executeQuery();
+
+            while (resultSet.next()) {
+                indexes.add(resultSet.getLong(1));
+            }
+        }
+        return indexes;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/DataWithTokenToDataProductionQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/DataWithTokenToDataProductionQuery.java
new file mode 100644
index 0000000..676267d
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/DataWithTokenToDataProductionQuery.java
@@ -0,0 +1,42 @@
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.*;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.Timestamp;
+
+public class DataWithTokenToDataProductionQuery implements QueryMetaData<Void> {
+
+    private final Connection connection;
+    private final CommonDataProduction dataProduction;
+    private final String token;
+    private final String tableName;
+
+    public DataWithTokenToDataProductionQuery(Connection connection, CommonDataProduction dataProduction, String token, String tableName) {
+        this.connection = connection;
+        this.dataProduction = dataProduction;
+        this.token = token;
+        this.tableName = tableName;
+    }
+
+    @Override
+    public Void execute() throws Exception {
+
+        String query = "UPDATE " + tableName + " SET " + new DataProductionIdColumnDefinition().name() + " = ?, " + new DateCreationColumnDefinition().name() + " = ?, "
+                + new TokenColumnDefinition().name() + " = ?" + " WHERE " + new TokenColumnDefinition().name() + " = ?";
+
+        try (PreparedStatement stmt = connection.prepareStatement(query)) {
+            stmt.setLong(1, dataProduction.getId());
+            stmt.setTimestamp(2, Timestamp.valueOf(dataProduction.getDateProduction()));
+            stmt.setString(3, null);
+            stmt.setString(4, token);
+            stmt.executeUpdate();
+        }
+
+        return null;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/DeleteQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/DeleteQuery.java
new file mode 100644
index 0000000..2a163ee
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/DeleteQuery.java
@@ -0,0 +1,94 @@
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.contrat.DefaultPreparedStatementProcessor;
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryParam;
+import com.megatim.fdxcommons.tools.database.queries.metadata.WhereQueryParameters;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionUpdateIdColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DateMiseAJourColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DeletedColumnDefinition;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class DeleteQuery implements QueryMetaData<Void> {
+
+    private final Connection connection;
+    private final QueryCriterion queryCriterion;
+    private final String tableName;
+    private final CommonDataProduction dataProduction;
+
+    public DeleteQuery(String tableName, Connection connection, QueryCriterion queryCriterion, CommonDataProduction dataProduction) {
+        this.connection = connection;
+        this.queryCriterion = queryCriterion;
+        this.tableName = tableName;
+        this.dataProduction = dataProduction;
+    }
+
+    @Override
+    public Void execute() throws Exception {
+        System.out.println("<----------------------------------------------------------------------------------------------------------->");
+        System.out.println(deleteQuery());
+        System.out.println("<----------------------------------------------------------------------------------------------------------->");
+
+        try ( PreparedStatement statement = connection.prepareStatement(deleteQuery())) {
+            connection.setAutoCommit(false);
+
+            new DefaultPreparedStatementProcessor().process(statement, deletedParameters());
+            statement.execute();
+            connection.commit();
+
+            return null;
+        }
+    }
+
+    private List<QueryParam> deletedParameters() throws Exception {
+
+        List<QueryParam> params = new ArrayList<>();
+
+        //On ajoute les paramètres spécifiques à l'application
+        params.add(new QueryParam(new DeletedColumnDefinition().name(), 1));
+        params.add(new QueryParam(new DataProductionUpdateIdColumnDefinition().name(), dataProduction.getId()));
+        params.add(new QueryParam(new DateMiseAJourColumnDefinition().name(), dataProduction.getDateProduction()));
+
+        //On ajoute ensuite les paramètre de la clause WHERE
+        params.addAll(new WhereQueryParameters(queryCriterion).parameters());
+
+        return params;
+    }
+
+    private String deleteQuery() throws Exception {
+        return "UPDATE " + tableName + " " + setQueryPart() + " " + new WhereQueryString(queryCriterion).query();
+    }
+
+    private String setQueryPart() throws Exception {
+
+        List<String> columnsToUpdate = new ArrayList<>();
+
+        //Pendant l'update on set également certaines colonnes de l'application
+        columnsToUpdate.add(new DeletedColumnDefinition().name());
+        columnsToUpdate.add(new DataProductionUpdateIdColumnDefinition().name());
+        columnsToUpdate.add(new DateMiseAJourColumnDefinition().name());
+
+        StringBuilder query = new StringBuilder("SET ");
+        int index = 0;
+
+        for (String column : columnsToUpdate) {
+            if ((index + 1) < columnsToUpdate.size()) {
+                query.append(column).append(" = ? ,");
+            } else {
+                query.append(column).append(" = ?");
+            }
+            index++;
+        }
+        return query.toString();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/DeleteTableDataQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/DeleteTableDataQuery.java
new file mode 100644
index 0000000..61a77fe
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/DeleteTableDataQuery.java
@@ -0,0 +1,49 @@
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.tools.database.contrat.DefaultPreparedStatementProcessor;
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.queries.metadata.WhereQueryParameters;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class DeleteTableDataQuery implements QueryMetaData<Void> {
+
+    private final String tableName;
+    private final Connection connection;
+    private final QueryCriterion queryCriterion;
+
+    public DeleteTableDataQuery(String tableName, Connection connection, QueryCriterion queryCriterion) {
+        this.tableName = tableName;
+        this.connection = connection;
+        this.queryCriterion = queryCriterion;
+    }
+
+    @Override
+    public Void execute() throws Exception {
+
+        System.out.println("<-------------------------------------------------------------------------->");
+        System.out.println("DELETE FROM " + tableName);
+        System.out.println("<-------------------------------------------------------------------------->");
+
+        try ( PreparedStatement statement = connection.prepareStatement(deleteString())) {
+            new DefaultPreparedStatementProcessor().process(statement, new WhereQueryParameters(queryCriterion).parameters());
+            statement.executeUpdate();
+
+            return null;
+        }
+    }
+
+    private String deleteString() {
+        StringBuilder query = new StringBuilder("DELETE FROM ");
+        query
+                .append(tableName)
+                .append(new WhereQueryString(queryCriterion).query());
+
+        return query.toString();
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/EchecIntegrationQueries.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/EchecIntegrationQueries.java
new file mode 100644
index 0000000..c4a7e60
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/EchecIntegrationQueries.java
@@ -0,0 +1,37 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * @author ASUS
+ */
+public class EchecIntegrationQueries {
+
+    private final Connection connection;
+    private final Long dataProductionId;
+
+    public EchecIntegrationQueries(Connection connection, Long dataProductionId) {
+        this.connection = connection;
+        this.dataProductionId = dataProductionId;
+    }
+
+    public void save() throws SQLException {
+        String query = "INSERT INTO ECHECINTEGRATION (dataproductionid, datecreation) values(?,?)";
+
+        try ( PreparedStatement statement = connection.prepareStatement(query)) {
+            statement.setLong(1, dataProductionId);
+            statement.setTimestamp(2, Timestamp.valueOf(LocalDateTime.now()));
+
+            statement.executeUpdate();
+        }
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/FdxApiInsert.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/FdxApiInsert.java
new file mode 100644
index 0000000..8e3df15
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/FdxApiInsert.java
@@ -0,0 +1,52 @@
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierInsertMetaData;
+import com.megatim.fdxcommons.tools.database.queries.metadata.DefaultTypeFichierDataColumn;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionIdColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DateCreationColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.TokenColumnDefinition;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.time.LocalDateTime;
+import java.util.Arrays;
+import java.util.List;
+import javax.naming.NamingException;
+
+/**
+ * @author Gabuntu
+ */
+public class FdxApiInsert extends FdxInsert {
+
+    public FdxApiInsert(Connection connection, Long dataProductionId) {
+        super(connection, dataProductionId);
+    }
+
+    @Override
+    public long insert(TypeFichierInsertMetaData insertMetaData) throws SQLException, NamingException, Exception {
+
+        List<DefaultTypeFichierDataColumn> dataColumnsToAdd = dataColumnsToAdd();
+        new InsertQuery(insertMetaData.tableName(), connection, dataColumnsToAdd, insertMetaData.columnNames(), insertMetaData.rows()).execute();
+
+        return dataProductionId;
+    }
+
+    public void insert(TypeFichierInsertMetaData insertMetaData, String token) throws SQLException, NamingException, Exception {
+
+        List<DefaultTypeFichierDataColumn> dataColumnsToAdd = Arrays.asList(
+                new DefaultTypeFichierDataColumn(new TokenColumnDefinition().name(), token),
+                new DefaultTypeFichierDataColumn(new DataProductionIdColumnDefinition().name(), 0L)
+        );
+
+        new InsertQuery(insertMetaData.tableName(), connection, dataColumnsToAdd, insertMetaData.columnNames(), insertMetaData.rows()).execute();
+
+    }
+
+    private List<DefaultTypeFichierDataColumn> dataColumnsToAdd() {
+        return Arrays.asList(
+                new DefaultTypeFichierDataColumn(new DateCreationColumnDefinition().name(), LocalDateTime.now()),
+                new DefaultTypeFichierDataColumn(new DataProductionIdColumnDefinition().name(), dataProductionId)
+        );
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/FdxConsultationInsert.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/FdxConsultationInsert.java
new file mode 100644
index 0000000..3f44c3e
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/FdxConsultationInsert.java
@@ -0,0 +1,27 @@
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierInsertMetaData;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.Arrays;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author ASUS
+ */
+public class FdxConsultationInsert extends FdxInsert {
+
+    public FdxConsultationInsert(Connection dbConnection, Long dataProductionId) throws SQLException {
+        super(dbConnection, dataProductionId);
+    }
+
+    @Override
+    public long insert(TypeFichierInsertMetaData insertMetaData) throws SQLException, NamingException, Exception {
+
+        new InsertQuery(insertMetaData.tableName(), connection, Arrays.asList(), insertMetaData.columnNames(), insertMetaData.rows()).execute();
+
+        return dataProductionId;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/FdxInsert.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/FdxInsert.java
new file mode 100644
index 0000000..d9b4285
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/FdxInsert.java
@@ -0,0 +1,24 @@
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.tools.database.contrat.Insert;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierInsertMetaData;
+import java.sql.Connection;
+
+/**
+ *
+ * @author ASUS
+ */
+public abstract class FdxInsert implements Insert {
+
+    protected final Connection connection;
+    protected final Long dataProductionId;
+
+    public FdxInsert(Connection connection, Long dataProductionId) {
+        this.connection = connection;
+        this.dataProductionId = dataProductionId;
+    }
+
+    @Override
+    public abstract long insert(TypeFichierInsertMetaData insertMetaData) throws Exception;
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/FdxUpdate.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/FdxUpdate.java
new file mode 100644
index 0000000..cb7cefc
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/FdxUpdate.java
@@ -0,0 +1,69 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierDataColumn;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierUpdateMetaData;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryParam;
+import com.megatim.fdxcommons.tools.database.queries.metadata.WhereQueryParameters;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionUpdateIdColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DateMiseAJourColumnDefinition;
+import java.sql.Connection;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public class FdxUpdate {
+
+    private final Connection connection;
+    private final QueryCriterion queryCriterion;
+    private final TypeFichierUpdateMetaData updateMetaData;
+    private final CommonDataProduction dataProduction;
+
+    public FdxUpdate(Connection connection, QueryCriterion queryCriterion, TypeFichierUpdateMetaData updateMetaData, CommonDataProduction dataProduction) {
+        this.connection = connection;
+        this.queryCriterion = queryCriterion;
+        this.updateMetaData = updateMetaData;
+        this.dataProduction = dataProduction;
+    }
+
+    public void update() throws Exception {
+        List<QueryParam> params = finalParameters();
+        new UpdateQuery(connection, queryCriterion, updateMetaData.tableName(), columnNames(), params).execute();
+    }
+
+    private List<String> columnNames() throws Exception {
+        List<String> columNames = new ArrayList<>();
+        columNames.addAll(updateMetaData.columnNames());
+        columNames.add(new DataProductionUpdateIdColumnDefinition().name());
+        columNames.add(new DateMiseAJourColumnDefinition().name());
+
+        return columNames;
+    }
+
+    private List<QueryParam> finalParameters() throws Exception {
+
+        List<QueryParam> params = new ArrayList<>();
+
+        //On ajoute les paramètres de la clause SET
+        for (TypeFichierDataColumn c : updateMetaData.row().columns()) {
+            params.add(new QueryParam(c.column(), c.value()));
+        }
+
+        //On ajoute les paramètres de l'application
+        params.add(new QueryParam(new DataProductionUpdateIdColumnDefinition().name(), dataProduction.getId()));
+        params.add(new QueryParam(new DateMiseAJourColumnDefinition().name(), dataProduction.getDateProduction()));
+
+        //On ajoute ensuite les paramètre de la clause WHERE
+        params.addAll(new WhereQueryParameters(queryCriterion).parameters());
+
+        return params;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/GroupByQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/GroupByQuery.java
new file mode 100644
index 0000000..1377620
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/GroupByQuery.java
@@ -0,0 +1,42 @@
+package com.megatim.fdxcommons.tools.database.queries;
+
+import java.util.List;
+import java.util.stream.IntStream;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class GroupByQuery {
+
+    private final List<String> groupingColumns;
+
+    public GroupByQuery(List<String> groupingColumns) {
+        this.groupingColumns = groupingColumns;
+    }
+
+    public String query() {
+        StringBuilder query = new StringBuilder("");
+        if (!groupingColumns.isEmpty()) {
+            query
+                    .append(" GROUP BY ")
+                    .append(buildQuery());
+        }
+        return query.toString();
+    }
+
+    private String buildQuery() {
+        StringBuilder query = new StringBuilder();
+
+        int size = groupingColumns.size();
+        IntStream.range(0, size).forEach(index -> {
+            String column = groupingColumns.get(index);
+            query.append(column);
+            if ((index + 1) < size) {
+                query.append(",");
+            }
+        });
+
+        return query.toString();
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/InsertDataProductionInDataProductionToDeleteQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/InsertDataProductionInDataProductionToDeleteQuery.java
new file mode 100644
index 0000000..420a9da
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/InsertDataProductionInDataProductionToDeleteQuery.java
@@ -0,0 +1,35 @@
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.Timestamp;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * @author ASUS
+ */
+public class InsertDataProductionInDataProductionToDeleteQuery implements QueryMetaData<Void> {
+
+    private final Connection connection;
+    private final Long dataProductionId;
+
+    public InsertDataProductionInDataProductionToDeleteQuery(Connection connection, Long dataProductionId) {
+        this.connection = connection;
+        this.dataProductionId = dataProductionId;
+    }
+
+    @Override
+    public Void execute() throws Exception {
+        if (dataProductionId != null && dataProductionId > 0) {
+            String query = "INSERT INTO dataproductiontodelete(id, datecreation) values (?,?)";
+            try (PreparedStatement statement = connection.prepareStatement(query);) {
+                statement.setLong(1, dataProductionId);
+                statement.setTimestamp(2, Timestamp.valueOf(LocalDateTime.now()));
+                statement.executeUpdate();
+            }
+        }
+        return null;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/InsertQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/InsertQuery.java
new file mode 100644
index 0000000..6396e72
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/InsertQuery.java
@@ -0,0 +1,103 @@
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.tools.database.contrat.DefaultPreparedStatementProcessor;
+import com.megatim.fdxcommons.tools.database.contrat.PreparedStatementProcessor;
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierDataColumn;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierDataRow;
+import com.megatim.fdxcommons.tools.database.queries.metadata.DefaultTypeFichierDataColumn;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryParam;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class InsertQuery implements QueryMetaData<Void> {
+
+    private final String tableName;
+    protected final Connection connection;
+    private final List<String> columnNames;
+    private final List<TypeFichierDataRow> rows;
+    private final List<DefaultTypeFichierDataColumn> dataColumnsToAdd;
+    private final int BATCH_SIZE = 100_000;
+
+    public InsertQuery(String tableName, final Connection connection, List<DefaultTypeFichierDataColumn> dataColumnsToAdd, List<String> columnNames, List<TypeFichierDataRow> rows) {
+        this.tableName = tableName;
+        this.dataColumnsToAdd = dataColumnsToAdd;
+        this.connection = connection;
+        this.columnNames = columnNames;
+        this.rows = rows;
+    }
+
+    @Override
+    public Void execute() throws Exception {
+        System.out.println("<-------------------------------------------------------------------------->");
+        System.out.println(insertQueryString());
+        System.out.println("<-------------------------------------------------------------------------->");
+
+        try ( PreparedStatement statement = connection.prepareStatement(insertQueryString());) {
+
+            executeInBatch(statement, rows, dataColumnsToAdd);
+            statement.executeBatch();
+        }
+        return null;
+    }
+
+    private String insertQueryString() {
+        List<String> insertColumns = new ArrayList<>(columnNames);
+
+        for (DefaultTypeFichierDataColumn dc : dataColumnsToAdd) {
+            insertColumns.add(dc.column());
+        }
+
+        StringBuilder query = new StringBuilder("INSERT INTO " + tableName + "(");
+
+        insertColumns.forEach(column -> query.append(column).append(","));
+
+        query.replace(query.length() - 1, query.length(), ") VALUES(");
+
+        insertColumns.forEach(s -> query.append("?,"));
+
+        query.replace(query.length() - 1, query.length(), ")");
+
+        return query.toString();
+    }
+
+    private void executeInBatch(PreparedStatement preparedStatement, List<TypeFichierDataRow> rows, List<DefaultTypeFichierDataColumn> dataColumnsToAdd) throws SQLException, Exception {
+
+        int index = 0;
+        int count = 0;
+
+        for (TypeFichierDataRow row : rows) {
+
+            List<QueryParam> queryParameters = new ArrayList<>();
+
+            for (TypeFichierDataColumn dataColumn : row.columns()) {
+                queryParameters.add(new QueryParam(dataColumn.column(), dataColumn.value()));
+            }
+
+            //On ajoute les colonnes de dataColumnsToAdd
+            for (DefaultTypeFichierDataColumn dc : dataColumnsToAdd) {
+                queryParameters.add(new QueryParam(dc.column(), dc.value()));
+            }
+
+            PreparedStatementProcessor statementProcessor = new DefaultPreparedStatementProcessor(index);
+            statementProcessor.process(preparedStatement, queryParameters);
+            index = statementProcessor.lastProcessedIndex();
+
+            preparedStatement.addBatch();
+
+            if (++count % BATCH_SIZE == 0) {
+                preparedStatement.executeBatch();
+            }
+
+        }
+
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonCountQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonCountQuery.java
new file mode 100644
index 0000000..d1d1a8e
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonCountQuery.java
@@ -0,0 +1,111 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.model.pojo.JsonTableDefinition;
+import com.megatim.fdxcommons.tools.database.contrat.DefaultPreparedStatementProcessor;
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.queries.metadata.WhereQueryParameters;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.IndexColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.ParentIdColumnDefinition;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonCountQuery implements QueryMetaData<Long> {
+
+    private final JsonTableDefinition tableDefinition;
+    private final Connection connection;
+    private final QueryCriterion queryCriterion;
+    private final Map<String, String> tablesNameToAlias;
+
+    public JsonCountQuery(JsonTableDefinition tableDefinition, QueryCriterion queryCriterion, Connection connection, Map<String, String> tablesNameToAlias) {
+        this.connection = connection;
+        this.queryCriterion = queryCriterion;
+        this.tableDefinition = tableDefinition;
+        this.tablesNameToAlias = tablesNameToAlias;
+    }
+
+    @Override
+    public Long execute() throws Exception {
+        String query = countString() + fromString() + joinString() + whereString();
+        System.out.println("countQuery = " + query);
+        try ( PreparedStatement statement = connection.prepareStatement(query)) {
+
+            new DefaultPreparedStatementProcessor().process(statement, new WhereQueryParameters(queryCriterion).parameters());
+            ResultSet resultSet = statement.executeQuery();
+
+            if (resultSet.next()) {
+                return resultSet.getLong(1);
+            }
+            return 0L;
+        }
+    }
+
+    private String countString() {
+        StringBuilder query = new StringBuilder("SELECT COUNT(");
+        query.append("DISTINCT(")
+                .append(tablesNameToAlias.get(tableDefinition.getTableName()))
+                .append(".")
+                .append(new IndexColumnDefinition().name())
+                .append("))");
+
+        return query.toString();
+    }
+
+    private String whereString() {
+        return "\n" + new WhereQueryString(queryCriterion).query();
+    }
+
+    private String fromString() {
+        StringBuilder fromPart = new StringBuilder("\nFROM ");
+        fromPart
+                .append(tableDefinition.getTableName())
+                .append(" ")
+                .append(tablesNameToAlias.get(tableDefinition.getTableName()));
+
+        return fromPart.toString();
+    }
+
+    private String joinString() {
+        return joinString(tableDefinition.getTablesDefinition());
+    }
+
+    private String joinString(List<JsonTableDefinition> tablesDef) {
+        StringBuilder joinPart = new StringBuilder("");
+
+        if (tablesNameToAlias.size() > 1) {
+            for (JsonTableDefinition t : tablesDef) {
+                joinPart.append(joinString(t));
+                joinPart.append(joinString(t.getTablesDefinition()));
+            }
+        }
+        return joinPart.toString();
+    }
+
+    private String joinString(JsonTableDefinition tableDef) {
+        StringBuilder joinPart = new StringBuilder("\nJOIN ");
+        joinPart.append(tableDef.getTableName())
+                .append(" ")
+                .append(tablesNameToAlias.get(tableDef.getTableName()))
+                .append(" ON ")
+                .append(tablesNameToAlias.get(tableDef.getTableName()))
+                .append(".")
+                .append(new ParentIdColumnDefinition().name())
+                .append(" = ")
+                .append(tablesNameToAlias.get(tableDef.getParentTableName()))
+                .append(".")
+                .append(new IndexColumnDefinition().name());
+
+        return joinPart.toString();
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonDelete.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonDelete.java
new file mode 100644
index 0000000..0dd78b0
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonDelete.java
@@ -0,0 +1,100 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.pojo.JsonTableDefinition;
+import com.megatim.fdxcommons.tools.database.exceptions.BadDataValueException;
+import com.megatim.fdxcommons.tools.database.exceptions.ColumnNotFoundException;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryParam;
+import com.megatim.fdxcommons.tools.database.queries.metadata.WhereQueryParameters;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionUpdateIdColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DateMiseAJourColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DeletedColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.IndexColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.ParentIdColumnDefinition;
+import com.megatim.fdxcommons.tools.utils.JsonDataUtil;
+import com.megatim.fdxcommons.tools.utils.JsonTableUtil;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonDelete {
+
+    private final Connection connection;
+    private final Map<Long, Object> matchedData;
+    private final String rootTableName;
+    private final JsonTableDefinition tableDefinition;
+    private final CommonDataProduction dataProduction;
+
+    public JsonDelete(Connection connection, Map<Long, Object> matchedData, String rootTableName, JsonTableDefinition tableDefinition, CommonDataProduction dataProduction) {
+        this.connection = connection;
+        this.matchedData = matchedData;
+        this.rootTableName = rootTableName;
+        this.tableDefinition = tableDefinition;
+        this.dataProduction = dataProduction;
+    }
+
+    public void delete() throws ColumnNotFoundException, SQLException, BadDataValueException, LocalDateTimeValueParseError, Exception {
+        Map<String, Set<Long>> tableToMatchingIndexes = new JsonDataUtil().tableToMatchingIndexes(matchedData, rootTableName);
+        Map<String, List<String>> tableToDirectChildren = new JsonTableUtil(tableDefinition).tableToChildrenTables();
+
+        for (Map.Entry<String, Set<Long>> entry : tableToMatchingIndexes.entrySet()) {
+            Set<Long> indexes = entry.getValue();
+            List<String> childrenTableList = tableToDirectChildren.get(entry.getKey());
+            final String parentTable = entry.getKey();
+            final String parentIdColumn = new ParentIdColumnDefinition().name();
+            final String indexColumn = new IndexColumnDefinition().name();
+
+            if (indexes != null) {
+                QueryCriterion childrenQueryCriterion = queryCriterion(indexes, parentIdColumn);
+                QueryCriterion parentQueryCriterion = queryCriterion(indexes, indexColumn);
+                List<QueryParam> childParams = parameters(childrenQueryCriterion);
+                List<QueryParam> parentParams = parameters(parentQueryCriterion);
+                List<String> columnNames = Arrays.asList(new DeletedColumnDefinition().name(), new DataProductionUpdateIdColumnDefinition().name(), new DateMiseAJourColumnDefinition().name());
+
+                if (childrenTableList != null && childrenTableList.isEmpty()) {
+                    for (String table : childrenTableList) {
+                        new UpdateQuery(connection, childrenQueryCriterion, table, columnNames, childParams).execute();
+                    }
+                }
+                new UpdateQuery(connection, parentQueryCriterion, parentTable, columnNames, parentParams).execute();
+            }
+        }
+    }
+
+    private List<QueryParam> parameters(QueryCriterion queryCriterion) throws Exception {
+        List<QueryParam> params = new ArrayList<>();
+
+        //On ajoute les paramètres de l'application
+        params.add(new QueryParam(new DeletedColumnDefinition().name(), 1));
+        params.add(new QueryParam(new DataProductionUpdateIdColumnDefinition().name(), dataProduction.getId()));
+        params.add(new QueryParam(new DateMiseAJourColumnDefinition().name(), dataProduction.getDateProduction()));
+
+        //On ajoute ensuite les paramètre de la clause WHERE
+        params.addAll(new WhereQueryParameters(queryCriterion).parameters());
+
+        return params;
+    }
+
+    private QueryCriterion queryCriterion(Set<Long> indexes, String columnName) {
+        List<QueryCriterion> criteria = new ArrayList<>();
+        indexes.stream().forEach(i -> criteria.add(new QueryCriterion(columnName, i, Operateur.EQUALS, null, Arrays.asList())));
+
+        return new QueryCriterion(null, null, null, CriteriaLogicConnector.OR, criteria);
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonFdxApiInsert.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonFdxApiInsert.java
new file mode 100644
index 0000000..59726d0
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonFdxApiInsert.java
@@ -0,0 +1,41 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.tools.database.contrat.JsonFdxInsert;
+import com.megatim.fdxcommons.tools.database.queries.metadata.DefaultTypeFichierDataColumn;
+import com.megatim.fdxcommons.tools.database.queries.metadata.JsonFdxParsedDataIterator;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionIdColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DateCreationColumnDefinition;
+import java.sql.Connection;
+import java.time.LocalDateTime;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonFdxApiInsert extends JsonFdxInsert {
+
+    public JsonFdxApiInsert(Connection connection, Long dataProductionId) {
+        super(connection, dataProductionId);
+    }
+
+    @Override
+    public long insert(JsonFdxParsedDataIterator parsedDataIterator) throws Exception {
+        List<DefaultTypeFichierDataColumn> dataColumnsToAdd = dataColumnsToAdd();
+        new JsonInsertQuery(connection, parsedDataIterator, dataColumnsToAdd).execute();
+
+        return dataProductionId;
+    }
+
+    private List<DefaultTypeFichierDataColumn> dataColumnsToAdd() {
+        return Arrays.asList(
+                new DefaultTypeFichierDataColumn(new DateCreationColumnDefinition().name(), LocalDateTime.now()),
+                new DefaultTypeFichierDataColumn(new DataProductionIdColumnDefinition().name(), dataProductionId)
+        );
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonFdxInsert.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonFdxInsert.java
new file mode 100644
index 0000000..a35a2f0
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonFdxInsert.java
@@ -0,0 +1,26 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.contrat;
+
+import com.megatim.fdxcommons.tools.database.queries.metadata.JsonFdxParsedDataIterator;
+import java.sql.Connection;
+
+/**
+ *
+ * @author ASUS
+ */
+public abstract class JsonFdxInsert implements JsonInsert {
+
+    protected final Connection connection;
+    protected final Long dataProductionId;
+
+    public JsonFdxInsert(Connection connection, Long dataProductionId) {
+        this.connection = connection;
+        this.dataProductionId = dataProductionId;
+    }
+
+    @Override
+    public abstract long insert(JsonFdxParsedDataIterator parsedDataIterator) throws Exception;
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonInsertQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonInsertQuery.java
new file mode 100644
index 0000000..c9b6930
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonInsertQuery.java
@@ -0,0 +1,144 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.tools.database.contrat.DefaultPreparedStatementProcessor;
+import com.megatim.fdxcommons.tools.database.contrat.JsonTypeFichierInsertMetaData;
+import com.megatim.fdxcommons.tools.database.contrat.PreparedStatementProcessor;
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierDataColumn;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierDataRow;
+import com.megatim.fdxcommons.tools.database.queries.metadata.DefaultTypeFichierDataColumn;
+import com.megatim.fdxcommons.tools.database.queries.metadata.JsonApiTypeFichierInsertData;
+import com.megatim.fdxcommons.tools.database.queries.metadata.JsonFdxParsedDataIterator;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryParam;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.IndexColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.ParentIdColumnDefinition;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonInsertQuery implements QueryMetaData<Void> {
+
+    private final Connection connection;
+    private final JsonFdxParsedDataIterator parsedDataIterator;
+    private final List<DefaultTypeFichierDataColumn> dataColumnsToAdd;
+
+    public JsonInsertQuery(Connection connection, JsonFdxParsedDataIterator parsedDataIterator, List<DefaultTypeFichierDataColumn> dataColumnsToAdd) {
+        this.connection = connection;
+        this.parsedDataIterator = parsedDataIterator;
+        this.dataColumnsToAdd = dataColumnsToAdd;
+    }
+
+    @Override
+    public Void execute() throws Exception {
+        List<JsonApiTypeFichierInsertData> rows = parsedDataIterator.rows();
+
+        for (JsonApiTypeFichierInsertData insertMetaData : rows) {
+            String query = insertQueryString(insertMetaData.columnNames(), insertMetaData.tableName(), false);
+
+            TypeFichierDataRow row = insertMetaData.row();
+
+            System.out.println("---------------- parentQuery-----------------------");
+            System.out.println(query);
+            System.out.println("-----------------------------------");
+
+            try ( PreparedStatement statement = connection.prepareStatement(query);) {
+                execute(statement, row, dataColumnsToAdd, null);
+                ResultSet resultSet = statement.executeQuery();
+
+                if (resultSet.next()) {
+                    Long fdxIndex = resultSet.getLong(1);
+                    insertChildren(insertMetaData.children(), fdxIndex);
+                }
+            }
+        }
+        return null;
+    }
+
+    private void insertChildren(List<JsonTypeFichierInsertMetaData> data, Long parentId) throws Exception {
+        if (!data.isEmpty()) {
+            for (JsonTypeFichierInsertMetaData insertData : data) {
+                insertChild(insertData, parentId);
+            }
+        }
+
+    }
+
+    private void insertChild(JsonTypeFichierInsertMetaData child, Long parentId) throws Exception {
+        String childQuery = insertQueryString(child.columnNames(), child.tableName(), true);
+        System.out.println("------------------ childQuery---------------------------");
+        System.out.println(childQuery);
+        System.out.println("---------------------------------------------------------");
+
+        try ( PreparedStatement statement = connection.prepareStatement(childQuery);) {
+
+            TypeFichierDataRow row = child.row();
+            execute(statement, row, dataColumnsToAdd, parentId);
+            ResultSet resultSet = statement.executeQuery();
+
+            if (resultSet.next()) {
+                Long fdxIndex = resultSet.getLong(1);
+                insertChildren(child.children(), fdxIndex);
+            }
+        }
+    }
+
+    private String insertQueryString(List<String> columnNames, String tableName, boolean parentIdPresent) {
+        List<String> insertColumns = new ArrayList<>(columnNames);
+
+        for (DefaultTypeFichierDataColumn dc : dataColumnsToAdd) {
+            insertColumns.add(dc.column());
+        }
+
+        if (parentIdPresent) {
+            insertColumns.add(new ParentIdColumnDefinition().name());// Ajout de la clé du parent
+        }
+        StringBuilder query = new StringBuilder("INSERT INTO " + tableName + "(");
+
+        insertColumns.forEach(column -> query.append(column).append(","));
+
+        query.replace(query.length() - 1, query.length(), ") VALUES(");
+
+        insertColumns.forEach(s -> query.append("?,"));
+
+        query.replace(query.length() - 1, query.length(), ")");
+
+        query.append(" RETURNING ").append(new IndexColumnDefinition().name()).append(";");
+
+        return query.toString();
+    }
+
+    private void execute(PreparedStatement preparedStatement, TypeFichierDataRow row, List<DefaultTypeFichierDataColumn> dataColumnsToAdd, Long parentId) throws SQLException, Exception {
+
+        List<QueryParam> queryParameters = new ArrayList<>();
+
+        if (row != null) {
+            for (TypeFichierDataColumn dataColumn : row.columns()) {
+                queryParameters.add(new QueryParam(dataColumn.column(), dataColumn.value()));
+            }
+        }
+
+        //On ajoute les colonnes de dataColumnsToAdd
+        for (DefaultTypeFichierDataColumn dc : dataColumnsToAdd) {
+            queryParameters.add(new QueryParam(dc.column(), dc.value()));
+        }
+
+        if (parentId != null && parentId != 0L) {
+            queryParameters.add(new QueryParam(new ParentIdColumnDefinition().name(), parentId));//Ajout clé du parent
+        }
+
+        PreparedStatementProcessor statementProcessor = new DefaultPreparedStatementProcessor(0);
+        statementProcessor.process(preparedStatement, queryParameters);
+
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonSelectQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonSelectQuery.java
new file mode 100644
index 0000000..f2ba3ac
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonSelectQuery.java
@@ -0,0 +1,214 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.model.pojo.JsonTableDefinition;
+import com.megatim.fdxcommons.tools.database.contrat.DefaultPreparedStatementProcessor;
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.queries.metadata.WhereQueryParameters;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.IndexColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.ParentIdColumnDefinition;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonSelectQuery implements QueryMetaData<Map<Long, Object>> {
+
+    private final JsonTableDefinition tableDefinition;
+    private final QueryCriterion queryCriterion;
+    private final Connection connection;
+    private final Map<String, String> tablesNameToAlias;
+    private final int limit;
+    private final int offset;
+
+    public JsonSelectQuery(JsonTableDefinition tableDefinition, QueryCriterion queryCriterion, Connection connection, Map<String, String> tablesNameToAlias) {
+        this(tableDefinition, queryCriterion, connection, tablesNameToAlias, -1, -1);
+    }
+
+    public JsonSelectQuery(JsonTableDefinition tableDefinition, QueryCriterion queryCriterion, Connection connection, Map<String, String> tablesNameToAlias, int limit, int offset) {
+        this.tableDefinition = tableDefinition;
+        this.queryCriterion = queryCriterion;
+        this.connection = connection;
+        this.tablesNameToAlias = tablesNameToAlias;
+        this.limit = limit;
+        this.offset = offset;
+    }
+
+    @Override
+    public Map<Long, Object> execute() throws Exception {
+        return result();
+    }
+
+    private Map<Long, Object> result() throws NamingException, SQLException {
+        Map<Long, Object> finalData = new HashMap<>();
+        String query = selectString() + fromString() + joinString() + whereString() + pagination();
+        System.out.println("------------------------------------------------------------------------------------");
+        System.out.println(query);
+        System.out.println("------------------------------------------------------------------------------------");
+
+        try ( PreparedStatement statement = connection.prepareStatement(query)) {
+            new DefaultPreparedStatementProcessor().process(statement, new WhereQueryParameters(queryCriterion).parameters());
+            ResultSet resultSet = statement.executeQuery();
+            List<Long> indexes = new ArrayList<>();
+
+            while (resultSet.next()) {
+                indexes.add(resultSet.getLong(new IndexColumnDefinition().name()));
+            }
+            for (Long l : indexes) {
+                Map<String, Object> data = selectData(l, tableDefinition.getTableName());
+
+                for (JsonTableDefinition t : tableDefinition.getTablesDefinition()) {
+                    data.put(t.getParentFieldName().toLowerCase(), selectChildren(l, t));
+                }
+                finalData.put(l, data);
+            }
+        }
+        return finalData;
+    }
+
+    private Map<String, Object> selectData(Long index, String tableName) throws SQLException {
+        Map<String, Object> data = new HashMap<>();
+        String query = "SELECT * FROM " + tableName + " WHERE " + new IndexColumnDefinition().name() + " = ?";
+
+        try ( PreparedStatement statement = connection.prepareStatement(query)) {
+            statement.setLong(1, index);
+            ResultSet resultSet = statement.executeQuery();
+
+            ResultSetMetaData metaData = resultSet.getMetaData();
+            int columnCount = metaData.getColumnCount();
+
+            if (resultSet.next()) {
+                for (int i = 1; i <= columnCount; i++) {
+                    data.put(metaData.getColumnName(i).trim().toLowerCase(), resultSet.getObject(i));
+                }
+            }
+        }
+        return data;
+    }
+
+    private Map<Long, Object> selectChildren(Long index, JsonTableDefinition tableDef) throws SQLException {
+        Map<Long, Object> finalData = new HashMap<>();
+        String query = "SELECT * FROM " + tableDef.getTableName() + " WHERE " + new ParentIdColumnDefinition().name() + " = ?";
+
+        try ( PreparedStatement statement = connection.prepareStatement(query)) {
+            statement.setLong(1, index);
+            ResultSet resultSet = statement.executeQuery();
+            Map<Long, Object> data = retrieveData(resultSet);
+
+            if (!tableDef.getTablesDefinition().isEmpty()) {
+
+                for (Map.Entry<Long, Object> entry : data.entrySet()) {
+                    Map<String, Object> map = new HashMap<>();
+                    map.putAll((Map<String, Object>) entry.getValue());
+
+                    for (JsonTableDefinition t : tableDef.getTablesDefinition()) {
+                        map.put(t.getParentFieldName().toLowerCase(), selectChildren(entry.getKey(), t));
+                    }
+                    finalData.put(entry.getKey(), map);
+                }
+            } else {
+                finalData.putAll(data);
+            }
+        }
+        return finalData;
+    }
+
+    private Map<Long, Object> retrieveData(ResultSet resultSet) throws SQLException {
+        Map<Long, Object> data = new HashMap<>();
+        ResultSetMetaData metaData = resultSet.getMetaData();
+        int columnCount = metaData.getColumnCount();
+
+        while (resultSet.next()) {
+            Map<String, Object> datum = new HashMap<>();
+            for (int i = 1; i <= columnCount; i++) {
+                datum.put(metaData.getColumnName(i).trim().toLowerCase(), resultSet.getObject(i));
+            }
+            data.put(resultSet.getLong(new IndexColumnDefinition().name()), datum);
+        }
+        return data;
+    }
+
+    private String whereString() {
+        return "\n" + new WhereQueryString(queryCriterion).query();
+    }
+
+    private String pagination() {
+        if (limit > 0 && offset >= 0) {
+            return " LIMIT " + limit + " OFFSET " + offset;
+        }
+        return "";
+    }
+
+    private String fromString() {
+        StringBuilder fromPart = new StringBuilder("\nFROM ");
+        fromPart
+                .append(tableDefinition.getTableName())
+                .append(" ")
+                .append(tablesNameToAlias.get(tableDefinition.getTableName()));
+
+        return fromPart.toString();
+    }
+
+    private String joinString() {
+        return joinString(tableDefinition.getTablesDefinition());
+    }
+
+    private String joinString(List<JsonTableDefinition> tablesDef) {
+        StringBuilder joinPart = new StringBuilder("");
+
+        if (tablesNameToAlias.size() > 1) {
+            for (JsonTableDefinition t : tablesDef) {
+                joinPart.append(joinString(t));
+                joinPart.append(joinString(t.getTablesDefinition()));
+            }
+        }
+        return joinPart.toString();
+    }
+
+    private String joinString(JsonTableDefinition tableDef) {
+        StringBuilder joinPart = new StringBuilder("\nJOIN ");
+        joinPart.append(tableDef.getTableName())
+                .append(" ")
+                .append(tablesNameToAlias.get(tableDef.getTableName()))
+                .append(" ON ")
+                .append(tablesNameToAlias.get(tableDef.getTableName()))
+                .append(".")
+                .append(new ParentIdColumnDefinition().name())
+                .append(" = ")
+                .append(tablesNameToAlias.get(tableDef.getParentTableName()))
+                .append(".")
+                .append(new IndexColumnDefinition().name());
+
+        return joinPart.toString();
+    }
+
+    private String selectString() {
+        return "SELECT " + columnsToSelect();
+    }
+
+    private String columnsToSelect() {
+        StringBuilder columnsToSelect = new StringBuilder("");
+        columnsToSelect
+                .append("DISTINCT(")
+                .append(tablesNameToAlias.get(tableDefinition.getTableName()))
+                .append(".")
+                .append(new IndexColumnDefinition().name())
+                .append(")");
+        return columnsToSelect.toString();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonUpdate.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonUpdate.java
new file mode 100644
index 0000000..9337a33
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonUpdate.java
@@ -0,0 +1,101 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.tools.database.exceptions.BadDataValueException;
+import com.megatim.fdxcommons.tools.database.exceptions.ColumnNotFoundException;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import com.megatim.fdxcommons.tools.database.queries.metadata.JsonDataRowToUpdate;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryParam;
+import com.megatim.fdxcommons.tools.database.queries.metadata.WhereQueryParameters;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionUpdateIdColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DateMiseAJourColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.IndexColumnDefinition;
+import com.megatim.fdxcommons.tools.utils.JsonDataUtil;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonUpdate {
+
+    private final Connection connection;
+    private final Map<Long, Object> matchedData;
+    private final List<ColumnDefinition> columnsDefinition;
+    private final String rootTableName;
+    private final Map<String, Object> dataToSet;
+    private final CommonDataProduction dataProduction;
+
+    public JsonUpdate(Connection connection, Map<Long, Object> matchedData, List<ColumnDefinition> columnsDefinition, String rootTableName, Map<String, Object> dataToSet, CommonDataProduction dataProduction) {
+        this.connection = connection;
+        this.matchedData = matchedData;
+        this.columnsDefinition = columnsDefinition;
+        this.rootTableName = rootTableName;
+        this.dataToSet = dataToSet;
+        this.dataProduction = dataProduction;
+    }
+
+    public void update() throws ColumnNotFoundException, SQLException, BadDataValueException, LocalDateTimeValueParseError, Exception {
+        Map<String, Map<String, Object>> tableToDataRow = new JsonDataRowToUpdate(dataToSet, rootTableName, columnsDefinition).dataRow();
+        Map<String, Set<Long>> tableToMatchingIndexes = new JsonDataUtil().tableToMatchingIndexes(matchedData, rootTableName);
+
+        for (Map.Entry<String, Map<String, Object>> entry : tableToDataRow.entrySet()) {
+            Set<Long> indexes = tableToMatchingIndexes.get(entry.getKey());
+
+            if (indexes != null) {
+                QueryCriterion queryCriterion = queryCriterion(indexes);
+                List<QueryParam> params = parameters(entry.getValue(), queryCriterion);
+
+                new UpdateQuery(connection, queryCriterion, entry.getKey(), columnsName(entry.getValue()), params).execute();
+            }
+        }
+    }
+
+    private List<QueryParam> parameters(Map<String, Object> updateData, QueryCriterion queryCriterion) throws Exception {
+        List<QueryParam> params = new ArrayList<>();
+
+        //On ajoute les paramètres de la clause SET
+        updateData.forEach((k, v) -> {
+            params.add(new QueryParam(k, v));
+        });
+
+        //On ajoute les paramètres de l'application
+        params.add(new QueryParam(new DataProductionUpdateIdColumnDefinition().name(), dataProduction.getId()));
+        params.add(new QueryParam(new DateMiseAJourColumnDefinition().name(), dataProduction.getDateProduction()));
+        //On ajoute ensuite les paramètre de la clause WHERE
+        params.addAll(new WhereQueryParameters(queryCriterion).parameters());
+
+        return params;
+    }
+
+    private QueryCriterion queryCriterion(Set<Long> indexes) {
+        List<QueryCriterion> criteria = new ArrayList<>();
+        indexes.stream().forEach(i -> criteria.add(new QueryCriterion(new IndexColumnDefinition().name(), i, Operateur.EQUALS, null, Arrays.asList())));
+
+        return new QueryCriterion(null, null, null, CriteriaLogicConnector.OR, criteria);
+    }
+
+    private List<String> columnsName(Map<String, Object> data) {
+        List<String> columnsName = new ArrayList<>();
+        columnsName.addAll(data.keySet().stream().collect(Collectors.toList()));
+        columnsName.add(new DataProductionUpdateIdColumnDefinition().name());
+        columnsName.add(new DateMiseAJourColumnDefinition().name());
+
+        return columnsName;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/LatestDataProductionTokenQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/LatestDataProductionTokenQuery.java
new file mode 100644
index 0000000..d918c1d
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/LatestDataProductionTokenQuery.java
@@ -0,0 +1,50 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+/**
+ *
+ * @author ASUS
+ */
+public class LatestDataProductionTokenQuery {
+
+    private final Connection connection;
+    private final String referentielVersion;
+    private final String codeTypeFichier;
+
+    public LatestDataProductionTokenQuery(Connection connection, String referentielVersion, String codeTypeFichier) {
+        this.connection = connection;
+        this.referentielVersion = referentielVersion;
+        this.codeTypeFichier = codeTypeFichier;
+    }
+
+    public String execute() throws SQLException {
+        try ( PreparedStatement stmt = connection.prepareStatement(queryString())) {
+            stmt.setString(1, codeTypeFichier);
+            stmt.setString(2, referentielVersion);
+            stmt.setString(3, codeTypeFichier);
+            stmt.setString(4, referentielVersion);
+
+            ResultSet result = stmt.executeQuery();
+
+            if (result.next()) {
+                return result.getString(1);
+            }
+            return null;
+        }
+    }
+
+    private String queryString() {
+        String subQuery = "SELECT MAX(id) FROM dataproduction WHERE codetypefichier = ?"
+                + " AND referentielversion = ? ";
+        return "SELECT token FROM dataproduction WHERE codetypefichier = ?"
+                + " AND referentielversion = ? AND ID IN (" + subQuery + ")";
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/MaxDataProductionIdQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/MaxDataProductionIdQuery.java
new file mode 100644
index 0000000..67f8ce5
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/MaxDataProductionIdQuery.java
@@ -0,0 +1,47 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.model.enumeration.StatutDataProduction;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionIdColumnDefinition;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+/**
+ *
+ * @author ASUS
+ */
+public class MaxDataProductionIdQuery {
+
+    private final String tableName;
+    private final Connection connection;
+
+    public MaxDataProductionIdQuery(String tableName, Connection connection) {
+        this.tableName = tableName;
+        this.connection = connection;
+    }
+
+    public Long execute() throws SQLException {
+        Long max = 0L;
+
+        try ( PreparedStatement statement = connection.prepareStatement(maxQueryString())) {
+            ResultSet resultSet = statement.executeQuery();
+
+            if (resultSet.next()) {
+                max = resultSet.getLong(1);
+            }
+        }
+        return max;
+    }
+
+    private String maxQueryString() {
+        return "SELECT id FROM dataproduction"
+                + " WHERE statutdataproduction  IN('" + StatutDataProduction.A_CONSOMMER + "', '" + StatutDataProduction.CONSOMME + "')"
+                + " AND id IN (SELECT DISTINCT " + new DataProductionIdColumnDefinition().name() + " FROM " + tableName + ")"
+                + " ORDER BY id DESC";
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/PermanentDeleteQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/PermanentDeleteQuery.java
new file mode 100644
index 0000000..d3af1e8
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/PermanentDeleteQuery.java
@@ -0,0 +1,50 @@
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.tools.database.contrat.DefaultPreparedStatementProcessor;
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.queries.metadata.WhereQueryParameters;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+
+/**
+ * @author Gabuntu
+ */
+public class PermanentDeleteQuery implements QueryMetaData<Void> {
+
+    private final Connection connection;
+    private final QueryCriterion queryCriterion;
+    private final String tableName;
+
+    public PermanentDeleteQuery(String tableName, Connection connection, QueryCriterion queryCriterion) {
+        this.connection = connection;
+        this.queryCriterion = queryCriterion;
+        this.tableName = tableName;
+    }
+
+    @Override
+    public Void execute() throws Exception {
+
+        System.out.println("<----------------------------------------------------------------------------------------------------------->");
+        System.out.println(permanentDeleteQuery());
+        System.out.println("<----------------------------------------------------------------------------------------------------------->");
+
+        try (PreparedStatement statement = connection.prepareStatement(permanentDeleteQuery())) {
+
+            connection.setAutoCommit(false);
+
+            new DefaultPreparedStatementProcessor().process(statement, new WhereQueryParameters(queryCriterion).parameters());
+            statement.execute();
+
+            connection.commit();
+
+            return null;
+        }
+    }
+
+    private String permanentDeleteQuery() throws Exception {
+        return "DELETE FROM " + tableName + "  " + new WhereQueryString(queryCriterion).query();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/SelectDataProductionQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/SelectDataProductionQuery.java
new file mode 100644
index 0000000..0cd79fc
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/SelectDataProductionQuery.java
@@ -0,0 +1,35 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+/**
+ *
+ * @author ASUS
+ */
+public class SelectDataProductionQuery {
+
+    private final Connection connection;
+
+    public SelectDataProductionQuery(Connection connection) {
+        this.connection = connection;
+    }
+
+    public boolean dataProductionExists(Long id) throws SQLException {
+        String query = "SELECT COUNT(*) FROM DATAPRODUCTION WHERE id = " + id;
+
+        try ( PreparedStatement statement = connection.prepareStatement(query)) {
+            ResultSet resultSet = statement.executeQuery();
+            if (resultSet.next()) {
+                return resultSet.getLong(1) > 0;
+            }
+            return false;
+        }
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/SelectQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/SelectQuery.java
new file mode 100644
index 0000000..313ea90
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/SelectQuery.java
@@ -0,0 +1,145 @@
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.contrat.DefaultPreparedStatementProcessor;
+import com.megatim.fdxcommons.tools.database.tables.FdxTableRow;
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import com.megatim.fdxcommons.tools.database.queries.metadata.SelectQueryResult;
+import com.megatim.fdxcommons.tools.database.queries.metadata.WhereQueryParameters;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.FdxApiColumnDefinitions;
+import com.megatim.fdxcommons.tools.database.tables.FdxTableColumnData;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.FdxConsultationColumnDefinitions;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.IndexColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.TokenColumnDefinition;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class SelectQuery implements QueryMetaData<SelectQueryResult> {
+
+    private final String tableName;
+    private final Connection connection;
+    private final QueryCriterion queryCriterion;
+    private final List<String> selectColumns;
+    private final int limit;
+    private final boolean withCustomColumns;
+    private final int offset;
+
+    public SelectQuery(String tableName, Connection connection, QueryCriterion queryCriterion, List<String> selectColumns, boolean withCustomColumns) {
+        this(tableName, connection, queryCriterion, selectColumns, -1, -1, withCustomColumns);
+    }
+
+    public SelectQuery(String tableName, Connection connection, QueryCriterion queryCriterion, List<String> selectColumns, int limit, int offset, boolean withCustomColumns) {
+        this.tableName = tableName;
+        this.connection = connection;
+        this.queryCriterion = queryCriterion;
+        this.selectColumns = selectColumns;
+        this.limit = limit;
+        this.offset = offset;
+        this.withCustomColumns = withCustomColumns;
+    }
+
+    @Override
+    public SelectQueryResult execute() throws Exception {
+        return result();
+    }
+
+    private SelectQueryResult result() throws NamingException, SQLException {
+        String query = selectQuery();
+        System.out.println("------------------------------------------");
+        System.out.println(query);
+        System.out.println("------------------------------------------------");
+
+        try ( PreparedStatement statement = connection.prepareStatement(query)) {
+
+            new DefaultPreparedStatementProcessor().process(statement, new WhereQueryParameters(queryCriterion).parameters());
+
+            long rowCount = 1;
+
+            ResultSet resultSet = statement.executeQuery();
+            ResultSetMetaData metaData = resultSet.getMetaData();
+            int columnCount = metaData.getColumnCount();
+
+            List<FdxTableRow> rows = new ArrayList<>();
+
+            int lastIndexRead = 0;
+
+            FdxApiColumnDefinitions apiColumnDefinitions = new FdxApiColumnDefinitions();
+            FdxConsultationColumnDefinitions fdxConsColumnDefinitions = new FdxConsultationColumnDefinitions();
+            final String tokenColumn = new TokenColumnDefinition().name();
+
+            while (resultSet.next()) {
+
+                List<FdxTableColumnData> data = new ArrayList<>();
+
+                for (int i = 1; i <= columnCount; i++) {
+
+                    String name = metaData.getColumnName(i).trim();
+                    Object value = resultSet.getObject(i);
+//                    int sqlDataType = metaData.getColumnType(i);
+
+                    if (!name.equals(tokenColumn)) {
+                        if (withCustomColumns) {
+                            data.add(new FdxTableColumnData(value, name, i));
+                        } else {
+                            if (!apiColumnDefinitions.isAppColumnDefinition(name) && !fdxConsColumnDefinitions.isAppColumnDefinition(name)) {
+                                data.add(new FdxTableColumnData(value, name, i));
+                            }
+                        }
+                        if (apiColumnDefinitions.isIndexColumn(name)) {
+                            int currentIndex = Integer.parseInt(value.toString());
+                            if (currentIndex > lastIndexRead) {
+                                lastIndexRead = currentIndex;
+                            }
+                        }
+                    }
+                }
+
+                rows.add(new FdxTableRow(rowCount++, data));
+            }
+            return new SelectQueryResult(lastIndexRead, rows);
+        }
+    }
+
+    private String selectQuery() {
+
+        StringBuilder query = new StringBuilder("SELECT ");
+
+        if (selectColumns.isEmpty()) {
+
+            query.append(" * ");
+
+        } else {
+
+            selectColumns.forEach(c -> query.append(c.toLowerCase()).append(","));
+            query.replace(query.length() - 1, query.length(), ""); //retirer la sernière virgule
+
+        }
+
+        query
+                .append(" FROM ")
+                .append(tableName);
+
+        query.append(new WhereQueryString(queryCriterion).query());
+        query.append(" ORDER BY ").append(new IndexColumnDefinition().name());
+
+        if (limit > 0 && offset >= 0) {
+
+            query
+                    .append(" LIMIT ")
+                    .append(limit)
+                    .append(" OFFSET ")
+                    .append(offset);
+        }
+        return query.toString();
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/TableDefinitionQueries.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/TableDefinitionQueries.java
new file mode 100644
index 0000000..60c4dd4
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/TableDefinitionQueries.java
@@ -0,0 +1,169 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.tools.database.contrat.AppColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.FdxConsultationIndexColumnDefinition;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+/**
+ *
+ * @author ASUS
+ */
+public class TableDefinitionQueries {
+
+    private final String tableName;
+    private final Connection connection;
+
+    public TableDefinitionQueries(String tableName, Connection connection) {
+        this.tableName = tableName;
+        this.connection = connection;
+    }
+
+    public boolean tableExists() throws SQLException {
+        Long nb = 0L;
+
+        try ( PreparedStatement statement = connection.prepareStatement(tableExistsQuery())) {
+            ResultSet resultSet = statement.executeQuery();
+
+            if (resultSet.next()) {
+                nb = resultSet.getLong(1);
+            }
+        }
+        return nb == 1;
+    }
+    
+    public boolean constraintExists(String constraintName) throws SQLException {
+        Long nb = 0L;
+
+        try ( PreparedStatement statement = connection.prepareStatement(constraintExistsQuery(constraintName))) {
+            ResultSet resultSet = statement.executeQuery();
+
+            if (resultSet.next()) {
+                nb = resultSet.getLong(1);
+            }
+        }
+        return nb == 1;
+    }
+
+    public boolean columnExists(String columnName) throws SQLException {
+        Long nb = 0L;
+
+        try ( PreparedStatement statement = connection.prepareStatement(columnExistsQuery(columnName))) {
+            ResultSet resultSet = statement.executeQuery();
+
+            if (resultSet.next()) {
+                nb = resultSet.getLong(1);
+            }
+        }
+        return nb == 1;
+    }
+
+    private String columnExistsQuery(String columnName) {
+        return "SELECT COUNT(column_name)"
+                + " FROM information_schema.columns"
+                + " WHERE table_name = '" + tableName + "' AND column_name = '" + columnName + "'";
+    }
+
+    private String constraintExistsQuery(String constraintName) {
+        return "SELECT COUNT(*) FROM  pg_constraint WHERE conname =  '" + constraintName + "'";
+    }
+
+    private String tableExistsQuery() {
+        return "SELECT  COUNT(table_name)"
+                + " FROM  information_schema.tables"
+                + " WHERE  table_schema LIKE 'public' AND  table_type LIKE 'BASE TABLE' AND table_name = '" + tableName + "'";
+    }
+
+    public void addAppColumn(AppColumnDefinition appColumn) throws SQLException {
+
+        try ( Statement stmt = connection.createStatement()) {
+            String query = addAppColumnQuery(appColumn).toString();
+            stmt.execute(query);
+        }
+    }
+
+    public void dropAppColumn(AppColumnDefinition appColumn) throws SQLException {
+        String query = dropColumnQuery(appColumn);
+        
+        try ( Statement stmt = connection.createStatement()) {
+            stmt.execute(query);
+        }
+    }
+
+    public void dropConstraint(String constraintName) throws SQLException {
+        String query = dropConstraintQuery(constraintName);
+        
+        try ( Statement stmt = connection.createStatement()) {
+            stmt.execute(query);
+        }
+    }
+
+    public void addPkConstraint(String constraintName) throws SQLException {
+        String query = addPkConstraintQuery(constraintName);
+        
+        try ( Statement stmt = connection.createStatement()) {
+            stmt.execute(query);
+        }
+    }
+
+    private String dropColumnQuery(AppColumnDefinition column) {
+        StringBuilder query = new StringBuilder("ALTER TABLE ");
+
+        query
+                .append(tableName)
+                .append(" DROP COLUMN IF EXISTS ")
+                .append(column.name())
+                .append(";");
+
+        return query.toString();
+    }
+
+    private String dropConstraintQuery(String constraintName) {
+        StringBuilder query = new StringBuilder();
+
+        query.append("ALTER TABLE ")
+                .append(tableName)
+                .append(" DROP CONSTRAINT IF EXISTS ")
+                .append(constraintName)
+                .append(";");
+
+        return query.toString();
+    }
+
+    private String addPkConstraintQuery(String constraintName) {
+        StringBuilder query = new StringBuilder();
+
+        query.append("ALTER TABLE ")
+                .append(tableName)
+                .append(" ADD CONSTRAINT ")
+                .append(constraintName)
+                .append(" PRIMARY KEY(")
+                .append(new FdxConsultationIndexColumnDefinition().name())
+                .append(");");
+
+        return query.toString();
+    }
+
+    private StringBuilder addAppColumnQuery(AppColumnDefinition column) {
+        StringBuilder query = new StringBuilder("ALTER TABLE ");
+        query
+                .append(tableName)
+                .append(" ADD COLUMN IF NOT EXISTS ")
+                .append(column.name())
+                .append(" ")
+                .append(column.type())
+                .append(column.isNull() ? " NULL " : " NOT NULL ");
+
+        if (column.defaultValue() != null) {
+            query.append("DEFAULT ").append(column.defaultValue());
+        }
+        return query;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/UpdateDataProductionQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/UpdateDataProductionQuery.java
new file mode 100644
index 0000000..06a591b
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/UpdateDataProductionQuery.java
@@ -0,0 +1,35 @@
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
+/**
+ *
+ * @author ASUS
+ */
+public class UpdateDataProductionQuery {
+
+    private final Connection connection;
+    private final CommonDataProduction dataProduction;
+
+    public UpdateDataProductionQuery(CommonDataProduction dataProduction, Connection connection) {
+        this.connection = connection;
+        this.dataProduction = dataProduction;
+    }
+
+    public void execute() throws SQLException {
+        try (PreparedStatement statement = connection.prepareStatement(queryString())) {
+            statement.setString(1, dataProduction.getStatutDataProduction().name());
+            statement.setLong(2, dataProduction.getNbreElements());
+            statement.setLong(3, dataProduction.getId());
+            statement.executeUpdate();
+        }
+    }
+
+    private String queryString() {
+        String query = "UPDATE dataproduction SET statutdataproduction  = ? , nbreelements = ? WHERE id = ?";
+        return query;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/UpdateQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/UpdateQuery.java
new file mode 100644
index 0000000..e09f0da
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/UpdateQuery.java
@@ -0,0 +1,69 @@
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.contrat.DefaultPreparedStatementProcessor;
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryParam;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class UpdateQuery implements QueryMetaData<Void> {
+
+    private final Connection connection;
+    private final QueryCriterion queryCriterion;
+    private final String tableName;
+    private final List<String> columnNames;
+    private final List<QueryParam> params;
+
+    public UpdateQuery(Connection connection, QueryCriterion queryCriterion, String tableName, List<String> columnNames, List<QueryParam> params) {
+        this.connection = connection;
+        this.queryCriterion = queryCriterion;
+        this.tableName = tableName;
+        this.columnNames = columnNames;
+        this.params = params;
+    }
+
+    @Override
+    public Void execute() throws Exception {
+
+        System.out.println("<----------------------------------------------------------------------------------------------------------->");
+        System.out.println(updateQuery());
+        System.out.println("<----------------------------------------------------------------------------------------------------------->");
+
+        try ( PreparedStatement statement = connection.prepareStatement(updateQuery())) {
+            new DefaultPreparedStatementProcessor().process(statement, params);
+            statement.execute();
+        }
+
+        return null;
+    }
+
+    private String updateQuery() throws Exception {
+        return "UPDATE " + tableName + " " + setQueryPart() + " " + new WhereQueryString(queryCriterion).query();
+    }
+
+    private String setQueryPart() throws Exception {
+
+        List<String> columnsToUpdate = new ArrayList<>(columnNames);
+
+        StringBuilder query = new StringBuilder("SET ");
+        int index = 0;
+
+        for (String column : columnsToUpdate) {
+            if ((index + 1) < columnsToUpdate.size()) {
+                query.append(column).append(" = ? ,");
+            } else {
+                query.append(column).append(" = ?");
+            }
+            index++;
+        }
+        return query.toString();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/WhereQueryString.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/WhereQueryString.java
new file mode 100644
index 0000000..5f18449
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/WhereQueryString.java
@@ -0,0 +1,160 @@
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.BETWEEN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.EQUALS;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.GREATER_OR_EQUALS_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.GREATER_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.IN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.IS_NOT_NULL;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.IS_NULL;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.LIKE;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.LOWER_OR_EQUALS_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.LOWER_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.NOT_BETWEEN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.NOT_EQUALS;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.NOT_IN;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class WhereQueryString {
+
+    private final QueryCriterion queryCriterion;
+
+    public WhereQueryString(QueryCriterion queryCriterion) {
+        this.queryCriterion = queryCriterion;
+    }
+
+    public String query() {
+        StringBuilder query = new StringBuilder("");
+        if (queryCriterion != null) {
+            query
+                    .append(" WHERE ")
+                    .append(buildQuery(queryCriterion));
+        }
+        return query.toString();
+    }
+
+    private String buildQuery(QueryCriterion criterion) {
+        StringBuilder query = new StringBuilder();
+
+        if (criterion.getSubCriteria().isEmpty()) {
+
+            switch (criterion.getOperateur()) {
+                case EQUALS:
+                case NOT_EQUALS:
+                case LIKE:
+                case GREATER_OR_EQUALS_THAN:
+                case GREATER_THAN:
+                case LOWER_OR_EQUALS_THAN:
+                case LOWER_THAN:
+                    query.append(buildQueryWithSingleParameter(criterion));
+                    break;
+                case BETWEEN:
+                case NOT_BETWEEN:
+                    query.append(buildBetweenQuery(criterion));
+                    break;
+                case IS_NOT_NULL:
+                case IS_NULL:
+                    query.append(buildQueryWithoutParameter(criterion));
+                    break;
+                case NOT_IN:
+                case IN:
+                    query.append(buildQueryWithMultipleParameters(criterion));
+                    break;
+            }
+
+        } else {
+
+            CriteriaLogicConnector criteriaLogicConnector = criterion.getCriteriaLogicConnector();
+            int size = criterion.getSubCriteria().size();
+            int index = 0;
+
+            for (QueryCriterion c : criterion.getSubCriteria()) {
+                query
+                        .append("(")
+                        .append(buildQuery(c))
+                        .append(")");
+
+                if ((++index) < size) {
+                    query.append(criteriaLogicConnector.equals(CriteriaLogicConnector.AND) ? " AND " : " OR ");
+                }
+
+            }
+
+        }
+
+        return query.toString();
+    }
+
+    private String buildQueryWithoutParameter(QueryCriterion criterion) {
+        StringBuilder query = new StringBuilder("");
+        query
+                .append(criterion.getNomColonne())
+                .append(" ")
+                .append(criterion.getOperateur().getValue());
+        return query.toString();
+    }
+
+    private String buildQueryWithSingleParameter(QueryCriterion criterion) {
+        StringBuilder query = new StringBuilder("");
+        if (criterion.getOperateur().equals(Operateur.LIKE)) {
+            query
+                    .append("LOWER(")
+                    .append(criterion.getNomColonne())
+                    .append(") LIKE LOWER(?)");
+        } else {
+            query
+                    .append(criterion.getNomColonne())
+                    .append(" ")
+                    .append(criterion.getOperateur().getValue())
+                    .append(" ?");
+        }
+
+        return query.toString();
+    }
+
+    private String buildBetweenQuery(QueryCriterion criterion) {
+        StringBuilder query = new StringBuilder("");
+        query
+                .append(criterion.getNomColonne())
+                .append(" ")
+                .append(criterion.getOperateur().getValue())
+                .append(" ? ")
+                .append(" AND ")
+                .append(" ? ");
+        return query.toString();
+    }
+
+    private String buildQueryWithMultipleParameters(QueryCriterion criterion) {
+        StringBuilder query = new StringBuilder("");
+
+        query
+                .append(criterion.getNomColonne())
+                .append(" ")
+                .append(criterion.getOperateur().getValue())
+                .append("(");
+
+        List values = (List) criterion.getCriteriaValue();
+
+        int size = values.size();
+        for (int i = 0; i < size; i++) {
+
+            if ((i + 1) < size) {
+                query.append("?,");
+            } else {
+                query.append("?");
+            }
+
+        }
+
+        query.append(")");
+
+        return query.toString();
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/jpql/JpqlWhereQueryString.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/jpql/JpqlWhereQueryString.java
new file mode 100644
index 0000000..11632b2
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/jpql/JpqlWhereQueryString.java
@@ -0,0 +1,186 @@
+package com.megatim.fdxcommons.tools.database.queries.jpql;
+
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.BETWEEN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.EQUALS;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.GREATER_OR_EQUALS_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.GREATER_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.IN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.IS_NOT_NULL;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.IS_NULL;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.LIKE;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.LOWER_OR_EQUALS_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.LOWER_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.NOT_BETWEEN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.NOT_EQUALS;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.NOT_IN;
+import com.megatim.fdxcommons.tools.database.exceptions.BadQueryCriteriaException;
+import com.megatim.fdxcommons.tools.database.queries.metadata.jpql.JpqlQueryCriterion;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ *
+ * @author lenovo
+ */
+public class JpqlWhereQueryString {
+
+    private final JpqlQueryCriterion queryCriterion;
+    private final String classAlias;
+    private final AtomicInteger rang = new AtomicInteger(1);
+
+    public JpqlWhereQueryString(JpqlQueryCriterion queryCriterion, String classAlias) {
+        this.queryCriterion = queryCriterion;
+        this.classAlias = classAlias;
+    }
+
+    public String query() throws BadQueryCriteriaException {
+        StringBuilder query = new StringBuilder("");
+
+        if (queryCriterion != null) {
+            query
+                    .append(" WHERE ")
+                    .append(buildQuery(queryCriterion));
+        }
+        return query.toString();
+    }
+
+    private String buildQuery(JpqlQueryCriterion criterion) throws BadQueryCriteriaException {
+        StringBuilder query = new StringBuilder();
+
+        if (criterion.getSubCriteria().isEmpty()) {
+
+            switch (criterion.getOperateur()) {
+                case EQUALS:
+                case NOT_EQUALS:
+                case LIKE:
+                case GREATER_OR_EQUALS_THAN:
+                case GREATER_THAN:
+                case LOWER_OR_EQUALS_THAN:
+                case LOWER_THAN:
+                    query.append(buildQueryWithSingleParameter(criterion));
+                    break;
+                case BETWEEN:
+                case NOT_BETWEEN:
+                    query.append(buildBetweenQuery(criterion));
+                    break;
+                case IS_NOT_NULL:
+                case IS_NULL:
+                    query.append(buildQueryWithoutParameter(criterion));
+                    break;
+                case NOT_IN:
+                case IN:
+                    query.append(buildQueryWithMultipleParameters(criterion));
+                    break;
+            }
+
+        } else {
+
+            CriteriaLogicConnector criteriaLogicConnector = criterion.getCriteriaLogicConnector();
+            if (criteriaLogicConnector == null) {
+                throw new BadQueryCriteriaException("Critère non valide : Connecteur logique absent");
+            }
+            int size = criterion.getSubCriteria().size();
+            int index = 0;
+
+            for (JpqlQueryCriterion c : criterion.getSubCriteria()) {
+                query
+                        .append("(")
+                        .append(buildQuery(c))
+                        .append(")");
+
+                if ((++index) < size) {
+                    query.append(criteriaLogicConnector.equals(CriteriaLogicConnector.AND) ? " AND " : " OR ");
+                }
+
+            }
+
+        }
+
+        return query.toString();
+    }
+
+    private String buildQueryWithoutParameter(JpqlQueryCriterion criterion) {
+        StringBuilder query = new StringBuilder("");
+        query
+                .append(classAlias)
+                .append(".")
+                .append(criterion.getNomColonne())
+                .append(" ")
+                .append(criterion.getOperateur().getValue());
+        return query.toString();
+    }
+
+    private String buildQueryWithSingleParameter(JpqlQueryCriterion criterion) {
+        StringBuilder query = new StringBuilder("");
+        if (criterion.getOperateur().equals(Operateur.LIKE)) {
+            query
+                    .append("LOWER(")
+                    .append(classAlias)
+                    .append(".")
+                    .append(criterion.getNomColonne())
+                    .append(") LIKE LOWER(?")
+                    .append(rang.getAndIncrement())
+                    .append(")");
+        } else {
+            query
+                    .append(classAlias)
+                    .append(".")
+                    .append(criterion.getNomColonne())
+                    .append(" ")
+                    .append(criterion.getOperateur().getValue())
+                    .append(" ?")
+                    .append(rang.getAndIncrement())
+                    .append(" ");
+        }
+
+        return query.toString();
+    }
+
+    private String buildBetweenQuery(JpqlQueryCriterion criterion) {
+        StringBuilder query = new StringBuilder("");
+        query
+                .append(classAlias)
+                .append(".")
+                .append(criterion.getNomColonne())
+                .append(" ")
+                .append(criterion.getOperateur().getValue())
+                .append(" ?")
+                .append(rang.getAndIncrement())
+                .append(" AND ")
+                .append(" ?")
+                .append(rang.getAndIncrement())
+                .append(" ");
+        return query.toString();
+    }
+
+    private String buildQueryWithMultipleParameters(JpqlQueryCriterion criterion) {
+        StringBuilder query = new StringBuilder("");
+
+        query
+                .append(classAlias)
+                .append(".")
+                .append(criterion.getNomColonne())
+                .append(" ")
+                .append(criterion.getOperateur().getValue())
+                .append("(");
+
+        List values = (List) criterion.getCriteriaValue();
+
+        int size = values.size();
+        for (int i = 0; i < size; i++) {
+
+            if ((i + 1) < size) {
+                query.append("?").append(rang.getAndIncrement()).append(", ");
+            } else {
+                query.append("?").append(rang.getAndIncrement());
+            }
+
+        }
+
+        query.append(")");
+
+        return query.toString();
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/jpql/JqplQueryString.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/jpql/JqplQueryString.java
new file mode 100644
index 0000000..6c423ad
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/jpql/JqplQueryString.java
@@ -0,0 +1,54 @@
+package com.megatim.fdxcommons.tools.database.queries.jpql;
+
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxcommons.tools.database.queries.metadata.jpql.JpqlQueryCriterion;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JqplQueryString {
+
+    private final String simpleClassName;
+
+    private final JpqlQueryCriterion queryCriterion;
+
+    public JqplQueryString(String simpleClassName, JpqlQueryCriterion queryCriterion) {
+        this.simpleClassName = simpleClassName;
+        this.queryCriterion = queryCriterion;
+    }
+
+    public String selectQuery(List<OrderByDefinition> orderByFields) throws Exception {
+        String classAlias = simpleClassName.toLowerCase().charAt(0) + "";
+        String selectFromQueryPart = "SELECT " + classAlias + " FROM " + simpleClassName + " " + classAlias + " ";
+        String whereQueryPart = new JpqlWhereQueryString(queryCriterion, classAlias).query();
+        String query = selectFromQueryPart + " " + whereQueryPart + " " + orderByClause(classAlias, orderByFields);
+        return query;
+    }
+
+    public String countQuery() throws Exception {
+        String classAlias = simpleClassName.toLowerCase().charAt(0) + "";
+        String selectFromQueryPart = "SELECT COUNT(*) FROM " + simpleClassName + " " + classAlias + " ";
+        String whereQueryPart = new JpqlWhereQueryString(queryCriterion, classAlias).query();
+        String query = selectFromQueryPart + " " + whereQueryPart;
+        return query;
+    }
+
+    private String orderByClause(String classAlias, List<OrderByDefinition> orderByFields) {
+        StringBuilder orderBy = new StringBuilder("ORDER BY ");
+        if (orderByFields == null || orderByFields.isEmpty()) {
+            return "";
+        }
+
+        for (OrderByDefinition def : orderByFields) {
+            if (def.getFieldName() != null && !def.getFieldName().isEmpty()) {
+                String orderByType = def.getOrderByType() != null ? def.getOrderByType().name() : OrderByType.ASC.name();
+                orderBy.append(classAlias).append(".").append(def.getFieldName()).append(" ").append(orderByType).append(",");
+            }
+        }
+        orderBy.replace(orderBy.length() - 1, orderBy.length(), "");//retirer la dernière virgule
+        return orderBy.toString();
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/json/CreateJsonTableIfNotExistQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/json/CreateJsonTableIfNotExistQuery.java
new file mode 100644
index 0000000..cd4017c
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/json/CreateJsonTableIfNotExistQuery.java
@@ -0,0 +1,161 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries.json;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import static com.megatim.fdxcommons.model.enumeration.TypeDonnee.ALPHANUMERIQUE;
+import static com.megatim.fdxcommons.model.enumeration.TypeDonnee.DATE;
+import static com.megatim.fdxcommons.model.enumeration.TypeDonnee.DECIMAL;
+import static com.megatim.fdxcommons.model.enumeration.TypeDonnee.NUMERIQUE;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.tools.database.contrat.AppColumnDefinition;
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import com.megatim.fdxcommons.tools.database.exceptions.BadColumnTypeException;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.AppColumnDefinitions;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.IndexColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.ParentIdColumnDefinition;
+import com.megatim.fdxcommons.model.pojo.JsonTableDefinition;
+import java.sql.Connection;
+import java.sql.JDBCType;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public class CreateJsonTableIfNotExistQuery implements QueryMetaData<Void> {
+
+    private final Connection connection;
+    private final AppColumnDefinitions appColumnDefinitions;
+    private final JsonTableDefinition tableDefinition;
+    private final List<String> queries = new ArrayList<>();
+
+    public CreateJsonTableIfNotExistQuery(Connection connection, AppColumnDefinitions appColumnDefinitions, JsonTableDefinition tableDefinition) {
+        this.connection = connection;
+        this.appColumnDefinitions = appColumnDefinitions;
+        this.tableDefinition = tableDefinition;
+    }
+
+    @Override
+    public Void execute() throws Exception {
+        query(tableDefinition);
+
+        for (String query : queries) {
+            System.out.println(query);
+        }
+
+        try ( Statement stmt = connection.createStatement()) {
+            for (String query : queries) {
+                stmt.execute(query);
+            }
+        }
+        return null;
+    }
+
+    private void query(JsonTableDefinition jsonTableDefinition) throws BadColumnTypeException {
+        StringBuilder query = new StringBuilder("CREATE TABLE IF NOT EXISTS " + jsonTableDefinition.getTableName() + "(");
+        List<AppColumnDefinition> primaryKeys = new ArrayList<>();
+
+        for (ColumnDefinition colDef : jsonTableDefinition.getColumnDefs()) {
+            query.append(colDef.getName().toLowerCase()).append(" ").append(sqlColumnType(colDef));
+            if (colDef.isRequired()) {
+                query.append(" NOT NULL");
+            }
+            query.append(", ");
+        }
+
+        for (AppColumnDefinition appColumnDefinition : appColumnDefinitions.appColumns()) {
+            query.append(columnDefinitonString(appColumnDefinition)).append(", ");
+
+            if (appColumnDefinition.isPrimaryKey()) {
+                primaryKeys.add(appColumnDefinition);
+            }
+        }
+        //Defintion de la colonne fdx_parent_id
+        if (jsonTableDefinition.getParentTableName() != null) {
+            query.append(columnDefinitonString(new ParentIdColumnDefinition())).append(", ");
+        }
+
+        if (!primaryKeys.isEmpty()) {
+            query.append(" PRIMARY KEY(");
+            primaryKeys.stream().forEach(pk -> query.append(pk.name()).append(", "));
+
+            //Retirer la dernière virgule
+            query.replace(query.length() - 2, query.length(), ")");
+        } else {
+            //Retirer la dernière virgule
+            query.replace(query.length() - 2, query.length(), "");
+        }
+
+        //Contrainte de clé étrangère sur fdx_parent_id
+        if (jsonTableDefinition.getParentTableName() != null) {
+            query.append(parentIdDefintion(jsonTableDefinition.getParentTableName(), new ParentIdColumnDefinition().name(), new IndexColumnDefinition().name()));
+        }
+        query.append(");");
+
+        queries.add(query.toString());
+
+        if (!jsonTableDefinition.getTablesDefinition().isEmpty()) {
+            for (JsonTableDefinition tableDef : jsonTableDefinition.getTablesDefinition()) {
+                query(tableDef);
+            }
+        }
+    }
+
+    private String parentIdDefintion(String parentTableName, String parentIdColumnName, String indexColumnName) {
+        StringBuilder builder = new StringBuilder("");
+        builder.append(", FOREIGN KEY (").append(parentIdColumnName).append(") REFERENCES ").append(parentTableName).append("(").append(indexColumnName).append(")");
+
+        return builder.toString();
+    }
+
+    private String sqlColumnType(ColumnDefinition colDef) throws BadColumnTypeException {
+        switch (TypeDonnee.fromValeur(colDef.getTypeDonnee())) {
+            case ALPHANUMERIQUE:
+                return jdbcType(colDef) + "(" + colDef.getTaille() + ")";
+            case NUMERIQUE:
+                return jdbcType(colDef).getName();
+            case DATE:
+                String requiredDefinition = colDef.isRequired() ? " NOT NULL" : " NULL";
+                return jdbcType(colDef).getName() + requiredDefinition;
+            case DECIMAL:
+                return jdbcType(colDef) + "(" + colDef.getTaille() + "," + 4 + ")";
+        }
+        throw new BadColumnTypeException("Type de colonne incorrect " + colDef.getTypeDonnee());
+    }
+
+    private JDBCType jdbcType(ColumnDefinition colDef) throws BadColumnTypeException {
+        switch (TypeDonnee.fromValeur(colDef.getTypeDonnee())) {
+            case NUMERIQUE:
+                return colDef.getTaille() < 5 ? JDBCType.SMALLINT : JDBCType.BIGINT;
+            case DECIMAL:
+                return JDBCType.DECIMAL;
+            case DATE:
+                return JDBCType.TIMESTAMP;
+            case ALPHANUMERIQUE:
+                return JDBCType.VARCHAR;
+        }
+        throw new BadColumnTypeException("Type de colonne incorrect " + colDef.getName());
+    }
+
+    private String columnDefinitonString(AppColumnDefinition column) throws BadColumnTypeException {
+        StringBuilder definition = new StringBuilder();
+        definition
+                .append(column.name().toLowerCase())
+                .append(" ")
+                .append(column.type())
+                .append(" ")
+                .append(column.isNull() ? "NULL " : "NOT NULL ");
+        
+        if (column.defaultValue() != null) {
+            definition
+                    .append("DEFAULT ")
+                    .append(column.defaultValue());
+        }
+        return definition.toString();
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/AliasedQueryCriterion.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/AliasedQueryCriterion.java
new file mode 100644
index 0000000..017d2fe
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/AliasedQueryCriterion.java
@@ -0,0 +1,113 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.model.pojo.JsonTableDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.FdxApiColumnDefinitions;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.FdxConsultationColumnDefinitions;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * @author ASUS
+ */
+public class AliasedQueryCriterion {
+
+    private final JsonTableDefinition tableDefinition;
+    private final QueryCriterion queryCriterion;
+    private final Map<String, String> tablesNameToAlias;
+    private final FdxApiColumnDefinitions apiColumnDefinitions = new FdxApiColumnDefinitions();
+    private final FdxConsultationColumnDefinitions fdxConsColumnDefinitions = new FdxConsultationColumnDefinitions();
+
+    public AliasedQueryCriterion(JsonTableDefinition tableDefinition, QueryCriterion queryCriterion, Map<String, String> tablesNameToAlias) {
+        this.tableDefinition = tableDefinition;
+        this.queryCriterion = queryCriterion;
+        this.tablesNameToAlias = tablesNameToAlias;
+    }
+
+    public QueryCriterion aliasedQueryCriterion() {
+        return queryCriterion != null ? aliasedQueryCriterion(queryCriterion) : null;
+    }
+
+    private QueryCriterion aliasedQueryCriterion(QueryCriterion criterion) {
+        if (criterion == null) {
+            return null;
+        }
+        if (criterion.getSubCriteria() != null && !criterion.getSubCriteria().isEmpty() && criterion.getCriteriaLogicConnector() != null) {
+            List<QueryCriterion> subCriteria = new ArrayList<>();
+
+            for (QueryCriterion qc : criterion.getSubCriteria()) {
+                QueryCriterion parseCriterion = aliasedQueryCriterion(qc);
+
+                if (parseCriterion != null) {
+                    subCriteria.add(parseCriterion);
+                }
+            }
+            if (!subCriteria.isEmpty()) {
+                return new QueryCriterion(null,
+                        null,
+                        null,
+                        criterion.getCriteriaLogicConnector(),
+                        subCriteria
+                );
+            }
+        } else if ((criterion.getSubCriteria() == null || criterion.getSubCriteria().isEmpty())) {
+            return new QueryCriterion(columnFullQualifiedName(criterion.getNomColonne()),
+                    criterion.getCriteriaValue(),
+                    criterion.getOperateur(),
+                    null,
+                    Arrays.asList()
+            );
+        }
+        return null;
+    }
+
+    private String tableName(String nomColonne) {
+        if (apiColumnDefinitions.isAppColumnDefinition(nomColonne) || fdxConsColumnDefinitions.isAppColumnDefinition(nomColonne)) {
+            return tableDefinition.getTableName();
+        } else if (tableDefinition.getColumnDefs().stream().filter(c -> c.getName().equalsIgnoreCase(nomColonne)).findFirst().isPresent()) {
+            return tableDefinition.getTableName();
+        } else {
+            return tableName(nomColonne, tableDefinition.getTablesDefinition());
+        }
+    }
+
+    private String tableName(String nomColonne, List<JsonTableDefinition> tablesDef) {
+        String tableName = null;
+        for (JsonTableDefinition t : tablesDef) {
+            tableName = tableName(nomColonne, t);
+
+            if (tableName != null) {
+                return tableName;
+            }
+        }
+        return tableName;
+    }
+
+    private String columnFullQualifiedName(String nomColonne) {
+        String[] nomColonneArray = nomColonne.split("\\.");
+        String finalNomColonne = nomColonneArray[nomColonneArray.length - 1];
+        String tableName = tableName(finalNomColonne);
+
+        return tablesNameToAlias.get(tableName) + "." + finalNomColonne;
+    }
+
+    private String tableName(String nomColonne, JsonTableDefinition t) {
+        if (apiColumnDefinitions.isAppColumnDefinition(nomColonne) || fdxConsColumnDefinitions.isAppColumnDefinition(nomColonne)) {
+            return t.getTableName();
+        } else if (t.getColumnDefs().stream().filter(c -> c.getName().equalsIgnoreCase(nomColonne)).findFirst().isPresent()) {
+            return t.getTableName();
+        } else {
+            if (t.getTablesDefinition().isEmpty()) {
+                return null;
+            } else {
+                return tableName(nomColonne, t.getTablesDefinition());
+            }
+        }
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ApiTypeFichierDataColumn.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ApiTypeFichierDataColumn.java
new file mode 100644
index 0000000..67eedbf
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ApiTypeFichierDataColumn.java
@@ -0,0 +1,29 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierDataColumn;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class ApiTypeFichierDataColumn implements TypeFichierDataColumn {
+
+    final String columnName;
+    final Object value;
+
+    public ApiTypeFichierDataColumn(String columnName, Object value) {
+        this.columnName = columnName;
+        this.value = value;
+    }
+
+    @Override
+    public String column() {
+        return columnName;
+    }
+
+    @Override
+    public Object value() {
+        return value;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ApiTypeFichierDataRow.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ApiTypeFichierDataRow.java
new file mode 100644
index 0000000..7ae5a04
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ApiTypeFichierDataRow.java
@@ -0,0 +1,33 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierDataColumn;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierDataRow;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class ApiTypeFichierDataRow implements TypeFichierDataRow {
+
+    private final LinkedHashMap<String, Object> entity;
+    private final List<TypeFichierDataColumn> columns = new ArrayList<>();
+
+    public ApiTypeFichierDataRow(LinkedHashMap<String, Object> entity) {
+        this.entity = entity;
+    }
+
+    @Override
+    public List<TypeFichierDataColumn> columns() {
+        return entity
+                .entrySet()
+                .stream()
+                .map(e -> new ApiTypeFichierDataColumn(e.getKey(), e.getValue()))
+                .sorted((c1, c2) -> c1.column().compareTo(c2.column())) //On se rassure de classer le résultat
+                .collect(Collectors.toList());
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ApiTypeFichierInsertData.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ApiTypeFichierInsertData.java
new file mode 100644
index 0000000..2365446
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ApiTypeFichierInsertData.java
@@ -0,0 +1,53 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.tools.database.exceptions.BadDataValueException;
+import com.megatim.fdxcommons.tools.database.exceptions.ColumnNotFoundException;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierDataRow;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierInsertMetaData;
+import com.megatim.fdxcommons.tools.database.exceptions.TypeFichierDataBadRequest;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class ApiTypeFichierInsertData implements TypeFichierInsertMetaData {
+
+    private final FdxParsedData fdxParsedData;
+    private final String tableName;
+
+    public ApiTypeFichierInsertData(String tableName, FdxParsedData fdxParsedData) {
+        this.tableName = tableName;
+        this.fdxParsedData = fdxParsedData;
+    }
+
+    @Override
+    public String tableName() {
+        return tableName;
+    }
+
+    @Override
+    public List<String> columnNames() throws TypeFichierDataBadRequest, BadDataValueException, LocalDateTimeValueParseError, ColumnNotFoundException {
+        //On retourne les colonnes de l'entité 
+        return fdxParsedData.data().get(0)
+                .entrySet()
+                .stream()
+                .map(e -> e.getKey())
+                .sorted((e1, e2) -> e1.compareTo(e2)) //On se rassure de classer le résultat
+                .collect(Collectors.toList());
+    }
+
+    @Override
+    public List<TypeFichierDataRow> rows() throws TypeFichierDataBadRequest, BadDataValueException, LocalDateTimeValueParseError, ColumnNotFoundException {
+        List<TypeFichierDataRow> rows = new ArrayList<>();
+        for (Map<String, Object> entity : fdxParsedData.data()) {
+            rows.add(new DefaultTypeFichierDataRow(entity));
+        }
+        return rows;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ApiUpdateTypeFichierData.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ApiUpdateTypeFichierData.java
new file mode 100644
index 0000000..f69b562
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ApiUpdateTypeFichierData.java
@@ -0,0 +1,47 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.tools.database.exceptions.BadDataValueException;
+import com.megatim.fdxcommons.tools.database.exceptions.ColumnNotFoundException;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierDataRow;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierUpdateMetaData;
+import com.megatim.fdxcommons.tools.database.exceptions.TypeFichierDataBadRequest;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class ApiUpdateTypeFichierData implements TypeFichierUpdateMetaData {
+
+    private final String tableName;
+    private final FdxParsedDataRow fdxParsedDataRow;
+
+    public ApiUpdateTypeFichierData(String tableName, FdxParsedDataRow fdxParsedDataRow) {
+        this.tableName = tableName;
+        this.fdxParsedDataRow = fdxParsedDataRow;
+    }
+
+    @Override
+    public String tableName() {
+        return tableName;
+    }
+
+    @Override
+    public List<String> columnNames() throws TypeFichierDataBadRequest, ColumnNotFoundException, BadDataValueException, LocalDateTimeValueParseError {
+        //NB On itère selon l'ordre des champs dans l'entité
+        return fdxParsedDataRow.dataRow()
+                .entrySet()
+                .stream()
+                .map(e -> e.getKey())
+                .sorted((e1, e2) -> e1.compareTo(e2)) //On se rassure de classer le résultat
+                .collect(Collectors.toList());
+    }
+
+    @Override
+    public TypeFichierDataRow row() throws ColumnNotFoundException, BadDataValueException, LocalDateTimeValueParseError {
+        return new DefaultTypeFichierDataRow(fdxParsedDataRow.dataRow());
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ConsultationTypeFichierInsertData.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ConsultationTypeFichierInsertData.java
new file mode 100644
index 0000000..5930c27
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ConsultationTypeFichierInsertData.java
@@ -0,0 +1,44 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierDataRow;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierInsertMetaData;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author ASUS
+ */
+public class ConsultationTypeFichierInsertData implements TypeFichierInsertMetaData {
+
+    private final List<TypeFichierDataRow> rows;
+    private final String tableName;
+
+    public ConsultationTypeFichierInsertData(List<TypeFichierDataRow> rows, String tableName) {
+        this.rows = rows;
+        this.tableName = tableName;
+    }
+
+    @Override
+    public List<String> columnNames() throws Exception {
+        return rows.get(0).columns()
+                .stream()
+                .map(e -> e.column())
+                .sorted((e1, e2) -> e1.compareTo(e2)) //On se rassure de classer le résultat
+                .collect(Collectors.toList());
+    }
+
+    @Override
+    public String tableName() {
+        return tableName;
+    }
+
+    @Override
+    public List<TypeFichierDataRow> rows() throws Exception {
+        return rows;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/CriteriaLocalDateTimeValue.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/CriteriaLocalDateTimeValue.java
new file mode 100644
index 0000000..a1dc67f
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/CriteriaLocalDateTimeValue.java
@@ -0,0 +1,49 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.YearMonth;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class CriteriaLocalDateTimeValue {
+
+    private final String format;
+    private final Object value;
+
+    public CriteriaLocalDateTimeValue(String format, Object value) {
+        this.format = format;
+        this.value = value;
+    }
+
+    public LocalDateTime value() throws LocalDateTimeValueParseError {
+        final String stringValue = value.toString();
+
+        try {
+            if ((format.length() == 8 || format.length() == 10) && format.contains("yyyy") && format.contains("MM") && format.contains("dd")) {
+
+                LocalDate localDate = LocalDate.parse(stringValue, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                return localDate.atTime(LocalTime.MIN);
+
+            } else if ((format.length() == 6 || format.length() == 8) && format.contains("yyyy") && format.contains("MM")) {
+                YearMonth yearMonth = YearMonth.parse(stringValue, DateTimeFormatter.ofPattern("yyyy-MM"));
+                return LocalDateTime.from(yearMonth.atDay(1));
+
+            } else if (format.length() == 4 && format.equals("yyyy")) {
+                return LocalDateTime.of(Integer.parseInt(stringValue), 1, 1, 0, 0, 0, 0);
+            }
+
+        } catch (DateTimeParseException e) {
+            throw new LocalDateTimeValueParseError("Impossible de parser la valeur " + value + " au format " + format);
+        }
+
+        throw new LocalDateTimeValueParseError("Impossible de parser la valeur " + value + " au format " + format);
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/DefaultJsonTypeFichierDataRow.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/DefaultJsonTypeFichierDataRow.java
new file mode 100644
index 0000000..21111ae
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/DefaultJsonTypeFichierDataRow.java
@@ -0,0 +1,41 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.tools.database.contrat.JsonTypeFichierDataRow;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierDataColumn;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author ASUS
+ */
+public class DefaultJsonTypeFichierDataRow implements JsonTypeFichierDataRow {
+
+    private final Map<String, Object> entity;
+
+    public DefaultJsonTypeFichierDataRow(Map<String, Object> entity) {
+        this.entity = entity;
+    }
+
+    @Override
+    public List<TypeFichierDataColumn> columns() throws Exception {
+        return entity
+                .entrySet()
+                .stream()
+                .filter(v -> !(v.getValue() instanceof Map))
+                .map(e -> new DefaultTypeFichierDataColumn(e.getKey(), e.getValue()))
+                .sorted((c1, c2) -> c1.column().compareTo(c2.column())) //On se rassure de classer le résultat
+                .collect(Collectors.toList());
+    }
+
+    @Override
+    public List<JsonTypeFichierDataRow> children() {
+        throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/DefaultTypeFichierDataColumn.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/DefaultTypeFichierDataColumn.java
new file mode 100644
index 0000000..52bdfea
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/DefaultTypeFichierDataColumn.java
@@ -0,0 +1,29 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierDataColumn;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class DefaultTypeFichierDataColumn implements TypeFichierDataColumn {
+
+    private final String column;
+    private final Object value;
+
+    public DefaultTypeFichierDataColumn(String column, Object value) {
+        this.column = column;
+        this.value = value;
+    }
+
+    @Override
+    public String column() {
+        return column;
+    }
+
+    @Override
+    public Object value() throws Exception {
+        return value;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/DefaultTypeFichierDataRow.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/DefaultTypeFichierDataRow.java
new file mode 100644
index 0000000..8e7d571
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/DefaultTypeFichierDataRow.java
@@ -0,0 +1,31 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierDataColumn;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierDataRow;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class DefaultTypeFichierDataRow implements TypeFichierDataRow {
+
+    private final Map<String, Object> entity;
+
+    public DefaultTypeFichierDataRow(Map<String, Object> entity) {
+        this.entity = entity;
+    }
+
+    @Override
+    public List<TypeFichierDataColumn> columns() {
+        return entity
+                .entrySet()
+                .stream()
+                .map(e -> new DefaultTypeFichierDataColumn(e.getKey(), e.getValue()))
+                .sorted((c1, c2) -> c1.column().compareTo(c2.column())) //On se rassure de classer le résultat
+                .collect(Collectors.toList());
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/FdxParsedData.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/FdxParsedData.java
new file mode 100644
index 0000000..0e4604a
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/FdxParsedData.java
@@ -0,0 +1,32 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import com.megatim.fdxcommons.tools.database.exceptions.BadDataValueException;
+import com.megatim.fdxcommons.tools.database.exceptions.ColumnNotFoundException;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import com.megatim.fdxcommons.tools.utils.FdxParsedDataAction;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ForkJoinPool;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class FdxParsedData {
+
+    private final List<LinkedHashMap<String, Object>> sourceData;
+    private final TableDefinition tableDefinition;
+
+    public FdxParsedData(List<LinkedHashMap<String, Object>> sourceData, TableDefinition tableDefinition) {
+        this.sourceData = sourceData;
+        this.tableDefinition = tableDefinition;
+    }
+
+    public List<Map<String, Object>> data() throws BadDataValueException, LocalDateTimeValueParseError, ColumnNotFoundException {
+        ForkJoinPool pool = new ForkJoinPool();
+        return pool.invoke(new FdxParsedDataAction(sourceData, tableDefinition));
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/FdxParsedDataRow.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/FdxParsedDataRow.java
new file mode 100644
index 0000000..4462e33
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/FdxParsedDataRow.java
@@ -0,0 +1,123 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import com.megatim.fdxcommons.tools.database.exceptions.BadDataValueException;
+import com.megatim.fdxcommons.tools.database.exceptions.ColumnNotFoundException;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import java.math.BigDecimal;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.stream.Collectors;
+import org.apache.commons.validator.GenericValidator;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class FdxParsedDataRow {
+
+    private final Map<String, Object> data;
+    private final Map<String, ColumnDefinition> columnNameToColumnDefinition;
+    private final TableDefinition tableDefinition;
+    private final Map<String, Object> row = new LinkedHashMap<>();
+
+    public FdxParsedDataRow(Map<String, Object> data, TableDefinition tableDefinition) {
+        this.data = data;
+        this.tableDefinition = tableDefinition;
+        this.columnNameToColumnDefinition
+                = tableDefinition.getColumnDefinitions()
+                        .stream()
+                        .collect(Collectors.toMap(c -> c.getName().trim().toLowerCase(), c -> c));
+    }
+
+    public Map<String, Object> dataRow() throws ColumnNotFoundException, BadDataValueException, LocalDateTimeValueParseError {
+
+        if (row.isEmpty()) {
+
+            for (Map.Entry<String, Object> entry : data.entrySet()) {
+
+                String key = entry.getKey();
+                Object value = entry.getValue();
+
+                ColumnDefinition columnDefinition = columnNameToColumnDefinition.get(key.trim().toLowerCase());
+                if (columnDefinition == null) {
+                    throw new ColumnNotFoundException("La colonne " + key + " n'est pas présente pour ce fichier");
+                }
+                row.put(key.trim(), parse(columnDefinition, value));
+            }
+        }
+
+        return row;
+    }
+
+    private Object parse(ColumnDefinition columnDefinition, Object value) throws BadDataValueException, LocalDateTimeValueParseError {
+
+        String columnType = columnDefinition.getTypeDonnee();
+
+        if (columnType.equals(TypeDonnee.ALPHANUMERIQUE.toString()) && (value == null
+                || (value instanceof String && lengthLowerOrEquals(((String) value).trim(), columnDefinition.getTaille())))) {
+
+            return value != null ? value.toString().trim() : value;
+
+        } else if (columnType.equals(TypeDonnee.NUMERIQUE.toString())) {
+
+            if (value == null || value.toString().trim().isEmpty()) {
+                return null;
+            }
+
+            String stringValue = value.toString().trim()
+                    .replaceAll("\\s+", "")
+                    .replaceAll("\\u00A0", "")//nbsp
+                    .replaceAll("&nbsp;", "");
+            if (lengthLowerOrEquals(stringValue, columnDefinition.getTaille()) && GenericValidator.isLong(stringValue)) {
+                return Long.valueOf(stringValue);
+            }
+
+        } else if (columnType.equals(TypeDonnee.DECIMAL.toString())) {
+
+            if (value == null || value.toString().trim().isEmpty()) {
+                return null;
+            }
+            String stringValue = value
+                    .toString()
+                    .trim()
+                    .replaceAll("\\s+", "")
+                    .replaceAll("\\u00A0", "")//nbsp
+                    .replaceAll("&nbsp;", "");
+
+            if (lengthLowerOrEquals(stringValue, columnDefinition.getTaille() + columnDefinition.getTaillePartieDecimale() + 1)) {
+                try {
+                    return new BigDecimal(stringValue);
+                } catch (Exception ex) {
+                }
+            }
+
+        } else if (columnType.equals(TypeDonnee.DATE.toString())) {
+
+            if (value == null || value.toString().trim().isEmpty()) {
+                return null;
+            }
+            String stringValue = value.toString().trim()
+                    .replaceAll("\\s+", "")
+                    .replaceAll("\\u00A0", "")//nbsp
+                    .replaceAll("&nbsp;", "");
+
+            if (lengthEquals(stringValue, columnDefinition.getTaille()) && GenericValidator.isDate(stringValue, columnDefinition.getFormatDate(), true)) {
+                return new InsertionLocalDateTimeValue(columnDefinition.getFormatDate(), value).value();
+            }
+        }
+
+        throw new BadDataValueException("La valeur " + value + " ne correspond pas au format attendu pour la colonne " + columnDefinition.getName());
+    }
+
+    private boolean lengthEquals(String value, int columnMaxLength) {
+        return value.trim().length() == columnMaxLength;
+    }
+
+    private boolean lengthLowerOrEquals(String value, int columnMaxLength) {
+        return value.trim().length() <= columnMaxLength;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/FdxTableDefinition.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/FdxTableDefinition.java
new file mode 100644
index 0000000..949d0e4
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/FdxTableDefinition.java
@@ -0,0 +1,124 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import com.megatim.fdxcommons.model.integration.enums.FileExtension;
+import com.megatim.fdxcommons.model.referentiel.natureproduction.NatureProduction;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class FdxTableDefinition {
+
+    private final String referentielVersion;
+    private final String codeTypeFichier;
+    private final Connection connection;
+    private TableDefinition tableDefinition;
+    private final List<Boolean> cachedNatureProduction = new ArrayList<>(1);
+
+    public FdxTableDefinition(String referentielVersion, String codeTypeFichier, Connection connection) {
+        this.referentielVersion = referentielVersion;
+        this.codeTypeFichier = codeTypeFichier;
+        this.connection = connection;
+    }
+
+    public TableDefinition tableDefinition() throws SQLException, NamingException {
+        if (tableDefinition == null) {
+            tableDefinition = tableDefinition(columnDefinitions());
+        }
+        return tableDefinition;
+    }
+
+    public boolean isReferentiel() throws NamingException, SQLException {
+
+        if (cachedNatureProduction.isEmpty()) { 
+
+            String query = "SELECT natureproduction "
+                    + "FROM natureproductionfichier "
+                    + "WHERE typefichier_code = ? AND referentiel_version = ?";
+
+            try ( PreparedStatement statement = connection.prepareStatement(query)) {
+
+                statement.setString(1, codeTypeFichier);
+                statement.setString(2, referentielVersion);
+
+                try ( ResultSet resultSet = statement.executeQuery()) {
+                    if (resultSet.next()) {
+                        cachedNatureProduction.add(resultSet.getString("natureproduction").equals(NatureProduction.REFERENTIELLE.getValue()));
+                    } else {
+                        cachedNatureProduction.add(Boolean.TRUE);
+                    }
+                }
+            }
+
+        }
+
+        return cachedNatureProduction.get(0);
+    }
+
+    private List<ColumnDefinition> columnDefinitions() throws NamingException, SQLException {
+        List<ColumnDefinition> columnDefinitions = new ArrayList<>();
+
+        String query = "SELECT name, formatdate, position, taille, taillepartiedecimale, typedonnee "
+                + "FROM columndefinition "
+                + "WHERE codetypefichier = ? AND referentielversion = ?";
+
+        try ( PreparedStatement statement = connection.prepareStatement(query)) {
+
+            statement.setString(1, codeTypeFichier);
+            statement.setString(2, referentielVersion);
+
+            try ( ResultSet resultSet = statement.executeQuery()) {
+
+                while (resultSet.next()) {
+
+                    String name = resultSet.getString("name");
+                    String typeDonnee = resultSet.getString("typedonnee");
+                    String formatDate = resultSet.getString("formatdate");
+                    int position = resultSet.getInt("position");
+                    int taille = resultSet.getInt("taille");
+                    int taillePartieDecimale = resultSet.getInt("taillepartiedecimale");
+
+                    columnDefinitions.add(new ColumnDefinition(codeTypeFichier, referentielVersion, name, typeDonnee, taille, taillePartieDecimale, formatDate, position));
+                }
+            }
+        }
+        Collections.sort(columnDefinitions, (ColumnDefinition c1, ColumnDefinition c2) -> Integer.valueOf(c1.getPosition()).compareTo(c2.getPosition()));
+        return columnDefinitions;
+    }
+
+    private TableDefinition tableDefinition(List<ColumnDefinition> colDefs) throws SQLException {
+        String query = "SELECT columndelimiter, linedelimiter, extension, headerpresent"
+                + " FROM tableDefinition"
+                + " WHERE codetypefichier = ? AND referentielversion = ?";
+
+        try ( PreparedStatement statement = connection.prepareStatement(query)) {
+
+            statement.setString(1, codeTypeFichier);
+            statement.setString(2, referentielVersion);
+
+            try ( ResultSet resultSet = statement.executeQuery()) {
+
+                if (resultSet.next()) {
+                    String columndelimiter = resultSet.getString("columndelimiter");
+                    String linedelimiter = resultSet.getString("linedelimiter");
+                    String extension = resultSet.getString("extension");
+                    Boolean headerpresent = resultSet.getBoolean("headerpresent");
+
+                    return new TableDefinition(referentielVersion, codeTypeFichier, headerpresent, 
+                            columndelimiter, linedelimiter, FileExtension.fromValeur(extension), colDefs);
+                }
+            }
+        }
+        return new TableDefinition(referentielVersion, codeTypeFichier, null, null, null, null, colDefs);
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/InsertionLocalDateTimeValue.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/InsertionLocalDateTimeValue.java
new file mode 100644
index 0000000..a6b4c11
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/InsertionLocalDateTimeValue.java
@@ -0,0 +1,88 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeParseException;
+
+/**
+ *
+ * @author ASUS
+ */
+public class InsertionLocalDateTimeValue {
+
+    private final String format;
+    private final Object value;
+
+    public InsertionLocalDateTimeValue(String format, Object value) {
+        this.format = format;
+        this.value = value;
+    }
+
+    public LocalDateTime value() throws LocalDateTimeValueParseError {
+        final String stringValue = value.toString().trim();
+
+        try {
+
+            if (format.length() == 4 && format.equals("yyyy") && stringValue.matches("\\d{4}")) {
+                return LocalDateTime.of(Integer.parseInt(stringValue), 1, 1, 0, 0, 0);
+
+            } else if ((format.length() == 6 && stringValue.length() == 6) || (format.length() == 7) && stringValue.length() == 7) {
+
+                int monthIndex = index(format, "MM");
+                int yearIndex = index(format, "yyyy");
+                
+                return date(yearIndex, monthIndex, stringValue);
+                
+            } else if ((format.length() == 8 && stringValue.length() == 8)
+                    || (format.length() == 10 && stringValue.length() == 10)) {
+
+                int dayIndex = index(format, "dd");
+                int monthIndex = index(format, "MM");
+                int yearIndex = index(format, "yyyy");
+
+                return date(yearIndex, monthIndex, dayIndex, stringValue);
+            }
+
+        } catch (DateTimeParseException e) {
+            throw new LocalDateTimeValueParseError("Impossible de parser la valeur " + value + " au format " + format);
+        }
+
+        throw new LocalDateTimeValueParseError("Impossible de parser la valeur " + value + " au format " + format);
+    }
+
+    private int index(String format, String subSequence) {
+        return format.indexOf(subSequence);
+    }
+    private LocalDateTime date(int yearIndex, int monthIdex, int dayIndex, String stringValue) throws LocalDateTimeValueParseError {
+
+        if (yearIndex >= 0 && monthIdex >= 0 && dayIndex >= 0) {
+            int annee = Integer.parseInt(stringValue.substring(yearIndex, yearIndex + 4));
+            int mois = Integer.parseInt(stringValue.substring(monthIdex, monthIdex + 2));
+            int jour = Integer.parseInt(stringValue.substring(dayIndex, dayIndex + 2));
+
+            if (mois >= 1 && mois <= 12 && jour >= 1 && jour <= 31) {
+                if ((mois == 1 || mois == 3 || mois == 5 || mois == 7 || mois == 8 || mois == 10 || mois == 12) && jour <= 31//Les mois ayant 31 jours
+                        || ((mois == 4 || mois == 6 || mois == 9 || mois == 11) && jour <= 30)//les ayant 30 jours
+                        || (mois == 2 && (annee % 4 == 0 && jour <= 29 || jour <= 28))) { //Le mois de février
+
+                    return LocalDateTime.of(annee, mois, jour, 0, 0, 0, 0);
+                }
+            }
+        }
+        throw new LocalDateTimeValueParseError("Impossible de parser la valeur " + stringValue + " au format " + format);
+    }
+
+    private LocalDateTime date(int yearIndex, int monthIdex, String stringValue) throws LocalDateTimeValueParseError {
+
+        if (yearIndex >= 0 && monthIdex >= 0) {
+            int annee = Integer.parseInt(stringValue.substring(yearIndex, yearIndex + 4));
+            int mois = Integer.parseInt(stringValue.substring(monthIdex, monthIdex + 2));
+            int jour = 1;
+
+            if (mois >= 1 && mois <= 12) {
+                return LocalDateTime.of(annee, mois, jour, 0, 0, 0, 0);
+            }
+        }
+        throw new LocalDateTimeValueParseError("Impossible de parser la valeur " + stringValue + " au format " + format);
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonApiTypeFichierInsertData.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonApiTypeFichierInsertData.java
new file mode 100644
index 0000000..f4fa5e7
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonApiTypeFichierInsertData.java
@@ -0,0 +1,127 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.tools.database.contrat.JsonTypeFichierInsertMetaData;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierDataRow;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonApiTypeFichierInsertData implements JsonTypeFichierInsertMetaData {
+
+    private final String tableName;
+    private final Map<String, Object> entity;
+
+    public JsonApiTypeFichierInsertData(String tableName, Map<String, Object> entity) {
+        this.tableName = tableName;
+        this.entity = entity;
+    }
+
+    @Override
+    public String tableName() {
+        return tableName;
+    }
+
+    /**
+     * Dans cette méthode on ne s'intéresse qu'aux champs de type primitif
+     *
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public TypeFichierDataRow row() throws Exception {
+        return primitiveValues(entity);
+    }
+
+    @Override
+    public List<String> columnNames() throws Exception {
+        return entity.entrySet()
+                .stream()
+                .filter(p -> !(p.getValue() instanceof Map) && !(p.getValue() instanceof List))
+                .map(e -> e.getKey())
+                .sorted((e1, e2) -> e1.compareTo(e2)) //On se rassure de classer le résultat
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * Dans cette méthode on ne s'intéresse qu'aux champs de type Map ou List
+     *
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<JsonTypeFichierInsertMetaData> children() throws Exception {
+        Map<String, Object> mapOfObjectElts = new HashMap<>();
+
+        for (Map.Entry<String, Object> e : entity.entrySet()) {
+            if ((e.getValue() instanceof Map) || (e.getValue() instanceof List)) {
+                mapOfObjectElts.put(e.getKey(), e.getValue());
+            }
+        }
+        return children(mapOfObjectElts);
+    }
+
+    private TypeFichierDataRow primitiveValues(Map<String, Object> entity) {
+        Map<String, Object> mapOfPrimitiveElts = new HashMap<>();
+
+        for (Map.Entry<String, Object> e : entity.entrySet()) {
+            if (!(e.getValue() instanceof Map) && !(e.getValue() instanceof List)) {
+                mapOfPrimitiveElts.put(e.getKey(), e.getValue());
+            }
+        }
+        if (!mapOfPrimitiveElts.isEmpty()) {
+            return new DefaultTypeFichierDataRow(mapOfPrimitiveElts);
+        }
+        return null;
+    }
+
+    private List<JsonTypeFichierInsertMetaData> children(Map<String, Object> mapOfObjectElts) {
+        List<JsonTypeFichierInsertMetaData> children = new ArrayList<>();
+
+        for (Map.Entry<String, Object> entry : mapOfObjectElts.entrySet()) {
+
+            if (entry.getValue() instanceof List) {
+                children.addAll(listValues(entry.getKey(), entry.getValue()));
+            } else if (entry.getValue() instanceof Map) {
+                JsonTypeFichierInsertMetaData metaData = new JsonApiTypeFichierInsertData(tableName + "_" + entry.getKey().toLowerCase(), (Map<String, Object>) entry.getValue());
+                children.add(metaData);
+            }
+        }
+        return children;
+    }
+
+    private List<JsonTypeFichierInsertMetaData> listValues(String key, Object value) {
+        List<JsonTypeFichierInsertMetaData> children = new ArrayList<>();
+        List valueList = (List) value;
+
+        if (!valueList.isEmpty()) {
+            Object obj = valueList.get(0);
+
+            //Liste d'objets
+            if (obj instanceof Map) {
+                for (Object o : valueList) {
+                    JsonTypeFichierInsertMetaData metaData = new JsonApiTypeFichierInsertData(tableName + "_" + key.toLowerCase(), (Map<String, Object>) o);
+                    children.add(metaData);
+                }
+            } else {
+                //Liste de primitifs
+                for (Object o : valueList) {
+                    Map<String, Object> map = new HashMap<>();
+                    map.put(key.toLowerCase(), o);
+                    JsonTypeFichierInsertMetaData metaData = new JsonApiTypeFichierInsertData(tableName + "_" + key.toLowerCase(), map);
+                    children.add(metaData);
+                }
+            }
+        }
+        return children;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonDataRowToUpdate.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonDataRowToUpdate.java
new file mode 100644
index 0000000..02043e4
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonDataRowToUpdate.java
@@ -0,0 +1,153 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.tools.database.exceptions.BadDataValueException;
+import com.megatim.fdxcommons.tools.database.exceptions.ColumnNotFoundException;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.commons.validator.GenericValidator;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonDataRowToUpdate {
+
+    private final Map<String, Object> dataToSet;
+    private final String parentTableName;
+    private final List<ColumnDefinition> columnsDefinition;
+
+    public JsonDataRowToUpdate(Map<String, Object> data, String parentTableName, List<ColumnDefinition> columnsDefinition) {
+        this.dataToSet = data;
+        this.parentTableName = parentTableName;
+        this.columnsDefinition = columnsDefinition;
+    }
+
+    public Map<String, Map<String, Object>> dataRow() throws ColumnNotFoundException, SQLException, BadDataValueException, LocalDateTimeValueParseError {
+        Map<String, Map<String, Object>> tableToDataRow = new HashMap<>();
+
+        for (Map.Entry<String, Object> entry : dataToSet.entrySet()) {
+
+            if (nomColonneIsValid(entry.getKey())) {
+                String tableName = tableName(parentTableName, entry.getKey());
+                Map<String, Object> dataToSetToTable = tableToDataRow.get(tableName);
+
+                if (dataToSetToTable == null) {
+                    dataToSetToTable = new HashMap<>();
+                }
+                ColumnDefinition columnDefinition = columnsDefinition.stream().filter(c -> c.getName().equalsIgnoreCase(entry.getKey())).findFirst().get();
+
+                Object data = parse(columnDefinition, entry.getValue());
+                dataToSetToTable.put(cleanFieldName(entry.getKey()), data);
+                tableToDataRow.put(tableName, dataToSetToTable);
+            } else {
+                throw new ColumnNotFoundException("La colonne " + entry.getKey() + " n'est pas présente pour cette strcuture JSON");
+            }
+        }
+        return tableToDataRow;
+    }
+
+    private String cleanFieldName(String fieldName) {
+        int index = fieldName.lastIndexOf(".");
+        if (index > 0) {
+            String cleanFieldName = fieldName.substring(index + 1);
+            return cleanFieldName;
+        } else {
+            return fieldName;
+        }
+
+    }
+
+    private String tableName(String rootTable, String fieldName) {
+        int index = fieldName.lastIndexOf(".");
+        ColumnDefinition columnDefinition = columnsDefinition.stream().filter(c -> c.getName().equalsIgnoreCase(fieldName)).findFirst().get();
+
+        if (columnDefinition.isCollection()) {
+            if (index <= 0) {
+                return (rootTable + "_" + fieldName).toLowerCase();
+            } else {
+                String name = fieldName.substring(index);
+                return (rootTable + "_" + name).toLowerCase();
+            }
+        } else {
+            if (index <= 0) {
+                return rootTable;
+            } else {
+                String name = fieldName.subSequence(0, index).toString().replaceAll("\\.", "_");
+                return (rootTable + "_" + name).toLowerCase();
+            }
+        }
+
+    }
+
+    private boolean nomColonneIsValid(String nomColonne) {
+        return nomColonne != null
+                && columnsDefinition
+                        .stream()
+                        .filter(c -> c.getName().equalsIgnoreCase(nomColonne))
+                        .findFirst()
+                        .isPresent();
+    }
+
+    private Object parse(ColumnDefinition columnDefinition, Object value) throws BadDataValueException, LocalDateTimeValueParseError {
+
+        String typeDonnee = columnDefinition.getTypeDonnee();
+
+        if (typeDonnee.equals(TypeDonnee.ALPHANUMERIQUE.toString())
+                && (value == null || (value instanceof String && lengthLowerOrEquals((String) value, columnDefinition.getTaille())))) {
+
+            return value != null ? value.toString().trim() : value;
+
+        } else if (typeDonnee.equals(TypeDonnee.NUMERIQUE.toString())) {
+
+            if (value == null) {
+                return 0L;
+            }
+
+            String stringValue = value.toString();
+            if (lengthLowerOrEquals(stringValue, columnDefinition.getTaille()) && GenericValidator.isLong(stringValue)) {
+                return Long.valueOf(stringValue);
+            }
+
+        } else if (typeDonnee.equals(TypeDonnee.DECIMAL.toString())) {
+
+            if (value == null) {
+                return 0.0;
+            }
+
+            String stringValue = value.toString();
+            if (lengthLowerOrEquals(stringValue, columnDefinition.getTaille()) && GenericValidator.isDouble(stringValue)) {
+                return Double.valueOf(stringValue);
+            }
+
+        } else if (typeDonnee.equals(TypeDonnee.DATE.toString())) {
+
+            if (value == null) {
+                return null;
+            }
+            String stringValue = value.toString();
+
+            if (lengthEquals(stringValue, columnDefinition.getTaille()) && GenericValidator.isDate(stringValue, columnDefinition.getFormatDate(), true)) {
+                return new InsertionLocalDateTimeValue(columnDefinition.getFormatDate(), value).value();
+            }
+        }
+
+        throw new BadDataValueException("La valeur " + value + " ne correspond pas au format attendu pour la colonne " + columnDefinition.getName());
+    }
+
+    private boolean lengthEquals(String value, int columnMaxLength) {
+        return value.trim().length() == columnMaxLength;
+    }
+
+    private boolean lengthLowerOrEquals(String value, int columnMaxLength) {
+        return value.trim().length() <= columnMaxLength;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonFdxParsedData.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonFdxParsedData.java
new file mode 100644
index 0000000..e83e461
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonFdxParsedData.java
@@ -0,0 +1,36 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.model.integration.json.JsonStructure;
+import com.megatim.fdxcommons.tools.database.exceptions.BadDataValueException;
+import com.megatim.fdxcommons.tools.database.exceptions.ColumnNotFoundException;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import com.megatim.fdxcommons.tools.utils.JsonFdxParsedDataAction;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ForkJoinPool;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonFdxParsedData {
+    
+    private final List<LinkedHashMap<String, Object>> sourceData;
+    private final JsonStructure jsonStructure;
+
+    public JsonFdxParsedData(List<LinkedHashMap<String, Object>> sourceData, JsonStructure jsonStructure) {
+        this.sourceData = sourceData;
+        this.jsonStructure = jsonStructure;
+    }
+
+    public List<Map<String, Object>> data() throws BadDataValueException, LocalDateTimeValueParseError, ColumnNotFoundException {
+        ForkJoinPool pool = new ForkJoinPool();
+        return pool.invoke(new JsonFdxParsedDataAction(sourceData, jsonStructure));
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonFdxParsedDataIterator.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonFdxParsedDataIterator.java
new file mode 100644
index 0000000..9bd1fc2
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonFdxParsedDataIterator.java
@@ -0,0 +1,36 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonFdxParsedDataIterator {
+
+    private final JsonFdxParsedData fdxParsedData;
+    private final String tableName;
+    private List<Map<String, Object>> data = null;
+
+    public JsonFdxParsedDataIterator(String tableName, JsonFdxParsedData fdxParsedData) {
+        this.fdxParsedData = fdxParsedData;
+        this.tableName = tableName;
+    }
+
+    public List<JsonApiTypeFichierInsertData> rows() throws Exception {
+        List<JsonApiTypeFichierInsertData> rows = new ArrayList<>();
+        data = fdxParsedData.data();
+
+        for (Map<String, Object> entity : data) {
+            rows.add(new JsonApiTypeFichierInsertData(tableName, entity));
+        }
+
+        return rows;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonFdxParsedDataRow.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonFdxParsedDataRow.java
new file mode 100644
index 0000000..609d237
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonFdxParsedDataRow.java
@@ -0,0 +1,267 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.integration.json.JsonStructure;
+import com.megatim.fdxcommons.model.pojo.JsonColumnDefinition;
+import com.megatim.fdxcommons.tools.database.exceptions.BadDataValueException;
+import com.megatim.fdxcommons.tools.database.exceptions.ColumnNotFoundException;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import org.apache.commons.validator.GenericValidator;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonFdxParsedDataRow {
+
+    private final Map<String, Object> data;
+    private final Map<String, Object> row = new LinkedHashMap<>();
+    private final Map<String, JsonColumnDefinition> columnNameToColumnDefinition = new HashMap<>();
+
+    public JsonFdxParsedDataRow(Map<String, Object> data, JsonStructure jsonStructure) {
+        this.data = data;
+        columnNameToJsonColumnDefinition(jsonStructure);
+    }
+
+    public Map<String, Object> dataRow() throws ColumnNotFoundException, BadDataValueException, LocalDateTimeValueParseError {
+        Set<String> foundColumns = new HashSet<>();
+
+        if (row.isEmpty()) {
+
+            for (Map.Entry<String, Object> entry : data.entrySet()) {
+
+                String key = entry.getKey();
+                Object value = entry.getValue();
+
+                JsonColumnDefinition jsonColumnDefinition = columnNameToColumnDefinition.get(key.trim().toLowerCase());
+
+                if (jsonColumnDefinition == null) {
+                    throw new ColumnNotFoundException("La colonne " + key + " n'est pas une colonne de ce type de fichier");
+                }
+                foundColumns.add(key.toLowerCase());
+
+                if (value == null) {
+
+                    if (jsonColumnDefinition.isRequired()) {
+                        throw new BadDataValueException("La valeur de la colonne " + jsonColumnDefinition.getName() + " est obligatoire");
+                    }
+                    return row;
+                }
+                if (jsonColumnDefinition.getTypeDonnee().equals(TypeDonnee.OBJET)) {
+                    if (jsonColumnDefinition.isCollection()) {
+                        if (value instanceof List) {
+                            List<Object> objectsList = (List<Object>) value;
+                            List<Object> parsedValues = new ArrayList<>();
+                            int i = 0;
+
+                            for (Object obj : objectsList) {
+                                parsedValues.add(dataRow((Map<String, Object>) obj, jsonColumnDefinition.getColumnNameToColumnDefinition(), jsonColumnDefinition.getName(), i + 1));
+                                i++;
+                            }
+                            row.put(key.trim(), parsedValues);
+                        } else {
+                            throw new BadDataValueException("La valeur de la colonne " + jsonColumnDefinition.getName() + " doit être une liste de données");
+                        }
+                    } else {
+                        row.put(key.trim(), dataRow((Map<String, Object>) value, jsonColumnDefinition.getColumnNameToColumnDefinition(), jsonColumnDefinition.getName(), 0));
+                    }
+                } else {
+                    if (jsonColumnDefinition.isCollection()) {
+                        if (value instanceof List) {
+                            List<Object> objectsList = (List<Object>) value;
+                            List<Object> parsedValues = new ArrayList<>();
+                            int i = 0;
+
+                            for (Object obj : objectsList) {
+                                parsedValues.add(parse(jsonColumnDefinition, obj, "", i + 1));
+                                i++;
+                            }
+                            row.put(key.trim(), parsedValues);
+                        } else {
+                            throw new BadDataValueException("La valeur de la colonne " + jsonColumnDefinition.getName() + " doit être un tableau de données");
+                        }
+                    } else {
+                        row.put(key.trim(), parse(jsonColumnDefinition, value, "", 0));
+                    }
+                }
+            }
+            //Cherche les colonnes obligatoires qui sont absentes
+            stopIfRequiredColumnIsAbsent(foundColumns, columnNameToColumnDefinition, "");
+        }
+        return row;
+    }
+
+    private void columnNameToJsonColumnDefinition(JsonStructure jsonStructure) {
+        for (JsonStructure j : jsonStructure.getFields()) {
+            if (j.getTypeDonnee().equals(TypeDonnee.OBJET)) {
+                JsonColumnDefinition jsonCol = new JsonColumnDefinition(j.getTypeDonnee(), j.getName(), j.getLengthh(), j.getFormatDate(), j.isRequired(), j.isCollection());
+
+                for (JsonStructure field : j.getFields()) {
+                    jsonCol.getColumnNameToColumnDefinition().put(field.getName().toLowerCase(), jsonColumnDefinition(field));
+                }
+                columnNameToColumnDefinition.put(j.getName().toLowerCase(), jsonCol);
+            } else {
+                columnNameToColumnDefinition.put(j.getName().toLowerCase(), new JsonColumnDefinition(j.getTypeDonnee(), j.getName(), j.getLengthh(), j.getFormatDate(), j.isRequired(), j.isCollection()));
+            }
+        }
+    }
+
+    private JsonColumnDefinition jsonColumnDefinition(JsonStructure jsonStruct) {
+        JsonColumnDefinition jsonCol = new JsonColumnDefinition(jsonStruct.getTypeDonnee(), jsonStruct.getName(), jsonStruct.getLengthh(), jsonStruct.getFormatDate(), jsonStruct.isRequired(), jsonStruct.isCollection());
+
+        if (jsonStruct.getTypeDonnee().equals(TypeDonnee.OBJET)) {
+            for (JsonStructure j : jsonStruct.getFields()) {
+                jsonCol.getColumnNameToColumnDefinition().put(j.getName().toLowerCase(), jsonColumnDefinition(j));
+            }
+        }
+        return jsonCol;
+    }
+
+    private Map<String, Object> dataRow(Map<String, Object> subData, Map<String, JsonColumnDefinition> subColumnNameToColumnDefinition, String parentName, int rangElement) throws ColumnNotFoundException, BadDataValueException, LocalDateTimeValueParseError {
+        Map<String, Object> subRow = new LinkedHashMap<>();
+        Set<String> foundColumns = new HashSet<>();
+
+        for (Map.Entry<String, Object> entry : subData.entrySet()) {
+
+            String key = entry.getKey();
+            Object value = entry.getValue();
+
+            JsonColumnDefinition jsonColumnDefinition = subColumnNameToColumnDefinition.get(key.trim().toLowerCase());
+
+            if (jsonColumnDefinition == null) {
+                throw new ColumnNotFoundException("La colonne " + key + " n'est pas présente pour ce fichier");
+            }
+            foundColumns.add(key.toLowerCase());
+
+            if (value == null) {
+
+                if (jsonColumnDefinition.isRequired()) {
+                    throw new BadDataValueException("La valeur de la colonne " + jsonColumnDefinition.getName() + " est obligatoire");
+                }
+                return subRow;
+            }
+
+            if (jsonColumnDefinition.getTypeDonnee().equals(TypeDonnee.OBJET)) {
+                parentName += "." + jsonColumnDefinition.getName();
+                
+                if (jsonColumnDefinition.isCollection()) {
+                    if (value instanceof List) {
+                        List<Object> objectsList = (List<Object>) value;
+                        List<Object> parsedValues = new ArrayList<>();
+                        int i = 0;
+
+                        for (Object obj : objectsList) {
+                            parsedValues.add(dataRow((Map<String, Object>) obj, jsonColumnDefinition.getColumnNameToColumnDefinition(), parentName, rangElement));
+                            i++;
+                        }
+                        subRow.put(key.trim(), parsedValues);
+                    } else {
+                        throw new BadDataValueException("La valeur de la colonne " + jsonColumnDefinition.getName() + " doit être une liste de données");
+                    }
+                } else {
+                    subRow.put(key.trim(), dataRow((Map<String, Object>) value, jsonColumnDefinition.getColumnNameToColumnDefinition(), parentName, rangElement));
+                }
+            } else {
+                if (jsonColumnDefinition.isCollection()) {
+                    if (value instanceof List) {
+                        List<Object> objectsList = (List<Object>) value;
+                        List<Object> parsedValues = new ArrayList<>();
+                        int i = 0;
+
+                        for (Object obj : objectsList) {
+                            parsedValues.add(parse(jsonColumnDefinition, obj, "", i + 1));
+                            i++;
+                        }
+                        subRow.put(key.trim(), parsedValues);
+                    } else {
+                        throw new BadDataValueException("La valeur de la colonne " + jsonColumnDefinition.getName() + " doit être un tableau de données");
+                    }
+                } else {
+                    subRow.put(key.trim(), parse(jsonColumnDefinition, value, parentName, rangElement));
+                }
+            }
+        }
+        //Cherche les colonnes obligatoires qui sont absentes
+        stopIfRequiredColumnIsAbsent(foundColumns, subColumnNameToColumnDefinition, parentName);
+
+        return subRow;
+    }
+
+    private Object parse(JsonColumnDefinition columnDefinition, Object value, String parentName, int rangElement) throws BadDataValueException, LocalDateTimeValueParseError {
+
+        TypeDonnee typeDonnee = columnDefinition.getTypeDonnee();
+
+        if (typeDonnee.equals(TypeDonnee.ALPHANUMERIQUE) && (value == null
+                || (value instanceof String && lengthLowerOrEquals((String) value, columnDefinition.getLengthh())))) {
+
+            return value != null ? value.toString().trim() : value;
+
+        } else if (typeDonnee.equals(TypeDonnee.NUMERIQUE)) {
+
+            if (value == null) {
+                return 0L;
+            }
+
+            String stringValue = value.toString();
+            if (lengthLowerOrEquals(stringValue, columnDefinition.getLengthh()) && GenericValidator.isLong(stringValue)) {
+                return Long.valueOf(stringValue);
+            }
+
+        } else if (typeDonnee.equals(TypeDonnee.DECIMAL)) {
+
+            if (value == null) {
+                return 0.0;
+            }
+
+            String stringValue = value.toString();
+            if (lengthLowerOrEquals(stringValue, columnDefinition.getLengthh()) && GenericValidator.isDouble(stringValue)) {
+                return Double.valueOf(stringValue);
+            }
+
+        } else if (typeDonnee.equals(TypeDonnee.DATE)) {
+
+            if (value == null) {
+                return null;
+            }
+            String stringValue = value.toString();
+
+            if (lengthEquals(stringValue, columnDefinition.getLengthh()) && GenericValidator.isDate(stringValue, columnDefinition.getFormatDate(), true)) {
+                return new InsertionLocalDateTimeValue(columnDefinition.getFormatDate(), value).value();
+            }
+        }
+        String rangDescription = rangElement == 0 ? "" : "le " + rangElement + "ème élément de ";
+        String fullQualifiedNameOfColumn = parentName == null || parentName.isEmpty() ? columnDefinition.getName() : parentName + "." + columnDefinition.getName();
+
+        throw new BadDataValueException("La valeur " + value + " ne correspond pas au format attendu pour " + rangDescription + " la colonne " + fullQualifiedNameOfColumn);
+    }
+
+    private boolean lengthEquals(String value, int columnMaxLength) {
+        return value.trim().length() == columnMaxLength;
+    }
+
+    private boolean lengthLowerOrEquals(String value, int columnMaxLength) {
+        return value.trim().length() <= columnMaxLength;
+    }
+
+    private void stopIfRequiredColumnIsAbsent(Set<String> foundColumns, Map<String, JsonColumnDefinition> allColumns, String parentName) throws BadDataValueException {
+
+        for (String columnName : allColumns.keySet()) {
+            String fullQualifiedName = parentName.isEmpty() ? columnName : parentName + "." + columnName;
+
+            if (allColumns.get(columnName).isRequired() && !foundColumns.contains(columnName.toLowerCase())) {
+                throw new BadDataValueException("La valeur de la colonne " + fullQualifiedName + " est obligatoire");
+            }
+        }
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonFdxTableStructure.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonFdxTableStructure.java
new file mode 100644
index 0000000..747426d
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonFdxTableStructure.java
@@ -0,0 +1,75 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.integration.json.JsonStructure;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonFdxTableStructure {
+
+    private final String referentielVersion;
+    private final String codeTypeFichier;
+    private final Connection connection;
+
+    public JsonFdxTableStructure(String referentielVersion, String codeTypeFichier, Connection connection) {
+        this.referentielVersion = referentielVersion;
+        this.codeTypeFichier = codeTypeFichier;
+        this.connection = connection;
+    }
+
+    public JsonStructure jsonStructure() throws NamingException, SQLException {
+        JsonStructure jsonStructure = null;
+        Long jsonStructureId = jsonStructureId();
+
+        if (jsonStructureId != null) {
+            String query = "SELECT * FROM JsonStructure j where j.id = ?";
+
+            try ( PreparedStatement stmt = connection.prepareStatement(query)) {
+                stmt.setLong(1, jsonStructureId);
+                ResultSet resultSet = stmt.executeQuery();
+
+                if (resultSet.next()) {
+                    jsonStructure = new JsonStructure();
+                    jsonStructure.setId(resultSet.getLong("id"));
+                    jsonStructure.setLengthh(resultSet.getInt("lengthh"));
+                    jsonStructure.setTypeDonnee(TypeDonnee.fromValeur(resultSet.getString("typedonnee")));
+                    jsonStructure.setName(resultSet.getString("name"));
+                    jsonStructure.setRequired(resultSet.getBoolean("required"));
+                    jsonStructure.setCollection(resultSet.getBoolean("collection"));
+                    jsonStructure.setFormatDate(resultSet.getString("formatdate"));
+                    
+                }
+            }
+        }
+
+        return jsonStructure;
+    }
+
+    private Long jsonStructureId() throws SQLException {
+        String query = "SELECT json_structure_id FROM typeFichierJson t WHERE t.type_fichier_code = ? AND t.referentiel_version = ?";
+
+        try ( PreparedStatement stmt = connection.prepareStatement(query)) {
+            stmt.setString(1, codeTypeFichier);
+            stmt.setString(2, referentielVersion);
+            ResultSet resultSet = stmt.executeQuery();
+
+            if (resultSet.next()) {
+                return resultSet.getLong(1);
+
+            }
+
+        }
+        return null;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonParsedQueryCriterion.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonParsedQueryCriterion.java
new file mode 100644
index 0000000..1e73b13
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonParsedQueryCriterion.java
@@ -0,0 +1,137 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.tools.database.exceptions.BadQueryCriteriaException;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import com.megatim.fdxcommons.tools.database.tables.FdxTableColumn;
+import com.megatim.fdxcommons.tools.database.tables.JsonFdxTableColumns;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.AppColumnDefinitions;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.FdxApiColumnDefinitions;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.FdxConsultationColumnDefinitions;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonParsedQueryCriterion {
+
+    private final QueryCriterion queryCriterion;
+    private final JsonFdxTableColumns fdxTableColumns;
+    private final List<ColumnDefinition> columnDefinitionsWithFullQualifiedName;
+    private final FdxApiColumnDefinitions apiColumnDefinitions = new FdxApiColumnDefinitions();
+    private final FdxConsultationColumnDefinitions fdxConsColumnDefinitions = new FdxConsultationColumnDefinitions();
+
+    public JsonParsedQueryCriterion(QueryCriterion queryCriterion, JsonFdxTableColumns fdxTableColumns, List<ColumnDefinition> columnDefinitionsWithFullQualifiedName) {
+        this.queryCriterion = queryCriterion;
+        this.fdxTableColumns = fdxTableColumns;
+        this.columnDefinitionsWithFullQualifiedName = columnDefinitionsWithFullQualifiedName;
+    }
+
+    public QueryCriterion parsedCriterion() throws LocalDateTimeValueParseError, BadQueryCriteriaException {
+        return queryCriterion != null
+                ? parsedCriterion(queryCriterion)
+                : null;
+    }
+
+    private QueryCriterion parsedCriterion(QueryCriterion criterion) throws LocalDateTimeValueParseError, BadQueryCriteriaException {
+
+        if (criterion == null) {
+            return null;
+        }
+
+        if (criterion.getSubCriteria() != null && !criterion.getSubCriteria().isEmpty() && criterion.getCriteriaLogicConnector() != null) {
+            List<QueryCriterion> subCriteria = new ArrayList<>();
+
+            for (QueryCriterion qc : criterion.getSubCriteria()) {
+                QueryCriterion parseCriterion = parsedCriterion(qc);
+
+                if (parseCriterion != null) {
+                    subCriteria.add(parseCriterion);
+                }
+            }
+            if (!subCriteria.isEmpty()) {
+                return new QueryCriterion(null,
+                        null,
+                        null,
+                        criterion.getCriteriaLogicConnector(),
+                        subCriteria
+                );
+            }
+
+        } else if ((criterion.getSubCriteria() == null || criterion.getSubCriteria().isEmpty())
+                && nomColonneIsValid(criterion.getNomColonne())
+                && criterion.getOperateur() != null) {
+            Object correctValue = correctValue(criterion.getNomColonne(), criterion.getCriteriaValue(), criterion.getOperateur());
+
+            if (isUnaryOperator(criterion.getOperateur()) || (correctValue != null && !correctValue.toString().isEmpty())) {
+                return new QueryCriterion(criterion.getNomColonne(),
+                        correctValue,
+                        criterion.getOperateur(),
+                        null,
+                        Arrays.asList()
+                );
+            }
+        }
+
+        throw new BadQueryCriteriaException("Critère non valide");
+    }
+
+    private boolean nomColonneIsValid(String nomColonne) {
+        return apiColumnDefinitions.isAppColumnDefinition(nomColonne)
+                || fdxConsColumnDefinitions.isAppColumnDefinition(nomColonne)
+                || nomColonne != null && fdxTableColumns
+                        .columns()
+                        .stream()
+                        .filter(c -> c.getName().equalsIgnoreCase(nomColonne))
+                        .findFirst()
+                        .isPresent();
+    }
+
+    private Object correctValue(String nomColonne, Object value, Operateur operateur) throws LocalDateTimeValueParseError, BadQueryCriteriaException {
+
+        if (value == null) {
+            return null;
+        }
+
+        AppColumnDefinitions appColumnDefinitions = new AppColumnDefinitions();
+
+        for (FdxTableColumn column : fdxTableColumns.columns()) {
+
+            if (column.getName().equalsIgnoreCase(nomColonne)) {
+
+                boolean isDateCreationColumn = appColumnDefinitions.isDateCreationColumn(column.getName());
+
+                String dateFormat = columnDefinitionsWithFullQualifiedName
+                        .stream()
+                        .filter(cD -> cD.getName().equalsIgnoreCase(nomColonne) && cD.getTypeDonnee().equals("DATE"))
+                        .findFirst()
+                        .map(cD -> cD.getFormatDate())
+                        .orElse("");
+
+                QueryCriteriaCorrectValue queryCriteriaCorrectValue = new QueryCriteriaCorrectValue(
+                        column.getType(),
+                        value,
+                        operateur,
+                        dateFormat,
+                        isDateCreationColumn
+                );
+
+                return queryCriteriaCorrectValue.value();
+            }
+        }
+
+        throw new BadQueryCriteriaException("Critères mal formattés");
+    }
+
+    private boolean isUnaryOperator(Operateur operateur) {
+        return operateur.equals(Operateur.IS_NOT_NULL) || operateur.equals(Operateur.IS_NULL);
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonSelectQueryResult.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonSelectQueryResult.java
new file mode 100644
index 0000000..18d609d
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonSelectQueryResult.java
@@ -0,0 +1,41 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonSelectQueryResult {
+
+    private final int lastIndexRead;
+    private final List<Map<String, Object>> rows;
+    private String token;
+
+    public JsonSelectQueryResult(int lastIndexRead, List<Map<String, Object>> rows) {
+        this.lastIndexRead = lastIndexRead;
+        this.rows = rows;
+    }
+
+    public int lastIndexRead() {
+        return lastIndexRead;
+    }
+
+    public List<Map<String, Object>> rows() {
+        return rows;
+    }
+
+    public String getToken() {
+        return token;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ParsedQueryCriterion.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ParsedQueryCriterion.java
new file mode 100644
index 0000000..450d5b2
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ParsedQueryCriterion.java
@@ -0,0 +1,132 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import com.megatim.fdxcommons.tools.database.exceptions.BadQueryCriteriaException;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.AppColumnDefinitions;
+import com.megatim.fdxcommons.tools.database.tables.FdxTableColumn;
+import com.megatim.fdxcommons.tools.database.tables.FdxTableColumns;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class ParsedQueryCriterion {
+
+    private final QueryCriterion queryCriterion;
+    private final FdxTableColumns fdxTableColumns;
+    private final List<ColumnDefinition> columnDefinitions;
+
+    public ParsedQueryCriterion(QueryCriterion queryCriterion, FdxTableColumns fdxTableColumns, List<ColumnDefinition> columnDefinitions) {
+        this.queryCriterion = queryCriterion;
+        this.fdxTableColumns = fdxTableColumns;
+        this.columnDefinitions = columnDefinitions;
+    }
+
+    public QueryCriterion parsedCriterion() throws SQLException, NamingException, LocalDateTimeValueParseError, BadQueryCriteriaException {
+        return queryCriterion != null
+                ? parsedCriterion(queryCriterion)
+                : null;
+    }
+
+    private QueryCriterion parsedCriterion(QueryCriterion criterion) throws SQLException, NamingException, LocalDateTimeValueParseError, BadQueryCriteriaException {
+
+        if (criterion == null) {
+            return null;
+        }
+
+        if (criterion.getSubCriteria() != null && !criterion.getSubCriteria().isEmpty() && criterion.getCriteriaLogicConnector() != null) {
+            List<QueryCriterion> subCriteria = new ArrayList<>();
+
+            for (QueryCriterion qc : criterion.getSubCriteria()) {
+                QueryCriterion parseCriterion = parsedCriterion(qc);
+
+                if (parseCriterion != null) {
+                    subCriteria.add(parseCriterion);
+                }
+            }
+            if (!subCriteria.isEmpty()) {
+                return new QueryCriterion(null,
+                        null,
+                        null,
+                        criterion.getCriteriaLogicConnector(),
+                        subCriteria
+                );
+            }
+
+        } else if ((criterion.getSubCriteria() == null || criterion.getSubCriteria().isEmpty())
+                && nomColonneIsValid(criterion.getNomColonne())
+                && criterion.getOperateur() != null) {
+            Object correctValue = correctValue(criterion.getNomColonne(), criterion.getCriteriaValue(), criterion.getOperateur());
+
+            if (isUnaryOperator(criterion.getOperateur()) || (correctValue != null && !correctValue.toString().isEmpty())) {
+                return new QueryCriterion(criterion.getNomColonne(),
+                        correctValue,
+                        criterion.getOperateur(),
+                        null,
+                        Arrays.asList()
+                );
+            }
+        }
+
+        throw new BadQueryCriteriaException("Critère non valide");
+    }
+
+    private boolean nomColonneIsValid(String nomColonne) throws SQLException, NamingException {
+        return nomColonne != null && fdxTableColumns
+                .columns()
+                .stream()
+                .filter(c -> c.getName().equalsIgnoreCase(nomColonne))
+                .findFirst()
+                .isPresent();
+    }
+
+    private Object correctValue(String nomColonne, Object value, Operateur operateur) throws SQLException, NamingException, LocalDateTimeValueParseError, BadQueryCriteriaException {
+
+        if (value == null) {
+            return null;
+        }
+
+        AppColumnDefinitions appColumnDefinitions = new AppColumnDefinitions();
+
+        for (FdxTableColumn column : fdxTableColumns.columns()) {
+
+            if (column.getName().equalsIgnoreCase(nomColonne)) {
+
+                boolean isDateCreationColumn = appColumnDefinitions.isDateCreationColumn(column.getName());
+
+                String dateFormat = columnDefinitions
+                        .stream()
+                        .filter(cD -> cD.getName().equalsIgnoreCase(nomColonne) && cD.getTypeDonnee().equals("DATE"))
+                        .findFirst()
+                        .map(cD -> cD.getFormatDate())
+                        .orElse("");
+
+                QueryCriteriaCorrectValue queryCriteriaCorrectValue = new QueryCriteriaCorrectValue(
+                        column.getType(),
+                        value,
+                        operateur,
+                        dateFormat,
+                        isDateCreationColumn
+                );
+
+                return queryCriteriaCorrectValue.value();
+
+            }
+
+        }
+
+        throw new BadQueryCriteriaException("Critères mal formattés");
+    }
+
+    private boolean isUnaryOperator(Operateur operateur) {
+        return operateur.equals(Operateur.IS_NOT_NULL) || operateur.equals(Operateur.IS_NULL);
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/QueryCriteriaCorrectValue.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/QueryCriteriaCorrectValue.java
new file mode 100644
index 0000000..85137a3
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/QueryCriteriaCorrectValue.java
@@ -0,0 +1,227 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.pojo.BetweenOperatorValues;
+import com.megatim.fdxcommons.tools.database.exceptions.BadQueryCriteriaException;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DateCreationColumnDefinition;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class QueryCriteriaCorrectValue {
+
+    private final int dataType;
+    private final Object criteriaValue;
+    private final Operateur operateur;
+    private final String dateFormat;
+    private final boolean isDateActionColumn;
+
+    public QueryCriteriaCorrectValue(int dataType, Object criteriaValue, Operateur operateur, String dateFormat, boolean isDateActionColumn) {
+        this.dataType = dataType;
+        this.criteriaValue = criteriaValue;
+        this.operateur = operateur;
+        this.dateFormat = dateFormat;
+        this.isDateActionColumn = isDateActionColumn;
+    }
+
+    public Object value() throws LocalDateTimeValueParseError, BadQueryCriteriaException {
+        if (operateurWithBetween()) {
+            Object lowerBound = null;
+            Object upperBound = null;
+
+            if (criteriaValue instanceof BetweenOperatorValues) {
+                BetweenOperatorValues values = (BetweenOperatorValues) criteriaValue;
+                if (values != null) {
+                    lowerBound = values.getLowerBound();
+                    upperBound = values.getUpperBound();
+                }
+            } else {
+                LinkedHashMap map = (LinkedHashMap) criteriaValue;
+
+                if (map != null) {
+                    lowerBound = map.get("lowerBound");
+                    upperBound = map.get("upperBound");
+                }
+            }
+            if (lowerBound != null && upperBound != null) {
+                if (dataTypeIsInt()) {
+                    return new BetweenOperatorValues(intValue(lowerBound), intValue(upperBound));
+                } else if (dataTypeIsDecimal()) {
+                    return new BetweenOperatorValues(decimalValue(lowerBound), decimalValue(upperBound));
+                } else if (dataTypeIsString()) {
+                    return new BetweenOperatorValues(stringValue(lowerBound), stringValue(upperBound));
+                } else if (dataTypeIsTimeStamp()) {
+                    return new BetweenOperatorValues(dateValue(lowerBound), dateValue(upperBound));
+                }
+            }
+        } else if (operateurWithIn()) {
+            if (criteriaValue instanceof Collection<?>) {
+                Collection<?> collection = (Collection<?>) criteriaValue;
+                return collectionValues(collection);
+            }
+        } else if (operateurWithComparison()) {
+            if (dataTypeIsInt()) {
+                return intValue(criteriaValue);
+            } else if (dataTypeIsDecimal()) {
+                return decimalValue(criteriaValue);
+            } else if (dataTypeIsString()) {
+                return stringValue(criteriaValue);
+            } else if (dataTypeIsTimeStamp()) {
+                return dateValue(criteriaValue);
+            } else if(dataTypeIsBoolean()) {
+                return booleanValue(criteriaValue);
+            }
+        } else if (operateurWithLike()) {
+            if (dataTypeIsString()) {
+                return stringValue(criteriaValue);
+            }
+
+        } else if (operateurWithoutValue()) {
+            return null;
+        }
+
+        throw new BadQueryCriteriaException(
+                "Opérateur inconnu");
+    }
+
+    private boolean operateurWithoutValue() {
+        return this.operateur.equals(Operateur.IS_NOT_NULL)
+                || this.operateur.equals(Operateur.IS_NULL);
+    }
+
+    private boolean operateurWithBetween() {
+        return this.operateur.equals(Operateur.BETWEEN)
+                || this.operateur.equals(Operateur.NOT_BETWEEN);
+    }
+
+    private boolean operateurWithIn() {
+        return this.operateur.equals(Operateur.IN)
+                || this.operateur.equals(Operateur.NOT_IN);
+    }
+
+    private boolean operateurWithComparison() {
+        return this.operateur.equals(Operateur.EQUALS)
+                || this.operateur.equals(Operateur.NOT_EQUALS)
+                || this.operateur.equals(Operateur.GREATER_OR_EQUALS_THAN)
+                || this.operateur.equals(Operateur.GREATER_THAN)
+                || this.operateur.equals(Operateur.LOWER_OR_EQUALS_THAN)
+                || this.operateur.equals(Operateur.LOWER_THAN);
+    }
+
+    private boolean operateurWithLike() {
+        return this.operateur.equals(Operateur.LIKE);
+    }
+
+    private boolean dataTypeIsString() {
+        return this.dataType == 12;
+    }
+
+    private boolean dataTypeIsTimeStamp() {
+        return this.dataType == 93;
+    }
+
+    private boolean dataTypeIsInt() {
+        return this.dataType == 4 || this.dataType == 5 || this.dataType == -5;
+    }
+
+    private boolean dataTypeIsBoolean() {
+        return this.dataType == -7;
+    }
+
+    private boolean dataTypeIsDecimal() {
+        return this.dataType == 3;
+    }
+
+    private Collection<?> collectionValues(Collection<?> collection) throws LocalDateTimeValueParseError, BadQueryCriteriaException {
+        if (dataTypeIsInt()) {
+            return collectionOfInt(collection);
+        } else if (dataTypeIsDecimal()) {
+            return collectionOfBigDecimal(collection);
+        } else if (dataTypeIsTimeStamp()) {
+            return collectionOfLocalDateTime(collection);
+        } else if (dataTypeIsString()) {
+            return collectionOfString(collection);
+        }
+        throw new BadQueryCriteriaException("La valeur de ce critère doit une liste");
+    }
+
+    private Collection<String> collectionOfString(Collection<?> collection) throws BadQueryCriteriaException {
+        Collection<String> cleanValues = new ArrayList<>();
+        for (Object elt : collection) {
+            cleanValues.add(stringValue(elt));
+        }
+        return cleanValues;
+    }
+
+    private String stringValue(Object element) throws BadQueryCriteriaException {
+        if (!(element instanceof String)) {
+            throw new BadQueryCriteriaException("Les critères associés à cette requête sont incorrects.");
+        }
+        return (String) element;
+    }
+    
+    private boolean booleanValue(Object element) throws BadQueryCriteriaException {
+        if (!(element instanceof Boolean)) {
+            throw new BadQueryCriteriaException("Les critères associés à cette requête sont incorrects.");
+        }
+        return (Boolean) element;
+    }
+
+    private Collection<LocalDateTime> collectionOfLocalDateTime(Collection<?> collection) throws LocalDateTimeValueParseError {
+        Collection cleanValues = new ArrayList<>();
+        for (Object element : collection) {
+            cleanValues.add(dateValue(element));
+        }
+        return cleanValues;
+    }
+
+    private LocalDateTime dateValue(Object value) throws LocalDateTimeValueParseError {
+        if (isDateActionColumn) {
+            if (!(value instanceof LocalDateTime)) {
+                throw new LocalDateTimeValueParseError("Impossible de parser la valeur " + value + " pour la colonne " + new DateCreationColumnDefinition().name());
+            }
+            return (LocalDateTime) value;
+        } else {
+            return new CriteriaLocalDateTimeValue(dateFormat, value).value();
+        }
+    }
+
+    private Long intValue(Object value) throws BadQueryCriteriaException {
+        try {
+            return Long.valueOf(value.toString());
+        } catch (Exception ex) {
+            throw new BadQueryCriteriaException("La valeur de ce critère doit être un nombre entier ");
+        }
+    }
+
+    private BigDecimal decimalValue(Object value) throws BadQueryCriteriaException {
+        try {
+            return new BigDecimal(value.toString());
+        } catch (Exception ex) {
+            throw new BadQueryCriteriaException("La valeur de ce critère doit être un nombre décimal ");
+        }
+    }
+
+    private Collection<BigDecimal> collectionOfBigDecimal(Collection<?> collection) throws BadQueryCriteriaException {
+        Collection cleanValues = new ArrayList<>();
+        for (Object element : collection) {
+            cleanValues.add(decimalValue(element));
+        }
+        return cleanValues;
+    }
+
+    private Collection<Long> collectionOfInt(Collection<?> collection) throws BadQueryCriteriaException {
+        Collection cleanValues = new ArrayList<>();
+        for (Object element : collection) {
+            cleanValues.add(intValue(element));
+        }
+        return cleanValues;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/QueryCriterion.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/QueryCriterion.java
new file mode 100644
index 0000000..ad3ddf3
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/QueryCriterion.java
@@ -0,0 +1,47 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class QueryCriterion {
+
+    private final String nomColonne;
+    private final Object criteriaValue;
+    private final Operateur operateur;
+    private final CriteriaLogicConnector criteriaLogicConnector;
+    private final List<QueryCriterion> subCriteria;
+
+    public QueryCriterion(String nomColonne, Object criteriaValue, Operateur operateur, CriteriaLogicConnector criteriaLogicConnector, List<QueryCriterion> subCriteria) {
+        this.nomColonne = nomColonne;
+        this.criteriaValue = criteriaValue;
+        this.operateur = operateur;
+        this.criteriaLogicConnector = criteriaLogicConnector;
+        this.subCriteria = subCriteria;
+    }
+
+    public String getNomColonne() {
+        return nomColonne;
+    }
+
+    public Object getCriteriaValue() {
+        return criteriaValue;
+    }
+
+    public Operateur getOperateur() {
+        return operateur;
+    }
+
+    public CriteriaLogicConnector getCriteriaLogicConnector() {
+        return criteriaLogicConnector;
+    }
+
+    public List<QueryCriterion> getSubCriteria() {
+        return subCriteria;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/QueryParam.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/QueryParam.java
new file mode 100644
index 0000000..4235fe3
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/QueryParam.java
@@ -0,0 +1,24 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class QueryParam {
+
+    private final String nomColonne;
+    private final Object paramValue;
+
+    public QueryParam(String nomColonne, Object paramValue) {
+        this.nomColonne = nomColonne;
+        this.paramValue = paramValue;
+    }
+
+    public String getNomColonne() {
+        return nomColonne;
+    }
+
+    public Object getParamValue() {
+        return paramValue;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/SelectQueryResult.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/SelectQueryResult.java
new file mode 100644
index 0000000..4759d72
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/SelectQueryResult.java
@@ -0,0 +1,37 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.tools.database.tables.FdxTableRow;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class SelectQueryResult {
+
+    private final int lastIndexRead;
+    private final List<FdxTableRow> rows;
+    private String token;
+
+    public SelectQueryResult(int lastIndexRead, List<FdxTableRow> rows) {
+        this.lastIndexRead = lastIndexRead;
+        this.rows = rows;
+    }
+
+    public int lastIndexRead() {
+        return lastIndexRead;
+    }
+
+    public List<FdxTableRow> rows() {
+        return rows;
+    }
+
+    public String getToken() {
+        return token;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/WhereQueryParameters.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/WhereQueryParameters.java
new file mode 100644
index 0000000..8aeab25
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/WhereQueryParameters.java
@@ -0,0 +1,97 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import static com.megatim.fdxcommons.model.enumeration.Operateur.BETWEEN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.EQUALS;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.GREATER_OR_EQUALS_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.GREATER_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.IN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.IS_NOT_NULL;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.IS_NULL;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.LIKE;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.LOWER_OR_EQUALS_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.LOWER_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.NOT_BETWEEN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.NOT_EQUALS;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.NOT_IN;
+import com.megatim.fdxcommons.model.pojo.BetweenOperatorValues;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class WhereQueryParameters {
+
+    private final QueryCriterion queryCriterion;
+
+    public WhereQueryParameters(QueryCriterion queryCriterion) {
+        this.queryCriterion = queryCriterion;
+    }
+
+    public List<QueryParam> parameters() {
+        return buildedParameters(queryCriterion);
+    }
+
+    private List<QueryParam> buildedParameters(QueryCriterion criterion) {
+
+        List<QueryParam> params = new ArrayList<>();
+
+        if (criterion == null) {
+            return params;
+        }
+
+        if (criterion.getSubCriteria().isEmpty()) {
+
+            switch (criterion.getOperateur()) {
+
+                case EQUALS:
+                case NOT_EQUALS:
+                case LIKE:
+                case GREATER_OR_EQUALS_THAN:
+                case GREATER_THAN:
+                case LOWER_OR_EQUALS_THAN:
+                case LOWER_THAN:
+                    params.add(new QueryParam(criterion.getNomColonne(), getParameterValue(criterion)));
+                    break;
+
+                case BETWEEN:
+                case NOT_BETWEEN:
+                    BetweenOperatorValues betweenOperatorValues = (BetweenOperatorValues) criterion.getCriteriaValue();
+                    params.add(new QueryParam(criterion.getNomColonne(), betweenOperatorValues.getLowerBound()));
+                    params.add(new QueryParam(criterion.getNomColonne(), betweenOperatorValues.getUpperBound()));
+                    break;
+
+                case NOT_IN:
+                case IN:
+                    List<?> values = (List<?>) criterion.getCriteriaValue();
+                    for (Object value : values) {
+                        params.add(new QueryParam(criterion.getNomColonne(), value));
+                    }
+                    break;
+
+                case IS_NOT_NULL:
+                case IS_NULL:
+                    break;
+            }
+
+        } else {
+
+            for (QueryCriterion c : criterion.getSubCriteria()) {
+                params.addAll(buildedParameters(c));
+            }
+
+        }
+
+        return params;
+    }
+
+    private Object getParameterValue(QueryCriterion criterion) {
+        switch (criterion.getOperateur()) {
+            case LIKE:
+                return "%" + criterion.getCriteriaValue() + "%";
+        }
+        return criterion.getCriteriaValue();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/dataproduction/DataProductionTaskInfo.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/dataproduction/DataProductionTaskInfo.java
new file mode 100644
index 0000000..411c6f1
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/dataproduction/DataProductionTaskInfo.java
@@ -0,0 +1,130 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata.dataproduction;
+
+import com.megatim.fdxcommons.model.dataproduction.DataProductionType;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import java.time.LocalDateTime;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class DataProductionTaskInfo {
+
+    private DataProductionTaskType dataProductionTaskType;
+    private String codeTypeFichier;
+    private String referentielVersion;
+    private String participant;
+    private String token;
+    private DataProductionType dataProductionType = DataProductionType.ADD;
+
+    //Pour les production de type fichier nous aurons besoin du chemin du fichier
+    private String fileProductionPath;
+
+    //Pour les production de type API
+    private List<LinkedHashMap<String, Object>> datas;
+
+    //Pour les opération de mise à jour et d'update depuis l'API
+    private QueryCriterion queryCriterion;
+    private LinkedHashMap<String, Object> dataToUpdate;
+
+    private String fileName;
+    private LocalDateTime fileDate;
+
+    public DataProductionTaskType getDataProductionTaskType() {
+        return dataProductionTaskType;
+    }
+
+    public void setDataProductionTaskType(DataProductionTaskType dataProductionTaskType) {
+        this.dataProductionTaskType = dataProductionTaskType;
+    }
+
+    public String getCodeTypeFichier() {
+        return codeTypeFichier;
+    }
+
+    public void setCodeTypeFichier(String codeTypeFichier) {
+        this.codeTypeFichier = codeTypeFichier;
+    }
+
+    public String getReferentielVersion() {
+        return referentielVersion;
+    }
+
+    public void setReferentielVersion(String referentielVersion) {
+        this.referentielVersion = referentielVersion;
+    }
+
+    public String getParticipant() {
+        return participant;
+    }
+
+    public void setParticipant(String participant) {
+        this.participant = participant;
+    }
+
+    public String getFileProductionPath() {
+        return fileProductionPath;
+    }
+
+    public void setFileProductionPath(String fileProductionPath) {
+        this.fileProductionPath = fileProductionPath;
+    }
+
+    public List<LinkedHashMap<String, Object>> getDatas() {
+        return datas;
+    }
+
+    public void setDatas(List<LinkedHashMap<String, Object>> datas) {
+        this.datas = datas;
+    }
+
+    public QueryCriterion getQueryCriterion() {
+        return queryCriterion;
+    }
+
+    public void setQueryCriterion(QueryCriterion queryCriterion) {
+        this.queryCriterion = queryCriterion;
+    }
+
+    public DataProductionType getDataProductionType() {
+        return dataProductionType;
+    }
+
+    public void setDataProductionType(DataProductionType dataProductionType) {
+        this.dataProductionType = dataProductionType;
+    }
+
+    public LinkedHashMap<String, Object> getDataToUpdate() {
+        return dataToUpdate;
+    }
+
+    public void setDataToUpdate(LinkedHashMap<String, Object> dataToUpdate) {
+        this.dataToUpdate = dataToUpdate;
+    }
+
+    public String getToken() {
+        return token;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+    public String getFileName() {
+        return fileName;
+    }
+
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
+    }
+
+    public LocalDateTime getFileDate() {
+        return fileDate;
+    }
+
+    public void setFileDate(LocalDateTime fileDate) {
+        this.fileDate = fileDate;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/dataproduction/DataProductionTaskType.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/dataproduction/DataProductionTaskType.java
new file mode 100644
index 0000000..19ae2a9
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/dataproduction/DataProductionTaskType.java
@@ -0,0 +1,9 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata.dataproduction;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public enum DataProductionTaskType {
+    FICHIER, API, BATCH_TOKEN_JSON, BATCH_TOKEN_FILE, COMPOSED_JSON_OBJECT;
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/jpql/JpqlParsedQueryCriterion.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/jpql/JpqlParsedQueryCriterion.java
new file mode 100644
index 0000000..8bb21a1
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/jpql/JpqlParsedQueryCriterion.java
@@ -0,0 +1,156 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries.metadata.jpql;
+
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.search.EnumValue;
+import com.megatim.fdxcommons.tools.database.exceptions.BadQueryCriteriaException;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.sql.Timestamp;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Optional;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JpqlParsedQueryCriterion {
+
+    private final JpqlQueryCriterion queryCriterion;
+    private final Class<?> classe;
+
+    public JpqlParsedQueryCriterion(JpqlQueryCriterion queryCriterion, Class<?> classe) {
+        this.queryCriterion = queryCriterion;
+        this.classe = classe;
+    }
+
+    public JpqlQueryCriterion parsedCriterion() throws Exception {
+        return queryCriterion != null
+                ? parsedCriterion(queryCriterion)
+                : null;
+    }
+
+    private JpqlQueryCriterion parsedCriterion(JpqlQueryCriterion criterion) throws Exception {
+
+        if (criterion.getSubCriteria() != null && !criterion.getSubCriteria().isEmpty() && criterion.getCriteriaLogicConnector() != null) {
+            List<JpqlQueryCriterion> subCriteria = new ArrayList<>();
+
+            for (JpqlQueryCriterion qc : criterion.getSubCriteria()) {
+                JpqlQueryCriterion parsedCriterion = parsedCriterion(qc);
+
+                if (parsedCriterion != null) {
+                    subCriteria.add(parsedCriterion);
+                }
+            }
+            if (!subCriteria.isEmpty()) {
+                return new JpqlQueryCriterion(null,
+                        null,
+                        null,
+                        criterion.getCriteriaLogicConnector(),
+                        subCriteria,
+                        criterion.isEndOfTheDay()
+                );
+            }
+        } else if ((criterion.getSubCriteria() == null || criterion.getSubCriteria().isEmpty())
+                && criterion.getNomColonne() != null && !criterion.getNomColonne().isEmpty() && criterion.getOperateur() != null) {
+            Class<?> clazz = columnType(criterion.getNomColonne());
+
+            if (clazz != null) {
+
+                Object correctValue = correctValue(clazz, criterion);
+
+                if (isUnaryOperator(criterion.getOperateur()) || (correctValue != null && !correctValue.toString().isEmpty())) {
+                    return new JpqlQueryCriterion(criterion.getNomColonne(),
+                            correctValue,
+                            criterion.getOperateur(),
+                            null,
+                            Arrays.asList(),
+                            criterion.isEndOfTheDay()
+                    );
+                }
+            }
+        }
+        return null;
+    }
+
+    private Class<?> columnType(String nomColonne) {
+        Field[] fields = classe.getDeclaredFields();
+        String[] fieldPath = nomColonne.split("\\.");
+        try {
+            return columnType(fieldPath, fields);
+        } catch (BadQueryCriteriaException ex) {
+            Logger.getLogger(JpqlParsedQueryCriterion.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            return null;
+        }
+    }
+
+    private Class<?> columnType(String[] fieldPath, Field[] fields) throws BadQueryCriteriaException {
+        Optional<Field> optField = Arrays.asList(fields).stream().filter(f -> f.getName().equals(fieldPath[0])).findFirst();
+
+        if (optField.isPresent()) {
+            if (fieldPath.length == 1) {
+                return optField.get().getType();
+            } else {
+                return columnType(Arrays.copyOfRange(fieldPath, 1, fieldPath.length), optField.get().getType().getDeclaredFields());
+            }
+        } else {
+            throw new BadQueryCriteriaException("Colonne " + fields[0] + " introuvable dans la classe " + optField.get().getDeclaringClass().getName());
+
+        }
+    }
+
+    private Object correctValue(Class<?> clazz, JpqlQueryCriterion criterion) throws IllegalAccessException, BadQueryCriteriaException, IllegalArgumentException, InvocationTargetException {
+
+        Object criteriaValue = criterion.getCriteriaValue();
+        if (criteriaValue == null) {
+            return null;
+        }
+
+        if (clazz.isEnum()) {
+
+            Method[] methods = clazz.getMethods();
+            Optional<Method> optionalMethod = Arrays.asList(methods)
+                    .stream()
+                    .filter(m -> m.getAnnotation(EnumValue.class) != null && Modifier.isStatic(m.getModifiers())).findFirst();
+
+            if (optionalMethod.isPresent()) {
+                Method method = optionalMethod.get();
+                return method.invoke(null, criteriaValue.toString());
+            }
+
+            return criteriaValue;
+
+        } else if (clazz.isAssignableFrom(LocalDateTime.class)) {
+            return dateTimeValue(criteriaValue.toString(), criterion.isEndOfTheDay());
+
+        } else {
+            return clazz.cast(criteriaValue);
+        }
+    }
+
+    private Object dateTimeValue(String criteriaValue, boolean endOfTheDay) {
+        ZonedDateTime zonedDateTime = ZonedDateTime.parse(criteriaValue, DateTimeFormatter.ISO_DATE_TIME);
+        LocalDateTime date = Timestamp.from(zonedDateTime.toInstant()).toLocalDateTime();
+
+        return endOfTheDay
+                ? date.toLocalDate().atTime(LocalTime.MAX)
+                : date.toLocalDate().atTime(LocalTime.MIN);
+    }
+
+    private boolean isUnaryOperator(Operateur operateur) {
+        return operateur.equals(Operateur.IS_NOT_NULL) || operateur.equals(Operateur.IS_NULL);
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/jpql/JpqlQueryCriterion.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/jpql/JpqlQueryCriterion.java
new file mode 100644
index 0000000..16f6a00
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/jpql/JpqlQueryCriterion.java
@@ -0,0 +1,53 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata.jpql;
+
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class JpqlQueryCriterion {
+
+    private final String nomColonne;
+    private final Object criteriaValue;
+    private final Operateur operateur;
+    private final CriteriaLogicConnector criteriaLogicConnector;
+    private final List<JpqlQueryCriterion> subCriteria;
+    private final boolean endOfTheDay;
+
+    public JpqlQueryCriterion(String nomColonne, Object criteriaValue, Operateur operateur, CriteriaLogicConnector criteriaLogicConnector, List<JpqlQueryCriterion> subCriteria, boolean endOfTheDay) {
+        this.nomColonne = nomColonne;
+        this.criteriaValue = criteriaValue;
+        this.operateur = operateur;
+        this.criteriaLogicConnector = criteriaLogicConnector;
+        this.subCriteria = subCriteria;
+        this.endOfTheDay = endOfTheDay;
+    }
+
+    public String getNomColonne() {
+        return nomColonne;
+    }
+
+    public Object getCriteriaValue() {
+        return criteriaValue;
+    }
+
+    public Operateur getOperateur() {
+        return operateur;
+    }
+
+    public CriteriaLogicConnector getCriteriaLogicConnector() {
+        return criteriaLogicConnector;
+    }
+
+    public List<JpqlQueryCriterion> getSubCriteria() {
+        return subCriteria;
+    }
+
+    public Boolean isEndOfTheDay() {
+        return endOfTheDay;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/jpql/JpqlQueryParam.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/jpql/JpqlQueryParam.java
new file mode 100644
index 0000000..875e568
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/jpql/JpqlQueryParam.java
@@ -0,0 +1,24 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata.jpql;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class JpqlQueryParam {
+
+    private final String nomColonne;
+    private final Object paramValue;
+
+    public JpqlQueryParam(String nomColonne, Object paramValue) {
+        this.nomColonne = nomColonne;
+        this.paramValue = paramValue;
+    }
+
+    public String getNomColonne() {
+        return nomColonne;
+    }
+
+    public Object getParamValue() {
+        return paramValue;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/jpql/JpqlWhereQueryParameters.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/jpql/JpqlWhereQueryParameters.java
new file mode 100644
index 0000000..11a7786
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/jpql/JpqlWhereQueryParameters.java
@@ -0,0 +1,97 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata.jpql;
+
+import static com.megatim.fdxcommons.model.enumeration.Operateur.BETWEEN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.EQUALS;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.GREATER_OR_EQUALS_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.GREATER_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.IN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.IS_NOT_NULL;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.IS_NULL;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.LIKE;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.LOWER_OR_EQUALS_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.LOWER_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.NOT_BETWEEN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.NOT_EQUALS;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.NOT_IN;
+import com.megatim.fdxcommons.model.pojo.BetweenOperatorValues;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class JpqlWhereQueryParameters {
+
+    private final JpqlQueryCriterion queryCriterion;
+
+    public JpqlWhereQueryParameters(JpqlQueryCriterion queryCriterion) {
+        this.queryCriterion = queryCriterion;
+    }
+
+    public List<JpqlQueryParam> parameters() {
+        return buildedParameters(queryCriterion);
+    }
+
+    private List<JpqlQueryParam> buildedParameters(JpqlQueryCriterion criterion) {
+
+        List<JpqlQueryParam> params = new ArrayList<>();
+
+        if (criterion == null) {
+            return params;
+        }
+
+        if (criterion.getSubCriteria().isEmpty()) {
+
+            switch (criterion.getOperateur()) {
+
+                case EQUALS:
+                case NOT_EQUALS:
+                case LIKE:
+                case GREATER_OR_EQUALS_THAN:
+                case GREATER_THAN:
+                case LOWER_OR_EQUALS_THAN:
+                case LOWER_THAN:
+                    params.add(new JpqlQueryParam(criterion.getNomColonne(), getParameterValue(criterion)));
+                    break;
+
+                case BETWEEN:
+                case NOT_BETWEEN:
+                    BetweenOperatorValues betweenOperatorValues = (BetweenOperatorValues) criterion.getCriteriaValue();
+                    params.add(new JpqlQueryParam(criterion.getNomColonne(), betweenOperatorValues.getLowerBound()));
+                    params.add(new JpqlQueryParam(criterion.getNomColonne(), betweenOperatorValues.getUpperBound()));
+                    break;
+
+                case NOT_IN:
+                case IN:
+                    List<?> values = (List<?>) criterion.getCriteriaValue();
+                    for (Object value : values) {
+                        params.add(new JpqlQueryParam(criterion.getNomColonne(), value));
+                    }
+                    break;
+
+                case IS_NOT_NULL:
+                case IS_NULL:
+                    break;
+            }
+
+        } else {
+
+            for (JpqlQueryCriterion c : criterion.getSubCriteria()) {
+                params.addAll(buildedParameters(c));
+            }
+
+        }
+
+        return params;
+    }
+
+    private Object getParameterValue(JpqlQueryCriterion criterion) {
+        switch (criterion.getOperateur()) {
+            case LIKE:
+                return "%" + criterion.getCriteriaValue() + "%";
+        }
+        return criterion.getCriteriaValue();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/validation/JsonDataValidationError.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/validation/JsonDataValidationError.java
new file mode 100644
index 0000000..390a1b1
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/validation/JsonDataValidationError.java
@@ -0,0 +1,293 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries.validation;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.integration.json.JsonStructure;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import com.megatim.fdxcommons.tools.database.queries.metadata.InsertionLocalDateTimeValue;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import org.apache.commons.validator.GenericValidator;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonDataValidationError {
+
+    private final ArrayList<String> errors = new ArrayList<>();
+    private final List<LinkedHashMap<String, Object>> data;
+    private final JsonStructure jsonStructure;
+
+    public JsonDataValidationError(List<LinkedHashMap<String, Object>> data, JsonStructure jsonStructure) {
+        this.data = data;
+        this.jsonStructure = jsonStructure;
+    }
+
+    public String validationError() {
+        if (errors.isEmpty()) {
+            int index = 1;
+            for (Map<String, Object> dataItem : data) {
+                String error = processDataItem(dataItem, jsonStructure);
+
+                if (error != null && !error.trim().isEmpty()) {
+                    errors.add(elementNumberString(index++) + " : " + error);
+                }
+            }
+        }
+        return error();
+    }
+
+    private String processDataItem(Map<String, Object> dataItem, JsonStructure jsonStruct) {
+        StringBuilder lineError = new StringBuilder("");
+
+        //Vérifie si une colonne obligatoire est absente
+        lineError.append(addErrorForNotFoundColumn(dataItem, jsonStruct.getFields()));
+
+        for (Map.Entry<String, Object> dataItemEntry : dataItem.entrySet()) {
+
+            String columnName = dataItemEntry.getKey();
+            Object columnValue = dataItemEntry.getValue();
+
+            Optional<JsonStructure> optField = jsonStruct.getFields().stream().filter(f -> f.getName().equalsIgnoreCase(columnName)).findFirst();
+
+            if (!optField.isPresent()) {
+                lineError.append("La colonne ").append(columnName).append(" n'existe pas pour ce fichier;");
+                continue;
+            }
+            JsonStructure field = optField.get();
+
+            if (field.isCollection() || field.getTypeDonnee().equals(TypeDonnee.OBJET)) {
+                if (field.getTypeDonnee().equals(TypeDonnee.OBJET)) {
+
+                    if (field.isCollection()) {
+                        if (columnValue instanceof List) {
+                            List liste = (List) columnValue;
+                            int i = 1;
+
+                            for (Object obj : liste) {
+                                if (obj instanceof Map) {
+                                    lineError.append(processDataItem((Map<String, Object>) obj, field));
+                                } else {
+                                    lineError.append("L'élément No ").append(i++).append(" de la colonne '").append(columnName).append("' doit être un objet;");
+                                }
+                            }
+                        } else {
+                            lineError.append(" La donnée de la colonne '").append(columnName).append("' doit être une liste;");
+                        }
+                    } else {
+                        if (columnValue instanceof Map) {
+                            lineError.append(processDataItem((Map<String, Object>) columnValue, field));
+                        } else {
+                            lineError.append(" La donnée de la colonne '").append(columnName).append("' doit être un objet;");
+                        }
+                    }
+                } else {
+                    if (columnValue instanceof List) {
+                        simpleListValueError(columnValue, field);
+                    } else {
+                        lineError.append(" La donnée de la colonne '").append(columnName).append("' doit être une liste;");
+                    }
+                }
+            } else {
+                columnValueError(lineError, field, columnValue);
+            }
+        }
+        return lineError.toString();
+    }
+
+    private String simpleListValueError(Object columnValue, JsonStructure field) {
+        List liste = (List) columnValue;
+        StringBuilder arrayError = new StringBuilder("");
+        int i = 1;
+
+        for (Object obj : liste) {
+            arrayError.append(columnValueError(obj, field, i++));
+        }
+        return arrayError.toString().trim();
+    }
+
+    private void columnValueError(StringBuilder lineError, JsonStructure field, Object columnValue) {
+        String error = columnValueError(columnValue, field);
+        if (error != null && !error.trim().isEmpty()) {
+            lineError.append(error.trim());
+        }
+    }
+
+    private String error() {
+        StringBuilder stringBuilder = new StringBuilder("");
+        errors.forEach(e -> {
+            if (e != null && !e.trim().isEmpty()) {
+                stringBuilder.append(e.trim()).append("\n");
+            }
+        }
+        );
+        return stringBuilder.toString();
+    }
+
+    private String addErrorForNotFoundColumn(Map<String, Object> dataItem, List<JsonStructure> fields) {
+        StringBuilder message = new StringBuilder("");
+
+        fields.forEach(f -> {
+            String error = addErrorForNotFoundColumn(dataItem, f);
+            if (!error.isEmpty()) {
+                message.append("\n").append(error);
+            }
+        });
+        return message.toString();
+    }
+
+    private String addErrorForNotFoundColumn(Map<String, Object> dataItem, JsonStructure jsonStruct) {
+        String fieldName = jsonStruct.getName().toLowerCase();
+        if (jsonStruct.isRequired() && !columnNameExist(dataItem, fieldName)) {
+            return "La colonne " + fieldName + " est manquante. ";
+        }
+        return "";
+    }
+
+    private String columnValueError(Object columnValue, JsonStructure jsonStruct, int i) {
+        TypeDonnee typeDonnee = jsonStruct.getTypeDonnee();
+
+        switch (typeDonnee) {
+            case ALPHANUMERIQUE:
+                if (!isAlphaNumericColumn(columnValue)) {
+                    return "L'élément No " + i + " doit être alphanumérique";
+                } else if (!lengthLowerOrEquals((String) columnValue, jsonStruct.getLengthh())) {
+                    return "La taille de l'élément No " + i + " doit être inférieure ou égale à" + jsonStruct.getLengthh() + ";";
+                }
+                break;
+            case DECIMAL:
+                if (columnValue != null) {
+
+                    String stringValue = columnValue.toString();
+                    if (!GenericValidator.isDouble(stringValue)) {
+                        return "L'élément No " + i + " doit être décimale";
+                    } else if (!lengthLowerOrEquals(stringValue, jsonStruct.getLengthh())) {
+                        return "La taille de l'élément No " + i + " doit être inférieure ou égale à " + jsonStruct.getLengthh() + ";";
+                    }
+
+                }
+                break;
+            case NUMERIQUE:
+                if (columnValue != null) {
+
+                    String stringValue = columnValue.toString();
+                    if (!GenericValidator.isLong(stringValue)) {
+                        return "L'élément No " + i + " doit être numérique;";
+                    } else if (!lengthLowerOrEquals(stringValue, jsonStruct.getLengthh())) {
+                        return "La taille de l'élément No " + i + " doit être inférieure ou égale à " + jsonStruct.getLengthh() + ";";
+                    }
+
+                }
+                break;
+            case DATE:
+                if (columnValue != null) {
+
+                    String stringValue = columnValue.toString();
+                    if (!GenericValidator.isDate(stringValue, jsonStruct.getFormatDate(), true)) {
+                        return "L'élément No " + i + " doit être une date";
+                    } else if (!lengthEquals(stringValue, jsonStruct.getLengthh())) {
+                        return "La taille de l'élément No " + i + " doit être égale à " + jsonStruct.getLengthh() + ";";
+                    }
+
+                    try {
+                        new InsertionLocalDateTimeValue(jsonStruct.getFormatDate(), columnValue).value();
+                    } catch (LocalDateTimeValueParseError ex) {
+                        return "Impossible de parser la valeur " + stringValue + " au format " + jsonStruct.getFormatDate() + " pour l'élément No " + i + ";";
+                    }
+
+                }
+                break;
+            default:
+                break;
+        }
+
+        return "";
+    }
+
+    private String columnValueError(Object columnValue, JsonStructure jsonStruct) {
+        TypeDonnee typeDonnee = jsonStruct.getTypeDonnee();
+
+        switch (typeDonnee) {
+            case ALPHANUMERIQUE:
+                if (!isAlphaNumericColumn(columnValue)) {
+                    return "La colonne " + jsonStruct.getName() + " doit être alphanumérique;";
+                } else if (!lengthLowerOrEquals((String) columnValue, jsonStruct.getLengthh())) {
+                    return "La taille de la colonne " + jsonStruct.getName() + " doit être inférieure ou égale à" + jsonStruct.getLengthh() + ";";
+                }
+                break;
+            case DECIMAL:
+                if (columnValue != null) {
+
+                    String stringValue = columnValue.toString();
+                    if (!GenericValidator.isDouble(stringValue)) {
+                        return "La colonne " + jsonStruct.getName() + " doit être décimale";
+                    } else if (!lengthLowerOrEquals(stringValue, jsonStruct.getLengthh())) {
+                        return "La taille de la colonne " + jsonStruct.getName() + " doit être inférieure ou égale à " + jsonStruct.getLengthh() + ";";
+                    }
+
+                }
+                break;
+            case NUMERIQUE:
+                if (columnValue != null) {
+
+                    String stringValue = columnValue.toString();
+                    if (!GenericValidator.isLong(stringValue)) {
+                        return "La colonne " + jsonStruct.getName() + " doit être numérique;";
+                    } else if (!lengthLowerOrEquals(stringValue, jsonStruct.getLengthh())) {
+                        return "La taille de la colonne " + jsonStruct.getName() + " doit être inférieure ou égale à " + jsonStruct.getLengthh() + ";";
+                    }
+
+                }
+                break;
+            case DATE:
+                if (columnValue != null) {
+
+                    String stringValue = columnValue.toString();
+                    if (!GenericValidator.isDate(stringValue, jsonStruct.getFormatDate(), true)) {
+                        return "La colonne " + jsonStruct.getName() + " doit être une date;";
+                    } else if (!lengthEquals(stringValue, jsonStruct.getLengthh())) {
+                        return "La taille de la colonne " + jsonStruct.getName() + " doit être égale à " + jsonStruct.getLengthh() + ";";
+                    }
+
+                    try {
+                        new InsertionLocalDateTimeValue(jsonStruct.getFormatDate(), columnValue).value();
+                    } catch (LocalDateTimeValueParseError ex) {
+                        return "Impossible de parser la valeur " + stringValue + " au format " + jsonStruct.getFormatDate() + " pour la colonne " + jsonStruct.getName() + ";";
+                    }
+
+                }
+                break;
+            default:
+                break;
+        }
+
+        return "";
+    }
+
+    private boolean isAlphaNumericColumn(Object columnValue) {
+        return (columnValue == null || columnValue instanceof String);
+    }
+
+    private boolean lengthEquals(String value, int columnMaxLength) {
+        return value.trim().length() == columnMaxLength;
+    }
+
+    private boolean lengthLowerOrEquals(String value, int columnMaxLength) {
+        return value.trim().length() <= columnMaxLength;
+    }
+
+    private String elementNumberString(int index) {
+        return "Elément No" + index;
+    }
+
+    private boolean columnNameExist(Map<String, Object> dataItem, String jsonStructName) {
+        return dataItem.entrySet().stream().map(e -> e.getKey()).filter(key -> key.trim().toLowerCase().equals(jsonStructName)).findAny().isPresent();
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/validation/TableDataValidationError.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/validation/TableDataValidationError.java
new file mode 100644
index 0000000..172c8b8
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/validation/TableDataValidationError.java
@@ -0,0 +1,174 @@
+package com.megatim.fdxcommons.tools.database.queries.validation;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import com.megatim.fdxcommons.tools.database.queries.metadata.InsertionLocalDateTimeValue;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import org.apache.commons.validator.GenericValidator;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class TableDataValidationError {
+
+    private final ArrayList<String> errors = new ArrayList<>();
+
+    private final Map<String, ColumnDefinition> columnNameToColumnDefinition;
+    private final List<ColumnDefinition> columnDefinitions;
+    private final List<LinkedHashMap<String, Object>> data;
+    private final boolean withOptionalColumn;
+
+    public TableDataValidationError(List<LinkedHashMap<String, Object>> data, List<ColumnDefinition> columnDefinitions) {
+        this(data, columnDefinitions, false);
+    }
+
+    public TableDataValidationError(List<LinkedHashMap<String, Object>> data, List<ColumnDefinition> columnDefinitions, boolean withOptionalColumn) {
+        this.data = data;
+        this.withOptionalColumn = withOptionalColumn;
+        this.columnDefinitions = columnDefinitions;
+        this.columnNameToColumnDefinition = columnDefinitions.stream().collect(Collectors.toMap(c -> c.getName().trim().toLowerCase(), c -> c));
+    }
+
+    public String validationError() {
+        if (errors.isEmpty()) {
+            int index = 1;
+            for (Map<String, Object> dataItem : data) {
+                processDataItem(dataItem, index++);
+            }
+        }
+        return error();
+    }
+
+    private String error() {
+        StringBuilder stringBuilder = new StringBuilder("");
+        errors.forEach(e -> {
+            if (e != null && !e.isEmpty()) {
+                stringBuilder.append(e).append("\n");
+            }
+        }
+        );
+        return stringBuilder.toString();
+    }
+
+    private void processDataItem(Map<String, Object> dataItem, int index) {
+
+        for (Map.Entry<String, Object> dataItemEntry : dataItem.entrySet()) {
+
+            String columnName = dataItemEntry.getKey();
+            Object columnValue = dataItemEntry.getValue();
+
+            ColumnDefinition columnDefinition = columnNameToColumnDefinition.get(columnName.trim().toLowerCase());
+            if (columnDefinition == null) {
+                errors.add("La colonne " + columnName + " n'existe pas pour ce fichier. " + lineNumberString(index));
+                return;
+            }
+
+            String error = columnValueError(columnValue, columnDefinition);
+            if (error != null && !error.isEmpty()) {
+                errors.add(error + " " + lineNumberString(index));
+            }
+
+        }
+
+        if (!withOptionalColumn) {
+            addErrorForNotFoundColumn(dataItem, index);
+        }
+    }
+
+    private void addErrorForNotFoundColumn(Map<String, Object> dataItem, int index) {
+        columnDefinitions.forEach(columnDefinition -> {
+            String columnDefinitionName = columnDefinition.getName().toLowerCase();
+            if (!columnNameExist(dataItem, columnDefinitionName)) {
+                errors.add("La colonne " + columnDefinitionName + " est manquante dans la requête. " + lineNumberString(index));
+            }
+        });
+    }
+
+    private String columnValueError(Object columnValue, ColumnDefinition columnDefinition) {
+        String columnType = columnDefinition.getTypeDonnee();
+
+        if (columnType.equals(TypeDonnee.ALPHANUMERIQUE.toString())) {
+
+            if (!isAlphaNumericColumn(columnValue)) {
+                return "La colonne " + columnDefinition.getName() + " doit être alpha numérique";
+            } else if (!lengthLowerOrEquals((String) columnValue, columnDefinition.getTaille())) {
+                return "La taille de la colonne " + columnDefinition.getName() + " doit être inférieure ou égale à" + columnDefinition.getTaille();
+            }
+
+        } else if (columnType.equals(TypeDonnee.DECIMAL.toString())) {
+
+            if (columnValue != null) {
+
+                String stringValue = columnValue.toString();
+                if (!GenericValidator.isDouble(stringValue)) {
+                    return "La colonne " + columnDefinition.getName() + " doit être décimale";
+                } else if (!lengthLowerOrEquals(stringValue, columnDefinition.getTaille())) {
+                    return "La taille de la colonne " + columnDefinition.getName() + " doit être inférieure ou égale à " + columnDefinition.getTaille();
+                }
+
+            }
+
+        } else if (columnType.equals(TypeDonnee.NUMERIQUE.toString())) {
+
+            if (columnValue != null) {
+
+                String stringValue = columnValue.toString();
+                if (!GenericValidator.isLong(stringValue)) {
+                    return "La colonne " + columnDefinition.getName() + " doit être numérique";
+                } else if (!lengthLowerOrEquals(stringValue, columnDefinition.getTaille())) {
+                    return "La taille de la colonne " + columnDefinition.getName() + " doit être inférieure ou égale à " + columnDefinition.getTaille();
+                }
+
+            }
+
+        } else if (columnType.equals(TypeDonnee.DATE.toString())) {
+
+            if (columnValue != null) {
+
+                String stringValue = columnValue.toString();
+                if (!GenericValidator.isDate(stringValue, columnDefinition.getFormatDate(), true)) {
+                    return "La colonne " + columnDefinition.getName() + " doit être une date";
+                } else if (!lengthEquals(stringValue, columnDefinition.getTaille())) {
+                    return "La taille de la colonne " + columnDefinition.getName() + " doit être égale à " + columnDefinition.getTaille();
+                }
+
+                try {
+                    new InsertionLocalDateTimeValue(columnDefinition.getFormatDate(), columnValue).value();
+                } catch (LocalDateTimeValueParseError ex) {
+                    return "Impossible de parser la valeur " + stringValue + " au format " + columnDefinition.getFormatDate() + " pour la colonne " + columnDefinition.getName();
+                }
+
+            }
+
+        }
+
+        return null;
+    }
+
+    private boolean isAlphaNumericColumn(Object columnValue) {
+        return (columnValue == null || columnValue instanceof String);
+    }
+
+    private boolean lengthEquals(String value, int columnMaxLength) {
+        return value.trim().length() == columnMaxLength;
+    }
+
+    private boolean lengthLowerOrEquals(String value, int columnMaxLength) {
+        return value.trim().length() <= columnMaxLength;
+    }
+
+    private String lineNumberString(int index) {
+        return "Ligne " + index;
+    }
+
+    private boolean columnNameExist(Map<String, Object> dataItem, String columnDefinitionName) {
+        return dataItem.entrySet().stream().map(e -> e.getKey()).filter(key -> key.trim().toLowerCase().equals(columnDefinitionName)).findAny().isPresent();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/ApiJsonFdxTable.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/ApiJsonFdxTable.java
new file mode 100644
index 0000000..995fa18
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/ApiJsonFdxTable.java
@@ -0,0 +1,72 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.tables;
+
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.integration.json.JsonStructure;
+import com.megatim.fdxcommons.tools.database.queries.json.CreateJsonTableIfNotExistQuery;
+import com.megatim.fdxcommons.tools.database.contrat.JsonStructureIterator;
+import com.megatim.fdxcommons.model.pojo.JsonTableDefinition;
+import com.megatim.fdxcommons.tools.database.exceptions.TypeFichierDataBadRequest;
+import com.megatim.fdxcommons.tools.database.queries.JsonDelete;
+import com.megatim.fdxcommons.tools.database.queries.JsonFdxApiInsert;
+import com.megatim.fdxcommons.tools.database.queries.JsonSelectQuery;
+import com.megatim.fdxcommons.tools.database.queries.JsonUpdate;
+import com.megatim.fdxcommons.tools.database.queries.metadata.AliasedQueryCriterion;
+import com.megatim.fdxcommons.tools.database.queries.metadata.JsonFdxParsedDataIterator;
+import com.megatim.fdxcommons.tools.database.queries.metadata.JsonFdxParsedData;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.FdxApiColumnDefinitions;
+import com.megatim.fdxcommons.tools.utils.JsonTableUtil;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author ASUS
+ */
+public class ApiJsonFdxTable extends JsonFdxTable {
+
+    public ApiJsonFdxTable(String referentielVersion, String codeTypeFichier, JsonStructure jsonStructure) {
+        super(referentielVersion, codeTypeFichier, jsonStructure);
+    }
+
+    @Override
+    public void createTable(Connection connection) throws NamingException, SQLException, Exception {
+        JsonTableDefinition tableDefinition = new JsonStructureIterator(tableName.name(connection), jsonStructure).tableDefinition();
+        new CreateJsonTableIfNotExistQuery(connection, new FdxApiColumnDefinitions(), tableDefinition).execute();
+    }
+
+    public void insert(List<LinkedHashMap<String, Object>> originalData, Long dataProductionId, Connection connection) throws TypeFichierDataBadRequest, SQLException, NamingException, Exception {
+        JsonFdxParsedData fdxParsedData = new JsonFdxParsedData(originalData, jsonStructure);
+        JsonFdxParsedDataIterator parsedDataIterator = new JsonFdxParsedDataIterator(tableName.name(connection), fdxParsedData);
+        new JsonFdxApiInsert(connection, dataProductionId).insert(parsedDataIterator);
+    }
+
+    @Override
+    public void update(LinkedHashMap<String, Object> dataToUpdate, QueryCriterion queryCriterion, CommonDataProduction dataProduction, Connection connection) throws TypeFichierDataBadRequest, SQLException, NamingException, Exception {
+        JsonTableDefinition tableDefinition = tableDefinition(connection);
+        Map<String, String> tablesNameToAlias = new JsonTableUtil(tableDefinition).tablesNameToAlias();
+        AliasedQueryCriterion aliasedQueryCriterion = new AliasedQueryCriterion(tableDefinition, parsedQueryCriterion(queryCriterion, connection).parsedCriterion(), tablesNameToAlias);
+        Map<Long, Object> matchedData = new JsonSelectQuery(tableDefinition, aliasedQueryCriterion.aliasedQueryCriterion(), connection, tablesNameToAlias).execute();
+        List<ColumnDefinition> columnsDefinition = new JsonStructureIterator(tableName.name(connection), jsonStructure).columnsDefinitionWithFullQualifiedName();
+
+        new JsonUpdate(connection, matchedData, columnsDefinition, tableName.name(connection), dataToUpdate, dataProduction).update();
+    }
+
+    public void delete(QueryCriterion queryCriterion, CommonDataProduction dataProduction, Connection connection) throws TypeFichierDataBadRequest, SQLException, NamingException, Exception {
+        JsonTableDefinition tableDefinition = tableDefinition(connection);
+        Map<String, String> tablesNameToAlias = new JsonTableUtil(tableDefinition).tablesNameToAlias();
+        AliasedQueryCriterion aliasedQueryCriterion = new AliasedQueryCriterion(tableDefinition, parsedQueryCriterion(queryCriterion, connection).parsedCriterion(), tablesNameToAlias);
+        Map<Long, Object> matchedData = new JsonSelectQuery(tableDefinition, aliasedQueryCriterion.aliasedQueryCriterion(), connection, tablesNameToAlias).execute();
+
+        new JsonDelete(connection, matchedData, tableName.name(connection), tableDefinition, dataProduction).delete();
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxApiTable.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxApiTable.java
new file mode 100644
index 0000000..f2d124b
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxApiTable.java
@@ -0,0 +1,133 @@
+package com.megatim.fdxcommons.tools.database.tables;
+
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.tools.database.queries.DataWithTokenToDataProductionQuery;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.FdxApiColumnDefinitions;
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.tools.database.queries.FdxApiInsert;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierUpdateMetaData;
+import com.megatim.fdxcommons.tools.database.exceptions.TypeFichierDataBadRequest;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierInsertMetaData;
+import com.megatim.fdxcommons.tools.database.exceptions.MoreThanOneTableDataNotFoundException;
+import com.megatim.fdxcommons.tools.database.exceptions.TableDataNotFoundException;
+import com.megatim.fdxcommons.tools.database.queries.CreateTableIfNotExistQuery;
+import com.megatim.fdxcommons.tools.database.queries.FdxUpdate;
+import com.megatim.fdxcommons.tools.database.queries.metadata.ApiTypeFichierInsertData;
+import com.megatim.fdxcommons.tools.database.queries.metadata.ApiUpdateTypeFichierData;
+import com.megatim.fdxcommons.tools.database.queries.metadata.FdxParsedData;
+import com.megatim.fdxcommons.tools.database.queries.metadata.FdxParsedDataRow;
+import com.megatim.fdxcommons.tools.database.queries.metadata.FdxTableDefinition;
+import com.megatim.fdxcommons.tools.database.queries.metadata.ParsedQueryCriterion;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.TokenColumnDefinition;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class FdxApiTable extends FdxTable {
+
+    public FdxApiTable(String codeTypeFichier, String referentielVersion) {
+        super(codeTypeFichier, referentielVersion);
+    }
+
+    @Override
+    public void createTable(List<ColumnDefinition> columnsDefinition, Connection connection) throws NamingException, SQLException, Exception {
+        new CreateTableIfNotExistQuery(tableName, columnsDefinition, new FdxApiColumnDefinitions(), connection).execute();
+    }
+
+    @Override
+    public void deleteOne(QueryCriterion queryCriterion, CommonDataProduction dataProduction, Connection connection) throws TypeFichierDataBadRequest, SQLException, NamingException, Exception {
+
+        stopIfTableIsReferentiel(connection);
+
+        ParsedQueryCriterion parsedQueryCriterion = parsedQueryCriterion(queryCriterion, connection);
+
+        stopIfTableDataNotFound(parsedQueryCriterion, connection);
+
+        processDelete(parsedQueryCriterion.parsedCriterion(), dataProduction, connection);
+
+    }
+
+    @Override
+    public void updateOne(Map<String, Object> dataToUpdate, QueryCriterion queryCriterion, CommonDataProduction dataProduction, Connection connection)
+            throws TypeFichierDataBadRequest, SQLException, NamingException, Exception {
+
+        stopIfTableIsReferentiel(connection);
+
+        ParsedQueryCriterion parsedQueryCriteria = parsedQueryCriterion(queryCriterion, connection);
+
+        stopIfTableDataNotFound(parsedQueryCriteria, connection);
+        stopIfNotOneTableDataFound(parsedQueryCriteria, connection);
+
+        processUpdate(dataToUpdate, parsedQueryCriteria.parsedCriterion(), dataProduction, connection);
+
+    }
+
+    @Override
+    public void update(Map<String, Object> dataToUpdate, QueryCriterion queryCriterion, CommonDataProduction dataProduction, Connection connection) throws TypeFichierDataBadRequest, SQLException, NamingException, Exception {
+
+        stopIfTableIsReferentiel(connection);
+
+        ParsedQueryCriterion parsedQueryCriterion = parsedQueryCriterion(queryCriterion, connection);
+
+        stopIfTableDataNotFound(parsedQueryCriterion, connection);
+
+        processUpdate(dataToUpdate, parsedQueryCriterion.parsedCriterion(), dataProduction, connection);
+
+    }
+
+    public void insert(List<LinkedHashMap<String, Object>> originalData, Long dataProductionId, Connection connection) throws TypeFichierDataBadRequest, SQLException, NamingException, Exception {
+        FdxParsedData fdxParsedData = new FdxParsedData(originalData, tableDefinition(connection).tableDefinition());
+        TypeFichierInsertMetaData insertMetaData = new ApiTypeFichierInsertData(tableName.name(connection), fdxParsedData);
+        new FdxApiInsert(connection, dataProductionId).insert(insertMetaData);
+    }
+
+    public void insert(List<LinkedHashMap<String, Object>> originalData, String token, Connection connection) throws TypeFichierDataBadRequest, SQLException, NamingException, Exception {
+        FdxParsedData fdxParsedData = new FdxParsedData(originalData, tableDefinition(connection).tableDefinition());
+        TypeFichierInsertMetaData insertMetaData = new ApiTypeFichierInsertData(tableName.name(connection), fdxParsedData);
+        new FdxApiInsert(connection, null).insert(insertMetaData, token);
+    }
+
+    public void linkDataWithTokenToDataProduction(CommonDataProduction dataProduction, String token, Connection connection) throws Exception {
+        new DataWithTokenToDataProductionQuery(connection, dataProduction, token, tableName.name(connection)).execute();
+    }
+
+    public void deleteDataLinkedToToken(String token, Connection connection) throws TypeFichierDataBadRequest, SQLException, NamingException, Exception {
+        ParsedQueryCriterion parsedQueryCriterion = parsedQueryCriterion(new QueryCriterion(new TokenColumnDefinition().name(), token, Operateur.EQUALS, null, Arrays.asList()), connection);
+        processPermanentDelete(parsedQueryCriterion.parsedCriterion(), connection);
+    }
+
+    private void processUpdate(Map<String, Object> dataToUpdate, QueryCriterion queryCriterion, CommonDataProduction dataProduction, Connection connection) throws NamingException, Exception, SQLException {
+        FdxTableDefinition tableDefinition = tableDefinition(connection);
+
+        FdxParsedDataRow parsedDataRow = new FdxParsedDataRow(dataToUpdate, tableDefinition.tableDefinition());
+        TypeFichierUpdateMetaData updateMetaData = new ApiUpdateTypeFichierData(tableName.name(connection), parsedDataRow);
+        new FdxUpdate(connection, parsedQueryCriterion(queryCriterion, connection).parsedCriterion(), updateMetaData, dataProduction).update();
+    }
+
+    private void stopIfTableDataNotFound(ParsedQueryCriterion parsedQueryCriterion, Connection connection) throws TableDataNotFoundException, Exception {
+        Long count = count(parsedQueryCriterion.parsedCriterion(), connection);
+        if (count == 0) {
+            throw new TableDataNotFoundException("Aucune valeur trouvée dans la table pour les critères indiqués");
+        }
+    }
+
+    private void stopIfNotOneTableDataFound(ParsedQueryCriterion parsedQueryCriterion, Connection connection) throws TableDataNotFoundException, Exception {
+        Long count = count(parsedQueryCriterion.parsedCriterion(), connection);
+        if (count != 1) {
+            throw new MoreThanOneTableDataNotFoundException("Plus d'une ligne trouvée dans la table pour les critères indiqués");
+        }
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxConsultationTable.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxConsultationTable.java
new file mode 100644
index 0000000..d35c566
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxConsultationTable.java
@@ -0,0 +1,96 @@
+package com.megatim.fdxcommons.tools.database.tables;
+
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.FdxConsultationColumnDefinitions;
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierDataRow;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierInsertMetaData;
+import com.megatim.fdxcommons.tools.database.exceptions.TypeFichierDataBadRequest;
+import com.megatim.fdxcommons.tools.database.queries.CreateTableIfNotExistQuery;
+import com.megatim.fdxcommons.tools.database.queries.DeleteTableDataQuery;
+import com.megatim.fdxcommons.tools.database.queries.FdxConsultationInsert;
+import com.megatim.fdxcommons.tools.database.queries.metadata.ConsultationTypeFichierInsertData;
+import com.megatim.fdxcommons.tools.database.queries.metadata.DefaultTypeFichierDataRow;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionIdColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionUpdateIdColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.EnCoursProductionColumnDefinition;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.naming.NamingException;
+import javax.transaction.Transactional;
+
+/**
+ *
+ * @author ASUS
+ */
+public class FdxConsultationTable extends FdxTable {
+
+    public FdxConsultationTable(String codeTypeFichier, String referentielVersion) {
+        super(codeTypeFichier, referentielVersion);
+    }
+
+    @Override
+    @Transactional
+    public synchronized void createTable(List<ColumnDefinition> columnsDefinition, Connection connection) throws NamingException, SQLException, Exception {
+        new CreateTableIfNotExistQuery(tableName, columnsDefinition, new FdxConsultationColumnDefinitions(), connection).execute();
+    }
+
+    public synchronized long insert(List<FdxTableRow> originalData, Long dataProductionId, Connection connection) throws TypeFichierDataBadRequest, SQLException, NamingException, Exception {
+        if (originalData != null && !originalData.isEmpty()) {
+            List<TypeFichierDataRow> rows = new ArrayList<>();
+            originalData.stream().forEach(row -> {
+                Map<String, Object> entity = new HashMap<>();
+                row.getDataColumns().stream().forEach(cd -> {
+                    entity.put(cd.getName(), cd.getValue());
+                });
+                rows.add(new DefaultTypeFichierDataRow(entity));
+            });
+
+            TypeFichierInsertMetaData insertMetaData = new ConsultationTypeFichierInsertData(rows, tableName.name(connection));
+            return new FdxConsultationInsert(connection, dataProductionId).insert(insertMetaData);
+
+        } else {
+            return -1;
+        }
+    }
+
+    public void removeUnCompleteData(Connection connection, Long dataProductionId) throws SQLException, Exception {
+
+        QueryCriterion criterion = new QueryCriterion(null, null, null, CriteriaLogicConnector.AND,
+                Arrays.asList(
+                        new QueryCriterion(new EnCoursProductionColumnDefinition().name(), true, Operateur.EQUALS, null,
+                                Arrays.asList(
+                                        new QueryCriterion(null, null, null, CriteriaLogicConnector.OR,
+                                                Arrays.asList(
+                                                        new QueryCriterion(new DataProductionIdColumnDefinition().name(), dataProductionId, Operateur.EQUALS, null, Arrays.asList()),
+                                                        new QueryCriterion(new DataProductionUpdateIdColumnDefinition().name(), dataProductionId, Operateur.EQUALS, null, Arrays.asList())
+                                                )
+                                        )
+                                )
+                        )
+                )
+        );
+
+        new DeleteTableDataQuery(tableName.name(connection), connection, criterion).execute();
+    }
+
+    @Override
+    public synchronized void deleteOne(QueryCriterion queryCriterion, CommonDataProduction dataProduction, Connection connection) throws TypeFichierDataBadRequest, SQLException, NamingException, Exception {
+    }
+
+    @Override
+    public synchronized void updateOne(Map<String, Object> dataToUpdate, QueryCriterion queryCriterion, CommonDataProduction dataProduction, Connection connection) throws TypeFichierDataBadRequest, SQLException, NamingException, Exception {
+    }
+
+    @Override
+    public synchronized void update(Map<String, Object> dataToUpdate, QueryCriterion queryCriterion, CommonDataProduction dataProduction, Connection connection) throws TypeFichierDataBadRequest, SQLException, NamingException, Exception {
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTable.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTable.java
new file mode 100644
index 0000000..9769e9a
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTable.java
@@ -0,0 +1,251 @@
+package com.megatim.fdxcommons.tools.database.tables;
+
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import com.megatim.fdxcommons.tools.database.queries.*;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionIdColumnDefinition;
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.FonctionAggregation;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.tools.database.contrat.AppColumnDefinition;
+import com.megatim.fdxcommons.tools.database.contrat.TableName;
+import com.megatim.fdxcommons.tools.database.exceptions.TableNotCummulativeException;
+import com.megatim.fdxcommons.tools.database.exceptions.TypeFichierDataBadRequest;
+import com.megatim.fdxcommons.tools.database.queries.metadata.FdxTableDefinition;
+import com.megatim.fdxcommons.tools.database.queries.metadata.ParsedQueryCriterion;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.queries.metadata.SelectQueryResult;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author ASUS
+ */
+public abstract class FdxTable {
+
+    protected final TableName tableName;
+    protected final String codeTypeFichier;
+    protected final String referentielVersion;
+
+    protected FdxTable(String codeTypeFichier, String referentielVersion) {
+        this.tableName = new FdxTableName(referentielVersion, codeTypeFichier);
+        this.codeTypeFichier = codeTypeFichier;
+        this.referentielVersion = referentielVersion;
+    }
+
+    public boolean checkIfTableExists(Connection connection) throws SQLException {
+        return new TableDefinitionQueries(tableName.name(connection), connection).tableExists();
+    }
+
+    public boolean checkIfConstraintExists(Connection connection) throws SQLException {
+        final String name = tableName.name(connection);
+        String constraintName = name + "_pkey";
+        return new TableDefinitionQueries(tableName.name(connection), connection).constraintExists(constraintName);
+    }
+
+    public boolean checkIfColumnExists(Connection connection, String columnName) throws SQLException {
+        return new TableDefinitionQueries(tableName.name(connection), connection).columnExists(columnName);
+    }
+
+    public void addAppColumn(Connection connection, AppColumnDefinition appColumn) throws SQLException {
+        new TableDefinitionQueries(tableName.name(connection), connection).addAppColumn(appColumn);
+    }
+
+    public void dropAppColumn(Connection connection, AppColumnDefinition appColumn) throws SQLException {
+        new TableDefinitionQueries(tableName.name(connection), connection).dropAppColumn(appColumn);
+    }
+
+    public void dropPkConstraint(Connection connection) throws SQLException {
+        final String name = tableName.name(connection);
+        String constraintName = name + "_pkey";
+        new TableDefinitionQueries(name, connection).dropConstraint(constraintName);
+    }
+
+    public void addPkConstraint(Connection connection) throws SQLException {
+        final String name = tableName.name(connection);
+        String constraintName = name + "_pkey";
+        new TableDefinitionQueries(name, connection).addPkConstraint(constraintName);
+    }
+
+    public FdxTableColumns tableColumns(Connection connection) {
+        return new FdxTableColumns(tableName, connection);
+    }
+
+    public FdxTableDefinition tableDefinition(Connection connection) {
+        return new FdxTableDefinition(referentielVersion, codeTypeFichier, connection);
+    }
+
+    public String latestDataProductionToken(Connection connection) throws SQLException {
+        return new LatestDataProductionTokenQuery(connection, referentielVersion, codeTypeFichier).execute();
+    }
+
+    public synchronized SelectQueryResult selectResult(QueryCriterion queryCriterion, Connection connection) throws NamingException, SQLException, Exception {
+        QueryCriterion finalCriterion = tableDefinition(connection).isReferentiel()
+                ? addLatestDataProductionCriterion(queryCriterion, connection)
+                : queryCriterion;
+        SelectQueryResult result = new SelectQuery(tableName.name(connection), connection, parsedQueryCriterion(finalCriterion, connection).parsedCriterion(), Arrays.asList(), false).execute();
+        setToken(connection, result);
+
+        return result;
+    }
+
+    public synchronized SelectQueryResult selectResult(Connection connection, Long dataProductionId) throws NamingException, SQLException, Exception {
+        QueryCriterion queryCriterion = new QueryCriterion(new DataProductionIdColumnDefinition().name(),
+                dataProductionId,
+                Operateur.EQUALS,
+                CriteriaLogicConnector.AND,
+                Arrays.asList());
+        SelectQueryResult result = new SelectQuery(tableName.name(connection), connection, queryCriterion, Arrays.asList(), false).execute();
+        setToken(connection, result);
+
+        return result;
+    }
+
+    public synchronized SelectQueryResult selectResultWithAllColumns(QueryCriterion queryCriterion, Connection connection) throws NamingException, SQLException, Exception {
+        QueryCriterion finalCriterion = tableDefinition(connection).isReferentiel()
+                ? addLatestDataProductionCriterion(queryCriterion, connection)
+                : queryCriterion;
+        SelectQueryResult result = new SelectQuery(tableName.name(connection), connection, parsedQueryCriterion(finalCriterion, connection).parsedCriterion(), Arrays.asList(), true).execute();
+        setToken(connection, result);
+
+        return result;
+    }
+
+    public synchronized SelectQueryResult selectResult(QueryCriterion queryCriterion, Connection connection, int limit, int offset) throws NamingException, SQLException, Exception {
+        QueryCriterion finalCriterion = tableDefinition(connection).isReferentiel()
+                ? addLatestDataProductionCriterion(queryCriterion, connection)
+                : queryCriterion;
+        SelectQueryResult result = new SelectQuery(tableName.name(connection), connection, parsedQueryCriterion(finalCriterion, connection).parsedCriterion(), Arrays.asList(), limit, offset, false).execute();
+        setToken(connection, result);
+
+        return result;
+    }
+
+    public synchronized SelectQueryResult selectResultRegardlessOfNatureProduction(QueryCriterion queryCriterion, Connection connection) throws NamingException, SQLException, Exception {
+        SelectQueryResult result = new SelectQuery(tableName.name(connection), connection, parsedQueryCriterion(queryCriterion, connection).parsedCriterion(), Arrays.asList(), true).execute();
+        setToken(connection, result);
+
+        return result;
+    }
+
+    public synchronized Long countRegardlessOfNatureProduction(QueryCriterion queryCriterion, Connection connection) throws NamingException, SQLException, Exception {
+        List<String[]> results = new CountQuery(
+                tableName.name(connection),
+                connection,
+                parsedQueryCriterion(queryCriterion, connection).parsedCriterion(),
+                Arrays.asList()
+        ).execute();
+        return !results.isEmpty()
+                ? Long.valueOf(results.get(0)[0])
+                : 0;
+    }
+
+    public synchronized Long count(QueryCriterion queryCriterion, Connection connection) throws NamingException, SQLException, Exception {
+        QueryCriterion finalCriterion = tableDefinition(connection).isReferentiel()
+                ? addLatestDataProductionCriterion(queryCriterion, connection)
+                : queryCriterion;
+        List<String[]> results = new CountQuery(
+                tableName.name(connection),
+                connection,
+                parsedQueryCriterion(finalCriterion, connection).parsedCriterion(),
+                Arrays.asList()
+        ).execute();
+        return !results.isEmpty()
+                ? Long.valueOf(results.get(0)[0])
+                : 0;
+    }
+
+    public synchronized List<String[]> count(QueryCriterion queryCriterion, Connection connection, List<String> groupingColumns) throws NamingException, SQLException, Exception {
+        QueryCriterion finalCriterion = tableDefinition(connection).isReferentiel()
+                ? addLatestDataProductionCriterion(queryCriterion, connection)
+                : queryCriterion;
+        return new CountQuery(
+                tableName.name(connection),
+                connection,
+                parsedQueryCriterion(finalCriterion, connection).parsedCriterion(),
+                groupingColumns
+        ).execute();
+    }
+
+    public synchronized List<String[]> aggregate(Connection connection, String targetColumn, List<String> groupingColumns, FonctionAggregation fonctionAggregation, QueryCriterion queryCriterion) throws NamingException, SQLException, Exception {
+        return new AggregationQuery(
+                tableName.name(connection),
+                connection,
+                parsedQueryCriterion(queryCriterion, connection).parsedCriterion(),
+                targetColumn,
+                groupingColumns,
+                fonctionAggregation
+        ).execute();
+    }
+
+    public synchronized void delete(QueryCriterion queryCriterion, CommonDataProduction dataProduction, Connection connection) throws TypeFichierDataBadRequest, SQLException, NamingException, Exception {
+
+        stopIfTableIsReferentiel(connection);
+
+        ParsedQueryCriterion parsedQueryCriterion = parsedQueryCriterion(queryCriterion, connection);
+
+        processDelete(parsedQueryCriterion.parsedCriterion(), dataProduction, connection);
+
+    }
+
+    public ParsedQueryCriterion parsedQueryCriterion(QueryCriterion queryCriterion, Connection connection) throws NamingException, SQLException {
+        return new ParsedQueryCriterion(queryCriterion, tableColumns(connection), tableDefinition(connection).tableDefinition().getColumnDefinitions());
+    }
+
+    protected void processDelete(QueryCriterion queryCriterion, CommonDataProduction dataProduction, Connection connection) throws NamingException, Exception, SQLException {
+        new DeleteQuery(tableName.name(connection), connection, parsedQueryCriterion(queryCriterion, connection).parsedCriterion(), dataProduction).execute();
+    }
+
+    protected void processPermanentDelete(QueryCriterion queryCriterion, Connection connection) throws NamingException, Exception, SQLException {
+        new PermanentDeleteQuery(tableName.name(connection), connection, parsedQueryCriterion(queryCriterion, connection).parsedCriterion()).execute();
+    }
+
+    protected void stopIfTableIsReferentiel(Connection connection) throws SQLException, NamingException, TableNotCummulativeException {
+        if (tableDefinition(connection).isReferentiel()) {
+            throw new TableNotCummulativeException("Opération non autorisée car la table est référentielle");
+        }
+    }
+
+    public abstract void createTable(List<ColumnDefinition> columnsDefinition, Connection connection) throws NamingException, SQLException, Exception;
+
+    public abstract void deleteOne(QueryCriterion queryCriterion, CommonDataProduction dataProduction, Connection connection) throws TypeFichierDataBadRequest, SQLException, NamingException, Exception;
+
+    public abstract void updateOne(Map<String, Object> dataToUpdate, QueryCriterion queryCriterion, CommonDataProduction dataProduction, Connection connection) throws TypeFichierDataBadRequest, SQLException, NamingException, Exception;
+
+    public abstract void update(Map<String, Object> dataToUpdate, QueryCriterion queryCriterion, CommonDataProduction dataProduction, Connection connection) throws TypeFichierDataBadRequest, SQLException, NamingException, Exception;
+
+    public TableName getTableName() {
+        return tableName;
+    }
+
+    private QueryCriterion addLatestDataProductionCriterion(QueryCriterion queryCriterion, Connection connection) throws SQLException {
+        Long latestDataProductionId = new MaxDataProductionIdQuery(tableName.name(connection), connection).execute();
+        if (latestDataProductionId > 0) {
+
+            return new QueryCriterion(null,
+                    null,
+                    null,
+                    CriteriaLogicConnector.AND,
+                    Arrays.asList(queryCriterion,
+                            new QueryCriterion(new DataProductionIdColumnDefinition().name(),
+                                    latestDataProductionId,
+                                    Operateur.EQUALS,
+                                    null,
+                                    Arrays.asList())
+                    )
+            );
+        } else {
+            return queryCriterion;
+        }
+    }
+
+    private void setToken(Connection connection, SelectQueryResult result) throws SQLException {
+        String token = latestDataProductionToken(connection);
+        result.setToken(token);
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTableColumn.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTableColumn.java
new file mode 100644
index 0000000..d099b95
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTableColumn.java
@@ -0,0 +1,36 @@
+package com.megatim.fdxcommons.tools.database.tables;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class FdxTableColumn {
+
+    private final String name;
+    private final int type;
+    private final int position;
+    private final int size;
+
+    public FdxTableColumn(String name, int type, int position, int size) {
+        this.name = name;
+        this.type = type;
+        this.position = position;
+        this.size = size;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public int getType() {
+        return type;
+    }
+
+    public int getPosition() {
+        return position;
+    }
+
+    public int getSize() {
+        return size;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTableColumnData.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTableColumnData.java
new file mode 100644
index 0000000..8484eff
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTableColumnData.java
@@ -0,0 +1,31 @@
+package com.megatim.fdxcommons.tools.database.tables;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class FdxTableColumnData {
+
+    private final Object value;
+    private final String name;
+    private final int position;
+
+    public FdxTableColumnData(Object value, String name, int position) {
+        this.value = value;
+        this.name = name;
+        this.position = position;
+    }
+
+    public Object getValue() {
+        return value;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public int getPosition() {
+        return position;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTableColumns.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTableColumns.java
new file mode 100644
index 0000000..516480a
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTableColumns.java
@@ -0,0 +1,54 @@
+package com.megatim.fdxcommons.tools.database.tables;
+
+import com.megatim.fdxcommons.tools.exceptions.FdxColumnNotFoundException;
+import com.megatim.fdxcommons.tools.database.contrat.TableName;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class FdxTableColumns {
+
+    private final TableName tableName;
+    private final Connection connection;
+    private final List<FdxTableColumn> fdxTableColumns = new ArrayList<>();
+
+    public FdxTableColumns(TableName tableName, Connection connection) {
+        this.tableName = tableName;
+        this.connection = connection;
+    }
+
+    public List<FdxTableColumn> columns() throws SQLException, NamingException {
+        if (fdxTableColumns.isEmpty()) {
+            DatabaseMetaData metaData = connection.getMetaData();
+            ResultSet columns = metaData.getColumns(null, null, tableName.name(connection), null);
+            while (columns.next()) {
+                String name = columns.getString("COLUMN_NAME");
+                int type = columns.getInt("DATA_TYPE");
+                int position = columns.getInt("ORDINAL_POSITION");
+                int size = columns.getInt("COLUMN_SIZE");
+                fdxTableColumns.add(new FdxTableColumn(name, type, position, size));
+            }
+
+            Collections.sort(fdxTableColumns, (c1, c2) -> Integer.valueOf(c1.getPosition()).compareTo(c2.getPosition()));
+        }
+        return fdxTableColumns;
+    }
+
+    public FdxTableColumn column(String name) throws FdxColumnNotFoundException, SQLException, NamingException {
+        return columns()
+                .stream()
+                .filter(c -> c.getName().equals(name))
+                .findFirst()
+                .orElseThrow(() -> new FdxColumnNotFoundException("Colonne introuvable dans la table"));
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTableName.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTableName.java
new file mode 100644
index 0000000..e18338d
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTableName.java
@@ -0,0 +1,89 @@
+package com.megatim.fdxcommons.tools.database.tables;
+
+import com.megatim.fdxcommons.tools.database.contrat.TableName;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Objects;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class FdxTableName implements TableName {
+
+    private final String referentielVersion;
+    private final String codeTypeFichier;
+    private String refVersionToUse = null;
+
+    public FdxTableName(String referentielVersion, String codeTypeFichier) {
+        this.referentielVersion = referentielVersion;
+        this.codeTypeFichier = codeTypeFichier;
+    }
+
+    @Override
+    public String name(Connection connection) throws SQLException {
+        if (refVersionToUse == null) {
+            refVersionToUse(connection);
+        }
+        return refVersionToUse != null && !refVersionToUse.isEmpty()
+                ? "ref" + refVersionToUse.toLowerCase() + "_" + codeTypeFichier.toLowerCase()
+                : "ref" + referentielVersion.toLowerCase() + "_" + codeTypeFichier.toLowerCase();
+    }
+
+    private void refVersionToUse(Connection connection) throws SQLException {
+
+        try ( PreparedStatement statement = connection.prepareStatement(query())) {
+            ResultSet resultSet = statement.executeQuery();
+
+            while (resultSet.next()) {
+                refVersionToUse = resultSet.getString(1);
+            }
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final FdxTableName other = (FdxTableName) obj;
+
+        if (refVersionToUse != null && other.getRefVersionToUse() != null) {
+            return refVersionToUse.equals(other.getRefVersionToUse());
+        } else {
+            return false;
+        }
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 3;
+        hash = 79 * hash + Objects.hashCode(this.referentielVersion);
+        hash = 79 * hash + Objects.hashCode(this.codeTypeFichier);
+        return hash;
+    }
+
+    public String getRefVersionToUse() {
+        return refVersionToUse;
+    }
+
+    private String query() {
+        return "SELECT DISTINCT r.referentielVersion"
+                + " FROM referentielIntegrationHistorique r"
+                + " JOIN ref_int_historique_depending_refs rd"
+                + " ON r.codetypefichier = rd.codetypefichier"
+                + " AND  r.referentielVersion = rd.referentielVersion"
+                + " WHERE rd.dependingreferentiels = '" + referentielVersion + "'"
+                + " AND r.codetypefichier = '" + codeTypeFichier + "'";
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTableRow.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTableRow.java
new file mode 100644
index 0000000..d2b0d3f
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/FdxTableRow.java
@@ -0,0 +1,27 @@
+package com.megatim.fdxcommons.tools.database.tables;
+
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class FdxTableRow {
+
+    final long number;
+    final List<FdxTableColumnData> dataColumns;
+
+    public FdxTableRow(long number, List<FdxTableColumnData> dataColumns) {
+        this.number = number;
+        this.dataColumns = dataColumns;
+    }
+
+    public long getNumber() {
+        return number;
+    }
+
+    public List<FdxTableColumnData> getDataColumns() {
+        return dataColumns;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/JpqlTable.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/JpqlTable.java
new file mode 100644
index 0000000..d97292b
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/JpqlTable.java
@@ -0,0 +1,52 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.tables;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.tools.database.tables.dto.JpqlQueryElement;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxcommons.tools.database.queries.jpql.JqplQueryString;
+import com.megatim.fdxcommons.tools.database.queries.metadata.jpql.JpqlParsedQueryCriterion;
+import com.megatim.fdxcommons.tools.database.queries.metadata.jpql.JpqlQueryCriterion;
+import com.megatim.fdxcommons.tools.database.queries.metadata.jpql.JpqlQueryParam;
+import com.megatim.fdxcommons.tools.database.queries.metadata.jpql.JpqlWhereQueryParameters;
+import com.megatim.fdxcommons.tools.utils.CriteriaEntityFromViewToJqplQueryCriterion;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JpqlTable {
+
+    private final CriteriaEntityFromView criterion;
+    private final Class<?> classe;
+
+    public JpqlTable(CriteriaEntityFromView criterion, Class<?> classe) {
+        this.criterion = criterion;
+        this.classe = classe;
+    }
+
+    public JpqlQueryElement selectQuery(List<OrderByDefinition> orderByFields) throws Exception {
+        JpqlQueryCriterion queryCriterion = new JpqlParsedQueryCriterion(new CriteriaEntityFromViewToJqplQueryCriterion(criterion).queryCriterion(), classe)
+                .parsedCriterion();
+
+        List<JpqlQueryParam> params = new JpqlWhereQueryParameters(queryCriterion).parameters();
+        String query = new JqplQueryString(classe.getSimpleName(), queryCriterion).selectQuery(orderByFields);
+
+        return new JpqlQueryElement(query, params);
+
+    }
+
+    public JpqlQueryElement countQuery() throws Exception {
+        JpqlQueryCriterion queryCriterion = new JpqlParsedQueryCriterion(new CriteriaEntityFromViewToJqplQueryCriterion(criterion).queryCriterion(), classe)
+                .parsedCriterion();
+        List<JpqlQueryParam> params = new JpqlWhereQueryParameters(queryCriterion).parameters();
+
+        String query = new JqplQueryString(classe.getSimpleName(), queryCriterion).countQuery();
+        return new JpqlQueryElement(query, params);
+
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/JsonFdxTable.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/JsonFdxTable.java
new file mode 100644
index 0000000..e2e2a38
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/JsonFdxTable.java
@@ -0,0 +1,282 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.tables;
+
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.integration.json.JsonStructure;
+import com.megatim.fdxcommons.model.pojo.JsonTableDefinition;
+import com.megatim.fdxcommons.tools.database.contrat.JsonStructureIterator;
+import com.megatim.fdxcommons.tools.database.contrat.TableName;
+import com.megatim.fdxcommons.tools.database.exceptions.TypeFichierDataBadRequest;
+import com.megatim.fdxcommons.tools.database.queries.CountQuery;
+import com.megatim.fdxcommons.tools.database.queries.JsonCountQuery;
+import com.megatim.fdxcommons.tools.database.queries.JsonSelectQuery;
+import com.megatim.fdxcommons.tools.database.queries.LatestDataProductionTokenQuery;
+import com.megatim.fdxcommons.tools.database.queries.MaxDataProductionIdQuery;
+import com.megatim.fdxcommons.tools.database.queries.metadata.AliasedQueryCriterion;
+import com.megatim.fdxcommons.tools.database.queries.metadata.JsonFdxTableStructure;
+import com.megatim.fdxcommons.tools.database.queries.metadata.JsonParsedQueryCriterion;
+import com.megatim.fdxcommons.tools.database.queries.metadata.JsonSelectQueryResult;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionIdColumnDefinition;
+import com.megatim.fdxcommons.tools.utils.JsonDataUtil;
+import com.megatim.fdxcommons.tools.utils.JsonTableUtil;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author ASUS
+ */
+public abstract class JsonFdxTable {
+
+    protected final TableName tableName;
+    protected final String codeTypeFichier;
+    protected final String referentielVersion;
+    protected final JsonStructure jsonStructure;
+    private final List<Boolean> cachedNatureProduction = new ArrayList<>(1);
+
+    protected JsonFdxTable(String referentielVersion, String codeTypeFichier, JsonStructure jsonStructure) {
+        this.tableName = new FdxTableName(referentielVersion, codeTypeFichier);
+        this.codeTypeFichier = codeTypeFichier;
+        this.referentielVersion = referentielVersion;
+        this.jsonStructure = jsonStructure;
+    }
+
+    public JsonFdxTableStructure jsonStructure(Connection connection) {
+        return new JsonFdxTableStructure(referentielVersion, codeTypeFichier, connection);
+    }
+
+    public JsonSelectQueryResult selectAllAddedAndUpdated(QueryCriterion queryCriterion, Connection connection) throws NamingException, SQLException, Exception {
+        JsonTableDefinition tableDefinition = tableDefinition(connection);
+        Map<String, String> tablesNameToAlias = new HashMap<>();
+
+        String stringTableName = tableName.name(connection);
+        String rootTableAlias = tableAlias(tableDefinition, stringTableName);
+        tablesNameToAlias.put(stringTableName, rootTableAlias);
+
+        QueryCriterion finalCriterion = isReferentiel(connection) ? queryCriterion : addLatestDataProductionCriterion(queryCriterion, rootTableAlias, connection);
+        JsonSelectQueryResult result = new JsonDataUtil().merge(new JsonSelectQuery(tableDefinition, finalCriterion, connection, tablesNameToAlias).execute(), jsonStructure, false);
+        setToken(connection, result);
+
+        return result;
+    }
+
+    private String tableAlias(JsonTableDefinition tableDefinition, String tableName) {
+        Map<String, String> tablesNameToAlias = new JsonTableUtil(tableDefinition).tablesNameToAlias();
+        return tablesNameToAlias.get(tableName);
+    }
+
+    public JsonSelectQueryResult selectResult(QueryCriterion queryCriterion, Connection connection) throws NamingException, SQLException, Exception {
+        JsonTableDefinition tableDefinition = tableDefinition(connection);
+        Map<String, String> tablesNameToAlias = new JsonTableUtil(tableDefinition).tablesNameToAlias();
+        QueryCriterion aliasedQueryCriterion = new AliasedQueryCriterion(tableDefinition, parsedQueryCriterion(queryCriterion, connection).parsedCriterion(), tablesNameToAlias).aliasedQueryCriterion();
+        QueryCriterion finalCriterion = isReferentiel(connection) ? aliasedQueryCriterion : addLatestDataProductionCriterion(aliasedQueryCriterion, tablesNameToAlias.get(tableName.name(connection)), connection);
+
+        JsonSelectQueryResult result = new JsonDataUtil().merge(new JsonSelectQuery(tableDefinition, finalCriterion, connection, tablesNameToAlias).execute(), jsonStructure, false);
+        setToken(connection, result);
+
+//        System.out.println("---------------------------------- final rows---------------------------- lastIndexRead = " + result.lastIndexRead());
+//        for (Map<String, Object> m : result.rows()) {
+//            System.out.println(m);
+//        }
+        return result;
+    }
+
+    public JsonSelectQueryResult selectResult(QueryCriterion queryCriterion, Connection connection, int limit, int offset) throws NamingException, SQLException, Exception {
+        JsonTableDefinition tableDefinition = tableDefinition(connection);
+        Map<String, String> tablesNameToAlias = new JsonTableUtil(tableDefinition).tablesNameToAlias();
+        QueryCriterion aliasedQueryCriterion = new AliasedQueryCriterion(tableDefinition, parsedQueryCriterion(queryCriterion, connection).parsedCriterion(), tablesNameToAlias).aliasedQueryCriterion();
+        QueryCriterion finalCriterion = isReferentiel(connection) ? aliasedQueryCriterion : addLatestDataProductionCriterion(aliasedQueryCriterion, tablesNameToAlias.get(tableName.name(connection)), connection);
+
+        JsonSelectQueryResult result = new JsonDataUtil().merge(new JsonSelectQuery(tableDefinition, finalCriterion, connection, tablesNameToAlias, limit, offset).execute(), jsonStructure, false);
+        setToken(connection, result);
+
+        return result;
+    }
+
+    public JsonSelectQueryResult selectResultWithAllColumns(QueryCriterion queryCriterion, Connection connection) throws NamingException, SQLException, Exception {
+        JsonTableDefinition tableDefinition = tableDefinition(connection);
+        Map<String, String> tablesNameToAlias = new JsonTableUtil(tableDefinition).tablesNameToAlias();
+        QueryCriterion aliasedQueryCriterion = new AliasedQueryCriterion(tableDefinition, parsedQueryCriterion(queryCriterion, connection).parsedCriterion(), tablesNameToAlias).aliasedQueryCriterion();
+        QueryCriterion finalCriterion = isReferentiel(connection) ? aliasedQueryCriterion : addLatestDataProductionCriterion(aliasedQueryCriterion, tablesNameToAlias.get(tableName.name(connection)), connection);
+
+        JsonSelectQueryResult result = new JsonDataUtil().merge(new JsonSelectQuery(tableDefinition, finalCriterion, connection, tablesNameToAlias).execute(), jsonStructure, true);
+        setToken(connection, result);
+
+        return result;
+    }
+
+    /**
+     * Ne compte que les éléments de la table racine
+     *
+     * @param queryCriterion
+     * @param connection
+     * @return
+     * @throws NamingException
+     * @throws SQLException
+     * @throws Exception
+     */
+    public Long count(QueryCriterion queryCriterion, Connection connection) throws NamingException, SQLException, Exception {
+        JsonTableDefinition tableDefinition = tableDefinition(connection);
+        String stringTableName = tableName.name(connection);
+        String rootTableAlias = tableAlias(tableDefinition, stringTableName);
+        Map<String, String> tablesNameToAlias = new JsonTableUtil(tableDefinition).tablesNameToAlias();
+
+        QueryCriterion aliasedQueryCriterion = new AliasedQueryCriterion(tableDefinition, parsedQueryCriterion(queryCriterion, connection).parsedCriterion(), tablesNameToAlias).aliasedQueryCriterion();
+        QueryCriterion finalCriterion = isReferentiel(connection) ? aliasedQueryCriterion : addLatestDataProductionCriterion(aliasedQueryCriterion, rootTableAlias, connection);
+
+        return new JsonCountQuery(tableDefinition,
+                finalCriterion,
+                connection,
+                tablesNameToAlias
+        ).execute();
+    }
+
+    /**
+     *
+     * @param queryCriterion
+     * @param connection
+     * @return
+     * @throws SQLException
+     * @throws NamingException
+     * @throws Exception
+     */
+    public Long countOnAppColumn(QueryCriterion queryCriterion, Connection connection) throws SQLException, NamingException, Exception {
+        JsonTableDefinition tableDefinition = tableDefinition(connection);
+        String stringTableName = tableName.name(connection);
+        String rootTableAlias = tableAlias(tableDefinition, stringTableName);
+        Map<String, String> tablesNameToAlias = new JsonTableUtil(tableDefinition).tablesNameToAlias();
+        QueryCriterion finalCriterion = isReferentiel(connection) ? queryCriterion : addLatestDataProductionCriterion(queryCriterion, rootTableAlias, connection);
+
+        return new JsonCountQuery(
+                tableDefinition,
+                finalCriterion,
+                connection,
+                tablesNameToAlias
+        ).execute();
+    }
+
+    /**
+     * Ne compte que les éléments de la table racine
+     *
+     * @param queryCriterion
+     * @param connection
+     * @return
+     * @throws NamingException
+     * @throws SQLException
+     * @throws Exception
+     */
+    public synchronized Long countRegardlessOfNatureProduction(QueryCriterion queryCriterion, Connection connection) throws NamingException, SQLException, Exception {
+        List<String[]> results = new CountQuery(
+                tableName.name(connection),
+                connection,
+                parsedQueryCriterion(queryCriterion, connection).parsedCriterion(),
+                Arrays.asList()
+        ).execute();
+        return !results.isEmpty()
+                ? Long.valueOf(results.get(0)[0])
+                : 0;
+    }
+
+    public synchronized JsonSelectQueryResult selectResultRegardlessOfNatureProduction(QueryCriterion queryCriterion, Connection connection) throws NamingException, SQLException, Exception {
+        JsonTableDefinition tableDefinition = tableDefinition(connection);
+        Map<String, String> tablesNameToAlias = new JsonTableUtil(tableDefinition).tablesNameToAlias();
+        QueryCriterion aliasedQueryCriterion = new AliasedQueryCriterion(tableDefinition, parsedQueryCriterion(queryCriterion, connection).parsedCriterion(), tablesNameToAlias).aliasedQueryCriterion();
+        JsonSelectQueryResult result = new JsonDataUtil().merge(new JsonSelectQuery(tableDefinition, aliasedQueryCriterion, connection, tablesNameToAlias).execute(), jsonStructure, true);
+
+        setToken(connection, result);
+
+        return result;
+    }
+
+    public JsonFdxTableColumns tableColumns() {
+        return new JsonFdxTableColumns(jsonStructure);
+    }
+
+    public JsonParsedQueryCriterion parsedQueryCriterion(QueryCriterion queryCriterion, Connection connection) throws NamingException, SQLException {
+        return new JsonParsedQueryCriterion(queryCriterion, tableColumns(), new JsonStructureIterator(tableName.name(connection), jsonStructure).columnsDefinitionWithFullQualifiedName());
+    }
+
+    public JsonTableDefinition tableDefinition(Connection connection) throws SQLException {
+        return new JsonStructureIterator(tableName.name(connection), jsonStructure).tableDefinition();
+    }
+
+    public String latestDataProductionToken(Connection connection) throws SQLException {
+        return new LatestDataProductionTokenQuery(connection, referentielVersion, codeTypeFichier).execute();
+    }
+
+    public boolean isReferentiel(Connection connection) throws NamingException, SQLException {
+
+        if (cachedNatureProduction.isEmpty()) {
+
+            String query = "SELECT natureproduction "
+                    + "FROM natureproductionfichier "
+                    + "WHERE typefichier_code = ? AND referentiel_version = ?";
+
+            try ( PreparedStatement statement = connection.prepareStatement(query)) {
+
+                statement.setString(1, codeTypeFichier);
+                statement.setString(2, referentielVersion);
+
+                try ( ResultSet resultSet = statement.executeQuery()) {
+                    if (resultSet.next()) {
+                        cachedNatureProduction.add(resultSet.getString("natureproduction").equals("REFERENTIELLE"));
+                    } else {
+                        cachedNatureProduction.add(Boolean.TRUE);
+                    }
+                }
+            }
+
+        }
+
+        return cachedNatureProduction.get(0);
+    }
+
+    public TableName getTableName() {
+        return tableName;
+    }
+
+    public abstract void createTable(Connection connection) throws NamingException, SQLException, Exception;
+
+    public abstract void update(LinkedHashMap<String, Object> dataToUpdate, QueryCriterion queryCriterion, CommonDataProduction dataProduction, Connection connection) throws TypeFichierDataBadRequest, SQLException, NamingException, Exception;
+
+    private QueryCriterion addLatestDataProductionCriterion(QueryCriterion queryCriterion, String rootTableAlias, Connection connection) throws SQLException {
+        Long latestDataProductionId = new MaxDataProductionIdQuery(tableName.name(connection), connection).execute();
+
+        if (latestDataProductionId > 0) {
+
+            return new QueryCriterion(null,
+                    null,
+                    null,
+                    CriteriaLogicConnector.AND,
+                    Arrays.asList(queryCriterion,
+                            new QueryCriterion(rootTableAlias.isEmpty() ? "" : rootTableAlias + "." + new DataProductionIdColumnDefinition().name(),
+                                    latestDataProductionId,
+                                    Operateur.EQUALS,
+                                    null,
+                                    Arrays.asList()))
+            );
+        } else {
+            return queryCriterion;
+        }
+    }
+
+    private void setToken(Connection connection, JsonSelectQueryResult result) throws SQLException {
+        String token = latestDataProductionToken(connection);
+        result.setToken(token);
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/JsonFdxTableColumns.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/JsonFdxTableColumns.java
new file mode 100644
index 0000000..f015567
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/JsonFdxTableColumns.java
@@ -0,0 +1,114 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.tables;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import static com.megatim.fdxcommons.model.enumeration.TypeDonnee.ALPHANUMERIQUE;
+import static com.megatim.fdxcommons.model.enumeration.TypeDonnee.DATE;
+import static com.megatim.fdxcommons.model.enumeration.TypeDonnee.DECIMAL;
+import static com.megatim.fdxcommons.model.enumeration.TypeDonnee.NUMERIQUE;
+import com.megatim.fdxcommons.model.integration.json.JsonStructure;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionIdColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionUpdateIdColumnDefinition;
+import java.sql.JDBCType;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonFdxTableColumns {
+
+    private final JsonStructure jsonStructure;
+
+    public JsonFdxTableColumns(JsonStructure jsonStructure) {
+        this.jsonStructure = jsonStructure;
+    }
+
+    public List<FdxTableColumn> columns() {
+        List<FdxTableColumn> columns = new ArrayList<>();
+
+        for (JsonStructure j : jsonStructure.getFields()) {
+            if (j.getTypeDonnee().equals(TypeDonnee.OBJET)) {
+                columns.addAll(columns(j.getFields(), j.getName()));
+            } else {
+                columns.add(new FdxTableColumn(j.getName(), dataType(jdbcType(j.getTypeDonnee(), j.getLengthh())), 0, j.getLengthh()));
+            }
+        }
+        addAppColumns(columns);
+        return columns;
+    }
+
+    public JsonStructure getJsonStructure() {
+        return jsonStructure;
+    }
+
+    private void addAppColumns(List<FdxTableColumn> columns) {
+        //Add dataProductionId column because it is used in query
+        DataProductionIdColumnDefinition dataProdColumn = new DataProductionIdColumnDefinition();
+        columns.add(new FdxTableColumn(dataProdColumn.name(), dataType(dataProdColumn.type()), 0, 18));
+
+        //Add dataProductionId column because it is used in query
+        DataProductionUpdateIdColumnDefinition dataProdUpdateColumn = new DataProductionUpdateIdColumnDefinition();
+        columns.add(new FdxTableColumn(dataProdUpdateColumn.name(), dataType(dataProdUpdateColumn.type()), 0, 18));
+    }
+
+    private List<FdxTableColumn> columns(List<JsonStructure> fields, String initialName) {
+        List<FdxTableColumn> columns = new ArrayList<>();
+        initialName += ".";
+
+        for (JsonStructure field : fields) {
+            if (field.getTypeDonnee().equals(TypeDonnee.OBJET)) {
+                columns.addAll(columns(field.getFields(), initialName + field.getName()));
+            } else {
+                columns.add(new FdxTableColumn(initialName + field.getName(), dataType(jdbcType(field.getTypeDonnee(), field.getLengthh())), 0, field.getLengthh()));
+            }
+        }
+        return columns;
+    }
+
+    private JDBCType jdbcType(TypeDonnee typeDonnee, int lengthh) {
+        switch (typeDonnee) {
+            case NUMERIQUE:
+                return lengthh < 5 ? JDBCType.SMALLINT : JDBCType.BIGINT;
+            case DECIMAL:
+                return JDBCType.DECIMAL;
+            case DATE:
+                return JDBCType.TIMESTAMP;
+            case ALPHANUMERIQUE:
+                return JDBCType.VARCHAR;
+        }
+        return null;
+    }
+
+    private int dataType(JDBCType jdbcType) {
+        switch (jdbcType) {
+            case SMALLINT:
+                return 5;
+            case BIGINT:
+                return -5;
+            case DECIMAL:
+                return 3;
+            case TIMESTAMP:
+                return 93;
+        }
+        return 0;
+    }
+
+    private int dataType(String jdbcType) {
+        switch (jdbcType) {
+            case "SMALLINT":
+                return 5;
+            case "BIGINT":
+                return -5;
+            case "DECIMAL":
+                return 3;
+            case "TIMESTAMP":
+                return 93;
+        }
+        return 0;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/AppColumnDefinitions.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/AppColumnDefinitions.java
new file mode 100644
index 0000000..fd543de
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/AppColumnDefinitions.java
@@ -0,0 +1,42 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.tables.appcolumns;
+
+import com.megatim.fdxcommons.tools.database.contrat.AppColumnDefinition;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public class AppColumnDefinitions {
+
+    protected List<AppColumnDefinition> appColumnDefinitions;
+
+    public List<AppColumnDefinition> appColumns() {
+        return appColumnDefinitions;
+    }
+
+    public boolean isDateCreationColumn(String name) {
+        return new DateCreationColumnDefinition().name().equals(name);
+    }
+
+    public boolean isIndexColumn(String name) {
+        return new IndexColumnDefinition().name().equals(name);
+    }
+
+    public boolean isParentIdColumn(String name) {
+        return new ParentIdColumnDefinition().name().equals(name);
+    }
+
+    public boolean isAppColumnDefinition(String name) {
+        return appColumnDefinitions
+                .stream()
+                .filter(c -> c.name().equals(name))
+                .findAny()
+                .isPresent();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/DataProductionIdColumnDefinition.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/DataProductionIdColumnDefinition.java
new file mode 100644
index 0000000..19d0e05
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/DataProductionIdColumnDefinition.java
@@ -0,0 +1,31 @@
+package com.megatim.fdxcommons.tools.database.tables.appcolumns;
+
+import com.megatim.fdxcommons.tools.database.contrat.AppColumnDefinition;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class DataProductionIdColumnDefinition implements AppColumnDefinition {
+
+    @Override
+    public String name() {
+        return "fdx_data_production_id";
+    }
+
+    @Override
+    public String type() {
+        return "BIGINT";
+    }
+
+    @Override
+    public boolean isNull() {
+        return false;
+    }
+
+    @Override
+    public Object defaultValue() {
+        return null;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/DataProductionUpdateIdColumnDefinition.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/DataProductionUpdateIdColumnDefinition.java
new file mode 100644
index 0000000..78094b1
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/DataProductionUpdateIdColumnDefinition.java
@@ -0,0 +1,34 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.tables.appcolumns;
+
+import com.megatim.fdxcommons.tools.database.contrat.AppColumnDefinition;
+
+/**
+ *
+ * @author ASUS
+ */
+public class DataProductionUpdateIdColumnDefinition implements AppColumnDefinition {
+
+    @Override
+    public String name() {
+        return "fdx_data_production_update_id";
+    }
+
+    @Override
+    public String type() {
+        return "BIGINT";
+    }
+
+    @Override
+    public boolean isNull() {
+        return true;
+    }
+
+    @Override
+    public Object defaultValue() {
+        return null;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/DateCreationColumnDefinition.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/DateCreationColumnDefinition.java
new file mode 100644
index 0000000..e3fcc01
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/DateCreationColumnDefinition.java
@@ -0,0 +1,31 @@
+package com.megatim.fdxcommons.tools.database.tables.appcolumns;
+
+import com.megatim.fdxcommons.tools.database.contrat.AppColumnDefinition;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class DateCreationColumnDefinition implements AppColumnDefinition {
+
+    @Override
+    public String name() {
+        return "fdx_date_creation";
+    }
+
+    @Override
+    public String type() {
+        return "TIMESTAMP";
+    }
+
+    @Override
+    public boolean isNull() {
+        return true;
+    }
+
+    @Override
+    public Object defaultValue() {
+        return null;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/DateMiseAJourColumnDefinition.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/DateMiseAJourColumnDefinition.java
new file mode 100644
index 0000000..fd7518a
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/DateMiseAJourColumnDefinition.java
@@ -0,0 +1,34 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.tables.appcolumns;
+
+import com.megatim.fdxcommons.tools.database.contrat.AppColumnDefinition;
+
+/**
+ *
+ * @author ASUS
+ */
+public class DateMiseAJourColumnDefinition  implements AppColumnDefinition {
+
+    @Override
+    public String name() {
+        return "fdx_date_mise_a_jour";
+    }
+
+    @Override
+    public String type() {
+        return "TIMESTAMP";
+    }
+
+    @Override
+    public boolean isNull() {
+        return true;
+    }
+
+    @Override
+    public Object defaultValue() {
+        return null;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/DeletedColumnDefinition.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/DeletedColumnDefinition.java
new file mode 100644
index 0000000..b23fccb
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/DeletedColumnDefinition.java
@@ -0,0 +1,31 @@
+package com.megatim.fdxcommons.tools.database.tables.appcolumns;
+
+import com.megatim.fdxcommons.tools.database.contrat.AppColumnDefinition;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class DeletedColumnDefinition implements AppColumnDefinition {
+
+    @Override
+    public String name() {
+        return "fdx_is_deleted";
+    }
+
+    @Override
+    public String type() {
+        return "SMALLINT";
+    }
+
+    @Override
+    public boolean isNull() {
+        return false;
+    }
+
+    @Override
+    public Object defaultValue() {
+        return 0;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/EnCoursProductionColumnDefinition.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/EnCoursProductionColumnDefinition.java
new file mode 100644
index 0000000..d510ce1
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/EnCoursProductionColumnDefinition.java
@@ -0,0 +1,40 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.tables.appcolumns;
+
+import com.megatim.fdxcommons.tools.database.contrat.AppColumnDefinition;
+
+/**
+ *
+ * @author ASUS
+ */
+public class EnCoursProductionColumnDefinition implements AppColumnDefinition {
+
+    @Override
+    public String name() {
+        return "fdx_en_cours_production";
+    }
+
+    @Override
+    public String type() {
+        return "boolean";
+    }
+
+    @Override
+    public boolean isNull() {
+        return true;
+    }
+
+    @Override
+    public Object defaultValue() {
+        return false;
+    }
+
+    @Override
+    public boolean isPrimaryKey() {
+        return true;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/FdxApiColumnDefinitions.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/FdxApiColumnDefinitions.java
new file mode 100644
index 0000000..e229d60
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/FdxApiColumnDefinitions.java
@@ -0,0 +1,23 @@
+package com.megatim.fdxcommons.tools.database.tables.appcolumns;
+
+import java.util.Arrays;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class FdxApiColumnDefinitions extends AppColumnDefinitions {
+
+    public FdxApiColumnDefinitions() {
+        appColumnDefinitions = Arrays.asList(
+                new IndexColumnDefinition(),
+                new DeletedColumnDefinition(),
+                new DateCreationColumnDefinition(),
+                new DateMiseAJourColumnDefinition(),
+                new DataProductionUpdateIdColumnDefinition(),
+                new DataProductionIdColumnDefinition(),
+                new TokenColumnDefinition(),
+                new ParentIdColumnDefinition()
+        );
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/FdxConsultationColumnDefinitions.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/FdxConsultationColumnDefinitions.java
new file mode 100644
index 0000000..fabf375
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/FdxConsultationColumnDefinitions.java
@@ -0,0 +1,26 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.tables.appcolumns;
+
+import java.util.Arrays;
+
+/**
+ *
+ * @author ASUS
+ */
+public class FdxConsultationColumnDefinitions extends AppColumnDefinitions {
+
+    public FdxConsultationColumnDefinitions() {
+        appColumnDefinitions = Arrays.asList(
+                new FdxConsultationIndexColumnDefinition(),
+                new DeletedColumnDefinition(),
+                new DateCreationColumnDefinition(),
+                new DataProductionIdColumnDefinition(),
+                new DateMiseAJourColumnDefinition(),
+                new DataProductionUpdateIdColumnDefinition(),
+                new ParentIdColumnDefinition()
+        );
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/FdxConsultationIndexColumnDefinition.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/FdxConsultationIndexColumnDefinition.java
new file mode 100644
index 0000000..1a8400b
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/FdxConsultationIndexColumnDefinition.java
@@ -0,0 +1,27 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.tables.appcolumns;
+
+/**
+ *
+ * @author ASUS
+ */
+public class FdxConsultationIndexColumnDefinition extends IndexColumnDefinition {
+
+    @Override
+    public String type() {
+        return "BIGINT";
+    }
+
+    @Override
+    public boolean isNull() {
+        return true;
+    }
+
+    @Override
+    public boolean isPrimaryKey() {
+        return false;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/IndexColumnDefinition.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/IndexColumnDefinition.java
new file mode 100644
index 0000000..6aa98ae
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/IndexColumnDefinition.java
@@ -0,0 +1,35 @@
+package com.megatim.fdxcommons.tools.database.tables.appcolumns;
+
+import com.megatim.fdxcommons.tools.database.contrat.AppColumnDefinition;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class IndexColumnDefinition implements AppColumnDefinition {
+
+    @Override
+    public String name() {
+        return "fdx_index";
+    }
+
+    @Override
+    public String type() {
+        return "BIGSERIAL";
+    }
+
+    @Override
+    public boolean isNull() {
+        return false;
+    }
+
+    @Override
+    public Object defaultValue() {
+        return null;
+    }
+
+    @Override
+    public boolean isPrimaryKey() {
+        return true;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/ParentIdColumnDefinition.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/ParentIdColumnDefinition.java
new file mode 100644
index 0000000..d523627
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/ParentIdColumnDefinition.java
@@ -0,0 +1,35 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.tables.appcolumns;
+
+import com.megatim.fdxcommons.tools.database.contrat.AppColumnDefinition;
+
+/**
+ *
+ * @author ASUS
+ */
+public class ParentIdColumnDefinition implements AppColumnDefinition {
+
+    @Override
+    public String name() {
+        return "fdx_parent_id";
+    }
+
+    @Override
+    public String type() {
+        return "BIGINT";
+    }
+
+    @Override
+    public boolean isNull() {
+        return true;
+    }
+
+    @Override
+    public Object defaultValue() {
+        return null;
+    }
+    
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/TokenColumnDefinition.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/TokenColumnDefinition.java
new file mode 100644
index 0000000..ba3426a
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/appcolumns/TokenColumnDefinition.java
@@ -0,0 +1,34 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.tables.appcolumns;
+
+import com.megatim.fdxcommons.tools.database.contrat.AppColumnDefinition;
+
+/**
+ *
+ * @author ASUS
+ */
+public class TokenColumnDefinition implements AppColumnDefinition {
+
+    @Override
+    public String name() {
+        return "fdx_token";
+    }
+
+    @Override
+    public String type() {
+        return "VARCHAR(50)";
+    }
+
+    @Override
+    public boolean isNull() {
+        return true;
+    }
+
+    @Override
+    public Object defaultValue() {
+        return null;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/dto/FdxTableColumnDataDto.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/dto/FdxTableColumnDataDto.java
new file mode 100644
index 0000000..6884522
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/dto/FdxTableColumnDataDto.java
@@ -0,0 +1,63 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.tables.dto;
+
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * @author ASUS
+ */
+public class FdxTableColumnDataDto implements Serializable {
+
+    private Object value;
+    private String name;
+    private int position;
+    private int sqlDataType;
+
+    @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
+    @JsonSubTypes({
+        @JsonSubTypes.Type(value = BigDecimal.class, name = "BigDecimal"),
+        @JsonSubTypes.Type(value = Long.class, name = "Long"),
+        @JsonSubTypes.Type(value = String.class, name = "String"),
+        @JsonSubTypes.Type(value = LocalDateTime.class, name = "LocalDateTime")}
+    )
+    public Object getValue() {
+        return value;
+    }
+
+    public void setValue(Object value) {
+        this.value = value;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public int getPosition() {
+        return position;
+    }
+
+    public void setPosition(int position) {
+        this.position = position;
+    }
+
+    public int getSqlDataType() {
+        return sqlDataType;
+    }
+
+    public void setSqlDataType(int sqlDataType) {
+        this.sqlDataType = sqlDataType;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/dto/FdxTableRowDto.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/dto/FdxTableRowDto.java
new file mode 100644
index 0000000..7ef0336
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/dto/FdxTableRowDto.java
@@ -0,0 +1,36 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.tables.dto;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public class FdxTableRowDto implements Serializable {
+
+    private long number;
+    private List<FdxTableColumnDataDto> dataColumns;
+
+    public long getNumber() {
+        return number;
+    }
+
+    public void setNumber(long number) {
+        this.number = number;
+    }
+
+    public List<FdxTableColumnDataDto> getDataColumns() {
+        return dataColumns;
+    }
+
+    public void setDataColumns(List<FdxTableColumnDataDto> dataColumns) {
+        this.dataColumns = dataColumns;
+    }
+    
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/dto/JpqlQueryElement.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/dto/JpqlQueryElement.java
new file mode 100644
index 0000000..6846c91
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/dto/JpqlQueryElement.java
@@ -0,0 +1,34 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.tables.dto;
+
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryParam;
+import com.megatim.fdxcommons.tools.database.queries.metadata.jpql.JpqlQueryParam;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JpqlQueryElement {
+
+    private final String query;
+
+    private final List<JpqlQueryParam> parameters;
+
+    public JpqlQueryElement(String query, List<JpqlQueryParam> parameters) {
+        this.query = query;
+        this.parameters = parameters;
+    }
+
+    public String getQuery() {
+        return query;
+    }
+
+    public List<JpqlQueryParam> getParameters() {
+        return parameters;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/ApplicationForbidenException.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/ApplicationForbidenException.java
new file mode 100644
index 0000000..24ad246
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/ApplicationForbidenException.java
@@ -0,0 +1,29 @@
+package com.megatim.fdxcommons.tools.exceptions;
+
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author lenovo
+ */
+public class ApplicationForbidenException extends WebApplicationException {
+
+    private final String messsage;
+
+    public ApplicationForbidenException(String messsage) {
+        super();
+        this.messsage = messsage;
+    }
+
+    @Override
+    public Response getResponse() {
+        return Response
+                .status(403)
+                .entity(messsage)
+                .type(MediaType.APPLICATION_JSON)
+                .build();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonAlredyExistException.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonAlredyExistException.java
new file mode 100644
index 0000000..9dcedee
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonAlredyExistException.java
@@ -0,0 +1,37 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxcommons.tools.exceptions;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author bissey
+ */
+public class CommonAlredyExistException extends WebApplicationException {
+
+    private final String key;
+    private final String message;
+    
+    public CommonAlredyExistException(String key,String messsage) {    
+        super();
+        this.key = key ;
+        this.message = messsage;
+    }
+
+    @Override
+    public Response getResponse() {
+        Map<String ,String> error = new HashMap<>() ;
+        error.put(this.key, this.message); 
+        return Response.status(422).entity(error).type(MediaType.APPLICATION_JSON).build();
+    }
+
+  
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonApplicationServerException.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonApplicationServerException.java
new file mode 100644
index 0000000..bfaec07
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonApplicationServerException.java
@@ -0,0 +1,18 @@
+package com.megatim.fdxcommons.tools.exceptions;
+
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author lenovo
+ */
+public class CommonApplicationServerException extends WebApplicationException {
+
+    @Override
+    public Response getResponse() {
+        return Response.status(500).entity("Erreur serveur").type(MediaType.APPLICATION_JSON).build();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonApplicationValidationException.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonApplicationValidationException.java
new file mode 100644
index 0000000..7c77335
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonApplicationValidationException.java
@@ -0,0 +1,29 @@
+package com.megatim.fdxcommons.tools.exceptions;
+
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author lenovo
+ */
+public class CommonApplicationValidationException extends WebApplicationException {
+
+    private final String messsage;
+
+    public CommonApplicationValidationException(String messsage) {
+        super();
+        this.messsage = messsage;
+    }
+
+    @Override
+    public Response getResponse() {
+        return Response
+                .status(422)
+                .entity(messsage)
+                .type(MediaType.APPLICATION_JSON)
+                .build();
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonAttributNotExistException.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonAttributNotExistException.java
new file mode 100644
index 0000000..58417af
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonAttributNotExistException.java
@@ -0,0 +1,30 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxcommons.tools.exceptions;
+
+import javax.ejb.EJBTransactionRolledbackException;
+import javax.ejb.Singleton;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.ExceptionMapper;
+import javax.ws.rs.ext.Provider;
+
+/**
+ *
+ * @author bissey
+ */
+@Provider
+@Singleton
+public class CommonAttributNotExistException implements ExceptionMapper<EJBTransactionRolledbackException> {
+
+    @Override
+    public Response toResponse(EJBTransactionRolledbackException exception) {
+        return Response.status(Response.Status.BAD_REQUEST)
+                .entity(exception.getMessage()).type(MediaType.APPLICATION_JSON).build();
+//                .entity("Cet Attribut N'existe pas dans cette Ressource").type(MediaType.APPLICATION_JSON).build();
+    }
+    
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonRessourceNotFoundException.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonRessourceNotFoundException.java
new file mode 100644
index 0000000..4abb373
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonRessourceNotFoundException.java
@@ -0,0 +1,45 @@
+package com.megatim.fdxcommons.tools.exceptions;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author bissey
+ */
+public class CommonRessourceNotFoundException extends WebApplicationException {
+
+    private String message;
+
+    private Class classx;
+
+    public CommonRessourceNotFoundException(String message) {
+        super();
+        this.message = message;
+    }
+
+    public CommonRessourceNotFoundException(Class resource) {
+        super();
+        this.classx = resource;
+    }
+
+    @Override
+    public Response getResponse() {
+        if (classx != null) {
+            Map<String, String> error = new HashMap<>();
+            error.put(this.classx.getSimpleName(), "Acune Ressource trouvée ayant cet identifiant !");
+            return Response.status(422).entity(error).type(MediaType.APPLICATION_JSON).build();
+            
+        } else {
+            return Response
+                    .status(Response.Status.NOT_FOUND)
+                    .entity(message != null ? message : "Ressource introuvable")
+                    .type(MediaType.APPLICATION_JSON)
+                    .build();
+        }
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonValidationExceptionMapperCustom.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonValidationExceptionMapperCustom.java
new file mode 100644
index 0000000..d9151cb
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/CommonValidationExceptionMapperCustom.java
@@ -0,0 +1,79 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxcommons.tools.exceptions;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.validation.ConstraintViolationException;
+import javax.ejb.Singleton;
+import javax.validation.ConstraintViolation;
+import javax.validation.Path;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.ExceptionMapper;
+import javax.ws.rs.ext.Provider;
+
+/**
+ *
+ * @author Leonel FOFOU
+ */
+@Provider
+@Singleton
+public class CommonValidationExceptionMapperCustom extends WebApplicationException implements ExceptionMapper<ConstraintViolationException> {
+    private String key;
+    private String message;
+    
+    @Override
+    public Response toResponse(ConstraintViolationException exception) {
+        return Response.status(422)
+                .entity(prepareMessage(exception))
+                .type(MediaType.APPLICATION_JSON)
+                .build();
+    }
+    @Override
+    public Response getResponse() {
+        Map<String ,String> error = new HashMap<String, String>() ;
+        error.put(this.key, this.message); 
+        return Response.status(422).entity(error).type(MediaType.APPLICATION_JSON).build();
+    }
+    
+    public CommonValidationExceptionMapperCustom() {
+        super();
+    }
+
+    public CommonValidationExceptionMapperCustom(String key, String messsage) {
+        super();
+        this.key = key ;
+        this.message = messsage;
+    }
+
+    private Map prepareMessage(ConstraintViolationException exception) {
+        Map<String, String> errors = new HashMap<>();
+        
+        for (ConstraintViolation<?> cv : exception.getConstraintViolations()) {
+            
+            String fieldName = null;
+            for(Path.Node node : cv.getPropertyPath()) {
+                fieldName = node.getName();
+            }
+            
+            errors.put(fieldName, cv.getMessage());
+
+            //message.append(cv.getPropertyPath() + " " + cv.getMessage() + "\n");
+        }
+
+        return errors;
+
+    }
+
+    private Map prepareSpecificMassage(String key, String value) {
+        Map<String, String> errors = new HashMap<>();
+        errors.put(key, value);
+
+        return errors;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/FdxColumnNotFoundException.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/FdxColumnNotFoundException.java
new file mode 100644
index 0000000..2e6c15d
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/FdxColumnNotFoundException.java
@@ -0,0 +1,12 @@
+package com.megatim.fdxcommons.tools.exceptions;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class FdxColumnNotFoundException extends Exception {
+
+    public FdxColumnNotFoundException(String message) {
+        super(message);
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/ImportReferentielException.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/ImportReferentielException.java
new file mode 100644
index 0000000..ad138ae
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/ImportReferentielException.java
@@ -0,0 +1,25 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.exceptions;
+
+/**
+ *
+ * @author ASUS
+ */
+public class ImportReferentielException extends Exception {
+    
+    public ImportReferentielException(String message) {
+        super(message);
+    }
+
+    public ImportReferentielException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public ImportReferentielException(Throwable cause) {
+        super(cause);
+    }
+    
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/TypeFichierExistNotException.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/TypeFichierExistNotException.java
new file mode 100644
index 0000000..65a38b6
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/exceptions/TypeFichierExistNotException.java
@@ -0,0 +1,13 @@
+package com.megatim.fdxcommons.tools.exceptions;
+
+/**
+ *
+ * @author lenovo
+ */
+public class TypeFichierExistNotException extends Exception {
+
+    public TypeFichierExistNotException(String message) {
+        super(message);
+    }    
+    
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/integration/FdxConsultationIntegrationData.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/integration/FdxConsultationIntegrationData.java
new file mode 100644
index 0000000..63ec1c7
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/integration/FdxConsultationIntegrationData.java
@@ -0,0 +1,33 @@
+package com.megatim.fdxcommons.tools.integration;
+
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import com.megatim.fdxcommons.tools.database.tables.dto.FdxTableRowDto;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * @author lenovo
+ */
+public class FdxConsultationIntegrationData implements Serializable {
+
+    private List<FdxTableRowDto> rows;
+
+    private final CommonDataProduction dataProduction;
+
+    public FdxConsultationIntegrationData(List<FdxTableRowDto> rows, CommonDataProduction dataProduction) {
+        this.rows = rows;
+        this.dataProduction = dataProduction;
+    }
+
+    public FdxConsultationIntegrationData(CommonDataProduction dataProduction, List<Map<String, Object>> jsonRows) {
+        this.dataProduction = dataProduction;
+    }
+
+    public CommonDataProduction getDataProduction() {
+        return dataProduction;
+    }
+
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/integration/JsonFdxConsultationIntegrationData.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/integration/JsonFdxConsultationIntegrationData.java
new file mode 100644
index 0000000..de22b65
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/integration/JsonFdxConsultationIntegrationData.java
@@ -0,0 +1,33 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.integration;
+
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonFdxConsultationIntegrationData {
+
+    private final List<Map<String, Object>> rows;
+    private final CommonDataProduction dataProduction;
+
+    public JsonFdxConsultationIntegrationData(List<Map<String, Object>> rows, CommonDataProduction dataProduction) {
+        this.rows = rows;
+        this.dataProduction = dataProduction;
+    }
+
+    public List<Map<String, Object>> getRows() {
+        return rows;
+    }
+
+    public CommonDataProduction getDataProduction() {
+        return dataProduction;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/integration/dto/ApiIntegrationDataDto.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/integration/dto/ApiIntegrationDataDto.java
new file mode 100644
index 0000000..ad35d70
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/integration/dto/ApiIntegrationDataDto.java
@@ -0,0 +1,71 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.integration.dto;
+
+import java.time.LocalDateTime;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public class ApiIntegrationDataDto {
+
+    private List<LinkedHashMap<String, Object>> data;
+    private String codeTypeFichier;
+    private String referentielVersion;
+    private String fileName;
+    private LocalDateTime fileDate;
+
+    public ApiIntegrationDataDto(List<LinkedHashMap<String, Object>> data, String codeTypeFichier, String referentielVersion, String fileName, LocalDateTime fileDate) {
+        this.data = data;
+        this.codeTypeFichier = codeTypeFichier;
+        this.referentielVersion = referentielVersion;
+        this.fileName = fileName;
+        this.fileDate = fileDate;
+    }
+
+    public List<LinkedHashMap<String, Object>> getData() {
+        return data;
+    }
+
+    public void setData(List<LinkedHashMap<String, Object>> data) {
+        this.data = data;
+    }
+
+    public String getCodeTypeFichier() {
+        return codeTypeFichier;
+    }
+
+    public void setCodeTypeFichier(String codeTypeFichier) {
+        this.codeTypeFichier = codeTypeFichier;
+    }
+
+    public String getReferentielVersion() {
+        return referentielVersion;
+    }
+
+    public void setReferentielVersion(String referentielVersion) {
+        this.referentielVersion = referentielVersion;
+    }
+
+    public String getFileName() {
+        return fileName;
+    }
+
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
+    }
+
+    public LocalDateTime getFileDate() {
+        return fileDate;
+    }
+
+    public void setFileDate(LocalDateTime fileDate) {
+        this.fileDate = fileDate;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/jaxb/util/JaxBUtil.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/jaxb/util/JaxBUtil.java
new file mode 100644
index 0000000..b66a62c
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/jaxb/util/JaxBUtil.java
@@ -0,0 +1,40 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.jaxb.util;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.nio.charset.Charset;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JaxBUtil {
+
+    public static <T> T convertXmlFileToObject(String fileName, Class<T> clazz) throws Exception {
+        JAXBContext context = JAXBContext.newInstance(clazz);
+        Unmarshaller unmarshaller = context.createUnmarshaller();
+        InputStream inputStream = new FileInputStream(fileName);
+        Reader reader = new InputStreamReader(inputStream, Charset.forName("UTF-8"));
+        BufferedReader buffer = new BufferedReader(reader);
+        return (T) unmarshaller.unmarshal(buffer);
+    }
+
+    public static void buildXmlFile(Class clazz, String fileName, Object valueToWrite) throws JAXBException {
+        JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
+        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
+        jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
+        jaxbMarshaller.marshal(valueToWrite, new File(fileName));
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/resolvers/JacksonMapperFormat.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/resolvers/JacksonMapperFormat.java
new file mode 100644
index 0000000..1ff9c30
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/resolvers/JacksonMapperFormat.java
@@ -0,0 +1,30 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.resolvers;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+//import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import org.apache.camel.component.jackson.JacksonDataFormat;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JacksonMapperFormat {
+
+    public static JacksonDataFormat jacksonDataFormat(Class<?> classe) {
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.registerModule(new JavaTimeModule());
+        mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+
+        JacksonDataFormat jacksonDataFormat = new JacksonDataFormat();
+        jacksonDataFormat.setObjectMapper(mapper);
+        jacksonDataFormat.setUnmarshalType(classe);
+
+        return jacksonDataFormat;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/ConnectionUtil.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/ConnectionUtil.java
new file mode 100644
index 0000000..aa45994
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/ConnectionUtil.java
@@ -0,0 +1,30 @@
+package com.megatim.fdxcommons.tools.utils;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.sql.DataSource;
+
+/**
+ *
+ * @author ASUS
+ */
+public class ConnectionUtil {
+
+    private ConnectionUtil() {
+    }
+
+    public static Connection getDataSourceConnection(String jndiName) {
+        Connection conn = null;
+        try {
+            Context ctx = new InitialContext();
+            DataSource ds = (DataSource) ctx.lookup(jndiName);
+            conn = ds.getConnection();
+        } catch (NamingException | SQLException ex) {
+            ex.printStackTrace();
+        }
+        return conn;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/CriteriaEntityFromViewToJqplQueryCriterion.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/CriteriaEntityFromViewToJqplQueryCriterion.java
new file mode 100644
index 0000000..c2c8cbf
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/CriteriaEntityFromViewToJqplQueryCriterion.java
@@ -0,0 +1,50 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.utils;
+
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.tools.database.queries.metadata.jpql.JpqlQueryCriterion;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author ASUS
+ */
+public class CriteriaEntityFromViewToJqplQueryCriterion {
+
+    private final CriteriaEntityFromView criteriaEntityFromView;
+
+    public CriteriaEntityFromViewToJqplQueryCriterion(CriteriaEntityFromView criteriaEntityFromView) {
+        this.criteriaEntityFromView = criteriaEntityFromView;
+    }
+
+    public JpqlQueryCriterion queryCriterion() {
+
+        if (criteriaEntityFromView == null) {
+            return null;
+        }
+
+        String nomColonne = criteriaEntityFromView.getNomColonne() != null ? criteriaEntityFromView.getNomColonne() : "";
+        Object criteriaValue = criteriaEntityFromView.getCriteriaValue();
+        Operateur operateur = criteriaEntityFromView.getOperateur();
+        boolean endOfTheDay = criteriaEntityFromView.isEndOfTheDay();
+        CriteriaLogicConnector criteriaLogicConnector = criteriaEntityFromView.getCriteriaLogicConnector();
+
+        List<JpqlQueryCriterion> subCriteria = new ArrayList<>();
+        if (criteriaEntityFromView.getSubCriterias() != null && !criteriaEntityFromView.getSubCriterias().isEmpty()) {
+            subCriteria = criteriaEntityFromView.getSubCriterias()
+                    .stream()
+                    .map(sC -> new CriteriaEntityFromViewToJqplQueryCriterion(sC).queryCriterion())
+                    .collect(Collectors.toList());
+        }
+
+        return new JpqlQueryCriterion(nomColonne, criteriaValue, operateur, criteriaLogicConnector, subCriteria, endOfTheDay);
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/CriteriaEntityFromViewToQueryCriterion.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/CriteriaEntityFromViewToQueryCriterion.java
new file mode 100644
index 0000000..43b9bcc
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/CriteriaEntityFromViewToQueryCriterion.java
@@ -0,0 +1,49 @@
+package com.megatim.fdxcommons.tools.utils;
+
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class CriteriaEntityFromViewToQueryCriterion {
+
+    private final CriteriaEntityFromView criteriaEntityFromView;
+
+    public CriteriaEntityFromViewToQueryCriterion(CriteriaEntityFromView criteriaEntityFromView) {
+        this.criteriaEntityFromView = criteriaEntityFromView;
+    }
+
+    public QueryCriterion queryCriterion() {
+
+        if (criteriaEntityFromView == null) {
+            return null;
+        }
+
+        String nomColonne = criteriaEntityFromView.getNomColonne() != null ? criteriaEntityFromView.getNomColonne() : "";
+        Object criteriaValue = criteriaEntityFromView.getCriteriaValue();
+        Operateur operateur = criteriaEntityFromView.getOperateur();
+        CriteriaLogicConnector criteriaLogicConnector = criteriaEntityFromView.getCriteriaLogicConnector();
+
+        List<QueryCriterion> subCriteria = new ArrayList<>();
+        if (criteriaEntityFromView.getSubCriterias() != null && !criteriaEntityFromView.getSubCriterias().isEmpty()) {
+            subCriteria = criteriaEntityFromView.getSubCriterias()
+                    .stream()
+                    .map(sC -> new CriteriaEntityFromViewToQueryCriterion(sC).queryCriterion())
+                    .collect(Collectors.toList());
+
+            return new QueryCriterion(null, null, null, criteriaLogicConnector, subCriteria);
+        } else if (nomColonne != null && !nomColonne.isEmpty() && operateur != null) {
+            return new QueryCriterion(nomColonne, criteriaValue, operateur, null, Arrays.asList());
+        }
+        return null;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/CustomColumns.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/CustomColumns.java
new file mode 100644
index 0000000..c69f6c5
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/CustomColumns.java
@@ -0,0 +1,47 @@
+package com.megatim.fdxcommons.tools.utils;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ *
+ * @author ASUS
+ */
+public class CustomColumns {
+
+    public static final Set<String> columnsSet = new HashSet<>();
+    public static final Set<String> pkAutoIncrementColumnsQuerySet = new HashSet<>();
+    public static final Set<String> pkNotAutoIncrementColumnsQuerySet = new HashSet<>();
+
+    public static final String IS_DELETED_COLUMN = "fdx_is_deleted";
+
+    public static final int IS_DELETED_COLUMN_DEFAULT_VALUE = 0;
+    public static final int IS_DELETED_COLUMN_DELETED_VALUE = 1;
+    public static final String IS_DELETED_COLUMN_QUERY = IS_DELETED_COLUMN + " SMALLINT NOT NULL DEFAULT " + IS_DELETED_COLUMN_DEFAULT_VALUE + ", ";
+
+    public static final String INDEX_COLUMN = "fdx_index";
+    public static final String API_INDEX_COLUMN_QUERY = INDEX_COLUMN + " BIGSERIAL PRIMARY KEY, ";
+    public static final String FDXCONSULTATION_INDEX_COLUMN_QUERY = INDEX_COLUMN + " BIGINT PRIMARY KEY, ";
+
+    public static final String DATE_ACTION_COLUMN = "fdx_date_action";
+    public static final String DATE_ACTION_QUERY = DATE_ACTION_COLUMN + " TIMESTAMP NULL, ";
+
+    public static final String DATA_PRODUCTION_ID_COLUMN = "fdx_data_production_id";
+    public static final String DATA_PRODUCTION_ID_COLUMN_QUERY = DATA_PRODUCTION_ID_COLUMN + " BIGINT NOT NULL, ";
+
+    static {
+        columnsSet.add(IS_DELETED_COLUMN);
+        columnsSet.add(INDEX_COLUMN);
+        columnsSet.add(DATE_ACTION_COLUMN);
+        columnsSet.add(DATA_PRODUCTION_ID_COLUMN);
+
+        pkAutoIncrementColumnsQuerySet.add(IS_DELETED_COLUMN_QUERY);
+        pkAutoIncrementColumnsQuerySet.add(DATE_ACTION_QUERY);
+        pkAutoIncrementColumnsQuerySet.add(DATA_PRODUCTION_ID_COLUMN_QUERY);
+        
+        pkNotAutoIncrementColumnsQuerySet.addAll(pkAutoIncrementColumnsQuerySet);
+        
+        pkAutoIncrementColumnsQuerySet.add(API_INDEX_COLUMN_QUERY);
+        pkNotAutoIncrementColumnsQuerySet.add(FDXCONSULTATION_INDEX_COLUMN_QUERY);
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/FdxParsedDataAction.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/FdxParsedDataAction.java
new file mode 100644
index 0000000..9557ec7
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/FdxParsedDataAction.java
@@ -0,0 +1,74 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.utils;
+
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import com.megatim.fdxcommons.tools.database.exceptions.BadDataValueException;
+import com.megatim.fdxcommons.tools.database.exceptions.ColumnNotFoundException;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import com.megatim.fdxcommons.tools.database.queries.metadata.FdxParsedDataRow;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ForkJoinTask;
+import java.util.concurrent.RecursiveTask;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ *
+ * @author ASUS
+ */
+public class FdxParsedDataAction extends RecursiveTask<List<Map<String, Object>>> {
+
+    private final List<LinkedHashMap<String, Object>> sourceData;
+    private final  TableDefinition tableDefinition;
+    private final List<Map<String, Object>> cachedData = new ArrayList<>();
+    private final int THRESHOLD = 5000;
+
+    public FdxParsedDataAction(List<LinkedHashMap<String, Object>> sourceData,  TableDefinition tableDefinition) {
+        this.sourceData = sourceData;
+        this.tableDefinition = tableDefinition;
+    }
+
+    @Override
+    protected List<Map<String, Object>> compute() {
+        if (sourceData.size() > THRESHOLD) {
+            ForkJoinTask
+                    .invokeAll(createSubtasks())
+                    .stream()
+                    .map(FdxParsedDataAction::join)
+                    .forEach(l -> cachedData.addAll(l));
+            return cachedData;
+        } else {
+            if (cachedData.isEmpty()) {
+                for (Map<String, Object> data : sourceData) {
+                    try {
+                        cachedData.add(new FdxParsedDataRow(data, tableDefinition).dataRow());
+                    } catch (ColumnNotFoundException | BadDataValueException | LocalDateTimeValueParseError ex) {
+                        Logger.getLogger(FdxParsedDataAction.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+                        throw new RuntimeException(ex);
+                    }
+                }
+            }
+            return cachedData;
+        }
+    }
+
+    private List<FdxParsedDataAction> createSubtasks() {
+        List<FdxParsedDataAction> subtasks = new ArrayList<>();
+        int size = sourceData.size() / 4;
+        int remainder = sourceData.size() % 4;
+
+        subtasks.add(new FdxParsedDataAction(sourceData.subList(0, size), tableDefinition));
+        subtasks.add(new FdxParsedDataAction(sourceData.subList(size, size * 2), tableDefinition));
+        subtasks.add(new FdxParsedDataAction(sourceData.subList(size * 2, size * 3), tableDefinition));
+        subtasks.add(new FdxParsedDataAction(sourceData.subList(size * 3, size * 4 + remainder), tableDefinition));
+
+        return subtasks;
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/JsonDataUtil.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/JsonDataUtil.java
new file mode 100644
index 0000000..fa31dd5
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/JsonDataUtil.java
@@ -0,0 +1,206 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.utils;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.integration.json.JsonStructure;
+import com.megatim.fdxcommons.tools.database.queries.metadata.JsonSelectQueryResult;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.FdxApiColumnDefinitions;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.FdxConsultationColumnDefinitions;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.TokenColumnDefinition;
+import java.sql.Timestamp;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonDataUtil {
+
+    private final String tokenColumn = new TokenColumnDefinition().name();
+    private final FdxApiColumnDefinitions apiColumnDefinitions = new FdxApiColumnDefinitions();
+    private final FdxConsultationColumnDefinitions fdxConsColumnDefinitions = new FdxConsultationColumnDefinitions();
+
+    public JsonSelectQueryResult merge(Map<Long, Object> data, JsonStructure jsonStructure, boolean withCustomColumns) {
+        List<Map<String, Object>> finalData = mergeAll(data, jsonStructure, withCustomColumns);
+        return new JsonSelectQueryResult(lastIndexRead(data), mergeSimpleColumns(finalData, jsonStructure, withCustomColumns));
+    }
+
+    public Map<String, Set<Long>> tableToMatchingIndexes(Map<Long, Object> data, String rootTableName) {
+        Map<String, Set<Long>> tableToMatchingIndexes = new HashMap<>();
+
+        data.forEach((k, v) -> {
+            Set<Long> indexes = tableToMatchingIndexes.get(rootTableName);
+            if (indexes == null) {
+                indexes = new HashSet<>();
+            }
+            indexes.add(k);
+            tableToMatchingIndexes.put(rootTableName, indexes);
+            tableToMatchingIndexes(v, rootTableName, tableToMatchingIndexes);
+        });
+        return tableToMatchingIndexes;
+    }
+
+    private List<Map<String, Object>> mergeAll(Map<Long, Object> data, JsonStructure jsonStructure, boolean withCustomColumns) {
+        List<Map<String, Object>> finalData = new ArrayList<>();
+        for (Object value : data.values()) {
+            Map map = (Map) value;
+            finalData.add(mergeData(map, jsonStructure, withCustomColumns));
+        }
+        return finalData;
+    }
+
+    private List<Map<String, Object>> mergeSimpleColumns(List<Map<String, Object>> data, JsonStructure jsonStructure, boolean withCustomColumns) {
+        List<Map<String, Object>> finalData = new ArrayList<>();
+
+        for (Map<String, Object> datum : data) {
+            finalData.add(mergeSimpleColumns(datum, jsonStructure, withCustomColumns));
+        }
+        return finalData;
+    }
+
+    private Map<String, Object> mergeSimpleColumns(Map<String, Object> dataMap, JsonStructure jsonStructure, boolean withCustomColumns) {
+        Map<String, Object> finalData = new HashMap<>();
+        List<JsonStructure> fields = jsonStructure.getFields();
+
+        for (Map.Entry<String, Object> entry : dataMap.entrySet()) {
+            Optional<JsonStructure> optField = fields.stream().filter(p -> p.getName().equalsIgnoreCase(entry.getKey())).findFirst();
+
+            if (optField.isPresent()) {
+                JsonStructure field = optField.get();
+
+                if (field.isCollection()) {
+                    List<Map<String, Object>> liste = (List) entry.getValue();
+                    List<Object> finalValues = new ArrayList<>();
+
+                    if (field.getTypeDonnee().equals(TypeDonnee.OBJET)) {
+                        for (Map<String, Object> map : liste) {
+                            finalValues.add(mergeSimpleColumns(map, field, withCustomColumns));
+                        }
+                    } else {
+                        for (Map<String, Object> map : liste) {
+                            for (Map.Entry<String, Object> e : map.entrySet()) {
+                                finalValues.add(e.getValue());
+                            }
+                        }
+                    }
+                    finalData.put(entry.getKey(), finalValues);
+                } else if (field.getTypeDonnee().equals(TypeDonnee.OBJET)) {
+                    Map<String, Object> map = null;
+                    if (entry.getValue() != null) {
+                        if (entry.getValue() instanceof List) {
+                            map = (Map<String, Object>) ((List) entry.getValue()).get(0);
+                        } else {
+                            map = (Map<String, Object>) entry.getValue();
+                        }
+                        finalData.put(entry.getKey(), mergeSimpleColumns(map, field, withCustomColumns));
+                    }
+                } else {
+                    switch (field.getTypeDonnee()) {
+                        case DATE:
+                            Timestamp timestamp = Timestamp.valueOf(entry.getValue().toString());
+                            LocalDateTime date = timestamp.toLocalDateTime();
+                            DateTimeFormatter formatter = DateTimeFormatter.ofPattern(field.getFormatDate());
+                            finalData.put(entry.getKey(), formatter.format(date));
+                            break;
+
+                        default:
+                            finalData.put(entry.getKey(), entry.getValue());
+                            break;
+                    }
+                }
+            } else {
+                if (!entry.getKey().equalsIgnoreCase(tokenColumn) && withCustomColumns && (apiColumnDefinitions.isAppColumnDefinition(entry.getKey()) || fdxConsColumnDefinitions.isAppColumnDefinition(entry.getKey()))) {
+                    finalData.put(entry.getKey(), entry.getValue());
+                }
+            }
+        }
+        return finalData;
+    }
+
+    private void tableToMatchingIndexes(Object data, String tableName, Map<String, Set<Long>> tableToMatchingIndexes) {
+        if (data instanceof Map) {
+            Map<Object, Object> dataMap = (Map) data;
+
+            for (Map.Entry<Object, Object> entry : dataMap.entrySet()) {
+                if (entry.getKey() instanceof Long) {
+                    Long index = (Long) entry.getKey();
+                    Set<Long> indexes = tableToMatchingIndexes.get(tableName);
+
+                    if (indexes == null) {
+                        indexes = new HashSet<>();
+                    }
+                    if (!indexes.contains(index)) {
+                        indexes.add(index);
+                    }
+                    tableToMatchingIndexes.put(tableName, indexes);
+                    tableToMatchingIndexes(entry.getValue(), tableName, tableToMatchingIndexes);
+
+                } else if (entry.getValue() instanceof Map) {
+                    String newTableName = tableName + "_" + tableName(entry.getKey().toString());
+                    tableToMatchingIndexes(entry.getValue(), newTableName, tableToMatchingIndexes);
+
+                }
+            }
+        }
+    }
+
+    private String tableName(String key) {
+        String[] array = key.split("\\.");
+        return (array[array.length - 1]).toLowerCase();
+    }
+
+    private Map<String, Object> mergeData(Map<Object, Object> dataMap, JsonStructure jsonStructure, boolean withCustomColumns) {
+        Map<String, Object> finalMap = new HashMap<>();
+
+        for (Map.Entry<Object, Object> entry : dataMap.entrySet()) {
+
+            if (entry.getKey() instanceof Long) {
+                finalMap = mergeData((Map) entry.getValue(), jsonStructure, withCustomColumns);
+            } else {
+                String key = cleanKey(entry.getKey().toString());
+
+                if (entry.getValue() instanceof Map) {
+                    Map<Long, Object> map = (Map) entry.getValue();
+                    finalMap.put(key, mergeAll(map, jsonStructure, withCustomColumns));
+                } else {
+                    if (!key.equalsIgnoreCase(tokenColumn)) {
+                        if (withCustomColumns) {
+                            finalMap.put(key, entry.getValue());
+                        } else {
+                            if (!apiColumnDefinitions.isAppColumnDefinition(key) && !fdxConsColumnDefinitions.isAppColumnDefinition(key)) {
+                                finalMap.put(key, entry.getValue());
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return finalMap;
+    }
+
+    private String cleanKey(String key) {
+        String[] array = key.split("\\.");
+        return array[array.length - 1];
+    }
+
+    private int lastIndexRead(Map<Long, Object> data) {
+        Long max = 0L;
+        for (Long l : data.keySet()) {
+            if (l > max) {
+                max = l;
+            }
+        }
+        return Integer.parseInt(max + "");
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/JsonFdxParsedDataAction.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/JsonFdxParsedDataAction.java
new file mode 100644
index 0000000..f92aa49
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/JsonFdxParsedDataAction.java
@@ -0,0 +1,73 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.utils;
+
+import com.megatim.fdxcommons.model.integration.json.JsonStructure;
+import com.megatim.fdxcommons.tools.database.exceptions.BadDataValueException;
+import com.megatim.fdxcommons.tools.database.exceptions.ColumnNotFoundException;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import com.megatim.fdxcommons.tools.database.queries.metadata.JsonFdxParsedDataRow;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ForkJoinTask;
+import java.util.concurrent.RecursiveTask;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonFdxParsedDataAction extends RecursiveTask<List<Map<String, Object>>> {
+
+    private final List<LinkedHashMap<String, Object>> sourceData;
+    private final JsonStructure jsonStructure;
+    private final List<Map<String, Object>> cachedData = new ArrayList<>();
+    private final int THRESHOLD = 5000;
+
+    public JsonFdxParsedDataAction(List<LinkedHashMap<String, Object>> sourceData, JsonStructure jsonStructure) {
+        this.sourceData = sourceData;
+        this.jsonStructure = jsonStructure;
+    }
+
+    @Override
+    protected List<Map<String, Object>> compute() {
+        if (sourceData.size() > THRESHOLD) {
+            ForkJoinTask
+                    .invokeAll(createSubtasks())
+                    .stream()
+                    .map(JsonFdxParsedDataAction::join)
+                    .forEach(l -> cachedData.addAll(l));
+            return cachedData;
+        } else {
+            if (cachedData.isEmpty()) {
+                for (Map<String, Object> data : sourceData) {
+                    try {
+                        cachedData.add(new JsonFdxParsedDataRow(data, jsonStructure).dataRow());
+                    } catch (ColumnNotFoundException | BadDataValueException | LocalDateTimeValueParseError ex) {
+                        Logger.getLogger(JsonFdxParsedDataAction.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+                        throw new RuntimeException(ex);
+                    }
+                }
+            }
+            return cachedData;
+        }
+    }
+
+    private List<JsonFdxParsedDataAction> createSubtasks() {
+        List<JsonFdxParsedDataAction> subtasks = new ArrayList<>();
+        int size = sourceData.size() / 4;
+        int remainder = sourceData.size() % 4;
+
+        subtasks.add(new JsonFdxParsedDataAction(sourceData.subList(0, size), jsonStructure));
+        subtasks.add(new JsonFdxParsedDataAction(sourceData.subList(size, size * 2), jsonStructure));
+        subtasks.add(new JsonFdxParsedDataAction(sourceData.subList(size * 2, size * 3), jsonStructure));
+        subtasks.add(new JsonFdxParsedDataAction(sourceData.subList(size * 3, size * 4 + remainder), jsonStructure));
+
+        return subtasks;
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/JsonTableUtil.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/JsonTableUtil.java
new file mode 100644
index 0000000..cb959e9
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/JsonTableUtil.java
@@ -0,0 +1,112 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.utils;
+
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.integration.json.JsonStructure;
+import com.megatim.fdxcommons.model.pojo.JsonTableDefinition;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonTableUtil {
+
+    private final JsonTableDefinition tableDefinition;
+
+    public JsonTableUtil(JsonTableDefinition tableDefinition) {
+        this.tableDefinition = tableDefinition;
+    }
+
+    public List<String> tablesName() {
+        List<String> tablesName = new ArrayList<>();
+        tablesName(tableDefinition, tablesName);
+
+        return tablesName;
+    }
+
+    /**
+     * La map est formé du nom complet de chaque colonne (clé) et son
+     * alias(valeur)
+     *
+     * @return
+     */
+    public Map<String, String> columnsNameToAlias() {
+        Map<String, String> columnsNameToAlias = new HashMap<>();
+        columnsNameToAlias(tableDefinition, columnsNameToAlias);
+
+        return columnsNameToAlias;
+    }
+
+    public Map<String, String> tablesNameToAlias() {
+        Map<String, String> tablesNameToAlias = new HashMap<>();
+        int i = 0;
+        tablesNameToAlias(tableDefinition, tablesNameToAlias, i);
+
+        return tablesNameToAlias;
+    }
+
+    public Map<String, List<String>> tableToChildrenTables() {
+        Map<String, List<String>> tableToDirectChildren = new HashMap<>();
+        tableToDirectChildren(tableDefinition, tableToDirectChildren);
+
+        return tableToDirectChildren;
+    }
+
+    private void columnsNameToAlias(JsonTableDefinition tableDef, Map<String, String> columnsNameToAlias) {
+        for (ColumnDefinition c : tableDef.getColumnDefs()) {
+            columnsNameToAlias.put(tableDef.getTableName() + "." + c.getName(), tableDef.getTableName() + "_" + c.getName());
+        }
+
+        for (JsonTableDefinition t : tableDef.getTablesDefinition()) {
+            columnsNameToAlias(t, columnsNameToAlias);
+        }
+    }
+
+    private int tablesNameToAlias(JsonTableDefinition tableDef, Map<String, String> tablesNameToAlias, int i) {
+        tablesNameToAlias.put(tableDef.getTableName(), "t" + i);
+        i++;
+
+        for (JsonTableDefinition t : tableDef.getTablesDefinition()) {
+            i = tablesNameToAlias(t, tablesNameToAlias, i);
+        }
+        return i;
+    }
+
+    /**
+     * Liste de toutes les tables provenant de la définition du tableDfinition
+     * racine
+     *
+     * @param tableDefinition
+     * @param tablesName
+     */
+    private void tablesName(JsonTableDefinition tableDefinition, List<String> tablesName) {
+        tablesName.add(tableDefinition.getTableName());
+
+        for (JsonTableDefinition t : tableDefinition.getTablesDefinition()) {
+            tablesName(t, tablesName);
+        }
+    }
+
+    private void tableToDirectChildren(JsonTableDefinition tableDefinition, Map<String, List<String>> tableToDirectChildren) {
+        List<String> children = new ArrayList<>();
+
+        for (JsonTableDefinition t : tableDefinition.getTablesDefinition()) {
+            children.add(t.getTableName());
+
+            if (t.getTablesDefinition().isEmpty()) {
+                tableToDirectChildren.put(t.getTableName(), Arrays.asList());
+            } else {
+                tableToDirectChildren(t, tableToDirectChildren);
+            }
+        }
+        tableToDirectChildren.put(tableDefinition.getTableName(), children);
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/ParserUtils.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/ParserUtils.java
new file mode 100644
index 0000000..befb586
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/ParserUtils.java
@@ -0,0 +1,420 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.utils;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.pojo.Constantes;
+import java.io.BufferedWriter;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import org.apache.poi.ss.usermodel.CellValue;
+import org.apache.poi.ss.usermodel.DataFormatter;
+import org.apache.poi.ss.usermodel.DateUtil;
+import org.apache.poi.ss.usermodel.FormulaEvaluator;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.util.NumberToTextConverter;
+import org.dhatim.fastexcel.reader.Cell;
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ *
+ * @author ASUS
+ */
+public class ParserUtils {
+    //Nombre be balise <entity> dans le validateur XML
+
+    private static final int ENTITY_LIST_SIZE = 2;
+
+    private ParserUtils() {
+
+    }
+
+    public static Map<Integer, Map> getValidateurElements(File file) throws Exception {
+        byte[] bytes = Files.readAllBytes(file.toPath());
+        return getValidateurElements(bytes);
+    }
+
+    public static Map<Integer, Map> getValidateurElements(byte[] bytes) throws Exception {
+        Document doc = intialize(bytes);
+        NodeList entityList = doc.getElementsByTagName("entity"); //Liste des noeud <entity>
+
+        //Map qui stocke le champ à une position, ainsi que les caractéristiques de champ(typeDonnee, taille, index de debut d'extraction)
+        Map<Integer, Map> mapParams = new HashMap<>();
+
+        int position = 0;
+
+        if (entityList.getLength() == ENTITY_LIST_SIZE) {
+
+            //Liste des noeud de type <validation> du deuximème Noeud <entity>
+            NodeList entityFileLineChildren = entityList.item(1).getChildNodes();
+
+            //parcours de la balise <entity> pour récupérer ses enfants
+            for (int i = 0; i < entityFileLineChildren.getLength(); i++) {
+
+                if (entityFileLineChildren.item(i) != null && entityFileLineChildren.item(i).getAttributes() != null) {
+
+                    //balise <validation>
+                    Node validation = entityFileLineChildren.item(i);
+
+                    if (validation != null) {
+
+                        position++;
+
+                        //Liste des assertions de la balise <validation>
+                        NodeList assertions = validation.getChildNodes();
+
+                        for (int r = 0; r < assertions.getLength(); r++) {
+                            Node assertion = assertions.item(r);
+                            Map<String, String> mapAttributes = new HashMap<>();
+
+                            if (assertion != null && assertion.getAttributes() != null) {
+
+                                //Les attributs de la balise <assertion>
+                                NamedNodeMap attributesAssertion = assertion.getAttributes();
+
+                                for (int k = 0; k < attributesAssertion.getLength(); k++) {
+
+                                    String nodeValue = attributesAssertion.item(k).getNodeValue();
+                                    String nodeName = attributesAssertion.item(k).getNodeName();
+
+                                    if (nodeName.equals("error-code")) {
+                                        mapAttributes.put(nodeName, nodeValue);
+                                        break;
+                                    }
+                                }
+
+                                //Liste des balises <param-value> de la balise <assertion>
+                                NodeList params = assertion.getChildNodes();
+                                Integer positionValue = null;
+
+                                for (int j = 0; j < params.getLength(); j++) {
+
+                                    if (params.item(j) != null && params.item(j).getAttributes() != null) {
+
+                                        //Les attributs de la balise <param-value>
+                                        NamedNodeMap attributesParamValue = params.item(j).getAttributes();
+
+                                        for (int k = 0; k < attributesParamValue.getLength(); k++) {
+
+                                            String nodeValue = attributesParamValue.item(k).getNodeValue();
+                                            String nextNodeValue = attributesParamValue.item(++k).getNodeValue();
+                                            mapAttributes.put(nodeValue, nextNodeValue);
+
+                                            if (nodeValue.equals(Constantes.POSITION)) {
+                                                positionValue = Integer.valueOf(nextNodeValue);
+                                            }
+                                        }
+                                        mapParams.put(positionValue != null ? positionValue : position, mapAttributes);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        return mapParams;
+
+    }
+
+    public static String getXlxsCellValue(org.apache.poi.ss.usermodel.Cell cell, Workbook wb, String typeDonnee, String formatDate) {
+        if (cell != null) {
+            String formatString = cell.getCellStyle().getDataFormatString();
+
+            switch (cell.getCellTypeEnum()) {
+                case STRING:
+                    if (typeDonnee.equalsIgnoreCase(TypeDonnee.DATE.getValue())) {
+                        Date date = DateUtil.getJavaDate(Double.parseDouble(cell.getStringCellValue()));
+                        return formatDate(date, formatDate);
+
+                    } else if (typeDonnee.equalsIgnoreCase(TypeDonnee.NUMERIQUE.getValue())) {
+                        DataFormatter formatter = new DataFormatter();
+                        String formattedValue = formatter.formatCellValue(cell);
+                        return formattedValue.replace(",", "");
+                    }
+                    return cell.getStringCellValue();
+                case NUMERIC:
+                    if (typeDonnee.equalsIgnoreCase(TypeDonnee.DATE.getValue())) {
+                        Date date = DateUtil.getJavaDate(cell.getNumericCellValue());
+                        return formatDate(date, formatDate);
+
+                    } else if (DateUtil.isCellDateFormatted(cell)) {
+                        return convertToDate(cell, formatDate);
+
+                    } else if (formatString != null && formatString.contains("%")) {
+                        return String.valueOf(cell.getNumericCellValue());
+
+                    } else {
+                        return NumberToTextConverter.toText(cell.getNumericCellValue());
+                    }
+                case BOOLEAN:
+                    return String.valueOf(cell.getBooleanCellValue());
+                case BLANK:
+                    return "";
+                case FORMULA:
+                    FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
+                    CellValue cellValue = evaluator.evaluate(cell);
+                    return cellValue.formatAsString();
+                default:
+                    return "";
+            }
+        }
+        return "";
+    }
+
+    private static String convertToDate(org.apache.poi.ss.usermodel.Cell cell, String formatDate) {
+        Date date = cell.getDateCellValue();
+        return formatDate(date, formatDate);
+    }
+
+    private static String formatDate(Date date, String formatDate) {
+        SimpleDateFormat sdf
+                = new SimpleDateFormat(formatDate != null && !formatDate.isEmpty()
+                        ? formatDate
+                        : "dd/MM/yyyy");
+        return sdf.format(date);
+    }
+
+    /**
+     * Méthode permettant de convertir la données contenu dans une cellule excel
+     * en chaîne de caractères
+     *
+     * @param cell
+     * @return
+     */
+    public static String getCellValueAsString(Cell cell) {
+        String val = "";
+
+        if (cell != null) {
+            switch (cell.getType()) {
+
+                case EMPTY:
+                    break;
+
+                case STRING:
+
+                    if (!cell.getText().equals("null")) {
+
+                        val = cell.getText().replaceAll("\\p{Cntrl}", "");
+
+                    }
+
+                    break;
+
+                case NUMBER:
+
+                    val = cell.asNumber().toPlainString();
+
+                    if (val.equals("null")) {
+
+                    }
+
+                    break;
+
+                case BOOLEAN:
+
+                    val = String.valueOf(cell.asBoolean());
+
+                    if (val.equals("null")) {
+
+                    }
+
+                    break;
+
+                default:
+                    break;
+
+            }
+
+        }
+
+        return val;
+
+    }
+
+    /**
+     * Méthode qui retire le caractère retour charriot dans une chaîne
+     *
+     * @param str
+     * @return
+     */
+//    public static String removeReturnCharriot(String str) {
+//        String result = str;
+//
+//        if (str != null && !str.isEmpty()) {
+//            String[] tab = str.split("\n");
+//            result = "";
+//
+//            for (String s : tab) {
+//                result += s;
+//            }
+//        }
+//        return result;
+//    }
+    /**
+     * Méthode utilitaire pour extraire les données dans un fichier xml
+     *
+     * @param array
+     * @return
+     * @throws Exception
+     */
+    private static Document intialize(byte[] array) throws Exception {
+
+        /**
+         * Défini un factory qui aide à obtenir un parseur qui produit un arbre
+         * d'objets DOM à partir d'un docuent XML.
+         */
+        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+
+        /**
+         * création d'un objet du builder pour parser le fichier XML.
+         */
+        DocumentBuilder db = dbf.newDocumentBuilder();
+
+        Document doc = db.parse(new ByteArrayInputStream(array));
+
+        doc.getDocumentElement().normalize();
+
+        return doc;
+    }
+
+    private static Document intialize(File file) throws Exception {
+        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+        DocumentBuilder db = dbf.newDocumentBuilder();
+        Document doc = db.parse(file);
+        doc.getDocumentElement().normalize();
+
+        return doc;
+    }
+
+    /**
+     * Méthode pour obtenir l'objet de typr char correspondant à chaque
+     * délimiteur
+     *
+     * @param delimiteur
+     * @return
+     */
+    public static char characterOfDelimiteur(String delimiteur) {
+        char character;
+
+        switch (delimiteur) {
+            case "\\t":
+                character = '\t';
+                break;
+            case "\\n":
+                character = '\n';
+                break;
+            case "":
+                character = '\0';
+                break;
+            default:
+                character = delimiteur.charAt(0);
+        }
+
+        return character;
+    }
+
+    /**
+     * Méthode permettant d'encoder une chaîne de caractères
+     *
+     * @param datas : tableau de String à encoder
+     * @param charset : encodage à utiliser
+     * @return
+     */
+    public static String[] encodeStrings(String[] datas, Charset charset) {
+        String[] encodedStrings = new String[datas.length];
+
+        for (int i = 0; i < encodedStrings.length; i++) {
+            byte[] bytesOfString = datas[i].getBytes();
+            encodedStrings[i] = new String(bytesOfString, charset);
+
+        }
+        return encodedStrings;
+    }
+
+    /**
+     * Méthode qui extrait une sous-chaîne dans une chaîne de caractères en
+     * utilisant un délimiteur
+     *
+     * @param line : chaîne mère à séparer
+     * @param character : délimiteur de chaîne
+     * @return : retourne un tableau contenant les châines extraites
+     */
+    public static String[] splitIntoColumns(String line, char character) {
+
+        int count = 0;
+
+        for (int i = 0; i < line.length(); i++) {
+
+            if (line.charAt(i) == character) {
+                count++;
+            }
+
+        }
+
+        String[] columns = new String[count + 1];
+
+        StringBuilder builder = new StringBuilder(0);
+
+        count = 0;
+
+        for (int i = 0; i < line.length(); i++) {
+
+            if (line.charAt(i) == character) {
+
+                columns[count] = builder.toString();
+
+                builder = new StringBuilder(0);
+
+                count++;
+
+            } else {
+
+                builder.append(line.charAt(i));
+            }
+
+        }
+
+        columns[count] = builder.toString();
+
+        return columns;
+    }
+
+    /**
+     * Méthode qui écrit dans un fichier
+     *
+     * @param finalColumnsTableLine : liste des châines à écrire dans le fichier
+     * @param bufferWriter : ressource permettant d'écrire dans le fichier
+     */
+    public static void writeToFile(String[] finalColumnsTableLine, final BufferedWriter bufferWriter) throws IOException {
+
+        //Ecriture dans le fichier output
+        StringBuilder safeLineBuilder = new StringBuilder(0);
+
+        for (String s : finalColumnsTableLine) {
+            safeLineBuilder.append(s);
+        }
+
+        String safeLine = safeLineBuilder.toString();
+
+        if (safeLine.length() > 0) {
+            bufferWriter.write(safeLine + System.lineSeparator());
+
+        }
+    }
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/SearchColumnUtil.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/SearchColumnUtil.java
new file mode 100644
index 0000000..2e745f6
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/SearchColumnUtil.java
@@ -0,0 +1,88 @@
+package com.megatim.fdxcommons.tools.utils;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.search.SearchColumn;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import org.apache.poi.ss.formula.functions.T;
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class SearchColumnUtil {
+
+    private SearchColumnUtil() {
+    }
+
+    public static List<SearchColumn> getSearchColumns(Class<T> classe) {
+        List<SearchColumn> searchColumns = new ArrayList<>();
+        List<Field> fields = Arrays.asList(classe.getDeclaredFields());
+
+        for (Field f : fields) {
+            CriteriaEntitySearch searchAnn = f.getAnnotation(CriteriaEntitySearch.class);
+            if (searchAnn != null) {
+                SearchColumn searchColumn = new SearchColumn();
+                searchColumn.setLibelle(searchAnn.libelle());
+
+                TypeDonnee typeDonnee = getTypeDonnee(f, searchAnn);
+
+                if (typeDonnee != null) {
+                    searchColumn.setTypeDonnee(typeDonnee);
+                    searchColumns.add(searchColumn);
+                }
+
+            }
+        }
+        return searchColumns;
+    }
+
+    public static TypeDonnee getTypeDonnee(Field field, CriteriaEntitySearch searchAnn) {
+        Class<?> fieldClass = field.getType();
+        TypeDonnee typeDonnee = null;
+
+        if (fieldClass.isPrimitive()) {
+            typeDonnee = SqlUtilities.typeDonneeFromJavaClass(fieldClass);
+
+        } else if (fieldClass.isEnum()) {
+            Enumerated enumerated = field.getAnnotation(Enumerated.class);
+            typeDonnee = enumerated == null || enumerated.value().equals(EnumType.ORDINAL) ? TypeDonnee.NUMERIQUE : TypeDonnee.ALPHANUMERIQUE;
+
+        } else if (!fieldClass.isInterface() && !Collection.class.isAssignableFrom(fieldClass) && !Map.class.isAssignableFrom(fieldClass)) {
+            String[] fieldPath = searchAnn.fieldName().split("\\.");
+            if (fieldPath.length < 2) {
+                typeDonnee = SqlUtilities.typeDonneeFromJavaClass(fieldClass);
+            } else {
+                typeDonnee = SqlUtilities.typeDonneeFromJavaClass(getFieldType(fieldClass, Arrays.copyOfRange(fieldPath, 1, fieldPath.length)));
+            }
+        }
+
+        return typeDonnee;
+    }
+
+    public static Class<?> getFieldType(Class<?> classe, String[] fieldPath) {
+        String fieldName = fieldPath[0];
+        List<Field> fields = Arrays.asList(classe.getDeclaredFields());
+        Optional<Field> optField = fields.stream().filter(f -> f.getName().equals(fieldName)).findFirst();
+
+        if (optField.isPresent()) {
+            Field field = optField.get();
+            if (fieldPath.length == 1) {
+                return field.getType();
+            } else {
+                return getFieldType(field.getType(), Arrays.copyOfRange(fieldPath, 1, fieldPath.length));
+            }
+        } else {
+            return null;
+        }
+    }
+
+}
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/SqlUtilities.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/SqlUtilities.java
new file mode 100644
index 0000000..f2f84d2
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/SqlUtilities.java
@@ -0,0 +1,27 @@
+package com.megatim.fdxcommons.tools.utils;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import java.time.temporal.Temporal;
+
+/**
+ *
+ * @author ASUS
+ */
+public class SqlUtilities {
+
+    public static TypeDonnee typeDonneeFromJavaClass(Class<?> classe) {
+        if (classe == null) {
+            return null;
+        }
+        if (Number.class.isAssignableFrom(classe)) {
+            return TypeDonnee.NUMERIQUE;
+        } else if (String.class.isAssignableFrom(classe)) {
+            return TypeDonnee.ALPHANUMERIQUE;
+        } else if (java.util.Date.class.isAssignableFrom(classe) || Temporal.class.isAssignableFrom(classe)) {
+            return TypeDonnee.DATE;
+        } else {
+            return null;
+        }
+    }
+
+}
diff --git a/fdx-commons/nb-configuration.xml b/fdx-commons/nb-configuration.xml
new file mode 100644
index 0000000..a65c451
--- /dev/null
+++ b/fdx-commons/nb-configuration.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+    <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+        <!--
+Properties that influence various parts of the IDE, especially code formatting and the like. 
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+        <netbeans.hint.jdkPlatform>JDK_1.8</netbeans.hint.jdkPlatform>
+    </properties>
+</project-shared-configuration>
diff --git a/fdx-commons/pom.xml b/fdx-commons/pom.xml
new file mode 100644
index 0000000..1112685
--- /dev/null
+++ b/fdx-commons/pom.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    
+    <modelVersion>4.0.0</modelVersion>
+    
+    <groupId>com.megatim.fdxcommons</groupId>
+    <artifactId>fdxcommons</artifactId>
+    <version>1.0</version>
+    <packaging>pom</packaging>
+    
+    <modules>
+        <module>fdxcommons-tools</module>
+        <module>fdxcommons-model</module>
+        <module>fdxcommons-dao-ifaces</module>
+        <module>fdxcommons-dao-impl</module>
+        <module>fdxcommons-core-ifaces</module>
+        <module>fdxcommons-core-impl</module>
+        <module>fdxcommons-service-ifaces</module>
+        <!--<module>fdxcommons-service-impl</module>-->
+    </modules>
+    
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <version>1.0</version>
+    </properties>
+    
+</project>
diff --git a/fdx-consultation/README.md b/fdx-consultation/README.md
new file mode 100644
index 0000000..33958c0
--- /dev/null
+++ b/fdx-consultation/README.md
@@ -0,0 +1,43 @@
+
+# Back-end Projet MGT.FS
+
+## Tools : 
+    1. OS: Windows 10 ;
+    2. IDE: NetBeans 12.0 ;
+    3. Language: Java 8.0 ;
+    4. Maven 3.1 ;
+    5. WildFly 17 ;
+    6. Git  2.41 ;
+    7. EJB 3.0
+    8. L'API JPA 2.1 
+    9. provider: Hibernate
+    10. Transaction-type: JTA
+    11. Data-Source
+    12. Postgres SQL 14.3
+    13. PostMan
+    14. PowerAMC
+    15. Bitbucket
+
+## prérequis :
+    1. Installation du Serveur d'application WildFly ;
+    2. Installation du SGBD  ;
+    3. Installation du JDK ;
+    4. Installation de Maven ;
+
+
+
+## Lancement:
+    1. Creation d'une Base de donnée sur postgres si vous utilisé postgres  ;
+    2. Creation d'une Datasource nomé fileDS dans WildFly ;
+    3. Build du module parent ;
+    4. deploiment du War (source_file_service-impl-1.0-SNAPSHOT.war) dans WildFly ;
+
+
+
+## Lien de Test de L'API (Collection Du Projet)
+
+
+
+## Team Dev
+    Victor E...
+    Leonel F...
diff --git a/fdx-consultation/fdxconsulation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/RoutageRSImpl.java b/fdx-consultation/fdxconsulation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/RoutageRSImpl.java
new file mode 100644
index 0000000..7cc7927
--- /dev/null
+++ b/fdx-consultation/fdxconsulation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/RoutageRSImpl.java
@@ -0,0 +1,76 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.impl.referentiel;
+
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.RoutageManager;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dtos.referentiel.RoutageDto;
+import com.megatim.fdxconsultation.model.referentiel.Routage;
+import com.megatim.fdxconsultation.model.referentiel.RoutageId;
+import com.megatim.fdxconsultation.service.ifaces.referentiel.RoutageRS;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.util.List;
+import javax.enterprise.context.Dependent;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+@SecuredClass(module = "referentiel", path = "routages", description = "Routages")
+@Path("routage")
+@Dependent
+public class RoutageRSImpl implements RoutageRS {
+
+    @Inject
+    private RoutageManager manager;
+
+    @Inject
+    private UserManager userManager;
+
+    @AuthenticatedUser
+    private User utilisateurConnecte;
+
+    public RoutageRSImpl() {
+        super();
+    }
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pagesize, Routage searchEntity) {
+
+        List<RoutageDto> dtos = manager.getWithPagination(pageNumber, pagesize, searchEntity, utilisateurConnecte);
+        return Response.ok(dtos).build();
+    }
+
+    @Override
+    public Response findAll(HttpHeaders headers, Routage searchEntity) {
+
+        List<RoutageDto> dtos = manager.getAll(searchEntity, utilisateurConnecte);
+        return Response.ok(dtos).build();
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, Routage searchEntity) {
+        return manager.size(searchEntity);
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, Long id) {
+        //Routage entity = manager.getById(id, utilisateurConnecte);
+        //return Response.ok(manager.mapToDto(entity)).build();
+        return Response.ok().build();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/.gitignore b/fdx-consultation/fdxconsultation-core-ifaces/.gitignore
new file mode 100644
index 0000000..b24d71e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/.gitignore
@@ -0,0 +1,50 @@
+# These are some examples of commonly ignored file patterns.
+# You should customize this list as applicable to your project.
+# Learn more about .gitignore:
+#     https://www.atlassian.com/git/tutorials/saving-changes/gitignore
+
+# Node artifact files
+node_modules/
+dist/
+
+# Compiled Java class files
+*.class
+
+# Compiled Python bytecode
+*.py[cod]
+
+# Log files
+*.log
+
+# Package files
+*.jar
+
+# Maven
+target/
+dist/
+
+# JetBrains IDE
+.idea/
+
+# Unit test reports
+TEST*.xml
+
+# Generated by MacOS
+.DS_Store
+
+# Generated by Windows
+Thumbs.db
+
+# Applications
+*.app
+*.exe
+*.war
+
+# Large media files
+*.mp4
+*.tiff
+*.avi
+*.flv
+*.mov
+*.wmv
+
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/nb-configuration.xml b/fdx-consultation/fdxconsultation-core-ifaces/nb-configuration.xml
new file mode 100644
index 0000000..a65c451
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/nb-configuration.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+    <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+        <!--
+Properties that influence various parts of the IDE, especially code formatting and the like. 
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+        <netbeans.hint.jdkPlatform>JDK_1.8</netbeans.hint.jdkPlatform>
+    </properties>
+</project-shared-configuration>
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/pom.xml b/fdx-consultation/fdxconsultation-core-ifaces/pom.xml
new file mode 100644
index 0000000..afbd7c1
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/pom.xml
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+        <groupId>com.megatim.fdxconsultation</groupId>
+        <artifactId>fdxconsultation</artifactId>
+        <version>1.0</version>
+    </parent>
+    
+    <groupId>com.megatim.fdxconsultation.core.ifaces</groupId>
+    <artifactId>fdxconsultation-core-ifaces</artifactId>
+    <packaging>jar</packaging>
+    
+    <properties>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+        <jakartaee>8.0</jakartaee>
+    </properties>
+    
+    <dependencies>
+        <dependency>
+            <groupId>com.megatim.fdxconsultation.dao.ifaces</groupId>
+            <artifactId>fdxconsultation-dao-ifaces</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+         <dependency>
+            <groupId>com.megatim.fdx.messaging</groupId>
+            <artifactId>fdx-messaging-common</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxconsultation.reporting</groupId>
+            <artifactId>fdxconsultation-reporting</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxconsultation.tools</groupId>
+            <artifactId>fdxconsultation-tools</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>javax</groupId>
+            <artifactId>javaee-api</artifactId>
+            <version>${jakartaee}</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+        <dependency>
+            <groupId>com.bekosoftware</groupId>
+            <artifactId>genericDAOLayer</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+        <dependency>
+            <groupId>com.bekosoftware</groupId>
+            <artifactId>genericManagerLayer</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+        <dependency>
+            <groupId>com.megatimgroup</groupId>
+            <artifactId>mgt-commons-tools</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxconsultation.tools</groupId>
+            <artifactId>fdxconsultation-tools</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim</groupId>
+            <artifactId>reporting-adhoc</artifactId>
+            <version>1.0</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+    </dependencies>
+    <name>fdxconsultation-core-ifaces</name>
+</project>
\ No newline at end of file
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/AbstractCrudManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/AbstractCrudManager.java
new file mode 100644
index 0000000..c03c6a7
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/AbstractCrudManager.java
@@ -0,0 +1,90 @@
+package com.megatim.fdxconsultation.core.ifaces.abtracts;
+
+import com.megatim.fdxcommons.dao.ifaces.abstracts.AbstractCrudDAO;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.base.BaseEntity;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author ASUS
+ * @param <T> : Entite reelle
+ * @param <K> : Dto
+ * @param <ID> : Classe de l'identifiant
+ * @param <S> : entité de recherche
+ */
+public interface AbstractCrudManager<T extends Object, K, ID, S> {
+
+    <R extends AbstractCrudDAO<T, ID, S>> R getDao();
+
+    K mapToDto(T entity);
+
+    default T add(T entity, User connectedUser) {
+        beforeAdd(entity, connectedUser);
+        if (entity instanceof BaseEntity) {
+            BaseEntity baseEntity = (BaseEntity) entity;
+            baseEntity.setDateCreation(new Date());
+            baseEntity.setTypeOperation(TypeOperation.AJOUTER);
+            baseEntity.setUtilisateurCreation(connectedUser != null ? connectedUser.getUserName() : null);
+        }
+        return getDao().save(entity);
+    }
+
+    default T update(ID id, T entity, User connectedUser) {
+        T refreshEntity = getDao().getById(id);
+        beforeUpdate(refreshEntity, entity, connectedUser);
+        if (entity instanceof BaseEntity) {
+            BaseEntity baseEntity = (BaseEntity) refreshEntity;
+            baseEntity.setDateDerniereModification(new Date());
+            baseEntity.setUtilisateurModification(connectedUser != null ? connectedUser.getUserName() : null);
+        }
+        return getDao().save(refreshEntity);
+    }
+
+    default void delete(ID id, User connectedUser) {
+        T entity = getDao().getById(id);
+        beforeDelete(entity, connectedUser);
+        if (entity instanceof BaseEntity) {
+            BaseEntity baseEntity = (BaseEntity) entity;
+            baseEntity.setDateSuppression(new Date());
+            baseEntity.setUtilisateurSuppression(connectedUser != null ? connectedUser.getUserName() : null);
+            baseEntity.setTypeOperation(TypeOperation.SUPPRIMER);
+            getDao().save(entity);
+        } else {
+            getDao().delete(entity);
+        }
+    }
+
+    default void beforeAdd(T entity, User conncectedUser) {
+    }
+
+    default void beforeDelete(T entity, User conncectedUser) {
+    }
+
+    void beforeUpdate(T refreshEntity, T entity, User conncectedUser);
+
+    public default T getById(ID id) {
+        return getDao().getById(id);
+    }
+
+    public default List<K> findWithPagination(int pageNumber, int pagesize, S searchEntity, User connectedUser) {
+        return getDao().findWithPagination(pageNumber, pagesize, searchEntity)
+                .stream()
+                .map(t -> mapToDto(t))
+                .collect(Collectors.toList());
+    }
+
+    public default List<K> getAll(S searchEntity, User connectedUser) {
+        return getDao().getAll(searchEntity)
+                .stream()
+                .map(t -> mapToDto(t))
+                .collect(Collectors.toList());
+    }
+
+    public default Long count(S searchEntity) {
+        return getDao().count(searchEntity);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/CommonReadManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/CommonReadManager.java
new file mode 100644
index 0000000..9697c5f
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/CommonReadManager.java
@@ -0,0 +1,133 @@
+package com.megatim.fdxconsultation.core.ifaces.abtracts;
+
+import com.megatim.fdxcommons.dao.ifaces.utils.SearchCriteriaBuilderUtil;
+import com.megatim.fdxcommons.model.search.SearchCriteria;
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.EntityManager;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface CommonReadManager<T, U> {
+
+    public Class<T> getManagedEntityClass();
+
+    public EntityManager getEntityManager();
+
+    public default List<T> getAll(U searchEntity) {
+        CriteriaBuilder qb = getEntityManager().getCriteriaBuilder();
+        CriteriaQuery<T> cq = qb.createQuery(getManagedEntityClass());
+
+        Root<T> root = cq.from(getManagedEntityClass());
+
+        List<SearchCriteria> searchCriterias = SearchCriteriaBuilderUtil.getSearchCriterias(searchEntity, getManagedEntityClass(), root, new ArrayList<>());
+
+        List<Predicate> predicates = new ArrayList<>();
+
+        try {
+            predicates = createPedicates(searchCriterias, qb, root);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        cq.select(root);
+        cq.where(predicates.toArray(new Predicate[predicates.size()]));
+
+        return getEntityManager().createQuery(cq).getResultList();
+    }
+
+    /**
+     * Méthode qui les prédicats à partir des critères de recherche
+     *
+     * @param searchCriterias
+     * @param cb
+     * @param root
+     * @return
+     */
+    public default List<Predicate> createPedicates(List<SearchCriteria> searchCriterias, CriteriaBuilder cb, Root<T> root) {
+        List<Predicate> predicates = new ArrayList<>();
+
+        searchCriterias.parallelStream().forEach(s -> {
+
+            if (s.getFieldValue() != null) {
+                Predicate predicate = null;
+                switch (s.getOperateur()) {
+                    case EQUALS:
+                        predicate = cb.equal(s.getFrom().get(s.getFieldName()), s.getFieldValue());
+                        predicates.add(predicate);
+                        break;
+
+                    case NOT_EQUALS:
+                        predicate = cb.notEqual(s.getFrom().get(s.getFieldName()), s.getFieldValue());
+                        predicates.add(predicate);
+                        break;
+
+                    case LIKE:
+                        if (s.getFieldValue() instanceof String) {
+                            predicate = cb.like(s.getFrom().get(s.getFieldName()), "%" + s.getFieldValue().toString() + "%");
+                            predicates.add(predicate);
+                        }
+                        break;
+
+                    case GREATER_THAN:
+                        if (s.getFieldValue() instanceof Number) {
+                            predicate = cb.gt(s.getFrom().get(s.getFieldName()), (Number) s.getFieldValue());
+                            predicates.add(predicate);
+
+                        } else if (s.getFieldValue() instanceof LocalDate) {
+                            predicate = cb.greaterThan(s.getFrom().get(s.getFieldName()), (LocalDate) s.getFieldValue());
+                            predicates.add(predicate);
+                        }
+                        break;
+
+                    case GREATER_OR_EQUALS_THAN:
+                        if (s.getFieldValue() instanceof Number) {
+                            predicate = cb.ge(root.get(s.getFieldName()), (Number) s.getFieldValue());
+                            predicates.add(predicate);
+                        } else if (s.getFieldValue() instanceof LocalDate) {
+                            predicate = cb.greaterThanOrEqualTo(root.get(s.getFieldName()), (LocalDate) s.getFieldValue());
+                            predicates.add(predicate);
+                        }
+                        break;
+
+                    case LESS_THAN:
+                        if (s.getFieldValue() instanceof Number) {
+                            predicate = cb.lt(s.getFrom().get(s.getFieldName()), (Number) s.getFieldValue());
+                            predicates.add(predicate);
+                        } else if (s.getFieldValue() instanceof LocalDate) {
+                            predicate = cb.lessThan(s.getFrom().get(s.getFieldName()), (LocalDate) s.getFieldValue());
+                            predicates.add(predicate);
+                        }
+                        break;
+
+                    case LESS_OR_EQUALS_THAN:
+                        if (s.getFieldValue() instanceof Number) {
+                            predicate = cb.le(s.getFrom().get(s.getFieldName()), (Number) s.getFieldValue());
+                            predicates.add(predicate);
+                        } else if (s.getFieldValue() instanceof LocalDate) {
+                            predicate = cb.lessThanOrEqualTo(s.getFrom().get(s.getFieldName()), (LocalDate) s.getFieldValue());
+                            predicates.add(predicate);
+                        }
+                        break;
+                    case IN:
+                        if (s.getFieldValue() instanceof java.util.Collection) {
+                            predicate = s.getFrom().get(s.getFieldName()).in(s.getFieldValue());
+                            predicates.add(predicate);
+                        }
+                        break;
+                    default:
+
+                }
+            }
+        });
+
+        return predicates;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/ExportExcelGenerator.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/ExportExcelGenerator.java
new file mode 100644
index 0000000..4c8ba3d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/ExportExcelGenerator.java
@@ -0,0 +1,66 @@
+package com.megatim.fdxconsultation.core.ifaces.abtracts;
+
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationValidationException;
+import com.megatim.fdxconsultation.tools.CommonTools;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author lenovo
+ */
+public class ExportExcelGenerator<T> {
+
+    private final List<T> entities = new ArrayList<T>();
+
+    public File exporter(T entity) {
+        entities.clear();
+        entities.add(entity);
+        return generate();
+    }
+
+    public File exporter(List<T> entities) {
+        this.entities.clear();
+        this.entities.addAll(entities);
+        return generate();
+    }
+
+    private File generate() {
+        File fichier;
+        
+        try {
+            
+            //On exporte
+            fichier = CommonTools.exporterEnExcel(entities, new File(generateFileName()));
+            
+        } catch (Exception ex) {
+            
+            //On affiche les traces
+            ex.printStackTrace();
+            
+            //On lève une exception
+            throw new CommonApplicationValidationException("Une erreur est survenue lors de la génération du fichier excel");
+
+        }
+        return fichier;
+    }
+
+    private String generateFileName() {
+        
+        //Variables
+        File repertoire = new File(AppCommonContext.EXPORT_DIR);
+        
+        //Si le repertoire n'exsite pas
+        if(!repertoire.exists()){
+            
+            //On le créée
+            repertoire.mkdirs();
+            
+        }
+        
+        return repertoire.getAbsolutePath() + File.separator + CommonTools.genererChaineAleatoire() + "." + AppCommonContext.EXTENSION_EXCEL;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/GeneriConsultingManagerIFaces.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/GeneriConsultingManagerIFaces.java
new file mode 100644
index 0000000..bb37122
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/GeneriConsultingManagerIFaces.java
@@ -0,0 +1,89 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.abtracts;
+
+import com.bekosoftware.genericdaolayer.dao.tools.RestrictionsContainer;
+import com.bekosoftware.genericmanagerlayer.core.ifaces.GenericManager;
+import com.megatim.common.annotations.OrderType;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxconsultation.model.administration.User;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface GeneriConsultingManagerIFaces<T, K, S, ID extends Serializable, U> extends GenericManager<T, ID> {
+
+    K mapToDto(T entity);
+    
+    S mapToDetailDto(T entity);
+
+    public abstract String getEntityIdName();
+
+    public S getById(ID id);
+
+    public default List<K> convertListToDto(List<T> datas) {
+        List<K> dtos = new ArrayList<>();
+
+        if (datas != null) {
+            for (T data : datas) {
+                dtos.add(mapToDto(data));
+            }
+        }
+        return dtos;
+    }
+
+    public default List<K> getWithPagination(Integer pageNumber, Integer pagesize, U searchEntity, User connectedUser) {
+
+        Map<String, OrderType> orders = new HashMap<>();
+
+        //On trie par id
+        orders.put(getEntityIdName(), OrderType.DESC);
+        //On construit la requete
+        RestrictionsContainer requeteur = construireRequete(searchEntity, TypeOperation.AJOUTER);
+
+        //Construction de l'index
+        int index = (pageNumber - 1) * pagesize;
+
+        //On on recherche l'entité
+        List<T> datas = filter(requeteur.getPredicats(), orders, null, index, pagesize);
+        List<K> dtos = convertListToDto(datas);
+
+        return dtos;
+    }
+
+    public default List<K> getAll(U searchEntity, User connectedUser) {
+
+        //On construit la requete
+        RestrictionsContainer requeteur = construireRequete(searchEntity, TypeOperation.AJOUTER);
+        Map<String, OrderType> orders = new HashMap<>();
+
+        //On trie par id
+        orders.put(getEntityIdName(), OrderType.DESC);
+
+        //On on recherche l'entité
+        List<T> datas = filter(requeteur.getPredicats(), orders, null, 0, -1);
+        List<K> dtos = convertListToDto(datas);
+
+        return dtos;
+
+    }
+
+    public default Long size(U searchEntity) {
+        //On construit la requete
+        RestrictionsContainer requeteur = construireRequete(searchEntity, TypeOperation.AJOUTER);
+
+        //On on recherche l'entité
+        return count(requeteur.getPredicats());
+    }
+
+    public abstract RestrictionsContainer construireRequete(U searchEntity, TypeOperation typeOperation);
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/GenericCrudManagerIFaces.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/GenericCrudManagerIFaces.java
new file mode 100644
index 0000000..dd8da48
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/GenericCrudManagerIFaces.java
@@ -0,0 +1,58 @@
+package com.megatim.fdxconsultation.core.ifaces.abtracts;
+
+import com.megatim.fdxconsultation.model.administration.User;
+import java.io.Serializable;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface GenericCrudManagerIFaces<T, K, S, ID extends Serializable, U> extends GeneriConsultingManagerIFaces<T, K, S, ID, U> {
+
+    public default T add(T entity, User connectedUser) {
+
+        //Pre-traitements
+        beforeAdd(entity, connectedUser);
+
+        //On save
+        T newEntity = save(entity);
+
+        return newEntity;
+    }
+
+    @Override
+    public default S getById(ID id) {
+
+        T entity = find(getEntityIdName(), id);
+
+        return mapToDetailDto(entity);
+    }
+
+    public default T modify(ID id, T entity, User connectedUser) {
+
+        T actualEntity = find(getEntityIdName(), id);
+
+        //On copie les nouvelles valeurs
+        beforeModify(actualEntity, entity, connectedUser);
+
+        update(id, actualEntity);
+        
+        return actualEntity;
+    }
+
+    public default T remove(ID id, User connectedUser) {
+
+        T entity = find(getEntityIdName(), id);
+
+        beforeRemove(entity, connectedUser);
+
+        return update(id, entity);
+    }
+
+    public abstract void beforeAdd(T entity, User connectedUser);
+
+    public abstract void beforeRemove(T entity, User connectedUser);
+
+    public abstract void beforeModify(T actualEntity, T requestEntity, User connectedUser);
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/GenericReportingManagerIFaces.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/GenericReportingManagerIFaces.java
new file mode 100644
index 0000000..128d703
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/GenericReportingManagerIFaces.java
@@ -0,0 +1,254 @@
+package com.megatim.fdxconsultation.core.ifaces.abtracts;
+
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.Column;
+import com.megatim.reporting.adhoc.dto.HeaderData;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.pojo.DescriptionEtat;
+import com.megatim.reporting.adhoc.pojo.DescriptionSousEtat;
+import com.megatim.reporting.adhoc.pojo.ElementToDisplay;
+import com.megatim.reporting.adhoc.pojo.enums.ElementType;
+import com.megatim.reporting.adhoc.pojo.enums.Position;
+import com.megatim.reporting.adhoc.process.Processor;
+import com.megatim.reporting.adhoc.util.PdfUtil;
+import com.megatim.reporting.adhoc.util.PrintableColumnExtractor;
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface GenericReportingManagerIFaces<T, U, ID> {// T : entité de reporting, U : entité de recherche, ID : Type de l'id
+
+    public default File getTemplateFileForList() {
+        return Paths.get(AppCommonContext.TEMPLATE_DIR, AppCommonContext.TEMPLATE_LISTE).toFile();
+    }
+
+    public default File getTemplateFileForDetail() {
+        return Paths.get(AppCommonContext.TEMPLATE_DIR, AppCommonContext.TEMPLATE_DETAIL).toFile();
+    }
+
+    public default String getJasperFolder() {
+        return AppCommonContext.JASPER_DIR;
+    }
+
+    public default String exportFilesRepository() {
+        return AppCommonContext.EXPORT_DIR;
+    }
+
+    String getEntityIdName();
+
+    default String getReportName() {
+        return getClazz().getSimpleName() + new Date().getTime();
+    }
+
+    default String getSubReportName(String fieldName) {
+        return getClazz().getSimpleName() + "SousEtat" + (fieldName.charAt(0) + "").toUpperCase() + fieldName.substring(1) + new Date().getTime();
+    }
+
+    Class<T> getClazz();
+
+    List<T> getDatas(U searchEntity) throws Exception;
+
+    Map<String, Object> getParameters();
+
+    File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception;
+
+    File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception;
+
+    File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception;
+
+    File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception;
+
+    default String getVersion() {
+        return "Fdx-Consultation v1.0";
+    }
+
+    default String getLogo() {
+        return Paths.get(AppCommonContext.IMAGES_DIR, AppCommonContext.LOGO).toString();
+    }
+
+    default File generatePdf(ReportConfiguration<U> reportConfiguration, User userConnected, boolean isDetail) throws Exception {
+        File repertoire = Paths.get(exportFilesRepository()).toFile();
+
+        if (repertoire == null || !repertoire.exists()) {
+            repertoire = new File(exportFilesRepository());
+            repertoire.mkdirs();
+        }
+        if (reportConfiguration != null) {
+            DescriptionEtat descriptionEtat = getDescriptionEtat(reportConfiguration, userConnected, isDetail);
+            List<T> datas = getDatas(reportConfiguration.getSearchEntity());
+            descriptionEtat.getElementsToDisplay().addAll(getSystemElementsToDisplay(userConnected, datas, isDetail));
+
+            Map<String, Object> parameters = getParameters();
+            parameters.put("TITRE", reportConfiguration.getTitle());
+
+            if (userConnected != null) {
+                parameters.put("LOGIN_UTILISATEUR", userConnected.getUserName());
+            }
+            parameters.put("VERSION", getVersion());
+            parameters.put("LOGO_CENTRE", getLogo());
+            parameters.put("SUBREPORT_DIR", AppCommonContext.JASPER_DIR + File.separator);
+
+            String jasperFilePath = new Processor().process(descriptionEtat);
+            return PdfUtil.generatePdfFile(isDetail && datas.size() > 1 ? Arrays.asList(datas.get(0)) : datas,
+                    Paths.get(exportFilesRepository(), descriptionEtat.getReportName() + ".pdf").toString(),
+                    jasperFilePath, parameters);
+        } else {
+            return Files.createFile(Paths.get(Paths.get(exportFilesRepository(), getReportName() + ".pdf").toString())).toFile();
+        }
+
+    }
+
+    default File exportExcel(ReportConfiguration<U> reportConfiguration, User userConnected, boolean isDetail) throws Exception {
+        File repertoire = Paths.get(exportFilesRepository()).toFile();
+        ExportExcelGenerator<T> exportExcelGenerator = new ExportExcelGenerator();
+        if (repertoire == null || !repertoire.exists()) {
+            repertoire = new File(exportFilesRepository());
+            repertoire.mkdirs();
+        }
+        if (reportConfiguration != null) {
+            List<T> datas = getDatas(reportConfiguration.getSearchEntity());
+            return exportExcelGenerator.exporter(datas);
+        } else {
+            return Files.createFile(Paths.get(Paths.get(exportFilesRepository(), getReportName() + AppCommonContext.EXTENSION_EXCEL).toString())).toFile();
+        }
+    }
+
+    default DescriptionEtat getDescriptionEtat(ReportConfiguration reportConfiguration, User userConnected, boolean isDetail) {
+
+        DescriptionEtat descriptionEtat = new DescriptionEtat();
+        List<CustomField> printableFields = getCustomFields(reportConfiguration.getColumns());
+
+        descriptionEtat.setDetail(isDetail);
+        descriptionEtat.getElementsToDisplay().addAll(getElementsToDisplay(reportConfiguration.getHeaderDatas()));
+        descriptionEtat.getFieldsToDisplay().addAll(printableFields);
+        descriptionEtat.setReportName(getReportName());
+        descriptionEtat.setRepositoryFolder(getJasperFolder());
+
+        if (descriptionEtat.isDetail()) {
+            descriptionEtat.setTemplateFile(getTemplateFileForDetail());
+            descriptionEtat.setHaveLineNumber(false);
+        } else {
+            descriptionEtat.setTemplateFile(getTemplateFileForList());
+        }
+        descriptionEtat
+                .getSubReportDescriptions()
+                .addAll(getSousDescriptionSousEtats(printableFields
+                        .stream()
+                        .filter(p -> p.getClasse().isAssignableFrom(java.util.List.class) || p.getClasse().isAssignableFrom(java.util.Set.class))
+                        .collect(Collectors.toList())));
+
+        return descriptionEtat;
+    }
+
+    default List<DescriptionSousEtat> getSousDescriptionSousEtats(List<CustomField> printableListFields) {
+        List<DescriptionSousEtat> descSousEtatListe = new ArrayList<>();
+        printableListFields.stream().forEach(c -> {
+            DescriptionSousEtat descSousEtat = new DescriptionSousEtat();
+
+            descSousEtat.setDataField(c);
+            descSousEtat.setReportTitle(c.getLibelle());
+            descSousEtat.setRangSousEtat(c.getRang());
+            descSousEtat.setSubReportName(getSubReportName(c.getName()));
+            descSousEtat.getFieldsToDisplay().addAll(PrintableColumnExtractor.extractListFields(getClazz(), c));
+
+            descSousEtatListe.add(descSousEtat);
+        });
+
+        return descSousEtatListe;
+    }
+
+    default List<ElementToDisplay> getElementsToDisplay(List<HeaderData> headerDatas) {
+        List<ElementToDisplay> eltsToDisplay = new ArrayList<>();
+        headerDatas.stream().forEach(h -> {
+            ElementToDisplay elt = new ElementToDisplay(h.getLibelle(), h.getValue());
+            try {
+                elt.setPosition(Position.of(h.getPosition()));
+            } catch (Exception ex) {
+
+            }
+            eltsToDisplay.add(elt);
+        });
+        return eltsToDisplay;
+    }
+
+    default List<ElementToDisplay> getSystemElementsToDisplay(User userConnected, List<T> datas, boolean isDetail) {
+        List<ElementToDisplay> eltsToDisplay = new ArrayList<>();
+
+        ElementToDisplay elt = new ElementToDisplay("Edité le", "");
+        elt.setElementType(ElementType.DATE_GENERE);
+        elt.setPosition(Position.RIGHT);
+        eltsToDisplay.add(elt);
+
+        if (!isDetail) {
+            elt = new ElementToDisplay("Nombre Total", datas.size() + "");
+            eltsToDisplay.add(elt);
+        }
+
+        elt = new ElementToDisplay("Edité par", userConnected != null ? userConnected.getUserName() : "");
+        elt.setPosition(Position.RIGHT);
+        eltsToDisplay.add(elt);
+
+        return eltsToDisplay;
+    }
+
+    default List<CustomField> getCustomFields(List<Column> columns) {
+        List<CustomField> customFields = new ArrayList<>();
+        List<CustomField> printableFields = PrintableColumnExtractor.extract(getClazz());
+
+        columns.stream().forEach(c -> {
+            printableFields.stream().filter(p -> p.getLibelle().equals(c.getLibelle())).findFirst().ifPresent(p -> {
+                p.setRang(c.getRang());
+                customFields.add(p);
+            });
+
+        });
+        return customFields;
+    }
+
+    public default CriteriaFormRequest getExportOneCriterion(ID id) {
+        CriteriaFormRequest formRequest = new CriteriaFormRequest();
+        CriteriaEntityFromView fromView = new CriteriaEntityFromView();
+        fromView.setCriteriaValue(id);
+        fromView.setNomColonne(getEntityIdName());
+        fromView.setOperateur(Operateur.EQUALS);
+        formRequest.setCriteria(fromView);
+        return formRequest;
+    }
+
+    public default ReportConfiguration<CriteriaEntityFromView> finalReportConfiguration(ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        ReportConfiguration<CriteriaEntityFromView> finalConfig = null;
+
+        if (reportConfiguration != null) {
+            finalConfig = new ReportConfiguration();
+            finalConfig.setSearchEntity(reportConfiguration.getSearchEntity() != null ? reportConfiguration.getSearchEntity().getCriteria() : null);
+            finalConfig.setTitle(reportConfiguration.getTitle());
+            finalConfig.getColumns().addAll(reportConfiguration.getColumns());
+            finalConfig.getHeaderDatas().addAll(reportConfiguration.getHeaderDatas());
+        }
+        return finalConfig;
+    }
+
+    public default Response downloadFile(File file) {
+        Response.ResponseBuilder response = Response.ok((Object) file);
+        response.header("Content-Disposition", "attachment;filename=" + file.getName());
+        return response.build();
+
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/ManagerWithCriteriaEntityIFaces.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/ManagerWithCriteriaEntityIFaces.java
new file mode 100644
index 0000000..08d972c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/ManagerWithCriteriaEntityIFaces.java
@@ -0,0 +1,112 @@
+package com.megatim.fdxconsultation.core.ifaces.abtracts;
+
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.base.BaseEntity;
+import java.util.Date;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ * @param <T> : Entite reelle
+ * @param <ID> : Classe de l'identifiant
+ * @param <U> : entité qui représente un utilisateur
+ */
+public interface ManagerWithCriteriaEntityIFaces<T extends Object, ID, U> {
+
+    <R extends CustomDAOWithCriteriaEntityIfaces<T, ID>> R getDao();
+
+    default T save(T entity) {
+        return getDao().save(entity);
+    }
+
+    default T add(T entity, User connectedUser) {
+        beforeAdd(entity, connectedUser);
+
+        if (entity instanceof BaseEntity) {
+            BaseEntity baseEntity = (BaseEntity) entity;
+            baseEntity.setDateCreation(new Date());
+            baseEntity.setTypeOperation(TypeOperation.AJOUTER);
+            baseEntity.setUtilisateurCreation(connectedUser != null ? connectedUser.getUserName() : null);
+        }
+        logAfterSave(entity, connectedUser);
+        return getDao().save(entity);
+    }
+
+    default void delete(ID id, User connectedUser) {
+        T entity = getDao().getById(id);
+        beforeDelete(entity, connectedUser);
+        if (entity instanceof BaseEntity) {
+            BaseEntity baseEntity = (BaseEntity) entity;
+            baseEntity.setDateSuppression(new Date());
+            baseEntity.setUtilisateurSuppression(connectedUser != null ? connectedUser.getUserName() : null);
+            baseEntity.setTypeOperation(TypeOperation.SUPPRIMER);
+            getDao().save(entity);
+        } else {
+            getDao().delete(entity);
+        }
+        logAfterDelete(entity, connectedUser);
+    }
+
+    default void delete(User connectedUser, T entity) {
+        beforeDelete(entity, connectedUser);
+        if (entity instanceof BaseEntity) {
+            BaseEntity baseEntity = (BaseEntity) entity;
+            baseEntity.setDateSuppression(new Date());
+            baseEntity.setUtilisateurSuppression(connectedUser != null ? connectedUser.getUserName() : null);
+            baseEntity.setTypeOperation(TypeOperation.SUPPRIMER);
+            getDao().delete(entity);
+        } else {
+            getDao().delete(entity);
+        }
+        logAfterDelete(entity, connectedUser);
+    }
+
+    public default T getById(ID id) {
+        return getDao().getById(id);
+    }
+
+    default T update(ID id, T entity, User connectedUser) {
+        T refreshEntity = getDao().getById(id);
+        beforeUpdate(refreshEntity, entity, connectedUser);
+        if (entity instanceof BaseEntity) {
+            BaseEntity baseEntity = (BaseEntity) refreshEntity;
+            baseEntity.setDateDerniereModification(new Date());
+            baseEntity.setUtilisateurModification(connectedUser != null ? connectedUser.getUserName() : null);
+        }
+        logAfterUpdate(entity, connectedUser);
+        return getDao().save(refreshEntity);
+    }
+
+    public default List<T> findWithPagination(CriteriaEntityFromView criterion, List<String> fetchEagerFields, List<OrderByDefinition> orderByFields, Integer pageNumber, Integer pageSize) throws Exception {
+        return getDao().findWithPagination(criterion, fetchEagerFields, orderByFields, pageNumber, pageSize);
+    }
+
+    public default List<T> findAll(CriteriaEntityFromView criterion, List<String> fetchEagerFields, List<OrderByDefinition> orderByFields) throws Exception {
+        return (List<T>) getDao().findAll(criterion, fetchEagerFields, orderByFields);
+    }
+
+    public default Long count(CriteriaEntityFromView criterion) throws Exception {
+        return getDao().count(criterion);
+    }
+
+    default void beforeAdd(T entity, User connectedUser) {
+    }
+
+    default void beforeDelete(T entity, User connectedUser) {
+    }
+
+    default void beforeUpdate(T refreshEntity, T entity, User connectedUser) {
+    }
+    
+    public default void logAfterSave(T entity, User connectedUser){}
+
+    public default void logAfterUpdate(T entity, User connectedUser){}
+
+    public default void logAfterDelete(T entity, User connectedUser){}
+    
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/PaginationWithCriteriaEntity.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/PaginationWithCriteriaEntity.java
new file mode 100644
index 0000000..1f32dcf
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/PaginationWithCriteriaEntity.java
@@ -0,0 +1,27 @@
+package com.megatim.fdxconsultation.core.ifaces.abtracts;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithCriteriaEntityDAO;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface PaginationWithCriteriaEntity<T, ID> {
+
+    PaginationWithCriteriaEntityDAO<T, ID> paginationWithCriteriaEntityDAO();
+
+    public default List<T> findWithPagination(CriteriaEntityFromView criterion, List<String> fetchEagerFields, List<OrderByDefinition> orderByFields, Integer pageNumber, Integer pageSize) throws Exception {
+        return paginationWithCriteriaEntityDAO().findWithPagination(criterion, fetchEagerFields, orderByFields,  pageNumber, pageSize);
+    }
+    
+    public default List<T> findAll(CriteriaEntityFromView criterion, List<String> fetchEagerFields, List<OrderByDefinition> orderByFields) throws Exception {
+        return paginationWithCriteriaEntityDAO().findAll(criterion, fetchEagerFields, orderByFields);
+    }
+
+    public default Long count(CriteriaEntityFromView criterion) throws Exception {
+        return paginationWithCriteriaEntityDAO().count(criterion);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/PaginationWithSearchEntity.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/PaginationWithSearchEntity.java
new file mode 100644
index 0000000..fb151d0
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/PaginationWithSearchEntity.java
@@ -0,0 +1,37 @@
+package com.megatim.fdxconsultation.core.ifaces.abtracts;
+
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithSearchEnityDAO;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface PaginationWithSearchEntity<T extends Object, ID, S> {
+
+    PaginationWithSearchEnityDAO<T, ID, S> getPaginationDao();
+
+    default List<T> all() {
+        return getPaginationDao().all()
+                .stream()
+                .collect(Collectors.toList());
+    }
+
+    default List<T> findAll(S searchEntity) {
+        return getPaginationDao().findAllBySearchEntity(searchEntity)
+                .stream()
+                .collect(Collectors.toList());
+    }
+
+    default List<T> findWithPagination(int pageNumber, int pagesize, S searchEntity) {
+        return getPaginationDao().findAllBySearchEntity(pageNumber, pagesize, searchEntity)
+                .stream()
+                .collect(Collectors.toList());
+    }
+
+    default Long count(S searchEntity) {
+        return getPaginationDao().countBySearchEntity(searchEntity);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/TypeFichierReportingManagerIFaces.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/TypeFichierReportingManagerIFaces.java
new file mode 100644
index 0000000..2512f5c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/TypeFichierReportingManagerIFaces.java
@@ -0,0 +1,160 @@
+package com.megatim.fdxconsultation.core.ifaces.abtracts;
+
+import com.megatim.fdxcommons.core.impl.tools.CommonUtilities;
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dtos.reporting.CustomTypeFichierReportConfiguration;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.Column;
+import com.megatim.reporting.adhoc.dto.HeaderData;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.pojo.DescriptionEtat;
+import com.megatim.reporting.adhoc.pojo.ElementToDisplay;
+import com.megatim.reporting.adhoc.pojo.enums.ElementType;
+import com.megatim.reporting.adhoc.pojo.enums.Position;
+import com.megatim.reporting.adhoc.process.Processor;
+import com.megatim.reporting.adhoc.util.PdfUtil;
+import java.io.File;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface TypeFichierReportingManagerIFaces {
+
+    public default File getTemplateFileForList() {
+        return Paths.get(AppCommonContext.TEMPLATE_DIR, AppCommonContext.TEMPLATE_LISTE).toFile();
+    }
+
+    List<ColumnDefinition> getColumnDefinition(String codeTypeFichier) throws Exception;
+
+    public default File getTemplateFileForDetail() {
+        return Paths.get(AppCommonContext.TEMPLATE_DIR, AppCommonContext.TEMPLATE_DETAIL).toFile();
+    }
+
+    public default String getJasperFolder() {
+        return AppCommonContext.JASPER_DIR;
+    }
+
+    public default String pdfFilesRepository() {
+        return AppCommonContext.PDF_DIR;
+    }
+
+    List<Object> getDatas(CriteriaEntityFromView criterion, String codeTypeFichier, boolean isDetail);
+
+    Map<String, Object> getParameters();
+
+    default String getVersion() {
+        return "Fdx-Consultation v1.0";
+    }
+
+    default String getLogo() {
+        return Paths.get(AppCommonContext.IMAGES_DIR, AppCommonContext.LOGO).toString();
+    }
+
+    default File generatePdf(CustomTypeFichierReportConfiguration reportConfiguration, String codeTypeFichier, User userConnected, boolean isDetail) throws Exception {
+        DescriptionEtat descriptionEtat = getDescriptionEtat(reportConfiguration, codeTypeFichier, userConnected, isDetail);
+        List<Object> datas = getDatas(reportConfiguration.getCriterionFromView(), codeTypeFichier, isDetail);
+
+        descriptionEtat.getElementsToDisplay().addAll(getSystemElementsToDisplay(userConnected, datas, isDetail));
+
+        Map<String, Object> parameters = getParameters();
+        parameters.put("TITRE", reportConfiguration.getTitle());
+
+        if (userConnected != null) {
+            parameters.put("LOGIN_UTILISATEUR", userConnected.getUserName());
+        }
+        parameters.put("VERSION", getVersion());
+        parameters.put("LOGO_CENTRE", getLogo());
+        parameters.put("SUBREPORT_DIR", AppCommonContext.JASPER_DIR);
+
+        String jasperFilePath = new Processor().process(descriptionEtat);
+
+        return PdfUtil.generatePdfFile(isDetail && datas.size() > 1 ? Arrays.asList(datas.get(0)) : datas,
+                Paths.get(pdfFilesRepository(), descriptionEtat.getReportName() + ".pdf").toString(),
+                jasperFilePath, parameters);
+    }
+
+    default DescriptionEtat getDescriptionEtat(CustomTypeFichierReportConfiguration reportConfiguration, String codeTypeFichier, User userConnected, boolean isDetail) throws Exception {
+
+        DescriptionEtat descriptionEtat = new DescriptionEtat();
+        descriptionEtat.setDetail(isDetail);
+        descriptionEtat.getElementsToDisplay().addAll(getElementsToDisplay(reportConfiguration.getHeaderDatas()));
+        descriptionEtat.getFieldsToDisplay().addAll(getCustomFields(codeTypeFichier, reportConfiguration.getColumns()));
+        descriptionEtat.setReportName(codeTypeFichier + new Date().getTime());
+        descriptionEtat.setRepositoryFolder(getJasperFolder());
+
+        if (descriptionEtat.isDetail()) {
+            descriptionEtat.setTemplateFile(getTemplateFileForDetail());
+            descriptionEtat.setHaveLineNumber(false);
+        } else {
+            descriptionEtat.setTemplateFile(getTemplateFileForList());
+        }
+
+        return descriptionEtat;
+    }
+
+    default List<ElementToDisplay> getElementsToDisplay(List<HeaderData> headerDatas) {
+        List<ElementToDisplay> eltsToDisplay = new ArrayList<>();
+        headerDatas.stream().forEach(h -> {
+            ElementToDisplay elt = new ElementToDisplay(h.getLibelle(), h.getValue());
+            try {
+                elt.setPosition(Position.of(h.getPosition()));
+            } catch (Exception ex) {
+
+            }
+            eltsToDisplay.add(elt);
+        });
+        return eltsToDisplay;
+    }
+
+    default List<ElementToDisplay> getSystemElementsToDisplay(User userConnected, List<Object> datas, boolean isDetail) {
+        List<ElementToDisplay> eltsToDisplay = new ArrayList<>();
+
+        ElementToDisplay elt = new ElementToDisplay("Edité le", "");
+        elt.setElementType(ElementType.DATE_GENERE);
+        elt.setPosition(Position.RIGHT);
+        eltsToDisplay.add(elt);
+
+        if (!isDetail) {
+            elt = new ElementToDisplay("Nombre Total", datas.size() + "");
+            eltsToDisplay.add(elt);
+        }
+
+        elt = new ElementToDisplay("Edité par", userConnected != null ? userConnected.getUserName() : "");
+        elt.setPosition(Position.RIGHT);
+        eltsToDisplay.add(elt);
+
+        return eltsToDisplay;
+    }
+
+    default List<CustomField> getCustomFields(String codeTypeFichier, List<Column> columns) throws Exception {
+        columns.stream().forEach(c -> c.getLibelle());
+        List<ColumnDefinition> columnDefinitions = getColumnDefinition(codeTypeFichier);
+
+        List<CustomField> customFields = new ArrayList<>();
+
+        columns.stream().forEach(c -> {
+            Optional<ColumnDefinition> optionalColumn = columnDefinitions.stream().filter(p -> p.getName().equalsIgnoreCase(c.getLibelle())).findFirst();
+
+            if (optionalColumn.isPresent()) {
+                CustomField customField = new CustomField(c.getLibelle().toUpperCase(), c.getLibelle().toLowerCase());
+                customField.setRang(c.getRang());
+                TypeDonnee typeDonnee = TypeDonnee.fromValeur(optionalColumn.get().getTypeDonnee());
+                customField.setClasse(CommonUtilities.fullQualifiedNameTypeFromTypeDonnee(typeDonnee));
+
+                customFields.add(customField);
+            }
+        });
+        return customFields;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/ActionManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/ActionManager.java
new file mode 100644
index 0000000..0e86a7c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/ActionManager.java
@@ -0,0 +1,20 @@
+package com.megatim.fdxconsultation.core.ifaces.administration;
+
+import com.bekosoftware.genericmanagerlayer.core.ifaces.GenericManager;
+import com.megatim.fdxconsultation.model.administration.Action;
+
+/**
+ * Interface etendue par les interfaces locale et remote du manager 
+ * @since Tue Jan 09 15:21:42 WAT 2018
+ * 
+ */
+public interface ActionManager extends GenericManager<Action, Long> {
+
+    /**
+     * Nom du service
+     * 
+     */
+    public final static String SERVICE_NAME = "ActionManager";
+    
+
+}
\ No newline at end of file
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/HistoriqueMotDePasseManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/HistoriqueMotDePasseManager.java
new file mode 100644
index 0000000..f7da2d7
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/HistoriqueMotDePasseManager.java
@@ -0,0 +1,36 @@
+package com.megatim.fdxconsultation.core.ifaces.administration;
+
+import com.bekosoftware.genericmanagerlayer.core.ifaces.GenericManager;
+import com.megatim.fdxconsultation.model.administration.HistoriqueMotDePasse;
+import com.megatim.fdxconsultation.model.administration.User;
+
+/**
+ * Interface etendue par les interfaces locale et remote du manager 
+ * @since Tue Jan 09 15:21:42 WAT 2018
+ * 
+ */
+public interface HistoriqueMotDePasseManager extends GenericManager<HistoriqueMotDePasse, Long> {
+
+    /**
+     * Nom du service
+     * 
+     */
+    public final static String SERVICE_NAME = "HistoriqueMotDePasseManager";
+    
+    /**
+     * Permet d'ajouter un nouveau mot de passe
+     * @param motDePasse
+     * @param user
+     * @return 
+     */
+    public void ajouter(String motDePasse, User user);
+    
+    /**
+     * Permet de determiner si le mot de passe existe
+     * @param motDePasse
+     * @param user
+     * @return 
+     */
+    public boolean siMotDePasseExiste(String motDePasse, User user);
+    
+}
\ No newline at end of file
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/JournalActionUtilisateurManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/JournalActionUtilisateurManager.java
new file mode 100644
index 0000000..b77a801
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/JournalActionUtilisateurManager.java
@@ -0,0 +1,30 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.administration;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GeneriConsultingManagerIFaces;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericReportingManagerIFaces;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.PaginationWithCriteriaEntity;
+import com.megatim.fdxconsultation.model.administration.JournalActionUtilisateur;
+import com.megatim.fdxconsultation.reporting.model.administration.JournalActionUtilisateurReporting;
+import com.megatim.fdxconsultation.model.dto.JournalActionUtilisateurDto;
+import com.megatim.fdxconsultation.model.searchentities.JournalActionUtilisateurSearch;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface JournalActionUtilisateurManager extends GeneriConsultingManagerIFaces<JournalActionUtilisateur, JournalActionUtilisateurDto, JournalActionUtilisateurDto, Long, JournalActionUtilisateurSearch>, PaginationWithCriteriaEntity<JournalActionUtilisateur, Long>, 
+        GenericReportingManagerIFaces<JournalActionUtilisateurReporting, CriteriaEntityFromView, Long> {
+ 
+    /**
+     * Permet de recuperer un journalConnexionUtilisateur via son id
+     * @param id
+     * @return 
+     */
+    JournalActionUtilisateur findById(Long id);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/JournalConnexionUtilisateurManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/JournalConnexionUtilisateurManager.java
new file mode 100644
index 0000000..72da0d5
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/JournalConnexionUtilisateurManager.java
@@ -0,0 +1,30 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.administration;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GeneriConsultingManagerIFaces;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericReportingManagerIFaces;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.PaginationWithCriteriaEntity;
+import com.megatim.fdxconsultation.model.administration.JournalConnexionUtilisateur;
+import com.megatim.fdxconsultation.reporting.model.administration.JournalConnexionUtilisateurReporting;
+import com.megatim.fdxconsultation.model.dto.JournalConnexionUtilisateurDto;
+import com.megatim.fdxconsultation.model.searchentities.JournalConnexionUtilisateurSearch;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface JournalConnexionUtilisateurManager extends GeneriConsultingManagerIFaces<JournalConnexionUtilisateur, JournalConnexionUtilisateurDto, JournalConnexionUtilisateurDto, Long, JournalConnexionUtilisateurSearch>, PaginationWithCriteriaEntity<JournalConnexionUtilisateur, Long>,
+        GenericReportingManagerIFaces<JournalConnexionUtilisateurReporting, CriteriaEntityFromView, Long> {
+    
+    /**
+     * Permet de recuperer un journalConnexionUtilisateur via son id
+     * @param id
+     * @return 
+     */
+    JournalConnexionUtilisateur findById(Long id);
+ 
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/RoleManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/RoleManager.java
new file mode 100644
index 0000000..fe2a658
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/RoleManager.java
@@ -0,0 +1,62 @@
+package com.megatim.fdxconsultation.core.ifaces.administration;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericCrudManagerIFaces;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericReportingManagerIFaces;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.PaginationWithCriteriaEntity;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.PaginationWithSearchEntity;
+import com.megatim.fdxconsultation.model.administration.Role;
+import com.megatim.fdxconsultation.reporting.model.administration.RoleReporting;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.RoleDto;
+import com.megatim.fdxconsultation.model.searchentities.RoleSearch;
+import java.util.List;
+
+/**
+ * Interface etendue par les interfaces locale et remote du manager
+ *
+ * @since Tue Jan 09 15:21:42 WAT 2018
+ *
+ */
+public interface RoleManager extends GenericCrudManagerIFaces<Role, RoleDto, RoleDto, Long, RoleSearch>,
+        PaginationWithCriteriaEntity<Role, Long>,
+        PaginationWithSearchEntity<Role, Long, RoleSearch>,
+        GenericReportingManagerIFaces<RoleReporting, CriteriaEntityFromView, Long> {
+
+    /**
+     * Methode permet de valider un rôle
+     * @param libelle
+     * @param connectedUser 
+     */
+    void validate(String libelle, User connectedUser);
+
+    /**
+     * Methode permet de rejeter un rôle
+     * @param libelle
+     * @param role
+     * @param connectedUser 
+     */
+    void reject(String libelle, Role role, User connectedUser);
+    
+    /**
+    * Methode permettant de vérifier si un rôle possède des utilisateurs liés à lui
+    * @param role
+    * @return 
+    */
+    public boolean siPossedeUtilisateurs(Role role);
+    
+    /**
+     * Methode permettant de determiner le nombre d'utilisateur d'un groupe
+     * @param entity
+     * @return 
+     */
+    public Integer obtenirNbreUtilisateurRole(Role entity);
+    
+    /**
+     * Methode permettant de formater une liste de roles en y ajoutant des informations supplémentaires
+     * @param liste
+     * @return 
+     */
+    public List<Role> formaterDonnees(List<Role> liste);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/UserManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/UserManager.java
new file mode 100644
index 0000000..fdac544
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/administration/UserManager.java
@@ -0,0 +1,71 @@
+package com.megatim.fdxconsultation.core.ifaces.administration;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericReportingManagerIFaces;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericCrudManagerIFaces;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.PaginationWithCriteriaEntity;
+import com.megatim.fdxconsultation.model.administration.Role;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.reporting.model.administration.UserReporting;
+import com.megatim.fdxconsultation.model.dto.EditPasswordDto;
+import com.megatim.fdxconsultation.model.dto.UserDto;
+import com.megatim.fdxconsultation.model.dto.UserSlimDto;
+import com.megatim.fdxconsultation.model.searchentities.UserSearch;
+import java.util.List;
+
+/**
+ * Interface etendue par les interfaces locale et remote du manager
+ *
+ * @since Tue Jan 09 15:21:42 WAT 2018
+ *
+ */
+public interface UserManager extends GenericCrudManagerIFaces<User, UserSlimDto, UserDto, Long, UserSearch>,
+        PaginationWithCriteriaEntity<User, Long>,
+        GenericReportingManagerIFaces<UserReporting, CriteriaEntityFromView, Long> {
+
+    /**
+     * Permet de recuperer un utilisateur via ces informations de connexion
+     *
+     * @param username
+     * @param motDePasse
+     * @return
+     */
+    User recuperUtilisateur(String username, String motDePasse);
+    
+    /**
+     * Permet de recuperer un utilisateur via son id
+     * @param id
+     * @return 
+     */
+    User findById(Long id);
+
+    /**
+     * Permet de recuperer un utilisateur via ces informations de connexion
+     *
+     * @param username
+     * @return
+     */
+    User recuperUtilisateur(String username);
+    
+    void editPassword(String username, EditPasswordDto editPasswordDto);
+
+    void validate(String username, User connectedUser);
+
+    void reject(String username, User user, User connectedUser);
+    
+    /**
+     * Permet de valider les paramètre de connexion
+     * @param username
+     * @param password
+     * @return 
+     */
+    public List<String> validerParametresConnexion(String username, String password);
+    
+    /**
+     * Methode Permettant de recuperer tous les utilateurs liés à un même rôle
+     * @param role
+     * @return 
+     */
+    public List<User> obtenirListeUtilisateursRole(Role role);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/api/token/ApiTokenManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/api/token/ApiTokenManager.java
new file mode 100644
index 0000000..17b35bb
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/api/token/ApiTokenManager.java
@@ -0,0 +1,29 @@
+package com.megatim.fdxconsultation.core.ifaces.api.token;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericCrudManagerIFaces;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericReportingManagerIFaces;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.PaginationWithCriteriaEntity;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.api.token.ApiToken;
+import com.megatim.fdxconsultation.reporting.model.api.token.ApiTokenReporting;
+import com.megatim.fdxconsultation.model.dto.ApiTokenDto;
+import com.megatim.fdxconsultation.model.searchentities.ApiTokenSearch;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ApiTokenManager extends GenericCrudManagerIFaces<ApiToken, ApiTokenDto, ApiTokenDto, Long, ApiTokenSearch>,
+        PaginationWithCriteriaEntity<ApiToken, Long>,
+        GenericReportingManagerIFaces<ApiTokenReporting, CriteriaEntityFromView, Long> {
+
+    String addAndGetToken(ApiToken apiToken, User connectedUser);
+
+    String updateAndGetToken(Long id, ApiToken apiTokenToUpdate, User connectedUser);
+
+    ApiToken lock(Long id, User connectedUser);
+
+    ApiToken unLock(Long id, User connectedUser);
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/configuration/CodeStatutHttpManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/configuration/CodeStatutHttpManager.java
new file mode 100644
index 0000000..31a015b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/configuration/CodeStatutHttpManager.java
@@ -0,0 +1,29 @@
+package com.megatim.fdxconsultation.core.ifaces.configuration;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericReportingManagerIFaces;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericCrudManagerIFaces;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.PaginationWithCriteriaEntity;
+import com.megatim.fdxconsultation.model.configuration.CodeStatutHttp;
+import com.megatim.fdxconsultation.reporting.model.configuration.CodeStatutHttpReporting;
+import com.megatim.fdxconsultation.model.dto.CodeStatutHttpDto;
+import com.megatim.fdxconsultation.model.searchentities.CodeStatutHttpSearch;
+
+/**
+ * Interface etendue par les interfaces locale et remote du manager
+ *
+ * @since Tue Jan 09 15:21:42 WAT 2018
+ *
+ */
+public interface CodeStatutHttpManager extends GenericCrudManagerIFaces<CodeStatutHttp, CodeStatutHttpDto, CodeStatutHttpDto, Long, CodeStatutHttpSearch>,
+        PaginationWithCriteriaEntity<CodeStatutHttp, Long>,
+        GenericReportingManagerIFaces<CodeStatutHttpReporting, CriteriaEntityFromView, Long> {
+
+    /**
+     * Methode permettant de recuperer le libellé via un code
+     * @param code
+     * @return 
+     */
+    public String getLibelleByCode(String code);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/customtypefichier/CustomTypeFichierManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/customtypefichier/CustomTypeFichierManager.java
new file mode 100644
index 0000000..0c0f913
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/customtypefichier/CustomTypeFichierManager.java
@@ -0,0 +1,58 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.customtypefichier;
+
+import com.megatim.fdxcommons.tools.database.tables.FdxTableColumnData;
+import com.megatim.fdxcommons.tools.database.tables.FdxTableRow;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import java.beans.IntrospectionException;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.TypeFichierReportingManagerIFaces;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface CustomTypeFichierManager extends TypeFichierReportingManagerIFaces {
+
+    default List<Object> initializeDataSource(List<FdxTableRow> data, Class<?> classe) {
+        List<Object> finalData = new ArrayList<>();
+
+        try {
+            for (FdxTableRow fdxTableRow : data) {
+                Object dynamicObject = classe.newInstance();
+
+                for (FdxTableColumnData dc : fdxTableRow.getDataColumns()) {
+                    Method method = new PropertyDescriptor(dc.getName(), classe).getWriteMethod();
+                    method.invoke(dynamicObject, dc.getValue());
+                }
+                finalData.add(dynamicObject);
+            }
+        } catch (InstantiationException | IllegalAccessException | IntrospectionException | IllegalArgumentException | InvocationTargetException ex) {
+            Logger.getLogger(CustomTypeFichierManager.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+        return finalData;
+    }
+
+    //Chargement de la classe compilée.
+    default Class<?> loadClass(String className) throws MalformedURLException, ClassNotFoundException {
+        
+        URLClassLoader classLoader = URLClassLoader.newInstance(new URL[]{Paths.get(AppCommonContext.DYNAMIC_CLASSES_DIR).toUri().toURL()});
+        return Class.forName(AppCommonContext.DYNAMIC_CLASSES_PACKAGE + "." + className, true, classLoader);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/dataproduction/DataProductionManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/dataproduction/DataProductionManager.java
new file mode 100644
index 0000000..302eb3d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/dataproduction/DataProductionManager.java
@@ -0,0 +1,25 @@
+package com.megatim.fdxconsultation.core.ifaces.dataproduction;
+
+import com.megatim.fdxcommons.model.dtos.dataproduction.DataProductionDto;
+import com.megatim.fdxcommons.model.enumeration.StatutDataProduction;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericReportingManagerIFaces;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.ManagerWithCriteriaEntityIFaces;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dataproduction.DataProduction;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface DataProductionManager extends ManagerWithCriteriaEntityIFaces<DataProduction, Long, User>,
+        GenericReportingManagerIFaces<DataProductionDto, CriteriaEntityFromView, Long> {
+
+    List<DataProduction> findAll(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields);
+
+    List<DataProduction> findWithPagination(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields, int pageNumber, int pageSize);
+    
+    List<DataProduction> findByStatutDataProduction(StatutDataProduction statut);
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/dataproduction/DataProductionToDeleteManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/dataproduction/DataProductionToDeleteManager.java
new file mode 100644
index 0000000..1ede2e4
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/dataproduction/DataProductionToDeleteManager.java
@@ -0,0 +1,16 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.dataproduction;
+
+import com.megatim.fdxcommons.model.dataproduction.DataProductionToDelete;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.ManagerWithCriteriaEntityIFaces;
+import com.megatim.fdxconsultation.model.administration.User;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface DataProductionToDeleteManager extends ManagerWithCriteriaEntityIFaces<DataProductionToDelete, Long, User> {
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/dataproduction/metadata/ProductionMetaDataManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/dataproduction/metadata/ProductionMetaDataManager.java
new file mode 100644
index 0000000..93908ce
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/dataproduction/metadata/ProductionMetaDataManager.java
@@ -0,0 +1,18 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.dataproduction.metadata;
+
+import com.megatim.fdxcommons.model.dataproduction.metadata.ProductionMetaData;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.ManagerWithCriteriaEntityIFaces;
+import com.megatim.fdxconsultation.model.administration.User;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ProductionMetaDataManager extends ManagerWithCriteriaEntityIFaces< ProductionMetaData, Long, User> {
+
+    void deleteById(Long dataProductionId);
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/documents/CategoryManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/documents/CategoryManager.java
new file mode 100644
index 0000000..2e0f5ba
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/documents/CategoryManager.java
@@ -0,0 +1,22 @@
+package com.megatim.fdxconsultation.core.ifaces.documents;
+
+import com.bekosoftware.genericmanagerlayer.core.ifaces.GenericManager;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.documents.Category;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface CategoryManager extends GenericManager<Category, Long> {
+
+    Category add(Category category, User connectedUser);
+
+    Category update(Long id, Category category, User connectedUser);
+
+    Category delete(Long id, User connectedUser);
+
+    List<Category> loadAll();
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/documents/DocumentManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/documents/DocumentManager.java
new file mode 100644
index 0000000..c9810d6
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/documents/DocumentManager.java
@@ -0,0 +1,19 @@
+package com.megatim.fdxconsultation.core.ifaces.documents;
+
+import com.bekosoftware.genericmanagerlayer.core.ifaces.GenericManager;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.documents.Document;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface DocumentManager extends GenericManager<Document, Long> {
+
+    Document add(Long CategoryId, Document document, User connectedUser);
+
+    Document update(Long id, Document document, User connectedUser);
+
+    Document delete(Long id, User connectedUser);
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/favoritessearch/FavoriteSearchManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/favoritessearch/FavoriteSearchManager.java
new file mode 100644
index 0000000..57d98fe
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/favoritessearch/FavoriteSearchManager.java
@@ -0,0 +1,20 @@
+package com.megatim.fdxconsultation.core.ifaces.favoritessearch;
+
+import com.bekosoftware.genericmanagerlayer.core.ifaces.GenericManager;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.PaginationWithCriteriaEntity;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.FavoriteSearchDto;
+import com.megatim.fdxconsultation.model.favoritessearch.FavoriteSearch;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface FavoriteSearchManager extends GenericManager<FavoriteSearch, Long>, PaginationWithCriteriaEntity<FavoriteSearch, Long> {
+
+    void add(FavoriteSearchDto favoriteSearchRequest, User user);
+
+    List<FavoriteSearch> all(String userName);
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/helper/DataConsumptionOperations.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/helper/DataConsumptionOperations.java
new file mode 100644
index 0000000..85183a6
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/helper/DataConsumptionOperations.java
@@ -0,0 +1,32 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.helper;
+
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.PageData;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dtos.reporting.CustomTypeFichierReportConfigurationFromView;
+import java.io.File;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface DataConsumptionOperations {
+
+    List<Map<String, Object>> findByCriteria(String referentielVersion, String codeTypeFichier, CriteriaEntityFromView criterion);
+
+    PageData findByCriteriaWithPagination(String referentielVersion, String codeTypeFichier, CriteriaEntityFromView criterion, int pageNumber, int pageSize);
+
+    Long count(String referentielVersion, String codeTypeFichier, CriteriaEntityFromView criterion);
+
+    List<ColumnDefinition> getPrintableColumns(String referentielVersion, String codeTypeFichier);
+
+    public File printAll(String referentielVersion, String codeTypeFichier, CustomTypeFichierReportConfigurationFromView reportConfigurationFromView, User userConnected) throws Exception;
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/helper/RequestHandler.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/helper/RequestHandler.java
new file mode 100644
index 0000000..38d6c04
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/helper/RequestHandler.java
@@ -0,0 +1,21 @@
+package com.megatim.fdxconsultation.core.ifaces.helper;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.model.dto.stats.TableauBordSlimDto;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface RequestHandler {
+
+    void deleteTableauBord(Long id);
+
+    List<TableauBordSlimDto> findTableauBord(CriteriaFormRequest criteriaFormRequest) throws Exception;
+
+    List<TableauBordSlimDto> findTableauBordWithPagination(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields, int pageNumber, int pageSize) throws Exception;
+
+    Long countTableauBord(CriteriaFormRequest criteriaFormRequest) throws Exception;
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/helper/RoutingChecker.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/helper/RoutingChecker.java
new file mode 100644
index 0000000..b63919b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/helper/RoutingChecker.java
@@ -0,0 +1,21 @@
+package com.megatim.fdxconsultation.core.ifaces.helper;
+
+import com.megatim.fdxcommons.model.pojo.DataInMemory;
+
+/**
+ *
+ * @author lenovo
+ */
+public interface RoutingChecker {
+
+    void stopIfNotProducer(String codeTypeFichier, DataInMemory dataInMemory, String codeParticipant);
+
+    void stopIfNotConsumer(String codeTypeFichier, DataInMemory dataInMemory, String codeParticipant);
+
+//    void stopIfNatureProductionIsNotCumulative(String codeTypeFichier, String referentielEncours);
+//
+//    void stopIfTypeFichierNotExists(String codeTypeFichier, DataInMemory dataInMemory);
+//    
+//    void stopIfCurrentReferentielNotExists(DataInMemory data);
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/helper/TableInsert.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/helper/TableInsert.java
new file mode 100644
index 0000000..a127caf
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/helper/TableInsert.java
@@ -0,0 +1,21 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.helper;
+
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import com.megatim.fdxcommons.tools.database.tables.FdxTableRow;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface TableInsert {
+
+    Long insert(CommonDataProduction dataProduction, List<FdxTableRow> data, Connection connection) throws NamingException, SQLException, Exception;
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/helper/TableauBordHandler.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/helper/TableauBordHandler.java
new file mode 100644
index 0000000..7011d3a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/helper/TableauBordHandler.java
@@ -0,0 +1,94 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.helper;
+
+import com.megatim.fdxcommons.model.pojo.BetweenOperatorValues;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxconsultation.model.dto.stats.TableConfigurationDto;
+import com.megatim.fdxconsultation.model.dto.stats.TableauBordDto;
+import com.megatim.fdxconsultation.model.stats.CriteriaEntityPersisted;
+import com.megatim.fdxconsultation.model.stats.TableConfiguration;
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import java.util.Set;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface TableauBordHandler {
+
+    TableauBordDto tableauBordToTableauBordDto(TableauBord tableauBord);
+
+    TableauBord tableauBordDtoToTableauBord(TableauBordDto dto, Referentiel referentiel);
+
+    TableConfigurationDto tableConfigurationToTableConfigurationDto(TableConfiguration tableConf);
+
+    void reconduireTableauBordValides(Referentiel previousRef, Referentiel newRef, Set<String> typeFichiersToMigrate);
+
+    void stopIfUserSpecificTableauBordExists(String codeTypeFichier, String referentielVersion, String userName) throws Exception;
+
+    void stopIfGlobaleTableauBordExists(String codeTypeFichier, String referentielVersion) throws Exception;
+
+    public default CriteriaEntityFromView criteriaEntityPersistedToCriteriaEntityFromView(CriteriaEntityPersisted persisted) {
+        if (persisted != null) {
+            CriteriaEntityFromView mainCriterion = new CriteriaEntityFromView();
+
+            if (persisted.getSubCriterias() != null && !persisted.getSubCriterias().isEmpty()) {
+                mainCriterion.setCriteriaLogicConnector(persisted.getCriteriaLogicConnector());
+                persisted.getSubCriterias().stream().forEach(c -> {
+                    CriteriaEntityFromView criterionfromView = criteriaEntityPersistedToCriteriaEntityFromView(c);
+
+                    if (criterionfromView != null) {
+                        mainCriterion.getSubCriterias().add(criterionfromView);
+                    }
+
+                });
+                return mainCriterion;
+            } else {
+                mainCriterion.setNomColonne(persisted.getNomColonne());
+                mainCriterion.setOperateur(persisted.getOperateur());
+                mainCriterion.setCriteriaValue(getCriteriaValue(persisted));
+                return mainCriterion;
+            }
+        } else {
+            return null;
+        }
+    }
+
+    public default Object getCriteriaValue(CriteriaEntityPersisted persisted) {
+
+        if (persisted.getCriteriaDateListValue() != null && !persisted.getCriteriaDateListValue().isEmpty()) {
+            return persisted.getCriteriaDateListValue();
+
+        } else if (persisted.getCriteriaDateLowerBound() != null && persisted.getCriteriaDateUpperBound() != null) {
+            return new BetweenOperatorValues(persisted.getCriteriaDateLowerBound(), persisted.getCriteriaDateUpperBound());
+
+        } else if (persisted.getCriteriaDateValue() != null) {
+            return persisted.getCriteriaDateValue();
+
+        } else if (persisted.getCriteriaNumericListValue() != null && !persisted.getCriteriaNumericListValue().isEmpty()) {
+            return persisted.getCriteriaNumericListValue();
+
+        } else if (persisted.getCriteriaNumericLowerBound() != null && persisted.getCriteriaNumericUpperBound() != null) {
+            return new BetweenOperatorValues(persisted.getCriteriaNumericLowerBound(), persisted.getCriteriaNumericUpperBound());
+
+        } else if (persisted.getCriteriaNumericValue() != null) {
+            return persisted.getCriteriaNumericValue();
+
+        } else if (persisted.getCriteriaStringListValue() != null && !persisted.getCriteriaStringListValue().isEmpty()) {
+            return persisted.getCriteriaStringListValue();
+
+        } else if (persisted.getCriteriaStringLowerBound() != null && persisted.getCriteriaStringUpperBound() != null) {
+            return new BetweenOperatorValues(persisted.getCriteriaStringLowerBound(), persisted.getCriteriaStringUpperBound());
+
+        } else if (persisted.getCriteriaStringValue() != null) {
+            return persisted.getCriteriaStringValue();
+
+        } else {
+            return null;
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/integration/AppColumnDeleter.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/integration/AppColumnDeleter.java
new file mode 100644
index 0000000..2842132
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/integration/AppColumnDeleter.java
@@ -0,0 +1,13 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.integration;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface AppColumnDeleter {
+    void delete();
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/integration/ColumnDefinitionManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/integration/ColumnDefinitionManager.java
new file mode 100644
index 0000000..a82f89e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/integration/ColumnDefinitionManager.java
@@ -0,0 +1,30 @@
+package com.megatim.fdxconsultation.core.ifaces.integration;
+
+import com.megatim.fdxcommons.core.ifaces.abstracts.CustomManagerIFaces;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.integration.ColumnDefinitionId;
+import com.megatim.fdxcommons.model.searchentities.ColumnDefinitionSearch;
+import com.megatim.fdxconsultation.model.administration.User;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.persistence.Tuple;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ColumnDefinitionManager extends CustomManagerIFaces<ColumnDefinition, ColumnDefinitionId, ColumnDefinitionSearch, User> {
+
+    public ColumnDefinition findByNameAndReferentielAndTypeFichier(String columnName, String referentielVersion, String codeTypeFichier);
+
+    public List<ColumnDefinition> findByReferentiel(String referentielVersion);
+
+    public List<ColumnDefinition> findByReferentielAndTypeFichier(String referentielVersion, String codeTypeFichier);
+
+    public Set<String> findTypeFichierByReferentiel(String referentielVersion);
+
+    Map<String, ColumnDefinition> getColumnsDefimitionMap(String codeTypeFichier, String referentielVersion);
+
+    List<Tuple> byRefVersionAndByTypeFichier();
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/integration/EchecIntegrationManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/integration/EchecIntegrationManager.java
new file mode 100644
index 0000000..8851697
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/integration/EchecIntegrationManager.java
@@ -0,0 +1,17 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.integration;
+
+import com.megatim.fdxcommons.core.ifaces.abstracts.CustomManagerIFaces;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.integration.EchecIntegration;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface EchecIntegrationManager extends CustomManagerIFaces<EchecIntegration, Long, EchecIntegration, User>{
+    
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/integration/TableDefinitionManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/integration/TableDefinitionManager.java
new file mode 100644
index 0000000..873ab29
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/integration/TableDefinitionManager.java
@@ -0,0 +1,19 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.integration;
+
+import com.megatim.fdxcommons.core.ifaces.abstracts.CustomManagerIFaces;
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import com.megatim.fdxcommons.model.integration.TableDefinitionId;
+import com.megatim.fdxcommons.model.searchentities.TableDefinitionSearch;
+import com.megatim.fdxconsultation.model.administration.User;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface TableDefinitionManager extends CustomManagerIFaces<TableDefinition, TableDefinitionId, TableDefinitionSearch, User> {
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/log/ApiUserActionLogManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/log/ApiUserActionLogManager.java
new file mode 100644
index 0000000..41cae11
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/log/ApiUserActionLogManager.java
@@ -0,0 +1,26 @@
+package com.megatim.fdxconsultation.core.ifaces.log;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericReportingManagerIFaces;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.ManagerWithCriteriaEntityIFaces;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.log.UserActionStatData;
+import com.megatim.fdxconsultation.model.dto.log.UserActionStatDto;
+import com.megatim.fdxconsultation.model.log.ApiUserActionLog;
+import com.megatim.fdxconsultation.model.log.dtos.ApiUserActionSummarySearch;
+import com.megatim.fdxconsultation.reporting.model.log.ApiUserActionLogReporting;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ApiUserActionLogManager extends ManagerWithCriteriaEntityIFaces<ApiUserActionLog, Long, User>,
+        GenericReportingManagerIFaces<ApiUserActionLogReporting, CriteriaEntityFromView, Long> {
+
+    List<UserActionStatDto> getByStatut(ApiUserActionSummarySearch apiUserActionSummarySearch);
+
+    List<UserActionStatData> getByStatutAndUserName(ApiUserActionSummarySearch apiUserActionSummarySearch);
+
+    List<UserActionStatData> getByStatutAndPath(ApiUserActionSummarySearch apiUserActionSummarySearch);
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/log/UserActionLogManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/log/UserActionLogManager.java
new file mode 100644
index 0000000..6986664
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/log/UserActionLogManager.java
@@ -0,0 +1,27 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.log;
+
+import com.megatim.fdxcommons.model.log.UserActionLog;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericReportingManagerIFaces;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.ManagerWithCriteriaEntityIFaces;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.log.UserActionLogDto;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface UserActionLogManager extends ManagerWithCriteriaEntityIFaces<UserActionLog, Long, User>, 
+        GenericReportingManagerIFaces<UserActionLogDto, CriteriaEntityFromView, Long> {
+    
+    public void log(HttpHeaders headers, @Context HttpServletRequest request, 
+            String message, String utilisateur);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/message/systeme/MessageSystemeManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/message/systeme/MessageSystemeManager.java
new file mode 100644
index 0000000..05f3524
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/message/systeme/MessageSystemeManager.java
@@ -0,0 +1,60 @@
+package com.megatim.fdxconsultation.core.ifaces.message.systeme;
+
+import com.bekosoftware.genericmanagerlayer.core.ifaces.GenericManager;
+import com.megatim.fdxcommons.model.enumeration.*;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.MessageSystemeDto;
+import com.megatim.fdxconsultation.model.message.systeme.MessageSysteme;
+import java.util.List;
+
+/**
+ * Interface etendue par les interfaces locale et remote du manager 
+ * @since Tue Jan 09 15:21:42 WAT 2018
+ * 
+ */
+public interface MessageSystemeManager extends GenericManager<MessageSysteme, Long> {
+
+    /**
+     * Nom du service
+     * 
+     */
+    public final static String SERVICE_NAME = "MessageSystemeManager";
+    
+    /**
+     * Permet d'ajouter un message
+     * @param typeMessageSysteme
+     * @param typeIdMessageSysteme
+     * @param contenu
+     * @param utilisateur 
+     */
+    public void ajouter(TypeMessageSysteme typeMessageSysteme, TypeIdMessageSysteme typeIdMessageSysteme, String contenu, User utilisateur);
+    
+    /**
+     * Permet de recuperer tous les messages spécifiques à un utilisateur
+     * @param utilisateur 
+     * @return  
+     */
+    public List<MessageSysteme> recupererTousLesMessages(User utilisateur);
+    
+    /**
+     * Permet de recuperer un message spécifique à un utilisateur
+     * @param utilisateur 
+     * @return  
+     */
+    public MessageSystemeDto recupererUnMessageSystemeDto(User utilisateur);
+    
+    /**
+     * Permet de supprimer tous les messages spécifiques à un utilisateur
+     * @param utilisateur 
+     */
+    public void supprimerTousLesMessageSystemeUtilisateur(User utilisateur);
+    
+    /**
+     * Permet de determine s'il existe au moins un message avec le type action système passé en paramètre
+     * @param typeActionSysteme
+     * @param utilisateur
+     * @return  
+     */
+    public boolean siMessageTypeActionSystemeExiste(TypeActionSysteme typeActionSysteme, User utilisateur);
+
+}
\ No newline at end of file
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ApplicationSourceManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ApplicationSourceManager.java
new file mode 100644
index 0000000..a798a06
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ApplicationSourceManager.java
@@ -0,0 +1,19 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.ApplicationSource;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.CommonReadManager;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.ManagerWithCriteriaEntityIFaces;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ApplicationSourceManager extends ManagerWithCriteriaEntityIFaces<ApplicationSource, String, User>,
+         CommonReadManager<ApplicationSource, ApplicationSource> {
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ExtensionFichierManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ExtensionFichierManager.java
new file mode 100644
index 0000000..72d5c61
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ExtensionFichierManager.java
@@ -0,0 +1,25 @@
+package com.megatim.fdxconsultation.core.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.referentiel.ExtensionFichier;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericReportingManagerIFaces;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.CommonReadManager;
+import java.util.List;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.ManagerWithCriteriaEntityIFaces;
+import com.megatim.fdxconsultation.reporting.model.referentiel.ExtensionFichierReporting;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ExtensionFichierManager extends ManagerWithCriteriaEntityIFaces<ExtensionFichier, String, User>, 
+        CommonReadManager<ExtensionFichier, ExtensionFichier>,
+        GenericReportingManagerIFaces<ExtensionFichierReporting, CriteriaEntityFromView, String> {
+
+    List<ExtensionFichier> findAll(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields);
+
+    List<ExtensionFichier> findWithPagination(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields, int pageNumber, int pageSize);
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/GroupeNoeudManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/GroupeNoeudManager.java
new file mode 100644
index 0000000..94a8c95
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/GroupeNoeudManager.java
@@ -0,0 +1,29 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.referentiel.GroupeNoeud;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericReportingManagerIFaces;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.CommonReadManager;
+import java.util.List;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.ManagerWithCriteriaEntityIFaces;
+import com.megatim.fdxconsultation.reporting.model.referentiel.GroupeNoeudReporting;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface GroupeNoeudManager extends ManagerWithCriteriaEntityIFaces<GroupeNoeud, String, User>,
+        CommonReadManager<GroupeNoeud, GroupeNoeud>,
+        GenericReportingManagerIFaces<GroupeNoeudReporting, CriteriaEntityFromView, String> {
+
+    List<GroupeNoeud> findAll(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields);
+
+    List<GroupeNoeud> findWithPagination(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields, int pageNumber, int pageSize);
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/GroupeParticipantManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/GroupeParticipantManager.java
new file mode 100644
index 0000000..222945d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/GroupeParticipantManager.java
@@ -0,0 +1,29 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.referentiel.GroupeParticipant;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericReportingManagerIFaces;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.CommonReadManager;
+import java.util.List;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.ManagerWithCriteriaEntityIFaces;
+import com.megatim.fdxconsultation.reporting.model.referentiel.GroupeParticipantReporting;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface GroupeParticipantManager extends ManagerWithCriteriaEntityIFaces<GroupeParticipant, String, User>,
+        CommonReadManager<GroupeParticipant, GroupeParticipant>,
+        GenericReportingManagerIFaces<GroupeParticipantReporting, CriteriaEntityFromView, String> {
+
+    List<GroupeParticipant> findAll(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields);
+
+    List<GroupeParticipant> findWithPagination(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields, int pageNumber, int pageSize);
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/NoeudManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/NoeudManager.java
new file mode 100644
index 0000000..5d40723
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/NoeudManager.java
@@ -0,0 +1,29 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.referentiel.Noeud;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericReportingManagerIFaces;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.CommonReadManager;
+import java.util.List;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.ManagerWithCriteriaEntityIFaces;
+import com.megatim.fdxconsultation.reporting.model.referentiel.NoeudReporting;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface NoeudManager extends ManagerWithCriteriaEntityIFaces<Noeud, String, User>,
+        CommonReadManager<Noeud, Noeud>,
+        GenericReportingManagerIFaces<NoeudReporting, CriteriaEntityFromView, String> {
+
+    List<Noeud> findAll(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields);
+
+    List<Noeud> findWithPagination(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields, int pageNumber, int pageSize);
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ParticipantManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ParticipantManager.java
new file mode 100644
index 0000000..203d699
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ParticipantManager.java
@@ -0,0 +1,28 @@
+package com.megatim.fdxconsultation.core.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntity;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericReportingManagerIFaces;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.CommonReadManager;
+import java.util.List;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.PaginationWithSearchEntity;
+import com.megatim.fdxconsultation.model.searchentities.ParticipantSearch;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.ManagerWithCriteriaEntityIFaces;
+import com.megatim.fdxconsultation.reporting.model.referentiel.ParticipantReporting;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ParticipantManager extends ManagerWithCriteriaEntityIFaces<Participant, String, User>,
+        CommonReadManager<Participant, Participant>, GenericReportingManagerIFaces<ParticipantReporting, CriteriaEntityFromView, String>,
+        PaginationWithSearchEntity<Participant, String, ParticipantSearch> {
+
+    List<Participant> findAll(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields);
+
+    List<Participant> findWithPagination(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields, int pageNumber, int pageSize);
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/PaysManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/PaysManager.java
new file mode 100644
index 0000000..510575d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/PaysManager.java
@@ -0,0 +1,24 @@
+package com.megatim.fdxconsultation.core.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.referentiel.Pays;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericReportingManagerIFaces;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.CommonReadManager;
+import java.util.List;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.ManagerWithCriteriaEntityIFaces;
+import com.megatim.fdxconsultation.reporting.model.referentiel.PaysReporting;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface PaysManager extends ManagerWithCriteriaEntityIFaces<Pays, String, User>,
+        CommonReadManager<Pays, Pays>,
+        GenericReportingManagerIFaces<PaysReporting, CriteriaEntityFromView, String> {
+
+    List<Pays> findAll(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields);
+
+    List<Pays> findWithPagination(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields, int pageNumber, int pageSize);
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ReferentielManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ReferentielManager.java
new file mode 100644
index 0000000..6143ffd
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ReferentielManager.java
@@ -0,0 +1,34 @@
+package com.megatim.fdxconsultation.core.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.enumeration.StatutReferentiel;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericReportingManagerIFaces;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.CommonReadManager;
+import java.util.List;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.ManagerWithCriteriaEntityIFaces;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.PaginationWithSearchEntity;
+import com.megatim.fdxconsultation.model.searchentities.ReferentielSearch;
+import com.megatim.fdxconsultation.reporting.model.referentiel.ReferentielReporting;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ReferentielManager extends ManagerWithCriteriaEntityIFaces<Referentiel, String, User>,
+        CommonReadManager<Referentiel, Referentiel>,
+        GenericReportingManagerIFaces<ReferentielReporting, CriteriaEntityFromView, String>,
+        PaginationWithSearchEntity<Referentiel, String, ReferentielSearch> {
+
+    public List<Referentiel> findByStatutReferentiel(StatutReferentiel statutReferentiel);
+
+    public Referentiel getReferentielEnCours();
+
+    List<Referentiel> findAll(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields);
+
+    List<Referentiel> findWithPagination(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields, int pageNumber, int pageSize);
+
+    public void archiverReferentielEncours();
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/RoutageManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/RoutageManager.java
new file mode 100644
index 0000000..76c47d9
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/RoutageManager.java
@@ -0,0 +1,38 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.referentiel.Routage;
+import com.megatim.fdxcommons.model.referentiel.RoutageId;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericReportingManagerIFaces;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.CommonReadManager;
+import java.util.List;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.ManagerWithCriteriaEntityIFaces;
+import com.megatim.fdxconsultation.reporting.model.referentiel.RoutageReporting;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface RoutageManager extends ManagerWithCriteriaEntityIFaces<Routage, RoutageId, User>,
+        GenericReportingManagerIFaces<RoutageReporting, CriteriaEntityFromView, TypeFichier>,
+        CommonReadManager<Routage, Routage> {
+
+    List<Routage> findAll(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields);
+
+    List<Routage> findWithPagination(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields, int pageNumber, int pageSize);
+
+    public CriteriaFormRequest getExportCustumOneCriterion(String codeTypeFichier, String versionReferentiel);
+
+    List<Participant> getParticipantsForSend(String versionReferentiel, String codeTypeFichier);
+
+    List<Participant> getParticipantsForReceive(String versionReferentiel, String codeTypeFichier);
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/StructureLigneManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/StructureLigneManager.java
new file mode 100644
index 0000000..7d8c169
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/StructureLigneManager.java
@@ -0,0 +1,19 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.StructureLigne;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.CommonReadManager;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.ManagerWithCriteriaEntityIFaces;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface StructureLigneManager extends ManagerWithCriteriaEntityIFaces<StructureLigne, String, User>,
+        CommonReadManager<StructureLigne, StructureLigne> {
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/TypeFichierManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/TypeFichierManager.java
new file mode 100644
index 0000000..9f38411
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/TypeFichierManager.java
@@ -0,0 +1,30 @@
+package com.megatim.fdxconsultation.core.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericReportingManagerIFaces;
+import java.util.List;
+import java.util.Map;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.CommonReadManager;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.PaginationWithSearchEntity;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierSearch;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.ManagerWithCriteriaEntityIFaces;
+import com.megatim.fdxconsultation.reporting.model.referentiel.TypeFichierReporting;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface TypeFichierManager extends ManagerWithCriteriaEntityIFaces<TypeFichier, String, User>,
+        CommonReadManager<TypeFichier, TypeFichier>, GenericReportingManagerIFaces<TypeFichierReporting, CriteriaEntityFromView, String>,
+        PaginationWithSearchEntity<TypeFichier, String, TypeFichierSearch> {
+
+    Map<String, List<String>> particpantToFichierDto(String username);
+
+    List<TypeFichier> findAll(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields);
+
+    List<TypeFichier> findWithPagination(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields, int pageNumber, int pageSize);
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ValidateurFichierConfigurationManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ValidateurFichierConfigurationManager.java
new file mode 100644
index 0000000..9e494e3
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ValidateurFichierConfigurationManager.java
@@ -0,0 +1,20 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/ValidateurFichierConfigurationemplates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/ValidateurFichierConfigurationemplates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.ValidateurFichierConfiguration;
+import com.megatim.fdxcommons.model.referentiel.ValidateurFichierConfigurationId;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.CommonReadManager;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.ManagerWithCriteriaEntityIFaces;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ValidateurFichierConfigurationManager extends ManagerWithCriteriaEntityIFaces<ValidateurFichierConfiguration, ValidateurFichierConfigurationId, User>,
+        CommonReadManager<ValidateurFichierConfiguration, ValidateurFichierConfiguration> {
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ValidateurFichierManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ValidateurFichierManager.java
new file mode 100644
index 0000000..835dca8
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/ValidateurFichierManager.java
@@ -0,0 +1,23 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.dtos.referentiel.ValidateurFichierDto;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.referentiel.ValidateurFichier;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.CommonReadManager;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericReportingManagerIFaces;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.ManagerWithCriteriaEntityIFaces;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ValidateurFichierManager extends ManagerWithCriteriaEntityIFaces<ValidateurFichier, String, User>,
+        CommonReadManager<ValidateurFichier, ValidateurFichier>,
+        GenericReportingManagerIFaces<ValidateurFichierDto, CriteriaEntityFromView, String> {
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/historique/ReferentielIntegrationHistoriqueManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/historique/ReferentielIntegrationHistoriqueManager.java
new file mode 100644
index 0000000..ca157bc
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/historique/ReferentielIntegrationHistoriqueManager.java
@@ -0,0 +1,22 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.referentiel.historique;
+
+import com.megatim.fdxcommons.core.ifaces.abstracts.CustomManagerIFaces;
+import com.megatim.fdxcommons.model.referentiel.historique.ReferentielIntegrationHistorique;
+import com.megatim.fdxcommons.model.referentiel.historique.ReferentielIntegrationHistoriqueId;
+import com.megatim.fdxconsultation.model.administration.User;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ReferentielIntegrationHistoriqueManager extends CustomManagerIFaces<ReferentielIntegrationHistorique, ReferentielIntegrationHistoriqueId, ReferentielIntegrationHistorique, User> {
+
+    public ReferentielIntegrationHistorique suitableIntegrationHistorique(String codeTypeFichier, String refVersion);
+
+    List<ReferentielIntegrationHistorique> suitableIntegrationHistorique(String refVersion);
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/natureproduction/NatureProductionFichierManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/natureproduction/NatureProductionFichierManager.java
new file mode 100644
index 0000000..0eef5c0
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/referentiel/natureproduction/NatureProductionFichierManager.java
@@ -0,0 +1,20 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.referentiel.natureproduction;
+
+import com.megatim.fdxcommons.core.ifaces.abstracts.CustomManagerIFaces;
+import com.megatim.fdxcommons.model.referentiel.natureproduction.NatureProductionFichier;
+import com.megatim.fdxcommons.model.referentiel.natureproduction.NatureProductionFichierId;
+import com.megatim.fdxconsultation.model.administration.User;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface NatureProductionFichierManager extends CustomManagerIFaces<NatureProductionFichier, NatureProductionFichierId, NatureProductionFichier, User> {
+
+    List<NatureProductionFichier> getByReferentiel(String referentielVersion);
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/remoteaction/PlanificationManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/remoteaction/PlanificationManager.java
new file mode 100644
index 0000000..6c183e3
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/remoteaction/PlanificationManager.java
@@ -0,0 +1,17 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.remoteaction;
+
+import com.megatim.fdxconsultation.model.remoteaction.Planification;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericCrudManagerIFaces;
+import com.megatim.fdxconsultation.model.administration.User;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface PlanificationManager extends GenericCrudManagerIFaces<Planification, Planification, Planification, Long, User> {
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/remoteaction/RemoteConfigurationManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/remoteaction/RemoteConfigurationManager.java
new file mode 100644
index 0000000..9f89feb
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/remoteaction/RemoteConfigurationManager.java
@@ -0,0 +1,26 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.remoteaction;
+
+import com.megatim.fdxcommons.model.dtos.remoteproduction.RemoteConfigurationDto;
+import com.megatim.fdxconsultation.model.remoteaction.RemoteConfiguration;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.GenericCrudManagerIFaces;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.PaginationWithCriteriaEntity;
+import com.megatim.fdxconsultation.model.administration.User;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface RemoteConfigurationManager extends GenericCrudManagerIFaces<RemoteConfiguration, RemoteConfigurationDto, RemoteConfigurationDto, String, User>,
+        PaginationWithCriteriaEntity<RemoteConfiguration, String> {
+
+    RemoteConfiguration saveAndSend(RemoteConfiguration config, User connectedUser);
+
+    RemoteConfiguration updateAndSend(String id, RemoteConfiguration config, User connectedUser);
+    
+    void deleteAndSend(String id, User connectedUser);
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/searchs/DashboardFichierManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/searchs/DashboardFichierManager.java
new file mode 100644
index 0000000..c63441b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/searchs/DashboardFichierManager.java
@@ -0,0 +1,21 @@
+package com.megatim.fdxconsultation.core.ifaces.searchs;
+
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierSearch;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface DashboardFichierManager {
+
+    List<TypeFichier> tableauBordTypeFichiers(String userName, String referentielVersion, TypeFichierSearch typeFichierSearch, int pageNumber, int pageSize);
+
+    Long countTableauBordTypeFichiers(String userName, String referentielVersion, TypeFichierSearch typeFichierSearch);
+    
+    List<TypeFichier> tableauBordGlobalTypeFichiers(String referentielVersion, TypeFichierSearch typeFichierSearch, int pageNumber, int pageSize);
+
+    Long countTableauBordGlobalTypeFichiers(String referentielVersion, TypeFichierSearch typeFichierSearch);
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/searchs/TypeFichierReferentielManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/searchs/TypeFichierReferentielManager.java
new file mode 100644
index 0000000..90b057a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/searchs/TypeFichierReferentielManager.java
@@ -0,0 +1,21 @@
+package com.megatim.fdxconsultation.core.ifaces.searchs;
+
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierReferentielSearch;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface TypeFichierReferentielManager {
+
+    List<TypeFichier> all(int pageNumber, int pagesize, TypeFichierReferentielSearch searchEntity);
+    
+    List<TypeFichier> all(String userName, int pageNumber, int pagesize, TypeFichierReferentielSearch searchEntity);
+
+    Long count(TypeFichierReferentielSearch searchEntity);
+
+    Long count(String userName, TypeFichierReferentielSearch searchEntity);
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/searchs/UserParticipantManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/searchs/UserParticipantManager.java
new file mode 100644
index 0000000..f31be98
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/searchs/UserParticipantManager.java
@@ -0,0 +1,21 @@
+package com.megatim.fdxconsultation.core.ifaces.searchs;
+
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import com.megatim.fdxconsultation.model.searchentities.ParticipantSearch;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface UserParticipantManager {
+
+    List<Participant> findUserParticipants(String userName);
+
+    List<Participant> findUserParticipantsWithPagination(String userName, ParticipantSearch participantSearch, int pageNumber, int pageSize);
+    
+    List<Participant> findAllUserParticipants(String userName, ParticipantSearch participantSearch);
+
+    Long countUserParticipants(String userName, ParticipantSearch participantSearch);
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/searchs/UserTypeFichierManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/searchs/UserTypeFichierManager.java
new file mode 100644
index 0000000..0bec3db
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/searchs/UserTypeFichierManager.java
@@ -0,0 +1,23 @@
+package com.megatim.fdxconsultation.core.ifaces.searchs;
+
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierSearch;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface UserTypeFichierManager {
+
+    List<TypeFichier> findUserTypeFichiers(String userName);
+
+    List<TypeFichier> findUserTypeFichiersWithPagination(String userName, TypeFichierSearch typeFichierSearch, int pageNumber, int pageSize);
+
+    Long countUserTypeFichiers(String userName, TypeFichierSearch typeFichierSearch);
+
+    List<TypeFichier> findUserTypeFichiersInReferentielWithPagination(String userName, String referentiel, TypeFichierSearch typeFichierSearch, int pageNumber, int pageSize);
+
+    Long countUserTypeFichiersInReferentiel(String userName, String referentiel, TypeFichierSearch typeFichierSearch);
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/settings/DisplayOptionsManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/settings/DisplayOptionsManager.java
new file mode 100644
index 0000000..48d2e35
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/settings/DisplayOptionsManager.java
@@ -0,0 +1,14 @@
+package com.megatim.fdxconsultation.core.ifaces.settings;
+
+import com.megatim.fdxconsultation.model.settings.DisplayOptions;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface DisplayOptionsManager {
+    
+    DisplayOptions current();
+
+    DisplayOptions edit(DisplayOptions entity);
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/settings/SettingsManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/settings/SettingsManager.java
new file mode 100644
index 0000000..5dc14c0
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/settings/SettingsManager.java
@@ -0,0 +1,12 @@
+package com.megatim.fdxconsultation.core.ifaces.settings;
+
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface SettingsManager {
+
+    Referentiel currentReferentiel();
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/CriteriaEntityPersistedManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/CriteriaEntityPersistedManager.java
new file mode 100644
index 0000000..ac21adf
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/CriteriaEntityPersistedManager.java
@@ -0,0 +1,21 @@
+package com.megatim.fdxconsultation.core.ifaces.stats;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.stats.CriteriaEntityPersisted;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.ManagerWithCriteriaEntityIFaces;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface CriteriaEntityPersistedManager extends ManagerWithCriteriaEntityIFaces<CriteriaEntityPersisted, Long, User> {
+
+    List<CriteriaEntityPersisted> subCriterias(Long id);
+
+    CriteriaEntityFromView criteriaEntityPersistedToCriteriaEntityFromView(CriteriaEntityPersisted persisted);
+
+    CriteriaEntityPersisted constructCriteriaPersisted(String codeTypeFichier, String referentielVersion, CriteriaEntityFromView criterionFromView);
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/TableConfigurationManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/TableConfigurationManager.java
new file mode 100644
index 0000000..349f424
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/TableConfigurationManager.java
@@ -0,0 +1,12 @@
+package com.megatim.fdxconsultation.core.ifaces.stats;
+
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.stats.TableConfiguration;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.ManagerWithCriteriaEntityIFaces;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface TableConfigurationManager extends ManagerWithCriteriaEntityIFaces<TableConfiguration, Long, User> {
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/TableauBordColumnManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/TableauBordColumnManager.java
new file mode 100644
index 0000000..20cbe82
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/TableauBordColumnManager.java
@@ -0,0 +1,17 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.stats;
+
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.stats.TableauBordColumn;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.ManagerWithCriteriaEntityIFaces;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface TableauBordColumnManager extends ManagerWithCriteriaEntityIFaces<TableauBordColumn, Long, User> {
+    
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/TableauBordGlobalSearchManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/TableauBordGlobalSearchManager.java
new file mode 100644
index 0000000..8f360f5
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/TableauBordGlobalSearchManager.java
@@ -0,0 +1,8 @@
+package com.megatim.fdxconsultation.core.ifaces.stats;
+
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.PaginationWithSearchEntity;
+import com.megatim.fdxconsultation.model.searchentities.TableauBordGlobalSearch;
+
+public interface TableauBordGlobalSearchManager extends PaginationWithSearchEntity<TableauBord, Long, TableauBordGlobalSearch> {
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/TableauBordManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/TableauBordManager.java
new file mode 100644
index 0000000..10cb57a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/TableauBordManager.java
@@ -0,0 +1,42 @@
+package com.megatim.fdxconsultation.core.ifaces.stats;
+
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import java.util.List;
+import java.util.Map;
+import com.megatim.fdxconsultation.model.enums.TypeConfigurationTableauBord;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.ManagerWithCriteriaEntityIFaces;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.PaginationWithSearchEntity;
+import com.megatim.fdxconsultation.model.dto.stats.StatResultDto;
+import com.megatim.fdxconsultation.model.searchentities.TableauBordSearch;
+import com.megatim.fdxconsultation.model.stats.dto.TableauBordRequest;
+
+public interface TableauBordManager extends ManagerWithCriteriaEntityIFaces<TableauBord, Long, User>, PaginationWithSearchEntity<TableauBord, Long, TableauBordSearch> {
+
+    public TableauBord findByUserAndTypeFichierAndReferentiel(Long userId, String codeTypeFichier, String referentielVersion);
+
+    public TableauBord findByTypeConfigurationAndReferentiel(String codeTypeFichier, String referentielVersion, TypeConfigurationTableauBord typeConfiguration);
+
+    Map<String, List<String>> userTableauBordToTypeFichiers(String userName);
+
+    Map<String, List<String>> globalTableauBordToTypeFichiers();
+
+    List<TableauBord> deleteUserTableauBord(User user);
+
+    List<TableauBord> findByReferentiel(String referentielVersion);
+
+    TableauBord save(User user, TableauBordRequest tableauBordRequest);
+
+    TableauBord save(TableauBordRequest tableauBordRequest);
+
+    TableauBord get(Long id);
+
+    void update(Long id, TableauBordRequest tableauBordRequest);
+
+    void delete(Long id);
+
+    public StatResultDto getDatas(String referentielVersion, String codeTypeFichier);
+
+    public StatResultDto getDatas(User user, String referentielVersion, String codeTypeFichier);
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/TableauBordUserSpecificSearchManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/TableauBordUserSpecificSearchManager.java
new file mode 100644
index 0000000..e3d1d09
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/stats/TableauBordUserSpecificSearchManager.java
@@ -0,0 +1,8 @@
+package com.megatim.fdxconsultation.core.ifaces.stats;
+
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.PaginationWithSearchEntity;
+import com.megatim.fdxconsultation.model.searchentities.TableauBordSpecificSearch;
+
+public interface TableauBordUserSpecificSearchManager extends PaginationWithSearchEntity<TableauBord, Long, TableauBordSpecificSearch> {
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/supervision/AgentConfigurationEntityManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/supervision/AgentConfigurationEntityManager.java
new file mode 100644
index 0000000..cb4ab8d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/supervision/AgentConfigurationEntityManager.java
@@ -0,0 +1,18 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.supervision;
+
+import com.megatim.fdxcommons.core.ifaces.abstracts.CustomManagerIFaces;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.supervision.AgentConfigurationEntity;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface AgentConfigurationEntityManager extends CustomManagerIFaces<AgentConfigurationEntity, Long, AgentConfigurationEntity, User> {
+
+    int archiveAgentConfiguration(String code);
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/supervision/StandaloneServerStateEntityManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/supervision/StandaloneServerStateEntityManager.java
new file mode 100644
index 0000000..93d0fab
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/supervision/StandaloneServerStateEntityManager.java
@@ -0,0 +1,19 @@
+package com.megatim.fdxconsultation.core.ifaces.supervision;
+
+import com.fdx.messaging.common.StandaloneServerState;
+import com.megatim.fdxcommons.core.ifaces.abstracts.CustomManagerIFaces;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.supervision.StandaloneServerStateEntity;
+import javax.transaction.Transactional;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface StandaloneServerStateEntityManager extends CustomManagerIFaces<StandaloneServerStateEntity, Long, StandaloneServerStateEntity, User> {
+
+    @Transactional
+    public StandaloneServerStateEntity persistStandaloneConfigurationStateEntity(StandaloneServerState standaloneServerState);
+    
+    public StandaloneServerStateEntity getCurrentStandaloneServerStateEntity();
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/supervision/TransfertManager.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/supervision/TransfertManager.java
new file mode 100644
index 0000000..91d7f97
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/supervision/TransfertManager.java
@@ -0,0 +1,25 @@
+package com.megatim.fdxconsultation.core.ifaces.supervision;
+
+import com.bekosoftware.genericmanagerlayer.core.ifaces.GenericManager;
+import com.megatim.fdxconsultation.core.ifaces.abtracts.PaginationWithSearchEntity;
+import com.megatim.fdxconsultation.model.searchentities.TransfertSearch;
+import com.megatim.fdxconsultation.model.supervision.Transfert;
+import com.megatim.fdxconsultation.model.supervision.dto.StandaloneDashboardRequest;
+import com.megatim.fdxconsultation.model.supervision.dto.StandaloneDashboardResponse;
+import com.megatim.fdxconsultation.model.supervision.dto.SupervisionFilterModalFormRequest;
+import java.util.List;
+import javax.transaction.Transactional;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface TransfertManager extends GenericManager<Transfert, Long>, PaginationWithSearchEntity<Transfert, Long, TransfertSearch> {
+
+    @Transactional
+    Transfert persistTransfert(Transfert transfert);
+
+    StandaloneDashboardResponse standaloneDashboardResponse(StandaloneDashboardRequest standaloneDashboardRequest);
+
+    List<Transfert> filter(SupervisionFilterModalFormRequest supervisionFilterModalFormRequest);
+}
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/tools/SourceCompiler.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/tools/SourceCompiler.java
new file mode 100644
index 0000000..c42a7a2
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/tools/SourceCompiler.java
@@ -0,0 +1,29 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.ifaces.tools;
+
+/**
+ *
+ * @author ASUS
+ */
+public class SourceCompiler {
+
+//    public static Class<?> compileAndLoad(UnitSourceGenerator unitSG, String binaryFilePath, String fullQualifiedName) throws ClassNotFoundException {
+//        ComponentContainer componentContainer = ComponentContainer.getInstance();
+//        JavaMemoryCompiler javaMemoryCompiler = componentContainer.getJavaMemoryCompiler();
+//
+//        Config config = Compilation.Config.forUnitSourceGenerator(unitSG);
+//        config = config.storeCompiledClassesTo(binaryFilePath);
+//        ProducerTask<Compilation.Result> compilationTask = javaMemoryCompiler.compile(config);
+//        Compilation.Result compilationResult = compilationTask.join();
+//
+//        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+//        ClassLoaders.addClassPaths(classLoader, compilationResult.getDependencies());
+//        ClassLoaders.addClassPath(classLoader, compilationResult.getClassPath().getAbsolutePath());
+//
+//        return classLoader.loadClass(fullQualifiedName);
+//    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/.gitignore b/fdx-consultation/fdxconsultation-core-impl/.gitignore
new file mode 100644
index 0000000..b24d71e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/.gitignore
@@ -0,0 +1,50 @@
+# These are some examples of commonly ignored file patterns.
+# You should customize this list as applicable to your project.
+# Learn more about .gitignore:
+#     https://www.atlassian.com/git/tutorials/saving-changes/gitignore
+
+# Node artifact files
+node_modules/
+dist/
+
+# Compiled Java class files
+*.class
+
+# Compiled Python bytecode
+*.py[cod]
+
+# Log files
+*.log
+
+# Package files
+*.jar
+
+# Maven
+target/
+dist/
+
+# JetBrains IDE
+.idea/
+
+# Unit test reports
+TEST*.xml
+
+# Generated by MacOS
+.DS_Store
+
+# Generated by Windows
+Thumbs.db
+
+# Applications
+*.app
+*.exe
+*.war
+
+# Large media files
+*.mp4
+*.tiff
+*.avi
+*.flv
+*.mov
+*.wmv
+
diff --git a/fdx-consultation/fdxconsultation-core-impl/nb-configuration.xml b/fdx-consultation/fdxconsultation-core-impl/nb-configuration.xml
new file mode 100644
index 0000000..a65c451
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/nb-configuration.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+    <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+        <!--
+Properties that influence various parts of the IDE, especially code formatting and the like. 
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+        <netbeans.hint.jdkPlatform>JDK_1.8</netbeans.hint.jdkPlatform>
+    </properties>
+</project-shared-configuration>
diff --git a/fdx-consultation/fdxconsultation-core-impl/pom.xml b/fdx-consultation/fdxconsultation-core-impl/pom.xml
new file mode 100644
index 0000000..1c733e0
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/pom.xml
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+        <groupId>com.megatim.fdxconsultation</groupId>
+        <artifactId>fdxconsultation</artifactId>
+        <version>1.0</version>
+    </parent>
+    
+    <groupId>com.megatim.fdxconsultation.core.impl</groupId>
+    <artifactId>fdxconsultation-core-impl</artifactId>
+    <packaging>jar</packaging>
+    
+    <properties>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
+        <jakartaee>8.0</jakartaee>
+    </properties>
+    
+    <dependencies>
+        <dependency>
+            <groupId>com.megatim.fdxcommons.tools</groupId>
+            <artifactId>fdxcommons-tools</artifactId>
+            <version>1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxconsultation.dao.impl</groupId>
+            <artifactId>fdxconsultation-dao-impl</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxconsultation.core.ifaces</groupId>
+            <artifactId>fdxconsultation-core-ifaces</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxconsultation.tools</groupId>
+            <artifactId>fdxconsultation-tools</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxconsultation.reporting</groupId>
+            <artifactId>fdxconsultation-reporting</artifactId>
+            <version>1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxconsultation</groupId>
+            <artifactId>fdxconsultation-tools-entities</artifactId>
+            <version>1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxconsultation</groupId>
+            <artifactId>fdxconsultation-tools</artifactId>
+            <version>1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>javax</groupId>
+            <artifactId>javaee-api</artifactId>
+            <version>${jakartaee}</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+        <dependency>
+            <groupId>com.bekosoftware</groupId>
+            <artifactId>genericManagerLayer</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+        <dependency>
+            <groupId>com.megatimgroup</groupId>
+            <artifactId>mgt-commons-tools</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+        <dependency>
+            <groupId>com.ibm.icu</groupId>
+            <artifactId>icu4j</artifactId>
+            <version>61.1</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+    </dependencies>
+    
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <compilerArguments>
+                        <endorseddirs>${endorsed.dir}</endorseddirs>
+                    </compilerArguments>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <version>2.3</version>
+                <configuration>
+                    <failOnMissingWebXml>false</failOnMissingWebXml>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>2.6</version>
+                <executions>
+                    <execution>
+                        <phase>validate</phase>
+                        <goals>
+                            <goal>copy</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${endorsed.dir}</outputDirectory>
+                            <silent>true</silent>
+                            <artifactItems>
+                                <artifactItem>
+                                    <groupId>javax</groupId>
+                                    <artifactId>javaee-api</artifactId>
+                                    <version>${jakartaee}</version>
+                                    <type>jar</type>
+                                </artifactItem>
+                            </artifactItems>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+    <name>fdxconsultation-core-impl</name>
+</project>
\ No newline at end of file
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/ActionManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/ActionManagerImpl.java
new file mode 100644
index 0000000..e2ff46e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/ActionManagerImpl.java
@@ -0,0 +1,33 @@
+package com.megatim.fdxconsultation.core.impl.administration;
+
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.bekosoftware.genericmanagerlayer.core.impl.AbstractGenericManager;
+import com.megatim.fdxconsultation.core.ifaces.administration.ActionManager;
+import com.megatim.fdxconsultation.dao.ifaces.administration.ActionDAO;
+import com.megatim.fdxconsultation.model.administration.Action;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.transaction.Transactional;
+
+@Transactional
+@Dependent
+public class ActionManagerImpl extends AbstractGenericManager<Action, Long> implements ActionManager {
+
+    @Inject
+    protected ActionDAO dao;
+
+    public ActionManagerImpl() {
+    }
+
+    @Override
+    public GenericDAO<Action, Long> getDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "id";
+    }
+    
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/HistoriqueMotDePasseManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/HistoriqueMotDePasseManagerImpl.java
new file mode 100644
index 0000000..ba55b79
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/HistoriqueMotDePasseManagerImpl.java
@@ -0,0 +1,52 @@
+package com.megatim.fdxconsultation.core.impl.administration;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.bekosoftware.genericmanagerlayer.core.impl.AbstractGenericManager;
+import com.megatim.fdxconsultation.core.ifaces.administration.HistoriqueMotDePasseManager;
+import com.megatim.fdxconsultation.dao.ifaces.administration.HistoriqueMotDePasseDAO;
+import com.megatim.fdxconsultation.model.administration.HistoriqueMotDePasse;
+import com.megatim.fdxconsultation.model.administration.User;
+import java.util.Date;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.transaction.Transactional;
+
+@Transactional
+@Dependent
+public class HistoriqueMotDePasseManagerImpl extends AbstractGenericManager<HistoriqueMotDePasse, Long> implements HistoriqueMotDePasseManager {
+
+    @Inject
+    protected HistoriqueMotDePasseDAO dao;
+
+    public HistoriqueMotDePasseManagerImpl() {
+    }
+
+    @Override
+    public GenericDAO<HistoriqueMotDePasse, Long> getDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "id";
+    }
+    
+    @Override
+    public void ajouter(String motDePasse, User user) {
+        
+        //On prepare l'objet
+        HistoriqueMotDePasse historiqueMotDePasse = new HistoriqueMotDePasse();
+        historiqueMotDePasse.setDateCreation(new Date());
+        historiqueMotDePasse.setMotDePasse(motDePasse);
+        historiqueMotDePasse.setUser(user);
+        
+        //On save
+        save(historiqueMotDePasse);
+    }
+    
+    @Override
+    public boolean siMotDePasseExiste(String motDePasse, User user) {
+        return dao.siMotDePasseExiste(motDePasse, user);
+    }
+    
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/JournalActionUtilisateurManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/JournalActionUtilisateurManagerImpl.java
new file mode 100644
index 0000000..864ac05
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/JournalActionUtilisateurManagerImpl.java
@@ -0,0 +1,122 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.administration;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.bekosoftware.genericdaolayer.dao.tools.RestrictionsContainer;
+import com.bekosoftware.genericmanagerlayer.core.impl.AbstractGenericManager;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.core.ifaces.administration.JournalActionUtilisateurManager;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithCriteriaEntityDAO;
+import com.megatim.fdxconsultation.dao.ifaces.administration.JournalActionUtilisateurDAO;
+import com.megatim.fdxconsultation.model.administration.JournalActionUtilisateur;
+import com.megatim.fdxconsultation.reporting.model.administration.JournalActionUtilisateurReporting;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.JournalActionUtilisateurDto;
+import com.megatim.fdxconsultation.model.searchentities.JournalActionUtilisateurSearch;
+import com.megatim.fdxconsultation.tools.CommonsToolsEntity;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import java.io.File;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class JournalActionUtilisateurManagerImpl extends AbstractGenericManager<JournalActionUtilisateur, Long> implements JournalActionUtilisateurManager {
+
+    @EJB
+    private JournalActionUtilisateurDAO dao;
+
+    @Override
+    public String getEntityIdName() {
+        return "id";
+    }
+
+    @Override
+    public Class<JournalActionUtilisateurReporting> getClazz() {
+        return JournalActionUtilisateurReporting.class;
+    }
+
+    @Override
+    public Map<String, Object> getParameters() {
+        return new HashMap<>();
+    }
+
+    @Override
+    public List<JournalActionUtilisateurReporting> getDatas(CriteriaEntityFromView searchEntity) throws Exception {
+        return CommonsToolsEntity.convertToJournalActionUtilisateurReporting(findAll(searchEntity, Arrays.asList(), Arrays.asList()));
+    }
+
+    @Override
+    public File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    @Override
+    public File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    @Override
+    public PaginationWithCriteriaEntityDAO<JournalActionUtilisateur, Long> paginationWithCriteriaEntityDAO() {
+        return dao;
+    }
+
+    /**
+     * Permet de recuperer un élément via son id
+     *
+     * @param id
+     * @return
+     */
+    @Override
+    public JournalActionUtilisateur findById(Long id) {
+        return find(getEntityIdName(), id);
+    }
+
+    @Override
+    public GenericDAO<JournalActionUtilisateur, Long> getDao() {
+        return dao;
+    }
+
+    @Override
+    public JournalActionUtilisateurDto mapToDto(JournalActionUtilisateur entity) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public JournalActionUtilisateurDto mapToDetailDto(JournalActionUtilisateur entity) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public RestrictionsContainer construireRequete(JournalActionUtilisateurSearch searchEntity, TypeOperation typeOperation) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public JournalActionUtilisateurDto getById(Long id) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/JournalConnexionUtilisateurManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/JournalConnexionUtilisateurManagerImpl.java
new file mode 100644
index 0000000..0cf6d84
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/JournalConnexionUtilisateurManagerImpl.java
@@ -0,0 +1,121 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.administration;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.bekosoftware.genericdaolayer.dao.tools.RestrictionsContainer;
+import com.bekosoftware.genericmanagerlayer.core.impl.AbstractGenericManager;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.core.ifaces.administration.JournalConnexionUtilisateurManager;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithCriteriaEntityDAO;
+import com.megatim.fdxconsultation.dao.ifaces.administration.JournalConnexionUtilisateurDAO;
+import com.megatim.fdxconsultation.model.administration.JournalConnexionUtilisateur;
+import com.megatim.fdxconsultation.reporting.model.administration.JournalConnexionUtilisateurReporting;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.JournalConnexionUtilisateurDto;
+import com.megatim.fdxconsultation.model.searchentities.JournalConnexionUtilisateurSearch;
+import com.megatim.fdxconsultation.tools.CommonsToolsEntity;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import java.io.File;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class JournalConnexionUtilisateurManagerImpl extends AbstractGenericManager<JournalConnexionUtilisateur, Long>  implements JournalConnexionUtilisateurManager {
+
+    @EJB
+    private JournalConnexionUtilisateurDAO dao;
+
+    @Override
+    public String getEntityIdName() {
+        return "id";
+    }
+
+    @Override
+    public Class<JournalConnexionUtilisateurReporting> getClazz() {
+        return JournalConnexionUtilisateurReporting.class;
+    }
+
+    @Override
+    public Map<String, Object> getParameters() {
+        return new HashMap<>();
+    }
+
+    @Override
+    public List<JournalConnexionUtilisateurReporting> getDatas(CriteriaEntityFromView searchEntity) throws Exception {
+        return CommonsToolsEntity.convertToJournalConnexionUtilisateurReporting(findAll(searchEntity, Arrays.asList(), Arrays.asList()));
+    }
+
+    @Override
+    public File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+    
+    @Override
+    public File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+    
+    @Override
+    public PaginationWithCriteriaEntityDAO<JournalConnexionUtilisateur, Long> paginationWithCriteriaEntityDAO() {
+        return dao;
+    }
+    
+    /**
+     * Permet de recuperer un élément via son id
+     * @param id
+     * @return 
+     */
+    @Override
+    public JournalConnexionUtilisateur findById(Long id){
+        return find(getEntityIdName(), id);
+    }
+
+    @Override
+    public GenericDAO<JournalConnexionUtilisateur, Long> getDao() {
+        return dao;
+    }
+
+    @Override
+    public JournalConnexionUtilisateurDto mapToDto(JournalConnexionUtilisateur entity) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public JournalConnexionUtilisateurDto mapToDetailDto(JournalConnexionUtilisateur entity) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public RestrictionsContainer construireRequete(JournalConnexionUtilisateurSearch searchEntity, TypeOperation typeOperation) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public JournalConnexionUtilisateurDto getById(Long id) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/RoleManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/RoleManagerImpl.java
new file mode 100644
index 0000000..781f3ac
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/RoleManagerImpl.java
@@ -0,0 +1,358 @@
+package com.megatim.fdxconsultation.core.impl.administration;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.bekosoftware.genericdaolayer.dao.tools.RestrictionsContainer;
+import com.bekosoftware.genericmanagerlayer.core.impl.AbstractGenericManager;
+import com.megatim.commons.tools.exceptions.ApplicationValidationException;
+import com.megatim.fdxcommons.model.enumeration.EtatOperation;
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.enumeration.TypeIdMessageSysteme;
+import com.megatim.fdxcommons.model.enumeration.TypeMessageSysteme;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxcommons.tools.exceptions.CommonAlredyExistException;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationValidationException;
+import com.megatim.fdxcommons.tools.exceptions.CommonRessourceNotFoundException;
+import com.megatim.fdxconsultation.core.ifaces.administration.RoleManager;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.message.systeme.MessageSystemeManager;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithCriteriaEntityDAO;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithSearchEnityDAO;
+import com.megatim.fdxconsultation.dao.ifaces.administration.RoleDAO;
+import com.megatim.fdxconsultation.model.administration.Role;
+import com.megatim.fdxconsultation.reporting.model.administration.RoleReporting;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.RoleDto;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.model.searchentities.RoleSearch;
+import com.megatim.fdxconsultation.tools.CommonsToolsEntity;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.rs.tools.utils.RestrictionContainerBuildeUtil;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.transaction.Transactional;
+
+@Transactional
+@Dependent
+public class RoleManagerImpl extends AbstractGenericManager<Role, Long>  implements RoleManager {
+
+    @Inject
+    private RoleDAO dao;
+
+    @Inject
+    private UserManager userManager;
+
+    @Inject
+    private MapStructMapper mapstructMapper;
+    
+    @Inject
+    private MessageSystemeManager messageSystemeManager;
+
+    public RoleManagerImpl() {
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "id";
+    }
+
+    public Role getCurrentElement() {
+        return dao.getCurrentRole();
+    }
+
+    public Role saveOrUpdateCurrentElement(Role entityToSave) {
+        return dao.save(entityToSave);
+    }
+
+    public Role getUserByUserName(String libelle){
+        List<Role> liste = findByUniqueProperty("libelle", libelle, null);
+        if(liste != null && !liste.isEmpty()){
+            return liste.get(0);
+        }else{
+            return null;
+        }
+    }
+    
+    @Override
+    public void validate(String libelle, User utilisateurConnecte) {
+        Role entity = getUserByUserName(libelle);
+        if (entity == null) {
+            throw new CommonRessourceNotFoundException(Role.class);
+        }
+        entity.setEtatOperation(EtatOperation.ACTIF);
+        entity.setDateValidation(new Date());
+        entity.setUtilisateurValidation(utilisateurConnecte != null ? utilisateurConnecte.getUserName() : null);
+        update(entity.getId(), entity);
+        
+    }
+
+    @Override
+    public void reject(String libelle, Role role, User utilisateurConnecte) {
+        Role entity = getUserByUserName(libelle);
+        if (entity == null) {
+            throw new CommonRessourceNotFoundException(Role.class);
+        }
+        if (role.getMotifRejet() == null || role.getMotifRejet().isEmpty()) {
+            throw new ApplicationValidationException(Arrays.asList("Le motif de rejet est obligatoire"));
+        }
+        entity.setEtatOperation(EtatOperation.REJETE);
+        entity.setDateRejetValidation(new Date());
+        entity.setUtilisateurRejetValidation(utilisateurConnecte != null ? utilisateurConnecte.getUserName() : null);
+        entity.setMotifRejet(role.getMotifRejet());
+        beforeModify(entity, role, utilisateurConnecte);
+        update(entity.getId(), entity);
+        
+    }
+
+    @Override
+    public void beforeModify(Role actualEntity, Role requestEntity, User utilisateurConnecte) {
+        if (actualEntity == null) {
+            throw new CommonRessourceNotFoundException(Role.class);
+        }
+
+        //Si ce libelle  existe dejà
+        if (requestEntity.getLibelle() != null && !requestEntity.getLibelle().isEmpty() && !findByUniqueProperty("libelle", requestEntity.getLibelle(), null).isEmpty()) {
+            //On retourne le message d'erreur
+            if (!findByUniqueProperty("libelle", requestEntity.getLibelle(), null).get(0).getLibelle().equals(actualEntity.getLibelle())) {
+                throw new CommonAlredyExistException("libelle", "Ce Libelle Existe déjà.");
+            }
+        }
+
+        //On copie les nouvelles valeurs        
+        actualEntity.setLibelle(requestEntity.getLibelle());
+        actualEntity.setDescription(requestEntity.getDescription());
+        actualEntity.setActions(requestEntity.getActions());
+
+        actualEntity.setDateDerniereModification(new Date());
+        if (utilisateurConnecte != null) {
+            actualEntity.setUtilisateurModification(utilisateurConnecte.getUserName());
+        }
+    }
+
+    @Override
+    public Role modify(Long id, Role entity, User connectedUser) {
+        Role actualEntity = find(getEntityIdName(), id);
+        beforeModify(actualEntity, entity, connectedUser);
+        update(id, actualEntity);
+        notifierMajTousLesUtilisateursGroupeViaWebSocket(actualEntity, "Oups ! il semblerait que vos habilitations aient été mis à jour par l’administrateur, en conséquence vous allez être déconnecté, pour que les modifications soient prises en compte, vous pourrez vous reconnecter par la suite.",
+                TypeMessageSysteme.AVERTISSEMENT, TypeIdMessageSysteme.MODIFICATION_GROUPE_UTILISATEUR);
+        return actualEntity;
+    }
+    
+    @Override
+    public void beforeRemove(Role entity, User utilisateurConnecte) {
+        //On marque comme supprimé
+        entity.setTypeOperation(TypeOperation.SUPPRIMER);
+
+        //On set les informations supplementaires
+        entity.setDateSuppression(new Date());
+
+        //Si non null
+        if (utilisateurConnecte != null) {
+
+            //On set les informations supplementaires
+            entity.setUtilisateurSuppression(utilisateurConnecte.getUserName());
+
+        }
+        
+        //Si le groupe possède des utilisateurs
+        if (entity != null && siPossedeUtilisateurs(entity)) {
+            throw new CommonApplicationValidationException("Veuillez au préalable retirer tous les utilisateurs liés à ce groupe, avant de supprimer le groupe.");
+        }
+       
+    }
+
+    @Override
+    public  Role remove(Long id, User connectedUser) {
+        Role entity = find(getEntityIdName(), id);
+        beforeRemove(entity, connectedUser);
+        Role updatedRole = update(id, entity);
+        notifierMajTousLesUtilisateursGroupeViaWebSocket(entity, "Oups ! il semblerait que le groupe utilisateur auquel vous appartennez ait été supprimé par l’administrateur, en conséquence vous allez être déconnecté.",
+                TypeMessageSysteme.AVERTISSEMENT, TypeIdMessageSysteme.SUPPRESSION_GROUPE_UTILISATEUR);        
+        
+        return updatedRole;
+    }
+    
+    @Override
+    public void beforeAdd(Role entity, User utilisateurConnecte) {
+        //Si ce libelle  existe dejà
+        if (entity.getLibelle() != null && !entity.getLibelle().isEmpty() && !findByUniqueProperty("libelle", entity.getLibelle(), null).isEmpty()) {
+            //On retourne le message d'erreur
+            throw new CommonAlredyExistException("libelle", "Ce libellé existe déjà.");
+        }
+        entity.setDateCreation(new Date());
+        entity.setEtatOperation(EtatOperation.ATTENTE_VALIDATION);
+
+        if (utilisateurConnecte != null) {
+            //On set les informations supplementaires
+            entity.setUtilisateurCreation(utilisateurConnecte.getUserName());
+        }
+    }
+
+    @Override
+    public boolean siPossedeUtilisateurs(Role role){
+        List<User> utilisateurs = userManager.obtenirListeUtilisateursRole(role);
+        boolean bool = false;
+        if(utilisateurs.isEmpty()){
+            bool = false;
+        }else{
+            bool = true;
+        }        
+        return bool;
+    }
+    
+    @Override
+    public Class<RoleReporting> getClazz() {
+        return RoleReporting.class;
+    }
+
+    @Override
+    public Map<String, Object> getParameters() {
+        return new HashMap<>();
+    }
+
+    @Override
+    public File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false );
+    }
+
+    @Override
+    public File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+    
+    @Override
+    public File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    /**
+     * Methode permettant de determiner le nombre d'utilisateur d'un groupe
+     * @param entity
+     * @return 
+     */
+    @Override
+    public Integer obtenirNbreUtilisateurRole(Role entity) {
+        List<User> users = null;
+        Integer nbreUtilisateurs = 0;
+        users = userManager.findByUniqueProperty("role", entity, null);
+        if(users != null && !users.isEmpty()){
+            nbreUtilisateurs = users.size();
+        }
+        return nbreUtilisateurs;
+    }
+    
+    /**
+     * Permet de notifier les maj via webSocket
+     * @param groupe
+     * @param message
+     * @param typeMessageSysteme 
+     * @param typeIdMessageSysteme 
+     */
+    public void notifierMajTousLesUtilisateursGroupeViaWebSocket(Role groupe, String message, TypeMessageSysteme typeMessageSysteme, TypeIdMessageSysteme typeIdMessageSysteme) {
+        
+        //Variables
+        List<User> utilisateurs = userManager.obtenirListeUtilisateursRole(groupe);
+        
+        //Si non null
+        if(utilisateurs != null && !utilisateurs.isEmpty()){
+            
+            //On parcourt la liste
+            for(User utilisateur : utilisateurs){
+                
+                //On notifie l'utlisateur
+                messageSystemeManager.ajouter(typeMessageSysteme, typeIdMessageSysteme, message, utilisateur);
+                
+            }
+            
+        }
+        
+    }
+
+    @Override
+    public List<RoleReporting> getDatas(CriteriaEntityFromView searchEntity) throws Exception {
+        List<OrderByDefinition> orders = new ArrayList<>();
+        orders.add(new OrderByDefinition("id", OrderByType.DESC));
+        List<Role> liste = formaterDonnees(findAll(searchEntity, Arrays.asList(), orders));
+        return CommonsToolsEntity.convertToRoleReporting(liste);
+    }
+
+    @Override
+    public GenericDAO<Role, Long> getDao() {
+        return dao;
+    }
+
+    @Override
+    public RoleDto mapToDto(Role entity) {
+        return mapstructMapper.roleToRoleDto(entity);
+    }
+
+    @Override
+    public RoleDto mapToDetailDto(Role entity) {
+        return mapstructMapper.roleToRoleDto(entity);
+    }
+
+    @Override
+    public PaginationWithCriteriaEntityDAO<Role, Long> paginationWithCriteriaEntityDAO() {
+        return dao;
+    }
+    
+    @Override
+    public PaginationWithSearchEnityDAO<Role, Long, RoleSearch> getPaginationDao() {
+        return dao;
+    }
+    
+    @Override
+    public RestrictionsContainer construireRequete(RoleSearch searchEntity, TypeOperation typeOperation) {
+        RestrictionsContainer requeteur = RestrictionContainerBuildeUtil.construireRequete(searchEntity, RoleSearch.class);
+        requeteur.addEq("typeOperation", typeOperation);
+        return requeteur;
+    }
+
+    @Override
+    public List<Role> formaterDonnees(List<Role> liste) {
+        if(liste != null){
+            for(Role role : liste){
+                role.setNbreUtilisateur(obtenirNbreUtilisateurRole(role));
+            }
+        }else{
+            liste = new ArrayList<Role>();
+        }
+        return liste;
+    }
+    
+    @Override
+    public List<Role> findWithPagination(CriteriaEntityFromView criterion, List<String> fetchEagerFields, List<OrderByDefinition> orderByFields, Integer pageNumber, Integer pageSize) throws Exception {
+        List<Role> datas = paginationWithCriteriaEntityDAO().findAll(criterion, fetchEagerFields, orderByFields);
+        datas = formaterDonnees(datas);
+        return datas;
+    }
+    
+    @Override
+    public  List<Role> findAll(CriteriaEntityFromView criterion, List<String> fetchEagerFields, List<OrderByDefinition> orderByFields) throws Exception {
+        List<Role> datas = paginationWithCriteriaEntityDAO().findAll(criterion, fetchEagerFields, orderByFields);
+        datas = formaterDonnees(datas);
+        return datas;
+    }
+    
+    @Override
+    public RoleDto getById(Long id) {
+        Role entity = find(getEntityIdName(), id);
+        return mapToDetailDto(entity);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/UserManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/UserManagerImpl.java
new file mode 100644
index 0000000..c387bd5
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/UserManagerImpl.java
@@ -0,0 +1,648 @@
+package com.megatim.fdxconsultation.core.impl.administration;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.bekosoftware.genericdaolayer.dao.tools.RestrictionsContainer;
+import com.bekosoftware.genericmanagerlayer.core.impl.AbstractGenericManager;
+import com.megatim.commons.tools.exceptions.ApplicationValidationException;
+import com.megatim.fdxcommons.model.enumeration.EtatOperation;
+import com.megatim.fdxcommons.model.enumeration.TypeIdMessageSysteme;
+import com.megatim.fdxcommons.model.enumeration.TypeMessageSysteme;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.tools.exceptions.CommonAlredyExistException;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationValidationException;
+import com.megatim.fdxcommons.tools.exceptions.CommonRessourceNotFoundException;
+import com.megatim.fdxconsultation.core.ifaces.administration.HistoriqueMotDePasseManager;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.message.systeme.MessageSystemeManager;
+import com.megatim.fdxconsultation.core.ifaces.stats.TableauBordManager;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithCriteriaEntityDAO;
+import com.megatim.fdxconsultation.dao.ifaces.administration.UserDAO;
+import com.megatim.fdxconsultation.model.administration.Action;
+import com.megatim.fdxconsultation.model.administration.Role;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.reporting.model.administration.UserReporting;
+import com.megatim.fdxconsultation.model.dto.EditPasswordDto;
+import com.megatim.fdxconsultation.model.dto.UserDto;
+import com.megatim.fdxconsultation.model.dto.UserSlimDto;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.model.searchentities.UserSearch;
+import com.megatim.fdxconsultation.tools.CommonTools;
+import com.megatim.fdxconsultation.tools.CommonsToolsEntity;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.rs.tools.utils.RestrictionContainerBuildeUtil;
+import java.io.File;
+import java.math.BigDecimal;
+import java.security.NoSuchAlgorithmException;
+import java.security.spec.InvalidKeySpecException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.transaction.Transactional;
+
+@Transactional
+@Dependent
+public class UserManagerImpl extends AbstractGenericManager<User, Long> implements UserManager {
+
+    @Inject
+    protected UserDAO dao;
+
+    @Inject
+    protected HistoriqueMotDePasseManager historiqueMotDePasseManager;
+
+    @Inject
+    private MapStructMapper mapstructMapper;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @Inject
+    TableauBordManager tableauBordManager;
+
+    @Inject
+    private MessageSystemeManager messageSystemeManager;
+
+    /**
+     *
+     */
+    public UserManagerImpl() {
+    }
+
+    @Override
+    public GenericDAO<User, Long> getDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "id";
+    }
+
+    @Override
+    public UserDto getById(Long id) {
+        return mapToDetailDto(dao.getById(id));
+    }
+
+    public User getCurrentElement() {
+        return dao.getCurrentUser();
+    }
+
+    @Override
+    @Transactional
+    public User modify(Long id, User entity, User connectedUser) {
+        User actualEntity = find(getEntityIdName(), id);
+        beforeModify(actualEntity, entity, connectedUser);
+        update(id, actualEntity);
+        tableauBordManager.deleteUserTableauBord(entity);
+        messageSystemeManager.ajouter(TypeMessageSysteme.AVERTISSEMENT, TypeIdMessageSysteme.MODIFICATION_INFORMATION_UTILISATEUR, "Oups ! il semblerait que vos paramètres personnels aient été mis à jour, en conséquence vous allez être déconnecté, pour que les modifications soient prises en compte, vous pourrez vous reconnecter par la suite.", actualEntity);
+        return actualEntity;
+    }
+
+    @Override
+    public User recuperUtilisateur(String username, String motDePasse) {
+        return dao.recuperUtilisateur(username, motDePasse);
+    }
+
+    @Override
+    public User recuperUtilisateur(String username) {
+        return dao.recuperUtilisateur(username);
+    }
+
+    public User getUserByUserName(String userName) {
+        List<User> liste = findByUniqueProperty("userName", userName, null);
+        if (liste != null && !liste.isEmpty()) {
+            return liste.get(0);
+        } else {
+            return null;
+        }
+    }
+
+    @Override
+    public void validate(String userName, User utilisateurConnecte) {
+        User entity = getUserByUserName(userName);
+        if (entity == null) {
+            throw new CommonRessourceNotFoundException(User.class);
+        }
+        entity.setEtatOperation(EtatOperation.ACTIF);
+        entity.setDateValidation(new Date());
+        entity.setUtilisateurValidation(utilisateurConnecte != null ? utilisateurConnecte.getUserName() : null);
+        update(entity.getId(), entity);
+    }
+
+    @Override
+    public void reject(String userName, User user, User utilisateurConnecte) {
+        User entity = getUserByUserName(userName);
+        if (entity == null) {
+            throw new CommonRessourceNotFoundException(User.class);
+        }
+        if (user.getMotifRejet() == null || user.getMotifRejet().isEmpty()) {
+            throw new ApplicationValidationException(Arrays.asList("Le motif de rejet est obligatoire"));
+        }
+        entity.setEtatOperation(EtatOperation.REJETE);
+        entity.setDateRejetValidation(new Date());
+        entity.setUtilisateurRejetValidation(utilisateurConnecte != null ? utilisateurConnecte.getUserName() : null);
+        entity.setMotifRejet(user.getMotifRejet());
+        update(entity.getId(), entity);
+    }
+
+    @Override
+    public UserSlimDto mapToDto(User entity) {
+        return mapstructMapper.userToUserSlimDto(entity);
+    }
+
+    @Override
+    public UserDto mapToDetailDto(User entity) {
+        return mapstructMapper.userToUserDto(entity);
+    }
+
+    @Override
+    public void beforeModify(User actualEntity, User requestEntity, User utilisateurConnecte) {
+        if (actualEntity == null) {
+            throw new CommonRessourceNotFoundException(User.class);
+        }
+        User userWithSameName = recuperUtilisateur(requestEntity.getUserName());
+        if (requestEntity.getUserName() != null && !requestEntity.getUserName().isEmpty() && userWithSameName != null
+                && !requestEntity.getId().equals(userWithSameName.getId())) {
+            throw new CommonAlredyExistException("username", "Un utilisateur avec le même login existe déjà.");
+        }
+        if (requestEntity.isUpdatePassword()) {
+            actualEntity.setPwd(CommonTools.encryptPassword(requestEntity.getPwd()));
+        }
+        actualEntity.setDateDerniereModification(new Date());
+        if (utilisateurConnecte != null) {
+            actualEntity.setUtilisateurModification(utilisateurConnecte.getUserName());
+        }
+        validerMotDePasseModifier(requestEntity.isUpdatePassword(), requestEntity.getPwd(), actualEntity);
+        checkerParticipants(requestEntity);
+        actualEntity.setAlertDelay(requestEntity.getAlertDelay());
+        actualEntity.setAttemps(requestEntity.getAttemps());
+        actualEntity.setAttempsNumber(requestEntity.getAttempsNumber());
+        actualEntity.setConnected(requestEntity.isConnected());
+        actualEntity.setExpirationDelay(requestEntity.getExpirationDelay());
+        actualEntity.setFirstName(requestEntity.getFirstName());
+        actualEntity.setLastName(requestEntity.getLastName());
+        actualEntity.setLocked(requestEntity.isLocked());
+        actualEntity.setActive(requestEntity.isActive());
+        actualEntity.setRole(requestEntity.getRole());
+        actualEntity.setTypeFichiers(requestEntity.getTypeFichiers());
+        actualEntity.setParticipants(requestEntity.getParticipants());
+    }
+
+    @Override
+    public void beforeRemove(User entity, User utilisateurConnecte) {
+        entity.setTypeOperation(TypeOperation.SUPPRIMER);
+        entity.setDateSuppression(new Date());
+        if (utilisateurConnecte != null) {
+            entity.setUtilisateurSuppression(utilisateurConnecte.getUserName());
+        }
+    }
+
+    @Override
+    public void beforeAdd(User entity, User utilisateurConnecte) {
+        if (entity.getUserName() != null && !entity.getUserName().isEmpty() && recuperUtilisateur(entity.getUserName()) != null) {
+            throw new CommonAlredyExistException("userName", "Un utilisateur avec le même nom utilisateur existe déjà.");
+        }
+        checkerSiMotDePasseComplexe(true, entity.getPwd());
+        checkerParticipants(entity);
+        entity.setPwd(CommonTools.encryptPassword(entity.getPwd()));
+        entity.setDateCreation(new Date());
+        entity.setEtatOperation(EtatOperation.ATTENTE_VALIDATION);
+        entity.setDateDerniereModificationMotDePasse(new Date());
+        if (utilisateurConnecte != null) {
+            entity.setUtilisateurCreation(utilisateurConnecte.getUserName());
+        }
+    }
+
+    @Override
+    public User remove(Long id, User connectedUser) {
+        User entity = find(getEntityIdName(), id);
+        beforeRemove(entity, connectedUser);
+        User updatedUser = update(id, entity);
+        messageSystemeManager.ajouter(TypeMessageSysteme.ERREUR, TypeIdMessageSysteme.SUPPRESSION_COMPTE_UTILISATEUR, "Oups ! il semblerait que votre compte utilisateur ait été supprimé, en conséquence vous allez être déconnecté.", entity);
+
+        return updatedUser;
+    }
+
+    /**
+     * Methode permettant d'effectuer des controles sur les participants (sur la
+     * présence ou non)
+     *
+     * @param utilisateur
+     */
+    private void checkerParticipants(User utilisateur) {
+
+        /* Si non null */
+        if (utilisateur != null && utilisateur.getRole() != null) {
+
+            /* On parcourt la liste des actions */
+            for (Action action : utilisateur.getRole().getActions()) {
+
+                /* Si actions liées à génération des mot de passe pour l'API sont présents */
+                if ((action.getModule().equalsIgnoreCase(AppCommonContext.MODULE_ADMINISTRATION)
+                        && action.getPath().equalsIgnoreCase(AppCommonContext.PATH_API_TOKEN))
+                        && (utilisateur.getParticipants() == null || utilisateur.getParticipants().isEmpty())) {
+
+                    /* On lève l'exception */
+                    //throw new ApplicationValidationException(Arrays.asList("Veuillez sélectionner au moins un participant"));
+                }
+
+            }
+
+        }
+
+    }
+
+    @Override
+    public Class<UserReporting> getClazz() {
+        return UserReporting.class;
+    }
+
+    @Override
+    public Map<String, Object> getParameters() {
+        return new HashMap<>();
+    }
+
+    @Override
+    public List<UserReporting> getDatas(CriteriaEntityFromView searchEntity) throws Exception {
+        return CommonsToolsEntity.convertToUserReporting(findAll(searchEntity, Arrays.asList(), Arrays.asList()));
+    }
+
+    @Override
+    public File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    @Override
+    public File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    /**
+     * Permet de recuperer un utilisateur via son id
+     *
+     * @param id
+     * @return
+     */
+    @Override
+    public User findById(Long id) {
+        return find(getEntityIdName(), id);
+    }
+
+    /**
+     * Permet de checker si un mot de passe saisi est complexe
+     *
+     * @param motDePasse
+     */
+    private void checkerSiMotDePasseComplexe(boolean siMotDePasseModifier, String motDePasse) {
+
+        //Variables
+        String erreurs = null;
+
+        //Si mot de passe editer
+        if (siMotDePasseModifier) {
+
+            if (motDePasse != null && !motDePasse.isEmpty() && !motDePasse.matches("^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#&()–[{}]:;',?/*~$^+=<>]).{8,20}$")) {
+                erreurs = "Le mot de passe doit contenir :"
+                        + " \n\t - Au moins un chiffre"
+                        + " \n\t - Au moins une minuscule"
+                        + " \n\t - Au moins une majuscule"
+                        + " \n\t - Au moins un caractère special (! @ # & ( ))"
+                        + " \n\t - Au moins 8 caractères et 20 caractères maximum";
+            };
+
+            //Si erreurs    
+            if (erreurs != null && !erreurs.isEmpty()) {
+                throw new CommonApplicationValidationException(erreurs);
+            }
+
+        }
+
+    }
+
+    /**
+     * Permet d'effectuer certains controle après la modification du mot de
+     * passe
+     *
+     * @param siMotDePasseModifier
+     * @param nouveauMotDepasse
+     * @param user
+     */
+    private void validerMotDePasseModifier(boolean siMotDePasseModifier, String nouveauMotDepasse, User user) {
+
+        //Si mot de passe modifié
+        if (siMotDePasseModifier) {
+
+            //Si mot de passe dejà utilisé
+            checkerSiMotDePasseDejaUtilise(nouveauMotDepasse, user);
+
+            //Si mot de passe complexe
+            checkerSiMotDePasseComplexe(siMotDePasseModifier, nouveauMotDepasse);
+
+            //On set la date de derniere modification
+            user.setDateDerniereModificationMotDePasse(new Date());
+
+        }
+
+    }
+
+    /**
+     * Permet de checker si un mot de passe a deja été utilsé
+     *
+     * @param motDePasse
+     * @param user
+     */
+    private void checkerSiMotDePasseDejaUtilise(String motDePasse, User user) {
+        if (historiqueMotDePasseManager.siMotDePasseExiste(motDePasse, user)) { //Si mot de passe déjà utilisé
+            throw new CommonApplicationValidationException("Ce mot de passe correspond à un mot de passe que vous avez déjà utilisé, veuillez en saisir un autre.");
+        } else { //Sinon on enregistre
+            historiqueMotDePasseManager.ajouter(CommonTools.encryptPassword(motDePasse), user);
+        }
+    }
+
+    @Override
+    public void editPassword(String username, EditPasswordDto editPasswordDto) {
+        if (!editPasswordDto.getNewPassword().equals(editPasswordDto.getNewPasswordConfirm())) {
+            throw new CommonApplicationValidationException("Le nouveau mot de passe et le mote de passe de confirmation ne sont pas identiques.");
+        }
+        User user = recuperUtilisateur(username);
+        if (user == null) {
+            throw new CommonApplicationValidationException("Imposssible d'effectuer l'action: utilisateur non reconnu");
+        }
+        try {
+            if (!CommonTools.validerMotDePasse(editPasswordDto.getActualPassword(), user.getPwd())) {
+                throw new CommonApplicationValidationException("Le mot de passe actuel est incorrect");
+            }
+        } catch (NoSuchAlgorithmException | InvalidKeySpecException ex) {
+            throw new CommonApplicationValidationException("Impossible d'effectuer l'opération une erreur interne du serveur s'est produite");
+        }
+        validerMotDePasseModifier(true, editPasswordDto.getNewPassword(), user);
+        user.setPwd(CommonTools.encryptPassword(editPasswordDto.getNewPassword()));
+        update(user.getId(), user);
+    }
+
+    @Override
+    public List<String> validerParametresConnexion(String username, String password) {
+
+        //Variables
+        List<String> errors = new ArrayList<>();
+        User user = recuperUtilisateur(username, password);
+
+        //Si null
+        if (user == null) {
+
+            //On recupère l'utilisateur via son login
+            user = recuperUtilisateur(username);
+
+            //Si non null et non administrateurs
+            if (user != null && !(user.getRole().getAdmin() || user.getRole().getMegaAdmin() || user.getRole().getSuperAdmin())) {
+
+                //Si le nombre de tentatives est depassé
+                if (user.getAttemps() >= user.getAttempsNumber()) {
+
+                    //Si compte pas encore verrouillé
+                    if (!user.isLocked()) {
+
+                        //On verrouille le compte
+                        user.setLocked(true);
+
+                    }
+
+                    //On met à jour
+                    update(user.getId(), user);
+
+                    //On lève l'exeption
+                    errors.add("Suite à l'echec des " + user.getAttempsNumber() + " tentative(s) de connexions à ce compte, ce dernier a été verrouillé. "
+                            + "\n Veuillez contacter l'administrateur.");
+
+                } else {
+
+                    //On comptabilise le nombre de tentatives
+                    user.setAttemps(user.getAttemps() + 1);
+
+                    //On met à jour
+                    update(user.getId(), user);
+
+                    //Si nbre tentatives > 0
+                    if ((user.getAttempsNumber() - user.getAttemps()) > 0) {
+
+                        //On lève l'exeption
+                        errors.add("Login ou mot de passe incorrect, Il vous reste (" + ((user.getAttempsNumber() - user.getAttemps())) + ") tentative(s)");
+
+                    } else {
+
+                        //Si compte pas encore verrouillé
+                        if (!user.isLocked()) {
+
+                            //On verrouille le compte
+                            user.setLocked(true);
+
+                        }
+
+                        //On met à jour
+                        update(user.getId(), user);
+
+                        //On lève l'exeption
+                        errors.add("Suite à l'echec des " + user.getAttempsNumber() + " tentative(s) de connexions à ce compte, ce dernier a été verrouillé. "
+                                + "\n Veuillez contacter l'administrateur.");
+
+                    }
+
+                }
+
+            } else {
+
+                //On lève l'exeption
+                errors.add("Login ou mot de passe incorrect.");
+
+            }
+
+        } else {
+
+            //Ces controles ne concernent pas les administrateurs par defauts
+            if (!(user.getRole().getAdmin() || user.getRole().getMegaAdmin() || user.getRole().getSuperAdmin())) {
+
+                if (user.getEtatOperation() != EtatOperation.ACTIF) { //Si compte non actif
+
+                    //On lève l'exeption
+                    errors.add("Compte non activé.\n Veuillez contacter l'administrateur.");
+
+                } else if (user.isLocked()) { //Si compte verrouillé
+
+                    //On lève l'exeption
+                    errors.add("Compte verrouillé.\n Veuillez contacter l'administrateur.");
+
+                }
+
+                //On calcule le nbre de jour restant avant expiration du mot de passe
+                calculerNbreJoursAvantExpirationMotDePasse(user);
+
+                //On verifie si le mot de passe a expiré
+                checkerExpirationMotDePasse(user);
+
+                //On reset le nombre de tentatives
+                user.setAttemps(0);
+
+                //On met à jour
+                update(user.getId(), user);
+
+            } else {
+
+                //On calcule le nbre de jour restant avant expiration du mot de passe
+                calculerNbreJoursAvantExpirationMotDePasse(user);
+
+                //On verifie si le mot de passe a expiré
+                checkerExpirationMotDePasse(user);
+
+                //On met à jour
+                update(user.getId(), user);
+
+            }
+
+        }
+
+        return errors;
+    }
+
+    /**
+     * Permet de determiner si la delai d'expiration mot de passe est arrivé
+     *
+     * @param user
+     */
+    public void checkerExpirationMotDePasse(User user) {
+
+        //Si mot de passe expiré
+        if (siDelaiExpirationArrive(user)) {
+
+            //On ajoute à la pile des messages système
+            messageSystemeManager.ajouter(TypeMessageSysteme.AVERTISSEMENT, TypeIdMessageSysteme.MOT_DE_PASSE_EXPIRE, "Votre mot de passe a expiré, veuillez le modifier.", user);
+
+        }
+
+    }
+
+    /**
+     * Permet de determiner si la delai expiration mot de passe arrivé
+     *
+     * @param user
+     */
+    public boolean siDelaiExpirationArrive(User user) {
+
+        //Variables
+        Date dateFuturExpirationMotDePasse = null;
+        Date dateCourante = new Date();
+
+        //Si egal à zero (n'expire jamais)
+        if (user.getExpirationDelay() == 0) {
+            return false;
+        } else {
+
+            //On calcule la date d'expiration
+            dateFuturExpirationMotDePasse = CommonTools.addDay(user.getDateDerniereModificationMotDePasse(), user.getExpirationDelay());
+
+            //On compare si la date courante est supérieur ou égale à la date d'expiration
+            if (dateCourante.getTime() >= dateFuturExpirationMotDePasse.getTime()) {
+                return true;
+            } else {
+                return false;
+            }
+
+        }
+
+    }
+
+    /**
+     * Cette methode permet de calculer le nombre de jours avant expiration du
+     * mot de passe
+     *
+     * @param utilisateur
+     */
+    private void calculerNbreJoursAvantExpirationMotDePasse(User utilisateur) {
+
+        //Variables
+        Date dateFuturExpirationMotDePasse = null;
+        Date dateCourante = new Date();
+        long difference = 0l;
+        Integer nbreJoursRestant = 0;
+        String message = "";
+
+        //Si egal à zero (n'expire jamais)
+        if (utilisateur.getExpirationDelay() > 0) {
+
+            //On calcule la date d'expiration
+            dateFuturExpirationMotDePasse = CommonTools.addDay(utilisateur.getDateDerniereModificationMotDePasse(), utilisateur.getExpirationDelay());
+
+            //On compare si la date courante est inferieur ou egale à la date d'expiration
+            if (dateCourante.getTime() < dateFuturExpirationMotDePasse.getTime()) {
+
+                //On calcule la difference en milli seconde
+                difference = dateFuturExpirationMotDePasse.getTime() - dateCourante.getTime();
+
+                //On recupere le nombre de jours restant avant expiration
+                nbreJoursRestant = new BigDecimal(TimeUnit.DAYS.convert(difference, TimeUnit.MILLISECONDS)).intValue();
+
+                //Si le nbre jours restant est inferieur ou egal au seuil d'alerte
+                if (nbreJoursRestant <= utilisateur.getAlertDelay()) {
+
+                    //Si nbre jour == 0,
+                    switch (nbreJoursRestant) {
+                        case 0:
+                            //On recupere le message
+                            message = "Votre mot de passe expire aujourd'hui, pensez à le modifier";
+                            break;
+                        case 1:
+                            //On recupere le message
+                            message = "Votre mot de passe expire demain, pensez à le modifier";
+                            break;
+                        default:
+                            //On recupere le message
+                            message = "Votre mot de passe expire dans (" + CommonTools.formaterChiffreAvecZeroDevant(nbreJoursRestant) + ") jour(s), \n Pensez à le modifier.";
+                            break;
+                    }
+
+                    //On ajoute à la pile des messages système
+                    messageSystemeManager.ajouter(TypeMessageSysteme.AVERTISSEMENT, TypeIdMessageSysteme.ALERTE_MOT_DE_PASSE_EXPIRE, message, utilisateur);
+
+                }
+
+            }
+
+        }
+
+    }
+
+    @Override
+    public List<User> obtenirListeUtilisateursRole(Role role) {
+        return dao.obtenirListeUtilisateursRole(role);
+    }
+
+    @Override
+    public PaginationWithCriteriaEntityDAO<User, Long> paginationWithCriteriaEntityDAO() {
+        return dao;
+    }
+
+    @Override
+    public RestrictionsContainer construireRequete(UserSearch searchEntity, TypeOperation typeOperation) {
+        RestrictionsContainer requeteur = RestrictionContainerBuildeUtil.construireRequete(searchEntity, UserSearch.class);
+        requeteur.addEq("typeOperation", typeOperation);
+        return requeteur;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/api/supervision/TransfertDataMessageToTransfert.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/api/supervision/TransfertDataMessageToTransfert.java
new file mode 100644
index 0000000..be0f56b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/api/supervision/TransfertDataMessageToTransfert.java
@@ -0,0 +1,100 @@
+package com.megatim.fdxconsultation.core.impl.api.supervision;
+
+import static com.fdx.messaging.common.Etat.ATTENTE_ROUTAGE;
+import static com.fdx.messaging.common.Etat.ECHEC_CONTENU;
+import static com.fdx.messaging.common.Etat.ECHEC_EMPREINTE;
+import static com.fdx.messaging.common.Etat.ECHEC_NOMENCLATURE;
+import static com.fdx.messaging.common.Etat.ECHOUE;
+import static com.fdx.messaging.common.Etat.EN_ATTENTE;
+import static com.fdx.messaging.common.Etat.EN_ATTENTE_INTEGRATION;
+import static com.fdx.messaging.common.Etat.EN_ATTENTE_PREPARATION;
+import static com.fdx.messaging.common.Etat.EN_ATTENTE_RECEPTION_EMPREINTE;
+import static com.fdx.messaging.common.Etat.EN_ATTENTE_VALIDATION_EMPREINTE;
+import static com.fdx.messaging.common.Etat.EN_COURS;
+import static com.fdx.messaging.common.Etat.EN_COURS_DE_PREPARATION;
+import static com.fdx.messaging.common.Etat.FILE_EXCEPTION;
+import static com.fdx.messaging.common.Etat.FILE_NOT_FOUND;
+import static com.fdx.messaging.common.Etat.TERMINE;
+import static com.fdx.messaging.common.Sens.ENVOI;
+import static com.fdx.messaging.common.Sens.RECEPTION;
+import com.fdx.messaging.common.TransfertDataMessage;
+import com.megatim.fdxconsultation.model.supervision.EtatTransfert;
+import com.megatim.fdxconsultation.model.supervision.SensTransfert;
+import com.megatim.fdxconsultation.model.supervision.Transfert;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class TransfertDataMessageToTransfert {
+
+    private final TransfertDataMessage transfertDataMessage;
+
+    public TransfertDataMessageToTransfert(TransfertDataMessage transfertDataMessage) {
+        this.transfertDataMessage = transfertDataMessage;
+    }
+
+    public Transfert transfert() {
+        return new Transfert(
+                transfertDataMessage.getCodeAgent(),
+                transfertDataMessage.getCodeAgentRecepteur(),
+                getSensTransfert(),
+                getEtatTransfert(),
+                transfertDataMessage.getNomFichier(),
+                transfertDataMessage.getTypeFichier(),
+                transfertDataMessage.getTaille(),
+                transfertDataMessage.getSended(),
+                transfertDataMessage.getDateCreation(),
+                transfertDataMessage.getDateDebut(),
+                transfertDataMessage.getDateFin()
+        );
+    }
+
+    private SensTransfert getSensTransfert() {
+        switch (transfertDataMessage.getSens()) {
+            case ENVOI:
+                return SensTransfert.ENVOI;
+            case RECEPTION:
+                return SensTransfert.RECEPTION;
+            default:
+                return null;
+        }
+    }
+
+    private EtatTransfert getEtatTransfert() {
+        switch (transfertDataMessage.getEtat()) {
+            case ATTENTE_ROUTAGE:
+                return EtatTransfert.ATTENTE_ROUTAGE;
+            case ECHEC_CONTENU:
+                return EtatTransfert.ECHEC_CONTENU;
+            case ECHEC_EMPREINTE:
+                return EtatTransfert.ECHEC_EMPREINTE;
+            case ECHEC_NOMENCLATURE:
+                return EtatTransfert.ECHEC_NOMENCLATURE;
+            case ECHOUE:
+                return EtatTransfert.ECHOUE;
+            case EN_ATTENTE:
+                return EtatTransfert.EN_ATTENTE;
+            case EN_ATTENTE_INTEGRATION:
+                return EtatTransfert.EN_ATTENTE_INTEGRATION;
+            case EN_ATTENTE_PREPARATION:
+                return EtatTransfert.EN_ATTENTE_PREPARATION;
+            case EN_ATTENTE_RECEPTION_EMPREINTE:
+                return EtatTransfert.EN_ATTENTE_RECEPTION_EMPREINTE;
+            case EN_ATTENTE_VALIDATION_EMPREINTE:
+                return EtatTransfert.EN_ATTENTE_VALIDATION_EMPREINTE;
+            case EN_COURS:
+                return EtatTransfert.EN_COURS;
+            case EN_COURS_DE_PREPARATION:
+                return EtatTransfert.EN_COURS_DE_PREPARATION;
+            case FILE_EXCEPTION:
+                return EtatTransfert.FILE_EXCEPTION;
+            case FILE_NOT_FOUND:
+                return EtatTransfert.FILE_NOT_FOUND;
+            case TERMINE:
+                return EtatTransfert.TERMINE;
+            default:
+                return null;
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/api/supervision/TransfertManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/api/supervision/TransfertManagerImpl.java
new file mode 100644
index 0000000..972cb41
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/api/supervision/TransfertManagerImpl.java
@@ -0,0 +1,133 @@
+package com.megatim.fdxconsultation.core.impl.api.supervision;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.bekosoftware.genericmanagerlayer.core.impl.AbstractGenericManager;
+import com.fdx.messaging.common.TransfertDataMessage;
+import com.megatim.fdxconsultation.core.ifaces.supervision.TransfertManager;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithSearchEnityDAO;
+import com.megatim.fdxconsultation.dao.ifaces.supervision.TransfertDAO;
+import com.megatim.fdxconsultation.dao.impl.supervision.TransfertMessageKey;
+import com.megatim.fdxconsultation.model.searchentities.TransfertSearch;
+import com.megatim.fdxconsultation.model.supervision.SensTransfert;
+import com.megatim.fdxconsultation.model.supervision.Transfert;
+import com.megatim.fdxconsultation.model.supervision.dto.StandaloneDashboardRequest;
+import com.megatim.fdxconsultation.model.supervision.dto.StandaloneDashboardResponse;
+import com.megatim.fdxconsultation.model.supervision.dto.SupervisionFilterModalFormRequest;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import javax.annotation.PostConstruct;
+import javax.ejb.EJB;
+import javax.enterprise.context.ApplicationScoped;
+
+/**
+ *
+ * @author ASUS
+ */
+@ApplicationScoped
+public class TransfertManagerImpl extends AbstractGenericManager<Transfert, Long> implements TransfertManager {
+
+    @EJB
+    private TransfertDAO dao;
+
+    private final Map<String, Transfert> transfertMap = new ConcurrentHashMap<>();
+
+    @PostConstruct
+    public void init() {
+        findAll().forEach(t -> {
+            String key = new TransfertMessageKey(t).key();
+            transfertMap.put(key, t);
+        });
+    }
+
+    @Override
+    public GenericDAO<Transfert, Long> getDao() {
+        return dao;
+    }
+
+    @Override
+    public PaginationWithSearchEnityDAO<Transfert, Long, TransfertSearch> getPaginationDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "id";
+    }
+
+    @Override
+    public Transfert persistTransfert(Transfert t) {
+
+        String key = new TransfertMessageKey(t).key();
+        Transfert transfert = transfertMap.get(key);
+
+        if (transfert == null) {
+
+            transfertMap.put(key, save(t));
+
+        } else if (!transfert.getEtatTransfert().equals(t.getEtatTransfert())) {
+
+            setFields(transfert, t);
+            transfertMap.put(key, update(transfert.getId(), transfert));
+
+        }
+
+        return transfertMap.get(key);
+    }
+
+    @Override
+    public StandaloneDashboardResponse standaloneDashboardResponse(StandaloneDashboardRequest standaloneDashboardRequest) {
+
+        LocalDateTime dateDebut = standaloneDashboardRequest.getDateDebut();
+        LocalDateTime dateFin
+                = (standaloneDashboardRequest.getDateFin() != null)
+                ? standaloneDashboardRequest.getDateFin().toLocalDate().atTime(LocalTime.MAX)
+                : null;
+        SensTransfert sens = standaloneDashboardRequest.getSens();
+
+        StandaloneDashboardResponse response = new StandaloneDashboardResponse();
+
+        response.setNombreTypeFichier(dao.getNombreTypeFichier(sens, dateDebut, dateFin));
+        response.setTailleTotale(dao.getTailleTotale(sens, dateDebut, dateFin));
+        response.setTotalTransfert(dao.getTotalTransfert(sens, dateDebut, dateFin));
+        response.setTotalTransfertAutomatique(dao.getTransfertsAutomatique(sens, dateDebut, dateFin));
+        response.setTotalTransfertEchec(dao.getTransfertsEchec(sens, dateDebut, dateFin));
+        response.setTotalTransfertManuel(dao.getTransfertsManuel(sens, dateDebut, dateFin));
+        response.setTransfertAttente(dao.getTransfertsAttente(sens, dateDebut, dateFin));
+        response.setTransfertReussie(dao.getTransfertsReussie(sens, dateDebut, dateFin));
+        response.setVitesseMoyenne(dao.getVitesseMoyenne(sens, dateDebut, dateFin));
+
+        if (response.getTotalTransfert() > 0) {
+            response.setTailleMoyenne(response.getTailleTotale() / response.getTotalTransfert());
+        } else {
+            response.setTailleMoyenne(0);
+        }
+
+        return response;
+
+    }
+
+    @Override
+    public List<Transfert> filter(SupervisionFilterModalFormRequest supervisionFilterModalFormRequest) {
+        List<Transfert> transferts = dao.filter(supervisionFilterModalFormRequest);
+        transferts.sort((t1, t2) -> Long.compare(t2.getId(), t1.getId()));
+        return transferts;
+    }
+
+    private void setFields(Transfert transfert, Transfert t) {
+
+        transfert.setCodeAgent(t.getCodeAgent());
+        transfert.setCodeAgentRecepteur(t.getCodeAgentRecepteur());
+        transfert.setEtatTransfert(t.getEtatTransfert());
+        transfert.setSensTransfert(t.getSensTransfert());
+        transfert.setDateDebut(t.getDateDebut());
+        transfert.setDateFin(t.getDateFin());
+        transfert.setNomFichier(t.getNomFichier());
+        transfert.setSended(t.getSended());
+        transfert.setTaille(t.getTaille());
+        transfert.setTypeFichier(t.getTypeFichier());
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/api/token/ApiTokenManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/api/token/ApiTokenManagerImpl.java
new file mode 100644
index 0000000..78f22fb
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/api/token/ApiTokenManagerImpl.java
@@ -0,0 +1,232 @@
+package com.megatim.fdxconsultation.core.impl.api.token;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.bekosoftware.genericdaolayer.dao.tools.RestrictionsContainer;
+import com.bekosoftware.genericmanagerlayer.core.impl.AbstractGenericManager;
+import com.google.common.hash.Hashing;
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.model.jms.messages.ApiTokenMessage;
+import com.megatim.fdxcommons.model.jms.messages.ApiTokenMessageType;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationValidationException;
+import com.megatim.fdxconsultation.core.ifaces.api.token.ApiTokenManager;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithCriteriaEntityDAO;
+import com.megatim.fdxconsultation.dao.ifaces.api.token.ApiTokenDAO;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.api.token.ApiToken;
+import com.megatim.fdxconsultation.reporting.model.api.token.ApiTokenReporting;
+import com.megatim.fdxconsultation.model.api.token.ApiTokenStatut;
+import com.megatim.fdxconsultation.model.dto.ApiTokenDto;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.model.searchentities.ApiTokenSearch;
+import com.megatim.fdxconsultation.tools.CommonsToolsEntity;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.mgt.rs.security.core.service.AuthenticationTokenService;
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.transaction.Transactional;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelContext;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class ApiTokenManagerImpl extends AbstractGenericManager<ApiToken, Long> implements ApiTokenManager {
+
+    @EJB
+    private ApiTokenDAO dao;
+
+    @Inject
+    private AuthenticationTokenService authenticationTokenService;
+
+    @Inject
+    private CdiCamelContext camelContext;
+
+    @Inject
+    private MapStructMapper mapStructMapper;
+    
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @Override
+    public GenericDAO<ApiToken, Long> getDao() {
+        return dao;
+    }
+
+    @Override
+    public String addAndGetToken(ApiToken apiToken, User connectedUser) {
+        if (dao.getByCodeParticipant(apiToken.getParticipant()) != null) {
+            throw new CommonApplicationValidationException("Le participant sélectionné possède déjà un mot de passe généré.");
+        }
+
+        String token = authenticationTokenService.issueToken(apiToken.getParticipant().getCode());
+        apiToken.setToken(Hashing.sha256().hashString(token, StandardCharsets.UTF_8).toString());
+
+        apiToken.setDateCreation(new Date());
+        apiToken.setTypeOperation(TypeOperation.AJOUTER);
+        apiToken.setUtilisateurCreation(connectedUser != null ? connectedUser.getUserName() : null);
+        save(apiToken);
+
+        //Création de l'objet JMS à envoyer à l'API pour l'enregistrement du Token
+        ApiTokenMessage apiTokenMessage = new ApiTokenMessage();
+        apiTokenMessage.setCodeParticipant(apiToken.getParticipant().getCode());
+        apiTokenMessage.setToken(apiToken.getToken());
+        apiTokenMessage.setApiTokenMessageType(ApiTokenMessageType.ADD);
+        sendMessage(apiTokenMessage);
+
+        return token;
+    }
+
+    @Transactional
+    @Override
+    public String updateAndGetToken(Long id, ApiToken apiToken, User connectedUser) {
+        ApiToken entityFromDB = find(getEntityIdName(),id);
+
+        //On génère le token
+        String token = authenticationTokenService.issueToken(entityFromDB.getParticipant().getCode());
+        entityFromDB.setToken(Hashing.sha256().hashString(token, StandardCharsets.UTF_8).toString());
+
+        entityFromDB.setDateDerniereModification(new Date());
+        entityFromDB.setUtilisateurModification(connectedUser != null ? connectedUser.getUserName() : null);
+        
+        save(entityFromDB);
+
+        //Création de l'objet JMS à envoyer à l'API pour l'enregistrement du Token
+        ApiTokenMessage apiTokenMessage = new ApiTokenMessage();
+        apiTokenMessage.setCodeParticipant(entityFromDB.getParticipant().getCode());
+        apiTokenMessage.setToken(entityFromDB.getToken());
+        apiTokenMessage.setApiTokenMessageType(ApiTokenMessageType.UPDATE);
+        sendMessage(apiTokenMessage);
+
+        return token;
+    }
+
+    private void sendMessage(ApiTokenMessage apiTokenMessage) {
+        ProducerTemplate producerTemplate = camelContext.createProducerTemplate();
+        producerTemplate.sendBody("direct:" + AppCommonContext.TOKEN_GENERATION_DIRECT, apiTokenMessage);
+    }
+
+    @Override
+    public ApiToken lock(Long id, User connectedUser) {        
+        ApiToken apiToken = find(getEntityIdName(),id);
+        apiToken.setApiTokenStatut(ApiTokenStatut.LOCKED);
+
+        //Création de l'objet JMS à envoyer à l'API pour l'enregistrement du Token
+        ApiTokenMessage apiTokenMessage = new ApiTokenMessage();
+        apiTokenMessage.setCodeParticipant(apiToken.getParticipant().getCode());
+        apiTokenMessage.setApiTokenMessageType(ApiTokenMessageType.LOCKED);
+
+        //Envoi du message à l'API Web
+        sendMessage(apiTokenMessage);
+
+        return update(id, apiToken);
+    }
+
+    @Override
+    public ApiToken unLock(Long id, User connectedUser) {
+        ApiToken apiToken = find(getEntityIdName(),id);
+        apiToken.setApiTokenStatut(ApiTokenStatut.UNLOCKED);
+
+        //Création de l'objet JMS à envoyer à l'API pour l'enregistrement du Token
+        ApiTokenMessage apiTokenMessage = new ApiTokenMessage();
+        apiTokenMessage.setCodeParticipant(apiToken.getParticipant().getCode());
+        apiTokenMessage.setApiTokenMessageType(ApiTokenMessageType.UNLOCKED);
+
+        //Envoi du message à l'API Web
+        sendMessage(apiTokenMessage);
+
+        return update(id, apiToken);
+    }
+
+    @Override
+    public File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false );
+    }
+
+    @Override
+    public File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    @Override
+    public File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+    
+    @Override
+    public String getEntityIdName() {
+        return "id";
+    }
+
+    @Override
+    public Class<ApiTokenReporting> getClazz() {
+        return ApiTokenReporting.class;
+    }
+
+    @Override
+    public List<ApiTokenReporting> getDatas(CriteriaEntityFromView searchEntity) throws Exception {
+        return CommonsToolsEntity.convertToApiTokenReporting(findAll(searchEntity, Arrays.asList(), Arrays.asList(new OrderByDefinition(getEntityIdName(), OrderByType.DESC))));
+    }
+
+    @Override
+    public Map<String, Object> getParameters() {
+        return new HashMap<>();
+    }
+
+    @Override
+    public PaginationWithCriteriaEntityDAO<ApiToken, Long> paginationWithCriteriaEntityDAO() {
+        return dao;
+    }
+
+    @Override
+    public void beforeAdd(ApiToken entity, User connectedUser) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public void beforeRemove(ApiToken entity, User connectedUser) {
+        entity.setTypeOperation(TypeOperation.SUPPRIMER);
+        entity.setDateSuppression(new Date());
+        entity.setUtilisateurSuppression(connectedUser.getUserName());
+    }
+
+    @Override
+    public void beforeModify(ApiToken actualEntity, ApiToken requestEntity, User connectedUser) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public ApiTokenDto mapToDto(ApiToken entity) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public ApiTokenDto mapToDetailDto(ApiToken entity) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public RestrictionsContainer construireRequete(ApiTokenSearch searchEntity, TypeOperation typeOperation) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+    
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/camel/CustomCamelContext.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/camel/CustomCamelContext.java
new file mode 100644
index 0000000..809700a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/camel/CustomCamelContext.java
@@ -0,0 +1,35 @@
+package com.megatim.fdxconsultation.core.impl.camel;
+
+import javax.annotation.PostConstruct;
+import javax.enterprise.context.ApplicationScoped;
+import org.apache.camel.impl.DefaultCamelContext;
+
+/**
+ *
+ * @author Gabuntu
+ */
+//@ApplicationScoped
+public class CustomCamelContext {
+
+    @PostConstruct
+    public void init() {
+        
+        //setAutoStartup(Boolean.FALSE);
+
+        System.out.println("<-------------------------------------------------------------------------------------------->");
+        System.out.println("<-------------------------------------------------------------------------------------------->");
+        System.out.println("<-------------------------------------------------------------------------------------------->");
+        System.out.println("<-------------------------------------------------------------------------------------------->");
+        System.out.println("<-------------------------------------------------------------------------------------------->");
+
+        System.out.println("STARTING CAMEL CONTEXT");
+
+        System.out.println("<-------------------------------------------------------------------------------------------->");
+        System.out.println("<-------------------------------------------------------------------------------------------->");
+        System.out.println("<-------------------------------------------------------------------------------------------->");
+        System.out.println("<-------------------------------------------------------------------------------------------->");
+
+        //camelContext.start();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/camel/helper/FileInsertionProcess.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/camel/helper/FileInsertionProcess.java
new file mode 100644
index 0000000..468b7a2
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/camel/helper/FileInsertionProcess.java
@@ -0,0 +1,331 @@
+package com.megatim.fdxconsultation.core.impl.camel.helper;
+
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import com.megatim.fdxcommons.model.dataproduction.DataProductionType;
+import com.megatim.fdxcommons.model.dataproduction.metadata.ProductionMetaData;
+import com.megatim.fdxcommons.model.enumeration.StatutDataProduction;
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import com.megatim.fdxcommons.tools.database.exceptions.BadDataValueException;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import com.megatim.fdxcommons.tools.database.queries.CustomQueries;
+import com.megatim.fdxcommons.tools.database.queries.InsertDataProductionInDataProductionToDeleteQuery;
+import com.megatim.fdxcommons.tools.database.queries.UpdateDataProductionQuery;
+import com.megatim.fdxcommons.tools.database.queries.metadata.InsertionLocalDateTimeValue;
+import com.megatim.fdxcommons.tools.database.tables.FdxConsultationTable;
+import com.megatim.fdxcommons.tools.database.tables.FdxTableColumnData;
+import com.megatim.fdxcommons.tools.database.tables.FdxTableRow;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionIdColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionUpdateIdColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DateCreationColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DateMiseAJourColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.FdxConsultationIndexColumnDefinition;
+import com.megatim.fdxconsultation.core.ifaces.dataproduction.metadata.ProductionMetaDataManager;
+import com.megatim.fdxconsultation.core.ifaces.helper.TableInsert;
+import com.megatim.fdxconsultation.core.ifaces.integration.ColumnDefinitionManager;
+import com.megatim.fdxconsultation.core.impl.factory.FdxConsultationTableFactory;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.math.BigDecimal;
+import java.nio.charset.Charset;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+import javax.naming.NamingException;
+import org.apache.commons.csv.CSVFormat;
+import org.apache.commons.csv.CSVParser;
+import org.apache.commons.csv.CSVRecord;
+import org.apache.commons.text.StringEscapeUtils;
+import org.apache.commons.validator.GenericValidator;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class FileInsertionProcess {
+
+    private final ColumnDefinitionManager columnDefinitionManager;
+    private final CommonDataProduction dataProduction;
+    private final Connection connection;
+    private final File dataFile;
+    private final int BATCH_SIZE = 100_000;
+    private final Charset charset;
+    private final TableInsert tableInsert;
+    private final ProductionMetaDataManager metaDataManager;
+
+    public FileInsertionProcess(ColumnDefinitionManager columnDefinitionManager, CommonDataProduction dataProduction, Connection connection, File dataFile, Charset charset, TableInsert tableInsert, ProductionMetaDataManager metaDataManager) {
+        this.columnDefinitionManager = columnDefinitionManager;
+        this.dataProduction = dataProduction;
+        this.connection = connection;
+        this.dataFile = dataFile;
+        this.charset = charset;
+        this.tableInsert = tableInsert;
+        this.metaDataManager = metaDataManager;
+    }
+
+    public void process() throws IOException, SQLException, NamingException, Exception {
+        System.out.println("--------------------In FileInsertionProcess-----------------");
+        ProductionMetaData metaData = metaDataManager.getById(dataProduction.getId());
+
+        if (metaData != null) {
+            TableDefinition tableDefinition = tableDefinition(dataProduction.getCodeTypeFichier(), dataProduction.getReferentielVersion());
+
+            if (metaData.getDataProductionType().equals(DataProductionType.UPDATE.toString())) {
+                List<Long> indexes = new CustomQueries().indexes(metaData.getProductionId(), connection);
+
+                if (!indexes.isEmpty()) {
+                    if (tableDefinition.getHeaderPresent() != null && tableDefinition.getColumnDelimiter() != null && tableDefinition.getLineDelimiter() != null) {
+                        insertDataFromCsvFileToDatabase(metaData, indexes, tableDefinition);
+                    } else {
+                        insertDataFromFileToDatabase(metaData, indexes, tableDefinition.getColumnDefinitions());
+                    }
+                    dataProduction.setStatutDataProduction(StatutDataProduction.A_CONSOMMER);
+                    new UpdateDataProductionQuery(dataProduction, connection).execute();
+                } else {
+                    dataProduction.setStatutDataProduction(StatutDataProduction.CONSOMME);
+                    new UpdateDataProductionQuery(dataProduction, connection).execute();
+                }
+            } else if (metaData.getDataProductionType().equals(DataProductionType.ADD.toString())) {
+                System.out.println("-----------------In DataProductionType.ADD--------------------");
+                if (tableDefinition.getHeaderPresent() != null && tableDefinition.getColumnDelimiter() != null && tableDefinition.getLineDelimiter() != null) {
+                    insertDataFromCsvFileToDatabase(metaData, null, tableDefinition);
+                } else {
+                    insertDataFromFileToDatabase(metaData, null, tableDefinition.getColumnDefinitions());
+                }
+                dataProduction.setStatutDataProduction(StatutDataProduction.A_CONSOMMER);
+                new UpdateDataProductionQuery(dataProduction, connection).execute();
+
+                FdxConsultationTable consTable = FdxConsultationTableFactory.createTable(dataProduction.getCodeTypeFichier(), dataProduction.getReferentielVersion(), connection);
+
+                if (consTable.tableDefinition(connection).isReferentiel()) {
+                    if (dataProduction.getId() != null) {
+                        new InsertDataProductionInDataProductionToDeleteQuery(connection, dataProduction.getId()).execute();
+                    }
+                }
+            }
+        } else {
+            dataProduction.setStatutDataProduction(StatutDataProduction.CONSOMME);
+            new UpdateDataProductionQuery(dataProduction, connection).execute();
+        }
+
+    }
+
+    private void insertDataFromFileToDatabase(ProductionMetaData metaData, List<Long> indexes, List<ColumnDefinition> columnDefinitions) throws BadDataValueException, Exception, IOException {
+        List<FdxTableRow> data = new ArrayList<>(BATCH_SIZE);
+        List<FdxTableColumnData> appColumns = appColumns();
+        final int lineLength = columnDefinitions.stream().map(c -> c.getTaille()).reduce(0, Integer::sum);
+        int lineNumber = 1;
+        String line;
+        final Long startIndex = metaData.getStartIndex();
+        int index = lineNumber - 1;
+        Long fdxIndex = metaData.getDataProductionType().equals(DataProductionType.ADD.toString()) ? startIndex : indexes.get(index);
+
+        System.out.println("------------------startIndex = " + startIndex + ", nbreElts = " + metaData.getNbreElts());
+
+        try ( FileInputStream fis = new FileInputStream(dataFile);  InputStreamReader isr = new InputStreamReader(fis, charset);  BufferedReader reader = new BufferedReader(isr)) {
+            while ((line = reader.readLine()) != null) {
+
+                if (line.trim().isEmpty() || line.length() != lineLength) {
+                    throw new BadDataValueException("La taille de la ligne " + lineNumber + " est différente de la taille attendue");
+                }
+                data.add(getLine(line, lineNumber, columnDefinitions, appColumns, fdxIndex));
+
+                if ((lineNumber % BATCH_SIZE) == 0) {
+                    insert(data);
+                }
+
+                lineNumber++;
+                index = lineNumber - 1;
+                fdxIndex = metaData.getDataProductionType().equals(DataProductionType.ADD.toString()) ? startIndex + index : indexes.get(index);
+            }
+
+            dataProduction.setStatutDataProduction(StatutDataProduction.A_CONSOMMER);
+            insert(data);
+        }
+        System.out.println("-----------LastIndex = " + fdxIndex);
+    }
+
+    private int insertDataFromCsvFileToDatabase(ProductionMetaData metaData, List<Long> indexes, TableDefinition tableDefinition) throws BadDataValueException, Exception, IOException {
+        List<FdxTableRow> data = new ArrayList<>(BATCH_SIZE);
+        List<FdxTableColumnData> appColumns = appColumns();
+        int lineNumber = 1;
+        final Long startIndex = metaData.getStartIndex();
+        int index = lineNumber - 1;
+        Long fdxIndex = metaData.getDataProductionType().equals(DataProductionType.ADD.toString()) ? startIndex : indexes.get(index);
+
+        try ( FileInputStream fis = new FileInputStream(dataFile);  InputStreamReader isr = new InputStreamReader(fis, charset);  BufferedReader reader = new BufferedReader(isr)) {
+            List<ColumnDefinition> columnDefinitions = tableDefinition.getColumnDefinitions();
+            AtomicBoolean withHeader = new AtomicBoolean(tableDefinition.getHeaderPresent());
+
+            CSVParser parser = new CSVParser(reader,
+                    CSVFormat.DEFAULT.builder()
+                            .setSkipHeaderRecord(withHeader.get())
+                            .setIgnoreSurroundingSpaces(true)
+                            .setTrim(true)
+                            .setDelimiter(StringEscapeUtils.unescapeJava(tableDefinition.getColumnDelimiter()))
+                            .setRecordSeparator(StringEscapeUtils.unescapeJava(tableDefinition.getLineDelimiter()))
+                            .build());
+            List<CSVRecord> records = parser.getRecords();
+
+            for (CSVRecord record : records) {
+
+                String[] columnsTableLine = new String[record.size()];
+                AtomicInteger i = new AtomicInteger(0);
+
+                if (!withHeader.get()) {
+                    record.forEach(column -> {
+                        columnsTableLine[i.getAndIncrement()] = column != null ? column.replaceAll(" {2,}", " ").replaceAll("\r", "").replaceAll("\n", "").replaceAll("\t", "") : "";
+                    });
+                    if (columnsTableLine.length != columnDefinitions.size()) {
+                        throw new Exception("Le nombre de colonnes de la ligne " + lineNumber + " est différent du nombre de colonnes attendu");
+                    }
+                    data.add(getLine(columnsTableLine, lineNumber, columnDefinitions, appColumns, fdxIndex));
+
+                    if ((lineNumber % BATCH_SIZE) == 0) {
+                        insert(data);
+                    }
+                    lineNumber++;
+                } else {
+                    withHeader.set(false);
+                }
+                index = lineNumber - 1;
+                fdxIndex = metaData.getDataProductionType().equals(DataProductionType.ADD.toString()) ? startIndex + index : indexes.get(index);
+            }
+        }
+
+        if (!data.isEmpty()) {
+            insert(data);
+        }
+        return lineNumber - 1;
+    }
+
+    private void insert(List<FdxTableRow> data) throws Exception {
+        tableInsert.insert(dataProduction, data, connection);
+        data.clear();
+    }
+
+    private TableDefinition tableDefinition(String codeTypeFichier, String referentielVersion) throws SQLException, NamingException {
+        FdxConsultationTable consTable = FdxConsultationTableFactory.createTable(codeTypeFichier, referentielVersion, connection);
+        return consTable.tableDefinition(connection).tableDefinition();
+    }
+
+    private FdxTableRow getLine(final String line, final int lineNumber, final List<ColumnDefinition> columnsDefinition, List<FdxTableColumnData> appColumns, Long fdxIndex) throws BadDataValueException, LocalDateTimeValueParseError {
+        int index = 0;
+        List<FdxTableColumnData> dataColumns = new ArrayList<>();
+
+        for (ColumnDefinition c : columnsDefinition) {
+            //traitement des colonnes du type fichier
+            String data = line.substring(index, index + c.getTaille());
+            FdxTableColumnData columnData = new FdxTableColumnData(parse(c, data), c.getName(), c.getPosition());
+            dataColumns.add(columnData);
+            index += c.getTaille();
+        }
+        dataColumns.addAll(appColumns);
+        dataColumns.add(new FdxTableColumnData(fdxIndex, new FdxConsultationIndexColumnDefinition().name(), 0));
+
+        return new FdxTableRow(lineNumber, dataColumns);
+    }
+
+    private FdxTableRow getLine(String[] columnsTableLine, final int lineNumber, final List<ColumnDefinition> columnsDefinition, List<FdxTableColumnData> appColumns, Long fdxIndex) throws BadDataValueException, LocalDateTimeValueParseError {
+        List<FdxTableColumnData> dataColumns = new ArrayList<>();
+
+        for (ColumnDefinition c : columnsDefinition) {
+            //traitement des colonnes du type fichier
+            String data = columnsTableLine[c.getPosition() - 1];
+            FdxTableColumnData columnData = new FdxTableColumnData(parse(c, data), c.getName(), c.getPosition());
+            dataColumns.add(columnData);
+        }
+        dataColumns.addAll(appColumns);
+        dataColumns.add(new FdxTableColumnData(fdxIndex, new FdxConsultationIndexColumnDefinition().name(), 0));
+
+        return new FdxTableRow(lineNumber, dataColumns);
+    }
+
+    private List<FdxTableColumnData> appColumns() {
+        List<FdxTableColumnData> dataColumns = new ArrayList<>();
+
+        if (dataProduction.getDataProductionType().equals(DataProductionType.UPDATE)) {
+            dataColumns.add(new FdxTableColumnData(dataProduction.getDateMiseAJour(), new DateMiseAJourColumnDefinition().name(), 0));
+            dataColumns.add(new FdxTableColumnData(dataProduction.getId(), new DataProductionUpdateIdColumnDefinition().name(), 0));
+
+        } else if (dataProduction.getDataProductionType().equals(DataProductionType.ADD)) {
+            dataColumns.add(new FdxTableColumnData(dataProduction.getId(), new DataProductionIdColumnDefinition().name(), 0));
+        }
+        dataColumns.add(new FdxTableColumnData(dataProduction.getDateProduction(), new DateCreationColumnDefinition().name(), 0));
+        return dataColumns;
+    }
+
+    private Object parse(ColumnDefinition columnDefinition, String value) throws BadDataValueException, LocalDateTimeValueParseError {
+
+        String columnType = columnDefinition.getTypeDonnee();
+
+        if (columnType.equals(TypeDonnee.ALPHANUMERIQUE.toString()) && (value == null
+                || (value instanceof String && lengthLowerOrEquals(((String) value).trim(), columnDefinition.getTaille())))) {
+
+            return value != null ? value.trim() : value;
+
+        } else if (columnType.equals(TypeDonnee.NUMERIQUE.toString())) {
+
+            if (value == null || value.trim().isEmpty()) {
+                return null;
+            }
+
+            String stringValue = value.trim()
+                    .replaceAll("\\s+", "")
+                    .replaceAll("\\u00A0", "")//nbsp
+                    .replaceAll("&nbsp;", "");
+            if (lengthLowerOrEquals(stringValue, columnDefinition.getTaille()) && GenericValidator.isLong(stringValue)) {
+                return Long.valueOf(stringValue);
+            }
+
+        } else if (columnType.equals(TypeDonnee.DECIMAL.toString())) {
+
+            if (value == null || value.trim().isEmpty()) {
+                return null;
+            }
+            String stringValue = value
+                    .trim()
+                    .replaceAll("\\s+", "")
+                    .replaceAll("\\u00A0", "")//nbsp
+                    .replaceAll("&nbsp;", "");
+
+            if (lengthLowerOrEquals(stringValue, columnDefinition.getTaille() + columnDefinition.getTaillePartieDecimale() + 1)) {
+                try {
+                    return new BigDecimal(stringValue);
+                } catch (Exception ex) {
+                }
+            }
+
+        } else if (columnType.equals(TypeDonnee.DATE.toString())) {
+
+            if (value == null || value.trim().isEmpty()) {
+                return null;
+            }
+            String stringValue = value.trim()
+                    .replaceAll("\\s+", "")
+                    .replaceAll("\\u00A0", "")//nbsp
+                    .replaceAll("&nbsp;", "");
+
+            if (lengthEquals(stringValue, columnDefinition.getTaille()) && GenericValidator.isDate(stringValue, columnDefinition.getFormatDate(), true)) {
+                return new InsertionLocalDateTimeValue(columnDefinition.getFormatDate(), value).value();
+            }
+        }
+
+        throw new BadDataValueException("La valeur " + value + " ne correspond pas au format attendu pour la colonne " + columnDefinition.getName());
+    }
+
+    private boolean lengthEquals(String value, int columnMaxLength) {
+        return value.trim().length() == columnMaxLength;
+    }
+
+    private boolean lengthLowerOrEquals(String value, int columnMaxLength) {
+        return value.trim().length() <= columnMaxLength;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/configuration/CodeStatutHttpManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/configuration/CodeStatutHttpManagerImpl.java
new file mode 100644
index 0000000..57629cc
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/configuration/CodeStatutHttpManagerImpl.java
@@ -0,0 +1,186 @@
+package com.megatim.fdxconsultation.core.impl.configuration;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.bekosoftware.genericdaolayer.dao.tools.RestrictionsContainer;
+import com.bekosoftware.genericmanagerlayer.core.impl.AbstractGenericManager;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.tools.exceptions.CommonRessourceNotFoundException;
+import com.megatim.fdxconsultation.core.ifaces.administration.HistoriqueMotDePasseManager;
+import com.megatim.fdxconsultation.core.ifaces.configuration.CodeStatutHttpManager;
+import com.megatim.fdxconsultation.core.ifaces.message.systeme.MessageSystemeManager;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithCriteriaEntityDAO;
+import com.megatim.fdxconsultation.dao.ifaces.configuration.CodeStatutHttpDAO;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.configuration.CodeStatutHttp;
+import com.megatim.fdxconsultation.reporting.model.configuration.CodeStatutHttpReporting;
+import com.megatim.fdxconsultation.model.dto.CodeStatutHttpDto;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.model.searchentities.CodeStatutHttpSearch;
+import com.megatim.fdxconsultation.tools.CommonsToolsEntity;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import java.io.File;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.transaction.Transactional;
+
+@Transactional
+@Dependent
+public class CodeStatutHttpManagerImpl extends AbstractGenericManager<CodeStatutHttp, Long> implements CodeStatutHttpManager {
+
+    @Inject
+    protected CodeStatutHttpDAO dao;
+
+    @Inject
+    protected HistoriqueMotDePasseManager historiqueMotDePasseManager;
+
+    @Inject
+    private MapStructMapper mapstructMapper;
+    
+    @Inject
+    private MessageSystemeManager messageSystemeManager;
+
+    /**
+     *
+     */
+    public CodeStatutHttpManagerImpl() {
+    }
+
+    @Override
+    public GenericDAO<CodeStatutHttp, Long> getDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "id";
+    }
+
+    @Override
+    public CodeStatutHttpDto getById(Long id) {
+        return mapToDetailDto(find(getEntityIdName(), id));
+    }
+
+    @Override
+    @Transactional
+    public CodeStatutHttp modify(Long id, CodeStatutHttp entity, User connectedUser) {
+        CodeStatutHttp actualEntity = find(getEntityIdName(), id);
+        beforeModify(actualEntity, entity, connectedUser);
+        update(id, actualEntity);
+        return actualEntity;
+    }
+
+    @Override
+    public CodeStatutHttpDto mapToDto(CodeStatutHttp entity) {
+        return mapstructMapper.codeStatutHttpToCodeStatutHttpDto(entity);
+    }
+
+    @Override
+    public CodeStatutHttpDto mapToDetailDto(CodeStatutHttp entity) {
+        return mapstructMapper.codeStatutHttpToCodeStatutHttpDto(entity);
+    }
+
+    @Override
+    public void beforeModify(CodeStatutHttp actualEntity, CodeStatutHttp requestEntity, User utilisateurConnecte) {
+        if (actualEntity == null) {
+            throw new CommonRessourceNotFoundException(CodeStatutHttp.class);
+        }
+        actualEntity.setDateDerniereModification(new Date());
+        if (utilisateurConnecte != null) {
+            actualEntity.setUtilisateurModification(utilisateurConnecte.getUserName());
+        }
+        actualEntity.setCode(requestEntity.getCode());
+        actualEntity.setLibelle(requestEntity.getLibelle());
+    }
+
+    @Override
+    public void beforeRemove(CodeStatutHttp entity, User utilisateurConnecte) {
+        entity.setTypeOperation(TypeOperation.SUPPRIMER);
+        entity.setDateSuppression(new Date());
+        if (utilisateurConnecte != null) {
+            entity.setUtilisateurSuppression(utilisateurConnecte.getUserName());
+        }
+    }
+
+    @Override
+    public void beforeAdd(CodeStatutHttp entity, User utilisateurConnecte) {
+        entity.setDateCreation(new Date());
+        if (utilisateurConnecte != null) {
+            entity.setUtilisateurCreation(utilisateurConnecte.getUserName());
+        }        
+    }
+
+    @Override
+    public  CodeStatutHttp remove(Long id, User connectedUser) {
+        CodeStatutHttp entity = find(getEntityIdName(), id);
+        beforeRemove(entity, connectedUser);
+        return update(id, entity);
+    }
+    
+    @Override
+    public Class<CodeStatutHttpReporting> getClazz() {
+        return CodeStatutHttpReporting.class;
+    }
+
+    @Override
+    public Map<String, Object> getParameters() {
+        return new HashMap<>();
+    }
+
+    @Override
+    public List<CodeStatutHttpReporting> getDatas(CriteriaEntityFromView searchEntity) throws Exception {
+        return CommonsToolsEntity.convertToCodeStatutHttpReporting(findAll(searchEntity, Arrays.asList(), Arrays.asList()));
+    }
+
+    @Override
+    public File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false );
+    }
+
+    @Override
+    public File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+    
+    @Override
+    public File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    @Override
+    public RestrictionsContainer construireRequete(CodeStatutHttpSearch searchEntity, TypeOperation typeOperation) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public PaginationWithCriteriaEntityDAO<CodeStatutHttp, Long> paginationWithCriteriaEntityDAO() {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+    
+    /**
+     * Methode permettant de recuperer le libellé via un code
+     * @param code
+     * @return 
+     */
+    @Override
+    public String getLibelleByCode(String code){
+        List<CodeStatutHttp> liste = findByUniqueProperty("code", code, null);
+        String libelle = null;
+        if(liste != null && !liste.isEmpty()){
+            libelle = liste.get(0).getLibelle();
+        }
+        return libelle;
+    }
+    
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/customtypefichier/CustomTypeFichierManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/customtypefichier/CustomTypeFichierManagerImpl.java
new file mode 100644
index 0000000..aefcab1
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/customtypefichier/CustomTypeFichierManagerImpl.java
@@ -0,0 +1,105 @@
+package com.megatim.fdxconsultation.core.impl.customtypefichier;
+
+import com.megatim.fdxcommons.core.ifaces.customtypefichier.DynamicClassCreator;
+import com.megatim.fdxcommons.core.ifaces.helper.DataInMemoryHandler;
+import com.megatim.fdxcommons.dao.ifaces.integration.ColumnDefinitionDAO;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.searchentities.ColumnDefinitionSearch;
+import com.megatim.fdxcommons.tools.database.connection.DBConnection;
+import com.megatim.fdxcommons.tools.database.tables.FdxTableRow;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxcommons.tools.utils.CriteriaEntityFromViewToQueryCriterion;
+import com.megatim.fdxconsultation.core.ifaces.customtypefichier.CustomTypeFichierManager;
+import com.megatim.fdxconsultation.core.impl.factory.FdxConsultationTableFactory;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.nio.file.Paths;
+import java.sql.Connection;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.annotation.Resource;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.sql.DataSource;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class CustomTypeFichierManagerImpl implements CustomTypeFichierManager {
+
+    @EJB
+    ColumnDefinitionDAO columnDefinitionDAO;
+
+    @Inject
+    DynamicClassCreator dynamicClassCreator;
+
+    @Inject
+    DataInMemoryHandler dataInMemory;
+
+    @Resource(lookup = AppCommonContext.JNDI_NAME)
+    private DataSource dataSource;
+
+    @Override
+    public List<Object> getDatas(CriteriaEntityFromView criterion, String codeTypeFichier, boolean isDetail) {
+
+        try ( Connection connection = new DBConnection(dataSource).connection()) {
+            String referentielEncours = dataInMemory.getDataInMemory().getReferentielEnCours().getVersion();
+            List<FdxTableRow> rows = FdxConsultationTableFactory.createTable(codeTypeFichier, referentielEncours, connection)
+                    .selectResult(new CriteriaEntityFromViewToQueryCriterion(criterion).queryCriterion(), connection)
+                    .rows();
+
+            String className = codeTypeFichier + "_" + referentielEncours;
+            Class<?> classe = null;
+
+            try {
+                classe = loadClass(className);
+            } catch (ClassNotFoundException ex) {
+                classe = createClass(codeTypeFichier, referentielEncours);
+            }
+
+            return initializeDataSource(rows, classe);
+        } catch (Exception ex) {
+            Logger.getLogger(CustomTypeFichierManagerImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Map<String, Object> getParameters() {
+        return new HashMap<>();
+    }
+
+    @Override
+    public List<ColumnDefinition> getColumnDefinition(String codeTypeFichier) throws Exception {
+        ColumnDefinitionSearch searchEntity = new ColumnDefinitionSearch();
+        searchEntity.setCodeTypeFichier(codeTypeFichier);
+        return columnDefinitionDAO.getAll(searchEntity);
+    }
+
+    private Class<?> createClass(String codeTypeFichier, String referentielEncours) throws MalformedURLException, ClassNotFoundException {
+        String className = codeTypeFichier + "_" + referentielEncours;
+        List<ColumnDefinition> columnDefinitions = columnDefinitionDAO.findByReferentielAndTypeFichier(referentielEncours, codeTypeFichier);
+
+        TableDefinition tableDefinition = new TableDefinition();
+        tableDefinition.getColumnDefinitions().addAll(columnDefinitions);
+        tableDefinition.setCodeTypeFichier(codeTypeFichier);
+        tableDefinition.setReferentielVersion(referentielEncours);
+
+        dynamicClassCreator.createDynamicClasses(Arrays.asList(tableDefinition));
+
+        // Chargement de la classe compilée.
+        URLClassLoader classLoader = URLClassLoader.newInstance(new URL[]{Paths.get(AppCommonContext.DYNAMIC_CLASSES_DIR).toUri().toURL()});
+        return Class.forName(AppCommonContext.DYNAMIC_CLASSES_PACKAGE + "." + className, true, classLoader);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/customtypefichier/DynamicClassCreatorImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/customtypefichier/DynamicClassCreatorImpl.java
new file mode 100644
index 0000000..90b314a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/customtypefichier/DynamicClassCreatorImpl.java
@@ -0,0 +1,150 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-private.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.customtypefichier;
+
+import com.megatim.fdxcommons.core.ifaces.customtypefichier.DynamicClassCreator;
+import com.megatim.fdxcommons.core.impl.tools.CommonUtilities;
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import java.io.BufferedWriter;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.context.Dependent;
+import javax.tools.JavaCompiler;
+import javax.tools.ToolProvider;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class DynamicClassCreatorImpl implements DynamicClassCreator {
+
+    @Override
+    public void createDynamicClasses(List<TableDefinition> tableDefinitions) {
+        for (TableDefinition t : tableDefinitions) {
+            try {
+                String className = t.getCodeTypeFichier() + "_" + t.getReferentielVersion();
+                createClass(t.getColumnDefinitions(), className, AppCommonContext.DYNAMIC_CLASSES_PACKAGE, AppCommonContext.DYNAMIC_CLASSES_DIR);
+            } catch (Exception ex) {
+                Logger.getLogger(DynamicClassCreatorImpl.class.getName()).log(Level.SEVERE, null, ex);
+                throw new CommonApplicationServerException();
+            }
+        }
+    }
+
+    private void createClass(List<ColumnDefinition> columnsDefinitions, String className, String packageName, String parentDirectory) throws Exception {
+        Path javaFilePath = Paths.get(parentDirectory, packageName, className + ".java");
+        String packageDeclaration = "package " + packageName + ";\n\n";
+        String classDeclaration = "public class " + className + " {";
+
+        //Enregistrement des éléments de la classe.
+        try ( BufferedWriter bufferWriter = Files.newBufferedWriter(javaFilePath, StandardCharsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.CREATE, StandardOpenOption.SYNC)) {
+            bufferWriter.write(packageDeclaration);
+            bufferWriter.write(createImportsDeclaration(columnsDefinitions));
+            bufferWriter.write(classDeclaration);
+
+            for (ColumnDefinition c : columnsDefinitions) {
+                String fieldDeclaration = createField(c.getName(), CommonUtilities.fullQualifiedNameTypeFromTypeDonnee(TypeDonnee.fromValeur(c.getTypeDonnee())));
+                bufferWriter.write(fieldDeclaration);
+            }
+            bufferWriter.write(createNoArgsConstructor(className));
+
+            for (ColumnDefinition c : columnsDefinitions) {
+                bufferWriter.write(createGetter(c.getName(), CommonUtilities.fullQualifiedNameTypeFromTypeDonnee(TypeDonnee.fromValeur(c.getTypeDonnee()))));
+                bufferWriter.write(createSetter(c.getName(), CommonUtilities.fullQualifiedNameTypeFromTypeDonnee(TypeDonnee.fromValeur(c.getTypeDonnee()))));
+            }
+            bufferWriter.write(createtoString(columnsDefinitions));
+            bufferWriter.write("\n}");
+        }
+
+        //Compilation du fichier crée.
+        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
+        compiler.run(null, null, null, javaFilePath.toString());
+
+    }
+
+    private String createImportsDeclaration(List<ColumnDefinition> columnsDefinitions) {
+        StringBuilder importsDeclaration = new StringBuilder();
+        columnsDefinitions
+                .stream()
+                .filter(p -> p.getTypeDonnee().equalsIgnoreCase(TypeDonnee.DATE.getValue()))
+                .findFirst()
+                .ifPresent(c -> importsDeclaration.append("import java.time.LocalDateTime;\n"));
+
+        columnsDefinitions
+                .stream()
+                .filter(p -> p.getTypeDonnee().equalsIgnoreCase(TypeDonnee.DECIMAL.getValue()))
+                .findFirst()
+                .ifPresent(c -> importsDeclaration.append("import java.math.BigDecimal;\n\n"));
+
+        return importsDeclaration.toString();
+    }
+
+    private String createField(String fieldName, Class<?> fieldClass) {
+        StringBuilder fieldDeclaration = new StringBuilder();
+        fieldDeclaration.append("\n\tprivate ").append(fieldClass.getSimpleName()).append((" ")).append(fieldName).append(";\n");
+
+        return fieldDeclaration.toString();
+    }
+
+    private String createNoArgsConstructor(String className) {
+        StringBuilder constructorDeclaration = new StringBuilder();
+
+        constructorDeclaration.append("\n\tpublic ").append(className).append("() {\n");
+        constructorDeclaration.append("\t}\n");
+
+        return constructorDeclaration.toString();
+    }
+
+    private String createGetter(String fieldName, Class<?> fieldClass) {
+        StringBuilder methodDeclaration = new StringBuilder();
+        String firstCharacter = (fieldName.charAt(0) + "").toUpperCase();
+        String methodName = "get" + firstCharacter + fieldName.substring(1);
+
+        methodDeclaration.append("\n\tpublic ").append(fieldClass.getSimpleName()).append(" ").append(methodName).append("() {\n");
+        methodDeclaration.append("\t\treturn this.").append(fieldName).append(";\n");
+        methodDeclaration.append("\t}");
+
+        return methodDeclaration.toString();
+    }
+
+    private String createSetter(String fieldName, Class<?> fieldClass) {
+        StringBuilder methodDeclaration = new StringBuilder();
+        String firstCharacter = (fieldName.charAt(0) + "").toUpperCase();
+        String methodName = "set" + firstCharacter + fieldName.substring(1);
+
+        methodDeclaration.append("\n\tpublic").append(" void ").append(methodName).append("(").append(fieldClass.getSimpleName()).append(" ").append(fieldName).append(") {\n");
+        methodDeclaration.append("\t\t").append("this.").append(fieldName).append(" = ").append(fieldName).append(";\n");
+        methodDeclaration.append("\t}");
+
+        return methodDeclaration.toString();
+    }
+
+    private String createtoString(List<ColumnDefinition> columnDefinitions) {
+        StringBuilder toString = new StringBuilder();
+        toString.append("\n\tpublic String toString(){\n\t\treturn ");
+
+        if (columnDefinitions.isEmpty()) {
+            toString.append("\"\"");
+        } else {
+            columnDefinitions.stream().forEach(c -> toString.append("\" ").append(c.getName()).append(" = \"").append(" + this.").append(c.getName()).append("+"));
+            toString.replace(toString.length() - 1, toString.length(), "");
+        }
+        toString.append(";\n\t}");
+
+        return toString.toString();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproduction/DataProductionHandlerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproduction/DataProductionHandlerImpl.java
new file mode 100644
index 0000000..d575c2b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproduction/DataProductionHandlerImpl.java
@@ -0,0 +1,37 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.dataproduction;
+
+import com.megatim.fdxcommons.model.dataproduction.DataProductionSource;
+import com.megatim.fdxconsultation.core.ifaces.dataproduction.DataProductionManager;
+import java.time.LocalDateTime;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import com.megatim.fdxcommons.core.ifaces.dataproduction.DataProductionHandler;
+import com.megatim.fdxconsultation.model.dataproduction.DataProduction;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class DataProductionHandlerImpl implements DataProductionHandler {
+
+    @Inject
+    private DataProductionManager dataProductionManager;
+
+    @Override
+    public DataProduction handle(String codeTypeFichier, String connectedParticipant, String referentielVersion, String fileName) {
+        DataProduction dataProduction = new DataProduction();
+        dataProduction.setDateProduction(LocalDateTime.now());
+        dataProduction.setReferentielVersion(referentielVersion);
+        dataProduction.setCodeTypeFichier(codeTypeFichier);
+        dataProduction.setCodeParticipant(connectedParticipant);
+        dataProduction.setSource(fileName != null ? DataProductionSource.FICHIER : DataProductionSource.API);
+        dataProduction.setFileName(fileName);
+
+        return dataProductionManager.save(dataProduction);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproduction/DataProductionManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproduction/DataProductionManagerImpl.java
new file mode 100644
index 0000000..591baf7
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproduction/DataProductionManagerImpl.java
@@ -0,0 +1,124 @@
+package com.megatim.fdxconsultation.core.impl.dataproduction;
+
+import com.megatim.fdxcommons.model.dtos.dataproduction.DataProductionDto;
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.enumeration.StatutDataProduction;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.dao.ifaces.dataproduction.DataProductionDAO;
+import com.megatim.fdxconsultation.core.ifaces.dataproduction.DataProductionManager;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dataproduction.DataProduction;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.tools.CommonTools;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import java.io.File;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class DataProductionManagerImpl implements DataProductionManager {
+
+    @EJB
+    private DataProductionDAO dao;
+
+    @Inject
+    MapStructMapper mapper;
+
+    @Override
+    public DataProductionDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "id";
+    }
+
+    @Override
+    public List<DataProduction> findAll(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields) {
+        try {
+            List<String> fieldsNotFound = CommonTools.checkIfEntityField(DataProduction.class, fetchEagerFields);
+            if (!fieldsNotFound.isEmpty()) {
+                throw new Exception("Les champs suivants n'appartiennent pas à l'entité DataProduction : "
+                        + fieldsNotFound.stream().collect(Collectors.joining(",", "{", "}")));
+            }
+
+            return getDao().findAll(criteriaFormRequest.getCriteria(), fetchEagerFields, Arrays.asList(new OrderByDefinition("dateProduction", OrderByType.DESC)));
+
+        } catch (Exception ex) {
+            Logger.getLogger(DataProductionManagerImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public List<DataProduction> findWithPagination(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields, int pageNumber, int pageSize) {
+        try {
+            List<String> fieldsNotFound = CommonTools.checkIfEntityField(DataProduction.class, fetchEagerFields);
+            if (!fieldsNotFound.isEmpty()) {
+                throw new Exception("Les champs suivants n'appartiennent pas à l'entité DataProduction : "
+                        + fieldsNotFound.stream().collect(Collectors.joining(",", "{", "}")));
+            }
+            return getDao().findWithPagination(criteriaFormRequest.getCriteria(), fetchEagerFields, Arrays.asList(new OrderByDefinition("dateProduction", OrderByType.DESC)), pageNumber, pageSize);
+
+        } catch (Exception ex) {
+            Logger.getLogger(DataProductionManagerImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Class<DataProductionDto> getClazz() {
+        return DataProductionDto.class;
+    }
+
+    @Override
+    public List<DataProductionDto> getDatas(CriteriaEntityFromView searchEntity) throws Exception {
+        return mapper.dataProductionListToDataProductionDtoList(findAll(searchEntity, Arrays.asList(), Arrays.asList()));
+    }
+
+    @Override
+    public Map<String, Object> getParameters() {
+        return new HashMap<>();
+    }
+
+    @Override
+    public File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    @Override
+    public File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    @Override
+    public List<DataProduction> findByStatutDataProduction(StatutDataProduction statut) {
+        return dao.findByStatutDataProduction(statut);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproduction/DataProductionToDeleteManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproduction/DataProductionToDeleteManagerImpl.java
new file mode 100644
index 0000000..b266061
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproduction/DataProductionToDeleteManagerImpl.java
@@ -0,0 +1,26 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.dataproduction;
+
+import com.megatim.fdxconsultation.core.ifaces.dataproduction.DataProductionToDeleteManager;
+import com.megatim.fdxconsultation.dao.ifaces.dataproduction.DataProductionToDeleteDAO;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class DataProductionToDeleteManagerImpl implements DataProductionToDeleteManager {
+
+    @EJB
+    private DataProductionToDeleteDAO dao;
+
+    @Override
+    public DataProductionToDeleteDAO getDao() {
+        return dao;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproduction/metadata/ProductionMetaDataManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproduction/metadata/ProductionMetaDataManagerImpl.java
new file mode 100644
index 0000000..66e098e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproduction/metadata/ProductionMetaDataManagerImpl.java
@@ -0,0 +1,33 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.dataproduction.metadata;
+
+import com.megatim.fdxcommons.model.dataproduction.metadata.ProductionMetaData;
+import com.megatim.fdxconsultation.core.ifaces.dataproduction.metadata.ProductionMetaDataManager;
+import com.megatim.fdxconsultation.dao.ifaces.dataproduction.metadata.ProductionMetaDataDAO;
+import java.util.List;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class ProductionMetaDataManagerImpl implements ProductionMetaDataManager {
+
+    @EJB
+    private ProductionMetaDataDAO dao;
+
+    @Override
+    public ProductionMetaDataDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public void deleteById(Long dataProductionId) {
+        dao.deleteById(dataProductionId);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DataProductionTask.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DataProductionTask.java
new file mode 100644
index 0000000..500dcc7
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DataProductionTask.java
@@ -0,0 +1,10 @@
+package com.megatim.fdxconsultation.core.impl.dataproductionworker;
+
+/**
+ *
+ * @author Gabuntu
+ */
+interface DataProductionTask {
+
+    public void processProduction();
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DataProductionTaskFactory.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DataProductionTaskFactory.java
new file mode 100644
index 0000000..fed1903
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DataProductionTaskFactory.java
@@ -0,0 +1,49 @@
+package com.megatim.fdxconsultation.core.impl.dataproductionworker;
+
+import com.megatim.fdxcommons.model.dataproduction.DataProductionType;
+import com.megatim.fdxconsultation.core.ifaces.dataproduction.metadata.ProductionMetaDataManager;
+import com.megatim.fdxconsultation.core.ifaces.helper.TableInsert;
+import com.megatim.fdxconsultation.core.ifaces.integration.ColumnDefinitionManager;
+import com.megatim.fdxconsultation.core.impl.sockets.DataProductionSessionHandler;
+import com.megatim.fdxconsultation.model.dataproduction.DataProduction;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import javax.annotation.Resource;
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import javax.sql.DataSource;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@ApplicationScoped
+class DataProductionTaskFactory {
+
+    @Resource(lookup = AppCommonContext.JNDI_NAME)
+    private DataSource dataSource;
+
+    @Inject
+    private ColumnDefinitionManager columnDefinitionManager;
+
+    @Inject
+    private DataProductionSessionHandler dataProductionSessionHandler;
+    
+    @Inject
+    private TableInsert tableInsert;
+    
+    @Inject
+    private MapStructMapper mapper;
+    
+    @Inject
+    private ProductionMetaDataManager metaDataManager;
+
+    DataProductionTask createDataProductionTask(DataProduction dataProduction) {
+        if (dataProduction.getDataProductionType().equals(DataProductionType.DELETE)) {
+            return new DeleteDataProductionTask(dataProduction, dataSource);
+        } else {
+            return new FileDataProductionTask(dataProduction, dataSource, columnDefinitionManager, dataProductionSessionHandler, tableInsert, mapper, metaDataManager);
+        }
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DataProductionWorker.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DataProductionWorker.java
new file mode 100644
index 0000000..a163288
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DataProductionWorker.java
@@ -0,0 +1,42 @@
+package com.megatim.fdxconsultation.core.impl.dataproductionworker;
+
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+
+/**
+ *
+ * @author Gabuntu
+ */
+class DataProductionWorker extends Thread {
+
+    private final BlockingQueue<DataProductionTask> tasks = new LinkedBlockingQueue<>();
+    private volatile boolean running = true;
+
+    public DataProductionWorker(String name) {
+        super(name);
+    }
+
+    @Override
+    public void run() {
+        while (running) {
+            try {
+                DataProductionTask task = tasks.take();
+                task.processProduction();
+            } catch (InterruptedException ex) {
+                if (!running) {
+                    break; // Exit if interrupted and not running
+                }
+            }
+        }
+    }
+
+    public void shutdown() {
+        running = false;
+        this.interrupt(); // Interrupt the thread to wake it up
+    }
+
+    public void addTask(DataProductionTask dataProductionTask) {
+        tasks.add(dataProductionTask);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DataProductionWorkerGroup.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DataProductionWorkerGroup.java
new file mode 100644
index 0000000..8089676
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DataProductionWorkerGroup.java
@@ -0,0 +1,16 @@
+package com.megatim.fdxconsultation.core.impl.dataproductionworker;
+
+import com.megatim.fdxconsultation.model.dataproduction.DataProduction;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface DataProductionWorkerGroup {
+
+    public void start();
+
+    public void shutdown();
+    
+    public void addNewDataProductionTask(DataProduction dataProduction);
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DefaultDataProductionWorkerGroup.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DefaultDataProductionWorkerGroup.java
new file mode 100644
index 0000000..138228a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DefaultDataProductionWorkerGroup.java
@@ -0,0 +1,81 @@
+package com.megatim.fdxconsultation.core.impl.dataproductionworker;
+
+import com.megatim.fdxconsultation.model.dataproduction.DataProduction;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@ApplicationScoped
+public class DefaultDataProductionWorkerGroup implements DataProductionWorkerGroup {
+
+    @Inject
+    private DataProductionTaskFactory dataProductionTaskFactory;
+
+    private final int WORKER_NUMBER = 4;
+    private final DataProductionWorker[] workers = new DataProductionWorker[WORKER_NUMBER];
+    private final Map<Integer, Set<String>> workerToCodeTypeFichiers = new HashMap<>();
+    private final AtomicInteger currentWorkerIndex = new AtomicInteger(0);
+
+    @Override
+    public void start() {
+        for (int i = 0; i < WORKER_NUMBER; i++) {
+            workers[i] = new DataProductionWorker("Worker-" + i);
+            workers[i].start();
+            workerToCodeTypeFichiers.put(i, new HashSet<>());
+        }
+    }
+
+    @Override
+    public void shutdown() {
+        for (DataProductionWorker worker : workers) {
+            worker.shutdown();
+        }
+        workerToCodeTypeFichiers.clear();
+    }
+
+    @Override
+    public void addNewDataProductionTask(DataProduction dataProduction) {
+        DataProductionWorker worker = workerForTask(dataProduction.getCodeTypeFichier());
+        worker.addTask(dataProductionTaskFactory.createDataProductionTask(dataProduction));
+    }
+
+    private synchronized DataProductionWorker workerForTask(String codeTypeFichier) {
+        Integer workerIndex = workerLinkToCodeTypeFichier(codeTypeFichier);
+        if (workerIndex != null) {
+            return workers[workerIndex];
+        }
+        int currentIndex = currentWorkerIndex.getAndIncrement();
+        DataProductionWorker worker = workers[currentIndex];
+
+        workerToCodeTypeFichiers.get(currentIndex).add(codeTypeFichier);
+
+        changeCurrentWorkerIndex();
+
+        return worker;
+    }
+
+    private Integer workerLinkToCodeTypeFichier(String codeTypeFichier) {
+        return workerToCodeTypeFichiers
+                .entrySet()
+                .stream()
+                .filter(e -> e.getValue().contains(codeTypeFichier))
+                .findFirst()
+                .map(e -> e.getKey())
+                .orElse(null);
+    }
+
+    private void changeCurrentWorkerIndex() {
+        if ((currentWorkerIndex.get() % (WORKER_NUMBER - 1)) == 0) {
+            currentWorkerIndex.set(0);
+        }
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DeleteDataProductionTask.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DeleteDataProductionTask.java
new file mode 100644
index 0000000..8dbd1ff
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/DeleteDataProductionTask.java
@@ -0,0 +1,43 @@
+package com.megatim.fdxconsultation.core.impl.dataproductionworker;
+
+import com.megatim.fdxcommons.tools.database.connection.DBConnection;
+import com.megatim.fdxcommons.tools.database.tables.FdxConsultationTable;
+import com.megatim.fdxconsultation.core.impl.factory.FdxConsultationTableFactory;
+import com.megatim.fdxconsultation.model.dataproduction.DataProduction;
+import java.sql.Connection;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.sql.DataSource;
+
+/**
+ *
+ * @author Gabuntu
+ */
+class DeleteDataProductionTask implements DataProductionTask {
+
+    private final DataProduction dataProduction;
+    private final DataSource dataSource;
+
+    public DeleteDataProductionTask(DataProduction dataProduction, DataSource dataSource) {
+        this.dataProduction = dataProduction;
+        this.dataSource = dataSource;
+    }
+
+    @Override
+    public void processProduction() {
+
+        try ( Connection connection = new DBConnection(dataSource).connection()) {
+
+            connection.setAutoCommit(false);
+
+            FdxConsultationTable fdxConsTable = FdxConsultationTableFactory.createTable(dataProduction.getCodeTypeFichier(), dataProduction.getReferentielVersion(), connection);
+            fdxConsTable.delete(null, dataProduction, connection);
+            connection.commit();
+
+        } catch (Exception ex) {
+            Logger.getLogger(DeleteDataProductionTask.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+        }
+
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/FileDataProductionTask.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/FileDataProductionTask.java
new file mode 100644
index 0000000..a748b3d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/dataproductionworker/FileDataProductionTask.java
@@ -0,0 +1,93 @@
+package com.megatim.fdxconsultation.core.impl.dataproductionworker;
+
+import com.megatim.fdxcommons.core.impl.tools.CommonUtilities;
+import com.megatim.fdxcommons.model.camel.CamelRouteConfiguration;
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import com.megatim.fdxcommons.tools.context.AppContext;
+import com.megatim.fdxcommons.tools.database.connection.DBConnection;
+import com.megatim.fdxconsultation.core.ifaces.dataproduction.metadata.ProductionMetaDataManager;
+import com.megatim.fdxconsultation.core.ifaces.helper.TableInsert;
+import com.megatim.fdxconsultation.core.ifaces.integration.ColumnDefinitionManager;
+import com.megatim.fdxconsultation.core.impl.camel.helper.FileInsertionProcess;
+import com.megatim.fdxconsultation.core.impl.sockets.DataProductionSessionHandler;
+import com.megatim.fdxconsultation.model.dataproduction.DataProduction;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.sql.Connection;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.sql.DataSource;
+
+/**
+ *
+ * @author Gabuntu
+ */
+class FileDataProductionTask implements DataProductionTask {
+
+    private final DataProduction dataProduction;
+    private final DataSource dataSource;
+    private final ColumnDefinitionManager columnDefinitionManager;
+    private final DataProductionSessionHandler dataProductionSessionHandler;
+    private final TableInsert tableInsert;
+    private final MapStructMapper mapper;
+    private final ProductionMetaDataManager metaDataManager;
+
+    public FileDataProductionTask(DataProduction dataProduction,
+            DataSource dataSource,
+            ColumnDefinitionManager columnDefinitionManager,
+            DataProductionSessionHandler dataProductionSessionHandler,
+            TableInsert tableInsert,
+            MapStructMapper mapper,
+            ProductionMetaDataManager metaDataManager) {
+        this.dataProduction = dataProduction;
+        this.dataSource = dataSource;
+        this.columnDefinitionManager = columnDefinitionManager;
+        this.dataProductionSessionHandler = dataProductionSessionHandler;
+        this.tableInsert = tableInsert;
+        this.mapper = mapper;
+        this.metaDataManager = metaDataManager;
+    }
+
+    @Override
+    public void processProduction() {
+        System.out.println("-------------------------before FileInsertionProcess-------------------");
+        CommonDataProduction cd = mapper.dataProductionToCommonDataProduction(dataProduction);
+        cd.setId(dataProduction.getId());
+
+        try {
+            File dataFile = dataFile(dataProduction);
+
+            if (dataFile.exists()) {
+                Charset charset = CommonUtilities.getCharset(dataFile);
+
+                try ( Connection connection = new DBConnection(dataSource).connection()) {
+                    connection.setAutoCommit(false);
+                    new FileInsertionProcess(columnDefinitionManager,
+                            cd,
+                            connection,
+                            dataFile,
+                            charset,
+                            tableInsert,
+                            metaDataManager
+                    ).process();
+                    connection.commit();
+                }
+                System.out.println("-------------------after FileInsertionProcess---------------------");
+                dataProductionSessionHandler.publishMessage(dataProduction);
+                dataFile.delete();
+                metaDataManager.deleteById(cd.getId());
+            }
+        } catch (Exception ex) {
+            Logger.getLogger(FileDataProductionTask.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+        }
+    }
+
+    private File dataFile(CommonDataProduction dataProduction) throws IOException {
+        CamelRouteConfiguration camelRouteConfiguration = new CamelRouteConfiguration(AppContext.PROPERTY_FILE_PATH);
+        String dataDir = camelRouteConfiguration.getLocalConfiguration().consultationDestinationDir();
+
+        return new File(dataDir, dataProduction.getIntegrationFileName());
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/db/ReferentielDataSaverImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/db/ReferentielDataSaverImpl.java
new file mode 100644
index 0000000..737c630
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/db/ReferentielDataSaverImpl.java
@@ -0,0 +1,586 @@
+package com.megatim.fdxconsultation.core.impl.db;
+
+import com.megatim.fdxcommons.core.ifaces.db.ReferentielDataSaver;
+import com.megatim.fdxcommons.model.enumeration.CategorieFichier;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.pojo.ReferentielToImportData;
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import com.megatim.fdxcommons.model.referentiel.ApplicationSource;
+import com.megatim.fdxcommons.model.referentiel.ExtensionFichier;
+import com.megatim.fdxcommons.model.referentiel.GroupeNoeud;
+import com.megatim.fdxcommons.model.referentiel.GroupeParticipant;
+import com.megatim.fdxcommons.model.referentiel.Noeud;
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import com.megatim.fdxcommons.model.referentiel.Pays;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxcommons.model.referentiel.Routage;
+import com.megatim.fdxcommons.model.referentiel.StructureLigne;
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxcommons.model.referentiel.ValidateurFichier;
+import com.megatim.fdxcommons.model.referentiel.ValidateurFichierConfiguration;
+import com.megatim.fdxcommons.model.referentiel.natureproduction.NatureProductionFichier;
+import com.megatim.fdxcommons.tools.exceptions.TypeFichierExistNotException;
+import com.megatim.fdxcommons.tools.exceptions.CommonRessourceNotFoundException;
+import com.megatim.fdxconsultation.core.ifaces.integration.ColumnDefinitionManager;
+import com.megatim.fdxconsultation.core.ifaces.integration.TableDefinitionManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.ApplicationSourceManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.ExtensionFichierManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.GroupeNoeudManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.GroupeParticipantManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.NoeudManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.ParticipantManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.PaysManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.ReferentielManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.RoutageManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.StructureLigneManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.TypeFichierManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.ValidateurFichierConfigurationManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.ValidateurFichierManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.natureproduction.NatureProductionFichierManager;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class ReferentielDataSaverImpl implements ReferentielDataSaver {
+
+    @Inject
+    private ReferentielManager refManager;
+
+    @Inject
+    private ApplicationSourceManager appSourceManager;
+
+    @Inject
+    private ExtensionFichierManager extFichierManager;
+
+    @Inject
+    private GroupeNoeudManager groupeNoeudManager;
+
+    @Inject
+    private GroupeParticipantManager groupePartManager;
+
+    @Inject
+    private NoeudManager noeudManager;
+
+    @Inject
+    private ParticipantManager participantManager;
+
+    @Inject
+    private PaysManager paysManager;
+
+    @Inject
+    private RoutageManager routageManager;
+
+    @Inject
+    private TypeFichierManager typeFichierManager;
+
+    @Inject
+    private StructureLigneManager structLigneManager;
+
+    @Inject
+    private ValidateurFichierManager valFichManager;
+
+    @Inject
+    private ValidateurFichierConfigurationManager valFichConfManager;
+
+    @Inject
+    private ColumnDefinitionManager columnDefinitionManager;
+
+    @Inject
+    private TableDefinitionManager tableDefinitionManager;
+
+    @Inject
+    NatureProductionFichierManager natureProdFichManager;
+
+    private Map<String, Referentiel> referentielsMap;
+    private Map<String, TypeFichier> typeFichiersMap;
+    private Map<String, Pays> paysMap;
+    private Map<String, Participant> participantsMap;
+    private Map<String, ApplicationSource> appSourcesMap;
+    private Map<String, ExtensionFichier> extensionFichiersMap;
+    private Map<String, ValidateurFichier> validateurFichiersMap;
+    private Map<String, ValidateurFichierConfiguration> validateurFichierConfsMap;
+    private Map<String, StructureLigne> structLignesMap;
+    private Map<String, Noeud> noeudsMap;
+    private Map<String, GroupeNoeud> groupeNoeudsMap;
+    private Map<String, GroupeParticipant> groupeParticipantsMap;
+    private Map<String, Routage> routagesMap;
+    private Map<String, ColumnDefinition> columnDefinitionsMap;
+    private Map<String, NatureProductionFichier> natureProdFichsMap;
+
+    @Override
+    public void persist(ReferentielToImportData referentielToImportData) throws Exception {
+
+        refManager.archiverReferentielEncours();
+
+        persistReferentiels(referentielToImportData.getReferentiels());
+
+        persistApplicationSources(referentielToImportData.getApplicationSources());
+
+        persistPayss(referentielToImportData.getPays());
+
+        persistExtensionFichiers(referentielToImportData.getExtensionFichiers());
+
+        persistParticipants(referentielToImportData.getParticipants());
+
+        persistTypeFichiers(referentielToImportData.getTypeFichiers());
+
+//        persistValidateurFichiers(referentielToImportData.getValidateurFichiers());
+//
+//        persistValidateurFichierConfigurations(referentielToImportData.getValidateurFichierConfigurations());
+//
+//        persitStructuresLignes(referentielToImportData.getStructureLignes());
+        persistNoeuds(referentielToImportData.getNoeuds());
+
+        persistGroupeNoeuds(referentielToImportData.getGroupeNoeuds());
+
+        persistGroupeParticipants(referentielToImportData.getGroupeParticipants());
+
+        persistRoutages(referentielToImportData.getRoutages());
+
+        persistTableDefinitions(referentielToImportData.getTableDefinitions());
+
+        persistColumnsDefinition(referentielToImportData.getTableDefinitions());
+
+        persistNatureProductionFichiers(referentielToImportData.getNatureProductionFichiers());
+    }
+
+    private void persistReferentiels(List<Referentiel> referentiels) throws Exception {
+        referentielsMap = refManager.getAll(null).stream().collect(Collectors.toMap(Referentiel::getVersion, Function.identity()));
+
+        if (referentiels != null) {
+
+            for (Referentiel ref : referentiels) {
+                Referentiel referentielFound = referentielsMap.get(ref.getVersion());
+
+                if (referentielFound == null) {
+                    refManager.save(ref);
+                }
+            }
+        }
+    }
+
+    private void persistApplicationSources(List<ApplicationSource> appSources) throws Exception {
+        referentielsMap = refManager.getAll(null).stream().collect(Collectors.toMap(Referentiel::getVersion, Function.identity()));
+        appSourcesMap = appSourceManager.getAll(null).stream().collect(Collectors.toMap(ApplicationSource::getLibelle, Function.identity()));
+
+        if (appSources != null) {
+
+            for (ApplicationSource appSource : appSources) {
+                String referentielVersion = appSource.getReferentiel().getVersion();
+                Referentiel referentielFound = referentielsMap.get(referentielVersion);
+
+                if (referentielFound == null) {
+                    throw new CommonRessourceNotFoundException("Le referentiel suivant est introuvable : " + referentielVersion);
+                }
+
+                ApplicationSource appSourceFound = appSourcesMap.get(appSource.getLibelle());
+                if (appSourceFound == null) {
+                    appSource.setReferentiel(referentielFound);
+                    appSourceManager.save(appSource);
+                }
+
+            }
+        }
+
+    }
+
+    private void persistPayss(List<Pays> payss) throws Exception {
+        paysMap = paysManager.getAll(null).stream().collect(Collectors.toMap(Pays::getCode, Function.identity()));
+
+        if (payss != null) {
+
+            for (Pays p : payss) {
+                String referentielVersion = p.getReferentiel().getVersion();
+                Referentiel referentielFound = referentielsMap.get(referentielVersion);
+
+                if (referentielFound == null) {
+                    throw new CommonRessourceNotFoundException("La ressource Referentiel suivante est introuvable : " + referentielVersion);
+                }
+                Pays paysFound = paysMap.get(p.getCode());
+
+                if (paysFound == null) {
+                    p.setReferentiel(referentielFound);
+                    p.setParticipants(new HashSet<>());
+                    paysManager.save(p);
+                }
+
+            }
+        }
+    }
+
+    private void persistExtensionFichiers(List<ExtensionFichier> extFichiers) throws Exception {
+        referentielsMap = refManager.getAll(null).stream().collect(Collectors.toMap(Referentiel::getVersion, Function.identity()));
+        extensionFichiersMap = extFichierManager.getAll(null).stream().collect(Collectors.toMap(ExtensionFichier::getExtension, Function.identity()));
+
+        if (extFichiers != null) {
+
+            for (ExtensionFichier e : extFichiers) {
+                String referentielVersion = e.getReferentiel().getVersion();
+                Referentiel referentielFound = referentielsMap.get(referentielVersion);
+
+                if (referentielFound == null) {
+                    throw new CommonRessourceNotFoundException("Le referentiel suivant est introuvable : " + referentielVersion);
+                }
+
+                ExtensionFichier extFichierFound = extensionFichiersMap.get(e.getExtension());
+                if (extFichierFound == null) {
+                    e.setReferentiel(referentielFound);
+                    extFichierManager.save(e);
+                }
+            }
+        }
+    }
+
+    private void persistParticipants(List<Participant> participants) throws Exception {
+        paysMap = paysManager.getAll(null).stream().collect(Collectors.toMap(Pays::getCode, Function.identity()));
+        participantsMap = participantManager.getAll(null).stream().collect(Collectors.toMap(Participant::getCode, Function.identity()));
+
+        if (participants != null) {
+
+            for (Participant p : participants) {
+                String referentielVersion = p.getReferentiel().getVersion();
+                String codePays = p.getPays().getCode();
+                Referentiel referentielFound = referentielsMap.get(referentielVersion);
+
+                if (referentielFound == null) {
+                    throw new CommonRessourceNotFoundException("La ressource Referentiel suivante est introuvable : " + referentielVersion);
+                }
+                Pays paysFound = paysMap.get(codePays);
+
+                if (paysFound == null) {
+                    throw new CommonRessourceNotFoundException("La ressource Pays suivante est introuvable : " + codePays);
+                }
+                Participant participantFound = participantsMap.get(p.getCode());
+
+                if (participantFound == null) {
+                    p.setPays(paysFound);
+                    p.setReferentiel(referentielFound);
+                    p.setNoeuds(new HashSet<>());
+                    p.setRoutageEnvois(new HashSet<>());
+                    p.setRoutageReceptions(new HashSet<>());
+                    p.setGroupeParticipants(new HashSet<>());
+
+                    participantManager.save(p);
+                }
+
+            }
+        }
+    }
+
+    private void persistTypeFichiers(List<TypeFichier> typeFichiers) throws Exception {
+        participantsMap = participantManager.getAll(null).stream().collect(Collectors.toMap(Participant::getCode, Function.identity()));
+        typeFichiersMap = typeFichierManager.getAll(null).stream().collect(Collectors.toMap(TypeFichier::getCode, Function.identity()));
+
+        if (typeFichiers != null) {
+
+            for (TypeFichier typeFich : typeFichiers) {
+
+                if (typeFich.getCategorieFichier().equals(CategorieFichier.STRUCTURE)) {
+
+                    String referentielVersion = typeFich.getReferentiel().getVersion();
+                    String codeParticipant = typeFich.getParticipant().getCode();
+
+                    Referentiel referentielFound = referentielsMap.get(referentielVersion);
+                    if (referentielFound == null) {
+                        throw new CommonRessourceNotFoundException("La ressource Referentiel suivante est introuvable : " + referentielVersion);
+                    }
+
+                    Participant participantFound = participantsMap.get(codeParticipant);
+                    if (participantFound == null) {
+                        throw new CommonRessourceNotFoundException("La ressource Participant suivante est introuvable : " + codeParticipant);
+                    }
+                    TypeFichier typeFichierFound = typeFichiersMap.get(typeFich.getCode());
+
+                    if (typeFichierFound == null) {
+                        typeFich.setReferentiel(referentielFound);
+                        typeFich.setParticipant(participantFound);
+                        typeFich.setRoutages(new HashSet<>());
+                        typeFich.setValidateurFichierConfigurations(new HashSet<>());
+                        typeFich.setValidateurFichiers(new HashSet<>());
+
+                        typeFichierManager.save(typeFich);
+                    }
+                }
+            }
+        }
+    }
+
+    private void persistValidateurFichiers(List<ValidateurFichier> validateurFichiers) throws Exception {
+        validateurFichiersMap = valFichManager.getAll(null).stream().collect(Collectors.toMap(ValidateurFichier::getId, Function.identity()));
+        typeFichiersMap = typeFichierManager.getAll(null).stream().collect(Collectors.toMap(TypeFichier::getCode, Function.identity()));
+
+        if (validateurFichiers != null) {
+
+            for (ValidateurFichier val : validateurFichiers) {
+                String codeTypeFichier = val.getTypeFichier().getCode();
+                TypeFichier typeFichierFound = typeFichiersMap.get(codeTypeFichier);
+
+                if (typeFichierFound == null) {
+                    throw new TypeFichierExistNotException(codeTypeFichier);
+                }
+                ValidateurFichier valFichFound = validateurFichiersMap.get(val.getId());
+
+                if (valFichFound == null) {
+                    val.setTypeFichier(typeFichierFound);
+                    valFichManager.save(val);
+                }
+            }
+        }
+    }
+
+    private void persistValidateurFichierConfigurations(List<ValidateurFichierConfiguration> valFichConfs) throws TypeFichierExistNotException, Exception {
+        validateurFichierConfsMap = valFichConfManager.getAll(null)
+                .stream()
+                .collect(Collectors.toMap(x -> x.getReferentiel().getVersion() + "-" + x.getTypeFichier().getCode(),
+                        Function.identity()));
+
+        if (valFichConfs != null) {
+
+            for (ValidateurFichierConfiguration valFichConf : valFichConfs) {
+                String codeTypeFichier = valFichConf.getTypeFichier().getCode();
+                String referentielVersion = valFichConf.getReferentiel().getVersion();
+
+                Referentiel referentielFound = referentielsMap.get(referentielVersion);
+                if (referentielFound == null) {
+                    throw new CommonRessourceNotFoundException("Le referentiel suivant est introuvable : " + referentielVersion);
+                }
+
+                TypeFichier typeFichierFound = typeFichiersMap.get(codeTypeFichier);
+                if (typeFichierFound == null) {
+                    throw new TypeFichierExistNotException(codeTypeFichier);
+                }
+
+                ValidateurFichierConfiguration ValFichConfFound = validateurFichierConfsMap.get(valFichConf.getReferentiel().getVersion() + "-" + valFichConf.getTypeFichier().getCode());
+
+                if (ValFichConfFound == null) {
+                    valFichConf.setTypeFichier(typeFichierFound);
+                    valFichConf.setReferentiel(referentielFound);
+
+                    valFichConfManager.save(valFichConf);
+                }
+
+            }
+        }
+    }
+
+    private void persitStructuresLignes(List<StructureLigne> structLignes) throws Exception {
+        validateurFichiersMap = valFichManager.getAll(null).stream().collect(Collectors.toMap(ValidateurFichier::getId, Function.identity()));
+        appSourcesMap = appSourceManager.getAll(null).stream().collect(Collectors.toMap(ApplicationSource::getLibelle, Function.identity()));
+        structLignesMap = structLigneManager.getAll(null).stream().collect(Collectors.toMap(StructureLigne::getId, Function.identity()));
+
+        if (structLignes != null) {
+
+            for (StructureLigne s : structLignes) {
+                String valFichierId = s.getValidateurFichier().getId();
+                String libelleAppSource = s.getApplicationSource().getLibelle();
+
+                ApplicationSource appSourceFound = appSourcesMap.get(libelleAppSource);
+                if (appSourceFound == null) {
+                    throw new CommonRessourceNotFoundException("La ressource ApplicationSource suivante est introuvable : " + libelleAppSource);
+                }
+
+                ValidateurFichier valFichFound = validateurFichiersMap.get(valFichierId);
+                if (valFichFound == null) {
+                    throw new CommonRessourceNotFoundException("La ressource ValidateurFichier suivante est introuvable : " + valFichierId);
+                }
+                StructureLigne structureLigneFound = structLignesMap.get(s.getId());
+
+                if (structureLigneFound == null) {
+                    s.setValidateurFichier(valFichFound);
+                    s.setApplicationSource(appSourceFound);
+
+                    structLigneManager.save(s);
+                }
+
+            }
+        }
+    }
+
+    private void persistNoeuds(List<Noeud> noeuds) throws Exception {
+        noeudsMap = noeudManager.getAll(null).stream().collect(Collectors.toMap(Noeud::getCode, Function.identity()));
+
+        if (noeuds != null) {
+
+            for (Noeud n : noeuds) {
+                String referentielVersion = n.getReferentiel().getVersion();
+                String codeParticipant = n.getParticipant().getCode();
+
+                Referentiel referentielFound = referentielsMap.get(referentielVersion);
+                if (referentielFound == null) {
+                    throw new CommonRessourceNotFoundException("La ressource Referentiel suivante est introuvable : " + referentielVersion);
+                }
+
+                Participant participantFound = participantsMap.get(codeParticipant);
+                if (participantFound == null) {
+                    throw new CommonRessourceNotFoundException("La ressource Participant suivante est introuvable : " + codeParticipant);
+                }
+                Noeud noeudFound = noeudsMap.get(n.getCode());
+
+                if (noeudFound == null) {
+                    n.setReferentiel(referentielFound);
+                    n.setParticipant(participantFound);
+                    n.setGroupeNoeuds(new HashSet<>());
+                    n.setRoutageEnvois(new HashSet<>());
+                    n.setRoutageReceptions(new HashSet<>());
+
+                    noeudManager.save(n);
+                }
+
+            }
+        }
+    }
+
+    private void persistGroupeNoeuds(List<GroupeNoeud> groupeNoeuds) throws Exception {
+        groupeNoeudsMap = groupeNoeudManager.getAll(null).stream().collect(Collectors.toMap(GroupeNoeud::getCode, Function.identity()));
+
+        if (groupeNoeuds != null) {
+
+            for (GroupeNoeud gn : groupeNoeuds) {
+                String referentielVersion = gn.getReferentiel().getVersion();
+                Referentiel referentielFound = referentielsMap.get(referentielVersion);
+
+                if (referentielFound == null) {
+                    throw new CommonRessourceNotFoundException("La ressource Referentiel suivante est introuvable : " + referentielVersion);
+                }
+                GroupeNoeud grpNoeudFound = groupeNoeudsMap.get(gn.getCode());
+
+                if (grpNoeudFound == null) {
+                    gn.setReferentiel(referentielFound);
+                    groupeNoeudManager.save(gn);
+                }
+            }
+        }
+    }
+
+    private void persistGroupeParticipants(List<GroupeParticipant> groupeParticipants) throws Exception {
+        groupeParticipantsMap = groupePartManager.getAll(null).stream().collect(Collectors.toMap(GroupeParticipant::getCode, Function.identity()));
+
+        if (groupeParticipants != null) {
+
+            for (GroupeParticipant gp : groupeParticipants) {
+                String referentielVersion = gp.getReferentiel().getVersion();
+                Referentiel referentielFound = referentielsMap.get(referentielVersion);
+
+                if (referentielFound == null) {
+                    throw new CommonRessourceNotFoundException("La ressource Referentiel suivante est introuvable : " + referentielVersion);
+                }
+                GroupeParticipant grpParticipantFound = groupeParticipantsMap.get(gp.getCode());
+
+                if (grpParticipantFound == null) {
+                    gp.setReferentiel(referentielFound);
+                    gp.setRoutageEnvois(new HashSet<>());
+                    gp.setRoutageReceptions(new HashSet<>());
+
+                    groupePartManager.save(gp);
+                }
+
+            }
+        }
+    }
+
+    private void persistRoutages(List<Routage> routages) throws Exception {
+        typeFichiersMap = typeFichierManager.getAll(null).stream().collect(Collectors.toMap(TypeFichier::getCode, Function.identity()));
+        routagesMap = routageManager.getAll(null)
+                .stream()
+                .collect(Collectors.toMap(x -> x.getReferentiel().getVersion() + "-" + x.getTypeFichier().getCode(),
+                        Function.identity()));
+
+        if (routages != null) {
+
+            for (Routage r : routages) {
+                String referentielVersion = r.getReferentiel().getVersion();
+                String codeTypeFichier = r.getTypeFichier().getCode();
+
+                Referentiel referentielFound = referentielsMap.get(referentielVersion);
+                if (referentielFound == null) {
+                    throw new CommonRessourceNotFoundException("Le referentiel suivant est introuvable : " + referentielVersion);
+                }
+
+                TypeFichier typeFichierFound = typeFichiersMap.get(codeTypeFichier);
+                if (typeFichierFound == null) {
+                    throw new TypeFichierExistNotException(codeTypeFichier);
+                }
+                Routage routageFound = routagesMap.get(r.getReferentiel().getVersion() + "-" + r.getTypeFichier().getCode());
+
+                if (routageFound == null) {
+                    r.setReferentiel(referentielFound);
+                    r.setTypeFichier(typeFichierFound);
+
+                    routageManager.save(r);
+                }
+            }
+        }
+    }
+
+    private void persistTableDefinitions(List<TableDefinition> tablesDefinition) {
+        for (TableDefinition t : tablesDefinition) {
+            if (t.getHeaderPresent() != null && t.getColumnDelimiter() != null && t.getLineDelimiter() != null) {
+                tableDefinitionManager.save(t);
+            }
+        }
+    }
+
+    private void persistColumnsDefinition(List<TableDefinition> tablesDefinition) throws Exception {
+        columnDefinitionsMap = columnDefinitionManager.getAll(null)
+                .stream()
+                .collect(Collectors.toMap(x -> x.getName() + "-" + x.getReferentielVersion() + "-" + x.getCodeTypeFichier(),
+                        Function.identity()
+                ));
+
+        if (tablesDefinition != null) {
+
+            for (TableDefinition t : tablesDefinition) {
+
+                for (ColumnDefinition c : t.getColumnDefinitions()) {
+                    ColumnDefinition colDefFound = columnDefinitionsMap.get(c.getName() + "-" + c.getReferentielVersion() + "-" + c.getCodeTypeFichier());
+
+                    if (colDefFound == null) {
+                        columnDefinitionManager.save(c);
+                    }
+                }
+            }
+        }
+    }
+
+    private void persistNatureProductionFichiers(List<NatureProductionFichier> natureProductionFichs) throws TypeFichierExistNotException {
+        natureProdFichsMap = natureProdFichManager.getAll(null)
+                .stream()
+                .collect(Collectors.toMap(x -> x.getReferentiel().getVersion() + "-" + x.getTypeFichier().getCode(),
+                        Function.identity()));
+
+        if (natureProductionFichs != null) {
+
+            for (NatureProductionFichier n : natureProductionFichs) {
+                String referentielVersion = n.getReferentiel().getVersion();
+                String codeTypeFichier = n.getTypeFichier().getCode();
+
+                Referentiel referentielFound = referentielsMap.get(referentielVersion);
+                if (referentielFound == null) {
+                    throw new CommonRessourceNotFoundException("Le referentiel suivant est introuvable : " + referentielVersion);
+                }
+
+                TypeFichier typeFichierFound = typeFichiersMap.get(codeTypeFichier);
+                if (typeFichierFound == null) {
+                    throw new TypeFichierExistNotException(codeTypeFichier);
+                }
+                NatureProductionFichier natureProdFichFound = natureProdFichsMap.get(n.getReferentiel().getVersion() + "-" + n.getTypeFichier().getCode());
+
+                if (natureProdFichFound == null) {
+                    n.setReferentiel(referentielFound);
+                    n.setTypeFichier(typeFichierFound);
+
+                    natureProdFichManager.save(n);
+                }
+            }
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/documents/CategoryManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/documents/CategoryManagerImpl.java
new file mode 100644
index 0000000..2123257
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/documents/CategoryManagerImpl.java
@@ -0,0 +1,76 @@
+package com.megatim.fdxconsultation.core.impl.documents;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.bekosoftware.genericmanagerlayer.core.impl.AbstractGenericManager;
+import com.megatim.commons.tools.exceptions.ApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.documents.CategoryManager;
+import com.megatim.fdxconsultation.dao.ifaces.documents.CategoryDAO;
+import com.megatim.fdxconsultation.dao.impl.utils.BaseEntityUtil;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.documents.Category;
+import java.util.ArrayList;
+import java.util.List;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.transaction.Transactional;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Dependent
+public class CategoryManagerImpl extends AbstractGenericManager<Category, Long> implements CategoryManager {
+
+    @Inject
+    private CategoryDAO dao;
+
+    @Override
+    public GenericDAO<Category, Long> getDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "id";
+    }
+
+    @Transactional
+    @Override
+    public Category add(Category category, User connectedUser) {
+        BaseEntityUtil.setBaseEntityFieldsForAdd(category, connectedUser);
+        return dao.save(category);
+    }
+
+    @Transactional
+    @Override
+    public Category update(Long id, Category category, User connectedUser) {
+        Category refreshCategory = getById(id);
+        refreshCategory.setName(category.getName());
+        refreshCategory.setPosition(category.getPosition());
+
+        BaseEntityUtil.setBaseEntityFieldsForUpdate(refreshCategory, connectedUser);
+        return dao.save(refreshCategory);
+    }
+
+    @Transactional
+    @Override
+    public Category delete(Long id, User connectedUser) {
+        Category category = getById(id);
+        BaseEntityUtil.setBaseEntityFieldsForDelete(category, connectedUser);
+        return dao.save(category);
+    }
+
+    private Category getById(Long id) {
+        Category category = dao.getById(id);
+        if (category == null) {
+            throw new ApplicationServerException("Categorie introuvable");
+        }
+        return category;
+    }
+
+    @Override
+    public List<Category> loadAll() {
+        return dao.loadAll();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/documents/DocumentManageImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/documents/DocumentManageImpl.java
new file mode 100644
index 0000000..0d5b28b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/documents/DocumentManageImpl.java
@@ -0,0 +1,85 @@
+package com.megatim.fdxconsultation.core.impl.documents;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.bekosoftware.genericmanagerlayer.core.impl.AbstractGenericManager;
+import com.megatim.commons.tools.exceptions.ApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.documents.DocumentManager;
+import com.megatim.fdxconsultation.dao.ifaces.documents.CategoryDAO;
+import com.megatim.fdxconsultation.dao.ifaces.documents.DocumentDAO;
+import com.megatim.fdxconsultation.dao.impl.utils.BaseEntityUtil;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.documents.Category;
+import com.megatim.fdxconsultation.model.documents.Document;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.transaction.Transactional;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Dependent
+public class DocumentManageImpl extends AbstractGenericManager<Document, Long> implements DocumentManager {
+
+    @Inject
+    private DocumentDAO dao;
+
+    @Inject
+    private CategoryDAO categoryDAO;
+
+    @Override
+    public GenericDAO<Document, Long> getDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "id";
+    }
+
+    @Transactional
+    @Override
+    public Document add(Long CategoryId, Document document, User connectedUser) {
+
+        Category category = categoryDAO.getById(CategoryId);
+        if (category == null) {
+            throw new ApplicationServerException("La catégorie à associer au document à enregistrer est introuvable");
+        }
+
+        document.setCategory(category);
+
+        BaseEntityUtil.setBaseEntityFieldsForAdd(document, connectedUser);
+        return dao.save(document);
+    }
+
+    @Transactional
+    @Override
+    public Document update(Long id, Document document, User connectedUser) {
+
+        Document doc = getById(id);
+        doc.setLabel(document.getLabel());
+        doc.setVersion(document.getVersion());
+        doc.setPosition(document.getPosition());
+        doc.setItemFile(document.getItemFile());
+
+        BaseEntityUtil.setBaseEntityFieldsForUpdate(doc, connectedUser);
+        return dao.save(doc);
+    }
+
+    @Transactional
+    @Override
+    public Document delete(Long id, User connectedUser) {
+        Document document = getById(id);
+        BaseEntityUtil.setBaseEntityFieldsForDelete(document, connectedUser);
+        return dao.save(document);
+    }
+
+    private Document getById(Long id) {
+        Document document = dao.getById(id);
+        if (document == null) {
+            throw new ApplicationServerException("Document introuvable");
+        }
+        return document;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/factory/FdxConsultationTableFactory.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/factory/FdxConsultationTableFactory.java
new file mode 100644
index 0000000..4e484cf
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/factory/FdxConsultationTableFactory.java
@@ -0,0 +1,31 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.factory;
+
+import com.megatim.fdxcommons.tools.database.contrat.TableName;
+import com.megatim.fdxcommons.tools.database.tables.FdxConsultationTable;
+import com.megatim.fdxcommons.tools.database.tables.FdxTableName;
+import java.sql.Connection;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ *
+ * @author ASUS
+ */
+public class FdxConsultationTableFactory {
+
+    private static final Map<TableName, FdxConsultationTable> tableNameToFdxTable = new HashMap<>();
+
+    public static synchronized FdxConsultationTable createTable(String codeTypeFichier, String referentielVersion, Connection connection) {
+        TableName tableName = new FdxTableName(referentielVersion, codeTypeFichier);
+
+        if (tableNameToFdxTable.get(tableName) == null) {
+            FdxConsultationTable fdxTable = new FdxConsultationTable(codeTypeFichier, referentielVersion);
+            tableNameToFdxTable.put(tableName, fdxTable);
+        }
+        return tableNameToFdxTable.get(tableName);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/favoritessearch/FavoriteSearchManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/favoritessearch/FavoriteSearchManagerImpl.java
new file mode 100644
index 0000000..be1b59b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/favoritessearch/FavoriteSearchManagerImpl.java
@@ -0,0 +1,72 @@
+package com.megatim.fdxconsultation.core.impl.favoritessearch;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.bekosoftware.genericmanagerlayer.core.impl.AbstractGenericManager;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.core.ifaces.favoritessearch.FavoriteSearchManager;
+import com.megatim.fdxconsultation.core.ifaces.stats.CriteriaEntityPersistedManager;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithCriteriaEntityDAO;
+import com.megatim.fdxconsultation.dao.ifaces.favoritessearch.FavoriteSearchDAO;
+import com.megatim.fdxconsultation.dao.impl.utils.BaseEntityUtil;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.FavoriteSearchDto;
+import com.megatim.fdxconsultation.model.favoritessearch.FavoriteSearch;
+import java.util.List;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.transaction.Transactional;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Dependent
+public class FavoriteSearchManagerImpl extends AbstractGenericManager<FavoriteSearch, Long> implements FavoriteSearchManager {
+    
+    @Inject
+    private FavoriteSearchDAO dao;
+    
+    @Inject
+    private CriteriaEntityPersistedManager criteriaEntityPersistedManager;
+    
+    @Override
+    public GenericDAO<FavoriteSearch, Long> getDao() {
+        return dao;
+    }
+    
+    @Override
+    public String getEntityIdName() {
+        return "id";
+    }
+    
+    @Transactional
+    @Override
+    public void add(FavoriteSearchDto favoriteSearchRequest, User connectedUser) {
+        
+        String codeTypeFichier = favoriteSearchRequest.getCodeTypeFichier();
+        String referentielVersion = favoriteSearchRequest.getReferentielVersion();
+        CriteriaEntityFromView criteria = favoriteSearchRequest.getCriteria();
+        
+        FavoriteSearch favoriteSearch = new FavoriteSearch();
+        favoriteSearch.setUserName(connectedUser.getUserName());
+        favoriteSearch.setLibelle(favoriteSearchRequest.getLibelle());
+        favoriteSearch.setCodeTypeFichier(codeTypeFichier);
+        favoriteSearch.setReferentielVersion(referentielVersion);
+        favoriteSearch.setCriteria(criteriaEntityPersistedManager.constructCriteriaPersisted(codeTypeFichier, referentielVersion, criteria));
+        
+        BaseEntityUtil.setBaseEntityFieldsForAdd(favoriteSearch, connectedUser);
+        
+        dao.save(favoriteSearch);
+    }
+    
+    @Override
+    public List<FavoriteSearch> all(String userName) {
+        return dao.all(userName);
+    }
+    
+    @Override
+    public PaginationWithCriteriaEntityDAO<FavoriteSearch, Long> paginationWithCriteriaEntityDAO() {
+        return dao;
+    }
+    
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/DataConsumptionOperationsImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/DataConsumptionOperationsImpl.java
new file mode 100644
index 0000000..86751bf
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/DataConsumptionOperationsImpl.java
@@ -0,0 +1,168 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.helper;
+
+import com.megatim.commons.tools.exceptions.ApplicationServerException;
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.PageData;
+import com.megatim.fdxcommons.tools.database.connection.DBConnection;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.queries.metadata.SelectQueryResult;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.EnCoursProductionColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.FdxApiTable;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxcommons.tools.utils.CriteriaEntityFromViewToQueryCriterion;
+import com.megatim.fdxconsultation.core.ifaces.customtypefichier.CustomTypeFichierManager;
+import com.megatim.fdxconsultation.core.ifaces.integration.ColumnDefinitionManager;
+import com.megatim.fdxconsultation.core.ifaces.helper.DataConsumptionOperations;
+import com.megatim.fdxconsultation.core.impl.utils.FdxTableUtils;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dtos.reporting.CustomTypeFichierReportConfiguration;
+import com.megatim.fdxconsultation.model.dtos.reporting.CustomTypeFichierReportConfigurationFromView;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import java.io.File;
+import java.sql.Connection;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.annotation.Resource;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.sql.DataSource;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class DataConsumptionOperationsImpl implements DataConsumptionOperations {
+
+    @Resource(lookup = AppCommonContext.JNDI_NAME)
+    private DataSource dataSource;
+
+    @Inject
+    MapStructMapper mapper;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @Inject
+    CustomTypeFichierManager customTypeFichierManager;
+
+    @Inject
+    ColumnDefinitionManager columnDefinitionManager;
+
+    @Override
+    public List<Map<String, Object>> findByCriteria(String referentielVersion, String codeTypeFichier, CriteriaEntityFromView criterion) {
+        try ( Connection connection = new DBConnection(dataSource).connection()) {
+            SelectQueryResult result = selectResult(connection, codeTypeFichier, referentielVersion, curentDataProductionCriterion(criterion));
+            return FdxTableUtils.fdxTableRowToListMap(result.rows());
+
+        } catch (Exception ex) {
+            Logger.getLogger(DataConsumptionOperationsImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Long count(String referentielVersion, String codeTypeFichier, CriteriaEntityFromView criterion) {
+        try ( Connection connection = new DBConnection(dataSource).connection()) {
+            return table(codeTypeFichier, referentielVersion)
+                    .count(curentDataProductionCriterion(criterion), connection);
+        } catch (Exception ex) {
+            throw new ApplicationServerException(ex.getMessage());
+        }
+    }
+
+    @Override
+    public PageData findByCriteriaWithPagination(String referentielVersion, String codeTypeFichier, CriteriaEntityFromView criterion, int pageNumber, int pageSize) {
+        try ( Connection connection = new DBConnection(dataSource).connection()) {
+            return getPageData(connection, codeTypeFichier, referentielVersion, curentDataProductionCriterion(criterion), pageNumber, pageSize);
+        } catch (Exception ex) {
+            Logger.getLogger(DataConsumptionOperationsImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public File printAll(String referentielVersion, String codeTypeFichier, CustomTypeFichierReportConfigurationFromView reportConfigurationFromView, User userConnected) throws Exception {
+        CustomTypeFichierReportConfiguration reportConfiguration = mapper.customTypeFichierReportConfigurationFromViewToCustomTypeFichierReportConfiguration(reportConfigurationFromView);
+        return customTypeFichierManager.generatePdf(reportConfiguration, codeTypeFichier, userConnected, false);
+    }
+
+    @Override
+    public List<ColumnDefinition> getPrintableColumns(String referentielVersion, String codeTypeFichier) {
+        return columnDefinitionManager.findByReferentielAndTypeFichier(referentielVersion, codeTypeFichier);
+    }
+
+    private QueryCriterion curentDataProductionCriterion(CriteriaEntityFromView criterion) {
+        QueryCriterion queryCriterion = new CriteriaEntityFromViewToQueryCriterion(criterion).queryCriterion();
+        
+        if (queryCriterion != null) {
+            return new QueryCriterion(null,
+                    null,
+                    null,
+                    CriteriaLogicConnector.AND,
+                    Arrays.asList(queryCriterion,
+                            new QueryCriterion(new EnCoursProductionColumnDefinition().name(), false, Operateur.EQUALS, null, Arrays.asList()))
+            );
+        } else {
+            return new QueryCriterion(new EnCoursProductionColumnDefinition().name(), false, Operateur.EQUALS, null, Arrays.asList());
+        }
+
+    }
+
+    private SelectQueryResult selectResult(Connection connection, String codeTypeFichier, String referentielVersion, QueryCriterion queryCriterion) {
+        try {
+            return table(codeTypeFichier, referentielVersion).selectResult(queryCriterion, connection);
+        } catch (Exception ex) {
+            throw new ApplicationServerException(ex.getMessage());
+        }
+    }
+
+    private SelectQueryResult selectResult(Connection connection, String codeTypeFichier, String referentielVersion, QueryCriterion queryCriterion, int pageNumber, int pageSize) {
+        try {
+            int offset = (pageNumber - 1) * pageSize;
+            return table(codeTypeFichier, referentielVersion).selectResult(queryCriterion, connection, pageSize, offset);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new ApplicationServerException(ex.getMessage());
+        }
+    }
+
+    private FdxApiTable table(String codeTypeFichier, String referentielVersion) {
+        return new FdxApiTable(codeTypeFichier, referentielVersion);
+    }
+
+    private PageData getPageData(Connection connection, String codeTypeFichier, String referentielVersion, QueryCriterion queryCriterion, int pageNumber, int pageSize) {
+
+        try {
+
+            SelectQueryResult result = selectResult(connection, codeTypeFichier, referentielVersion, queryCriterion, pageNumber, pageSize);
+
+            List<Map<String, Object>> loadedData = FdxTableUtils.fdxTableRowToListMap(result.rows());
+            long totalNumberOfElements = table(codeTypeFichier, referentielVersion).count(queryCriterion, connection);
+
+            PageData pageData = new PageData();
+            pageData.setLoadedData(loadedData);
+            pageData.setPageNumber(pageNumber);
+            pageData.setPageSize(pageSize);
+            pageData.setTotalNumberOfElements(totalNumberOfElements);
+
+            return pageData;
+
+        } catch (Exception ex) {
+            throw new ApplicationServerException(ex.getMessage());
+        }
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/DataInMemoryHandlerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/DataInMemoryHandlerImpl.java
new file mode 100644
index 0000000..0ff490c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/DataInMemoryHandlerImpl.java
@@ -0,0 +1,128 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.helper;
+
+import com.megatim.fdxcommons.core.ifaces.helper.DataInMemoryHandler;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.pojo.DataInMemory;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxcommons.model.referentiel.natureproduction.NatureProductionFichier;
+import com.megatim.fdxcommons.model.searchentities.ColumnDefinitionSearch;
+import com.megatim.fdxconsultation.core.ifaces.integration.ColumnDefinitionManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.ReferentielManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.RoutageManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.TypeFichierManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.natureproduction.NatureProductionFichierManager;
+import groovy.transform.Synchronized;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author ASUS
+ */
+@ApplicationScoped
+public class DataInMemoryHandlerImpl implements DataInMemoryHandler {
+
+    private DataInMemory dataInMemory;
+
+    @Inject
+    ColumnDefinitionManager columnDefinitionManager;
+
+    @Inject
+    private TypeFichierManager typeFichierManager;
+
+    @Inject
+    private ReferentielManager referentielManager;
+
+    @Inject
+    private NatureProductionFichierManager natureProdManager;
+
+    @Inject
+    private RoutageManager routageManager;
+
+    @Inject
+    private DataInMemoryHandler dataInMemoryHandler;
+
+    @Override
+    @Synchronized
+    public void initializeDataInMemory() {
+        dataInMemory = new DataInMemory();
+        Referentiel referentielEncours = referentielManager.getReferentielEnCours();
+
+        if (referentielEncours != null) {
+            dataInMemory.setReferentielEnCours(referentielEncours);
+            dataInMemory.setCodeTypeFichierToTypeFichiers(getTypeFichiers());
+            dataInMemory.setTypeFichierToColumnDefinitions(getColumnsDefinitions(referentielEncours.getVersion()));
+            dataInMemory.setTypeFichierToNatureProductionsFichiers(getNatureProductionFichiers(referentielEncours.getVersion()));
+            getParticipantsForRoutages();
+        }
+    }
+
+    @Override
+    public DataInMemory getDataInMemory() {
+        return this.dataInMemory;
+    }
+
+    private void getParticipantsForRoutages() {
+        dataInMemory.getCodeTypeFichierToTypeFichiers().values().stream().forEach(t -> {
+            dataInMemory.getTypeFichierToParticipantsEnvoi()
+                    .put(t.getCode(),
+                            routageManager
+                                    .getParticipantsForSend(dataInMemory.getReferentielEnCours().getVersion(), t.getCode())
+                                    .stream()
+                                    .map(p -> p.getCode())
+                                    .collect(Collectors.toSet())
+                    );
+
+            dataInMemory.getTypeFichierToParticipantsReception()
+                    .put(t.getCode(),
+                            routageManager
+                                    .getParticipantsForReceive(dataInMemory.getReferentielEnCours().getVersion(), t.getCode())
+                                    .stream()
+                                    .map(p -> p.getCode())
+                                    .collect(Collectors.toSet())
+                    );
+
+        });
+
+    }
+    private Map<String, Map<String, ColumnDefinition>> getColumnsDefinitions(String referentielVersion) {
+        Map<String, Map<String, ColumnDefinition>> columnsDefinitionMap = new HashMap<>();
+        ColumnDefinitionSearch searchEntity = new ColumnDefinitionSearch();
+        searchEntity.setReferentielVersion(referentielVersion);
+
+        List<ColumnDefinition> columnsDefinition = columnDefinitionManager.getAll(searchEntity);
+        columnsDefinition.stream().forEach(c -> {
+            if (columnsDefinitionMap.containsKey(c.getCodeTypeFichier())) {
+                Map<String, ColumnDefinition> map = columnsDefinitionMap.get(c.getCodeTypeFichier());
+                map.put(c.getName(), c);
+                columnsDefinitionMap.put(c.getCodeTypeFichier(), map);
+            } else {
+                Map<String, ColumnDefinition> map = new HashMap<>();
+                map.put(c.getName(), c);
+                columnsDefinitionMap.put(c.getCodeTypeFichier(), map);
+            }
+        });
+        return columnsDefinitionMap;
+    }
+
+    private Map<String, TypeFichier> getTypeFichiers() {
+        return typeFichierManager.getAll(null).stream().collect(Collectors.toMap(TypeFichier::getCode, Function.identity()));
+    }
+
+    private Map<String, NatureProductionFichier> getNatureProductionFichiers(String referentielVersion) {
+        return natureProdManager.getByReferentiel(referentielVersion)
+                .stream()
+                .collect(Collectors.toMap(x -> x.getTypeFichier().getCode(), Function.identity()));
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/FdxConsultationTableInsert.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/FdxConsultationTableInsert.java
new file mode 100644
index 0000000..ec97ef5
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/FdxConsultationTableInsert.java
@@ -0,0 +1,83 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.helper;
+
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.enumeration.StatutDataProduction;
+import com.megatim.fdxcommons.tools.database.queries.CustomQueries;
+import com.megatim.fdxcommons.tools.database.queries.DeleteTableDataQuery;
+import com.megatim.fdxcommons.tools.database.queries.UpdateDataProductionQuery;
+import com.megatim.fdxcommons.tools.database.queries.metadata.FdxTableDefinition;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionIdColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.FdxConsultationTable;
+import com.megatim.fdxcommons.tools.database.tables.FdxTableColumnData;
+import com.megatim.fdxcommons.tools.database.tables.FdxTableRow;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.IndexColumnDefinition;
+import com.megatim.fdxconsultation.core.ifaces.helper.TableInsert;
+import com.megatim.fdxconsultation.core.impl.factory.FdxConsultationTableFactory;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import javax.enterprise.context.Dependent;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class FdxConsultationTableInsert implements TableInsert {
+
+    @Override
+    public Long insert(CommonDataProduction dataProduction, List<FdxTableRow> data, Connection connection) throws NamingException, SQLException, Exception {
+        FdxConsultationTable fdxConsTable = FdxConsultationTableFactory.createTable(dataProduction.getCodeTypeFichier(),
+                dataProduction.getReferentielVersion(),
+                connection);
+        FdxTableDefinition tableDefinition = fdxConsTable.tableDefinition(connection);
+        final String tableName = fdxConsTable.getTableName().name(connection);
+
+        if (dataProduction.getId() != null) {
+
+            if (!data.isEmpty()) {
+                Optional<FdxTableColumnData> optIndexData = data.get(0).getDataColumns().stream().filter(p -> p.getName().equals(new IndexColumnDefinition().name())).findFirst();
+
+                //Si fdx_index est trouvé dans les données existantes, alors la nouvelle dataproduction est une modification et donc on doit supprimer les anciennes avant l'insertion
+                if (optIndexData.isPresent() && new CustomQueries().fdxIndexExists((Long) optIndexData.get().getValue(), tableName, connection)) {
+                    List<Long> indexes = data
+                            .stream()
+                            .flatMap(f -> f.getDataColumns().stream().filter(p -> p.getName().equals(new IndexColumnDefinition().name())))
+                            .map(m -> (Long) m.getValue())
+                            .collect(Collectors.toList());
+
+                    //Supprimer les anciennes lignes de même index
+                    new DeleteTableDataQuery(tableName, connection, deleteExistingIndexesCriterion(indexes)).execute();
+                }
+                fdxConsTable.insert(data, dataProduction.getId(), connection);
+            }
+
+            if (dataProduction.getStatutDataProduction().equals(StatutDataProduction.A_CONSOMMER)) {
+                new UpdateDataProductionQuery(dataProduction, connection).execute();
+                
+                if (tableDefinition.isReferentiel()) {
+                    new DeleteTableDataQuery(tableName, connection, whereDataProductionIsNotEqualCriterion(dataProduction.getId())).execute();
+                }
+            }
+        }
+        return dataProduction.getStatutDataProduction().equals(StatutDataProduction.A_CONSOMMER) ? dataProduction.getId() : null;
+    }
+
+    private QueryCriterion deleteExistingIndexesCriterion(List<Long> indexes) {
+        return new QueryCriterion(new IndexColumnDefinition().name(), indexes, Operateur.IN, null, Arrays.asList());
+    }
+
+    private QueryCriterion whereDataProductionIsNotEqualCriterion(Long dataProductionId) {
+        return new QueryCriterion(new DataProductionIdColumnDefinition().name(), dataProductionId, Operateur.NOT_EQUALS, null, Arrays.asList());
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/ReferentielConsumptionHelperImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/ReferentielConsumptionHelperImpl.java
new file mode 100644
index 0000000..11a7d52
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/ReferentielConsumptionHelperImpl.java
@@ -0,0 +1,92 @@
+package com.megatim.fdxconsultation.core.impl.helper;
+
+import com.megatim.fdxcommons.core.ifaces.customtypefichier.DynamicClassCreator;
+import com.megatim.fdxcommons.core.ifaces.db.ReferentielDataSaver;
+import com.megatim.fdxcommons.core.ifaces.helper.DataInMemoryHandler;
+import com.megatim.fdxcommons.core.ifaces.helper.ReferentielConsumptionHelper;
+import com.megatim.fdxcommons.core.ifaces.helper.referentiel.DynamicTableCreator;
+import com.megatim.fdxcommons.core.ifaces.helper.referentiel.TableDefinitionFilter;
+import com.megatim.fdxcommons.model.pojo.ReferentielToImportData;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxconsultation.core.ifaces.helper.TableauBordHandler;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.ReferentielManager;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import javax.annotation.Resource;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.sql.DataSource;
+import javax.transaction.Transactional;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.historique.ReferentielIntegrationHistoriqueManager;
+import com.megatim.fdxcommons.model.referentiel.historique.ReferentielIntegrationHistorique;
+import java.util.List;
+import com.megatim.fdxcommons.model.referentiel.historique.pojo.TableDefinitionFiltered;
+import java.util.ArrayList;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class ReferentielConsumptionHelperImpl implements ReferentielConsumptionHelper {
+
+    @Inject
+    private DynamicClassCreator dynamicClassCreator;
+
+    @Inject
+    TableauBordHandler tableauBordHandler;
+
+    @Inject
+    ReferentielManager referentielManager;
+
+    @Inject
+    private DynamicTableCreator dynamicTableCreator;
+
+    @Inject
+    private ReferentielDataSaver referentielDataSaver;
+
+    @Inject
+    private DataInMemoryHandler dataInMemoryHandler;
+
+    @Resource(lookup = AppCommonContext.JNDI_NAME)
+    private DataSource dataSource;
+
+    @Inject
+    private ReferentielIntegrationHistoriqueManager refIntegrationHistoriqueManager;
+
+    @Inject
+    TableDefinitionFilter tableDefinitionFilter;
+
+    @Override
+    @Transactional
+    public void consume(ReferentielToImportData referentielToImportData) throws Exception {
+        Referentiel previousRef = referentielManager.getReferentielEnCours();
+
+        //On enregistre les données de référentiel 
+        referentielDataSaver.persist(referentielToImportData);
+
+        List<ReferentielIntegrationHistorique> refsHistoriqueIntegration = previousRef == null
+                ? new ArrayList<>()
+                : refIntegrationHistoriqueManager.suitableIntegrationHistorique(previousRef.getVersion());
+
+        TableDefinitionFiltered tableDefinitionFiltered = tableDefinitionFilter
+                .doFilter(previousRef == null ? null : previousRef.getVersion(),
+                        referentielToImportData,
+                        refsHistoriqueIntegration);
+
+        dynamicTableCreator.createDynamicTables(tableDefinitionFiltered.getTablesToCreate());
+        saveRefIntegrationHistorique(tableDefinitionFiltered.getRefIntegrationHistorique());
+
+        //Charger les nouvelles informations du référentiel dans un objet en mémoire
+        dataInMemoryHandler.initializeDataInMemory();
+
+        //Charger les nouvelles informations du référentiel dans un objet en mémoire
+        dataInMemoryHandler.initializeDataInMemory();
+
+    }
+
+    private void saveRefIntegrationHistorique(List<ReferentielIntegrationHistorique> refIntHistoriques) {
+        for (ReferentielIntegrationHistorique r : refIntHistoriques) {
+            refIntegrationHistoriqueManager.save(r);
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/RequestHandlerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/RequestHandlerImpl.java
new file mode 100644
index 0000000..da21935
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/RequestHandlerImpl.java
@@ -0,0 +1,105 @@
+package com.megatim.fdxconsultation.core.impl.helper;
+
+import com.megatim.fdxcommons.core.ifaces.helper.DataInMemoryHandler;
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxcommons.tools.exceptions.CommonRessourceNotFoundException;
+import com.megatim.fdxconsultation.core.ifaces.helper.RequestHandler;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.core.ifaces.stats.TableauBordManager;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxconsultation.model.dto.stats.TableauBordSlimDto;
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.transaction.Transactional;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class RequestHandlerImpl implements RequestHandler {
+
+    @Inject
+    MapStructMapper mapper;
+
+    @Inject
+    private TableauBordManager tableauBordManager;
+
+    @Inject
+    private DataInMemoryHandler dataInMemoryHandler;
+
+    @Override
+    public Long countTableauBord(CriteriaFormRequest criteriaFormRequest) throws Exception {
+        return tableauBordManager.count(addCurrentReferentielToCriteria(criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null));
+    }
+
+    @Override
+    @Transactional
+    public void deleteTableauBord(Long id) {
+        TableauBord tableauBord = tableauBordManager.getById(id);
+
+        if (tableauBord == null) {
+            throw new CommonRessourceNotFoundException("La ressource ayant l'identifiant " + id + " est introuvable");
+        }
+        tableauBordManager.delete(null, tableauBord);
+    }
+
+    @Override
+    public List<TableauBordSlimDto> findTableauBord(CriteriaFormRequest criteriaFormRequest) throws Exception {
+        List<TableauBord> tableauxBords = tableauBordManager.findAll(addCurrentReferentielToCriteria(criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null),
+                Arrays.asList(),
+                Arrays.asList());
+        List<TableauBordSlimDto> dtos = new ArrayList<>();
+
+        tableauxBords.stream().forEach(t -> {
+            dtos.add(mapper.tableauBordToTableauBordSlimDto(t));
+        });
+        return dtos;
+    }
+
+    @Override
+    public List<TableauBordSlimDto> findTableauBordWithPagination(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields, int pageNumber, int pageSize) throws Exception {
+
+
+        List<TableauBord> tableauxBords = tableauBordManager
+                .findWithPagination(
+                        addCurrentReferentielToCriteria(criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null),
+                        fetchEagerFields,
+                        Arrays.asList(new OrderByDefinition("dateCreation", OrderByType.DESC)),
+                        pageNumber,
+                        pageSize);
+        
+        List<TableauBordSlimDto> dtos = new ArrayList<>();
+
+        tableauxBords.stream().forEach(t -> {
+            dtos.add(mapper.tableauBordToTableauBordSlimDto(t));
+        });
+        return dtos;
+    }
+
+    private CriteriaEntityFromView addCurrentReferentielToCriteria(CriteriaEntityFromView criterion) {
+        CriteriaEntityFromView finalCriterion = new CriteriaEntityFromView();
+        finalCriterion.setCriteriaLogicConnector(CriteriaLogicConnector.AND);
+
+        finalCriterion.getSubCriterias().add(currentReferentielCriterion());
+        finalCriterion.getSubCriterias().add(criterion);
+
+        return finalCriterion;
+    }
+
+    private CriteriaEntityFromView currentReferentielCriterion() {
+        Referentiel referentiel = dataInMemoryHandler.getDataInMemory().getReferentielEnCours();
+        return new CriteriaEntityFromView("referentiel.version",
+                referentiel != null ? referentiel.getVersion() : "",
+                Operateur.EQUALS);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/RoutingCheckerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/RoutingCheckerImpl.java
new file mode 100644
index 0000000..208d3d1
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/RoutingCheckerImpl.java
@@ -0,0 +1,29 @@
+package com.megatim.fdxconsultation.core.impl.helper;
+
+import com.megatim.fdxcommons.model.pojo.DataInMemory;
+import com.megatim.fdxcommons.tools.exceptions.ApplicationForbidenException;
+import com.megatim.fdxconsultation.core.ifaces.helper.RoutingChecker;
+import javax.enterprise.context.Dependent;
+
+/**
+ *
+ * @author lenovo
+ */
+@Dependent
+public class RoutingCheckerImpl implements RoutingChecker {
+
+    @Override
+    public void stopIfNotProducer(String codeTypeFichier, DataInMemory dataInMemory, String codeParticipant) {
+        if (!dataInMemory.getTypeFichierToParticipantsEnvoi().get(codeTypeFichier).contains(codeParticipant)) {
+            throw new ApplicationForbidenException("Impossible de continuer la requête car le participant " + codeParticipant + " n'est pas producteur du type de fichier " + codeTypeFichier);
+        }
+    }
+
+    @Override
+    public void stopIfNotConsumer(String codeTypeFichier, DataInMemory dataInMemory, String codeParticipant) {
+        if (!dataInMemory.getTypeFichierToParticipantsReception().get(codeTypeFichier).contains(codeParticipant)) {
+            throw new ApplicationForbidenException("Impossible de continuer la requête car le participant " + codeParticipant + " n'est pas consommateur du type de fichier " + codeTypeFichier);
+        }
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/TableauBordHandlerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/TableauBordHandlerImpl.java
new file mode 100644
index 0000000..3dce036
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/TableauBordHandlerImpl.java
@@ -0,0 +1,276 @@
+package com.megatim.fdxconsultation.core.impl.helper;
+
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationValidationException;
+import com.megatim.fdxconsultation.core.ifaces.integration.ColumnDefinitionManager;
+import com.megatim.fdxconsultation.core.ifaces.helper.TableauBordHandler;
+import com.megatim.fdxconsultation.core.ifaces.stats.CriteriaEntityPersistedManager;
+import com.megatim.fdxconsultation.core.ifaces.stats.TableConfigurationManager;
+import com.megatim.fdxconsultation.core.ifaces.stats.TableauBordColumnManager;
+import com.megatim.fdxconsultation.core.ifaces.stats.TableauBordManager;
+import com.megatim.fdxconsultation.model.dto.stats.TableConfigurationDto;
+import com.megatim.fdxconsultation.model.dto.stats.TableauBordDto;
+import com.megatim.fdxconsultation.model.enums.TypeConfigurationTableauBord;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.model.stats.CriteriaEntityPersisted;
+import com.megatim.fdxconsultation.model.stats.TableConfiguration;
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import com.megatim.fdxconsultation.model.stats.TableauBordColumn;
+import com.megatim.fdxconsultation.model.enums.TypeResultatConfiguration;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class TableauBordHandlerImpl implements TableauBordHandler {
+
+    @Inject
+    private MapStructMapper mapper;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @Inject
+    private ColumnDefinitionManager columnDefinitionManager;
+
+    @Inject
+    private CriteriaEntityPersistedManager criteriaEntityPersistedManager;
+
+    @Inject
+    TableauBordManager tableauBordManager;
+
+    @Inject
+    private TableConfigurationManager tableConfigurationManager;
+
+    @Inject
+    private TableauBordColumnManager tableauBordColumnManager;
+
+    @Override
+    public void reconduireTableauBordValides(Referentiel previousRef, Referentiel newRef, Set<String> typeFichiersToMigrate) {
+        List<TableauBord> prevRefTableauBords = tableauBordManager.findByReferentiel(previousRef.getVersion());
+
+        try {
+            for (TableauBord t : prevRefTableauBords) {
+                if (typeFichiersToMigrate.contains(t.getTypeFichier().getCode())) {
+                    createNewTableauBord(t, newRef);
+                }
+            }
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    @Override
+    public TableauBordDto tableauBordToTableauBordDto(TableauBord tableauBord) {
+        TableauBordDto dto = new TableauBordDto();
+
+        dto.setId(tableauBord.getId());
+        dto.setDescription(tableauBord.getDescription());
+        dto.setTypeFichier(commonMapper.typeFichierToTypeFichierSlimDto(tableauBord.getTypeFichier()));
+        dto.setTypeConfiguration(tableauBord.getTypeConfiguration());
+
+        Set<TableConfigurationDto> tableConfigurationDtos = new HashSet<>();
+        tableauBord.getTableConfigurations().stream().forEach(t -> tableConfigurationDtos.add(tableConfigurationToTableConfigurationDto(t)));
+        dto.setTableConfigurations(tableConfigurationDtos);
+
+        return dto;
+    }
+
+    /**
+     * Méthode permettant de passer de TableauBordDto à TableauBord
+     *
+     * @param dto
+     * @param referentiel
+     * @return
+     */
+    @Override
+    public TableauBord tableauBordDtoToTableauBord(TableauBordDto dto, Referentiel referentiel) {
+        TableauBord tableauBord = new TableauBord();
+
+        tableauBord.setDescription(dto.getDescription());
+        tableauBord.setTypeFichier(commonMapper.typeFichierSlimDtoToTypeFichier(dto.getTypeFichier()));
+        tableauBord.setReferentiel(referentiel);
+
+        Set<TableConfiguration> tableConfigurations = new HashSet<>();
+        dto.getTableConfigurations().stream().forEach(t -> tableConfigurations.add(tableConfigurationDtoToTableConfiguration(t, dto.getTypeFichier().getCode(), referentiel.getVersion())));
+        tableauBord.setTableConfigurations(tableConfigurations);
+
+        return tableauBord;
+    }
+
+    @Override
+    public TableConfigurationDto tableConfigurationToTableConfigurationDto(TableConfiguration tableConf) {
+        TableConfigurationDto dto = new TableConfigurationDto();
+        dto.setCriterion(criteriaEntityPersistedToCriteriaEntityFromView(tableConf.getCriterion()));
+        dto.setColor(tableConf.getColor());
+        dto.setFonctionAggregation(tableConf.getFonctionAggregation());
+        dto.setGroupingColumns(mapper.setTableauBordColumnToSetTableauBordColumnDto(tableConf.getGroupingColumns()));
+        dto.setLibelle(tableConf.getLibelle());
+        dto.setTargetedColumn(mapper.tableauBordColumnToTableauBordColumnDto(tableConf.getTargetedColumn()));
+        dto.setTypeResultatConfiguration(tableConf.getTypeResultatConfiguration());
+        dto.setColor(tableConf.getColor());
+
+        return dto;
+    }
+
+    @Override
+    public void stopIfUserSpecificTableauBordExists(String codeTypeFichier, String referentielVersion, String userName) throws CommonApplicationValidationException, Exception {
+
+        CriteriaEntityFromView criterion = new CriteriaEntityFromView();
+        criterion.setCriteriaLogicConnector(CriteriaLogicConnector.AND);
+        criterion.setSubCriterias(Arrays.asList(
+                new CriteriaEntityFromView("typeFichier.code", codeTypeFichier, Operateur.EQUALS),
+                new CriteriaEntityFromView("user.userName", userName, Operateur.EQUALS),
+                new CriteriaEntityFromView("referentiel.version", referentielVersion, Operateur.EQUALS),
+                new CriteriaEntityFromView("typeConfiguration", TypeConfigurationTableauBord.USER_SPECIFIC, Operateur.EQUALS)));
+
+        List<TableauBord> tb = tableauBordManager.findAll(criterion, Arrays.asList(), Arrays.asList());
+        if (tb.stream().findFirst().isPresent()) {
+            throw new CommonApplicationValidationException("Une configuration existe déjà pour le typefichier " + codeTypeFichier + ", l'utilisateur" + userName + " et le référentiel " + referentielVersion);
+        }
+    }
+
+    @Override
+    public void stopIfGlobaleTableauBordExists(String codeTypeFichier, String referentielVersion) throws Exception {
+
+        CriteriaEntityFromView criterion = new CriteriaEntityFromView();
+        criterion.setCriteriaLogicConnector(CriteriaLogicConnector.AND);
+        criterion.setSubCriterias(Arrays.asList(
+                new CriteriaEntityFromView("typeFichier.code", codeTypeFichier, Operateur.EQUALS),
+                new CriteriaEntityFromView("referentiel.version", referentielVersion, Operateur.EQUALS),
+                new CriteriaEntityFromView("typeConfiguration", TypeConfigurationTableauBord.GLOBAL, Operateur.EQUALS)
+        ));
+
+        if (tableauBordManager.findAll(criterion, Arrays.asList(), Arrays.asList()).stream().findFirst().isPresent()) {
+            throw new CommonApplicationValidationException("Une configuration existe déjà pour ce typefichier et ce référentiel");
+        }
+    }
+
+    private void createNewTableauBord(TableauBord t, Referentiel referentiel) throws Exception {
+
+        try {
+            if (t.getTypeConfiguration().equals(TypeConfigurationTableauBord.USER_SPECIFIC)) {
+                stopIfUserSpecificTableauBordExists(t.getTypeFichier().getCode(), referentiel.getVersion(), t.getUser().getUserName());
+            } else {
+                stopIfGlobaleTableauBordExists(t.getTypeFichier().getCode(), referentiel.getVersion());
+            }
+            TableauBord tableauBord = tableauBord(t, referentiel);
+            tableauBordManager.save(tableauBord);
+        } catch (Exception ex) {
+            Logger.getLogger(TableauBordHandlerImpl.class.getSimpleName()).log(Level.SEVERE, ex.getMessage(), ex);
+        }
+    }
+
+    private TableauBord tableauBord(TableauBord t, Referentiel referentiel) {
+        TableauBord tableauBord = new TableauBord();
+        tableauBord.setReferentiel(referentiel);
+        tableauBord.setTypeFichier(t.getTypeFichier());
+        tableauBord.setDescription(t.getDescription());
+        tableauBord.setUser(t.getUser());
+        tableauBord.setTypeConfiguration(t.getTypeConfiguration());
+
+        for (TableConfiguration tc : t.getTableConfigurations()) {
+            TableConfiguration tableConf = new TableConfiguration();
+            tableConf.setLibelle(tc.getLibelle());
+            tableConf.setFonctionAggregation(tc.getFonctionAggregation());
+            tableConf.setTargetedColumn(newTableauBordColumn(tc.getTargetedColumn()));
+            tableConf.setTypeResultatConfiguration(tc.getTypeResultatConfiguration());
+            tableConf.setFonctionAggregationCriterion(tc.getFonctionAggregationCriterion());
+
+            CriteriaEntityPersisted cr = reconductCriteria(tc.getCriterion());
+            tableConf.setCriterion(cr);
+
+            for (TableauBordColumn tbc : tc.getGroupingColumns()) {
+                tableConf.getGroupingColumns().add(newTableauBordColumn(tbc));
+            }
+            tableauBord.getTableConfigurations().add(tableConf);
+        }
+
+        return tableauBord;
+    }
+
+    private TableauBordColumn newTableauBordColumn(TableauBordColumn column) {
+        if (column == null) {
+            return null;
+        }
+        TableauBordColumn newColumn = new TableauBordColumn();
+        newColumn.setName(column.getName());
+        newColumn.setTypeDonnee(column.getTypeDonnee());
+
+        return newColumn;
+    }
+
+    private TableConfiguration tableConfigurationDtoToTableConfiguration(TableConfigurationDto dto, String codeTypeFichier, String referentielVersion) {
+        TableConfiguration tableConf = new TableConfiguration();
+        tableConf.setFonctionAggregation(dto.getFonctionAggregation());
+        tableConf.setLibelle(dto.getLibelle());
+        tableConf.setColor(dto.getColor());
+        tableConf.setTargetedColumn(mapper.tableauBordColumnDtoToTableauBordColumn(dto.getTargetedColumn()));
+        tableConf.setGroupingColumns(mapper.setTableauBordColumnDtoToSetTableauBordColumn(dto.getGroupingColumns()));
+        tableConf.setTypeResultatConfiguration(dto.getTypeResultatConfiguration() != null ? dto.getTypeResultatConfiguration() : TypeResultatConfiguration.RECAPITULATIF);
+
+        CriteriaEntityPersisted criterionPersisted = criteriaEntityPersistedManager.constructCriteriaPersisted(codeTypeFichier, referentielVersion, dto.getCriterion());
+        tableConf.setCriterion(criterionPersisted);
+
+        return tableConf;
+    }
+
+    private CriteriaEntityPersisted reconductCriteria(CriteriaEntityPersisted criterion) {
+
+        if (criterion != null) {
+
+            if (!criterion.getSubCriterias().isEmpty()) {
+
+                CriteriaEntityPersisted finalCriterion = new CriteriaEntityPersisted();
+                List<CriteriaEntityPersisted> subCriteria = new ArrayList<>(criterion.getSubCriterias());
+                criterion.setSubCriterias(new ArrayList<>());
+                subCriteria.stream().forEach(c -> finalCriterion.getSubCriterias().add(reconductCriteria(c)));
+
+                return finalCriterion;
+
+            } else {
+
+                CriteriaEntityPersisted finalCriterion = new CriteriaEntityPersisted();
+                finalCriterion.setNomColonne(criterion.getNomColonne());
+                finalCriterion.setOperateur(criterion.getOperateur());
+                finalCriterion.setCriteriaLogicConnector(criterion.getCriteriaLogicConnector());
+
+                finalCriterion.setCriteriaDateListValue(criterion.getCriteriaDateListValue());
+                finalCriterion.setCriteriaDateLowerBound(criterion.getCriteriaDateLowerBound());
+                finalCriterion.setCriteriaDateUpperBound(criterion.getCriteriaDateUpperBound());
+                finalCriterion.setCriteriaDateValue(criterion.getCriteriaDateValue());
+
+                finalCriterion.setCriteriaNumericListValue(criterion.getCriteriaNumericListValue());
+                finalCriterion.setCriteriaNumericValue(criterion.getCriteriaNumericValue());
+                finalCriterion.setCriteriaNumericLowerBound(criterion.getCriteriaNumericLowerBound());
+                finalCriterion.setCriteriaNumericUpperBound(criterion.getCriteriaNumericUpperBound());
+
+                finalCriterion.setCriteriaStringListValue(criterion.getCriteriaStringListValue());
+                finalCriterion.setCriteriaStringValue(criterion.getCriteriaStringValue());
+                finalCriterion.setCriteriaStringLowerBound(criterion.getCriteriaStringLowerBound());
+                finalCriterion.setCriteriaStringUpperBound(criterion.getCriteriaStringUpperBound());
+
+                return finalCriterion;
+            }
+
+        } else {
+
+            return null;
+
+        }
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/AppColumnCreatorImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/AppColumnCreatorImpl.java
new file mode 100644
index 0000000..183311e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/AppColumnCreatorImpl.java
@@ -0,0 +1,77 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.integration;
+
+import com.megatim.fdxcommons.tools.database.connection.DBConnection;
+import com.megatim.fdxcommons.tools.database.contrat.AppColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.FdxConsultationTable;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionUpdateIdColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DateCreationColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DateMiseAJourColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.EnCoursProductionColumnDefinition;
+import com.megatim.fdxconsultation.core.ifaces.integration.ColumnDefinitionManager;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.annotation.Resource;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.persistence.Tuple;
+import javax.sql.DataSource;
+import com.megatim.fdxcommons.core.ifaces.integration.AppColumnCreator;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class AppColumnCreatorImpl implements AppColumnCreator {
+
+    @Inject
+    ColumnDefinitionManager columnDefinitionManager;
+
+    @Resource(lookup = AppCommonContext.JNDI_NAME)
+    private DataSource dataSource;
+
+    @Override
+    public void create() {
+        List<Tuple> refVersionAndTypeFichier = columnDefinitionManager.byRefVersionAndByTypeFichier();
+        final String encoursProductionColumnName = new EnCoursProductionColumnDefinition().name();
+
+        try ( Connection connection = new DBConnection(dataSource).connection()) {
+
+            refVersionAndTypeFichier.stream().forEach(r -> {
+                FdxConsultationTable consTable = new FdxConsultationTable((String) r.get(0), (String) r.get(1));
+
+                try {
+                    for (AppColumnDefinition appColumn : columnsToAdd()) {
+                        if (consTable.checkIfTableExists(connection) && !consTable.checkIfColumnExists(connection, appColumn.name())) {
+
+                            consTable.addAppColumn(connection, appColumn);
+                        }
+                    }
+                } catch (SQLException ex) {
+                    Logger.getLogger(AppColumnCreatorImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+                }
+            });
+        } catch (SQLException ex) {
+            Logger.getLogger(AppColumnCreatorImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+        }
+    }
+
+    private List<AppColumnDefinition> columnsToAdd() {
+        return new ArrayList<>(Arrays.asList(
+                new DateCreationColumnDefinition(),
+                new DateMiseAJourColumnDefinition(),
+                new DataProductionUpdateIdColumnDefinition()
+        ));
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/AppColumnDeleterImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/AppColumnDeleterImpl.java
new file mode 100644
index 0000000..4738a8c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/AppColumnDeleterImpl.java
@@ -0,0 +1,74 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.integration;
+
+import com.megatim.fdxcommons.tools.database.connection.DBConnection;
+import com.megatim.fdxcommons.tools.database.contrat.AppColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.FdxConsultationTable;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.EnCoursProductionColumnDefinition;
+import com.megatim.fdxconsultation.core.ifaces.integration.AppColumnDeleter;
+import com.megatim.fdxconsultation.core.ifaces.integration.ColumnDefinitionManager;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.annotation.Resource;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.persistence.Tuple;
+import javax.sql.DataSource;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class AppColumnDeleterImpl implements AppColumnDeleter {
+
+    @Inject
+    ColumnDefinitionManager columnDefinitionManager;
+
+    @Resource(lookup = AppCommonContext.JNDI_NAME)
+    private DataSource dataSource;
+
+    @Override
+    public void delete() {
+        try ( Connection connection = new DBConnection(dataSource).connection()) {
+            List<Tuple> refVersionAndTypeFichier = columnDefinitionManager.byRefVersionAndByTypeFichier();
+
+            refVersionAndTypeFichier.stream().forEach(r -> {
+                FdxConsultationTable consTable = new FdxConsultationTable((String) r.get(0), (String) r.get(1));
+
+                try {
+                    for (AppColumnDefinition appColumn : columnsToDrop()) {
+                        if (consTable.checkIfTableExists(connection)) {
+                            if (consTable.checkIfConstraintExists(connection)) {
+                                consTable.dropPkConstraint(connection);
+                            }
+                            if (consTable.checkIfColumnExists(connection, appColumn.name())) {
+                                consTable.dropAppColumn(connection, appColumn);
+                            }
+                            consTable.addPkConstraint(connection);
+                        }
+                    }
+                } catch (SQLException ex) {
+                    Logger.getLogger(AppColumnCreatorImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+                }
+            });
+        } catch (SQLException ex) {
+            Logger.getLogger(AppColumnCreatorImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+        }
+    }
+
+    private List<AppColumnDefinition> columnsToDrop() {
+        return new ArrayList<>(Arrays.asList(
+                new EnCoursProductionColumnDefinition()
+        ));
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/ColumnDefinitionManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/ColumnDefinitionManagerImpl.java
new file mode 100644
index 0000000..8f6764d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/ColumnDefinitionManagerImpl.java
@@ -0,0 +1,60 @@
+package com.megatim.fdxconsultation.core.impl.integration;
+
+import com.megatim.fdxcommons.dao.ifaces.integration.ColumnDefinitionDAO;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxconsultation.core.ifaces.integration.ColumnDefinitionManager;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.persistence.Tuple;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class ColumnDefinitionManagerImpl implements ColumnDefinitionManager {
+
+    @EJB
+    ColumnDefinitionDAO dao;
+
+    @Override
+    public ColumnDefinition findByNameAndReferentielAndTypeFichier(String columnName, String referentielVersion, String codeTypeFichier) {
+        return getDao().findByNameAndReferentielAndTypeFichier(columnName, referentielVersion, codeTypeFichier);
+    }
+
+    @Override
+    public List<ColumnDefinition> findByReferentiel(String referentielVersion) {
+        return getDao().findByReferentiel(referentielVersion);
+    }
+
+    @Override
+    public List<ColumnDefinition> findByReferentielAndTypeFichier(String referentielVersion, String codeTypeFichier) {
+        return getDao().findByReferentielAndTypeFichier(referentielVersion, codeTypeFichier);
+    }
+
+    @Override
+    public Set<String> findTypeFichierByReferentiel(String referentielVersion) {
+        return getDao().findTypeFichierByReferentiel(referentielVersion);
+    }
+
+    @Override
+    public ColumnDefinitionDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public Map<String, ColumnDefinition> getColumnsDefimitionMap(String codeTypeFichier, String referentielVersion) {
+        List<ColumnDefinition> columnsDef = findByReferentielAndTypeFichier(referentielVersion, codeTypeFichier);
+        return columnsDef.stream().collect(Collectors.toMap(c -> c.getName(), Function.identity()));
+    }
+
+    @Override
+    public List<Tuple> byRefVersionAndByTypeFichier() {
+        return dao.byRefVersionAndByTypeFichier();
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/DynamicTableCreatorImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/DynamicTableCreatorImpl.java
new file mode 100644
index 0000000..03fee1b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/DynamicTableCreatorImpl.java
@@ -0,0 +1,38 @@
+package com.megatim.fdxconsultation.core.impl.integration;
+
+import com.megatim.fdxcommons.core.ifaces.helper.referentiel.DynamicTableCreator;
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import com.megatim.fdxcommons.tools.database.connection.DBConnection;
+import com.megatim.fdxconsultation.core.impl.factory.FdxConsultationTableFactory;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import java.sql.Connection;
+import java.util.List;
+import javax.annotation.Resource;
+import javax.enterprise.context.Dependent;
+import javax.sql.DataSource;
+
+/**
+ *
+ * @author lenovo
+ */
+@Dependent
+public class DynamicTableCreatorImpl implements DynamicTableCreator {
+
+    @Resource(lookup = AppCommonContext.JNDI_NAME)
+    private DataSource dataSource;
+
+    @Override
+    public void createDynamicTables(List<TableDefinition> tableDefinitions) throws Exception {
+
+        try ( Connection connection = new DBConnection(dataSource).connection()) {
+
+            for (TableDefinition tableDefinition : tableDefinitions) {
+                FdxConsultationTableFactory.createTable(tableDefinition.getCodeTypeFichier(),
+                        tableDefinition.getReferentielVersion(),
+                        connection)
+                        .createTable(tableDefinition.getColumnDefinitions(), connection);
+
+            }
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/EchecIntegrationManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/EchecIntegrationManagerImpl.java
new file mode 100644
index 0000000..5f3ecba
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/EchecIntegrationManagerImpl.java
@@ -0,0 +1,26 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.integration;
+
+import com.megatim.fdxconsultation.core.ifaces.integration.EchecIntegrationManager;
+import com.megatim.fdxconsultation.dao.ifaces.integration.EchecIntegrationDAO;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class EchecIntegrationManagerImpl implements EchecIntegrationManager{
+    @EJB
+    private EchecIntegrationDAO dao;
+
+    @Override
+    public EchecIntegrationDAO getDao() {
+        return dao;
+    }
+    
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/TableDefinitionManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/TableDefinitionManagerImpl.java
new file mode 100644
index 0000000..b0c023a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/integration/TableDefinitionManagerImpl.java
@@ -0,0 +1,34 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.integration;
+
+import com.megatim.fdxcommons.dao.ifaces.integration.TableDefinitionDAO;
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import com.megatim.fdxcommons.model.integration.TableDefinitionId;
+import com.megatim.fdxconsultation.core.ifaces.integration.TableDefinitionManager;
+import com.megatim.fdxconsultation.model.administration.User;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class TableDefinitionManagerImpl implements TableDefinitionManager {
+
+    @EJB
+    TableDefinitionDAO dao;
+
+    @Override
+    public TableDefinition getById(TableDefinitionId id, User connectedUser) {
+        return getDao().getById(id);
+    }
+
+    @Override
+    public TableDefinitionDAO getDao() {
+        return dao;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/log/ApiUserActionLogManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/log/ApiUserActionLogManagerImpl.java
new file mode 100644
index 0000000..f13f548
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/log/ApiUserActionLogManagerImpl.java
@@ -0,0 +1,100 @@
+package com.megatim.fdxconsultation.core.impl.log;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.core.ifaces.log.ApiUserActionLogManager;
+import com.megatim.fdxconsultation.dao.ifaces.log.ApiUserActionLogDAO;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.log.UserActionStatData;
+import com.megatim.fdxconsultation.model.dto.log.UserActionStatDto;
+import com.megatim.fdxconsultation.model.log.dtos.ApiUserActionSummarySearch;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.reporting.model.log.ApiUserActionLogReporting;
+import com.megatim.fdxconsultation.tools.CommonsToolsEntity;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import java.io.File;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class ApiUserActionLogManagerImpl implements ApiUserActionLogManager {
+
+    @EJB
+    private ApiUserActionLogDAO dao;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @Inject
+    MapStructMapper mapper;
+
+    @Override
+    public ApiUserActionLogDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "id";
+    }
+
+    @Override
+    public Class<ApiUserActionLogReporting> getClazz() {
+        return ApiUserActionLogReporting.class;
+    }
+
+    @Override
+    public Map<String, Object> getParameters() {
+        return new HashMap<>();
+    }
+
+    @Override
+    public List<ApiUserActionLogReporting> getDatas(CriteriaEntityFromView criterion) throws Exception {
+        return CommonsToolsEntity.convertToApiUserActionLogReporting(findAll(criterion, Arrays.asList(), Arrays.asList()));
+    }
+
+    @Override
+    public File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    @Override
+    public File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    @Override
+    public List<UserActionStatDto> getByStatut(ApiUserActionSummarySearch apiUserActionSummarySearch) {
+        return dao.getByStatut(apiUserActionSummarySearch);
+    }
+
+    @Override
+    public List<UserActionStatData> getByStatutAndUserName(ApiUserActionSummarySearch apiUserActionSummarySearch) {
+        return dao.getByStatutAndUserName(apiUserActionSummarySearch);
+    }
+
+    @Override
+    public List<UserActionStatData> getByStatutAndPath(ApiUserActionSummarySearch apiUserActionSummarySearch) {
+        return dao.getByStatutAndPath(apiUserActionSummarySearch);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/log/UserActionLogManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/log/UserActionLogManagerImpl.java
new file mode 100644
index 0000000..2ce6541
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/log/UserActionLogManagerImpl.java
@@ -0,0 +1,110 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.log;
+
+import com.megatim.fdxcommons.model.log.UserActionLog;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntity;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.tools.context.AppContext;
+import com.megatim.fdxconsultation.core.ifaces.log.UserActionLogManager;
+import com.megatim.fdxconsultation.dao.ifaces.log.UserActionLogDAO;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.log.UserActionLogDto;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.tools.CommonTools;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import java.io.File;
+import java.time.LocalDateTime;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class UserActionLogManagerImpl implements UserActionLogManager {
+
+    @EJB
+    private UserActionLogDAO dao;
+    
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @Inject
+    MapStructMapper mapper;
+
+    @Override
+    public UserActionLogDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "id";
+    }
+
+    @Override
+    public Class<UserActionLogDto> getClazz() {
+        return UserActionLogDto.class;
+    }
+
+    @Override
+    public Map<String, Object> getParameters() {
+        return new HashMap<>();
+    }
+
+    @Override
+    public List<UserActionLogDto> getDatas(CriteriaEntityFromView criterion) throws Exception {
+        return mapper.userActionLogListToUserActionLogDtoList(findAll(criterion, Arrays.asList(), Arrays.asList()));
+    }
+
+    @Override
+    public File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+    
+    @Override
+    public File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    @Override
+    public void log(HttpHeaders headers, @Context HttpServletRequest request, String message, String utilisateur) {
+        Map<String, String> map = CommonTools.recupererInfosRequete(headers, request);
+        UserActionLog log = new UserActionLog();
+        log.setDateAction(LocalDateTime.now());
+        log.setMessage(message);
+        log.setUserAgent(map.get(AppCommonContext.REQUETE_HTTP_CLIENT));
+        log.setIpAddress(map.get(AppCommonContext.REQUETE_HTTP_ADRESSE_IP));
+        log.setHttpMethod(map.get(AppCommonContext.REQUETE_HTTP_METHODE));
+        log.setRelativePath(map.get(AppCommonContext.REQUETE_HTTP_PATH));
+        log.setUserName(utilisateur);
+        log.setStatus(200);
+        log.setMotif(log.getStatus() != null ? log.getStatus().toString()+" ("+AppContext.registre_codes_http.get(log.getStatus().toString())+")" : null);
+        save(log);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/message/systeme/MessageSystemeManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/message/systeme/MessageSystemeManagerImpl.java
new file mode 100644
index 0000000..2e4ee91
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/message/systeme/MessageSystemeManagerImpl.java
@@ -0,0 +1,136 @@
+package com.megatim.fdxconsultation.core.impl.message.systeme;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.bekosoftware.genericdaolayer.dao.tools.RestrictionsContainer;
+import com.bekosoftware.genericmanagerlayer.core.impl.AbstractGenericManager;
+import com.megatim.fdxconsultation.core.ifaces.message.systeme.MessageSystemeManager;
+import com.megatim.fdxconsultation.dao.ifaces.message.systeme.MessageSystemeDAO;
+import com.megatim.fdxconsultation.model.message.systeme.*;
+import com.megatim.fdxcommons.model.enumeration.*;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.MessageSystemeDto;
+import java.util.ArrayList;
+import java.util.List;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.transaction.Transactional;
+
+@Transactional
+@Dependent
+public class MessageSystemeManagerImpl extends AbstractGenericManager<MessageSysteme, Long> implements MessageSystemeManager {
+
+    @Inject
+    protected MessageSystemeDAO dao;
+    
+    @Inject
+    private MapStructMapper mapper;
+
+    public MessageSystemeManagerImpl() {
+    }
+
+    @Override
+    public GenericDAO<MessageSysteme, Long> getDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "id";
+    }
+    
+    @Override
+    public void ajouter(TypeMessageSysteme typeMessageSysteme, TypeIdMessageSysteme typeIdMessageSysteme, String contenu, User utilisateur) {
+        if(UserSesionApplication.siUtilisateurConnecte(utilisateur)){
+            dao.ajouter(typeMessageSysteme, typeIdMessageSysteme, contenu, utilisateur);
+        }
+    }
+
+    @Override
+    public List<MessageSysteme> recupererTousLesMessages(User user) {
+        
+        //Variables
+        List<MessageSysteme> messages = dao.findByProperty("utilisateur", user);
+        
+        //Si null
+        if(messages == null){
+            
+            //On crée une instance
+            messages = new ArrayList<MessageSysteme>();
+            
+        }
+        
+        return messages;
+    }
+    
+    @Override
+    public MessageSystemeDto recupererUnMessageSystemeDto(User user) {
+        
+        //Variables
+        List<MessageSysteme> messages = recupererTousLesMessages(user);
+        MessageSystemeDto messageSystemeDto = null;
+        MessageSysteme message = null;
+        
+        //Si null
+        if(messages != null && !messages.isEmpty()){
+            
+            //On recupère le message
+            message = messages.get(0);
+            
+            //On recupère un message
+            messageSystemeDto = mapper.messageSystemeToMessageSystemeDto(message);
+            
+            //On supprime le message
+            delete(message.getId());
+        }
+        
+        return messageSystemeDto;
+    }
+
+    @Override
+    public void supprimerTousLesMessageSystemeUtilisateur(User utilisateur) {
+        
+        //Variables
+        List<MessageSysteme> messages = recupererTousLesMessages(utilisateur);
+        
+        //Si non null
+        if(messages != null){
+            
+            //On parcourt les messages
+            for(MessageSysteme message : messages){
+                
+                //On supprime le message
+                delete(message.getId());
+            
+            }
+            
+        }
+        
+    }
+
+    @Override
+    public boolean siMessageTypeActionSystemeExiste(TypeActionSysteme typeActionSysteme, User utilisateur) {
+        
+        //Variables
+        RestrictionsContainer requeteur = RestrictionsContainer.newInstance();
+        List<MessageSysteme> messages = null;
+        boolean bool = false;
+        
+        //On ajoute les critères de recherche
+        requeteur.addEq("typeActionSysteme", typeActionSysteme);
+        requeteur.addEq("utilisateur", utilisateur);
+        
+        //On execute la requete
+        messages = filter(requeteur.getPredicats(), null, null, 0, 1);
+        
+        //Si non vide
+        if(messages != null && !messages.isEmpty()){
+            bool = true;
+        }else{
+            bool = false;
+        }
+        
+        return bool;
+    }
+    
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ApplicationSourceManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ApplicationSourceManagerImpl.java
new file mode 100644
index 0000000..e08a54a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ApplicationSourceManagerImpl.java
@@ -0,0 +1,39 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.ApplicationSource;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.ApplicationSourceManager;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.ApplicationSourceDAO;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.persistence.EntityManager;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class ApplicationSourceManagerImpl implements ApplicationSourceManager {
+
+    @EJB
+    private ApplicationSourceDAO dao;
+
+    @Override
+    public ApplicationSourceDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public Class<ApplicationSource> getManagedEntityClass() {
+        return ApplicationSource.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return getDao().getEntityManager();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ExtensionFichierManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ExtensionFichierManagerImpl.java
new file mode 100644
index 0000000..0a31e5f
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ExtensionFichierManagerImpl.java
@@ -0,0 +1,136 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.referentiel;
+
+import com.megatim.fdxconsultation.core.ifaces.referentiel.ExtensionFichierManager;
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntity;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.referentiel.ExtensionFichier;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.ExtensionFichierDAO;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.reporting.model.referentiel.ExtensionFichierReporting;
+import com.megatim.fdxconsultation.tools.CommonTools;
+import com.megatim.fdxconsultation.tools.CommonsToolsEntity;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import java.io.File;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class ExtensionFichierManagerImpl implements ExtensionFichierManager {
+
+    @EJB
+    private ExtensionFichierDAO dao;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @Override
+    public ExtensionFichierDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "extension";
+    }
+
+    @Override
+    public Class<ExtensionFichierReporting> getClazz() {
+        return ExtensionFichierReporting.class;
+    }
+
+    @Override
+    public List<ExtensionFichierReporting> getDatas(CriteriaEntityFromView criterion) throws Exception {
+        return CommonsToolsEntity.convertToExtensionFichierReporting(findAll(criterion, Arrays.asList(), Arrays.asList()));
+    }
+
+    @Override
+    public Map<String, Object> getParameters() {
+        return new HashMap<>();
+    }
+
+    @Override
+    public List<ExtensionFichier> findAll(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields) {
+        try {
+            List<String> fieldsNotFound = CommonTools.checkIfEntityField(ExtensionFichier.class, fetchEagerFields);
+            if (!fieldsNotFound.isEmpty()) {
+                throw new Exception("Les champs suivants n'appartiennent pas à l'entité ExtensionFichier : "
+                        + fieldsNotFound.stream().collect(Collectors.joining(",", "{", "}")));
+            }
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+
+            return getDao().findAll(criterion, fetchEagerFields, Arrays.asList(new OrderByDefinition("dateCreation", OrderByType.DESC)));
+
+        } catch (Exception ex) {
+            Logger.getLogger(ExtensionFichierManagerImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public List<ExtensionFichier> findWithPagination(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields, int pageNumber, int pageSize) {
+        try {
+            List<String> fieldsNotFound = CommonTools.checkIfEntityField(ExtensionFichier.class, fetchEagerFields);
+            if (!fieldsNotFound.isEmpty()) {
+                throw new Exception("Les champs suivants n'appartiennent pas à l'entité ExtensionFichier : " + fieldsNotFound.stream().collect(Collectors.joining(",", "{", "}")));
+            }
+
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return findWithPagination(criterion, fetchEagerFields, Arrays.asList(new OrderByDefinition("dateCreation", OrderByType.DESC)), pageNumber, pageSize);
+        } catch (Exception ex) {
+            Logger.getLogger(ExtensionFichierManagerImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Class<ExtensionFichier> getManagedEntityClass() {
+        return ExtensionFichier.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return getDao().getEntityManager();
+    }
+
+    @Override
+    public File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    @Override
+    public File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/GroupeNoeudManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/GroupeNoeudManagerImpl.java
new file mode 100644
index 0000000..9173bff
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/GroupeNoeudManagerImpl.java
@@ -0,0 +1,132 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.referentiel;
+
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntity;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.referentiel.GroupeNoeud;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.GroupeNoeudManager;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.GroupeNoeudDAO;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.reporting.model.referentiel.GroupeNoeudReporting;
+import com.megatim.fdxconsultation.tools.CommonTools;
+import com.megatim.fdxconsultation.tools.CommonsToolsEntity;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import java.io.File;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.persistence.EntityManager;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class GroupeNoeudManagerImpl implements GroupeNoeudManager {
+
+    @EJB
+    private GroupeNoeudDAO dao;
+
+    @Override
+    public GroupeNoeudDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "code";
+    }
+
+    @Override
+    public List<GroupeNoeudReporting> getDatas(CriteriaEntityFromView criterion) throws Exception {
+        return CommonsToolsEntity.convertToGroupeNoeudReporting(findAll(criterion, Arrays.asList(), Arrays.asList()));
+    }
+
+    @Override
+    public Map<String, Object> getParameters() {
+        return new HashMap<>();
+    }
+
+    @Override
+    public Class<GroupeNoeudReporting> getClazz() {
+        return GroupeNoeudReporting.class;
+    }
+
+    @Override
+    public List<GroupeNoeud> findAll(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields) {
+        try {
+            List<String> fieldsNotFound = CommonTools.checkIfEntityField(GroupeNoeud.class, fetchEagerFields);
+            if (!fieldsNotFound.isEmpty()) {
+                throw new Exception("Les champs suivants n'appartiennent pas à l'entité GroupeNoeud : "
+                        + fieldsNotFound.stream().collect(Collectors.joining(",", "{", "}")));
+            }
+
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return getDao().findAll(criterion, fetchEagerFields, Arrays.asList(new OrderByDefinition("dateCreation", OrderByType.DESC)));
+
+        } catch (Exception ex) {
+            Logger.getLogger(GroupeNoeudManagerImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public List<GroupeNoeud> findWithPagination(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields, int pageNumber, int pageSize) {
+        try {
+            List<String> fieldsNotFound = CommonTools.checkIfEntityField(GroupeNoeud.class, fetchEagerFields);
+            if (!fieldsNotFound.isEmpty()) {
+                throw new Exception("Les champs suivants n'appartiennent pas à l'entité GroupeNoeud : " + fieldsNotFound.stream().collect(Collectors.joining(",", "{", "}")));
+            }
+
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return getDao().findWithPagination(criterion, fetchEagerFields, Arrays.asList(new OrderByDefinition("dateCreation", OrderByType.DESC)), pageNumber, pageSize);
+        } catch (Exception ex) {
+            Logger.getLogger(GroupeNoeudManagerImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Class<GroupeNoeud> getManagedEntityClass() {
+        return GroupeNoeud.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return getDao().getEntityManager();
+    }
+
+    @Override
+    public File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    @Override
+    public File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/GroupeParticipantManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/GroupeParticipantManagerImpl.java
new file mode 100644
index 0000000..c8f54e3
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/GroupeParticipantManagerImpl.java
@@ -0,0 +1,138 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.referentiel;
+
+import com.megatim.fdxconsultation.core.ifaces.referentiel.GroupeParticipantManager;
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntity;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.referentiel.GroupeParticipant;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.GroupeParticipantDAO;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.reporting.model.referentiel.GroupeParticipantReporting;
+import com.megatim.fdxconsultation.tools.CommonTools;
+import com.megatim.fdxconsultation.tools.CommonsToolsEntity;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import java.io.File;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+import javax.transaction.Transactional;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+@Transactional
+public class GroupeParticipantManagerImpl implements GroupeParticipantManager {
+
+    @EJB
+    private GroupeParticipantDAO dao;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @Override
+    public GroupeParticipantDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "code";
+    }
+
+    @Override
+    public List<GroupeParticipantReporting> getDatas(CriteriaEntityFromView criterion) throws Exception {
+        return CommonsToolsEntity.convertToGroupeParticipantReporting(findAll(criterion, Arrays.asList(), Arrays.asList()));
+    }
+
+    @Override
+    public Map<String, Object> getParameters() {
+        return new HashMap<>();
+    }
+
+    @Override
+    public Class<GroupeParticipantReporting> getClazz() {
+        return GroupeParticipantReporting.class;
+    }
+
+    @Override
+    public List<GroupeParticipant> findAll(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields) {
+        try {
+            List<String> fieldsNotFound = CommonTools.checkIfEntityField(GroupeParticipant.class, fetchEagerFields);
+            if (!fieldsNotFound.isEmpty()) {
+                throw new Exception("Les champs suivants n'appartiennent pas à l'entité GroupeParticipant : "
+                        + fieldsNotFound.stream().collect(Collectors.joining(",", "{", "}")));
+            }
+
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return getDao().findAll(criterion, fetchEagerFields, Arrays.asList(new OrderByDefinition("dateCreation", OrderByType.DESC)));
+
+        } catch (Exception ex) {
+            Logger.getLogger(GroupeParticipantManagerImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public List<GroupeParticipant> findWithPagination(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields, int pageNumber, int pageSize) {
+        try {
+            List<String> fieldsNotFound = CommonTools.checkIfEntityField(GroupeParticipant.class, fetchEagerFields);
+            if (!fieldsNotFound.isEmpty()) {
+                throw new Exception("Les champs suivants n'appartiennent pas à l'entité GroupeParticipant : " + fieldsNotFound.stream().collect(Collectors.joining(",", "{", "}")));
+            }
+
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return getDao().findWithPagination(criterion, fetchEagerFields, Arrays.asList(new OrderByDefinition("dateCreation", OrderByType.DESC)), pageNumber, pageSize);
+        } catch (Exception ex) {
+            Logger.getLogger(GroupeParticipantManagerImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Class<GroupeParticipant> getManagedEntityClass() {
+        return GroupeParticipant.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return getDao().getEntityManager();
+    }
+
+    @Override
+    public File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    @Override
+    public File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/NoeudManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/NoeudManagerImpl.java
new file mode 100644
index 0000000..c42b48c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/NoeudManagerImpl.java
@@ -0,0 +1,132 @@
+package com.megatim.fdxconsultation.core.impl.referentiel;
+
+import com.megatim.fdxconsultation.core.ifaces.referentiel.NoeudManager;
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntity;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.referentiel.Noeud;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.NoeudDAO;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.reporting.model.referentiel.NoeudReporting;
+import com.megatim.fdxconsultation.tools.CommonTools;
+import com.megatim.fdxconsultation.tools.CommonsToolsEntity;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import java.io.File;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class NoeudManagerImpl implements NoeudManager {
+
+    @EJB
+    private NoeudDAO dao;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @Override
+    public NoeudDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "code";
+    }
+
+    @Override
+    public List<NoeudReporting> getDatas(CriteriaEntityFromView criterion) throws Exception {
+        return CommonsToolsEntity.convertToNoeudReporting(findAll(criterion, Arrays.asList(), Arrays.asList()));
+    }
+
+    @Override
+    public Map<String, Object> getParameters() {
+        return new HashMap<>();
+    }
+
+    @Override
+    public Class<NoeudReporting> getClazz() {
+        return NoeudReporting.class;
+    }
+
+    @Override
+    public List<Noeud> findAll(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields) {
+        try {
+            List<String> fieldsNotFound = CommonTools.checkIfEntityField(Noeud.class, fetchEagerFields);
+            if (!fieldsNotFound.isEmpty()) {
+                throw new Exception("Les champs suivants n'appartiennent pas à l'entité Noeud : "
+                        + fieldsNotFound.stream().collect(Collectors.joining(",", "{", "}")));
+            }
+
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return getDao().findAll(criterion, fetchEagerFields, Arrays.asList(new OrderByDefinition("dateCreation", OrderByType.DESC)));
+
+        } catch (Exception ex) {
+            Logger.getLogger(NoeudManagerImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public List<Noeud> findWithPagination(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields, int pageNumber, int pageSize) {
+        try {
+            List<String> fieldsNotFound = CommonTools.checkIfEntityField(Noeud.class, fetchEagerFields);
+            if (!fieldsNotFound.isEmpty()) {
+                throw new Exception("Les champs suivants n'appartiennent pas à l'entité Noeud : " + fieldsNotFound.stream().collect(Collectors.joining(",", "{", "}")));
+            }
+            
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return getDao().findWithPagination(criterion, fetchEagerFields, Arrays.asList(new OrderByDefinition("dateCreation", OrderByType.DESC)), pageNumber, pageSize);
+
+        } catch (Exception ex) {
+            Logger.getLogger(NoeudManagerImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Class<Noeud> getManagedEntityClass() {
+        return Noeud.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return getDao().getEntityManager();
+    }
+
+    @Override
+    public File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    @Override
+    public File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ParticipantManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ParticipantManagerImpl.java
new file mode 100644
index 0000000..cce1ab1
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ParticipantManagerImpl.java
@@ -0,0 +1,143 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.referentiel;
+
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntity;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.ParticipantManager;
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.ParticipantDAO;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithSearchEnityDAO;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.searchentities.ParticipantSearch;
+import com.megatim.fdxconsultation.reporting.model.referentiel.ParticipantReporting;
+import com.megatim.fdxconsultation.tools.CommonTools;
+import com.megatim.fdxconsultation.tools.CommonsToolsEntity;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import java.io.File;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class ParticipantManagerImpl implements ParticipantManager {
+
+    @EJB
+    private ParticipantDAO dao;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @Override
+    public ParticipantDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "code";
+    }
+
+    @Override
+    public List<ParticipantReporting> getDatas(CriteriaEntityFromView criterion) throws Exception {
+        return CommonsToolsEntity.convertToParticipantReporting(findAll(criterion, Arrays.asList(), Arrays.asList()));
+    }
+
+    @Override
+    public Map<String, Object> getParameters() {
+        return new HashMap<>();
+    }
+
+    @Override
+    public Class<ParticipantReporting> getClazz() {
+        return ParticipantReporting.class;
+    }
+
+    @Override
+    public List<Participant> findAll(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields) {
+        try {
+            List<String> fieldsNotFound = CommonTools.checkIfEntityField(Participant.class, fetchEagerFields);
+            if (!fieldsNotFound.isEmpty()) {
+                throw new Exception("Les champs suivants n'appartiennent pas à l'entité Participant : "
+                        + fieldsNotFound.stream().collect(Collectors.joining(",", "{", "}")));
+            }
+            
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return getDao().findAll(criterion, fetchEagerFields, Arrays.asList(new OrderByDefinition("dateCreation", OrderByType.DESC)));
+
+        } catch (Exception ex) {
+            Logger.getLogger(ParticipantManagerImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public List<Participant> findWithPagination(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields, int pageNumber, int pageSize) {
+        try {
+            List<String> fieldsNotFound = CommonTools.checkIfEntityField(Participant.class, fetchEagerFields);
+            if (!fieldsNotFound.isEmpty()) {
+                throw new Exception("Les champs suivants n'appartiennent pas à l'entité Participant : "
+                        + fieldsNotFound.stream().collect(Collectors.joining(",", "{", "}")));
+            }
+            
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return getDao().findWithPagination(criterion, fetchEagerFields, Arrays.asList(new OrderByDefinition("dateCreation", OrderByType.DESC)), pageNumber, pageSize);
+        } catch (Exception ex) {
+            Logger.getLogger(ParticipantManagerImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Class<Participant> getManagedEntityClass() {
+        return Participant.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return getDao().getEntityManager();
+    }
+
+    @Override
+    public File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    @Override
+    public File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+    
+    @Override
+    public PaginationWithSearchEnityDAO<Participant, String, ParticipantSearch> getPaginationDao() {
+        return dao;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/PaysManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/PaysManagerImpl.java
new file mode 100644
index 0000000..c4afe46
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/PaysManagerImpl.java
@@ -0,0 +1,127 @@
+package com.megatim.fdxconsultation.core.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.Pays;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.PaysManager;
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntity;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.PaysDAO;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.reporting.model.referentiel.PaysReporting;
+import com.megatim.fdxconsultation.tools.CommonTools;
+import com.megatim.fdxconsultation.tools.CommonsToolsEntity;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import java.io.File;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.persistence.EntityManager;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class PaysManagerImpl implements PaysManager {
+
+    @EJB
+    private PaysDAO dao;
+
+    @Override
+    public PaysDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "code";
+    }
+
+    @Override
+    public Class<PaysReporting> getClazz() {
+        return PaysReporting.class;
+    }
+
+    @Override
+    public List<PaysReporting> getDatas(CriteriaEntityFromView criterion) throws Exception {
+        return CommonsToolsEntity.convertToPaysReporting(findAll(criterion, Arrays.asList("participants"), Arrays.asList()));
+    }
+
+    @Override
+    public Map<String, Object> getParameters() {
+        return new HashMap<>();
+    }
+
+    @Override
+    public List<Pays> findAll(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields) {
+        try {
+            List<String> fieldsNotFound = CommonTools.checkIfEntityField(Pays.class, fetchEagerFields);
+            if (!fieldsNotFound.isEmpty()) {
+                throw new Exception("Les champs suivants n'appartiennent pas à l'entité Pays : " + fieldsNotFound.stream().collect(Collectors.joining(",", "{", "}")));
+            }
+
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return getDao().findAll(criterion, fetchEagerFields, Arrays.asList(new OrderByDefinition("dateCreation", OrderByType.DESC)));
+        } catch (Exception ex) {
+            Logger.getLogger(PaysManagerImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public List<Pays> findWithPagination(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields, int pageNumber, int pageSize) {
+        try {
+            List<String> fieldsNotFound = CommonTools.checkIfEntityField(Pays.class, fetchEagerFields);
+            if (!fieldsNotFound.isEmpty()) {
+                throw new Exception("Les champs suivants n'appartiennent pas à l'entité Pays : " + fieldsNotFound.stream().collect(Collectors.joining(",", "{", "}")));
+            }
+
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return getDao().findWithPagination(criterion, fetchEagerFields, Arrays.asList(new OrderByDefinition("dateCreation", OrderByType.DESC)), pageNumber, pageSize);
+        } catch (Exception ex) {
+            Logger.getLogger(PaysManagerImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Class<Pays> getManagedEntityClass() {
+        return Pays.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return getDao().getEntityManager();
+    }
+
+    @Override
+    public File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    @Override
+    public File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ReferentielManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ReferentielManagerImpl.java
new file mode 100644
index 0000000..767da07
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ReferentielManagerImpl.java
@@ -0,0 +1,162 @@
+package com.megatim.fdxconsultation.core.impl.referentiel;
+
+import com.megatim.fdxconsultation.core.ifaces.referentiel.ReferentielManager;
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.enumeration.StatutReferentiel;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntity;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.ReferentielDAO;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithSearchEnityDAO;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.searchentities.ReferentielSearch;
+import com.megatim.fdxconsultation.reporting.model.referentiel.ReferentielReporting;
+import com.megatim.fdxconsultation.tools.CommonTools;
+import com.megatim.fdxconsultation.tools.CommonsToolsEntity;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import java.io.File;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.persistence.EntityManager;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.SecurityContext;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class ReferentielManagerImpl implements ReferentielManager {
+
+    @EJB
+    private ReferentielDAO dao;
+
+    @Context
+    private SecurityContext securityContext;
+
+    @Override
+    public ReferentielDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "version";
+    }
+
+    @Override
+    public PaginationWithSearchEnityDAO<Referentiel, String, ReferentielSearch> getPaginationDao() {
+        return dao;
+    }
+
+    @Override
+    public List<ReferentielReporting> getDatas(CriteriaEntityFromView criterion) throws Exception {
+        return CommonsToolsEntity.convertToReferentielReporting(findAll(criterion, Arrays.asList(), Arrays.asList()));
+    }
+
+    @Override
+    public Map<String, Object> getParameters() {
+        return new HashMap<>();
+    }
+
+    @Override
+    public Class<ReferentielReporting> getClazz() {
+        return ReferentielReporting.class;
+    }
+
+    @Override
+    public List<Referentiel> findByStatutReferentiel(StatutReferentiel statutReferentiel) {
+        return getDao().findByStatutReferentiel(statutReferentiel);
+    }
+
+    @Override
+    public Referentiel getReferentielEnCours() {
+        return getDao().getReferentielEnCours();
+    }
+
+    @Override
+    public List<Referentiel> findAll(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields) {
+        try {
+            List<String> fieldsNotFound = CommonTools.checkIfEntityField(Referentiel.class, fetchEagerFields);
+            if (!fieldsNotFound.isEmpty()) {
+                throw new Exception("Les champs suivants n'appartiennent pas à l'entité Referentiel : "
+                        + fieldsNotFound.stream().collect(Collectors.joining(",", "{", "}")));
+            }
+
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return getDao().findAll(criterion, fetchEagerFields, Arrays.asList(new OrderByDefinition("dateGeneration", OrderByType.DESC)));
+
+        } catch (Exception ex) {
+            Logger.getLogger(ReferentielManagerImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public List<Referentiel> findWithPagination(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields, int pageNumber, int pageSize) {
+
+        System.out.println("The context is null " + securityContext);
+        if (securityContext != null) {
+            System.out.println("The principal name is " + securityContext.getUserPrincipal().getName());
+        }
+
+        try {
+            List<String> fieldsNotFound = CommonTools.checkIfEntityField(Referentiel.class, fetchEagerFields);
+            if (!fieldsNotFound.isEmpty()) {
+                throw new Exception("Les champs suivants n'appartiennent pas à l'entité Referentiel : " + fieldsNotFound.stream().collect(Collectors.joining(",", "{", "}")));
+            }
+
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return getDao().findWithPagination(criterion, fetchEagerFields, Arrays.asList(new OrderByDefinition("dateGeneration", OrderByType.DESC)), pageNumber, pageSize);
+        } catch (Exception ex) {
+            Logger.getLogger(ReferentielManagerImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Class<Referentiel> getManagedEntityClass() {
+        return Referentiel.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return getDao().getEntityManager();
+    }
+
+    @Override
+    public void archiverReferentielEncours() {
+        dao.archiverReferentielEncours();
+    }
+
+    @Override
+    public File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    @Override
+    public File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/RoutageManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/RoutageManagerImpl.java
new file mode 100644
index 0000000..5b3ce11
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/RoutageManagerImpl.java
@@ -0,0 +1,173 @@
+package com.megatim.fdxconsultation.core.impl.referentiel;
+
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.RoutageManager;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.referentiel.Routage;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.RoutageDAO;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.reporting.model.referentiel.RoutageReporting;
+import com.megatim.fdxconsultation.tools.CommonTools;
+import com.megatim.fdxconsultation.tools.CommonsToolsEntity;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import java.io.File;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class RoutageManagerImpl implements RoutageManager {
+
+    @EJB
+    private RoutageDAO dao;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @Override
+    public RoutageDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "typeFichier";
+    }
+    
+    @Override
+    public List<RoutageReporting> getDatas(CriteriaEntityFromView criterion) throws Exception {
+        return CommonsToolsEntity.convertToRoutageReporting(findAll(criterion, Arrays.asList(), Arrays.asList()));
+    }
+
+    @Override
+    public Map<String, Object> getParameters() {
+        return new HashMap<>();
+    }
+
+    @Override
+    public Class<RoutageReporting> getClazz() {
+        return RoutageReporting.class;
+    }
+
+    @Override
+    public List<Routage> findAll(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields) {
+        try {
+            List<String> fieldsNotFound = CommonTools.checkIfEntityField(Routage.class, fetchEagerFields);
+            if (!fieldsNotFound.isEmpty()) {
+                throw new Exception("Les champs suivants n'appartiennent pas à l'entité Routage : "
+                        + fieldsNotFound.stream().collect(Collectors.joining(",", "{", "}")));
+            }
+            
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return getDao().findAll(criterion, fetchEagerFields, Arrays.asList(new OrderByDefinition("dateCreation", OrderByType.DESC)));
+
+        } catch (Exception ex) {
+            Logger.getLogger(RoutageManagerImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public List<Routage> findWithPagination(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields, int pageNumber, int pageSize) {
+        try {
+            List<String> fieldsNotFound = CommonTools.checkIfEntityField(Routage.class, fetchEagerFields);
+            if (!fieldsNotFound.isEmpty()) {
+                throw new Exception("Les champs suivants n'appartiennent pas à l'entité Routage : " + fieldsNotFound.stream().collect(Collectors.joining(",", "{", "}")));
+            }
+
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return getDao().findWithPagination(criterion, fetchEagerFields, Arrays.asList(new OrderByDefinition("dateCreation", OrderByType.DESC)), pageNumber, pageSize);
+            
+        } catch (Exception ex) {
+            Logger.getLogger(RoutageManagerImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Class<Routage> getManagedEntityClass() {
+        return Routage.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return getDao().getEntityManager();
+    }
+    
+    @Override
+    public File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    @Override
+    public File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+    
+    @Override
+    public CriteriaFormRequest getExportCustumOneCriterion(String codeTypeFichier, String versionReferentiel) {
+        
+        /* Variables */
+        CriteriaFormRequest formRequest = new CriteriaFormRequest();
+        CriteriaEntityFromView finalCriterion = new CriteriaEntityFromView();
+        
+        /* On ajoute les critères */
+        finalCriterion.setCriteriaLogicConnector(CriteriaLogicConnector.AND);  
+        finalCriterion.getSubCriterias().add(newCriteriaEntityFromView("typeFichier.code", codeTypeFichier, Operateur.EQUALS));
+        finalCriterion.getSubCriterias().add(newCriteriaEntityFromView("referentiel.version", versionReferentiel, Operateur.EQUALS));
+        
+        /* On set le le critère de recherche */
+        formRequest.setCriteria(finalCriterion);
+        
+        /* On retour le critère */
+        return formRequest;
+        
+    }
+    
+     @Override
+    public List<Participant> getParticipantsForSend(String versionReferentiel, String codeTypeFichier) {
+        return getDao().getParticipantsForSend(versionReferentiel, codeTypeFichier);
+    }
+    
+    @Override
+    public List<Participant> getParticipantsForReceive(String versionReferentiel, String codeTypeFichier) {
+        return getDao().getParticipantForReceive(versionReferentiel, codeTypeFichier);
+    }
+
+    private CriteriaEntityFromView newCriteriaEntityFromView(String nomColonne, Object criteriaValue, Operateur operateur) {
+        CriteriaEntityFromView criterion = new CriteriaEntityFromView();
+        criterion.setNomColonne(nomColonne);
+        criterion.setCriteriaValue(criteriaValue);
+        criterion.setOperateur(operateur);
+
+        return criterion;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/StructureLigneManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/StructureLigneManagerImpl.java
new file mode 100644
index 0000000..4c4b741
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/StructureLigneManagerImpl.java
@@ -0,0 +1,39 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.StructureLigne;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.StructureLigneManager;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.StructureLigneDAO;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.persistence.EntityManager;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class StructureLigneManagerImpl implements StructureLigneManager {
+
+   @EJB
+    private StructureLigneDAO dao;
+
+   @Override
+    public StructureLigneDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public Class<StructureLigne> getManagedEntityClass() {
+        return StructureLigne.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return getDao().getEntityManager();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/TypeFichierManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/TypeFichierManagerImpl.java
new file mode 100644
index 0000000..62a1019
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/TypeFichierManagerImpl.java
@@ -0,0 +1,178 @@
+package com.megatim.fdxconsultation.core.impl.referentiel;
+
+import com.megatim.fdxconsultation.core.ifaces.referentiel.TypeFichierManager;
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.mappers.MapStructMapper;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntity;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.TypeFichierConsultationDAO;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.TypeFichierDAO;
+import java.util.ArrayList;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithSearchEnityDAO;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierSearch;
+import com.megatim.fdxconsultation.reporting.model.referentiel.TypeFichierReporting;
+import com.megatim.fdxconsultation.tools.CommonTools;
+import com.megatim.fdxconsultation.tools.CommonsToolsEntity;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import java.io.File;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class TypeFichierManagerImpl implements TypeFichierManager {
+
+    @EJB
+    private TypeFichierConsultationDAO dao;
+    
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @Inject
+    private MapStructMapper mapstructMapper;
+
+    @Override
+    public TypeFichierDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "code";
+    }
+
+    @Override
+    public List<TypeFichierReporting> getDatas(CriteriaEntityFromView criterion) throws Exception {
+        return CommonsToolsEntity.convertToTypeFichierReporting(findAll(criterion, Arrays.asList(), Arrays.asList()));
+    }
+
+    @Override
+    public Map<String, Object> getParameters() {
+        return new HashMap<>();
+    }
+
+    @Override
+    public Class<TypeFichierReporting> getClazz() {
+        return TypeFichierReporting.class;
+    }
+
+    @Override
+    public Map<String, List<String>> particpantToFichierDto(String username) {
+        Map<String, List<String>> particpantToFichierDto = new HashMap<>();
+        dao.getParticpantToFichierDto(username).forEach(p -> {
+            String key = p.getCodeParticipant();
+            List<String> value = particpantToFichierDto.get(key);
+            if (value == null) {
+                value = new ArrayList<>();
+            }
+            value.add(p.getCodeFichier());
+            particpantToFichierDto.put(key, value);
+        });
+        return particpantToFichierDto;
+    }
+
+    @Override
+    public List<TypeFichier> findAll(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields) {
+        try {
+            List<String> fieldsNotFound = CommonTools.checkIfEntityField(TypeFichier.class, fetchEagerFields);
+            if (!fieldsNotFound.isEmpty()) {
+                throw new Exception("Les champs suivants n'appartiennent pas à l'entité TypeFichier : "
+                        + fieldsNotFound.stream().collect(Collectors.joining(",", "{", "}")));
+            }
+
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return getDao().findAll(criterion, fetchEagerFields, Arrays.asList(new OrderByDefinition("dateCreation", OrderByType.DESC)));
+
+        } catch (Exception ex) {
+            Logger.getLogger(TypeFichierManagerImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public List<TypeFichier> findWithPagination(CriteriaFormRequest criteriaFormRequest, List<String> fetchEagerFields, int pageNumber, int pageSize) {
+        try {
+            List<String> fieldsNotFound = CommonTools.checkIfEntityField(TypeFichier.class, fetchEagerFields);
+            if (!fieldsNotFound.isEmpty()) {
+                throw new Exception("Les champs suivants n'appartiennent pas à l'entité Routage : " + fieldsNotFound.stream().collect(Collectors.joining(",", "{", "}")));
+            }
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return getDao().findWithPagination(criterion,
+                    fetchEagerFields,
+                    Arrays.asList(new OrderByDefinition("dateCreation", OrderByType.DESC)),
+                    pageNumber,
+                    pageSize);
+        } catch (Exception ex) {
+            Logger.getLogger(RoutageManagerImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Class<TypeFichier> getManagedEntityClass() {
+        return TypeFichier.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return getDao().getEntityManager();
+    }
+
+    @Override
+    public File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    @Override
+    public File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    private ReportConfiguration<CriteriaEntity> constructReportConfiguration(ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        ReportConfiguration<CriteriaEntity> finalConfig = null;
+        if (reportConfiguration != null) {
+            CriteriaEntity criterion = reportConfiguration.getSearchEntity() != null
+                    ? commonMapper.criteriaEntityFromViewToCriteriaEntity(reportConfiguration.getSearchEntity().getCriteria())
+                    : null;
+
+            finalConfig = new ReportConfiguration();
+            finalConfig.setSearchEntity(criterion);
+            finalConfig.setTitle(reportConfiguration.getTitle());
+            finalConfig.getColumns().addAll(reportConfiguration.getColumns());
+            finalConfig.getHeaderDatas().addAll(reportConfiguration.getHeaderDatas());
+
+        }
+        return finalConfig;
+    }
+
+    public PaginationWithSearchEnityDAO<TypeFichier, String, TypeFichierSearch> getPaginationDao() {
+        return dao;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ValidateurFichierConfigurationManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ValidateurFichierConfigurationManagerImpl.java
new file mode 100644
index 0000000..1d9fcd5
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ValidateurFichierConfigurationManagerImpl.java
@@ -0,0 +1,40 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.ValidateurFichierConfiguration;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.ValidateurFichierConfigurationManager;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.ValidateurFichierConfigurationDAO;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.persistence.EntityManager;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class ValidateurFichierConfigurationManagerImpl implements ValidateurFichierConfigurationManager {
+
+   @EJB
+    private ValidateurFichierConfigurationDAO dao;
+
+
+    @Override
+    public ValidateurFichierConfigurationDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public Class<ValidateurFichierConfiguration> getManagedEntityClass() {
+        return ValidateurFichierConfiguration.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return getDao().getEntityManager();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ValidateurFichierManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ValidateurFichierManagerImpl.java
new file mode 100644
index 0000000..0b71b8c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/ValidateurFichierManagerImpl.java
@@ -0,0 +1,94 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.referentiel;
+
+import com.megatim.fdxconsultation.core.ifaces.referentiel.ValidateurFichierManager;
+import com.megatim.fdxcommons.model.dtos.referentiel.ValidateurFichierDto;
+import com.megatim.fdxcommons.model.mappers.MapStructMapper;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.referentiel.ValidateurFichier;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.ValidateurFichierDAO;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import java.io.File;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class ValidateurFichierManagerImpl implements ValidateurFichierManager {
+
+    @EJB
+    private ValidateurFichierDAO dao;
+
+    @Inject
+    private MapStructMapper commonMapper;
+
+    @Override
+    public ValidateurFichierDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "id";
+    }
+
+    @Override
+    public List<ValidateurFichierDto> getDatas(CriteriaEntityFromView criterion) throws Exception {
+        return commonMapper.validateurFichierListToValidateurFichierDtoList(findAll(criterion, Arrays.asList(), Arrays.asList()));
+    }
+
+    @Override
+    public Map<String, Object> getParameters() {
+        return new HashMap<>();
+    }
+
+    @Override
+    public Class<ValidateurFichierDto> getClazz() {
+        return ValidateurFichierDto.class;
+    }
+
+    @Override
+    public Class<ValidateurFichier> getManagedEntityClass() {
+        return ValidateurFichier.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return getDao().getEntityManager();
+    }
+
+    @Override
+    public File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    @Override
+    public File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+    
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/historique/ReferentielIntegrationHistoriqueManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/historique/ReferentielIntegrationHistoriqueManagerImpl.java
new file mode 100644
index 0000000..b611d70
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/historique/ReferentielIntegrationHistoriqueManagerImpl.java
@@ -0,0 +1,38 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.referentiel.historique;
+
+import com.megatim.fdxconsultation.core.ifaces.referentiel.historique.ReferentielIntegrationHistoriqueManager;
+import com.megatim.fdxcommons.dao.ifaces.referentiel.historique.ReferentielIntegrationHistoriqueDAO;
+import com.megatim.fdxcommons.model.referentiel.historique.ReferentielIntegrationHistorique;
+import java.util.List;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class ReferentielIntegrationHistoriqueManagerImpl implements ReferentielIntegrationHistoriqueManager {
+
+    @EJB
+    private ReferentielIntegrationHistoriqueDAO dao;
+
+    @Override
+    public ReferentielIntegrationHistoriqueDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public ReferentielIntegrationHistorique suitableIntegrationHistorique(String codeTypeFichier, String refVersion) {
+        return dao.suitableIntegrationHistorique(codeTypeFichier, refVersion);
+    }
+
+    @Override
+    public List<ReferentielIntegrationHistorique> suitableIntegrationHistorique(String refVersion) {
+        return dao.suitableIntegrationHistorique(refVersion);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/natureproduction/NatureProductionFichierManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/natureproduction/NatureProductionFichierManagerImpl.java
new file mode 100644
index 0000000..c8e1dc4
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/referentiel/natureproduction/NatureProductionFichierManagerImpl.java
@@ -0,0 +1,34 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.referentiel.natureproduction;
+
+import com.megatim.fdxcommons.dao.ifaces.natureproduction.NatureProductionFichierDAO;
+import com.megatim.fdxcommons.model.referentiel.natureproduction.NatureProductionFichier;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.natureproduction.NatureProductionFichierManager;
+import java.util.List;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class NatureProductionFichierManagerImpl implements NatureProductionFichierManager {
+
+    @EJB
+    private NatureProductionFichierDAO dao;
+
+    @Override
+    public NatureProductionFichierDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public List<NatureProductionFichier> getByReferentiel(String referentielVersion) {
+        return getDao().getByReferentiel(referentielVersion);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/remoteaction/PlanificationManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/remoteaction/PlanificationManagerImpl.java
new file mode 100644
index 0000000..378f1ce
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/remoteaction/PlanificationManagerImpl.java
@@ -0,0 +1,67 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.remoteaction;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.bekosoftware.genericdaolayer.dao.tools.RestrictionsContainer;
+import com.bekosoftware.genericmanagerlayer.core.impl.AbstractGenericManager;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxconsultation.model.remoteaction.Planification;
+import com.megatim.fdxconsultation.core.ifaces.remoteaction.PlanificationManager;
+import com.megatim.fdxconsultation.dao.ifaces.remoteaction.PlanificationDAO;
+import com.megatim.fdxconsultation.model.administration.User;
+import java.util.Date;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class PlanificationManagerImpl extends AbstractGenericManager<Planification, Long> implements PlanificationManager {
+
+    @EJB
+    private PlanificationDAO dao;
+
+    @Override
+    public GenericDAO<Planification, Long> getDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "id";
+    }
+
+    @Override
+    public void beforeAdd(Planification entity, User connectedUser) {
+    }
+
+    @Override
+    public void beforeRemove(Planification entity, User connectedUser) {
+    }
+
+    @Override
+    public void beforeModify(Planification actualEntity, Planification requestEntity, User connectedUser) {
+        requestEntity.setUtilisateurModification(connectedUser.getUserName());
+        requestEntity.setDateDerniereModification(new Date());
+    }
+
+    @Override
+    public Planification mapToDto(Planification entity) {
+        throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
+    }
+
+    @Override
+    public Planification mapToDetailDto(Planification entity) {
+        throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
+    }
+
+    @Override
+    public RestrictionsContainer construireRequete(User searchEntity, TypeOperation typeOperation) {
+        throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/remoteaction/RemoteConfigurationManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/remoteaction/RemoteConfigurationManagerImpl.java
new file mode 100644
index 0000000..6b3f19a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/remoteaction/RemoteConfigurationManagerImpl.java
@@ -0,0 +1,174 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.remoteaction;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.bekosoftware.genericdaolayer.dao.tools.RestrictionsContainer;
+import com.bekosoftware.genericmanagerlayer.core.impl.AbstractGenericManager;
+import com.megatim.fdxcommons.core.ifaces.helper.DataInMemoryHandler;
+import com.megatim.fdxcommons.model.dtos.remoteproduction.RemoteConfigurationDto;
+import com.megatim.fdxcommons.model.enumeration.RemoteTypeAction;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxconsultation.model.remoteaction.RemoteConfiguration;
+import com.megatim.fdxconsultation.core.ifaces.helper.RoutingChecker;
+import com.megatim.fdxconsultation.core.ifaces.remoteaction.PlanificationManager;
+import com.megatim.fdxconsultation.core.ifaces.remoteaction.RemoteConfigurationManager;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithCriteriaEntityDAO;
+import com.megatim.fdxconsultation.dao.ifaces.remoteaction.RemoteConfigurationDAO;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.model.remoteaction.Planification;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.transaction.Transactional;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelContext;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class RemoteConfigurationManagerImpl extends AbstractGenericManager<RemoteConfiguration, String> implements RemoteConfigurationManager {
+
+    @EJB
+    private RemoteConfigurationDAO dao;
+
+    @Inject
+    private PlanificationManager planificationManager;
+
+    @Inject
+    private CdiCamelContext camelContext;
+
+    @Inject
+    private MapStructMapper mapStructMapper;
+
+    @Inject
+    private RoutingChecker routingChecker;
+
+    @Inject
+    private DataInMemoryHandler dataInMemoryHandler;
+
+    @Override
+    public GenericDAO<RemoteConfiguration, String> getDao() {
+        return dao;
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "codeTypeFichier";
+    }
+
+    @Override
+    @Transactional
+    public RemoteConfiguration saveAndSend(RemoteConfiguration entity, User connectedUser) {
+        if (entity.getRemoteTypeAction().equals(RemoteTypeAction.AJOUTER)) {
+            routingChecker.stopIfNotConsumer(entity.getCodeTypeFichier(), dataInMemoryHandler.getDataInMemory(), entity.getCodeParticipant());
+        }
+        if (entity.getRemoteTypeAction().equals(RemoteTypeAction.CONSULTER)) {
+            routingChecker.stopIfNotProducer(entity.getCodeTypeFichier(), dataInMemoryHandler.getDataInMemory(), entity.getCodeParticipant());
+        }
+        RemoteConfiguration newEntity = add(entity, connectedUser);
+        System.out.println("****************after save************* " + newEntity.getCodeTypeFichier());
+
+        for (Planification p : newEntity.getPlanifications()) {
+            p.setConfiguration(newEntity);
+            planificationManager.update(p.getId(), p);
+        }
+        RemoteConfiguration finalEntity = find(getEntityIdName(), newEntity.getCodeTypeFichier());
+        System.out.println("NB Planifications = " + finalEntity.getPlanifications().size());
+
+        sendMessage(mapStructMapper.remoteConfigurationToRemoteConfigurationDto(finalEntity));
+
+        return finalEntity;
+    }
+
+    @Override
+    public RemoteConfiguration updateAndSend(String id, RemoteConfiguration entity, User connectedUser) {
+        RemoteConfiguration newEntity = modify(id, entity, connectedUser);
+        sendMessage(mapStructMapper.remoteConfigurationToRemoteConfigurationDto(newEntity));
+
+        return newEntity;
+    }
+
+    @Override
+    public void deleteAndSend(String id, User connectedUser) {
+        RemoteConfiguration entity = find(getEntityIdName(), id);
+
+        if (entity != null) {
+            entity.setTypeOperation(TypeOperation.SUPPRIMER);
+            delete(id);
+            sendMessage(mapStructMapper.remoteConfigurationToRemoteConfigurationDto(entity));
+        }
+    }
+
+    @Override
+    public PaginationWithCriteriaEntityDAO<RemoteConfiguration, String> paginationWithCriteriaEntityDAO() {
+        return dao;
+    }
+
+    @Override
+    public void beforeAdd(RemoteConfiguration entity, User connectedUser) {
+        Date dateAction = new Date();
+        entity.setUtilisateurCreation(connectedUser.getUserName());
+        entity.setDateCreation(dateAction);
+
+        entity.getPlanifications().stream().forEach(p -> {
+            p.setUtilisateurCreation(connectedUser.getUserName());
+            p.setDateCreation(dateAction);
+        });
+    }
+
+    @Override
+    public void beforeRemove(RemoteConfiguration entity, User connectedUser) {
+    }
+
+    @Override
+    public void beforeModify(RemoteConfiguration actualEntity, RemoteConfiguration requestEntity, User connectedUser) {
+        Date dateAction = new Date();
+        actualEntity.setUtilisateurModification(connectedUser.getUserName());
+        actualEntity.setDateDerniereModification(dateAction);
+        actualEntity.setUrl(requestEntity.getUrl());
+        actualEntity.setRemoteTypeAction(requestEntity.getRemoteTypeAction());
+        actualEntity.setPlanifications(requestEntity.getPlanifications());
+
+        actualEntity.getPlanifications().stream().forEach(p -> {
+            p.setUtilisateurModification(connectedUser.getUserName());
+            p.setDateDerniereModification(dateAction);
+        });
+    }
+
+    @Override
+    public RemoteConfigurationDto mapToDto(RemoteConfiguration entity) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public RemoteConfigurationDto mapToDetailDto(RemoteConfiguration entity) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public RestrictionsContainer construireRequete(User searchEntity, TypeOperation typeOperation) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    private void sendMessage(RemoteConfigurationDto configDto) {
+        ProducerTemplate producerTemplate = camelContext.createProducerTemplate();
+        producerTemplate.sendBodyAndHeaders("direct:" + AppCommonContext.REMOTE_CONGIGURATION_DIRECT, configDto, headers());
+    }
+
+    private Map<String, Object> headers() {
+        Map<String, Object> headers = new HashMap<>();
+        headers.put("CamelRabbitmqDeliveryMode", 2);//pour permettre au message de rester dans la file même après redémarrage
+
+        return headers;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/searchs/DashboardFichierManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/searchs/DashboardFichierManagerImpl.java
new file mode 100644
index 0000000..2ca580e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/searchs/DashboardFichierManagerImpl.java
@@ -0,0 +1,41 @@
+package com.megatim.fdxconsultation.core.impl.searchs;
+
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.core.ifaces.searchs.DashboardFichierManager;
+import com.megatim.fdxconsultation.dao.ifaces.stats.TableauBordDAO;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierSearch;
+import java.util.List;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Dependent
+public class DashboardFichierManagerImpl implements DashboardFichierManager {
+
+    @Inject
+    private TableauBordDAO dao;
+
+    @Override
+    public List<TypeFichier> tableauBordTypeFichiers(String userName, String referentielVersion, TypeFichierSearch typeFichierSearch, int pageNumber, int pageSize) {
+        return dao.tableauBordTypeFichiers(userName, referentielVersion, typeFichierSearch, pageNumber, pageSize);
+    }
+
+    @Override
+    public Long countTableauBordTypeFichiers(String userName, String referentielVersion, TypeFichierSearch typeFichierSearch) {
+        return dao.countTableauBordTypeFichiers(userName, referentielVersion, typeFichierSearch);
+    }
+
+    @Override
+    public List<TypeFichier> tableauBordGlobalTypeFichiers(String referentielVersion, TypeFichierSearch typeFichierSearch, int pageNumber, int pageSize) {
+        return dao.tableauBordGlobalTypeFichiers(referentielVersion, typeFichierSearch, pageNumber, pageSize);
+    }
+
+    @Override
+    public Long countTableauBordGlobalTypeFichiers(String referentielVersion, TypeFichierSearch typeFichierSearch) {
+        return dao.countTableauBordGlobalTypeFichiers(referentielVersion, typeFichierSearch);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/searchs/TypeFichierReferentielManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/searchs/TypeFichierReferentielManagerImpl.java
new file mode 100644
index 0000000..1bd929c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/searchs/TypeFichierReferentielManagerImpl.java
@@ -0,0 +1,41 @@
+package com.megatim.fdxconsultation.core.impl.searchs;
+
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.core.ifaces.searchs.TypeFichierReferentielManager;
+import com.megatim.fdxconsultation.dao.ifaces.searchs.TypeFichierReferentielSearchDAO;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierReferentielSearch;
+import java.util.List;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Dependent
+public class TypeFichierReferentielManagerImpl implements TypeFichierReferentielManager {
+
+    @Inject
+    private TypeFichierReferentielSearchDAO dao;
+
+    @Override
+    public List<TypeFichier> all(int pageNumber, int pagesize, TypeFichierReferentielSearch searchEntity) {
+        return dao.all(pageNumber, pagesize, searchEntity);
+    }
+
+    @Override
+    public Long count(TypeFichierReferentielSearch searchEntity) {
+        return dao.count(searchEntity);
+    }
+
+    @Override
+    public List<TypeFichier> all(String userName, int pageNumber, int pagesize, TypeFichierReferentielSearch searchEntity) {
+        return dao.all(userName, pageNumber, pagesize, searchEntity);
+    }
+
+    @Override
+    public Long count(String userName, TypeFichierReferentielSearch searchEntity) {
+        return dao.count(userName, searchEntity);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/searchs/UserParticipantManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/searchs/UserParticipantManagerImpl.java
new file mode 100644
index 0000000..3b9e4fa
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/searchs/UserParticipantManagerImpl.java
@@ -0,0 +1,54 @@
+package com.megatim.fdxconsultation.core.impl.searchs;
+
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import com.megatim.fdxconsultation.core.ifaces.searchs.UserParticipantManager;
+import com.megatim.fdxconsultation.dao.ifaces.searchs.UserParticipantDAO;
+import com.megatim.fdxconsultation.model.searchentities.ParticipantSearch;
+import java.util.ArrayList;
+import java.util.List;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Dependent
+public class UserParticipantManagerImpl implements UserParticipantManager {
+
+    @Inject
+    private UserParticipantDAO dao;
+
+    @Override
+    public List<Participant> findUserParticipants(String userName) {
+        return dao.findUserParticipants(userName);
+    }
+
+    @Override
+    public List<Participant> findUserParticipantsWithPagination(String userName, ParticipantSearch participantSearch, int pageNumber, int pageSize) {
+        try {
+            return dao.findUserParticipantsWithPagination(userName, participantSearch, pageNumber, pageSize);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ArrayList<>();
+        }
+
+    }
+    
+    @Override
+    public List<Participant> findAllUserParticipants(String userName, ParticipantSearch participantSearch) {
+        try {
+            return dao.findAllUserParticipants(userName, participantSearch);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ArrayList<>();
+        }
+
+    }
+
+    @Override
+    public Long countUserParticipants(String userName, ParticipantSearch participantSearch) {
+        return dao.countUserParticipants(userName, participantSearch);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/searchs/UserTypeFichierManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/searchs/UserTypeFichierManagerImpl.java
new file mode 100644
index 0000000..71b8c5e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/searchs/UserTypeFichierManagerImpl.java
@@ -0,0 +1,53 @@
+package com.megatim.fdxconsultation.core.impl.searchs;
+
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.core.ifaces.searchs.UserTypeFichierManager;
+import com.megatim.fdxconsultation.dao.ifaces.searchs.UserTypeFichierDAO;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierSearch;
+import java.util.ArrayList;
+import java.util.List;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Dependent
+public class UserTypeFichierManagerImpl implements UserTypeFichierManager {
+
+    @Inject
+    private UserTypeFichierDAO dao;
+
+    @Override
+    public List<TypeFichier> findUserTypeFichiers(String userName) {
+        return dao.findUserTypeFichiers(userName);
+    }
+
+    @Override
+    public List<TypeFichier> findUserTypeFichiersWithPagination(String userName, TypeFichierSearch typeFichierSearch, int pageNumber, int pageSize) {
+        try {
+            return dao.findUserTypeFichiersWithPagination(userName, typeFichierSearch, pageNumber, pageSize);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ArrayList<>();
+        }
+
+    }
+
+    @Override
+    public Long countUserTypeFichiers(String userName, TypeFichierSearch typeFichierSearch) {
+        return dao.countUserTypeFichiers(userName, typeFichierSearch);
+    }
+
+    @Override
+    public List<TypeFichier> findUserTypeFichiersInReferentielWithPagination(String userName, String referentiel, TypeFichierSearch typeFichierSearch, int pageNumber, int pageSize) {
+        return dao.findUserTypeFichiersInReferentielWithPagination(userName, referentiel, typeFichierSearch, pageNumber, pageSize);
+    }
+
+    @Override
+    public Long countUserTypeFichiersInReferentiel(String userName, String referentiel, TypeFichierSearch typeFichierSearch) {
+        return dao.countUserTypeFichiersInReferentiel(userName, referentiel, typeFichierSearch);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/settings/DisplayOptionsManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/settings/DisplayOptionsManagerImpl.java
new file mode 100644
index 0000000..995c941
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/settings/DisplayOptionsManagerImpl.java
@@ -0,0 +1,29 @@
+package com.megatim.fdxconsultation.core.impl.settings;
+
+import com.megatim.fdxconsultation.core.ifaces.settings.DisplayOptionsManager;
+import com.megatim.fdxconsultation.dao.ifaces.settings.DisplayOptionsDAO;
+import com.megatim.fdxconsultation.model.settings.DisplayOptions;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Dependent
+public class DisplayOptionsManagerImpl implements DisplayOptionsManager {
+
+    @Inject
+    private DisplayOptionsDAO displayOptionsDAO;
+
+    @Override
+    public DisplayOptions current() {
+        return displayOptionsDAO.current();
+    }
+
+    @Override
+    public DisplayOptions edit(DisplayOptions entity) {
+        return displayOptionsDAO.edit(entity);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/settings/SettingsManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/settings/SettingsManagerImpl.java
new file mode 100644
index 0000000..d86c1e7
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/settings/SettingsManagerImpl.java
@@ -0,0 +1,24 @@
+package com.megatim.fdxconsultation.core.impl.settings;
+
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxconsultation.core.ifaces.settings.SettingsManager;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.ReferentielDAO;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Dependent
+public class SettingsManagerImpl implements SettingsManager {
+
+    @Inject
+    private ReferentielDAO referentielDAO;
+
+    @Override
+    public Referentiel currentReferentiel() {
+        return referentielDAO.getReferentielEnCours();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/sockets/DataProductionSessionHandler.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/sockets/DataProductionSessionHandler.java
new file mode 100644
index 0000000..bb00f46
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/sockets/DataProductionSessionHandler.java
@@ -0,0 +1,49 @@
+package com.megatim.fdxconsultation.core.impl.sockets;
+
+import com.megatim.fdxconsultation.model.dataproduction.DataProduction;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import javax.enterprise.context.ApplicationScoped;
+import javax.websocket.EncodeException;
+import javax.websocket.Session;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@ApplicationScoped
+public class DataProductionSessionHandler {
+
+    private final Map<String, Session> idToSessions = new ConcurrentHashMap<>();
+
+    public void publishMessage(DataProduction dataProduction) {
+        getSessions().forEach(s -> {
+            try {
+                s.getBasicRemote().sendObject(dataProduction);
+            } catch (IOException | EncodeException ex) {
+                Logger.getLogger(getClass().getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            }
+        });
+    }
+
+    public void addSession(Session session) {
+        idToSessions.put(session.getId(), session);
+    }
+
+    public void removeSession(Session session) {
+        idToSessions.remove(session.getId());
+    }
+
+    private List<Session> getSessions() {
+        return idToSessions
+                .entrySet()
+                .stream()
+                .map(e -> e.getValue())
+                .collect(Collectors.toList());
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedCriteriaEntityFromView.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedCriteriaEntityFromView.java
new file mode 100644
index 0000000..c291cf5
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedCriteriaEntityFromView.java
@@ -0,0 +1,89 @@
+package com.megatim.fdxconsultation.core.impl.stats;
+
+import com.megatim.fdxcommons.model.pojo.BetweenOperatorValues;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.model.stats.CriteriaEntityPersisted;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class ConvertedCriteriaEntityFromView {
+
+    private final CriteriaEntityPersisted criteriaEntityPersisted;
+
+    public ConvertedCriteriaEntityFromView(CriteriaEntityPersisted criteriaEntityPersisted) {
+        this.criteriaEntityPersisted = criteriaEntityPersisted;
+    }
+
+    public CriteriaEntityFromView criteriaEntityFromView() {
+        return buildCriterion(criteriaEntityPersisted);
+    }
+
+    private CriteriaEntityFromView buildCriterion(CriteriaEntityPersisted persisted) {
+
+        if (persisted != null) {
+
+            CriteriaEntityFromView criterion = new CriteriaEntityFromView();
+
+            if (persisted.getSubCriterias() != null && !persisted.getSubCriterias().isEmpty()) {
+
+                criterion.setCriteriaLogicConnector(persisted.getCriteriaLogicConnector());
+                persisted.getSubCriterias().stream().forEach(c -> {
+                    CriteriaEntityFromView criterionfromView = buildCriterion(c);
+                    if (criterionfromView != null) {
+                        criterion.getSubCriterias().add(criterionfromView);
+                    }
+                });
+
+                return criterion;
+
+            } else {
+
+                criterion.setNomColonne(persisted.getNomColonne());
+                criterion.setOperateur(persisted.getOperateur());
+                criterion.setCriteriaValue(criteriaValue(persisted));
+
+                return criterion;
+            }
+
+        }
+
+        return null;
+    }
+
+    public Object criteriaValue(CriteriaEntityPersisted persisted) {
+
+        if (persisted.getCriteriaDateListValue() != null && !persisted.getCriteriaDateListValue().isEmpty()) {
+            return persisted.getCriteriaDateListValue();
+
+        } else if (persisted.getCriteriaDateLowerBound() != null && persisted.getCriteriaDateUpperBound() != null) {
+            return new BetweenOperatorValues(persisted.getCriteriaDateLowerBound(), persisted.getCriteriaDateUpperBound());
+
+        } else if (persisted.getCriteriaDateValue() != null) {
+            return persisted.getCriteriaDateValue();
+
+        } else if (persisted.getCriteriaNumericListValue() != null && !persisted.getCriteriaNumericListValue().isEmpty()) {
+            return persisted.getCriteriaNumericListValue();
+
+        } else if (persisted.getCriteriaNumericLowerBound() != null && persisted.getCriteriaNumericUpperBound() != null) {
+            return new BetweenOperatorValues(persisted.getCriteriaNumericLowerBound(), persisted.getCriteriaNumericUpperBound());
+
+        } else if (persisted.getCriteriaNumericValue() != null) {
+            return persisted.getCriteriaNumericValue();
+
+        } else if (persisted.getCriteriaStringListValue() != null && !persisted.getCriteriaStringListValue().isEmpty()) {
+            return persisted.getCriteriaStringListValue();
+
+        } else if (persisted.getCriteriaStringLowerBound() != null && persisted.getCriteriaStringUpperBound() != null) {
+            return new BetweenOperatorValues(persisted.getCriteriaStringLowerBound(), persisted.getCriteriaStringUpperBound());
+
+        } else if (persisted.getCriteriaStringValue() != null) {
+            return persisted.getCriteriaStringValue();
+
+        } else {
+            return null;
+        }
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedCriteriaEntityPersisted.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedCriteriaEntityPersisted.java
new file mode 100644
index 0000000..11fcdce
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedCriteriaEntityPersisted.java
@@ -0,0 +1,166 @@
+package com.megatim.fdxconsultation.core.impl.stats;
+
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.pojo.BetweenOperatorValues;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxconsultation.model.stats.CriteriaEntityPersisted;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class ConvertedCriteriaEntityPersisted {
+
+    private final QueryCriterion criterion;
+    private final Map<String, ColumnDefinition> nameToColumnDefinitionMap;
+
+    public ConvertedCriteriaEntityPersisted(QueryCriterion criterion, List<ColumnDefinition> columnDefinitions) {
+        this.criterion = criterion;
+        this.nameToColumnDefinitionMap = columnDefinitions.stream().collect(Collectors.toMap(c -> c.getName(), c -> c));
+    }
+
+    public CriteriaEntityPersisted criteriaEntityPersisted() {
+
+        CriteriaEntityPersisted entityPersisted = new CriteriaEntityPersisted();
+        entityPersisted.setCriteriaLogicConnector(criterion.getCriteriaLogicConnector());
+
+        if (criterion.getSubCriteria() != null && !criterion.getSubCriteria().isEmpty()) {
+
+            for (QueryCriterion c : criterion.getSubCriteria()) {
+
+                CriteriaEntityPersisted ceP = new ConvertedCriteriaEntityPersisted(
+                        c,
+                        nameToColumnDefinitionMap
+                                .values()
+                                .stream()
+                                .collect(Collectors.toList())
+                ).criteriaEntityPersisted();
+                ceP.setParent(entityPersisted);
+                entityPersisted.getSubCriterias().add(ceP);
+            }
+
+        } else {
+
+            entityPersisted.setNomColonne(criterion.getNomColonne().toLowerCase());
+            entityPersisted.setOperateur(criterion.getOperateur());
+            setCorrectTypeForCriteriaValue(entityPersisted);
+
+        }
+
+        return entityPersisted;
+    }
+
+    private void setCorrectTypeForCriteriaValue(CriteriaEntityPersisted entityPersisted) {
+
+        ColumnDefinition columnDefinition = nameToColumnDefinitionMap.get(criterion.getNomColonne().toLowerCase());
+        String typeDonnee = columnDefinition.getTypeDonnee();
+        Object criteriaValue = criterion.getCriteriaValue();
+
+        if (operatorWithSingleValue()) {
+            setSignleValue(typeDonnee, entityPersisted, criteriaValue);
+            return;
+        }
+
+        if (operatorWithBeetween()) {
+            setBetweenValue(criteriaValue, typeDonnee, entityPersisted);
+            return;
+        }
+
+        if (operatorWithIn()) {
+            setInValue(typeDonnee, criteriaValue, entityPersisted);
+        }
+    }
+
+    private void setInValue(String typeDonnee, Object criteriaValue, CriteriaEntityPersisted entityPersisted) {
+
+        if (typeDonnee.equalsIgnoreCase(TypeDonnee.NUMERIQUE.getValue())) {
+
+            Set<Number> criteriaValues = ((List<Number>) criteriaValue).stream().collect(Collectors.toSet());
+            entityPersisted.getCriteriaNumericListValue().addAll(criteriaValues);
+
+        } else if (typeDonnee.equalsIgnoreCase(TypeDonnee.ALPHANUMERIQUE.getValue())) {
+
+            Set<String> criteriaValues = ((List<String>) criteriaValue).stream().collect(Collectors.toSet());
+            entityPersisted.getCriteriaStringListValue().addAll(criteriaValues);
+
+        } else if (typeDonnee.equalsIgnoreCase(TypeDonnee.DATE.getValue())) {
+
+            Set<LocalDateTime> criteriaValues = ((List<LocalDateTime>) criteriaValue).stream().collect(Collectors.toSet());
+            entityPersisted.getCriteriaDateListValue().addAll(criteriaValues);
+
+        }
+    }
+
+    private void setBetweenValue(Object criteriaValue, String typeDonnee, CriteriaEntityPersisted entityPersisted) {
+        BetweenOperatorValues betweenOperatorValues = (BetweenOperatorValues) criteriaValue;
+
+        if (typeDonnee.equalsIgnoreCase(TypeDonnee.NUMERIQUE.getValue())) {
+
+            entityPersisted.setCriteriaNumericLowerBound((Number) betweenOperatorValues.getLowerBound());
+            entityPersisted.setCriteriaNumericUpperBound((Number) betweenOperatorValues.getUpperBound());
+
+        } else if (typeDonnee.equalsIgnoreCase(TypeDonnee.ALPHANUMERIQUE.getValue())) {
+
+            entityPersisted.setCriteriaStringLowerBound(betweenOperatorValues.getLowerBound().toString());
+            entityPersisted.setCriteriaStringUpperBound(betweenOperatorValues.getUpperBound().toString());
+
+        } else if (typeDonnee.equalsIgnoreCase(TypeDonnee.DATE.getValue())) {
+
+            entityPersisted.setCriteriaDateLowerBound(LocalDateTime.parse(betweenOperatorValues.getLowerBound().toString()));
+            entityPersisted.setCriteriaDateUpperBound(LocalDateTime.parse(betweenOperatorValues.getUpperBound().toString()));
+
+        }
+    }
+
+    private void setSignleValue(String typeDonnee, CriteriaEntityPersisted entityPersisted, Object criteriaValue) {
+
+        if (typeDonnee.equalsIgnoreCase(TypeDonnee.NUMERIQUE.getValue())) {
+
+            entityPersisted.setCriteriaNumericValue((Number) criteriaValue);
+
+        } else if (typeDonnee.equalsIgnoreCase(TypeDonnee.ALPHANUMERIQUE.getValue())) {
+
+            entityPersisted.setCriteriaStringValue(criteriaValue.toString());
+
+        } else if (typeDonnee.equalsIgnoreCase(TypeDonnee.DATE.getValue())) {
+
+            entityPersisted.setCriteriaDateValue(LocalDateTime.parse(criteriaValue.toString()));
+
+        } else if (operatorWithLike()) {
+
+            entityPersisted.setCriteriaStringValue(criteriaValue.toString());
+
+        }
+    }
+
+    private boolean operatorWithBeetween() {
+        return criterion.getOperateur().equals(Operateur.BETWEEN)
+                || criterion.getOperateur().equals(Operateur.BETWEEN);
+    }
+
+    private boolean operatorWithSingleValue() {
+        return criterion.getOperateur().equals(Operateur.EQUALS)
+                || criterion.getOperateur().equals(Operateur.NOT_EQUALS)
+                || criterion.getOperateur().equals(Operateur.GREATER_THAN)
+                || criterion.getOperateur().equals(Operateur.GREATER_OR_EQUALS_THAN)
+                || criterion.getOperateur().equals(Operateur.LOWER_THAN)
+                || criterion.getOperateur().equals(Operateur.LOWER_OR_EQUALS_THAN)
+                || criterion.getOperateur().equals(Operateur.LIKE);
+    }
+
+    private boolean operatorWithLike() {
+        return criterion.getOperateur().equals(Operateur.LIKE);
+    }
+
+    private boolean operatorWithIn() {
+        return criterion.getOperateur().equals(Operateur.LIKE);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedTableConfiguration.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedTableConfiguration.java
new file mode 100644
index 0000000..430ff5b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedTableConfiguration.java
@@ -0,0 +1,85 @@
+package com.megatim.fdxconsultation.core.impl.stats;
+
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.tools.database.exceptions.BadQueryCriteriaException;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import com.megatim.fdxcommons.tools.database.queries.metadata.ParsedQueryCriterion;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.tables.FdxTableColumns;
+import com.megatim.fdxcommons.tools.utils.CriteriaEntityFromViewToQueryCriterion;
+import com.megatim.fdxconsultation.model.dto.stats.TableConfigurationDto;
+import com.megatim.fdxconsultation.model.dto.stats.TableauBordColumnDto;
+import com.megatim.fdxconsultation.model.stats.CriteriaEntityPersisted;
+import com.megatim.fdxconsultation.model.stats.TableConfiguration;
+import com.megatim.fdxconsultation.model.stats.TableauBordColumn;
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class ConvertedTableConfiguration {
+
+    private final TableConfigurationDto tableConfigurationDto;
+    private final List<ColumnDefinition> columnDefinitions;
+    private final FdxTableColumns fdxTableColumns;
+
+    public ConvertedTableConfiguration(TableConfigurationDto tableConfigurationDto, FdxTableColumns fdxTableColumns, List<ColumnDefinition> columnDefinitions) {
+        this.tableConfigurationDto = tableConfigurationDto;
+        this.columnDefinitions = columnDefinitions;
+        this.fdxTableColumns = fdxTableColumns;
+        
+    }
+
+    public TableConfiguration tableConfiguration() throws SQLException, NamingException, LocalDateTimeValueParseError, BadQueryCriteriaException {
+
+        TableConfiguration tableConfiguration = new TableConfiguration();
+
+        tableConfiguration.setFonctionAggregation(tableConfigurationDto.getFonctionAggregation());
+        tableConfiguration.setLibelle(tableConfigurationDto.getLibelle());
+        tableConfiguration.setColor(tableConfigurationDto.getColor());
+
+        TableauBordColumn targetedColumn = tableConfigurationDto.getTargetedColumn() != null
+                ? convert(tableConfigurationDto.getTargetedColumn())
+                : null;
+
+        tableConfiguration.setTargetedColumn(targetedColumn);
+
+        Set<TableauBordColumn> groupinColumns = convert(tableConfigurationDto.getGroupingColumns());
+        groupinColumns.forEach(gC -> {
+            tableConfiguration.getGroupingColumns().add(gC);
+            gC.setTableConfiguration(tableConfiguration);
+        });
+
+        tableConfiguration.setTypeResultatConfiguration(tableConfigurationDto.getTypeResultatConfiguration());
+
+        QueryCriterion criterion = queryCriterion();
+        if (criterion != null) {
+            CriteriaEntityPersisted criterionPersisted = new ConvertedCriteriaEntityPersisted(criterion, columnDefinitions).criteriaEntityPersisted();
+            tableConfiguration.setCriterion(criterionPersisted);
+            criterionPersisted.setTableConfiguration(tableConfiguration);
+        }
+
+        return tableConfiguration;
+    }
+
+    private QueryCriterion queryCriterion() throws SQLException, NamingException, LocalDateTimeValueParseError, BadQueryCriteriaException {
+        return new ParsedQueryCriterion(
+                new CriteriaEntityFromViewToQueryCriterion(tableConfigurationDto.getCriterion()).queryCriterion(),
+                fdxTableColumns,
+                columnDefinitions
+        ).parsedCriterion();
+    }
+
+    private Set<TableauBordColumn> convert(Set<TableauBordColumnDto> columns) {
+        return columns.stream().map(g -> convert(g)).collect(Collectors.toSet());
+    }
+
+    private TableauBordColumn convert(TableauBordColumnDto tableauBordColumnDto) {
+        return new TableauBordColumn(null, tableauBordColumnDto.getName(), tableauBordColumnDto.getTypeDonnee(), null);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedTableConfigurationResponse.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedTableConfigurationResponse.java
new file mode 100644
index 0000000..3e39d21
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedTableConfigurationResponse.java
@@ -0,0 +1,55 @@
+package com.megatim.fdxconsultation.core.impl.stats;
+
+import com.megatim.fdxcommons.model.pojo.BetweenOperatorValues;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.model.stats.CriteriaEntityPersisted;
+import com.megatim.fdxconsultation.model.stats.TableConfiguration;
+import com.megatim.fdxconsultation.model.stats.dto.TableConfigurationResponse;
+import com.megatim.fdxconsultation.model.stats.dto.TableauBordColumnResponse;
+import java.io.Serializable;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class ConvertedTableConfigurationResponse implements Serializable {
+
+    private final TableConfiguration tableConfiguration;
+
+    public ConvertedTableConfigurationResponse(TableConfiguration tableConfiguration) {
+        this.tableConfiguration = tableConfiguration;
+    }
+
+    public TableConfigurationResponse tableConfigurationResponse() {
+        return new TableConfigurationResponse(
+                tableConfiguration.getLibelle(),
+                tableConfiguration.getFonctionAggregation(),
+                tableConfiguration.getTypeResultatConfiguration(),
+                targetedColumn(),
+                groupingColumns(),
+                new ConvertedCriteriaEntityFromView(tableConfiguration.getCriterion()).criteriaEntityFromView(),
+                tableConfiguration.getColor()
+        );
+    }
+
+    private Set<TableauBordColumnResponse> groupingColumns() {
+        return tableConfiguration.getGroupingColumns() != null
+                ? tableConfiguration
+                        .getGroupingColumns()
+                        .stream()
+                        .map(c -> new TableauBordColumnResponse(c.getName(), c.getTypeDonnee()))
+                        .collect(Collectors.toSet())
+                : null;
+    }
+
+    private TableauBordColumnResponse targetedColumn() {
+        return tableConfiguration.getTargetedColumn() != null
+                ? new TableauBordColumnResponse(
+                        tableConfiguration.getTargetedColumn().getName(),
+                        tableConfiguration.getTargetedColumn().getTypeDonnee())
+                : null;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedTableauBord.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedTableauBord.java
new file mode 100644
index 0000000..15f2824
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedTableauBord.java
@@ -0,0 +1,50 @@
+package com.megatim.fdxconsultation.core.impl.stats;
+
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxcommons.tools.database.exceptions.BadQueryCriteriaException;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import com.megatim.fdxcommons.tools.database.tables.FdxTableColumns;
+import com.megatim.fdxconsultation.model.dto.stats.TableConfigurationDto;
+import com.megatim.fdxconsultation.model.stats.TableConfiguration;
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import com.megatim.fdxconsultation.model.stats.dto.TableauBordRequest;
+import java.sql.SQLException;
+import java.util.List;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author Gabuntu
+ */
+class ConvertedTableauBord {
+
+    private final TableauBordRequest tableauBordRequest;
+    private final List<ColumnDefinition> columnDefinitions;
+    private final FdxTableColumns fdxTableColumns;
+     
+
+    public ConvertedTableauBord(TableauBordRequest tableauBordRequest, List<ColumnDefinition> columnDefinitions, FdxTableColumns fdxTableColumns) {
+        this.tableauBordRequest = tableauBordRequest;
+        this.columnDefinitions = columnDefinitions;
+        this.fdxTableColumns = fdxTableColumns;
+    }
+
+    public TableauBord tableauBord() throws SQLException, NamingException, LocalDateTimeValueParseError, BadQueryCriteriaException {
+
+        TableauBord tableauBord = new TableauBord();
+
+        tableauBord.setDescription(tableauBordRequest.getDescription());
+        tableauBord.setReferentiel(tableauBordRequest.getReferentiel());
+        tableauBord.setTypeFichier(tableauBordRequest.getTypeFichier());
+
+        for (TableConfigurationDto t : tableauBordRequest.getTableConfigurations()) {
+            TableConfiguration tableConfiguration = new ConvertedTableConfiguration(t, fdxTableColumns, columnDefinitions).tableConfiguration();
+            tableConfiguration.setTableauBord(tableauBord);
+            tableauBord.getTableConfigurations().add(tableConfiguration);
+        }
+
+        return tableauBord;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedTableauBordResponse.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedTableauBordResponse.java
new file mode 100644
index 0000000..c8ad5bd
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/ConvertedTableauBordResponse.java
@@ -0,0 +1,82 @@
+package com.megatim.fdxconsultation.core.impl.stats;
+
+import com.megatim.fdxcommons.model.dtos.referentiel.ReferentielSlimDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.TypeFichierSlimDto;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import com.megatim.fdxconsultation.model.stats.dto.TableConfigurationResponse;
+import com.megatim.fdxconsultation.model.stats.dto.TableauBordFlatResponse;
+import com.megatim.fdxconsultation.model.stats.dto.TableauBordResponse;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class ConvertedTableauBordResponse {
+
+    private final TableauBord tableauBord;
+
+    public ConvertedTableauBordResponse(TableauBord tableauBord) {
+        this.tableauBord = tableauBord;
+    }
+
+    public TableauBordResponse tableauBordResponse() {
+        TableauBordResponse tableauBordResponse
+                = new TableauBordResponse(
+                        tableauBord.getDescription(),
+                        typeFichierSlimDto(tableauBord.getTypeFichier()),
+                        referentielSlimDto(tableauBord.getReferentiel()),
+                        tableauBord.getTypeConfiguration(),
+                        tableConfigurationResponses()
+                );
+        return tableauBordResponse;
+    }
+
+    public TableauBordFlatResponse tableauBordFlatResponse() {
+        TableauBordFlatResponse tableauBordFlatResponse
+                = new TableauBordFlatResponse(
+                        tableauBord.getDescription(),
+                        typeFichierSlimDto(tableauBord.getTypeFichier()),
+                        referentielSlimDto(tableauBord.getReferentiel()),
+                        tableauBord.getTypeConfiguration()
+                );
+        return tableauBordFlatResponse;
+    }
+
+    private Set<TableConfigurationResponse> tableConfigurationResponses() {
+        return tableauBord.getTableConfigurations()
+                .stream()
+                .map(t -> new ConvertedTableConfigurationResponse(t).tableConfigurationResponse())
+                .collect(Collectors.toSet());
+    }
+
+    private TypeFichierSlimDto typeFichierSlimDto(TypeFichier typeFichier) {
+        TypeFichierSlimDto typeFichierSlimDto = new TypeFichierSlimDto();
+        typeFichierSlimDto.setCategorieFichier(typeFichier.getCategorieFichier());
+        typeFichierSlimDto.setCode(typeFichier.getCode());
+        typeFichierSlimDto.setDescription(typeFichier.getDescription());
+        typeFichierSlimDto.setLibelle(typeFichier.getLibelle());
+        typeFichierSlimDto.setCreateBy(typeFichier.getCreateBy());
+        typeFichierSlimDto.setDateCreation(typeFichier.getDateCreation());
+        typeFichierSlimDto.setLastModifiedBy(typeFichier.getLastModifiedBy());
+        typeFichierSlimDto.setDateMiseAjour(typeFichier.getDateMiseAjour());
+        return typeFichierSlimDto;
+    }
+
+    private ReferentielSlimDto referentielSlimDto(Referentiel referentiel) {
+        ReferentielSlimDto referentielSlimDto = new ReferentielSlimDto();
+        referentielSlimDto.setVersion(referentiel.getVersion());
+        referentielSlimDto.setDateGeneration(referentiel.getDateGeneration());
+        referentielSlimDto.setStatutReferentiel(referentiel.getStatutReferentiel());
+        referentielSlimDto.setDescription(referentiel.getDescription());
+        referentielSlimDto.setCreateBy(referentiel.getCreateBy());
+        referentielSlimDto.setDateCreation(referentiel.getDateCreation());
+        referentielSlimDto.setLastModifiedBy(referentiel.getLastModifiedBy());
+        referentielSlimDto.setDateMiseAjour(referentiel.getDateMiseAjour());
+        return referentielSlimDto;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/CriteriaEntityPersistedManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/CriteriaEntityPersistedManagerImpl.java
new file mode 100644
index 0000000..423d594
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/CriteriaEntityPersistedManagerImpl.java
@@ -0,0 +1,225 @@
+package com.megatim.fdxconsultation.core.impl.stats;
+
+import com.megatim.fdxcommons.core.ifaces.db.validators.CriteriaQueryValidator;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.BETWEEN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.EQUALS;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.GREATER_OR_EQUALS_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.GREATER_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.IN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.LIKE;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.LOWER_OR_EQUALS_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.LOWER_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.NOT_BETWEEN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.NOT_EQUALS;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.NOT_IN;
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.pojo.BetweenOperatorValues;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationValidationException;
+import com.megatim.fdxconsultation.core.ifaces.integration.ColumnDefinitionManager;
+import com.megatim.fdxconsultation.core.ifaces.stats.CriteriaEntityPersistedManager;
+import com.megatim.fdxconsultation.dao.ifaces.stats.CriteriaEntityPersistedDAO;
+import com.megatim.fdxconsultation.model.stats.CriteriaEntityPersisted;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class CriteriaEntityPersistedManagerImpl implements CriteriaEntityPersistedManager {
+
+    @EJB
+    private CriteriaEntityPersistedDAO dao;
+
+    @Inject
+    private ColumnDefinitionManager columnDefinitionManager;
+
+    @Inject
+    private CriteriaQueryValidator criteriaQueryValidator;
+
+    @Override
+    public CriteriaEntityPersistedDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public List<CriteriaEntityPersisted> subCriterias(Long id) {
+        return dao.subCriterias(id);
+    }
+
+    @Override
+    public CriteriaEntityPersisted constructCriteriaPersisted(String codeTypeFichier, String referentielVersion, CriteriaEntityFromView criterionFromView) {
+        Map<String, ColumnDefinition> columnDefinitionMap = columnDefinitionManager.getColumnsDefimitionMap(codeTypeFichier, referentielVersion);
+        return criteriaFromViewToCriteriaPersisted(criterionFromView, columnDefinitionMap);
+    }
+
+    @Override
+    public CriteriaEntityFromView criteriaEntityPersistedToCriteriaEntityFromView(CriteriaEntityPersisted persisted) {
+        CriteriaEntityFromView mainCriterion = new CriteriaEntityFromView();
+        List<CriteriaEntityPersisted> subCriterias = subCriterias(persisted.getId());
+        if (!subCriterias.isEmpty()) {
+            mainCriterion.setCriteriaLogicConnector(persisted.getCriteriaLogicConnector());
+            subCriterias.stream().forEach(c -> {
+                CriteriaEntityFromView criterionfromView = criteriaEntityPersistedToCriteriaEntityFromView(c);
+                mainCriterion.getSubCriterias().add(criterionfromView);
+            });
+        } else {
+            mainCriterion.setNomColonne(persisted.getNomColonne());
+            mainCriterion.setOperateur(persisted.getOperateur());
+            mainCriterion.setCriteriaValue(getCriteriaValue(persisted));
+        }
+        return mainCriterion;
+    }
+
+    private Object getCriteriaValue(CriteriaEntityPersisted persisted) {
+
+        if (persisted.getCriteriaDateListValue() != null && !persisted.getCriteriaDateListValue().isEmpty()) {
+            return persisted.getCriteriaDateListValue();
+
+        } else if (persisted.getCriteriaDateLowerBound() != null && persisted.getCriteriaDateUpperBound() != null) {
+            return new BetweenOperatorValues(persisted.getCriteriaDateLowerBound(), persisted.getCriteriaDateUpperBound());
+
+        } else if (persisted.getCriteriaDateValue() != null) {
+            return persisted.getCriteriaDateValue();
+
+        } else if (persisted.getCriteriaNumericListValue() != null && !persisted.getCriteriaNumericListValue().isEmpty()) {
+            return persisted.getCriteriaNumericListValue();
+
+        } else if (persisted.getCriteriaNumericLowerBound() != null && persisted.getCriteriaNumericUpperBound() != null) {
+            return new BetweenOperatorValues(persisted.getCriteriaNumericLowerBound(), persisted.getCriteriaNumericUpperBound());
+
+        } else if (persisted.getCriteriaNumericValue() != null) {
+            return persisted.getCriteriaNumericValue();
+
+        } else if (persisted.getCriteriaStringListValue() != null && !persisted.getCriteriaStringListValue().isEmpty()) {
+            return persisted.getCriteriaStringListValue();
+
+        } else if (persisted.getCriteriaStringLowerBound() != null && persisted.getCriteriaStringUpperBound() != null) {
+            return new BetweenOperatorValues(persisted.getCriteriaStringLowerBound(), persisted.getCriteriaStringUpperBound());
+
+        } else if (persisted.getCriteriaStringValue() != null) {
+            return persisted.getCriteriaStringValue();
+
+        } else {
+            return null;
+        }
+    }
+
+    private CriteriaEntityPersisted criteriaFromViewToCriteriaPersisted(
+            CriteriaEntityFromView criterion,
+            Map<String, ColumnDefinition> columnDefinitionMap
+    ) {
+
+        if (criterion == null) {
+            return null;
+        }
+
+        CriteriaEntityPersisted entityPersisted = new CriteriaEntityPersisted();
+        entityPersisted.setCriteriaLogicConnector(criterion.getCriteriaLogicConnector());
+
+        if (criterion.getSubCriterias() != null && !criterion.getSubCriterias().isEmpty()) {
+            for (CriteriaEntityFromView c : criterion.getSubCriterias()) {
+                CriteriaEntityPersisted ceP = criteriaFromViewToCriteriaPersisted(c, columnDefinitionMap);
+                ceP.setParent(entityPersisted);
+                entityPersisted.getSubCriterias().add(ceP);
+            }
+            return entityPersisted;
+
+        } else {
+
+            entityPersisted.setNomColonne(criterion.getNomColonne().toLowerCase());
+            entityPersisted.setOperateur(criterion.getOperateur());
+            ColumnDefinition columnDefinition = columnDefinitionMap.get(criterion.getNomColonne().toLowerCase());
+            setCorrectTypeForCriteriaValue(entityPersisted, criterion.getCriteriaValue(), columnDefinition.getTypeDonnee(), criterion.getOperateur());
+
+            return entityPersisted;
+        }
+    }
+
+    private void setCorrectTypeForCriteriaValue(CriteriaEntityPersisted entityPersisted, Object criteriaValue, String typeDonnee, Operateur operateur) {
+        switch (operateur) {
+            case EQUALS:
+            case NOT_EQUALS:
+            case GREATER_THAN:
+            case GREATER_OR_EQUALS_THAN:
+            case LOWER_THAN:
+            case LOWER_OR_EQUALS_THAN:
+                if (typeDonnee.equalsIgnoreCase(TypeDonnee.NUMERIQUE.getValue())) {
+                    entityPersisted.setCriteriaNumericValue((Number) criteriaValue);
+                } else if (typeDonnee.equalsIgnoreCase(TypeDonnee.ALPHANUMERIQUE.getValue())) {
+                    entityPersisted.setCriteriaStringValue(criteriaValue.toString());
+                } else if (typeDonnee.equalsIgnoreCase(TypeDonnee.DATE.getValue())) {
+                    entityPersisted.setCriteriaDateValue(LocalDateTime.parse(criteriaValue.toString()));
+                } else {
+                    throw new CommonApplicationValidationException("'" + typeDonnee + "' inconnu");
+                }
+                break;
+            case LIKE:
+                entityPersisted.setCriteriaStringValue(criteriaValue.toString());
+                break;
+
+            case BETWEEN:
+            case NOT_BETWEEN:
+                BetweenOperatorValues betweenOperatorValues = criteriaQueryValidator.getBetweenOperatorValues(criteriaValue);
+                if (betweenOperatorValues == null) {
+                    throw new CommonApplicationValidationException("La valeur du critère de l'opérateur '" + operateur + "'ne peut être null");
+                }
+                StringBuilder message = new StringBuilder();
+
+                if (betweenOperatorValues.getLowerBound() == null) {
+                    message.append("Borne inférieure manquante");
+                }
+                if (betweenOperatorValues.getUpperBound() == null) {
+                    message.append("\nBorne supérieure manquante");
+                }
+                if (message.length() > 0) {
+                    throw new CommonApplicationValidationException("Opérateur" + operateur + "' : " + message);
+                }
+                if (typeDonnee.equalsIgnoreCase(TypeDonnee.NUMERIQUE.getValue())) {
+                    entityPersisted.setCriteriaNumericLowerBound((Number) betweenOperatorValues.getLowerBound());
+                    entityPersisted.setCriteriaNumericUpperBound((Number) betweenOperatorValues.getUpperBound());
+                } else if (typeDonnee.equalsIgnoreCase(TypeDonnee.ALPHANUMERIQUE.getValue())) {
+                    entityPersisted.setCriteriaStringLowerBound(betweenOperatorValues.getLowerBound().toString());
+                    entityPersisted.setCriteriaStringUpperBound(betweenOperatorValues.getUpperBound().toString());
+                } else if (typeDonnee.equalsIgnoreCase(TypeDonnee.DATE.getValue())) {
+                    entityPersisted.setCriteriaDateLowerBound(LocalDateTime.parse(betweenOperatorValues.getLowerBound().toString()));
+                    entityPersisted.setCriteriaDateUpperBound(LocalDateTime.parse(betweenOperatorValues.getUpperBound().toString()));
+                } else {
+                    throw new CommonApplicationValidationException("'" + typeDonnee + "' inconnu");
+                }
+                break;
+
+            case IN:
+            case NOT_IN:
+                if (!(criteriaValue instanceof List)) {
+                    throw new CommonApplicationValidationException("Le criteriaValue de l'opérateur '" + operateur + "' doit être de type List");
+                }
+
+                if (typeDonnee.equalsIgnoreCase(TypeDonnee.NUMERIQUE.getValue())) {
+                    Set<Number> criteriaValues = ((List<Number>) criteriaValue).stream().collect(Collectors.toSet());
+                    entityPersisted.getCriteriaNumericListValue().addAll(criteriaValues);
+                } else if (typeDonnee.equalsIgnoreCase(TypeDonnee.ALPHANUMERIQUE.getValue())) {
+                    Set<String> criteriaValues = ((List<String>) criteriaValue).stream().collect(Collectors.toSet());
+                    entityPersisted.getCriteriaStringListValue().addAll(criteriaValues);
+                } else if (typeDonnee.equalsIgnoreCase(TypeDonnee.DATE.getValue())) {
+                    Set<LocalDateTime> criteriaValues = ((List<LocalDateTime>) criteriaValue).stream().collect(Collectors.toSet());
+                    entityPersisted.getCriteriaDateListValue().addAll(criteriaValues);
+                } else {
+                    throw new CommonApplicationValidationException("'" + typeDonnee + "' inconnu");
+                }
+                break;
+        }
+
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableConfigurationManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableConfigurationManagerImpl.java
new file mode 100644
index 0000000..5b67cee
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableConfigurationManagerImpl.java
@@ -0,0 +1,24 @@
+package com.megatim.fdxconsultation.core.impl.stats;
+
+import com.megatim.fdxconsultation.core.ifaces.stats.TableConfigurationManager;
+import com.megatim.fdxconsultation.dao.ifaces.stats.TableConfigurationDAO;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class TableConfigurationManagerImpl implements TableConfigurationManager {
+
+    @EJB
+    private TableConfigurationDAO dao;
+
+    @Override
+    public TableConfigurationDAO getDao() {
+        return dao;
+    }
+
+    
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordColumnManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordColumnManagerImpl.java
new file mode 100644
index 0000000..dd84565
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordColumnManagerImpl.java
@@ -0,0 +1,27 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.stats;
+
+import com.megatim.fdxconsultation.core.ifaces.stats.TableauBordColumnManager;
+import com.megatim.fdxconsultation.dao.ifaces.stats.TableauBordColumnDAO;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class TableauBordColumnManagerImpl implements TableauBordColumnManager {
+
+    @EJB
+    private TableauBordColumnDAO dao;
+
+    @Override
+    public TableauBordColumnDAO getDao() {
+        return dao;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordGlobalSearchManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordGlobalSearchManagerImpl.java
new file mode 100644
index 0000000..705918f
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordGlobalSearchManagerImpl.java
@@ -0,0 +1,25 @@
+package com.megatim.fdxconsultation.core.impl.stats;
+
+import com.megatim.fdxconsultation.core.ifaces.stats.TableauBordGlobalSearchManager;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithSearchEnityDAO;
+import com.megatim.fdxconsultation.dao.ifaces.stats.TableauBordGlobalSearchDAO;
+import com.megatim.fdxconsultation.model.searchentities.TableauBordGlobalSearch;
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class TableauBordGlobalSearchManagerImpl implements TableauBordGlobalSearchManager {
+
+    @EJB
+    private TableauBordGlobalSearchDAO dao;
+
+    @Override
+    public PaginationWithSearchEnityDAO<TableauBord, Long, TableauBordGlobalSearch> getPaginationDao() {
+        return dao;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordManagerImpl.java
new file mode 100644
index 0000000..35aa9df
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordManagerImpl.java
@@ -0,0 +1,316 @@
+package com.megatim.fdxconsultation.core.impl.stats;
+
+import com.megatim.fdxcommons.core.ifaces.helper.DataInMemoryHandler;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxcommons.tools.database.connection.DBConnection;
+import com.megatim.fdxcommons.tools.database.exceptions.BadQueryCriteriaException;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import com.megatim.fdxcommons.tools.database.tables.FdxTable;
+import com.megatim.fdxcommons.tools.database.tables.FdxTableColumns;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationValidationException;
+import com.megatim.fdxcommons.tools.exceptions.CommonRessourceNotFoundException;
+import com.megatim.fdxconsultation.core.ifaces.integration.ColumnDefinitionManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.ReferentielManager;
+import com.megatim.fdxconsultation.core.ifaces.stats.TableauBordManager;
+import com.megatim.fdxconsultation.core.impl.factory.FdxConsultationTableFactory;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithSearchEnityDAO;
+import com.megatim.fdxconsultation.dao.ifaces.stats.TableauBordDAO;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.stats.StatResultDto;
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import com.megatim.fdxconsultation.model.enums.TypeConfigurationTableauBord;
+import com.megatim.fdxconsultation.model.searchentities.TableauBordSearch;
+import com.megatim.fdxconsultation.model.stats.TableConfiguration;
+import com.megatim.fdxconsultation.model.stats.dto.TableauBordRequest;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import javax.annotation.Resource;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.naming.NamingException;
+import javax.sql.DataSource;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class TableauBordManagerImpl implements TableauBordManager {
+
+    @Resource(lookup = AppCommonContext.JNDI_NAME)
+    private DataSource dataSource;
+
+    @EJB
+    private TableauBordDAO dao;
+
+    @Inject
+    private DataInMemoryHandler dataInMemoryHandler;
+
+    @Inject
+    private ReferentielManager refManager;
+
+    @Inject
+    private ColumnDefinitionManager columnDefinitionManager;
+
+    @Override
+    public TableauBordDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public PaginationWithSearchEnityDAO<TableauBord, Long, TableauBordSearch> getPaginationDao() {
+        return dao;
+    }
+
+    @Override
+    public List<TableauBord> findByReferentiel(String referentielVersion) {
+        return getDao().findByReferentiel(referentielVersion);
+    }
+
+    @Override
+    public TableauBord findByUserAndTypeFichierAndReferentiel(Long userId, String codeTypeFichier, String referentielVersion) {
+        TableauBord tableauBord = getDao().findByUserAndTypeFichierAndReferentiel(userId, codeTypeFichier, referentielVersion);
+        if (tableauBord == null) {
+            throw new CommonRessourceNotFoundException("La ressource ayant le fichier " + codeTypeFichier + " et le référentiel " + referentielVersion + " est introuvable");
+        }
+        return tableauBord;
+    }
+
+    @Override
+    public Map<String, List<String>> userTableauBordToTypeFichiers(String userName) {
+        Map<String, List<String>> particpantToFichierDto = new HashMap<>();
+        dao.tableauBordToTypeFichiers(userName, dataInMemoryHandler.getDataInMemory().getReferentielEnCours().getVersion()).forEach(p -> {
+            String key = p.getCodeParticipant();
+            List<String> value = particpantToFichierDto.get(key);
+            if (value == null) {
+                value = new ArrayList<>();
+            }
+            value.add(p.getCodeFichier());
+            particpantToFichierDto.put(key, value);
+        });
+        return particpantToFichierDto;
+    }
+
+    @Override
+    public Map<String, List<String>> globalTableauBordToTypeFichiers() {
+        Map<String, List<String>> particpantToFichierDto = new HashMap<>();
+        dao
+                .tableauBordToTypeFichiers(TypeConfigurationTableauBord.GLOBAL, dataInMemoryHandler.getDataInMemory().getReferentielEnCours().getVersion())
+                .forEach(p -> {
+                    String key = p.getCodeParticipant();
+                    List<String> value = particpantToFichierDto.get(key);
+                    if (value == null) {
+                        value = new ArrayList<>();
+                    }
+                    value.add(p.getCodeFichier());
+                    particpantToFichierDto.put(key, value);
+                });
+        return particpantToFichierDto;
+    }
+
+    @Override
+    public List<TableauBord> deleteUserTableauBord(User user) {
+        //Tous les tableaux de bord associés à l'utilisateur user
+        List<TableauBord> tableauxBords = getDao().findByUser(user.getId(), refManager.getReferentielEnCours().getVersion());
+        List<TableauBord> tableauxBordsDeleted = new ArrayList<>();
+
+        //TypeFichiers auxquels l'utilisateur user à accès
+        Map<String, TypeFichier> typeFichiersMap = user.getTypeFichiers()
+                .stream()
+                .collect(Collectors.toMap(TypeFichier::getCode, Function.identity()));
+
+        for (TableauBord t : tableauxBords) {
+            //Supprimer les tableaux de bord dont le typefichier n'est plus accessible à user
+            if (!typeFichiersMap.containsKey(t.getTypeFichier().getCode())) {
+                getDao().delete(t);
+                tableauxBordsDeleted.add(t);
+            }
+        }
+        return tableauxBordsDeleted;
+    }
+
+    @Override
+    public TableauBord findByTypeConfigurationAndReferentiel(String codeTypeFichier, String referentielVersion, TypeConfigurationTableauBord typeConfiguration) {
+        return getDao().findByTypeConfigurationAndReferentiel(codeTypeFichier, referentielVersion, typeConfiguration);
+    }
+
+    @Override
+    public TableauBord save(TableauBordRequest tableauBordRequest) {
+
+        try ( Connection connection = new DBConnection(dataSource).connection()) {
+
+            String codeTypeFichier = tableauBordRequest.getTypeFichier().getCode();
+            String referentielVersion = tableauBordRequest.getReferentiel().getVersion();
+
+            FdxTable fdxTable = FdxConsultationTableFactory.createTable(codeTypeFichier, referentielVersion, connection);
+            List<ColumnDefinition> columnDefinitions = fdxTable.tableDefinition(connection).tableDefinition().getColumnDefinitions();
+            FdxTableColumns fdxTableColumns = fdxTable.tableColumns(connection);
+
+            stopIfRequestIsNotCorrect(codeTypeFichier, referentielVersion, tableauBordRequest, columnDefinitions);
+
+            TableauBord tableauBord = new ConvertedTableauBord(tableauBordRequest, columnDefinitions, fdxTableColumns).tableauBord();
+            tableauBord.setTypeConfiguration(TypeConfigurationTableauBord.GLOBAL);
+            return save(tableauBord);
+
+        } catch (BadQueryCriteriaException | LocalDateTimeValueParseError | SQLException | NamingException ex) {
+            throw new CommonApplicationValidationException(ex.getMessage());
+        }
+
+    }
+
+    @Override
+    public TableauBord save(User user, TableauBordRequest tableauBordRequest) {
+
+        try ( Connection connection = new DBConnection(dataSource).connection()) {
+
+            String codeTypeFichier = tableauBordRequest.getTypeFichier().getCode();
+            String referentielVersion = tableauBordRequest.getReferentiel().getVersion();
+
+            FdxTable fdxTable = FdxConsultationTableFactory.createTable(codeTypeFichier, referentielVersion, connection);
+            List<ColumnDefinition> columnDefinitions = fdxTable.tableDefinition(connection).tableDefinition().getColumnDefinitions();
+            FdxTableColumns fdxTableColumns = fdxTable.tableColumns(connection);
+
+            stopIfRequestIsNotCorrect(user.getId(), codeTypeFichier, referentielVersion, tableauBordRequest, columnDefinitions);
+
+            TableauBord tableauBord = new ConvertedTableauBord(tableauBordRequest, columnDefinitions, fdxTableColumns).tableauBord();
+            tableauBord.setTypeConfiguration(TypeConfigurationTableauBord.USER_SPECIFIC);
+            tableauBord.setUser(user);
+
+            TableauBord entity = save(tableauBord);
+            return entity;
+
+        } catch (BadQueryCriteriaException | LocalDateTimeValueParseError | SQLException | NamingException ex) {
+            throw new CommonApplicationValidationException(ex.getMessage());
+        }
+    }
+
+    @Override
+    public void update(Long id, TableauBordRequest tableauBordRequest) {
+
+        try ( Connection connection = new DBConnection(dataSource).connection()) {
+
+            TableauBord tableauBord = get(id);
+
+            FdxTable fdxTable = FdxConsultationTableFactory.createTable(
+                    tableauBord.getTypeFichier().getCode(),
+                    tableauBord.getReferentiel().getVersion(),
+                    connection
+            );
+            List<ColumnDefinition> columnDefinitions = fdxTable.tableDefinition(connection).tableDefinition().getColumnDefinitions();
+            FdxTableColumns fdxTableColumns = fdxTable.tableColumns(connection);
+
+            stopIfTableauBordRequestIncorrect(tableauBordRequest, columnDefinitions);
+
+            TableauBord convertedTableauBord
+                    = new ConvertedTableauBord(tableauBordRequest, columnDefinitions, fdxTableColumns).tableauBord();
+
+            tableauBord.getTableConfigurations().clear();
+            for (TableConfiguration tableConfiguration : convertedTableauBord.getTableConfigurations()) {
+                tableauBord.getTableConfigurations().add(tableConfiguration);
+                tableConfiguration.setTableauBord(tableauBord);
+            }
+
+            tableauBord.setDescription(convertedTableauBord.getDescription());
+
+            save(tableauBord);
+
+        } catch (BadQueryCriteriaException | LocalDateTimeValueParseError | SQLException | NamingException ex) {
+            throw new CommonApplicationValidationException(ex.getMessage());
+        }
+    }
+
+    @Override
+    public TableauBord get(Long id) {
+        TableauBord tableauBord = getById(id);
+        if (tableauBord == null) {
+            throw new CommonRessourceNotFoundException("La ressource ayant l'identifiant " + id + " est introuvable");
+        }
+        return tableauBord;
+    }
+
+    @Override
+    public void delete(Long id) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public StatResultDto getDatas(User user, String referentielVersion, String codeTypeFichier) {
+        try {
+            return new TableauBordResult(specificTableauBord(user, codeTypeFichier, referentielVersion), dataSource).result();
+        } catch (Exception ex) {
+            throw new CommonApplicationValidationException(ex.getMessage());
+        }
+    }
+
+    @Override
+    public StatResultDto getDatas(String referentielVersion, String codeTypeFichier) {
+        try {
+            return new TableauBordResult(globalTableauBord(codeTypeFichier, referentielVersion), dataSource).result();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationValidationException(ex.getMessage());
+        }
+    }
+
+    private TableauBord globalTableauBord(String codeTypeFichier, String referentielVersion) {
+        TableauBord tableauBord = getDao().findGlobalTableauBord(codeTypeFichier, referentielVersion);
+        if (tableauBord == null) {
+            throw new CommonRessourceNotFoundException("La ressource ayant le fichier " + codeTypeFichier + " et le référentiel " + referentielVersion + " est introuvable");
+        }
+        return tableauBord;
+    }
+
+    private TableauBord specificTableauBord(User user, String codeTypeFichier, String referentielVersion) {
+        TableauBord tableauBord = getDao().findSpecificTableauBord(user.getId(), codeTypeFichier, referentielVersion);
+        if (tableauBord == null) {
+            throw new CommonRessourceNotFoundException("La ressource ayant le fichier " + codeTypeFichier + " et le référentiel " + referentielVersion + " est introuvable");
+        }
+        return tableauBord;
+    }
+
+    private void stopIfRequestIsNotCorrect(String codeTypeFichier, String referentielVersion, TableauBordRequest tableauBordRequest, List<ColumnDefinition> columnDefinitions) {
+        stopIfTypeFichierNotStructured(codeTypeFichier, referentielVersion);
+        stopIfTableauBordExist(codeTypeFichier, referentielVersion);
+        stopIfTableauBordRequestIncorrect(tableauBordRequest, columnDefinitions);
+    }
+
+    private void stopIfRequestIsNotCorrect(Long userId, String codeTypeFichier, String referentielVersion, TableauBordRequest tableauBordRequest, List<ColumnDefinition> columnDefinitions) {
+        stopIfTypeFichierNotStructured(codeTypeFichier, referentielVersion);
+        stopIfTableauBordExist(userId, codeTypeFichier, referentielVersion);
+        stopIfTableauBordRequestIncorrect(tableauBordRequest, columnDefinitions);
+    }
+
+    private void stopIfTableauBordRequestIncorrect(TableauBordRequest tableauBordRequest, List<ColumnDefinition> columnDefinitions) throws CommonApplicationValidationException {
+        String tableauBordError = new TableauBordRequestError(tableauBordRequest, columnDefinitions).error();
+        if (!tableauBordError.isEmpty()) {
+            throw new CommonApplicationValidationException(tableauBordError);
+        }
+    }
+
+    private void stopIfTableauBordExist(Long userId, String codeTypeFichier, String referentielVersion) {
+        if (dao.findSpecificTableauBord(userId, codeTypeFichier, referentielVersion) != null) {
+            throw new CommonApplicationValidationException("Une configuration existe déjà pour ce typefichier, cet utilisateur et ce référentiel");
+        }
+    }
+
+    private void stopIfTableauBordExist(String codeTypeFichier, String referentielVersion) {
+        if (dao.findGlobalTableauBord(codeTypeFichier, referentielVersion) != null) {
+            throw new CommonApplicationValidationException("Une configuration existe déjà pour ce typefichier, cet utilisateur et ce référentiel");
+        }
+    }
+
+    private void stopIfTypeFichierNotStructured(String codeTypeFichier, String referentielVersion) {
+        if (columnDefinitionManager.findByReferentielAndTypeFichier(referentielVersion, codeTypeFichier).isEmpty()) {
+            throw new CommonApplicationValidationException("Le type de fichier ciblé n'est pas structuré");
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordRequestError.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordRequestError.java
new file mode 100644
index 0000000..0ca2619
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordRequestError.java
@@ -0,0 +1,83 @@
+package com.megatim.fdxconsultation.core.impl.stats;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxconsultation.model.dto.stats.TableConfigurationDto;
+import com.megatim.fdxconsultation.model.dto.stats.TableauBordColumnDto;
+import com.megatim.fdxcommons.model.enumeration.FonctionAggregation;
+import com.megatim.fdxconsultation.model.enums.TypeResultatConfiguration;
+import com.megatim.fdxconsultation.model.stats.dto.TableauBordRequest;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class TableauBordRequestError {
+
+    private final Map<String, ColumnDefinition> columnNameToColumnDefinitions;
+    private final TableauBordRequest tableauBordRequest;
+
+    public TableauBordRequestError(TableauBordRequest tableauBordRequest, List<ColumnDefinition> columnDefinitions) {
+        this.tableauBordRequest = tableauBordRequest;
+        this.columnNameToColumnDefinitions = columnDefinitions
+                .stream()
+                .collect(Collectors.toMap(c -> c.getName(), c -> c));
+    }
+
+    public String error() {
+
+        int index = 1;
+
+        for (TableConfigurationDto configuration : tableauBordRequest.getTableConfigurations()) {
+
+            if (!configuration.getFonctionAggregation().equals(FonctionAggregation.COUNT)) {
+
+                if (configuration.getTargetedColumn() == null) {
+                    return "La colonne d'aggregation est obligatoire pour la configuration " + index;
+                }
+
+                if (!hasColumnDefinition(configuration.getTargetedColumn())) {
+                    return "La colonne d'aggregation n'est pas présente dans la définition de ce fichier pour la configuration " + index;
+                }
+
+                if (!isNumeric(configuration.getTargetedColumn())) {
+                    return "La colonne d'aggregation n'est pas numérique " + index;
+                }
+            }
+
+            if (configuration.getTypeResultatConfiguration().equals(TypeResultatConfiguration.HISTOGRAMME)
+                    || configuration.getTypeResultatConfiguration().equals(TypeResultatConfiguration.CAMEMBERT)) {
+
+                if (configuration.getGroupingColumns() == null || configuration.getGroupingColumns().isEmpty()) {
+                    return "Il faut au moins une colonne de groupage pour la configuration " + index;
+                }
+
+                for (TableauBordColumnDto column : configuration.getGroupingColumns()) {
+                    if (!hasColumnDefinition(column)) {
+                        //ERREUR LA COLONNE D'AGGREGATION N'EST PAS DEFINIT POUR CE TYPE DE FICHIER
+                        return "La colonne de groupage " + column.getName() + " n'appartient pas à la définition du fichier pour la configuration " + index;
+                    }
+                }
+
+            }
+
+            index++;
+
+        }
+
+        return "";
+    }
+
+    private boolean hasColumnDefinition(TableauBordColumnDto column) {
+        return columnNameToColumnDefinitions.containsKey(column.getName());
+    }
+
+    private boolean isNumeric(TableauBordColumnDto column) {
+        return column.getTypeDonnee().equals(TypeDonnee.NUMERIQUE)
+                || column.getTypeDonnee().equals(TypeDonnee.DECIMAL);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordResult.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordResult.java
new file mode 100644
index 0000000..47e1f5f
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordResult.java
@@ -0,0 +1,124 @@
+package com.megatim.fdxconsultation.core.impl.stats;
+
+import com.megatim.fdxcommons.model.enumeration.FonctionAggregation;
+import com.megatim.fdxcommons.tools.database.connection.DBConnection;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.tables.FdxTable;
+import com.megatim.fdxcommons.tools.utils.CriteriaEntityFromViewToQueryCriterion;
+import com.megatim.fdxconsultation.core.impl.factory.FdxConsultationTableFactory;
+import com.megatim.fdxconsultation.model.dto.stats.StatListResult;
+import com.megatim.fdxconsultation.model.dto.stats.StatResultDto;
+import com.megatim.fdxconsultation.model.dto.stats.StatScalarResult;
+import com.megatim.fdxconsultation.model.stats.TableConfiguration;
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.sql.DataSource;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class TableauBordResult {
+
+    private final TableauBord tableauBord;
+    private final DataSource dataSource;
+
+    public TableauBordResult(TableauBord tableauBord, DataSource dataSource) {
+        this.tableauBord = tableauBord;
+        this.dataSource = dataSource;
+    }
+
+    public StatResultDto result() throws SQLException, Exception {
+
+        StatResultDto statResultDto = new StatResultDto();
+        statResultDto.setDescription(tableauBord.getDescription());
+
+        try ( Connection connection = new DBConnection(dataSource).connection()) {
+            FdxTable fdxTable = FdxConsultationTableFactory.createTable(
+                    tableauBord.getTypeFichier().getCode(),
+                    tableauBord.getReferentiel().getVersion(),
+                    connection
+            );
+
+            for (TableConfiguration tableConfiguration : tableauBord.getTableConfigurations()) {
+
+                List<String> groupingColumns = groupingColumns(tableConfiguration);
+                FonctionAggregation fonctionAggregation = tableConfiguration.getFonctionAggregation();
+
+                List<String[]> results
+                        = tableConfiguration.getFonctionAggregation().equals(FonctionAggregation.COUNT)
+                        ? fdxTable.count(queryCriterion(tableConfiguration), connection, groupingColumns)
+                        : fdxTable.aggregate(connection,
+                                tableConfiguration.getTargetedColumn().getName(),
+                                groupingColumns, fonctionAggregation,
+                                queryCriterion(tableConfiguration)
+                        );
+
+                if (!groupingColumns.isEmpty()) { //GROUPE
+
+                    StatListResult statListResult = new StatListResult();
+                    statListResult.setTypeResultatConfiguration(tableConfiguration.getTypeResultatConfiguration());
+                    statListResult.setLibelle(tableConfiguration.getLibelle());
+
+                    for (String[] result : results) {
+
+                        StatScalarResult statScalarResult = new StatScalarResult();
+                        statScalarResult.setValue(result[0]);
+
+                        StringBuilder libelle = new StringBuilder();
+                        for (int i = 1; i < result.length; i++) { //Colonnes d'aggrégration
+                            libelle.append(result[i]);
+                            if ((i + 1) < result.length) {
+                                libelle.append(" - ");
+                            }
+                        }
+
+                        statScalarResult.setLibelle(libelle.toString());
+                        statListResult.getValues().add(statScalarResult);
+
+                    }
+
+                    statResultDto.getListResults().add(statListResult);
+
+                } else { //ELEMENT
+
+                    if (!results.isEmpty()) {
+
+                        String[] result = results.get(0);
+
+                        StatScalarResult statScalarResult = new StatScalarResult();
+                        statScalarResult.setLibelle(tableConfiguration.getLibelle());
+                        statScalarResult.setColor(tableConfiguration.getColor());
+                        statScalarResult.setValue(result[0]);
+
+                        statResultDto.getScalarResults().add(statScalarResult);
+
+                    }
+
+                }
+
+            }
+        }
+        return statResultDto;
+
+    }
+
+    private QueryCriterion queryCriterion(TableConfiguration tableConfiguration) {
+        return new CriteriaEntityFromViewToQueryCriterion(
+                new ConvertedCriteriaEntityFromView(
+                        tableConfiguration.getCriterion()
+                ).criteriaEntityFromView()
+        ).queryCriterion();
+    }
+
+    private List<String> groupingColumns(TableConfiguration tableConfiguration) {
+        return tableConfiguration
+                .getGroupingColumns()
+                .stream()
+                .map(c -> c.getName())
+                .collect(Collectors.toList());
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordUserSpecificSearchManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordUserSpecificSearchManagerImpl.java
new file mode 100644
index 0000000..d518b4e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/stats/TableauBordUserSpecificSearchManagerImpl.java
@@ -0,0 +1,25 @@
+package com.megatim.fdxconsultation.core.impl.stats;
+
+import com.megatim.fdxconsultation.core.ifaces.stats.TableauBordUserSpecificSearchManager;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithSearchEnityDAO;
+import com.megatim.fdxconsultation.dao.ifaces.stats.TableauBordUserSpecificSearchDAO;
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import com.megatim.fdxconsultation.model.searchentities.TableauBordSpecificSearch;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class TableauBordUserSpecificSearchManagerImpl implements TableauBordUserSpecificSearchManager {
+
+    @EJB
+    private TableauBordUserSpecificSearchDAO dao;
+
+    @Override
+    public PaginationWithSearchEnityDAO<TableauBord, Long, TableauBordSpecificSearch> getPaginationDao() {
+        return dao;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/supervision/AgentConfigurationEntityManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/supervision/AgentConfigurationEntityManagerImpl.java
new file mode 100644
index 0000000..86a8b1e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/supervision/AgentConfigurationEntityManagerImpl.java
@@ -0,0 +1,32 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.supervision;
+
+import com.megatim.fdxconsultation.core.ifaces.supervision.AgentConfigurationEntityManager;
+import com.megatim.fdxconsultation.dao.ifaces.supervision.AgentConfigurationEntityDAO;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class AgentConfigurationEntityManagerImpl implements AgentConfigurationEntityManager {
+
+    @Inject
+    private AgentConfigurationEntityDAO dao;
+
+    @Override
+    public AgentConfigurationEntityDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public int archiveAgentConfiguration(String code) {
+        return dao.archiveAgentConfiguration(code);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/supervision/StandaloneServerStateEntityManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/supervision/StandaloneServerStateEntityManagerImpl.java
new file mode 100644
index 0000000..60d0c62
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/supervision/StandaloneServerStateEntityManagerImpl.java
@@ -0,0 +1,71 @@
+package com.megatim.fdxconsultation.core.impl.supervision;
+
+import com.fdx.messaging.common.StandaloneServerState;
+import com.megatim.fdxconsultation.core.ifaces.supervision.AgentConfigurationEntityManager;
+import com.megatim.fdxconsultation.core.ifaces.supervision.StandaloneServerStateEntityManager;
+import com.megatim.fdxconsultation.dao.ifaces.supervision.StandaloneServerStateEntityDAO;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.model.supervision.StandaloneServerStateEntity;
+import com.megatim.fdxconsultation.model.supervision.StatutConfiguration;
+import javax.annotation.PostConstruct;
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author ASUS
+ */
+@ApplicationScoped
+public class StandaloneServerStateEntityManagerImpl implements StandaloneServerStateEntityManager {
+
+    @Inject
+    private StandaloneServerStateEntityDAO dao;
+
+    @Inject
+    private MapStructMapper mapper;
+
+    @Inject
+    private AgentConfigurationEntityManager agentConfigurationManager;
+
+    private StandaloneServerStateEntity standaloneServerStateEntity;
+
+    @PostConstruct
+    public void init() {
+        standaloneServerStateEntity = dao.getCurrentStandaloneServerStateEntity();
+    }
+
+    @Override
+    public StandaloneServerStateEntityDAO getDao() {
+        return dao;
+    }
+
+    @Override
+    public StandaloneServerStateEntity persistStandaloneConfigurationStateEntity(StandaloneServerState standaloneServerState) {
+
+        StandaloneServerStateEntity serverStateEntity = mapper.standaloneServerStateToStandaloneServerStateEntity(standaloneServerState);
+
+        if (serverStateEntity != null) {
+
+            dao.archiveServerState();
+
+            if (serverStateEntity.getAgentConfigurations() != null && !serverStateEntity.getAgentConfigurations().isEmpty()) {
+                serverStateEntity.getAgentConfigurations().stream().forEach(a -> {
+                    agentConfigurationManager.archiveAgentConfiguration(a.getAgentCode());
+                    a.setStandaloneServerState(serverStateEntity);
+                    a.setStatutConfiguration(StatutConfiguration.EN_COURS);
+                });
+            }
+
+            serverStateEntity.setStatutConfiguration(StatutConfiguration.EN_COURS);
+            standaloneServerStateEntity = save(serverStateEntity);
+            return standaloneServerStateEntity;
+        }
+
+        return null;
+    }
+
+    @Override
+    public StandaloneServerStateEntity getCurrentStandaloneServerStateEntity() {
+        return standaloneServerStateEntity;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/utils/CriteriaEntitySearchUtil.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/utils/CriteriaEntitySearchUtil.java
new file mode 100644
index 0000000..6d4d30d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/utils/CriteriaEntitySearchUtil.java
@@ -0,0 +1,103 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.utils;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.search.SearchColumn;
+import com.megatim.fdxcommons.tools.utils.SqlUtilities;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+import java.util.Collections;
+
+/**
+ *
+ * @author ASUS
+ */
+public class CriteriaEntitySearchUtil {
+
+    private CriteriaEntitySearchUtil() {
+
+    }
+
+    public static List<SearchColumn> getSearchColumns(Class<?> classe) {
+        List<SearchColumn> searchColumns = new ArrayList<>();
+        List<Field> fields = Arrays.asList(classe.getDeclaredFields());
+
+        for (Field f : fields) {
+            CriteriaEntitySearch searchAnn = f.getAnnotation(CriteriaEntitySearch.class);
+            if (searchAnn != null && searchAnn.visible()) {
+                SearchColumn searchColumn = new SearchColumn();
+                searchColumn.setLibelle(searchAnn.libelle());
+                searchColumn.setRang(searchAnn.rang());
+                searchColumn.setFieldName(searchAnn.fieldName() == null || searchAnn.fieldName().isEmpty() ? f.getName() : searchAnn.fieldName());
+
+                TypeDonnee typeDonnee = getTypeDonnee(f, searchAnn);
+
+                if (typeDonnee != null) {
+                    searchColumn.setTypeDonnee(typeDonnee);
+                    searchColumns.add(searchColumn);
+
+                    if (typeDonnee.equals(TypeDonnee.ENUM)) {
+                        List<String> valuesOfEnum = new ArrayList<>();
+                        Class<? extends Enum> enumClasse = (Class<? extends Enum>) f.getType();
+                        List<Enum> enums = Arrays.asList(enumClasse.getEnumConstants());
+
+                        enums.stream().forEach(e -> valuesOfEnum.add(e.toString()));
+                        searchColumn.setValuesOfEnum(valuesOfEnum);
+                    }
+                }
+
+            }
+        }
+        Collections.sort(searchColumns, (SearchColumn s1, SearchColumn s2) -> Integer.valueOf(s1.getRang()).compareTo(s2.getRang()));
+        return searchColumns;
+    }
+
+    private static TypeDonnee getTypeDonnee(Field field, CriteriaEntitySearch searchAnn) {
+        Class<?> fieldClass = field.getType();
+        TypeDonnee typeDonnee = null;
+
+        if (fieldClass.isPrimitive()) {
+            typeDonnee = SqlUtilities.typeDonneeFromJavaClass(fieldClass);
+
+        } else if (fieldClass.isEnum()) {
+            typeDonnee = TypeDonnee.ENUM;
+
+        } else if (!fieldClass.isInterface() && !Collection.class.isAssignableFrom(fieldClass) && !Map.class.isAssignableFrom(fieldClass)) {
+            String[] fieldPath = searchAnn.fieldName().split("\\.");
+
+            if (fieldPath.length < 2) {
+                typeDonnee = SqlUtilities.typeDonneeFromJavaClass(fieldClass);
+            } else {
+                typeDonnee = SqlUtilities.typeDonneeFromJavaClass(getFieldType(fieldClass, Arrays.copyOfRange(fieldPath, 1, fieldPath.length)));
+            }
+        }
+
+        return typeDonnee;
+    }
+
+    private static Class<?> getFieldType(Class<?> classe, String[] fieldPath) {
+        String fieldName = fieldPath[0];
+        List<Field> fields = Arrays.asList(classe.getDeclaredFields());
+        Optional<Field> optField = fields.stream().filter(f -> f.getName().equals(fieldName)).findFirst();
+
+        if (optField.isPresent()) {
+            Field field = optField.get();
+            if (fieldPath.length == 1) {
+                return field.getType();
+            } else {
+                return getFieldType(field.getType(), Arrays.copyOfRange(fieldPath, 1, fieldPath.length));
+            }
+        } else {
+            return null;
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/utils/FdxTableUtils.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/utils/FdxTableUtils.java
new file mode 100644
index 0000000..0431f29
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/utils/FdxTableUtils.java
@@ -0,0 +1,38 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.core.impl.utils;
+
+import com.megatim.commons.tools.exceptions.ApplicationServerException;
+import com.megatim.fdxcommons.model.pojo.PageData;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.queries.metadata.SelectQueryResult;
+import com.megatim.fdxcommons.tools.database.tables.FdxTableRow;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author ASUS
+ */
+public class FdxTableUtils {
+
+    private FdxTableUtils() {
+
+    }
+
+    public static List<Map<String, Object>> fdxTableRowToListMap(List<FdxTableRow> rows) {
+        return rows
+                .stream()
+                .map(r -> {
+                    Map<String, Object> result = new HashMap<>();
+                    r.getDataColumns().forEach(column -> result.put(column.getName(), column.getValue()));
+                    return result;
+                })
+                .collect(Collectors.toList());
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/.gitignore b/fdx-consultation/fdxconsultation-dao-ifaces/.gitignore
new file mode 100644
index 0000000..b24d71e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/.gitignore
@@ -0,0 +1,50 @@
+# These are some examples of commonly ignored file patterns.
+# You should customize this list as applicable to your project.
+# Learn more about .gitignore:
+#     https://www.atlassian.com/git/tutorials/saving-changes/gitignore
+
+# Node artifact files
+node_modules/
+dist/
+
+# Compiled Java class files
+*.class
+
+# Compiled Python bytecode
+*.py[cod]
+
+# Log files
+*.log
+
+# Package files
+*.jar
+
+# Maven
+target/
+dist/
+
+# JetBrains IDE
+.idea/
+
+# Unit test reports
+TEST*.xml
+
+# Generated by MacOS
+.DS_Store
+
+# Generated by Windows
+Thumbs.db
+
+# Applications
+*.app
+*.exe
+*.war
+
+# Large media files
+*.mp4
+*.tiff
+*.avi
+*.flv
+*.mov
+*.wmv
+
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/nb-configuration.xml b/fdx-consultation/fdxconsultation-dao-ifaces/nb-configuration.xml
new file mode 100644
index 0000000..a65c451
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/nb-configuration.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+    <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+        <!--
+Properties that influence various parts of the IDE, especially code formatting and the like. 
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+        <netbeans.hint.jdkPlatform>JDK_1.8</netbeans.hint.jdkPlatform>
+    </properties>
+</project-shared-configuration>
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/pom.xml b/fdx-consultation/fdxconsultation-dao-ifaces/pom.xml
new file mode 100644
index 0000000..b4ae8c2
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/pom.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+        <groupId>com.megatim.fdxconsultation</groupId>
+        <artifactId>fdxconsultation</artifactId>
+        <version>1.0</version>
+    </parent>
+    
+    <groupId>com.megatim.fdxconsultation.dao.ifaces</groupId>
+    <artifactId>fdxconsultation-dao-ifaces</artifactId>
+    <packaging>jar</packaging>
+    
+    <properties>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
+        <jakartaee>8.0</jakartaee>
+    </properties>
+    
+    <dependencies>
+        <dependency>
+            <groupId>com.megatim.fdxconsultation.model</groupId>
+            <artifactId>fdxconsultation-model</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>javax</groupId>
+            <artifactId>javaee-api</artifactId>
+            <version>${jakartaee}</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+        <dependency>
+            <groupId>com.bekosoftware</groupId>
+            <artifactId>genericDAOLayer</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+        <dependency>
+            <groupId>com.megatimgroup</groupId>
+            <artifactId>mgt-commons-tools</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+        <dependency>
+            <groupId>org.hibernate.validator</groupId>
+            <artifactId>hibernate-validator</artifactId>
+            <version>6.0.13.Final</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <compilerArguments>
+                        <endorseddirs>${endorsed.dir}</endorseddirs>
+                    </compilerArguments>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <version>2.3</version>
+                <configuration>
+                    <failOnMissingWebXml>false</failOnMissingWebXml>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>2.6</version>
+                <executions>
+                    <execution>
+                        <phase>validate</phase>
+                        <goals>
+                            <goal>copy</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${endorsed.dir}</outputDirectory>
+                            <silent>true</silent>
+                            <artifactItems>
+                                <artifactItem>
+                                    <groupId>javax</groupId>
+                                    <artifactId>javaee-api</artifactId>
+                                    <version>${jakartaee}</version>
+                                    <type>jar</type>
+                                </artifactItem>
+                            </artifactItems>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+    <name>fdxconsultation-dao-ifaces</name>
+</project>
\ No newline at end of file
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/abstracts/CustomDAOWithCriteriaEntityIfaces.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/abstracts/CustomDAOWithCriteriaEntityIfaces.java
new file mode 100644
index 0000000..736cf9d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/abstracts/CustomDAOWithCriteriaEntityIfaces.java
@@ -0,0 +1,76 @@
+package com.megatim.fdxconsultation.dao.ifaces.abstracts;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.tools.database.tables.dto.JpqlQueryElement;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxcommons.tools.database.queries.metadata.jpql.JpqlQueryParam;
+import com.megatim.fdxcommons.tools.database.tables.JpqlTable;
+import java.util.List;
+import javax.persistence.EntityGraph;
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface CustomDAOWithCriteriaEntityIfaces<T, ID> {
+
+    default T save(T entity) {
+        return getEntityManager().merge(entity);
+    }
+
+    default void delete(T entity) {
+        getEntityManager().remove(entity);
+    }
+
+    public Class<T> getManagedEntityClass();
+
+    public EntityManager getEntityManager();
+
+    public T getById(ID id);
+
+    public default List<T> findAll(CriteriaEntityFromView criterion, List<String> fetchEagerFields, List<OrderByDefinition> orderByFields) throws Exception {
+        EntityGraph<T> entityGraph = getEntityManager().createEntityGraph(getManagedEntityClass());
+        fetchEagerFields.stream().forEach(f -> entityGraph.addAttributeNodes(f));
+        JpqlQueryElement jpqlQueryElt = new JpqlTable(criterion, getManagedEntityClass()).selectQuery(orderByFields);
+        System.out.println("****************** query " + jpqlQueryElt.getQuery());
+        Query query = getEntityManager().createQuery(jpqlQueryElt.getQuery());
+        setRealParams(query, jpqlQueryElt.getParameters());
+        query.setHint("javax.persistence.loadgraph", entityGraph);
+
+        return query.getResultList();
+    }
+
+    public default long count(CriteriaEntityFromView criterion) throws Exception {
+        JpqlQueryElement jpqlQueryElt = new JpqlTable(criterion, getManagedEntityClass()).countQuery();
+        Query query = getEntityManager().createQuery(jpqlQueryElt.getQuery());
+        System.out.println("****************** query " + jpqlQueryElt.getQuery());
+        setRealParams(query, jpqlQueryElt.getParameters());
+
+        return (long) query.getSingleResult();
+    }
+
+    public default List<T> findWithPagination(CriteriaEntityFromView criterion, List<String> fetchEagerFields, List<OrderByDefinition> orderByFields, Integer pageNumber, Integer pageSize) throws Exception {
+        EntityGraph<T> entityGraph = getEntityManager().createEntityGraph(getManagedEntityClass());
+        fetchEagerFields.stream().forEach(f -> entityGraph.addAttributeNodes(f));
+        JpqlQueryElement jpqlQueryElt = new JpqlTable(criterion, getManagedEntityClass()).selectQuery(orderByFields);
+        System.out.println("****************** query " + jpqlQueryElt.getQuery());
+        Query query = getEntityManager().createQuery(jpqlQueryElt.getQuery());
+        setRealParams(query, jpqlQueryElt.getParameters());
+
+        query.setHint("javax.persistence.loadgraph", entityGraph);
+        query.setFirstResult((pageNumber - 1) * pageSize);
+        query.setMaxResults(pageSize);
+
+        return query.getResultList();
+    }
+
+    public default void setRealParams(Query query, List<JpqlQueryParam> params) {
+        int index = 1;
+        for (JpqlQueryParam p : params) {
+            query.setParameter(index, p.getParamValue());
+            index++;
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/abstracts/PaginationWithCriteriaEntityDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/abstracts/PaginationWithCriteriaEntityDAO.java
new file mode 100644
index 0000000..6989390
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/abstracts/PaginationWithCriteriaEntityDAO.java
@@ -0,0 +1,65 @@
+package com.megatim.fdxconsultation.dao.ifaces.abstracts;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.tools.database.tables.dto.JpqlQueryElement;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryParam;
+import com.megatim.fdxcommons.tools.database.queries.metadata.jpql.JpqlQueryParam;
+import com.megatim.fdxcommons.tools.database.tables.JpqlTable;
+import java.util.List;
+import javax.persistence.EntityGraph;
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface PaginationWithCriteriaEntityDAO<T, ID> {
+
+    public Class<T> getManagedEntityClass();
+
+    public EntityManager getEntityManager();
+
+    public default long count(CriteriaEntityFromView criterion) throws Exception {
+        JpqlQueryElement jpqlQueryElt = new JpqlTable(criterion, getManagedEntityClass()).countQuery();
+        Query query = getEntityManager().createQuery(jpqlQueryElt.getQuery());
+        setRealParams(query, jpqlQueryElt.getParameters());
+
+        return (long) query.getSingleResult();
+    }
+
+    public default List<T> findWithPagination(CriteriaEntityFromView criterion, List<String> fetchEagerFields, List<OrderByDefinition> orderByFields, Integer pageNumber, Integer pageSize) throws Exception {
+        EntityGraph<T> entityGraph = getEntityManager().createEntityGraph(getManagedEntityClass());
+        fetchEagerFields.stream().forEach(f -> entityGraph.addAttributeNodes(f));
+        JpqlQueryElement jpqlQueryElt = new JpqlTable(criterion, getManagedEntityClass()).selectQuery(orderByFields);
+        System.out.println("findWithPagination---------------" + jpqlQueryElt.getQuery() + "--------------");
+        Query query = getEntityManager().createQuery(jpqlQueryElt.getQuery());
+        setRealParams(query, jpqlQueryElt.getParameters());
+        query.setHint("javax.persistence.loadgraph", entityGraph);
+        query.setFirstResult((pageNumber - 1) * pageSize);
+        query.setMaxResults(pageSize);
+        return query.getResultList();
+    }
+
+    public default List<T> findAll(CriteriaEntityFromView criterion, List<String> fetchEagerFields, List<OrderByDefinition> orderByFields) throws Exception {
+        EntityGraph<T> entityGraph = getEntityManager().createEntityGraph(getManagedEntityClass());
+        fetchEagerFields.stream().forEach(f -> entityGraph.addAttributeNodes(f));
+        JpqlQueryElement jpqlQueryElt = new JpqlTable(criterion, getManagedEntityClass()).selectQuery(orderByFields);
+        System.out.println("findAll---------------" + jpqlQueryElt.getQuery() + "--------------");
+        Query query = getEntityManager().createQuery(jpqlQueryElt.getQuery());
+        setRealParams(query, jpqlQueryElt.getParameters());
+        query.setHint("javax.persistence.loadgraph", entityGraph);
+        return query.getResultList();
+    }
+
+    public default void setRealParams(Query query, List<JpqlQueryParam> params) {
+        int index = 1;
+        for (JpqlQueryParam p : params) {
+            query.setParameter(index, p.getParamValue());
+            index++;
+        }
+    }
+
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/abstracts/PaginationWithSearchEnityDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/abstracts/PaginationWithSearchEnityDAO.java
new file mode 100644
index 0000000..fe01c3a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/abstracts/PaginationWithSearchEnityDAO.java
@@ -0,0 +1,196 @@
+package com.megatim.fdxconsultation.dao.ifaces.abstracts;
+
+import com.megatim.fdxcommons.dao.ifaces.utils.SearchCriteriaBuilderUtil;
+import com.megatim.fdxcommons.model.search.SearchCriteria;
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.EntityManager;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface PaginationWithSearchEnityDAO<T, ID, U> {
+
+    public EntityManager getEntityManager();
+
+    public Class<T> getManagedEntityClass();
+
+    public default long countBySearchEntity(U searchEntity) {
+        CriteriaBuilder qb = getEntityManager().getCriteriaBuilder();
+        CriteriaQuery<Long> cq = qb.createQuery(Long.class);
+        Root<T> root = cq.from(getManagedEntityClass());
+
+        List<SearchCriteria> searchCriterias = SearchCriteriaBuilderUtil.getSearchCriterias(searchEntity, getManagedEntityClass(), root, new ArrayList<>());
+        List<Predicate> predicates = createPedicates(searchCriterias, qb, root);
+
+        cq.select(qb.count(root));
+        cq.where(predicates.toArray(new Predicate[predicates.size()]));
+
+        return (long) getEntityManager().createQuery(cq).getSingleResult();
+    }
+
+    public default List<T> all() {
+        CriteriaBuilder qb = getEntityManager().getCriteriaBuilder();
+        CriteriaQuery<T> cq = qb.createQuery(getManagedEntityClass());
+
+        Root<T> root = cq.from(getManagedEntityClass());
+        cq.select(root);
+
+        return getEntityManager().createQuery(cq).getResultList();
+    }
+
+    public default List<T> findAllBySearchEntity(U searchEntity) {
+        CriteriaBuilder qb = getEntityManager().getCriteriaBuilder();
+        CriteriaQuery<T> cq = qb.createQuery(getManagedEntityClass());
+
+        Root<T> root = cq.from(getManagedEntityClass());
+
+        List<SearchCriteria> searchCriterias = SearchCriteriaBuilderUtil.getSearchCriterias(searchEntity, getManagedEntityClass(), root, new ArrayList<>());
+        List<Predicate> predicates = new ArrayList<>();
+
+        try {
+            predicates = createPedicates(searchCriterias, qb, root);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        cq.select(root);
+        cq.where(predicates.toArray(new Predicate[predicates.size()]));
+
+        return getEntityManager().createQuery(cq).getResultList();
+    }
+
+    public default List<T> findAllBySearchEntity(Integer pageNumber, Integer pagesize, U searchEntity) {
+        CriteriaBuilder qb = getEntityManager().getCriteriaBuilder();
+        CriteriaQuery<T> cq = qb.createQuery(getManagedEntityClass());
+
+        Root<T> root = cq.from(getManagedEntityClass());
+
+        List<SearchCriteria> searchCriterias = SearchCriteriaBuilderUtil.getSearchCriterias(searchEntity, getManagedEntityClass(), root, new ArrayList<>());
+
+        List<Predicate> predicates = new ArrayList<>();
+
+        try {
+            predicates = createPedicates(searchCriterias, qb, root);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        cq.select(root);
+        cq.where(predicates.toArray(new Predicate[predicates.size()]));
+
+        TypedQuery<T> typedQuery = getEntityManager().createQuery(cq);
+
+        typedQuery.setFirstResult((pageNumber - 1) * pagesize);
+        typedQuery.setMaxResults(pagesize);
+
+        return typedQuery.getResultList();
+    }
+
+    /**
+     * Méthode qui les prédicats à partir des critères de recherche
+     *
+     * @param searchCriterias
+     * @param cb
+     * @param root
+     * @return
+     */
+    default List<Predicate> createPedicates(List<SearchCriteria> searchCriterias, CriteriaBuilder cb, Root<T> root) {
+        List<Predicate> predicates = new ArrayList<>();
+
+        searchCriterias.parallelStream().forEach(s -> {
+
+            if (s.getFieldValue() != null) {
+                Predicate predicate = null;
+                switch (s.getOperateur()) {
+                    case EQUALS:
+                        predicate = cb.equal(s.getFrom().get(s.getFieldName()), s.getFieldValue());
+                        predicates.add(predicate);
+                        break;
+
+                    case NOT_EQUALS:
+                        predicate = cb.notEqual(s.getFrom().get(s.getFieldName()), s.getFieldValue());
+                        predicates.add(predicate);
+                        break;
+
+                    case LIKE:
+                        if (s.getFieldValue() instanceof String) {
+                            predicate = cb.like(s.getFrom().get(s.getFieldName()), "%" + s.getFieldValue().toString() + "%");
+                            predicates.add(predicate);
+                        }
+                        break;
+
+                    case GREATER_THAN:
+                        if (s.getFieldValue() instanceof Number) {
+                            predicate = cb.gt(s.getFrom().get(s.getFieldName()), (Number) s.getFieldValue());
+                            predicates.add(predicate);
+
+                        } else if (s.getFieldValue() instanceof String) {
+                            predicate = cb.greaterThanOrEqualTo(root.get(s.getFieldName()), s.getFieldValue().toString());
+                            predicates.add(predicate);
+                        } else if (s.getFieldValue() instanceof LocalDate) {
+                            predicate = cb.greaterThan(s.getFrom().get(s.getFieldName()), (LocalDate) s.getFieldValue());
+                            predicates.add(predicate);
+                        }
+                        break;
+
+                    case GREATER_OR_EQUALS_THAN:
+                        if (s.getFieldValue() instanceof Number) {
+                            predicate = cb.ge(root.get(s.getFieldName()), (Number) s.getFieldValue());
+                            predicates.add(predicate);
+                        } else if (s.getFieldValue() instanceof String) {
+                            predicate = cb.greaterThanOrEqualTo(root.get(s.getFieldName()), s.getFieldValue().toString());
+                            predicates.add(predicate);
+                        } else if (s.getFieldValue() instanceof LocalDate) {
+                            predicate = cb.greaterThanOrEqualTo(root.get(s.getFieldName()), (LocalDate) s.getFieldValue());
+                            predicates.add(predicate);
+                        }
+                        break;
+
+                    case LESS_THAN:
+                        if (s.getFieldValue() instanceof Number) {
+                            predicate = cb.lt(s.getFrom().get(s.getFieldName()), (Number) s.getFieldValue());
+                            predicates.add(predicate);
+                        } else if (s.getFieldValue() instanceof String) {
+                            predicate = cb.greaterThanOrEqualTo(root.get(s.getFieldName()), s.getFieldValue().toString());
+                            predicates.add(predicate);
+                        } else if (s.getFieldValue() instanceof LocalDate) {
+                            predicate = cb.lessThan(s.getFrom().get(s.getFieldName()), (LocalDate) s.getFieldValue());
+                            predicates.add(predicate);
+                        }
+                        break;
+
+                    case LESS_OR_EQUALS_THAN:
+                        if (s.getFieldValue() instanceof Number) {
+                            predicate = cb.le(s.getFrom().get(s.getFieldName()), (Number) s.getFieldValue());
+                            predicates.add(predicate);
+                        } else if (s.getFieldValue() instanceof String) {
+                            predicate = cb.greaterThanOrEqualTo(root.get(s.getFieldName()), s.getFieldValue().toString());
+                            predicates.add(predicate);
+                        } else if (s.getFieldValue() instanceof LocalDate) {
+                            predicate = cb.lessThanOrEqualTo(s.getFrom().get(s.getFieldName()), (LocalDate) s.getFieldValue());
+                            predicates.add(predicate);
+                        }
+                        break;
+                    case IN:
+                        if (s.getFieldValue() instanceof java.util.Collection) {
+                            predicate = s.getFrom().get(s.getFieldName()).in(s.getFieldValue());
+                            predicates.add(predicate);
+                        }
+                        break;
+                    default:
+
+                }
+            }
+        });
+
+        return predicates;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/ActionDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/ActionDAO.java
new file mode 100644
index 0000000..2eec29f
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/ActionDAO.java
@@ -0,0 +1,16 @@
+package com.megatim.fdxconsultation.dao.ifaces.administration;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.megatim.fdxconsultation.model.administration.Action;
+
+/**
+ * Interface etendue par les interfaces locale et remote de la DAO
+ *
+ * @since Tue Jan 09 15:21:42 WAT 2018
+ *
+ */
+public interface ActionDAO extends GenericDAO<Action, Long> {
+
+    public final static String SERVICE_NAME = "ActionDAO";
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/HistoriqueMotDePasseDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/HistoriqueMotDePasseDAO.java
new file mode 100644
index 0000000..793ea2b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/HistoriqueMotDePasseDAO.java
@@ -0,0 +1,24 @@
+package com.megatim.fdxconsultation.dao.ifaces.administration;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.megatim.fdxconsultation.model.administration.*;
+
+/**
+ * Interface etendue par les interfaces locale et remote de la DAO
+ *
+ * @since Tue Jan 09 15:21:42 WAT 2018
+ *
+ */
+public interface HistoriqueMotDePasseDAO extends GenericDAO<HistoriqueMotDePasse, Long> {
+
+    public final static String SERVICE_NAME = "HistoriqueMotDePasseDAO";
+    
+    /**
+     * Permet de determiner si le mot de passe existe
+     * @param motDePasse
+     * @param user
+     * @return 
+     */
+    public boolean siMotDePasseExiste(String motDePasse, User user);
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/JournalActionUtilisateurDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/JournalActionUtilisateurDAO.java
new file mode 100644
index 0000000..d5f7857
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/JournalActionUtilisateurDAO.java
@@ -0,0 +1,17 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.ifaces.administration;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithCriteriaEntityDAO;
+import com.megatim.fdxconsultation.model.administration.JournalActionUtilisateur;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface JournalActionUtilisateurDAO extends GenericDAO<JournalActionUtilisateur, Long>, PaginationWithCriteriaEntityDAO<JournalActionUtilisateur, Long>{
+    public JournalActionUtilisateur getById(Long id);
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/JournalConnexionUtilisateurDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/JournalConnexionUtilisateurDAO.java
new file mode 100644
index 0000000..7035542
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/JournalConnexionUtilisateurDAO.java
@@ -0,0 +1,19 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.ifaces.administration;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithCriteriaEntityDAO;
+import com.megatim.fdxconsultation.model.administration.JournalActionUtilisateur;
+import com.megatim.fdxconsultation.model.administration.JournalConnexionUtilisateur;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface JournalConnexionUtilisateurDAO extends GenericDAO<JournalConnexionUtilisateur, Long>,  
+        PaginationWithCriteriaEntityDAO<JournalConnexionUtilisateur, Long>{
+    public JournalConnexionUtilisateur getById(Long id);
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/RoleDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/RoleDAO.java
new file mode 100644
index 0000000..3a32715
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/RoleDAO.java
@@ -0,0 +1,21 @@
+package com.megatim.fdxconsultation.dao.ifaces.administration;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithCriteriaEntityDAO;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithSearchEnityDAO;
+import com.megatim.fdxconsultation.model.administration.Role;
+import com.megatim.fdxconsultation.model.searchentities.RoleSearch;
+
+/**
+ * Interface etendue par les interfaces locale et remote de la DAO
+ * @since Tue Jan 09 15:21:42 WAT 2018
+ * 
+ */
+public interface RoleDAO extends GenericDAO<Role, Long>, PaginationWithCriteriaEntityDAO<Role, Long>,
+        PaginationWithSearchEnityDAO<Role, Long, RoleSearch>{
+
+    Role getCurrentRole();
+    
+    Role getById(Long id);
+    
+}
\ No newline at end of file
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/UserDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/UserDAO.java
new file mode 100644
index 0000000..e353b8b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/administration/UserDAO.java
@@ -0,0 +1,50 @@
+package com.megatim.fdxconsultation.dao.ifaces.administration;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithCriteriaEntityDAO;
+import com.megatim.fdxconsultation.model.administration.Role;
+import com.megatim.fdxconsultation.model.administration.User;
+import java.util.List;
+
+/**
+ * Interface etendue par les interfaces locale et remote de la DAO
+ *
+ * @since Tue Jan 09 15:21:42 WAT 2018
+ *
+ */
+public interface UserDAO extends GenericDAO<User, Long>, PaginationWithCriteriaEntityDAO<User, Long> {
+
+    /**
+     * Permet de recuperer l'utlisateur courant
+     *
+     * @return
+     */
+    User getCurrentUser();
+
+    User getById(Long id);
+
+    /**
+     * Permet de recuperer un utilisateur via ces informations de connexion
+     *
+     * @param username
+     * @param motDePasse
+     * @return
+     */
+    User recuperUtilisateur(String username, String motDePasse);
+
+    /**
+     * Permet de recuperer un utilisateur via ces informations de connexion
+     *
+     * @param username
+     * @return
+     */
+    User recuperUtilisateur(String username);
+    
+    /**
+     * Methode Permettant de recuperer tous les utilateurs liés à un même rôle
+     * @param role
+     * @return 
+     */
+    List<User> obtenirListeUtilisateursRole(Role role);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/api/token/ApiTokenDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/api/token/ApiTokenDAO.java
new file mode 100644
index 0000000..a87a53b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/api/token/ApiTokenDAO.java
@@ -0,0 +1,17 @@
+package com.megatim.fdxconsultation.dao.ifaces.api.token;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithCriteriaEntityDAO;
+import com.megatim.fdxconsultation.model.api.token.ApiToken;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ApiTokenDAO extends GenericDAO<ApiToken, Long>, PaginationWithCriteriaEntityDAO<ApiToken, Long> {
+
+    ApiToken getByCodeParticipant(Participant participant);
+
+    ApiToken getByCodeParticipant(String codeParticipant);
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/configuration/CodeStatutHttpDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/configuration/CodeStatutHttpDAO.java
new file mode 100644
index 0000000..eafbe06
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/configuration/CodeStatutHttpDAO.java
@@ -0,0 +1,14 @@
+package com.megatim.fdxconsultation.dao.ifaces.configuration;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithCriteriaEntityDAO;
+import com.megatim.fdxconsultation.model.configuration.CodeStatutHttp;
+
+/**
+ * Interface etendue par les interfaces locale et remote de la DAO
+ * @since Tue Jan 09 15:21:42 WAT 2018
+ * 
+ */
+public interface CodeStatutHttpDAO extends GenericDAO<CodeStatutHttp, Long>, PaginationWithCriteriaEntityDAO<CodeStatutHttp, Long>{
+
+}
\ No newline at end of file
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/dataproduction/DataProductionDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/dataproduction/DataProductionDAO.java
new file mode 100644
index 0000000..14c28f2
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/dataproduction/DataProductionDAO.java
@@ -0,0 +1,19 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.ifaces.dataproduction;
+
+import com.megatim.fdxcommons.model.enumeration.StatutDataProduction;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+import com.megatim.fdxconsultation.model.dataproduction.DataProduction;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface DataProductionDAO extends CustomDAOWithCriteriaEntityIfaces<DataProduction, Long> {
+
+    List<DataProduction> findByStatutDataProduction(StatutDataProduction statut);
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/dataproduction/DataProductionToDeleteDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/dataproduction/DataProductionToDeleteDAO.java
new file mode 100644
index 0000000..e78a7f1
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/dataproduction/DataProductionToDeleteDAO.java
@@ -0,0 +1,16 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.ifaces.dataproduction;
+
+import com.megatim.fdxcommons.model.dataproduction.DataProductionToDelete;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface DataProductionToDeleteDAO extends CustomDAOWithCriteriaEntityIfaces<DataProductionToDelete, Long>{
+    
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/dataproduction/metadata/ProductionMetaDataDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/dataproduction/metadata/ProductionMetaDataDAO.java
new file mode 100644
index 0000000..c90b2f6
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/dataproduction/metadata/ProductionMetaDataDAO.java
@@ -0,0 +1,19 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.ifaces.dataproduction.metadata;
+
+import com.megatim.fdxcommons.model.dataproduction.metadata.ProductionMetaData;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ProductionMetaDataDAO extends CustomDAOWithCriteriaEntityIfaces<ProductionMetaData, Long> {
+
+    void  deleteById(Long dataProductionId);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/documents/CategoryDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/documents/CategoryDAO.java
new file mode 100644
index 0000000..264ac66
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/documents/CategoryDAO.java
@@ -0,0 +1,16 @@
+package com.megatim.fdxconsultation.dao.ifaces.documents;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.megatim.fdxconsultation.model.documents.Category;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface CategoryDAO extends GenericDAO<Category, Long> {
+
+    Category getById(Long id);
+
+    List<Category> loadAll();
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/documents/DocumentDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/documents/DocumentDAO.java
new file mode 100644
index 0000000..9670add
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/documents/DocumentDAO.java
@@ -0,0 +1,16 @@
+package com.megatim.fdxconsultation.dao.ifaces.documents;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.megatim.fdxconsultation.model.documents.Document;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface DocumentDAO extends GenericDAO<Document, Long> {
+
+    Document getById(Long id);
+
+    List<Document> getByCategory(Long categoryId);
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/favoritessearch/FavoriteSearchDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/favoritessearch/FavoriteSearchDAO.java
new file mode 100644
index 0000000..044c3b9
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/favoritessearch/FavoriteSearchDAO.java
@@ -0,0 +1,15 @@
+package com.megatim.fdxconsultation.dao.ifaces.favoritessearch;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithCriteriaEntityDAO;
+import com.megatim.fdxconsultation.model.favoritessearch.FavoriteSearch;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface FavoriteSearchDAO extends GenericDAO<FavoriteSearch, Long>, PaginationWithCriteriaEntityDAO<FavoriteSearch, Long> {
+
+    List<FavoriteSearch> all(String userName);
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/integration/EchecIntegrationDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/integration/EchecIntegrationDAO.java
new file mode 100644
index 0000000..48c106a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/integration/EchecIntegrationDAO.java
@@ -0,0 +1,16 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.ifaces.integration;
+
+import com.megatim.fdxcommons.dao.ifaces.abstracts.CustomDAOIfaces;
+import com.megatim.fdxconsultation.model.integration.EchecIntegration;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface EchecIntegrationDAO extends CustomDAOIfaces<EchecIntegration, Long, EchecIntegration>{
+    
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/log/ApiUserActionLogDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/log/ApiUserActionLogDAO.java
new file mode 100644
index 0000000..2504d55
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/log/ApiUserActionLogDAO.java
@@ -0,0 +1,21 @@
+package com.megatim.fdxconsultation.dao.ifaces.log;
+
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+import com.megatim.fdxconsultation.model.dto.log.UserActionStatData;
+import com.megatim.fdxconsultation.model.dto.log.UserActionStatDto;
+import com.megatim.fdxconsultation.model.log.ApiUserActionLog;
+import com.megatim.fdxconsultation.model.log.dtos.ApiUserActionSummarySearch;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ApiUserActionLogDAO extends CustomDAOWithCriteriaEntityIfaces<ApiUserActionLog, Long> {
+
+    List<UserActionStatDto> getByStatut(ApiUserActionSummarySearch apiUserActionSummarySearch);
+
+    List<UserActionStatData> getByStatutAndUserName(ApiUserActionSummarySearch apiUserActionSummarySearch);
+
+    List<UserActionStatData> getByStatutAndPath(ApiUserActionSummarySearch apiUserActionSummarySearch);
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/log/UserActionLogDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/log/UserActionLogDAO.java
new file mode 100644
index 0000000..64580ff
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/log/UserActionLogDAO.java
@@ -0,0 +1,16 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.ifaces.log;
+
+import com.megatim.fdxcommons.model.log.UserActionLog;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface UserActionLogDAO extends CustomDAOWithCriteriaEntityIfaces<UserActionLog, Long>{
+    
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/message/systeme/MessageSystemeDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/message/systeme/MessageSystemeDAO.java
new file mode 100644
index 0000000..1d89ed2
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/message/systeme/MessageSystemeDAO.java
@@ -0,0 +1,28 @@
+package com.megatim.fdxconsultation.dao.ifaces.message.systeme;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.megatim.fdxcommons.model.enumeration.*;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.message.systeme.MessageSysteme;
+
+/**
+ * Interface etendue par les interfaces locale et remote de la DAO
+ *
+ * @since Tue Jan 09 15:21:42 WAT 2018
+ *
+ */
+public interface MessageSystemeDAO extends GenericDAO<MessageSysteme, Long> {
+
+    public final static String SERVICE_NAME = "MessageSystemeDAO";
+    
+    /**
+     * Permet d'ajouter un message
+     * @param ypeMessageSysteme
+     * @param typeIdMessageSysteme
+     * @param contenu
+     * @param utilisateur 
+     */
+    public void ajouter(TypeMessageSysteme ypeMessageSysteme, TypeIdMessageSysteme typeIdMessageSysteme, String contenu, User utilisateur);
+    
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ApplicationSourceDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ApplicationSourceDAO.java
new file mode 100644
index 0000000..d5aa0f6
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ApplicationSourceDAO.java
@@ -0,0 +1,16 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.ApplicationSource;
+import com.megatim.fdxconsultation.model.searchentities.ApplicationSourceSearch;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ApplicationSourceDAO extends CustomDAOWithCriteriaEntityIfaces<ApplicationSource, String>{
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ExtensionFichierDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ExtensionFichierDAO.java
new file mode 100644
index 0000000..5f587e9
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ExtensionFichierDAO.java
@@ -0,0 +1,16 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.ExtensionFichier;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ExtensionFichierDAO extends CustomDAOWithCriteriaEntityIfaces<ExtensionFichier, String> {
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/GroupeNoeudDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/GroupeNoeudDAO.java
new file mode 100644
index 0000000..15a9583
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/GroupeNoeudDAO.java
@@ -0,0 +1,16 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.GroupeNoeud;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface GroupeNoeudDAO extends CustomDAOWithCriteriaEntityIfaces<GroupeNoeud, String> {
+    
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/GroupeParticipantDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/GroupeParticipantDAO.java
new file mode 100644
index 0000000..d9c2502
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/GroupeParticipantDAO.java
@@ -0,0 +1,16 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.GroupeParticipant;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface GroupeParticipantDAO extends CustomDAOWithCriteriaEntityIfaces<GroupeParticipant, String>{
+    
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/NoeudDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/NoeudDAO.java
new file mode 100644
index 0000000..34012c7
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/NoeudDAO.java
@@ -0,0 +1,37 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.Noeud;
+import java.util.Optional;
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface NoeudDAO extends CustomDAOWithCriteriaEntityIfaces<Noeud, String> {
+
+    @Override
+    EntityManager getEntityManager();
+    
+    @Override
+    public default Class<Noeud> getManagedEntityClass() {
+        return (Noeud.class);
+    }
+
+    @Override
+    public default Noeud getById(String id) {
+        Query query = getEntityManager().createQuery("SELECT n from Noeud n"
+                + " LEFT JOIN FETCH n.groupeNoeuds LEFT JOIN FETCH n.routageEnvois LEFT JOIN FETCH n.routageReceptions"
+                + " WHERE n.code = :code");
+        query.setParameter("code", id);
+
+        Optional<Noeud> optionalNoeud = query.getResultList().stream().findFirst();
+        return optionalNoeud.isPresent() ? optionalNoeud.get() : null;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ParticipantDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ParticipantDAO.java
new file mode 100644
index 0000000..f6dcaa7
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ParticipantDAO.java
@@ -0,0 +1,14 @@
+package com.megatim.fdxconsultation.dao.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithSearchEnityDAO;
+import com.megatim.fdxconsultation.model.searchentities.ParticipantSearch;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ParticipantDAO extends CustomDAOWithCriteriaEntityIfaces<Participant, String>, PaginationWithSearchEnityDAO<Participant, String, ParticipantSearch> {
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/PaysDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/PaysDAO.java
new file mode 100644
index 0000000..07e886b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/PaysDAO.java
@@ -0,0 +1,16 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.Pays;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface PaysDAO extends CustomDAOWithCriteriaEntityIfaces<Pays, String> {
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ReferentielDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ReferentielDAO.java
new file mode 100644
index 0000000..eb2cbcf
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ReferentielDAO.java
@@ -0,0 +1,22 @@
+package com.megatim.fdxconsultation.dao.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.enumeration.StatutReferentiel;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import java.util.List;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithSearchEnityDAO;
+import com.megatim.fdxconsultation.model.searchentities.ReferentielSearch;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ReferentielDAO extends CustomDAOWithCriteriaEntityIfaces<Referentiel, String>,
+        PaginationWithSearchEnityDAO<Referentiel, String, ReferentielSearch> {
+
+    public Referentiel getReferentielEnCours();
+
+    public List<Referentiel> findByStatutReferentiel(StatutReferentiel statutReferentiel);
+
+    public void archiverReferentielEncours();
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/RoutageDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/RoutageDAO.java
new file mode 100644
index 0000000..1244a66
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/RoutageDAO.java
@@ -0,0 +1,73 @@
+package com.megatim.fdxconsultation.dao.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import com.megatim.fdxcommons.model.referentiel.Routage;
+import com.megatim.fdxcommons.model.referentiel.RoutageId;
+import javax.persistence.EntityManager;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface RoutageDAO extends CustomDAOWithCriteriaEntityIfaces<Routage, RoutageId> {
+
+    @Override
+    EntityManager getEntityManager();
+
+    @Override
+    public Routage getById(RoutageId id);
+
+    public default List<Participant> getParticipantsForSend(String versionReferentiel, String codeTypeFichier) {
+        List<Participant> participantsEnvoi = new ArrayList<>();
+        Optional<Routage> optRoutage = getEntityManager().createQuery("SELECT r FROM Routage r "
+                + "LEFT JOIN r.participantsEnvoi p "
+                + "LEFT JOIN r.noeudsEnvoi n "
+                + "LEFT JOIN r.groupeParticipantsEnvoi gp LEFT JOIN gp.participants pa "
+                + "LEFT JOIN r.groupeNoeudsEnvoi gn LEFT JOIN gn.noeuds no "
+                + "WHERE r.referentiel.version = :versionReferentiel AND r.typeFichier.code = :codeTypeFichier ")
+                .setParameter("versionReferentiel", versionReferentiel)
+                .setParameter("codeTypeFichier", codeTypeFichier)
+                .getResultList().stream().findFirst();
+
+        if (optRoutage.isPresent()) {
+            Routage routage = optRoutage.get();
+            participantsEnvoi.addAll(routage.getParticipantsEnvoi());
+            routage.getNoeudsEnvoi().stream().forEach(n -> {
+                participantsEnvoi.add(n.getParticipant());
+            });
+            routage.getGroupeNoeudsEnvoi().stream().forEach(gn -> gn.getNoeuds().stream().forEach(n -> participantsEnvoi.add(n.getParticipant())));
+            routage.getGroupeParticipantsEnvoi().stream().forEach(gp -> participantsEnvoi.addAll(gp.getParticipants()));
+        }
+
+        return participantsEnvoi;
+    }
+
+    default List<Participant> getParticipantForReceive(String versionReferentiel, String codeTypeFichier) {
+        List<Participant> participantsReception = new ArrayList<>();
+        Optional<Routage> optRoutage = getEntityManager().createQuery("SELECT r FROM Routage r "
+                + "LEFT JOIN r.participantsReception p "
+                + "LEFT JOIN r.noeudsReception n "
+                + "LEFT JOIN r.groupeParticipantsReception gp LEFT JOIN gp.participants pa "
+                + "LEFT JOIN r.groupeNoeudsReception gn LEFT JOIN gn.noeuds no "
+                + "WHERE r.referentiel.version = :versionReferentiel AND r.typeFichier.code = :codeTypeFichier ")
+                .setParameter("versionReferentiel", versionReferentiel)
+                .setParameter("codeTypeFichier", codeTypeFichier)
+                .getResultList().stream().findFirst();
+
+        if (optRoutage.isPresent()) {
+            Routage routage = optRoutage.get();
+            participantsReception.addAll(routage.getParticipantsReception());
+            routage.getNoeudsReception().stream().forEach(n -> {
+                participantsReception.add(n.getParticipant());
+            });
+            routage.getGroupeNoeudsReception().stream().forEach(gn -> gn.getNoeuds().stream().forEach(n -> participantsReception.add(n.getParticipant())));
+            routage.getGroupeParticipantsReception().stream().forEach(gp -> participantsReception.addAll(gp.getParticipants()));
+        }
+
+        return participantsReception;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/StructureLigneDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/StructureLigneDAO.java
new file mode 100644
index 0000000..b64942f
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/StructureLigneDAO.java
@@ -0,0 +1,16 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.StructureLigne;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface StructureLigneDAO extends CustomDAOWithCriteriaEntityIfaces<StructureLigne, String>{
+    
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/TypeFichierConsultationDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/TypeFichierConsultationDAO.java
new file mode 100644
index 0000000..2d9147e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/TypeFichierConsultationDAO.java
@@ -0,0 +1,17 @@
+package com.megatim.fdxconsultation.dao.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithSearchEnityDAO;
+import com.megatim.fdxconsultation.model.dto.ParticipantToFichierDto;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierSearch;
+import java.util.List;
+
+/**
+ *
+ * @author lenovo
+ */
+public interface TypeFichierConsultationDAO extends TypeFichierDAO, PaginationWithSearchEnityDAO<TypeFichier, String, TypeFichierSearch> {
+
+    List<ParticipantToFichierDto> getParticpantToFichierDto(String username);
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/TypeFichierDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/TypeFichierDAO.java
new file mode 100644
index 0000000..51be81c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/TypeFichierDAO.java
@@ -0,0 +1,12 @@
+package com.megatim.fdxconsultation.dao.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface TypeFichierDAO extends CustomDAOWithCriteriaEntityIfaces<TypeFichier, String> {
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ValidateurFichierConfigurationDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ValidateurFichierConfigurationDAO.java
new file mode 100644
index 0000000..6af8fa1
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ValidateurFichierConfigurationDAO.java
@@ -0,0 +1,17 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.ValidateurFichierConfiguration;
+import com.megatim.fdxcommons.model.referentiel.ValidateurFichierConfigurationId;
+import com.megatim.fdxconsultation.model.searchentities.ValidateurFichierConfigurationSearch;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ValidateurFichierConfigurationDAO extends CustomDAOWithCriteriaEntityIfaces<ValidateurFichierConfiguration, ValidateurFichierConfigurationId> {
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ValidateurFichierDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ValidateurFichierDAO.java
new file mode 100644
index 0000000..366e646
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/referentiel/ValidateurFichierDAO.java
@@ -0,0 +1,17 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.ifaces.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.ValidateurFichier;
+import com.megatim.fdxconsultation.model.searchentities.ValidateurFichierSearch;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ValidateurFichierDAO extends CustomDAOWithCriteriaEntityIfaces<ValidateurFichier, String>{
+    
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/remoteaction/PlanificationDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/remoteaction/PlanificationDAO.java
new file mode 100644
index 0000000..9db98b4
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/remoteaction/PlanificationDAO.java
@@ -0,0 +1,17 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.ifaces.remoteaction;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithCriteriaEntityDAO;
+import com.megatim.fdxconsultation.model.remoteaction.Planification;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface PlanificationDAO extends GenericDAO<Planification, Long>, PaginationWithCriteriaEntityDAO<Planification, Long>{
+    
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/remoteaction/RemoteConfigurationDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/remoteaction/RemoteConfigurationDAO.java
new file mode 100644
index 0000000..79bdb3a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/remoteaction/RemoteConfigurationDAO.java
@@ -0,0 +1,17 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.ifaces.remoteaction;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.megatim.fdxconsultation.model.remoteaction.RemoteConfiguration;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithCriteriaEntityDAO;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface RemoteConfigurationDAO extends GenericDAO<RemoteConfiguration, String>, PaginationWithCriteriaEntityDAO<RemoteConfiguration, String> {
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/searchs/TypeFichierReferentielSearchDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/searchs/TypeFichierReferentielSearchDAO.java
new file mode 100644
index 0000000..fc97721
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/searchs/TypeFichierReferentielSearchDAO.java
@@ -0,0 +1,21 @@
+package com.megatim.fdxconsultation.dao.ifaces.searchs;
+
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierReferentielSearch;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface TypeFichierReferentielSearchDAO {
+
+    List<TypeFichier> all(int pageNumber, int pagesize, TypeFichierReferentielSearch searchEntity);
+
+    List<TypeFichier> all(String userName, int pageNumber, int pagesize, TypeFichierReferentielSearch searchEntity);
+
+    Long count(TypeFichierReferentielSearch searchEntity);
+
+    Long count(String userName, TypeFichierReferentielSearch searchEntity);
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/searchs/UserParticipantDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/searchs/UserParticipantDAO.java
new file mode 100644
index 0000000..a49ce5e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/searchs/UserParticipantDAO.java
@@ -0,0 +1,21 @@
+package com.megatim.fdxconsultation.dao.ifaces.searchs;
+
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import com.megatim.fdxconsultation.model.searchentities.ParticipantSearch;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface UserParticipantDAO {
+
+    List<Participant> findUserParticipantsWithPagination(String userName, ParticipantSearch participantSearch, int pageNumber, int pageSize);
+    
+    List<Participant> findAllUserParticipants(String userName, ParticipantSearch participantSearch);
+
+    List<Participant> findUserParticipants(String userName);
+
+    Long countUserParticipants(String userName, ParticipantSearch participantSearch);
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/searchs/UserTypeFichierDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/searchs/UserTypeFichierDAO.java
new file mode 100644
index 0000000..185d8f3
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/searchs/UserTypeFichierDAO.java
@@ -0,0 +1,22 @@
+package com.megatim.fdxconsultation.dao.ifaces.searchs;
+
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierSearch;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface UserTypeFichierDAO {
+
+    List<TypeFichier> findUserTypeFichiersWithPagination(String userName, TypeFichierSearch typeFichierSearch, int pageNumber, int pageSize);
+
+    List<TypeFichier> findUserTypeFichiers(String userName);
+
+    Long countUserTypeFichiers(String userName, TypeFichierSearch typeFichierSearch);
+
+    List<TypeFichier> findUserTypeFichiersInReferentielWithPagination(String userName, String referentiel, TypeFichierSearch typeFichierSearch, int pageNumber, int pageSize);
+
+    Long countUserTypeFichiersInReferentiel(String userName, String referentiel, TypeFichierSearch typeFichierSearch);
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/settings/DisplayOptionsDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/settings/DisplayOptionsDAO.java
new file mode 100644
index 0000000..7e01048
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/settings/DisplayOptionsDAO.java
@@ -0,0 +1,16 @@
+package com.megatim.fdxconsultation.dao.ifaces.settings;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.megatim.fdxconsultation.model.settings.DisplayOptions;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface DisplayOptionsDAO extends GenericDAO<DisplayOptions, Long> {
+
+    DisplayOptions current();
+
+    DisplayOptions edit(DisplayOptions entity);
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/CriteriaEntityPersistedDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/CriteriaEntityPersistedDAO.java
new file mode 100644
index 0000000..2b47365
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/CriteriaEntityPersistedDAO.java
@@ -0,0 +1,16 @@
+package com.megatim.fdxconsultation.dao.ifaces.stats;
+
+import com.megatim.fdxconsultation.model.stats.CriteriaEntityPersisted;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface CriteriaEntityPersistedDAO extends CustomDAOWithCriteriaEntityIfaces<CriteriaEntityPersisted, Long> {
+
+    CriteriaEntityPersisted loadSubCriteria(CriteriaEntityPersisted criterion);
+
+    List<CriteriaEntityPersisted> subCriterias(Long id);
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/StatististiquesDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/StatististiquesDAO.java
new file mode 100644
index 0000000..3364078
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/StatististiquesDAO.java
@@ -0,0 +1,17 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.ifaces.stats;
+
+import com.megatim.fdxconsultation.model.dto.stats.StatResultDto;
+import com.megatim.fdxconsultation.model.dto.stats.TableauBordQueryPojo;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface StatististiquesDAO {
+    StatResultDto performSelect(List<TableauBordQueryPojo> queries, String jndiName) throws Exception;
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/TableConfigurationDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/TableConfigurationDAO.java
new file mode 100644
index 0000000..c8e0483
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/TableConfigurationDAO.java
@@ -0,0 +1,16 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.ifaces.stats;
+
+import com.megatim.fdxconsultation.model.stats.TableConfiguration;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface TableConfigurationDAO extends CustomDAOWithCriteriaEntityIfaces<TableConfiguration, Long> {
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/TableauBordColumnDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/TableauBordColumnDAO.java
new file mode 100644
index 0000000..20e8969
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/TableauBordColumnDAO.java
@@ -0,0 +1,16 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.ifaces.stats;
+
+import com.megatim.fdxconsultation.model.stats.TableauBordColumn;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface TableauBordColumnDAO extends CustomDAOWithCriteriaEntityIfaces<TableauBordColumn, Long> {
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/TableauBordDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/TableauBordDAO.java
new file mode 100644
index 0000000..f16ce84
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/TableauBordDAO.java
@@ -0,0 +1,44 @@
+package com.megatim.fdxconsultation.dao.ifaces.stats;
+
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.model.dto.ParticipantToFichierDto;
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithSearchEnityDAO;
+import com.megatim.fdxconsultation.model.enums.TypeConfigurationTableauBord;
+import com.megatim.fdxconsultation.model.searchentities.TableauBordSearch;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierSearch;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface TableauBordDAO extends CustomDAOWithCriteriaEntityIfaces<TableauBord, Long>, PaginationWithSearchEnityDAO<TableauBord, Long, TableauBordSearch> {
+
+    TableauBord findByUserAndTypeFichierAndReferentiel(Long userId, String codeTypeFichier, String referentielversion);
+
+    TableauBord findByTypeConfigurationAndReferentiel(String codeTypeFichier, String referentielVersion, TypeConfigurationTableauBord typeConfiguration);
+
+    List<TableauBord> findByUser(Long userId, String refVersion);
+
+    List<TableauBord> findByReferentiel(String referentielVersion);
+
+    List<ParticipantToFichierDto> tableauBordToTypeFichiers(String userName, String referentielVersion);
+
+    List<ParticipantToFichierDto> tableauBordToTypeFichiers(TypeConfigurationTableauBord tableauBordConfiguration, String referentielVersion);
+
+    List<TypeFichier> tableauBordTypeFichiers(String userName, String referentielVersion, TypeFichierSearch typeFichierSearch, int pageNumber, int pageSize);
+
+    Long countTableauBordTypeFichiers(String userName, String referentielVersion, TypeFichierSearch typeFichierSearch);
+
+    List<TypeFichier> tableauBordGlobalTypeFichiers(String referentielVersion, TypeFichierSearch typeFichierSearch, int pageNumber, int pageSize);
+
+    Long countTableauBordGlobalTypeFichiers(String referentielVersion, TypeFichierSearch typeFichierSearch);
+
+    //NEW PARADIGM
+    TableauBord findSpecificTableauBord(Long userId, String codeTypeFichier, String referentielVersion);
+
+    TableauBord findGlobalTableauBord(String codeTypeFichier, String referentielVersion);
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/TableauBordGlobalSearchDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/TableauBordGlobalSearchDAO.java
new file mode 100644
index 0000000..f670e85
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/TableauBordGlobalSearchDAO.java
@@ -0,0 +1,12 @@
+package com.megatim.fdxconsultation.dao.ifaces.stats;
+
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithSearchEnityDAO;
+import com.megatim.fdxconsultation.model.searchentities.TableauBordGlobalSearch;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface TableauBordGlobalSearchDAO extends PaginationWithSearchEnityDAO<TableauBord, Long, TableauBordGlobalSearch> {
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/TableauBordUserSpecificSearchDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/TableauBordUserSpecificSearchDAO.java
new file mode 100644
index 0000000..dd9abc1
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/stats/TableauBordUserSpecificSearchDAO.java
@@ -0,0 +1,12 @@
+package com.megatim.fdxconsultation.dao.ifaces.stats;
+
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithSearchEnityDAO;
+import com.megatim.fdxconsultation.model.searchentities.TableauBordSpecificSearch;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface TableauBordUserSpecificSearchDAO extends PaginationWithSearchEnityDAO<TableauBord, Long, TableauBordSpecificSearch> {
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/supervision/AgentConfigurationEntityDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/supervision/AgentConfigurationEntityDAO.java
new file mode 100644
index 0000000..24982ac
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/supervision/AgentConfigurationEntityDAO.java
@@ -0,0 +1,16 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.ifaces.supervision;
+
+import com.megatim.fdxcommons.dao.ifaces.abstracts.CustomDAOIfaces;
+import com.megatim.fdxconsultation.model.supervision.AgentConfigurationEntity;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface AgentConfigurationEntityDAO extends CustomDAOIfaces<AgentConfigurationEntity, Long, AgentConfigurationEntity> {
+    int archiveAgentConfiguration(String code);
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/supervision/StandaloneServerStateEntityDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/supervision/StandaloneServerStateEntityDAO.java
new file mode 100644
index 0000000..c0e9fa6
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/supervision/StandaloneServerStateEntityDAO.java
@@ -0,0 +1,15 @@
+package com.megatim.fdxconsultation.dao.ifaces.supervision;
+
+import com.megatim.fdxcommons.dao.ifaces.abstracts.CustomDAOIfaces;
+import com.megatim.fdxconsultation.model.supervision.StandaloneServerStateEntity;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface StandaloneServerStateEntityDAO extends CustomDAOIfaces<StandaloneServerStateEntity, Long, StandaloneServerStateEntity> {
+
+    void archiveServerState();
+
+    StandaloneServerStateEntity getCurrentStandaloneServerStateEntity();
+}
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/supervision/TransfertDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/supervision/TransfertDAO.java
new file mode 100644
index 0000000..d03803b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/supervision/TransfertDAO.java
@@ -0,0 +1,37 @@
+package com.megatim.fdxconsultation.dao.ifaces.supervision;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithSearchEnityDAO;
+import com.megatim.fdxconsultation.model.searchentities.TransfertSearch;
+import com.megatim.fdxconsultation.model.supervision.SensTransfert;
+import com.megatim.fdxconsultation.model.supervision.Transfert;
+import com.megatim.fdxconsultation.model.supervision.dto.SupervisionFilterModalFormRequest;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface TransfertDAO extends GenericDAO<Transfert, Long>, PaginationWithSearchEnityDAO<Transfert, Long, TransfertSearch> {
+
+    public Long getTotalTransfert(SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin);
+
+    public Long getTransfertsReussie(SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin);
+
+    public Long getTransfertsAttente(SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin);
+
+    public Long getTransfertsEchec(SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin);
+
+    public Long getTransfertsManuel(SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin);
+
+    public Long getTransfertsAutomatique(SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin);
+
+    public Double getTailleTotale(SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin);
+    
+    public Double getVitesseMoyenne(SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin);
+
+    public Long getNombreTypeFichier(SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin);
+
+    public List<Transfert> filter(SupervisionFilterModalFormRequest supervisionFilterModalFormRequest);
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/.gitignore b/fdx-consultation/fdxconsultation-dao-impl/.gitignore
new file mode 100644
index 0000000..b24d71e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/.gitignore
@@ -0,0 +1,50 @@
+# These are some examples of commonly ignored file patterns.
+# You should customize this list as applicable to your project.
+# Learn more about .gitignore:
+#     https://www.atlassian.com/git/tutorials/saving-changes/gitignore
+
+# Node artifact files
+node_modules/
+dist/
+
+# Compiled Java class files
+*.class
+
+# Compiled Python bytecode
+*.py[cod]
+
+# Log files
+*.log
+
+# Package files
+*.jar
+
+# Maven
+target/
+dist/
+
+# JetBrains IDE
+.idea/
+
+# Unit test reports
+TEST*.xml
+
+# Generated by MacOS
+.DS_Store
+
+# Generated by Windows
+Thumbs.db
+
+# Applications
+*.app
+*.exe
+*.war
+
+# Large media files
+*.mp4
+*.tiff
+*.avi
+*.flv
+*.mov
+*.wmv
+
diff --git a/fdx-consultation/fdxconsultation-dao-impl/nb-configuration.xml b/fdx-consultation/fdxconsultation-dao-impl/nb-configuration.xml
new file mode 100644
index 0000000..a65c451
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/nb-configuration.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+    <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+        <!--
+Properties that influence various parts of the IDE, especially code formatting and the like. 
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+        <netbeans.hint.jdkPlatform>JDK_1.8</netbeans.hint.jdkPlatform>
+    </properties>
+</project-shared-configuration>
diff --git a/fdx-consultation/fdxconsultation-dao-impl/pom.xml b/fdx-consultation/fdxconsultation-dao-impl/pom.xml
new file mode 100644
index 0000000..d3148e5
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/pom.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+        <groupId>com.megatim.fdxconsultation</groupId>
+        <artifactId>fdxconsultation</artifactId>
+        <version>1.0</version>
+    </parent>
+    
+    <groupId>com.megatim.fdxconsultation.dao.impl</groupId>
+    <artifactId>fdxconsultation-dao-impl</artifactId>
+    <packaging>jar</packaging>
+    
+    <properties>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
+        <jakartaee>8.0</jakartaee>
+    </properties>    
+    
+    <dependencies>
+        <dependency>
+            <groupId>com.megatim.fdxconsultation.dao.ifaces</groupId>
+            <artifactId>fdxconsultation-dao-ifaces</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxconsultation.tools</groupId>
+            <artifactId>fdxconsultation-tools</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>javax</groupId>
+            <artifactId>javaee-api</artifactId>
+            <version>${jakartaee}</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.12</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.megatimgroup</groupId>
+            <artifactId>mgt-commons-tools</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+    </dependencies>
+    
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <compilerArguments>
+                        <endorseddirs>${endorsed.dir}</endorseddirs>
+                    </compilerArguments>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <version>2.3</version>
+                <configuration>
+                    <failOnMissingWebXml>false</failOnMissingWebXml>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>2.6</version>
+                <executions>
+                    <execution>
+                        <phase>validate</phase>
+                        <goals>
+                            <goal>copy</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${endorsed.dir}</outputDirectory>
+                            <silent>true</silent>
+                            <artifactItems>
+                                <artifactItem>
+                                    <groupId>javax</groupId>
+                                    <artifactId>javaee-api</artifactId>
+                                    <version>${jakartaee}</version>
+                                    <type>jar</type>
+                                </artifactItem>
+                            </artifactItems>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+    <name>fdxconsultation-dao-impl</name>
+</project>
\ No newline at end of file
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/api/token/ApiTokenDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/api/token/ApiTokenDAOImpl.java
new file mode 100644
index 0000000..61fb391
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/api/token/ApiTokenDAOImpl.java
@@ -0,0 +1,52 @@
+package com.megatim.fdxconsultation.dao.api.token;
+
+import com.bekosoftware.genericdaolayer.dao.impl.AbstractGenericDAO;
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import com.megatim.fdxconsultation.dao.ifaces.api.token.ApiTokenDAO;
+import com.megatim.fdxconsultation.model.api.token.ApiToken;
+import java.util.Optional;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class ApiTokenDAOImpl extends AbstractGenericDAO<ApiToken, Long>  implements ApiTokenDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    EntityManager em;
+
+    @Override
+    public Class<ApiToken> getManagedEntityClass() {
+        return ApiToken.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public ApiToken getByCodeParticipant(Participant participant) {
+        Optional<ApiToken> optional = em.createQuery("SELECT a FROM ApiToken a where a.participant = :participant")
+                .setParameter("participant", participant)
+                .getResultList()
+                .stream()
+                .findFirst();
+        return optional.isPresent() ? optional.get() : null;
+    }
+    
+    @Override
+    public ApiToken getByCodeParticipant(String codeParticipant) {
+        Optional<ApiToken> optional = em.createQuery("SELECT a FROM ApiToken a where a.participant.code = :codeParticipant")
+                .setParameter("codeParticipant", codeParticipant)
+                .getResultList()
+                .stream()
+                .findFirst();
+        return optional.isPresent() ? optional.get() : null;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/ActionDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/ActionDAOImpl.java
new file mode 100644
index 0000000..64363f2
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/ActionDAOImpl.java
@@ -0,0 +1,71 @@
+package com.megatim.fdxconsultation.dao.impl.administration;
+
+import com.bekosoftware.genericdaolayer.dao.exceptions.GenericDAOException;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import com.bekosoftware.genericdaolayer.dao.impl.AbstractGenericDAO;
+import com.megatim.fdxconsultation.dao.ifaces.administration.ActionDAO;
+import com.megatim.fdxconsultation.model.administration.Action;
+import javax.enterprise.context.Dependent;
+import javax.persistence.TransactionRequiredException;
+
+/**
+ *
+ * @author DYNABOOK
+ */
+@Dependent
+public class ActionDAOImpl extends AbstractGenericDAO<Action, Long> implements ActionDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    public ActionDAOImpl() {
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<Action> getManagedEntityClass() {
+        return (Action.class);
+    }
+
+    /**
+     * Remove the parameter t in the data base
+     *
+     * @param entityID : id of the entity to delete
+     * @throws GenericDAOException if any problems
+     * @return
+     */
+    @Override
+    public Action delete(Object entityID) {
+
+        //Verification de la validite de entityID
+        if (entityID == null) {
+            throw new GenericDAOException("genericentitymanager.delete.entityID.null");
+        }
+        try {
+            //chargement de l'netite en memoire
+            Action entity = getEntityManager().find(entityClass, entityID);
+            //Execution action de pre-delete
+            processBeforeDelete(entity);
+            //Suppression de entity en BD
+            getEntityManager().createNativeQuery("delete from FS_ACTION where id="+entityID).executeUpdate();
+            //Execution action de  post-delete
+            processAfterDelete(entity);
+            return entity;
+        } catch (IllegalArgumentException e) {
+            //e.printStackTrace();
+            throw new GenericDAOException("genericentitymanager.delete.illegalargumentexception", e);
+        } catch (TransactionRequiredException e) {
+            throw new GenericDAOException("genericentitymanager.delete.transactionrequiredexception", e);
+        } catch (Exception e) {
+            throw new GenericDAOException("genericentitymanager.delete.error", e);
+        }
+
+    }
+    
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/HistoriqueMotDePasseDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/HistoriqueMotDePasseDAOImpl.java
new file mode 100644
index 0000000..6a4b787
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/HistoriqueMotDePasseDAOImpl.java
@@ -0,0 +1,85 @@
+package com.megatim.fdxconsultation.dao.impl.administration;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import com.bekosoftware.genericdaolayer.dao.impl.AbstractGenericDAO;
+import com.bekosoftware.genericdaolayer.dao.tools.RestrictionsContainer;
+import com.megatim.commons.tools.CommonsTools;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxconsultation.dao.ifaces.administration.HistoriqueMotDePasseDAO;
+import com.megatim.fdxconsultation.model.administration.HistoriqueMotDePasse;
+import com.megatim.fdxconsultation.model.administration.User;
+import java.util.List;
+import javax.enterprise.context.Dependent;
+
+/**
+ *
+ * @author DYNABOOK
+ */
+@Dependent
+public class HistoriqueMotDePasseDAOImpl extends AbstractGenericDAO<HistoriqueMotDePasse, Long> implements HistoriqueMotDePasseDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    public HistoriqueMotDePasseDAOImpl() {
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<HistoriqueMotDePasse> getManagedEntityClass() {
+        return (HistoriqueMotDePasse.class);
+    }
+    
+    @Override
+    public boolean siMotDePasseExiste(String motDePasse, User user) {
+        
+        //Variables
+        List<HistoriqueMotDePasse> listeMotsDePasse = null;
+        RestrictionsContainer requeteur = RestrictionsContainer.newInstance();
+        boolean bool = false;
+        
+        //On ajoute les critères de recherche
+        requeteur.addEq("user", user);
+        requeteur.addEq("typeOperation", TypeOperation.AJOUTER);
+        
+        //On recupère le premier mot de passe trouvé
+        listeMotsDePasse = filter(requeteur.getPredicats(), null, null, 0, -1);
+        
+        //Si non vide
+        if(listeMotsDePasse != null && !listeMotsDePasse.isEmpty()){
+            
+            //On parcourt les mots de passe
+            for(HistoriqueMotDePasse historiqueMotDePasse : listeMotsDePasse){
+                
+                try {
+                    
+                    //Si mot de passe matche
+                    if(CommonsTools.validerMotDePasse(motDePasse, historiqueMotDePasse.getMotDePasse())){
+                        
+                        //On marque comme trouvé
+                        bool = true;
+                        
+                        //On sort
+                        break;
+                        
+                    }
+                    
+                } catch (Exception ex) {
+                    
+                    //On affihce l'erreur
+                    ex.printStackTrace();
+                    
+                }
+                
+            }
+            
+        }        
+        return bool;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/JournalActionUtilisateurDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/JournalActionUtilisateurDAOImpl.java
new file mode 100644
index 0000000..3433371
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/JournalActionUtilisateurDAOImpl.java
@@ -0,0 +1,44 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.administration;
+
+import com.bekosoftware.genericdaolayer.dao.impl.AbstractGenericDAO;
+import com.megatim.fdxconsultation.dao.ifaces.administration.JournalActionUtilisateurDAO;
+import com.megatim.fdxconsultation.model.administration.JournalActionUtilisateur;
+import java.util.Optional;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class JournalActionUtilisateurDAOImpl extends AbstractGenericDAO<JournalActionUtilisateur, Long> implements JournalActionUtilisateurDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<JournalActionUtilisateur> getManagedEntityClass() {
+        return (JournalActionUtilisateur.class);
+    }
+
+    @Override
+    public JournalActionUtilisateur getById(Long id) {
+        Query query = em.createQuery("SELECT u from JournalActionUtilisateur u  WHERE u.id = :id");
+        query.setParameter("id", id);
+        Optional<JournalActionUtilisateur> optionalLog = query.getResultList().stream().findFirst();
+        return optionalLog.isPresent() ? optionalLog.get() : null;
+    }
+    
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/JournalConnexionUtilisateurDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/JournalConnexionUtilisateurDAOImpl.java
new file mode 100644
index 0000000..406157c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/JournalConnexionUtilisateurDAOImpl.java
@@ -0,0 +1,44 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.administration;
+
+import com.bekosoftware.genericdaolayer.dao.impl.AbstractGenericDAO;
+import com.megatim.fdxconsultation.dao.ifaces.administration.*;
+import com.megatim.fdxconsultation.model.administration.*;
+import java.util.Optional;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class JournalConnexionUtilisateurDAOImpl extends AbstractGenericDAO<JournalConnexionUtilisateur, Long> implements JournalConnexionUtilisateurDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<JournalConnexionUtilisateur> getManagedEntityClass() {
+        return (JournalConnexionUtilisateur.class);
+    }
+
+    @Override
+    public JournalConnexionUtilisateur getById(Long id) {
+        Query query = em.createQuery("SELECT u from JournalConnexionUtilisateur u  WHERE u.id = :id");
+        query.setParameter("id", id);
+
+        Optional<JournalConnexionUtilisateur> optionalLog = query.getResultList().stream().findFirst();
+        return optionalLog.isPresent() ? optionalLog.get() : null;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/RoleDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/RoleDAOImpl.java
new file mode 100644
index 0000000..faa16bb
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/RoleDAOImpl.java
@@ -0,0 +1,53 @@
+package com.megatim.fdxconsultation.dao.impl.administration;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import com.bekosoftware.genericdaolayer.dao.impl.AbstractGenericDAO;
+import com.bekosoftware.genericdaolayer.dao.tools.RestrictionsContainer;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxconsultation.dao.ifaces.administration.RoleDAO;
+import com.megatim.fdxconsultation.model.administration.Role;
+import java.util.Optional;
+import javax.enterprise.context.Dependent;
+
+/**
+ *
+ * @author DYNABOOK
+ */
+@Dependent
+public class RoleDAOImpl extends AbstractGenericDAO<Role, Long> implements RoleDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+    
+    public RoleDAOImpl() {
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<Role> getManagedEntityClass() {
+        return (Role.class);
+    }
+
+    @Override
+    public Role getCurrentRole() {
+        RestrictionsContainer requeteur = RestrictionsContainer.newInstance();
+        requeteur.addEq("typeOperation", TypeOperation.AJOUTER);
+        return filter(requeteur.getPredicats(), null, null, 0, 1).stream().findAny().orElse(null);
+    }
+
+    @Override
+    public Role getById(Long id) {
+        Optional<Role> optional = em.createQuery("SELECT r from Role r "
+                + "WHERE r.id = :id")
+                .setParameter("id", id)
+                .getResultList()
+                .stream()
+                .findFirst();
+        return optional.isPresent() ? optional.get() : null;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/UserDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/UserDAOImpl.java
new file mode 100644
index 0000000..bfb65d6
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/administration/UserDAOImpl.java
@@ -0,0 +1,140 @@
+package com.megatim.fdxconsultation.dao.impl.administration;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import com.bekosoftware.genericdaolayer.dao.impl.AbstractGenericDAO;
+import com.bekosoftware.genericdaolayer.dao.tools.RestrictionsContainer;
+import com.megatim.commons.tools.CommonsTools;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxconsultation.dao.ifaces.administration.UserDAO;
+import com.megatim.fdxconsultation.model.administration.Role;
+import com.megatim.fdxconsultation.model.administration.User;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import javax.enterprise.context.Dependent;
+
+@Dependent
+public class UserDAOImpl extends AbstractGenericDAO<User, Long> implements UserDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    public UserDAOImpl() {
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<User> getManagedEntityClass() {
+        return (User.class);
+    }
+
+    @Override
+    public User getById(Long id) {
+        Optional<User> optional = em.createQuery("SELECT u from User u"
+                + " LEFT JOIN FETCH u.typeFichiers "
+                + " WHERE u.id = :id")
+                .setParameter("id", id)
+                .getResultList()
+                .stream()
+                .findFirst();;
+        return optional.isPresent() ? optional.get() : null;
+    }
+
+    @Override
+    public User getCurrentUser() {
+        RestrictionsContainer requeteur = RestrictionsContainer.newInstance();
+        requeteur.addEq("typeOperation", TypeOperation.AJOUTER);
+        return filter(requeteur.getPredicats(), null, null, 0, 1).stream().findAny().orElse(null);
+    }
+
+    @Override
+    public User recuperUtilisateur(String username, String motDePasse) {
+        //Variables
+        List<User> resutlats = null;
+        User user = null;
+        boolean isCorrect = false;
+        RestrictionsContainer requeteur = RestrictionsContainer.newInstance();
+
+        //On construit la requete
+        requeteur.addEq("userName", username);
+        requeteur.addEq("typeOperation", TypeOperation.AJOUTER);
+
+        //On execute la requte
+        resutlats = filter(requeteur.getPredicats(), null, null, 0, 1);
+
+        //Si liste non vide
+        if (resutlats != null && !resutlats.isEmpty()) {
+
+            try {
+
+                //On recupere le user
+                user = resutlats.get(0);
+
+                //On verifie si le mot de passe est correct
+                isCorrect = CommonsTools.validerMotDePasse(motDePasse, user.getPwd());
+
+                //Si incorrect
+                if (!isCorrect) {
+
+                    //Utilisateur non trouvé
+                    user = null;
+
+                }
+
+            } catch (Exception ex) {
+
+                //On affiche l'erreur
+                ex.printStackTrace();
+
+            }
+
+        }
+
+        return user;
+    }
+
+    @Override
+    public User recuperUtilisateur(String username) {
+        Optional<User> optional = em.createQuery("SELECT u from User u"
+                + " LEFT JOIN FETCH u.typeFichiers "
+                + " LEFT JOIN FETCH u.participants "
+                + " WHERE u.userName = :username AND u.typeOperation = :typeOperation")
+                .setParameter("username", username)
+                .setParameter("typeOperation", TypeOperation.AJOUTER)
+                .getResultList()
+                .stream()
+                .findFirst();
+        return optional.isPresent() ? optional.get() : null;
+    }
+
+    @Override
+    public List<User> obtenirListeUtilisateursRole(Role role) {
+
+        //variables
+        List<User> utilisateurs = null;
+        RestrictionsContainer requeteur = RestrictionsContainer.newInstance();
+
+        //On construit la requete
+        requeteur.addEq("role", role);
+        requeteur.addEq("typeOperation", TypeOperation.AJOUTER);
+
+        //On execute la requte
+        utilisateurs = filter(requeteur.getPredicats(), null, null, 0, -1);
+
+        //Si liste null
+        if (utilisateurs == null) {
+
+            //On crée une instance vide
+            utilisateurs = new ArrayList<User>();
+
+        }
+
+        return utilisateurs;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/configuration/CodeStatutHttpDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/configuration/CodeStatutHttpDAOImpl.java
new file mode 100644
index 0000000..f30b304
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/configuration/CodeStatutHttpDAOImpl.java
@@ -0,0 +1,30 @@
+package com.megatim.fdxconsultation.dao.impl.configuration;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import com.bekosoftware.genericdaolayer.dao.impl.AbstractGenericDAO;
+import com.megatim.fdxconsultation.dao.ifaces.configuration.CodeStatutHttpDAO;
+import com.megatim.fdxconsultation.model.configuration.CodeStatutHttp;
+import javax.enterprise.context.Dependent;
+
+@Dependent
+public class CodeStatutHttpDAOImpl extends AbstractGenericDAO<CodeStatutHttp, Long> implements CodeStatutHttpDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+    
+    public CodeStatutHttpDAOImpl() {
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<CodeStatutHttp> getManagedEntityClass() {
+        return (CodeStatutHttp.class);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/dataproduction/DataProductionDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/dataproduction/DataProductionDAOImpl.java
new file mode 100644
index 0000000..bcd4cec
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/dataproduction/DataProductionDAOImpl.java
@@ -0,0 +1,53 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.dataproduction;
+
+import com.megatim.fdxconsultation.dao.ifaces.dataproduction.DataProductionDAO;
+import com.megatim.fdxcommons.model.enumeration.StatutDataProduction;
+import com.megatim.fdxconsultation.model.dataproduction.DataProduction;
+import java.util.List;
+import java.util.Optional;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class DataProductionDAOImpl implements DataProductionDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    EntityManager em;
+
+    @Override
+    public Class<DataProduction> getManagedEntityClass() {
+        return DataProduction.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public DataProduction getById(Long id) {
+        Query query = em.createQuery("SELECT d from DataProduction d"
+                + " WHERE d.id = :id");
+        query.setParameter("id", id);
+
+        Optional<DataProduction> optDataProduction = query.getResultList().stream().findFirst();
+        return optDataProduction.isPresent() ? optDataProduction.get() : null;
+    }
+
+    @Override
+    public List<DataProduction> findByStatutDataProduction(StatutDataProduction statut) {
+        return em
+                .createQuery("SELECT d from DataProduction d WHERE d.statutDataProduction = :statut ORDER BY id")
+                .setParameter("statut", statut).getResultList();
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/dataproduction/DataProductionToDeleteDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/dataproduction/DataProductionToDeleteDAOImpl.java
new file mode 100644
index 0000000..8f63a07
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/dataproduction/DataProductionToDeleteDAOImpl.java
@@ -0,0 +1,38 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.dataproduction;
+
+import com.megatim.fdxconsultation.dao.ifaces.dataproduction.DataProductionToDeleteDAO;
+import com.megatim.fdxcommons.model.dataproduction.DataProductionToDelete;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class DataProductionToDeleteDAOImpl implements DataProductionToDeleteDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    EntityManager em;
+
+    @Override
+    public Class<DataProductionToDelete> getManagedEntityClass() {
+        return DataProductionToDelete.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public DataProductionToDelete getById(Long id) {
+        throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/dataproduction/metadata/CreateDataProductionQuery.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/dataproduction/metadata/CreateDataProductionQuery.java
new file mode 100644
index 0000000..19dfcf9
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/dataproduction/metadata/CreateDataProductionQuery.java
@@ -0,0 +1,63 @@
+package com.megatim.fdxconsultation.dao.impl.dataproduction.metadata;
+
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import com.megatim.fdxconsultation.model.dataproduction.DataProduction;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class CreateDataProductionQuery implements QueryMetaData<Void> {
+
+    private final DataProduction dataProduction;
+    private final Connection connection;
+
+    public CreateDataProductionQuery(DataProduction dataProduction, Connection connection) {
+        this.dataProduction = dataProduction;
+        this.connection = connection;
+    }
+
+    private String queryString() {
+        return "INSERT INTO dataproduction(id, dateproduction, referentielversion, codetypefichier"
+                + ", codeparticipant, source, filename, statutdataproduction"
+                + ", filedate, dataProductionType, token, nbreElements"
+                + ", tailleFichier, integrationFileName, dateMiseAJour)"
+                + " VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+    }
+
+    @Override
+    public Void execute() throws NamingException, SQLException {
+
+        System.out.println("<-------------------------------------------------------------------------->");
+        System.out.println(queryString());
+        System.out.println("<-------------------------------------------------------------------------->");
+
+        try ( PreparedStatement statement = connection.prepareStatement(queryString())) {
+
+            statement.setLong(1, dataProduction.getId());
+            statement.setTimestamp(2, dataProduction.getDateProduction() != null ? Timestamp.valueOf(dataProduction.getDateProduction()) : null);
+            statement.setString(3, dataProduction.getReferentielVersion());
+            statement.setString(4, dataProduction.getCodeTypeFichier());
+            statement.setString(5, dataProduction.getCodeParticipant());
+            statement.setString(6, dataProduction.getSource().name());
+            statement.setString(7, dataProduction.getFileName());
+            statement.setString(8, dataProduction.getStatutDataProduction().name());
+            statement.setTimestamp(9, dataProduction.getFileDate() != null ? Timestamp.valueOf(dataProduction.getFileDate()) : null);
+            statement.setString(10, dataProduction.getDataProductionType().name());
+            statement.setString(11, dataProduction.getToken());
+            statement.setLong(12, dataProduction.getNbreElements());
+            statement.setLong(13, dataProduction.getTailleFichier());
+            statement.setString(14, dataProduction.getIntegrationFileName());
+            statement.setTimestamp(15, dataProduction.getDateMiseAJour() != null ? Timestamp.valueOf(dataProduction.getDateMiseAJour()) : null);
+
+            statement.executeUpdate();
+
+            return null;
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/dataproduction/metadata/CreateProductionMetaDataQuery.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/dataproduction/metadata/CreateProductionMetaDataQuery.java
new file mode 100644
index 0000000..f578a1e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/dataproduction/metadata/CreateProductionMetaDataQuery.java
@@ -0,0 +1,85 @@
+package com.megatim.fdxconsultation.dao.impl.dataproduction.metadata;
+
+import com.megatim.fdxcommons.model.dataproduction.DataProductionType;
+import com.megatim.fdxcommons.model.dataproduction.metadata.ProductionMetaData;
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class CreateProductionMetaDataQuery implements QueryMetaData<Void> {
+
+    private final ProductionMetaData pmd;
+    private final DataProductionType dataProductionType;
+    private final Connection connection;
+    private final int BATCH_SIZE = 100_000;
+
+    public CreateProductionMetaDataQuery(ProductionMetaData pmd, DataProductionType dataProductionType, Connection connection) {
+        this.pmd = pmd;
+        this.dataProductionType = dataProductionType;
+        this.connection = connection;
+    }
+
+    @Override
+    public Void execute() throws NamingException, SQLException {
+
+        if (dataProductionType.equals(DataProductionType.ADD)) {
+            executeAddDataType();
+
+        } else if (dataProductionType.equals(DataProductionType.UPDATE)) {
+            executeUpdateDataType();
+        }
+        return null;
+    }
+
+    private void executeAddDataType() throws SQLException {
+        System.out.println("--------------------- pmd.getNbreElts() = " + pmd.getNbreElts());
+        try ( PreparedStatement statement = connection.prepareStatement(productionMetaDataQueryString())) {
+
+            statement.setLong(1, pmd.getProductionId());
+            statement.setLong(2, pmd.getStartIndex());
+            statement.setLong(3, pmd.getNbreElts());
+            statement.setString(4, pmd.getDataProductionType());
+
+            statement.executeUpdate();
+
+        }
+    }
+
+    private void executeUpdateDataType() throws SQLException {
+        try ( PreparedStatement metaDataStatement = connection.prepareStatement(productionMetaDataQueryString());  PreparedStatement indexesStatement = connection.prepareStatement(productionMetaDataIndexesQuery())) {
+            metaDataStatement.executeUpdate();
+            executeInBatch(indexesStatement);
+            indexesStatement.executeBatch();
+        }
+    }
+
+    private String productionMetaDataQueryString() {
+        return "INSERT INTO ProductionMetaData(productionId, startIndex, nbreElts, dataProductionType)"
+                + " VALUES(?, ?, ?, ?)";
+    }
+
+    private String productionMetaDataIndexesQuery() {
+        return "INSERT INTO productionMetaData_indexes(productionId, indexes) VALUES(?, ?)";
+    }
+
+    private void executeInBatch(PreparedStatement preparedStatement) throws SQLException {
+        int count = 0;
+
+        for (Long l : pmd.getIndexes()) {
+            preparedStatement.setLong(1, pmd.getProductionId());
+            preparedStatement.setLong(2, l);
+            preparedStatement.addBatch();
+
+            if (++count % BATCH_SIZE == 0) {
+                preparedStatement.executeBatch();
+            }
+        }
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/dataproduction/metadata/ProductionMetaDataDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/dataproduction/metadata/ProductionMetaDataDAOImpl.java
new file mode 100644
index 0000000..c2066af
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/dataproduction/metadata/ProductionMetaDataDAOImpl.java
@@ -0,0 +1,52 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.dataproduction.metadata;
+
+import com.megatim.fdxcommons.model.dataproduction.metadata.ProductionMetaData;
+import com.megatim.fdxcommons.model.dataproduction.metadata.ProductionMetaDataId;
+import com.megatim.fdxconsultation.dao.ifaces.dataproduction.metadata.ProductionMetaDataDAO;
+import java.util.List;
+import java.util.Optional;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class ProductionMetaDataDAOImpl implements ProductionMetaDataDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    EntityManager em;
+
+    @Override
+    public Class<ProductionMetaData> getManagedEntityClass() {
+        return ProductionMetaData.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public ProductionMetaData getById(Long id) {
+        Query query = em.createQuery("SELECT p FROM ProductionMetaData p WHERE p.productionId = :id");
+        query.setParameter("id", id);
+
+        Optional<ProductionMetaData> optMetaData = query.getResultList().stream().findFirst();
+        return optMetaData.isPresent() ? optMetaData.get() : null;
+    }
+
+    @Override
+    public void deleteById(Long dataProductionId) {
+        Query query = em.createQuery("DELETE FROM ProductionMetaData p WHERE p.productionId = :dataProductionId");
+        query.setParameter("dataProductionId", dataProductionId);
+        query.executeUpdate();
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/integration/ColumnDefinitionDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/integration/ColumnDefinitionDAOImpl.java
new file mode 100644
index 0000000..002b874
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/integration/ColumnDefinitionDAOImpl.java
@@ -0,0 +1,50 @@
+package com.megatim.fdxconsultation.dao.impl.integration;
+
+import com.megatim.fdxcommons.dao.ifaces.integration.ColumnDefinitionDAO;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import java.util.List;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Tuple;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class ColumnDefinitionDAOImpl implements ColumnDefinitionDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    EntityManager em;
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<ColumnDefinition> getManagedEntityClass() {
+        return (ColumnDefinition.class);
+    }
+
+    @Override
+    public List<ColumnDefinition> findByReferentielAndTypeFichier(String referentielVersion, String codeTypeFichier) {
+        return em
+                .createQuery("SELECT c FROM ColumnDefinition c"
+                        + " WHERE c.referentielVersion = :referentielVersion AND c.codeTypeFichier = :codeTypeFichier")
+                .setParameter("referentielVersion", referentielVersion)
+                .setParameter("codeTypeFichier", codeTypeFichier)
+                .getResultList();
+
+    }
+
+    @Override
+    public List<Tuple> byRefVersionAndByTypeFichier() {
+        String query = "SELECT codetypefichier, referentielversion"
+                + " FROM columndefinition"
+                + " GROUP BY referentielversion, codetypefichier"
+                + " ORDER BY referentielversion";
+        return em.createNativeQuery(query, Tuple.class).getResultList();
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/integration/EchecIntegrationDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/integration/EchecIntegrationDAOImpl.java
new file mode 100644
index 0000000..56bb3c0
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/integration/EchecIntegrationDAOImpl.java
@@ -0,0 +1,46 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.integration;
+
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import com.megatim.fdxconsultation.dao.ifaces.integration.EchecIntegrationDAO;
+import com.megatim.fdxconsultation.model.integration.EchecIntegration;
+import java.util.Optional;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class EchecIntegrationDAOImpl implements EchecIntegrationDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    EntityManager em;
+
+    @Override
+    public Class<EchecIntegration> getManagedEntityClass() {
+        return EchecIntegration.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public EchecIntegration getById(Long id) {
+        Query query = em.createQuery("SELECT e from EchecIntegration e"
+                + " WHERE e.id = :id");
+        query.setParameter("id", id);
+
+        Optional<EchecIntegration> optEchecIntegration = query.getResultList().stream().findFirst();
+        return optEchecIntegration.isPresent() ? optEchecIntegration.get() : null;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/integration/TableDefinitionDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/integration/TableDefinitionDAOImpl.java
new file mode 100644
index 0000000..e907084
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/integration/TableDefinitionDAOImpl.java
@@ -0,0 +1,31 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.integration;
+
+import com.megatim.fdxcommons.dao.ifaces.integration.TableDefinitionDAO;
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class TableDefinitionDAOImpl implements TableDefinitionDAO {
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    EntityManager em;
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<TableDefinition> getManagedEntityClass() {
+        return (TableDefinition.class);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/log/ApiUserActionLogDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/log/ApiUserActionLogDAOImpl.java
new file mode 100644
index 0000000..9f61584
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/log/ApiUserActionLogDAOImpl.java
@@ -0,0 +1,156 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.log;
+
+import com.megatim.fdxconsultation.dao.ifaces.log.ApiUserActionLogDAO;
+import com.megatim.fdxconsultation.dao.impl.log.util.QueryExtendsWithApiUserActionSummarySearch;
+import com.megatim.fdxconsultation.model.dto.log.UserActionStatData;
+import com.megatim.fdxconsultation.model.dto.log.UserActionStatDto;
+import com.megatim.fdxconsultation.model.log.ApiUserActionLog;
+import com.megatim.fdxconsultation.model.log.dtos.ApiUserActionSummarySearch;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import javax.persistence.TypedQuery;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class ApiUserActionLogDAOImpl implements ApiUserActionLogDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<ApiUserActionLog> getManagedEntityClass() {
+        return (ApiUserActionLog.class);
+    }
+
+    @Override
+    public ApiUserActionLog getById(Long id) {
+
+        Query query = em.createQuery("SELECT u FROM ApiUserActionLog u  WHERE u.id = :id");
+        query.setParameter("id", id);
+
+        Optional<ApiUserActionLog> optionalLog = query.getResultList().stream().findFirst();
+        return optionalLog.isPresent() ? optionalLog.get() : null;
+    }
+
+    @Override
+    public List<UserActionStatDto> getByStatut(ApiUserActionSummarySearch apiUserActionSummarySearch) {
+
+        String selectQueryString = "SELECT u.status, COALESCE(COUNT(u.status), 0) FROM ApiUserActionLog u";
+        String whereQueryString = "";
+        String groupQueryString = "GROUP BY u.status";
+        List<Object[]> liste = new QueryExtendsWithApiUserActionSummarySearch(apiUserActionSummarySearch, em, selectQueryString, whereQueryString, groupQueryString).query().getResultList();
+
+        List<UserActionStatDto> scalarResults = new ArrayList<>();
+        liste.stream().forEach(tab -> {
+            UserActionStatDto scalar = new UserActionStatDto();
+            scalar.setLibelle(tab[0].toString());
+            scalar.setValue(Long.valueOf(tab[1].toString()));
+            scalarResults.add(scalar);
+        });
+        return scalarResults;
+    }
+
+    @Override
+    public List<UserActionStatData> getByStatutAndUserName(ApiUserActionSummarySearch apiUserActionSummarySearch) {
+
+        String selectQueryString = "SELECT u.userName, u.status, COALESCE(COUNT(u.status), 0) FROM ApiUserActionLog u";
+        String whereQueryString = "WHERE u.userName IS NOT NULL AND u.status IS NOT NULL";
+        String groupQueryString = "GROUP BY u.userName, u.status";
+        List<Object[]> liste = new QueryExtendsWithApiUserActionSummarySearch(apiUserActionSummarySearch, em, selectQueryString, whereQueryString, groupQueryString).query().getResultList();
+
+        Map<String, List<UserActionStatDto>> userNameToUserActionStatDto = new HashMap<>();
+
+        liste.stream().filter(tab -> tab[0] != null && tab[1] != null).forEach(tab -> {
+
+            String key = tab[0].toString();
+
+            final UserActionStatDto d = new UserActionStatDto();
+            d.setLibelle(tab[1].toString());
+            d.setValue(Long.valueOf(tab[2].toString()));
+
+            if (!userNameToUserActionStatDto.containsKey(key)) {
+
+                List<UserActionStatDto> data = new ArrayList<>();
+                data.add(d);
+                userNameToUserActionStatDto.put(key, data);
+
+            } else {
+
+                List<UserActionStatDto> data = userNameToUserActionStatDto.get(key);
+                data.add(d);
+
+                userNameToUserActionStatDto.put(key, data);
+
+            }
+        });
+
+        return userNameToUserActionStatDto.entrySet().stream().map(e -> {
+            final UserActionStatData actionStatData = new UserActionStatData();
+            actionStatData.setLibelle(e.getKey());
+            actionStatData.setData(e.getValue());
+            return actionStatData;
+        }).collect(Collectors.toList());
+    }
+
+    @Override
+    public List<UserActionStatData> getByStatutAndPath(ApiUserActionSummarySearch apiUserActionSummarySearch) {
+
+        String selectQueryString = "SELECT u.relativePath, u.status, COUNT(u.status) FROM ApiUserActionLog u";
+        String whereQueryString = "";
+        String groupQueryString = "GROUP BY u.relativePath, u.status";
+        List<Object[]> liste = new QueryExtendsWithApiUserActionSummarySearch(apiUserActionSummarySearch, em, selectQueryString, whereQueryString, groupQueryString).query().getResultList();
+
+        Map<String, List<UserActionStatDto>> userNameToUserActionStatDto = new HashMap<>();
+
+        liste.stream().forEach(tab -> {
+
+            String key = tab[0].toString();
+
+            UserActionStatDto d = new UserActionStatDto();
+            d.setLibelle(tab[1].toString());
+            d.setValue(Long.valueOf(tab[2].toString()));
+
+            if (!userNameToUserActionStatDto.containsKey(key)) {
+
+                List<UserActionStatDto> data = new ArrayList<>();
+                data.add(d);
+                userNameToUserActionStatDto.put(key, data);
+
+            } else {
+
+                List<UserActionStatDto> data = userNameToUserActionStatDto.get(key);
+                data.add(d);
+
+                userNameToUserActionStatDto.put(key, data);
+
+            }
+        });
+
+        return userNameToUserActionStatDto.entrySet().stream().map(e -> {
+            UserActionStatData actionStatData = new UserActionStatData();
+            actionStatData.setLibelle(e.getKey());
+            actionStatData.setData(e.getValue());
+            return actionStatData;
+        }).collect(Collectors.toList());
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/log/UserActionLogDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/log/UserActionLogDAOImpl.java
new file mode 100644
index 0000000..29df89b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/log/UserActionLogDAOImpl.java
@@ -0,0 +1,44 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.log;
+
+import com.megatim.fdxcommons.model.log.UserActionLog;
+import com.megatim.fdxconsultation.dao.ifaces.log.UserActionLogDAO;
+import java.util.Optional;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class UserActionLogDAOImpl implements UserActionLogDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<UserActionLog> getManagedEntityClass() {
+        return (UserActionLog.class);
+    }
+
+    @Override
+    public UserActionLog getById(Long id) {
+        Query query = em.createQuery("SELECT u from UserActionLog u  WHERE u.id = :id");
+        query.setParameter("id", id);
+
+        Optional<UserActionLog> optionalLog = query.getResultList().stream().findFirst();
+        return optionalLog.isPresent() ? optionalLog.get() : null;
+    }
+    
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/log/util/QueryExtendsWithApiUserActionSummarySearch.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/log/util/QueryExtendsWithApiUserActionSummarySearch.java
new file mode 100644
index 0000000..c8ecffa
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/log/util/QueryExtendsWithApiUserActionSummarySearch.java
@@ -0,0 +1,106 @@
+package com.megatim.fdxconsultation.dao.impl.log.util;
+
+import com.megatim.fdxconsultation.model.log.dtos.ApiUserActionSummarySearch;
+import javax.persistence.EntityManager;
+import javax.persistence.TypedQuery;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class QueryExtendsWithApiUserActionSummarySearch {
+
+    private final ApiUserActionSummarySearch apiUserActionSummarySearch;
+    private final String selectQueryString;
+    private final String whereQueryString;
+    private final String groupQueryString;
+    private final EntityManager em;
+
+    public QueryExtendsWithApiUserActionSummarySearch(
+            ApiUserActionSummarySearch apiUserActionSummarySearch,
+            EntityManager em,
+            String selectQueryString,
+            String whereQueryString,
+            String groupQueryString) {
+
+        this.apiUserActionSummarySearch = apiUserActionSummarySearch;
+        this.selectQueryString = selectQueryString;
+        this.whereQueryString = whereQueryString;
+        this.groupQueryString = groupQueryString;
+        this.em = em;
+    }
+
+    public TypedQuery<Object[]> query() {
+
+        TypedQuery<Object[]> query = em.createQuery(queryString(), Object[].class);
+        setParameter(query);
+        return query;
+    }
+
+    private void setParameter(TypedQuery<Object[]> query) {
+
+        if (apiUserActionSummarySearch.getParticipant() != null) {
+            query.setParameter("participant", apiUserActionSummarySearch.getParticipant().getCode());
+        }
+
+        if (apiUserActionSummarySearch.getDateDebut() != null) {
+            query.setParameter("dateDebut", apiUserActionSummarySearch.getDateDebut());
+        }
+
+        if (apiUserActionSummarySearch.getDateFin() != null) {
+            query.setParameter("dateFin", apiUserActionSummarySearch.getDateFin().toLocalDate().atTime(23, 59, 59));
+        }
+
+    }
+
+    private String queryString() {
+
+        StringBuilder stringBuilder = new StringBuilder(selectQueryString);
+
+        boolean result = withWhereString();
+        if (result) {
+            stringBuilder.append(" ").append(whereQueryString);
+        }
+
+        if (apiUserActionSummarySearch.getParticipant() != null) {
+            if (result) {
+                stringBuilder.append(" AND ");
+            } else {
+                stringBuilder.append(" WHERE ");
+            }
+
+            stringBuilder.append("u.userName = :participant");
+            result = true;
+        }
+
+        if (apiUserActionSummarySearch.getDateDebut() != null) {
+            if (result) {
+                stringBuilder.append(" AND ");
+            } else {
+                stringBuilder.append(" WHERE ");
+            }
+
+            stringBuilder.append("u.dateAction >= :dateDebut");
+            result = true;
+        }
+
+        if (apiUserActionSummarySearch.getDateFin() != null) {
+            if (result) {
+                stringBuilder.append(" AND ");
+            } else {
+                stringBuilder.append(" WHERE ");
+            }
+
+            stringBuilder.append("u.dateAction <= :dateFin");
+        }
+
+        stringBuilder.append(" ").append(groupQueryString);
+
+        return stringBuilder.toString();
+    }
+
+    private boolean withWhereString() {
+        return whereQueryString != null && !whereQueryString.isEmpty();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/message/systeme/MessageSystemeDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/message/systeme/MessageSystemeDAOImpl.java
new file mode 100644
index 0000000..f5ec29b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/message/systeme/MessageSystemeDAOImpl.java
@@ -0,0 +1,56 @@
+package com.megatim.fdxconsultation.dao.impl.message.systeme;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import com.bekosoftware.genericdaolayer.dao.impl.AbstractGenericDAO;
+import com.megatim.fdxcommons.model.enumeration.*;
+import com.megatim.fdxconsultation.dao.ifaces.message.systeme.MessageSystemeDAO;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.message.systeme.MessageSysteme;
+import java.util.Date;
+import javax.enterprise.context.Dependent;
+
+/**
+ *
+ * @author DYNABOOK
+ */
+@Dependent
+public class MessageSystemeDAOImpl extends AbstractGenericDAO<MessageSysteme, Long> implements MessageSystemeDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    public MessageSystemeDAOImpl() {
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<MessageSysteme> getManagedEntityClass() {
+        return (MessageSysteme.class);
+    }
+    
+    @Override
+    public void ajouter(TypeMessageSysteme typeMessageSysteme, TypeIdMessageSysteme typeIdMessageSysteme, String contenu, User utilisateur) {
+
+        //Variables
+        MessageSysteme messageSysteme = new MessageSysteme();
+        Date dateCourante = new Date();
+
+        //On inserre les informations complementaires
+        messageSysteme.setTypeMessageSysteme(typeMessageSysteme);
+        messageSysteme.setTypeIdMessageSysteme(typeIdMessageSysteme);
+        messageSysteme.setContenu(contenu);
+        messageSysteme.setUtilisateurCreation(utilisateur != null ? utilisateur.getUserName() : null);
+        messageSysteme.setDateCreation(dateCourante);
+        messageSysteme.setUtilisateur(utilisateur);
+        
+        //On save le message
+        save(messageSysteme);
+        
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ApplicationSourceDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ApplicationSourceDAOImpl.java
new file mode 100644
index 0000000..6097517
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ApplicationSourceDAOImpl.java
@@ -0,0 +1,40 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.ApplicationSource;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.ApplicationSourceDAO;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class ApplicationSourceDAOImpl implements ApplicationSourceDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    public ApplicationSourceDAOImpl() {
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<ApplicationSource> getManagedEntityClass() {
+        return (ApplicationSource.class);
+    }
+
+    @Override
+    public ApplicationSource getById(String id) {
+        throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ExtensionFichierDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ExtensionFichierDAOImpl.java
new file mode 100644
index 0000000..4c9cfd0
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ExtensionFichierDAOImpl.java
@@ -0,0 +1,51 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.ExtensionFichier;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.ExtensionFichierDAO;
+import java.util.Optional;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class ExtensionFichierDAOImpl implements ExtensionFichierDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    public ExtensionFichierDAOImpl() {
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<ExtensionFichier> getManagedEntityClass() {
+        return (ExtensionFichier.class);
+    }
+
+    @Override
+    public ExtensionFichier getById(String id) {
+        Query query = em.createQuery("SELECT e FROM ExtensionFichier e where e.extension = :extension");
+        query.setParameter("extension", id);
+
+        Optional<ExtensionFichier> optionalExtensionFichier = query.getResultList().stream().findFirst();
+
+        if (optionalExtensionFichier.isPresent()) {
+            return optionalExtensionFichier.get();
+        } else {
+            return null;
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/GroupeNoeudDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/GroupeNoeudDAOImpl.java
new file mode 100644
index 0000000..8bdecb2
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/GroupeNoeudDAOImpl.java
@@ -0,0 +1,53 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.GroupeNoeud;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.GroupeNoeudDAO;
+import java.util.Optional;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class GroupeNoeudDAOImpl implements GroupeNoeudDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    public GroupeNoeudDAOImpl() {
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<GroupeNoeud> getManagedEntityClass() {
+        return (GroupeNoeud.class);
+    }
+
+    @Override
+    public GroupeNoeud getById(String id) {
+        Query query = em.createQuery("SELECT gn FROM GroupeNoeud gn"
+                + " LEFT JOIN FETCH gn.noeuds LEFT JOIN FETCH gn.routageEnvois LEFT JOIN FETCH gn.routageReceptions"
+                + " WHERE gn.code = :code");
+        query.setParameter("code", id);
+
+        Optional<GroupeNoeud> optionalGroupeNoeud = query.getResultList().stream().findFirst();
+
+        if (optionalGroupeNoeud.isPresent()) {
+            return optionalGroupeNoeud.get();
+        } else {
+            return null;
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/GroupeParticipantDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/GroupeParticipantDAOImpl.java
new file mode 100644
index 0000000..4b9b792
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/GroupeParticipantDAOImpl.java
@@ -0,0 +1,52 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.GroupeParticipant;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.GroupeParticipantDAO;
+import java.util.Optional;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class GroupeParticipantDAOImpl implements GroupeParticipantDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    public GroupeParticipantDAOImpl() {
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<GroupeParticipant> getManagedEntityClass() {
+        return (GroupeParticipant.class);
+    }
+
+    @Override
+    public GroupeParticipant getById(String id) {
+        Query query = em.createQuery("SELECT gp FROM GroupeParticipant gp"
+                + " LEFT JOIN FETCH gp.participants LEFT JOIN FETCH gp.routageEnvois LEFT JOIN FETCH gp.routageReceptions"
+                + " WHERE gp.code = :code");
+        query.setParameter("code", id);
+
+        Optional<GroupeParticipant> optionalGroupeParticipant = query.getResultList().stream().findFirst();
+        if (optionalGroupeParticipant.isPresent()) {
+            return optionalGroupeParticipant.get();
+        } else {
+            return null;
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/NoeudDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/NoeudDAOImpl.java
new file mode 100644
index 0000000..4b43dda
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/NoeudDAOImpl.java
@@ -0,0 +1,29 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.referentiel;
+
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.NoeudDAO;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class NoeudDAOImpl implements NoeudDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    public NoeudDAOImpl() {
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ParticipantDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ParticipantDAOImpl.java
new file mode 100644
index 0000000..4527c52
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ParticipantDAOImpl.java
@@ -0,0 +1,49 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.ParticipantDAO;
+import java.util.Optional;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class ParticipantDAOImpl implements ParticipantDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    public ParticipantDAOImpl() {
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<Participant> getManagedEntityClass() {
+        return (Participant.class);
+    }
+
+    @Override
+    public Participant getById(String id) {
+        Query query = em.createQuery("SELECT p from Participant p"
+                + " LEFT JOIN FETCH p.groupeParticipants LEFT JOIN FETCH p.routageEnvois "
+                + " LEFT JOIN FETCH p.routageReceptions LEFT JOIN FETCH p.noeuds"
+                + " WHERE p.code = :code");
+        query.setParameter("code", id);
+
+        Optional<Participant> optionalParticipant = query.getResultList().stream().findFirst();
+        return optionalParticipant.isPresent() ? optionalParticipant.get() : null;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/PaysDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/PaysDAOImpl.java
new file mode 100644
index 0000000..75602e3
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/PaysDAOImpl.java
@@ -0,0 +1,44 @@
+package com.megatim.fdxconsultation.dao.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.Pays;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.PaysDAO;
+import java.util.Optional;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class PaysDAOImpl implements PaysDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    public PaysDAOImpl() {
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<Pays> getManagedEntityClass() {
+        return (Pays.class);
+    }
+
+    @Override
+    public Pays getById(String id) {
+        Query query = em.createQuery("SELECT p from Pays p"
+                + " WHERE p.code = :code");
+        query.setParameter("code", id);
+
+        Optional<Pays> optionalPays = query.getResultList().stream().findFirst();
+        return optionalPays.isPresent() ? optionalPays.get() : null;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ReferentielDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ReferentielDAOImpl.java
new file mode 100644
index 0000000..652f6de
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ReferentielDAOImpl.java
@@ -0,0 +1,77 @@
+package com.megatim.fdxconsultation.dao.impl.referentiel;
+
+import com.megatim.fdxcommons.model.enumeration.StatutReferentiel;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.ReferentielDAO;
+import java.util.List;
+import java.util.Optional;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class ReferentielDAOImpl implements ReferentielDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    public ReferentielDAOImpl() {
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<Referentiel> getManagedEntityClass() {
+        return (Referentiel.class);
+    }
+
+    @Override
+    public Referentiel getById(String id) {
+        Query query = em.createQuery("SELECT r from Referentiel r"
+                + " LEFT JOIN FETCH r.extensionFichiers LEFT JOIN FETCH r.applicationSources "
+                + " LEFT JOIN FETCH r.routages LEFT JOIN FETCH r.participants"
+                + " LEFT JOIN FETCH r.validateurFichierConfigurations LEFT JOIN FETCH r.noeuds"
+                + " LEFT JOIN FETCH r.groupeParticipants LEFT JOIN FETCH r.groupeNoeuds"
+                + " LEFT JOIN FETCH r.pays"
+                + " WHERE r.version = :version");
+        query.setParameter("version", id);
+
+        Optional<Referentiel> optionalReferentiel = query.getResultList().stream().findFirst();
+        return optionalReferentiel.isPresent() ? optionalReferentiel.get() : null;
+    }
+
+    @Override
+    public Referentiel getReferentielEnCours() {
+        Query query = em.createQuery("SELECT r FROM Referentiel r where r.statutReferentiel = :param");
+        query.setParameter("param", StatutReferentiel.EN_COURS);
+
+        Optional<Referentiel> optionalRef = ((List<Referentiel>) query.getResultList()).stream().findFirst();
+        return optionalRef.isPresent() ? optionalRef.get() : null;
+    }
+
+    @Override
+    public List<Referentiel> findByStatutReferentiel(StatutReferentiel statutReferentiel) {
+        Query query = em.createQuery("SELECT r FROM Referentiel r where r.statutReferentiel = :param");
+        query.setParameter("param", statutReferentiel);
+
+        return ((List<Referentiel>) query.getResultList());
+    }
+
+    @Override
+    public void archiverReferentielEncours() {
+        Query query = em.createQuery("UPDATE Referentiel r set statutReferentiel = :nouveauStatut where r.statutReferentiel = :param");
+        query.setParameter("nouveauStatut", StatutReferentiel.ARCHIVE);
+        query.setParameter("param", StatutReferentiel.EN_COURS);
+
+        int nb = query.executeUpdate();
+        System.out.println("Nb lines updated = " + nb);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/RoutageDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/RoutageDAOImpl.java
new file mode 100644
index 0000000..ec90332
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/RoutageDAOImpl.java
@@ -0,0 +1,54 @@
+package com.megatim.fdxconsultation.dao.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.Routage;
+import com.megatim.fdxcommons.model.referentiel.RoutageId;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.RoutageDAO;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class RoutageDAOImpl implements RoutageDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    public RoutageDAOImpl() {
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<Routage> getManagedEntityClass() {
+        return (Routage.class);
+    }
+
+    @Override
+    public Routage getById(RoutageId id) {
+
+        Query query = getEntityManager().createQuery("SELECT r FROM Routage r"
+                + " LEFT JOIN FETCH r.groupeNoeudsEnvoi LEFT JOIN FETCH r.groupeNoeudsReception"
+                + " LEFT JOIN FETCH r.groupeParticipantsEnvoi LEFT JOIN FETCH r.groupeParticipantsReception"
+                + " LEFT JOIN FETCH r.noeudsEnvoi LEFT JOIN FETCH r.noeudsReception"
+                + " LEFT JOIN FETCH r.groupeNoeudsReception LEFT JOIN FETCH r.participantsReception"
+                + " LEFT JOIN FETCH r.groupeParticipantsReception LEFT JOIN FETCH r.participantsEnvoi"
+                + " WHERE r.referentiel.version = :referentielVersion AND r.typeFichier.code = :codeTypeFichier");
+
+        query.setParameter("codeTypeFichier", id.getTypeFichier());
+        query.setParameter("referentielVersion", id.getReferentiel());
+
+        return (Routage) query
+                .getResultList()
+                .stream()
+                .findFirst()
+                .orElse(null);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/StructureLigneDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/StructureLigneDAOImpl.java
new file mode 100644
index 0000000..c7f42d9
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/StructureLigneDAOImpl.java
@@ -0,0 +1,40 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.StructureLigne;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.StructureLigneDAO;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class StructureLigneDAOImpl implements StructureLigneDAO{
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    public StructureLigneDAOImpl() {
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<StructureLigne> getManagedEntityClass() {
+        return (StructureLigne.class);
+    }
+
+    @Override
+    public StructureLigne getById(String id) {
+        throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/TypeFichierDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/TypeFichierDAOImpl.java
new file mode 100644
index 0000000..ccac5db
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/TypeFichierDAOImpl.java
@@ -0,0 +1,82 @@
+package com.megatim.fdxconsultation.dao.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.ReferentielDAO;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.TypeFichierConsultationDAO;
+import com.megatim.fdxconsultation.model.dto.ParticipantToFichierDto;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import javax.persistence.Tuple;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class TypeFichierDAOImpl implements TypeFichierConsultationDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @Inject
+    private ReferentielDAO referentielDAO;
+
+    public TypeFichierDAOImpl() {
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<TypeFichier> getManagedEntityClass() {
+        return (TypeFichier.class);
+    }
+
+    @Override
+    public TypeFichier getById(String id) {
+        Query query = em.createQuery("SELECT t from TypeFichier t"
+                + " LEFT JOIN FETCH t.routages LEFT JOIN FETCH t.validateurFichiers "
+                + " LEFT JOIN FETCH t.validateurFichierConfigurations"
+                + " WHERE t.code = :code");
+        query.setParameter("code", id);
+
+        Optional<TypeFichier> optionalTypeFichier = query.getResultList().stream().findFirst();
+        return optionalTypeFichier.isPresent() ? optionalTypeFichier.get() : null;
+    }
+
+    @Override
+    public List<ParticipantToFichierDto> getParticpantToFichierDto(String username) {
+        String referentielVersion = getReferentielVersion();
+        if (referentielVersion == null) {
+            return new ArrayList<>();
+        }
+
+        List<Tuple> results = em.createQuery("SELECT t.participant.code, t.code AS code "
+                + "FROM TypeFichier t "
+                + "WHERE code IN (SELECT c.codeTypeFichier FROM ColumnDefinition c WHERE c.referentielVersion = :referentielVersion) "
+                + "AND t IN (SELECT t1 FROM User u LEFT JOIN u.typeFichiers t1 WHERE u.userName = :username)", Tuple.class)
+                .setParameter("referentielVersion", referentielVersion)
+                .setParameter("username", username)
+                .getResultList();
+
+        return results.stream().map(t -> {
+            ParticipantToFichierDto dto = new ParticipantToFichierDto(t.get(0, String.class), t.get(1, String.class));
+            return dto;
+        }).collect(Collectors.toList());
+    }
+
+    private String getReferentielVersion() {
+        Referentiel refEncours = referentielDAO.getReferentielEnCours();
+        return refEncours != null ? refEncours.getVersion() : null;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ValidateurFichierConfigurationDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ValidateurFichierConfigurationDAOImpl.java
new file mode 100644
index 0000000..767efdb
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ValidateurFichierConfigurationDAOImpl.java
@@ -0,0 +1,55 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.ValidateurFichierConfiguration;
+import com.megatim.fdxcommons.model.referentiel.ValidateurFichierConfigurationId;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.ValidateurFichierConfigurationDAO;
+import java.util.Optional;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class ValidateurFichierConfigurationDAOImpl implements ValidateurFichierConfigurationDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    public ValidateurFichierConfigurationDAOImpl() {
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<ValidateurFichierConfiguration> getManagedEntityClass() {
+        return (ValidateurFichierConfiguration.class);
+    }
+
+    @Override
+    public ValidateurFichierConfiguration getById(ValidateurFichierConfigurationId id) {
+         Query query = em.createQuery("SELECT v FROM ValidateurFichierConfiguration v WHERE v.referentiel.version = :referentielVersion"
+                + " AND v.typeFichier.code = :codeTypeFichier");
+
+        query.setParameter("codeTypeFichier", id.getTypeFichier());
+        query.setParameter("referentielVersion", id.getReferentiel());
+
+        Optional<ValidateurFichierConfiguration> optionalValFichier = query.getResultList().stream().findFirst();
+
+        if (optionalValFichier.isPresent()) {
+            return optionalValFichier.get();
+        } else {
+            return null;
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ValidateurFichierDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ValidateurFichierDAOImpl.java
new file mode 100644
index 0000000..24354ed
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/ValidateurFichierDAOImpl.java
@@ -0,0 +1,53 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.referentiel;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntity;
+import com.megatim.fdxcommons.tools.database.tables.dto.JpqlQueryElement;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxcommons.model.referentiel.ValidateurFichier;
+import com.megatim.fdxconsultation.dao.ifaces.referentiel.ValidateurFichierDAO;
+import java.util.List;
+import java.util.Optional;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class ValidateurFichierDAOImpl implements ValidateurFichierDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    public ValidateurFichierDAOImpl() {
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<ValidateurFichier> getManagedEntityClass() {
+        return (ValidateurFichier.class);
+    }
+
+    @Override
+    public ValidateurFichier getById(String id) {
+        Query query = em.createQuery("SELECT v from ValidateurFichier v"
+                + " LEFT JOIN FETCH v.structureLignes"
+                + " WHERE t.id = :id");
+        query.setParameter("id", id);
+
+        Optional<ValidateurFichier> optionalValidateurFichier = query.getResultList().stream().findFirst();
+        return optionalValidateurFichier.isPresent() ? optionalValidateurFichier.get() : null;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/historique/ReferentielIntegrationHistoriqueDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/historique/ReferentielIntegrationHistoriqueDAOImpl.java
new file mode 100644
index 0000000..4fdb5ec
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/historique/ReferentielIntegrationHistoriqueDAOImpl.java
@@ -0,0 +1,72 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.referentiel.historique;
+
+import com.megatim.fdxcommons.dao.ifaces.referentiel.historique.ReferentielIntegrationHistoriqueDAO;
+import com.megatim.fdxcommons.model.referentiel.historique.ReferentielIntegrationHistorique;
+import com.megatim.fdxcommons.model.referentiel.historique.ReferentielIntegrationHistoriqueId;
+import java.util.List;
+import java.util.Optional;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class ReferentielIntegrationHistoriqueDAOImpl implements ReferentielIntegrationHistoriqueDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @Override
+    public Class<ReferentielIntegrationHistorique> getManagedEntityClass() {
+        return ReferentielIntegrationHistorique.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public ReferentielIntegrationHistorique getById(ReferentielIntegrationHistoriqueId id) {
+        Optional<ReferentielIntegrationHistorique> optRefInt = em
+                .createQuery("SELECT r FROM ReferentielIntegrationHistorique r"
+                        + " WHERE r.codeTypeFichier = :codeTypeFichier AND  r.referentielVersion = :refVersion")
+                .setParameter("codeTypeFichier", id.getCodeTypeFichier())
+                .setParameter("refVersion", id.getReferentielVersion())
+                .getResultList()
+                .stream()
+                .findFirst();
+
+        return optRefInt.isPresent() ? optRefInt.get() : null;
+    }
+
+    @Override
+    public ReferentielIntegrationHistorique suitableIntegrationHistorique(String codeTypeFichier, String refVersion) {
+        Optional<ReferentielIntegrationHistorique> optRefInt = em
+                .createQuery("SELECT r FROM ReferentielIntegrationHistorique r"
+                        + " WHERE r.codeTypeFichier = :codeTypeFichier AND :refVersion MEMBER OF r.dependingReferentiels")
+                .setParameter("codeTypeFichier", codeTypeFichier)
+                .setParameter("refVersion", refVersion)
+                .getResultList()
+                .stream()
+                .findFirst();
+
+        return optRefInt.isPresent() ? optRefInt.get() : null;
+    }
+
+    @Override
+    public List<ReferentielIntegrationHistorique> suitableIntegrationHistorique(String refVersion) {
+        return em
+                .createQuery("SELECT r FROM ReferentielIntegrationHistorique r"
+                        + " WHERE :refVersion MEMBER OF r.dependingReferentiels")
+                .setParameter("refVersion", refVersion)
+                .getResultList();
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/natureproduction/NatureProductionFichierDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/natureproduction/NatureProductionFichierDAOImpl.java
new file mode 100644
index 0000000..2c49c88
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/referentiel/natureproduction/NatureProductionFichierDAOImpl.java
@@ -0,0 +1,47 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.referentiel.natureproduction;
+
+import com.megatim.fdxcommons.dao.ifaces.natureproduction.NatureProductionFichierDAO;
+import com.megatim.fdxcommons.model.referentiel.natureproduction.NatureProductionFichier;
+import com.megatim.fdxcommons.model.referentiel.natureproduction.NatureProductionFichierId;
+import java.util.Optional;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class NatureProductionFichierDAOImpl implements NatureProductionFichierDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @Override
+    public Class<NatureProductionFichier> getManagedEntityClass() {
+        return NatureProductionFichier.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public NatureProductionFichier getById(NatureProductionFichierId id) {
+        Query query = em.createQuery("SELECT n FROM NatureProductionFichier n WHERE n.referentiel.version = :referentielVersion"
+                + " AND n.typeFichier.code = :codeTypeFichier");
+        query.setParameter("referentielVersion", id.getReferentiel());
+        query.setParameter("codeTypeFichier", id.getTypeFichier());
+        Optional<NatureProductionFichier> optNatureProd = query.getResultList().stream().findFirst();
+
+        return optNatureProd.isPresent() ? optNatureProd.get() : null;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/remoteaction/PlanificationDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/remoteaction/PlanificationDAOImpl.java
new file mode 100644
index 0000000..9e8cc98
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/remoteaction/PlanificationDAOImpl.java
@@ -0,0 +1,33 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.remoteaction;
+
+import com.bekosoftware.genericdaolayer.dao.impl.AbstractGenericDAO;
+import com.megatim.fdxconsultation.dao.ifaces.remoteaction.PlanificationDAO;
+import com.megatim.fdxconsultation.model.remoteaction.Planification;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class PlanificationDAOImpl extends AbstractGenericDAO<Planification, Long> implements PlanificationDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @Override
+    public Class<Planification> getManagedEntityClass() {
+        return Planification.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/remoteaction/RemoteConfigurationDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/remoteaction/RemoteConfigurationDAOImpl.java
new file mode 100644
index 0000000..8e0119d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/remoteaction/RemoteConfigurationDAOImpl.java
@@ -0,0 +1,33 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.remoteaction;
+
+import com.bekosoftware.genericdaolayer.dao.impl.AbstractGenericDAO;
+import com.megatim.fdxconsultation.model.remoteaction.RemoteConfiguration;
+import com.megatim.fdxconsultation.dao.ifaces.remoteaction.RemoteConfigurationDAO;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class RemoteConfigurationDAOImpl extends AbstractGenericDAO<RemoteConfiguration, String> implements RemoteConfigurationDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @Override
+    public Class<RemoteConfiguration> getManagedEntityClass() {
+        return RemoteConfiguration.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/settings/DisplayOptionsDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/settings/DisplayOptionsDAOImpl.java
new file mode 100644
index 0000000..d4ca1d8
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/settings/DisplayOptionsDAOImpl.java
@@ -0,0 +1,62 @@
+package com.megatim.fdxconsultation.dao.impl.settings;
+
+import com.bekosoftware.genericdaolayer.dao.impl.AbstractGenericDAO;
+import com.megatim.fdxconsultation.dao.ifaces.settings.DisplayOptionsDAO;
+import com.megatim.fdxconsultation.model.settings.DisplayOptions;
+import java.util.Optional;
+import javax.enterprise.context.Dependent;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.transaction.Transactional;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Dependent
+public class DisplayOptionsDAOImpl extends AbstractGenericDAO<DisplayOptions, Long> implements DisplayOptionsDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<DisplayOptions> getManagedEntityClass() {
+        return DisplayOptions.class;
+    }
+
+    @Transactional
+    @Override
+    public DisplayOptions current() {
+        Optional<DisplayOptions> optional = em.createQuery("SELECT d from DisplayOptions d")
+                .getResultList()
+                .stream()
+                .findFirst();
+        return optional.orElse(null);
+    }
+
+    @Transactional
+    @Override
+    synchronized public DisplayOptions edit(DisplayOptions entity) {
+
+        DisplayOptions current = current();
+        if (current == null) {
+            return save(entity);
+        }
+
+        current.setAuditAPI(entity.getAuditAPI());
+        current.setStatParticipantAPI(entity.getStatParticipantAPI());
+        current.setStatPathAPI(entity.getStatPathAPI());
+        current.setTableauBordAPI(entity.getTableauBordAPI());
+
+        current.setSuiviEchangeStandalone(entity.getSuiviEchangeStandalone());
+        current.setTableauBordStandalone(entity.getTableauBordStandalone());
+
+        return save(current);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/CriteriaEntityPersistedDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/CriteriaEntityPersistedDAOImpl.java
new file mode 100644
index 0000000..a4d2fbe
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/CriteriaEntityPersistedDAOImpl.java
@@ -0,0 +1,84 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.stats;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntity;
+import com.megatim.fdxcommons.tools.database.tables.dto.JpqlQueryElement;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxconsultation.dao.ifaces.stats.CriteriaEntityPersistedDAO;
+import com.megatim.fdxconsultation.model.stats.CriteriaEntityPersisted;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class CriteriaEntityPersistedDAOImpl implements CriteriaEntityPersistedDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @Override
+    public Class<CriteriaEntityPersisted> getManagedEntityClass() {
+        return CriteriaEntityPersisted.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public CriteriaEntityPersisted getById(Long id) {
+        Query query = em.createQuery("SELECT c from CriteriaEntityPersisted "
+                + "where c.id = :id ");
+        query.setParameter("id", id);
+
+        Optional<CriteriaEntityPersisted> optionalCriteria = query.getResultList().stream().findFirst();
+        CriteriaEntityPersisted criterion = optionalCriteria.isPresent() ? optionalCriteria.get() : null;
+
+        if (criterion == null) {
+            return null;
+        }
+
+        return loadSubCriteria(criterion);
+    }
+
+    @Override
+    public CriteriaEntityPersisted loadSubCriteria(CriteriaEntityPersisted criterion) {
+        List<CriteriaEntityPersisted> children = getChildren(criterion.getId());
+
+        List<CriteriaEntityPersisted> subCriteria = new ArrayList<>();
+
+        for (CriteriaEntityPersisted c : children) {
+            subCriteria.add(loadSubCriteria(c));
+        }
+        criterion.setSubCriterias(subCriteria);
+
+        return criterion;
+    }
+
+    private List<CriteriaEntityPersisted> getChildren(Long id) {
+        Query query = em.createQuery("SELECT c from CriteriaEntityPersisted c where c.parent.id = :id ");
+        query.setParameter("id", id);
+
+        return (List<CriteriaEntityPersisted>) query.getResultList();
+    }
+
+    @Override
+    public List<CriteriaEntityPersisted> subCriterias(Long id) {
+        Query query = em.createQuery("SELECT c FROM CriteriaEntityPersisted c WHERE c.parent.id = :id ");
+        query.setParameter("id", id);
+        return query.getResultList();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableConfigurationDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableConfigurationDAOImpl.java
new file mode 100644
index 0000000..7bf229b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableConfigurationDAOImpl.java
@@ -0,0 +1,60 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.stats;
+
+import com.megatim.fdxconsultation.dao.ifaces.stats.CriteriaEntityPersistedDAO;
+import com.megatim.fdxconsultation.dao.ifaces.stats.TableConfigurationDAO;
+import com.megatim.fdxconsultation.model.stats.CriteriaEntityPersisted;
+import com.megatim.fdxconsultation.model.stats.TableConfiguration;
+import java.util.Optional;
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class TableConfigurationDAOImpl implements TableConfigurationDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @EJB
+    CriteriaEntityPersistedDAO criteriaDao;
+
+    @Override
+    public Class<TableConfiguration> getManagedEntityClass() {
+        return TableConfiguration.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public TableConfiguration getById(Long id) {
+        Query query = em.createQuery("SELECT t FROM TableConfiguration t LEFT JOIN FETCH t.groupingColumns where t.id = :id");
+        query.setParameter("id", id);
+        Optional<TableConfiguration> optTableConfiguration = query.getResultList().stream().findFirst();
+
+        TableConfiguration tableConf = optTableConfiguration.isPresent() ? optTableConfiguration.get() : null;
+        
+        if(tableConf == null) {
+            return null;
+        }
+
+        if (tableConf.getCriterion() != null) {
+            CriteriaEntityPersisted criterion = criteriaDao.loadSubCriteria(tableConf.getCriterion());
+            tableConf.setCriterion(criterion);
+            
+        }
+        return tableConf;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableauBordColumnDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableauBordColumnDAOImpl.java
new file mode 100644
index 0000000..4098496
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableauBordColumnDAOImpl.java
@@ -0,0 +1,45 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.stats;
+
+import com.megatim.fdxconsultation.dao.ifaces.stats.TableauBordColumnDAO;
+import com.megatim.fdxconsultation.model.stats.TableauBordColumn;
+import java.util.Optional;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class TableauBordColumnDAOImpl implements TableauBordColumnDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @Override
+    public Class<TableauBordColumn> getManagedEntityClass() {
+        return TableauBordColumn.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public TableauBordColumn getById(Long id) {
+        Query query = em.createQuery("SELECT t from TableauBordColumn t "
+                + "where c.id = :id");
+        query.setParameter("id", id);
+
+        Optional<TableauBordColumn> optionalTableauBordColumn = query.getResultList().stream().findFirst();
+        return optionalTableauBordColumn.isPresent() ? optionalTableauBordColumn.get() : null;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableauBordDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableauBordDAOImpl.java
new file mode 100644
index 0000000..999819e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableauBordDAOImpl.java
@@ -0,0 +1,302 @@
+package com.megatim.fdxconsultation.dao.impl.stats;
+
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.dao.ifaces.stats.CriteriaEntityPersistedDAO;
+import com.megatim.fdxconsultation.dao.ifaces.stats.TableConfigurationDAO;
+import com.megatim.fdxconsultation.dao.ifaces.stats.TableauBordDAO;
+import com.megatim.fdxconsultation.model.dto.ParticipantToFichierDto;
+import com.megatim.fdxconsultation.model.stats.CriteriaEntityPersisted;
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import com.megatim.fdxconsultation.model.enums.TypeConfigurationTableauBord;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierSearch;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import javax.persistence.Tuple;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class TableauBordDAOImpl implements TableauBordDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @EJB
+    TableConfigurationDAO tableConfigurationDao;
+
+    @EJB
+    CriteriaEntityPersistedDAO criteriaDao;
+
+    @Override
+    public Class<TableauBord> getManagedEntityClass() {
+        return TableauBord.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public TableauBord getById(Long id) {
+        Query query = em.createQuery("SELECT t FROM TableauBord t LEFT JOIN FETCH t.tableConfigurations tc LEFT JOIN FETCH tc.groupingColumns WHERE t.id = :id");
+        query.setParameter("id", id);
+
+        TableauBord tableauBord = (TableauBord) query.getResultList().stream().findFirst().orElse(null);
+        if (tableauBord != null) {
+            loadCriteria(tableauBord);
+        }
+
+        return tableauBord;
+    }
+
+    @Override
+    public TableauBord findByUserAndTypeFichierAndReferentiel(Long userId, String codeTypeFichier, String referentielVersion) {
+        Query query = em.createQuery("SELECT t from TableauBord t LEFT JOIN FETCH t.tableConfigurations tc LEFT JOIN FETCH tc.groupingColumns "
+                + "WHERE t.user.id = :userId and t.typeFichier.code = :codeTypeFichier AND t.referentiel.version = :referentielVersion")
+                .setParameter("codeTypeFichier", codeTypeFichier)
+                .setParameter("userId", userId)
+                .setParameter("referentielVersion", referentielVersion);
+
+        TableauBord tableauBord = (TableauBord) query.getResultList().stream().findFirst().orElse(null);
+        if (tableauBord != null) {
+            loadCriteria(tableauBord);
+        }
+
+        return tableauBord;
+    }
+
+    @Override
+    public List<TableauBord> findByUser(Long userId, String refVersion) {
+        Query query = em.createQuery("SELECT t FROM TableauBord t"
+                + " LEFT JOIN FETCH t.tableConfigurations tc LEFT JOIN FETCH tc.groupingColumns"
+                + " WHERE t.user.id = :userId AND t.referentiel.version = :refVersion")
+                .setParameter("userId", userId)
+                .setParameter("refVersion", refVersion);
+
+        List<TableauBord> liste = query.getResultList();
+        liste.forEach(t -> loadCriteria(t));
+
+        return liste;
+    }
+
+    @Override
+    public List<ParticipantToFichierDto> tableauBordToTypeFichiers(String userName, String referentielVersion) {
+        List<Tuple> results = em.createQuery("SELECT t.participant.code, t.code AS code FROM TableauBord tb, TypeFichier t"
+                + " WHERE tb.user.userName = :userName AND tb.referentiel.version = :referentielVersion"
+                + " AND tb.typeFichier.code = t.code", Tuple.class)
+                .setParameter("userName", userName)
+                .setParameter("referentielVersion", referentielVersion)
+                .getResultList();
+
+        return results.stream().map(t -> {
+            ParticipantToFichierDto dto = new ParticipantToFichierDto(t.get(0, String.class), t.get(1, String.class));
+            return dto;
+        }).collect(Collectors.toList());
+    }
+
+    @Override
+    public List<ParticipantToFichierDto> tableauBordToTypeFichiers(TypeConfigurationTableauBord tableauBordConfiguration, String referentielVersion) {
+        List<Tuple> results = em.createQuery("SELECT t.participant.code, t.code AS code from TableauBord tb, TypeFichier t"
+                + " WHERE tb.typeConfiguration = :tableauBordConfiguration"
+                + " AND tb.referentiel.version = :referentielVersion AND tb.typeFichier.code = t.code ", Tuple.class)
+                .setParameter("tableauBordConfiguration", tableauBordConfiguration)
+                .setParameter("referentielVersion", referentielVersion)
+                .getResultList();
+
+        return results.stream().map(t -> {
+            ParticipantToFichierDto dto = new ParticipantToFichierDto(t.get(0, String.class), t.get(1, String.class));
+            return dto;
+        }).collect(Collectors.toList());
+    }
+
+    @Override
+    public List<TableauBord> findByReferentiel(String referentielVersion) {
+        return em.createQuery("SELECT t from TableauBord t"
+                + " WHERE t.referentiel.version = :referentielVersion", TableauBord.class)
+                .setParameter("referentielVersion", referentielVersion)
+                .getResultList();
+
+    }
+
+    @Override
+    public TableauBord findByTypeConfigurationAndReferentiel(String codeTypeFichier, String referentielVersion, TypeConfigurationTableauBord typeConfiguration) {
+        Query query = em.createQuery("SELECT t from TableauBord t LEFT JOIN FETCH t.tableConfigurations tc LEFT JOIN FETCH tc.groupingColumns "
+                + "WHERE t.typeConfiguration = :typeConfiguration and t.typeFichier.code = :codeTypeFichier AND t.referentiel.version = :referentielVersion")
+                .setParameter("codeTypeFichier", codeTypeFichier)
+                .setParameter("typeConfiguration", typeConfiguration)
+                .setParameter("referentielVersion", referentielVersion);
+
+        Optional<TableauBord> optionalTableauBord = query.getResultList().stream().findFirst();
+        TableauBord tableauBord = optionalTableauBord.isPresent() ? optionalTableauBord.get() : null;
+
+        if (tableauBord == null) {
+            return null;
+        }
+        loadCriteria(tableauBord);
+
+        return tableauBord;
+    }
+
+    private void loadCriteria(TableauBord tableauBord) {
+        if (tableauBord.getTableConfigurations() != null && !tableauBord.getTableConfigurations().isEmpty()) {
+            tableauBord.getTableConfigurations().stream().forEach(t -> {
+                if (t.getCriterion() != null) {
+                    CriteriaEntityPersisted criterion = criteriaDao.loadSubCriteria(t.getCriterion());
+                    t.setCriterion(criterion);
+                }
+            });
+        }
+    }
+
+    @Override
+    public List<TypeFichier> tableauBordTypeFichiers(String userName, String referentielVersion, TypeFichierSearch typeFichierSearch, int pageNumber, int pageSize) {
+
+        StringBuilder builder = new StringBuilder();
+        builder.append("SELECT t.typeFichier FROM TableauBord t")
+                .append(" ")
+                .append("WHERE t.typeConfiguration = :typeConfiguration AND t.user.userName = :userName AND t.referentiel.version = :referentielVersion");
+
+        addQuerySearchPart(builder, typeFichierSearch);
+
+        Query query = em.createQuery(builder.toString());
+        query.setParameter("userName", userName);
+
+        addQuerySearchParam(query, referentielVersion, TypeConfigurationTableauBord.USER_SPECIFIC, typeFichierSearch);
+        query.setFirstResult((pageNumber - 1) * pageSize).setMaxResults(pageSize);
+
+        return query.getResultList();
+    }
+
+    @Override
+    public Long countTableauBordTypeFichiers(String userName, String referentielVersion, TypeFichierSearch typeFichierSearch) {
+
+        StringBuilder builder = new StringBuilder();
+        builder.append("SELECT COALESCE(COUNT(t.typeFichier), 0) FROM TableauBord t")
+                .append(" ")
+                .append("WHERE t.typeConfiguration = :typeConfiguration AND t.user.userName = :userName AND t.referentiel.version = :referentielVersion");
+
+        addQuerySearchPart(builder, typeFichierSearch);
+
+        Query query = em.createQuery(builder.toString());
+        query.setParameter("userName", userName);
+
+        addQuerySearchParam(query, referentielVersion, TypeConfigurationTableauBord.USER_SPECIFIC, typeFichierSearch);
+
+        return (Long) query.getSingleResult();
+    }
+
+    @Override
+    public List<TypeFichier> tableauBordGlobalTypeFichiers(String referentielVersion, TypeFichierSearch typeFichierSearch, int pageNumber, int pageSize) {
+
+        StringBuilder builder = new StringBuilder();
+        builder.append("SELECT t.typeFichier FROM TableauBord t")
+                .append(" ")
+                .append("WHERE t.typeConfiguration = :typeConfiguration AND t.referentiel.version = :referentielVersion");
+
+        addQuerySearchPart(builder, typeFichierSearch);
+
+        Query query = em.createQuery(builder.toString());
+        addQuerySearchParam(query, referentielVersion, TypeConfigurationTableauBord.GLOBAL, typeFichierSearch);
+        query.setFirstResult((pageNumber - 1) * pageSize).setMaxResults(pageSize);
+
+        return query.getResultList();
+    }
+
+    @Override
+    public Long countTableauBordGlobalTypeFichiers(String referentielVersion, TypeFichierSearch typeFichierSearch) {
+
+        StringBuilder builder = new StringBuilder();
+        builder.append("SELECT COALESCE(COUNT(t.typeFichier), 0) FROM TableauBord t")
+                .append(" ")
+                .append("WHERE t.typeConfiguration = :typeConfiguration AND t.referentiel.version = :referentielVersion");
+
+        addQuerySearchPart(builder, typeFichierSearch);
+
+        Query query = em.createQuery(builder.toString());
+        addQuerySearchParam(query, referentielVersion, TypeConfigurationTableauBord.GLOBAL, typeFichierSearch);
+
+        return (Long) query.getSingleResult();
+    }
+
+    private void addQuerySearchParam(Query query, String referentielVersion, TypeConfigurationTableauBord typeConfigurationTableauBord, TypeFichierSearch typeFichierSearch) {
+
+        query.setParameter("referentielVersion", referentielVersion)
+                .setParameter("typeConfiguration", typeConfigurationTableauBord);
+
+        if (typeFichierSearch.getCode() != null) {
+            query.setParameter("code", "%" + typeFichierSearch.getCode() + "%");
+        }
+
+        if (typeFichierSearch.getLibelle() != null) {
+            query.setParameter("libelle", "%" + typeFichierSearch.getLibelle() + "%");
+        }
+
+        if (typeFichierSearch.getDescription() != null) {
+            query.setParameter("description", "%" + typeFichierSearch.getDescription() + "%");
+        }
+    }
+
+    private void addQuerySearchPart(StringBuilder builder, TypeFichierSearch typeFichierSearch) {
+
+        if (typeFichierSearch.getCode() != null) {
+            builder.append(" AND ");
+            builder.append("t.typeFichier.code LIKE :code");
+        }
+
+        if (typeFichierSearch.getLibelle() != null) {
+            builder.append(" AND ");
+            builder.append("t.typeFichier.libelle LIKE :libelle");
+        }
+
+        if (typeFichierSearch.getDescription() != null) {
+            builder.append(" AND ");
+            builder.append("t.typeFichier.description LIKE :description");
+        }
+    }
+
+    @Override
+    public TableauBord findSpecificTableauBord(Long userId, String codeTypeFichier, String referentielVersion) {
+
+        Query query = em.createQuery("SELECT t from TableauBord t LEFT JOIN FETCH t.tableConfigurations tc LEFT JOIN FETCH tc.groupingColumns "
+                + "WHERE t.user.id = :userId and t.typeFichier.code = :codeTypeFichier AND t.referentiel.version = :referentielVersion "
+                + "AND t.typeConfiguration = :typeConfiguration")
+                .setParameter("codeTypeFichier", codeTypeFichier)
+                .setParameter("userId", userId)
+                .setParameter("referentielVersion", referentielVersion)
+                .setParameter("typeConfiguration", TypeConfigurationTableauBord.USER_SPECIFIC);
+
+        TableauBord tableauBord = (TableauBord) query.getResultList().stream().findFirst().orElse(null);
+        if (tableauBord != null) {
+            loadCriteria(tableauBord);
+        }
+
+        return tableauBord;
+    }
+
+    @Override
+    public TableauBord findGlobalTableauBord(String codeTypeFichier, String referentielVersion) {
+
+        Query query = em.createQuery("SELECT t FROM TableauBord t LEFT JOIN FETCH t.tableConfigurations tc LEFT JOIN FETCH tc.groupingColumns "
+                + "WHERE t.typeFichier.code = :codeTypeFichier AND t.referentiel.version = :referentielVersion "
+                + "AND t.typeConfiguration = :typeConfiguration")
+                .setParameter("codeTypeFichier", codeTypeFichier)
+                .setParameter("referentielVersion", referentielVersion)
+                .setParameter("typeConfiguration", TypeConfigurationTableauBord.GLOBAL);
+
+        TableauBord tableauBord = (TableauBord) query.getResultList().stream().findFirst().orElse(null);
+        if (tableauBord != null) {
+            loadCriteria(tableauBord);
+        }
+
+        return tableauBord;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableauBordGlobalSearchDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableauBordGlobalSearchDAOImpl.java
new file mode 100644
index 0000000..d91ba27
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableauBordGlobalSearchDAOImpl.java
@@ -0,0 +1,28 @@
+package com.megatim.fdxconsultation.dao.impl.stats;
+
+import com.megatim.fdxconsultation.dao.ifaces.stats.TableauBordGlobalSearchDAO;
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class TableauBordGlobalSearchDAOImpl implements TableauBordGlobalSearchDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @Override
+    public Class<TableauBord> getManagedEntityClass() {
+        return TableauBord.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableauBordUserSpecificSearchDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableauBordUserSpecificSearchDAOImpl.java
new file mode 100644
index 0000000..90a12f4
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableauBordUserSpecificSearchDAOImpl.java
@@ -0,0 +1,28 @@
+package com.megatim.fdxconsultation.dao.impl.stats;
+
+import com.megatim.fdxconsultation.dao.ifaces.stats.TableauBordUserSpecificSearchDAO;
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class TableauBordUserSpecificSearchDAOImpl implements TableauBordUserSpecificSearchDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @Override
+    public Class<TableauBord> getManagedEntityClass() {
+        return TableauBord.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/supervision/AgentConfigurationEntityDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/supervision/AgentConfigurationEntityDAOImpl.java
new file mode 100644
index 0000000..27501b2
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/supervision/AgentConfigurationEntityDAOImpl.java
@@ -0,0 +1,55 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.dao.impl.supervision;
+
+import com.megatim.fdxconsultation.dao.ifaces.supervision.AgentConfigurationEntityDAO;
+import com.megatim.fdxconsultation.model.supervision.AgentConfigurationEntity;
+import com.megatim.fdxconsultation.model.supervision.StatutConfiguration;
+import java.util.Optional;
+import javax.enterprise.context.Dependent;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class AgentConfigurationEntityDAOImpl implements AgentConfigurationEntityDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @Override
+    public Class<AgentConfigurationEntity> getManagedEntityClass() {
+        return AgentConfigurationEntity.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public AgentConfigurationEntity getById(Long id) {
+        Query query = em.createQuery("SELECT a from AgentConfigurationEntity a where a.id = :id");
+        query.setParameter("id", id);
+        Optional<AgentConfigurationEntity> optionalAgent = query.getResultList().stream().findFirst();
+
+        return optionalAgent.isPresent() ? optionalAgent.get() : null;
+    }
+
+    @Override
+    public int archiveAgentConfiguration(String code) {
+        Query query = em.createQuery("UPDATE AgentConfigurationEntity a set a.statutConfiguration = :statut where a.agentCode = :code");
+        query.setParameter("statut", StatutConfiguration.ARCHIVE);
+        query.setParameter("code", code);
+
+        return query.executeUpdate();
+
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/supervision/StandaloneServerStateEntityDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/supervision/StandaloneServerStateEntityDAOImpl.java
new file mode 100644
index 0000000..3e2212c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/supervision/StandaloneServerStateEntityDAOImpl.java
@@ -0,0 +1,57 @@
+package com.megatim.fdxconsultation.dao.impl.supervision;
+
+import com.megatim.fdxconsultation.dao.ifaces.supervision.StandaloneServerStateEntityDAO;
+import com.megatim.fdxconsultation.model.supervision.StandaloneServerStateEntity;
+import com.megatim.fdxconsultation.model.supervision.StatutConfiguration;
+import java.util.Optional;
+import javax.enterprise.context.Dependent;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class StandaloneServerStateEntityDAOImpl implements StandaloneServerStateEntityDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @Override
+    public Class<StandaloneServerStateEntity> getManagedEntityClass() {
+        return StandaloneServerStateEntity.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public StandaloneServerStateEntity getById(Long id) {
+        Query query = em.createQuery("SELECT s from StandaloneServerStateEntity s LEFT JOIN FETCH s.agentConfigurations where s.id = :id");
+        query.setParameter("id", id);
+        Optional<StandaloneServerStateEntity> optionalServer = query.getResultList().stream().findFirst();
+
+        return optionalServer.isPresent() ? optionalServer.get() : null;
+    }
+
+    @Override
+    public void archiveServerState() {
+        Query query = em.createQuery("UPDATE StandaloneServerStateEntity s SET s.statutConfiguration = :newStatut WHERE s.statutConfiguration = :oldStatut");
+        query.setParameter("newStatut", StatutConfiguration.ARCHIVE);
+        query.setParameter("oldStatut", StatutConfiguration.EN_COURS);
+        query.executeUpdate();
+    }
+
+    @Override
+    public StandaloneServerStateEntity getCurrentStandaloneServerStateEntity() {
+        Query query = em.createQuery("SELECT s FROM StandaloneServerStateEntity s LEFT JOIN FETCH s.agentConfigurations WHERE s.statutConfiguration = :statutConfiguration");
+        query.setParameter("statutConfiguration", StatutConfiguration.EN_COURS);
+        Optional<StandaloneServerStateEntity> optionalServer = query.getResultList().stream().findFirst();
+        return optionalServer.isPresent() ? optionalServer.get() : null;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/supervision/TransfertDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/supervision/TransfertDAOImpl.java
new file mode 100644
index 0000000..dbd8d1a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/supervision/TransfertDAOImpl.java
@@ -0,0 +1,303 @@
+package com.megatim.fdxconsultation.dao.impl.supervision;
+
+import com.bekosoftware.genericdaolayer.dao.impl.AbstractGenericDAO;
+import com.megatim.fdxconsultation.dao.ifaces.supervision.TransfertDAO;
+import com.megatim.fdxconsultation.model.supervision.SensTransfert;
+import com.megatim.fdxconsultation.model.supervision.Transfert;
+import com.megatim.fdxconsultation.model.supervision.dto.SupervisionFilterModalFormRequest;
+import java.sql.Timestamp;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.util.List;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class TransfertDAOImpl extends AbstractGenericDAO<Transfert, Long> implements TransfertDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    EntityManager em;
+
+    @Override
+    public Class<Transfert> getManagedEntityClass() {
+        return Transfert.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public List<Transfert> filter(SupervisionFilterModalFormRequest supervisionFilterModalFormRequest) {
+
+        Query query = em.createQuery(filterQueryString(supervisionFilterModalFormRequest));
+        setParameters(query, supervisionFilterModalFormRequest);
+
+        return query
+                .setFirstResult(0)
+                .setMaxResults(200)
+                .getResultList();
+    }
+
+    @Override
+    public Long getTotalTransfert(SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin) {
+
+        String whereQuery = new TransfertDaoDynamicWhereString(sens, dateDebut, dateFin).query();
+
+        String queryString = "SELECT COALESCE(COUNT(t), 0) FROM Transfert t " + (!whereQuery.isEmpty() ? "WHERE " + whereQuery + " AND " : " WHERE ")
+                + " etattransfert = 'TERMINE'";
+
+        Query query = em.createQuery(queryString);
+
+        return (Long) result(query, sens, dateDebut, dateFin);
+    }
+
+    @Override
+    public Long getTransfertsReussie(SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin) {
+
+        String whereQuery = new TransfertDaoDynamicWhereString(sens, dateDebut, dateFin).query();
+
+        String queryString = "SELECT COALESCE(COUNT(t), 0) FROM Transfert t " + (!whereQuery.isEmpty() ? "WHERE " + whereQuery + " AND " : " WHERE ")
+                + " t.etatTransfert = com.megatim.fdxconsultation.model.supervision.EtatTransfert.TERMINE";
+
+        Query query = em.createQuery(queryString);
+
+        return (Long) result(query, sens, dateDebut, dateFin);
+    }
+
+    @Override
+    public Long getTransfertsAttente(SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin) {
+
+        String whereQuery = new TransfertDaoDynamicWhereString(sens, dateDebut, dateFin).query();
+
+        String queryString = "SELECT COALESCE(COUNT(t), 0) FROM Transfert t " + (!whereQuery.isEmpty() ? "WHERE " + whereQuery + " AND " : " WHERE ")
+                + " t.etatTransfert = com.megatim.fdxconsultation.model.supervision.EtatTransfert.ATTENTE_ROUTAGE";
+
+        Query query = em.createQuery(queryString);
+
+        return (Long) result(query, sens, dateDebut, dateFin);
+    }
+
+    @Override
+    public Long getTransfertsEchec(SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin) {
+
+        String whereQuery = new TransfertDaoDynamicWhereString(sens, dateDebut, dateFin).query();
+
+        String queryString = "SELECT COALESCE(COUNT(t), 0) FROM Transfert t " + (!whereQuery.isEmpty() ? "WHERE " + whereQuery + " AND " : " WHERE ")
+                + " t.etatTransfert = com.megatim.fdxconsultation.model.supervision.EtatTransfert.ECHOUE "
+                + "AND t.etatTransfert = com.megatim.fdxconsultation.model.supervision.EtatTransfert.ECHEC_EMPREINTE "
+                + "AND t.etatTransfert = com.megatim.fdxconsultation.model.supervision.EtatTransfert.ECHEC_NOMENCLATURE";
+
+        Query query = em.createQuery(queryString);
+
+        return (Long) result(query, sens, dateDebut, dateFin);
+    }
+
+    @Override
+    public Long getTransfertsManuel(SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin) {
+        return 0L;
+    }
+
+    @Override
+    public Long getTransfertsAutomatique(SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin) {
+        return 0L;
+    }
+
+    @Override
+    public Double getTailleTotale(SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin) {
+
+        String whereQuery = new TransfertDaoDynamicWhereString(sens, dateDebut, dateFin).query();
+        String queryString = "SELECT COALESCE(SUM(t.taille), 0) FROM Transfert t " + (!whereQuery.isEmpty() ? "WHERE " + whereQuery : "");
+
+        Query query = em.createQuery(queryString);
+        return ((double) result(query, sens, dateDebut, dateFin)) / 1000;
+    }
+
+    @Override
+    public Long getNombreTypeFichier(SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin) {
+
+        String whereQuery = new TransfertDaoDynamicWhereString(sens, dateDebut, dateFin).query();
+
+        String queryString = "SELECT COALESCE(COUNT(DISTINCT t.typeFichier), 0) FROM Transfert t " + (!whereQuery.isEmpty() ? "WHERE " + whereQuery : "");
+
+        Query query = em.createQuery(queryString);
+
+        return (Long) result(query, sens, dateDebut, dateFin);
+    }
+
+    @Override
+    public Double getVitesseMoyenne(SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin) {
+
+        double tempsMisTermine = getTempsMisTermine(sens, dateDebut, dateFin);
+        double tailleTotaleTermine = getTailleTotaleTermine(sens, dateDebut, dateFin) / 1000;
+
+        return (tempsMisTermine > 0) ? (tailleTotaleTermine / tempsMisTermine) : 0;
+    }
+
+    private Double getTailleTotaleTermine(SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin) {
+
+        String whereQuery = new TransfertDaoDynamicWhereString(sens, dateDebut, dateFin).query();
+
+        String queryString = "SELECT COALESCE(SUM(t.taille), 0) "
+                + "FROM Transfert t " + (!whereQuery.isEmpty() ? "WHERE " + whereQuery + " AND " : " WHERE ")
+                + " t.etatTransfert = com.megatim.fdxconsultation.model.supervision.EtatTransfert.TERMINE";
+
+        Query query = em.createQuery(queryString);
+
+        return (double) result(query, sens, dateDebut, dateFin);
+    }
+
+    private Double getTempsMisTermine(SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin) {
+
+        String whereNativeQuery = new TransfertDaoDynamicWhereString(sens, dateDebut, dateFin).nativeQuery();
+
+        String queryString = "SELECT COALESCE(SUM(DATE_PART('second', t.datefin - t.datedebut)), 0) AS date_diff "
+                + "FROM transfert t " + (!whereNativeQuery.isEmpty() ? "WHERE " + whereNativeQuery + " AND " : " WHERE ")
+                + " t.etattransfert = 'TERMINE'";
+
+        Query query = em.createNativeQuery(queryString);
+
+        return (double) nativeResult(query, sens, dateDebut, dateFin);
+    }
+
+    private Object result(Query query, SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin) {
+        if (sens != null) {
+            setParam(query, "sens", sens);
+        }
+
+        if (dateDebut != null) {
+            setParam(query, "dateDebut", dateDebut);
+        }
+
+        if (dateFin != null) {
+            setParam(query, "dateFin", dateFin.toLocalDate().atTime(LocalTime.MAX));
+        }
+
+        return query.getSingleResult();
+    }
+
+    private Object nativeResult(Query query, SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin) {
+        if (sens != null) {
+            setParam(query, "sens", sens.toString());
+        }
+
+        if (dateDebut != null) {
+            setParam(query, "dateDebut", Timestamp.valueOf(dateDebut));
+        }
+
+        if (dateFin != null) {
+            setParam(query, "dateFin", Timestamp.valueOf(dateFin.toLocalDate().atTime(LocalTime.MAX)));
+        }
+
+        return query.getSingleResult();
+    }
+
+    private void setParam(Query query, String paramName, Object paramvalue) {
+        if (paramvalue != null) {
+            query.setParameter(paramName, paramvalue);
+        }
+    }
+
+    private String filterQueryString(SupervisionFilterModalFormRequest supervisionFilterModalFormRequest) {
+        StringBuilder queryString = new StringBuilder("SELECT t FROM Transfert t");
+
+        boolean hasCondition = false;
+
+        if (supervisionFilterModalFormRequest.getNomFichier() != null) {
+            queryString.append(" WHERE t.nomFichier LIKE :nomFichier");
+            hasCondition = true;
+        }
+
+        if (supervisionFilterModalFormRequest.getTypeFichier() != null) {
+            if (!hasCondition) {
+                queryString.append(" WHERE ");
+            } else {
+                queryString.append(" AND ");
+            }
+            hasCondition = true;
+
+            queryString.append("t.typeFichier = :typeFichier");
+        }
+
+        if (supervisionFilterModalFormRequest.getSensTransfert() != null) {
+            if (!hasCondition) {
+                queryString.append(" WHERE ");
+            } else {
+                queryString.append(" AND ");
+            }
+            hasCondition = true;
+
+            queryString.append("t.sensTransfert = :sensTransfert");
+        }
+
+        if (supervisionFilterModalFormRequest.getEtatTransfert() != null) {
+            if (!hasCondition) {
+                queryString.append(" WHERE ");
+            } else {
+                queryString.append(" AND ");
+            }
+            hasCondition = true;
+
+            queryString.append("t.etatTransfert = :etatTransfert");
+        }
+
+        if (supervisionFilterModalFormRequest.getDateDebut() != null) {
+            if (!hasCondition) {
+                queryString.append(" WHERE ");
+            } else {
+                queryString.append(" AND ");
+            }
+            hasCondition = true;
+
+            queryString.append("t.dateCreation >= :dateDebut");
+        }
+
+        if (supervisionFilterModalFormRequest.getDateFin() != null) {
+            if (!hasCondition) {
+                queryString.append(" WHERE ");
+            } else {
+                queryString.append(" AND ");
+            }
+
+            queryString.append("t.dateDebut <= :dateFin");
+        }
+
+        return queryString.toString();
+    }
+
+    private void setParameters(Query query, SupervisionFilterModalFormRequest supervisionFilterModalFormRequest) {
+
+        if (supervisionFilterModalFormRequest.getNomFichier() != null) {
+            setParam(query, "nomFichier", "%" + supervisionFilterModalFormRequest.getNomFichier() + "%");
+        }
+
+        if (supervisionFilterModalFormRequest.getTypeFichier() != null) {
+            setParam(query, "typeFichier", supervisionFilterModalFormRequest.getTypeFichier().getCode());
+        }
+
+        if (supervisionFilterModalFormRequest.getSensTransfert() != null) {
+            setParam(query, "sensTransfert", supervisionFilterModalFormRequest.getSensTransfert());
+        }
+
+        if (supervisionFilterModalFormRequest.getEtatTransfert() != null) {
+            setParam(query, "etatTransfert", supervisionFilterModalFormRequest.getEtatTransfert());
+        }
+
+        if (supervisionFilterModalFormRequest.getDateDebut() != null) {
+            setParam(query, "dateDebut", supervisionFilterModalFormRequest.getDateDebut().toLocalDate().atStartOfDay());
+        }
+
+        if (supervisionFilterModalFormRequest.getDateFin() != null) {
+            setParam(query, "dateFin", supervisionFilterModalFormRequest.getDateFin().toLocalDate().atTime(LocalTime.MAX));
+        }
+
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/supervision/TransfertDaoDynamicWhereString.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/supervision/TransfertDaoDynamicWhereString.java
new file mode 100644
index 0000000..48f99b9
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/supervision/TransfertDaoDynamicWhereString.java
@@ -0,0 +1,76 @@
+package com.megatim.fdxconsultation.dao.impl.supervision;
+
+import com.megatim.fdxconsultation.model.supervision.SensTransfert;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class TransfertDaoDynamicWhereString {
+
+    private final SensTransfert sens;
+    private final LocalDateTime dateDebut;
+    private final LocalDateTime dateFin;
+
+    public TransfertDaoDynamicWhereString(SensTransfert sens, LocalDateTime dateDebut, LocalDateTime dateFin) {
+        this.sens = sens;
+        this.dateDebut = dateDebut;
+        this.dateFin = dateFin;
+    }
+
+    public String query() {
+        StringBuilder stringBuilder = new StringBuilder("");
+        boolean hasCriteria = false;
+
+        if (sens != null) {
+            stringBuilder.append(" t.sensTransfert = :sens ");
+            hasCriteria = true;
+        }
+
+        if (dateDebut != null) {
+            if (hasCriteria) {
+                stringBuilder.append(" AND ");
+            }
+            stringBuilder.append(" t.dateDebut >= :dateDebut ");
+            hasCriteria = true;
+        }
+
+        if (dateFin != null) {
+            if (hasCriteria) {
+                stringBuilder.append(" AND ");
+            }
+            stringBuilder.append(" t.dateFin <= :dateFin ");
+        }
+
+        return stringBuilder.toString();
+    }
+
+    public String nativeQuery() {
+        StringBuilder stringBuilder = new StringBuilder("");
+        boolean hasCriteria = false;
+
+        if (sens != null) {
+            stringBuilder.append(" t.senstransfert = :sens ");
+            hasCriteria = true;
+        }
+
+        if (dateDebut != null) {
+            if (hasCriteria) {
+                stringBuilder.append(" AND ");
+            }
+            stringBuilder.append(" t.datedebut >= :dateDebut ");
+            hasCriteria = true;
+        }
+
+        if (dateFin != null) {
+            if (hasCriteria) {
+                stringBuilder.append(" AND ");
+            }
+            stringBuilder.append(" t.datefin <= :dateFin ");
+        }
+
+        return stringBuilder.toString();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/supervision/TransfertMessageKey.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/supervision/TransfertMessageKey.java
new file mode 100644
index 0000000..594c132
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/supervision/TransfertMessageKey.java
@@ -0,0 +1,29 @@
+package com.megatim.fdxconsultation.dao.impl.supervision;
+
+import com.megatim.fdxconsultation.model.supervision.SensTransfert;
+import com.megatim.fdxconsultation.model.supervision.Transfert;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class TransfertMessageKey {
+
+    private final Transfert transfert;
+
+    public TransfertMessageKey(Transfert transfert) {
+        this.transfert = transfert;
+    }
+
+    public String key() {
+        String k = codeAgent() + "-" + transfert.getNomFichier() + "-" + transfert.getSensTransfert();
+        return k;
+    }
+
+    private String codeAgent() {
+        return transfert.getSensTransfert().equals(SensTransfert.ENVOI)
+                ? transfert.getCodeAgentRecepteur()
+                : transfert.getCodeAgent();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/utils/BaseEntityUtil.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/utils/BaseEntityUtil.java
new file mode 100644
index 0000000..42b6dc4
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/utils/BaseEntityUtil.java
@@ -0,0 +1,34 @@
+package com.megatim.fdxconsultation.dao.impl.utils;
+
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.base.BaseEntity;
+import java.util.Date;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class BaseEntityUtil {
+
+    private BaseEntityUtil() {
+    }
+
+    public static void setBaseEntityFieldsForAdd(BaseEntity baseEntity, User connectedUser) {
+        baseEntity.setDateCreation(new Date());
+        baseEntity.setTypeOperation(TypeOperation.AJOUTER);
+        baseEntity.setUtilisateurCreation(connectedUser != null ? connectedUser.getUserName() : null);
+    }
+
+    public static void setBaseEntityFieldsForUpdate(BaseEntity baseEntity, User connectedUser) {
+        baseEntity.setDateDerniereModification(new Date());
+        baseEntity.setUtilisateurModification(connectedUser != null ? connectedUser.getUserName() : null);
+    }
+
+    public static void setBaseEntityFieldsForDelete(BaseEntity baseEntity, User connectedUser) {
+        baseEntity.setDateSuppression(new Date());
+        baseEntity.setUtilisateurSuppression(connectedUser != null ? connectedUser.getUserName() : null);
+        baseEntity.setTypeOperation(TypeOperation.SUPPRIMER);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/searchs/TypeFichierReferentielSearchDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/searchs/TypeFichierReferentielSearchDAOImpl.java
new file mode 100644
index 0000000..42074dd
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/searchs/TypeFichierReferentielSearchDAOImpl.java
@@ -0,0 +1,130 @@
+package com.megatim.fdxconsultation.dao.searchs;
+
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.dao.ifaces.searchs.TypeFichierReferentielSearchDAO;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierReferentielSearch;
+import java.util.List;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class TypeFichierReferentielSearchDAOImpl implements TypeFichierReferentielSearchDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @Override
+    public List<TypeFichier> all(int pageNumber, int pagesize, TypeFichierReferentielSearch searchEntity) {
+
+        String queryString = "SELECT t FROM TypeFichier t  " + whereQueryString(searchEntity);
+
+        Query query = queryWithParameter(em.createQuery(queryString), searchEntity)
+                .setFirstResult((pageNumber - 1) * pagesize)
+                .setMaxResults(pagesize);
+
+        return query.getResultList();
+    }
+
+    @Override
+    public Long count(TypeFichierReferentielSearch searchEntity) {
+        String queryString = "SELECT COUNT(t) FROM TypeFichier t  " + whereQueryString(searchEntity);
+        Query query = queryWithParameter(em.createQuery(queryString), searchEntity);
+
+        return (Long) query.getSingleResult();
+    }
+
+    @Override
+    public List<TypeFichier> all(String userName, int pageNumber, int pagesize, TypeFichierReferentielSearch searchEntity) {
+
+        String queryString = "SELECT t from TypeFichier t  WHERE ((SELECT COALESCE(COUNT(u), 0) FROM User u JOIN u.typeFichiers tf WHERE u.userName = :username AND tf = t) > 0) AND " + queryString(searchEntity);
+
+        Query query = queryWithParameter(em.createQuery(queryString), searchEntity)
+                .setFirstResult((pageNumber - 1) * pagesize)
+                .setMaxResults(pagesize)
+                .setParameter("username", userName);
+
+        return query.getResultList();
+
+    }
+
+    @Override
+    public Long count(String userName, TypeFichierReferentielSearch searchEntity) {
+        String queryString
+                = "SELECT COALESCE(COUNT(t), 0) FROM TypeFichier t  WHERE ((SELECT COALESCE(COUNT(u), 0) FROM User u JOIN u.typeFichiers tf WHERE u.userName = :username AND tf = t) > 0) AND " + queryString(searchEntity);
+        Query query = queryWithParameter(em.createQuery(queryString), searchEntity).setParameter("username", userName);
+
+        return (Long) query.getSingleResult();
+    }
+
+    private Query queryWithParameter(Query query, TypeFichierReferentielSearch searchEntity) {
+
+        if (searchEntity.getCode() != null) {
+            query.setParameter("code", likeValue(searchEntity.getCode()));
+        }
+
+        if (searchEntity.getLibelle() != null) {
+            query.setParameter("libelle", likeValue(searchEntity.getLibelle()));
+        }
+
+        if (searchEntity.getDescription() != null) {
+            query.setParameter("description", likeValue(searchEntity.getDescription()));
+        }
+
+        if (searchEntity.getReferentiel() != null) {
+            query.setParameter("version", searchEntity.getReferentiel());
+        }
+
+        return query;
+    }
+
+    private String whereQueryString(TypeFichierReferentielSearch searchEntity) {
+        return " WHERE " + queryString(searchEntity);
+    }
+
+    private String queryString(TypeFichierReferentielSearch searchEntity) {
+
+        StringBuilder query = new StringBuilder("");
+        boolean withAnd = false;
+
+        if (searchEntity.getCode() != null) {
+            query.append("t.code LIKE :code");
+            withAnd = true;
+        }
+
+        if (searchEntity.getLibelle() != null) {
+            if (withAnd) {
+                query.append(" AND ");
+            }
+            query.append(" t.libelle LIKE :libelle");
+            withAnd = true;
+        }
+
+        if (searchEntity.getDescription() != null) {
+            if (withAnd) {
+                query.append(" AND ");
+            }
+            query.append(" t.description LIKE :description");
+            withAnd = true;
+        }
+
+        if (searchEntity.getReferentiel() != null) {
+            if (withAnd) {
+                query.append(" AND ");
+            }
+            query.append(" t.referentiel.version <= :version");
+        }
+
+        return query.toString();
+    }
+
+    private String likeValue(String value) {
+        return "%" + value + "%";
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/searchs/UserParticipantDAOIml.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/searchs/UserParticipantDAOIml.java
new file mode 100644
index 0000000..c5a8e16
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/searchs/UserParticipantDAOIml.java
@@ -0,0 +1,81 @@
+package com.megatim.fdxconsultation.dao.searchs;
+
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import com.megatim.fdxconsultation.dao.ifaces.searchs.UserParticipantDAO;
+import com.megatim.fdxconsultation.model.searchentities.ParticipantSearch;
+import java.util.List;
+import javax.enterprise.context.Dependent;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Dependent
+public class UserParticipantDAOIml implements UserParticipantDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @Override
+    public List<Participant> findUserParticipantsWithPagination(String userName, ParticipantSearch participantSearch, int pageNumber, int pageSize) {
+        StringBuilder queryString = new StringBuilder("SELECT t from Participant t ")
+                .append(" WHERE ((SELECT COALESCE(COUNT(u), 0) FROM User u JOIN u.participants tf WHERE u.userName = :username AND tf = t) > 0)");
+        extendsQuery(queryString, participantSearch);
+        Query query = em.createQuery(queryString.toString()).setParameter("username", userName);
+        extendsParameter(query, participantSearch);
+        query.setFirstResult((pageNumber - 1) * pageSize).setMaxResults(pageSize);
+        return (List<Participant>) query.getResultList();
+    }
+    
+    @Override
+    public List<Participant> findAllUserParticipants(String userName, ParticipantSearch participantSearch) {
+        StringBuilder queryString = new StringBuilder("SELECT t from Participant t ")
+                .append(" WHERE ((SELECT COALESCE(COUNT(u), 0) FROM User u JOIN u.participants tf WHERE u.userName = :username AND tf = t) > 0)");
+        extendsQuery(queryString, participantSearch);
+        Query query = em.createQuery(queryString.toString()).setParameter("username", userName);
+        extendsParameter(query, participantSearch);
+        return (List<Participant>) query.getResultList();
+    }
+
+    @Override
+    public List<Participant> findUserParticipants(String userName) {
+        return (List<Participant>) em.createQuery("SELECT t from Participant t "
+                + " WHERE ((SELECT COALESCE(COUNT(u), 0) FROM User u JOIN u.participants tf WHERE u.userName = :username AND tf = t) > 0)")
+                .setParameter("username", userName)
+                .getResultList();
+    }
+
+    @Override
+    public Long countUserParticipants(String userName, ParticipantSearch participantSearch) {
+        StringBuilder queryString = new StringBuilder("SELECT t from Participant t ")
+                .append(" WHERE ((SELECT COALESCE(COUNT(u), 0) FROM User u JOIN u.participants tf WHERE u.userName = :username AND tf = t) > 0)");
+        extendsQuery(queryString, participantSearch);
+        Query query = em.createQuery(queryString.toString()).setParameter("username", userName);
+        extendsParameter(query, participantSearch);
+        return (long) query.getResultList().size();
+    }
+
+    private void extendsQuery(StringBuilder queryString, ParticipantSearch participantSearch) {
+        if (participantSearch.getCode() != null) {
+            queryString.append(" AND t.code LIKE :code");
+        }
+        if (participantSearch.getLibelle() != null) {
+            queryString.append(" AND t.libelle LIKE :libelle");
+        }
+    }
+
+    private void extendsParameter(Query query, ParticipantSearch participantSearch) {
+        if (participantSearch.getCode() != null) {
+            //System.out.println("typeFichierSearch.getCode() " + "%" + typeFichierSearch.getCode() + "%");
+            query.setParameter("code", "%" + participantSearch.getCode() + "%");
+        }
+        if (participantSearch.getLibelle() != null) {
+            //System.out.println("typeFichierSearch.getCode() " + "%" + typeFichierSearch.getCode() + "%");
+            query.setParameter("libelle", "%" + participantSearch.getLibelle() + "%");
+        }
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/searchs/UserTypeFichierDAOIml.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/searchs/UserTypeFichierDAOIml.java
new file mode 100644
index 0000000..a7ff595
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/searchs/UserTypeFichierDAOIml.java
@@ -0,0 +1,134 @@
+package com.megatim.fdxconsultation.dao.searchs;
+
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.dao.ifaces.searchs.UserTypeFichierDAO;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierSearch;
+import java.util.List;
+import javax.enterprise.context.Dependent;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Dependent
+public class UserTypeFichierDAOIml implements UserTypeFichierDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @Override
+    public List<TypeFichier> findUserTypeFichiersWithPagination(String userName, TypeFichierSearch typeFichierSearch, int pageNumber, int pageSize) {
+
+        StringBuilder queryString = new StringBuilder("SELECT t from TypeFichier t ")
+                .append(" WHERE ((SELECT COALESCE(COUNT(u), 0) FROM User u JOIN u.typeFichiers tf WHERE u.userName = :username AND tf = t) > 0)");
+
+        extendsQuery(queryString, typeFichierSearch);
+
+        Query query = em.createQuery(queryString.toString())
+                .setParameter("username", userName);
+
+        extendsParameter(query, typeFichierSearch);
+
+        query.setFirstResult((pageNumber - 1) * pageSize).setMaxResults(pageSize);
+
+        return (List<TypeFichier>) query.getResultList();
+    }
+
+    @Override
+    public List<TypeFichier> findUserTypeFichiers(String userName) {
+        return (List<TypeFichier>) em.createQuery("SELECT t from TypeFichier t "
+                + " WHERE ((SELECT COALESCE(COUNT(u), 0) FROM User u JOIN u.typeFichiers tf WHERE u.userName = :username AND tf = t) > 0)")
+                .setParameter("username", userName)
+                .getResultList();
+    }
+
+    @Override
+    public Long countUserTypeFichiers(String userName, TypeFichierSearch typeFichierSearch) {
+
+        StringBuilder queryString = new StringBuilder("SELECT COALESCE(COUNT(t), 0) from TypeFichier t ")
+                .append(" WHERE ((SELECT COALESCE(COUNT(u), 0) FROM User u JOIN u.typeFichiers tf WHERE u.userName = :username AND tf = t) > 0)");
+
+        extendsQuery(queryString, typeFichierSearch);
+
+        Query query = em.createQuery(queryString.toString())
+                .setParameter("username", userName);
+
+        extendsParameter(query, typeFichierSearch);
+
+        return (long) query.getResultList().size();
+    }
+
+    @Override
+    public List<TypeFichier> findUserTypeFichiersInReferentielWithPagination(String userName, String referentiel, TypeFichierSearch typeFichierSearch, int pageNumber, int pageSize) {
+
+        StringBuilder queryString = new StringBuilder("SELECT t from TypeFichier t ")
+                .append(" WHERE t.referentiel.version <= :referentiel AND ((SELECT COALESCE(COUNT(u), 0) FROM User u JOIN u.typeFichiers tf WHERE u.userName = :username AND tf = t) > 0)");
+
+        extendsQuery(queryString, typeFichierSearch);
+
+        Query query = em.createQuery(queryString.toString())
+                .setParameter("username", userName)
+                .setParameter("referentiel", referentiel);
+
+        extendsParameter(query, typeFichierSearch);
+
+        query.setFirstResult((pageNumber - 1) * pageSize).setMaxResults(pageSize);
+
+        return (List<TypeFichier>) query.getResultList();
+    }
+
+    @Override
+    public Long countUserTypeFichiersInReferentiel(String userName, String referentiel, TypeFichierSearch typeFichierSearch) {
+        StringBuilder queryString = new StringBuilder("SELECT COALESCE(COUNT(t), 0) from TypeFichier t ")
+                .append(" WHERE t.referentiel.version <= :referentiel AND ((SELECT COALESCE(COUNT(u), 0) FROM User u JOIN u.typeFichiers tf WHERE u.userName = :username AND tf = t) > 0)");
+
+        extendsQuery(queryString, typeFichierSearch);
+
+        Query query = em.createQuery(queryString.toString())
+                .setParameter("username", userName)
+                .setParameter("referentiel", referentiel);
+
+        extendsParameter(query, typeFichierSearch);
+
+        return (long) query.getSingleResult();
+    }
+
+    private void extendsQuery(StringBuilder queryString, TypeFichierSearch typeFichierSearch) {
+
+        if (typeFichierSearch.getCode() != null) {
+            queryString.append(" AND t.code LIKE :code");
+        }
+
+        if (typeFichierSearch.getLibelle() != null) {
+            queryString.append(" AND t.libelle LIKE :libelle");
+        }
+
+        if (typeFichierSearch.getDescription() != null) {
+            queryString.append(" AND t.description LIKE :description");
+        }
+
+    }
+
+    private void extendsParameter(Query query, TypeFichierSearch typeFichierSearch) {
+
+        if (typeFichierSearch.getCode() != null) {
+            //System.out.println("typeFichierSearch.getCode() " + "%" + typeFichierSearch.getCode() + "%");
+            query.setParameter("code", "%" + typeFichierSearch.getCode() + "%");
+        }
+
+        if (typeFichierSearch.getLibelle() != null) {
+            //System.out.println("typeFichierSearch.getLibelle() " + "%" + typeFichierSearch.getLibelle() + "%");
+            query.setParameter("libelle", "%" + typeFichierSearch.getLibelle() + "%");
+        }
+
+        if (typeFichierSearch.getDescription() != null) {
+            //System.out.println("typeFichierSearch.getDescription() " + "%" + typeFichierSearch.getDescription() + "%");
+            query.setParameter("description", "%" + typeFichierSearch.getDescription() + "%");
+        }
+
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/daoimpl/documents/CategoryDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/daoimpl/documents/CategoryDAOImpl.java
new file mode 100644
index 0000000..9d32025
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/daoimpl/documents/CategoryDAOImpl.java
@@ -0,0 +1,67 @@
+package com.megatim.fdxconsultation.daoimpl.documents;
+
+import com.bekosoftware.genericdaolayer.dao.impl.AbstractGenericDAO;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxconsultation.dao.ifaces.documents.CategoryDAO;
+import com.megatim.fdxconsultation.dao.ifaces.documents.DocumentDAO;
+import com.megatim.fdxconsultation.model.documents.Category;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import javax.transaction.Transactional;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Dependent
+public class CategoryDAOImpl extends AbstractGenericDAO<Category, Long> implements CategoryDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @Inject
+    private DocumentDAO documentDAO;
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<Category> getManagedEntityClass() {
+        return Category.class;
+    }
+
+    @Override
+    public Category getById(Long id) {
+        Query query = getEntityManager().createQuery("SELECT c FROM Category c WHERE c.id = :id AND c.typeOperation = :typeOperation");
+        query.setParameter("id", id).setParameter("typeOperation", TypeOperation.AJOUTER);
+        List<Category> liste = query.getResultList();
+        return liste != null ? liste.stream().findFirst().get() : null;
+    }
+
+    @Override
+    @Transactional
+    public List<Category> loadAll() {
+
+        /*Query query = getEntityManager().createNativeQuery("SELECT c.*, doc.* FROM category c "
+                + "LEFT JOIN fdx_document doc ON c.id = doc.category_id AND doc.type_operation = :typeOperation "
+                + "WHERE c.type_operation = :typeOperation");*/
+        
+        Query query = getEntityManager().createQuery("SELECT DISTINCT c FROM Category c "
+                + "WHERE c.typeOperation = :typeOperation");
+
+        query.setParameter("typeOperation", TypeOperation.AJOUTER);
+
+        List<Category> categories = query.getResultList();
+        categories.forEach(c -> c.setDocuments(documentDAO.getByCategory(c.getId()).stream().collect(Collectors.toSet())));
+
+        return categories;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/daoimpl/documents/DocumentDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/daoimpl/documents/DocumentDAOImpl.java
new file mode 100644
index 0000000..1442872
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/daoimpl/documents/DocumentDAOImpl.java
@@ -0,0 +1,48 @@
+package com.megatim.fdxconsultation.daoimpl.documents;
+
+import com.bekosoftware.genericdaolayer.dao.impl.AbstractGenericDAO;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxconsultation.dao.ifaces.documents.DocumentDAO;
+import com.megatim.fdxconsultation.model.documents.Document;
+import java.util.List;
+import javax.enterprise.context.Dependent;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Dependent
+public class DocumentDAOImpl extends AbstractGenericDAO<Document, Long> implements DocumentDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<Document> getManagedEntityClass() {
+        return Document.class;
+    }
+
+    @Override
+    public Document getById(Long id) {
+        Query query = getEntityManager().createQuery("SELECT d FROM Document d WHERE d.id = :id AND d.typeOperation = :typeOperation");
+        query.setParameter("id", id).setParameter("typeOperation", TypeOperation.AJOUTER);
+        List<Document> liste = query.getResultList();
+        return liste != null ? liste.stream().findFirst().get() : null;
+    }
+
+    @Override
+    public List<Document> getByCategory(Long categoryId) {
+        Query query = getEntityManager().createQuery("SELECT d FROM Document d WHERE d.category.id = :id AND d.typeOperation = :typeOperation");
+        query.setParameter("id", categoryId).setParameter("typeOperation", TypeOperation.AJOUTER);
+        return query.getResultList();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/daoimpl/favoritessearch/FavoriteSearchDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/daoimpl/favoritessearch/FavoriteSearchDAOImpl.java
new file mode 100644
index 0000000..79e20b4
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/daoimpl/favoritessearch/FavoriteSearchDAOImpl.java
@@ -0,0 +1,39 @@
+package com.megatim.fdxconsultation.daoimpl.favoritessearch;
+
+import com.bekosoftware.genericdaolayer.dao.impl.AbstractGenericDAO;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxconsultation.dao.ifaces.favoritessearch.FavoriteSearchDAO;
+import com.megatim.fdxconsultation.model.favoritessearch.FavoriteSearch;
+import java.util.List;
+import javax.enterprise.context.Dependent;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Dependent
+public class FavoriteSearchDAOImpl extends AbstractGenericDAO<FavoriteSearch, Long> implements FavoriteSearchDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public Class<FavoriteSearch> getManagedEntityClass() {
+        return FavoriteSearch.class;
+    }
+
+    @Override
+    public List<FavoriteSearch> all(String userName) {
+        Query query = getEntityManager().createQuery("SELECT f FROM FavoriteSearch f WHERE f.utilisateurCreation = :userName AND f.typeOperation = :typeOperation");
+        query.setParameter("userName", userName).setParameter("typeOperation", TypeOperation.AJOUTER);
+        return query.getResultList();
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/resources/META-INF/persistence.xml b/fdx-consultation/fdxconsultation-dao-impl/src/main/resources/META-INF/persistence.xml
new file mode 100644
index 0000000..f61df74
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/resources/META-INF/persistence.xml
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
+    <persistence-unit name="fdxConsultationPersistenceUnit" transaction-type="JTA">
+    
+        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
+        <jta-data-source>java:/fdxConsultationDS</jta-data-source>
+        <shared-cache-mode>NONE</shared-cache-mode>
+    
+        <!--Module Administration-->
+        <class>com.megatim.fdxconsultation.model.administration.Action</class>
+        <class>com.megatim.fdxconsultation.model.administration.Role</class>
+        <class>com.megatim.fdxconsultation.model.administration.User</class>
+        <class>com.megatim.fdxconsultation.model.administration.HistoriqueMotDePasse</class>
+        <class>com.megatim.fdxconsultation.model.message.systeme.MessageSysteme</class>
+        <class>com.megatim.fdxconsultation.model.administration.JournalActionUtilisateur</class>
+        <class>com.megatim.fdxconsultation.model.administration.JournalConnexionUtilisateur</class>
+    
+        <!--Module Configuration-->
+        <class>com.megatim.fdxconsultation.model.configuration.CodeStatutHttp</class>
+    
+        <!--Module Referentiel-->
+        <class>com.megatim.fdxcommons.model.referentiel.ApplicationSource</class>
+        <class>com.megatim.fdxcommons.model.referentiel.ExtensionFichier</class>
+        <class>com.megatim.fdxcommons.model.referentiel.GroupeNoeud</class>
+        <class>com.megatim.fdxcommons.model.referentiel.GroupeParticipant</class>
+        <class>com.megatim.fdxcommons.model.referentiel.Noeud</class>
+        <class>com.megatim.fdxcommons.model.referentiel.Participant</class>
+        <class>com.megatim.fdxcommons.model.referentiel.Pays</class>
+        <class>com.megatim.fdxcommons.model.referentiel.Referentiel</class>
+        <class>com.megatim.fdxcommons.model.referentiel.Routage</class>
+        <class>com.megatim.fdxcommons.model.referentiel.StructureLigne</class>
+        <class>com.megatim.fdxcommons.model.referentiel.TypeFichier</class>
+        <class>com.megatim.fdxcommons.model.referentiel.ValidateurFichier</class>
+        <class>com.megatim.fdxcommons.model.referentiel.ValidateurFichierConfiguration</class>
+        <class>com.megatim.fdxcommons.model.integration.ColumnDefinition</class>
+        <class>com.megatim.fdxconsultation.model.integration.EchecIntegration</class>
+        <class>com.megatim.fdxcommons.model.integration.TableDefinition</class>
+        <class>com.megatim.fdxcommons.model.dataproduction.DataProductionToDelete</class>
+        
+        <!-- Historique des intégration du referentiel-->
+        <class>com.megatim.fdxcommons.model.referentiel.historique.ReferentielIntegrationHistorique</class>
+        
+        <!-- Module d'administration de l'API depuis l'interface de consultation -->
+        <class>com.megatim.fdxconsultation.model.api.token.ApiToken</class>
+        
+        <!-- Module de supervision de l'API -->
+        <class>com.megatim.fdxconsultation.model.supervision.Transfert</class>
+        
+        <class>com.megatim.fdxcommons.model.integration.ColumnDefinition</class>
+         
+        <class>com.megatim.fdxconsultation.model.stats.TableConfiguration</class>
+        <class>com.megatim.fdxconsultation.model.stats.TableauBord</class>
+        <class>com.megatim.fdxconsultation.model.stats.CriteriaEntityPersisted</class>
+        <class>com.megatim.fdxconsultation.model.stats.TableauBordColumn</class>
+        <class>com.megatim.fdxconsultation.model.stats.FonctionAggregationCriterion</class>
+        
+        <class>com.megatim.fdxconsultation.model.dataproduction.DataProduction</class>
+        
+        <class>com.megatim.fdxcommons.model.referentiel.natureproduction.NatureProductionFichier</class>
+        
+        <!-- Supervision-->
+        <class>com.megatim.fdxconsultation.model.supervision.AgentConfigurationEntity</class>
+        <class>com.megatim.fdxconsultation.model.supervision.StandaloneServerStateEntity</class>
+        
+        <!-- Settings -->
+        <class>com.megatim.fdxconsultation.model.settings.DisplayOptions</class>
+
+        <!-- LOG -->
+        <class>com.megatim.fdxcommons.model.log.UserActionLog</class>
+        <class>com.megatim.fdxconsultation.model.log.ApiUserActionLog</class>
+
+        <!-- Document -->
+        <class>com.megatim.fdxconsultation.model.documents.Category</class>
+        <class>com.megatim.fdxconsultation.model.documents.Document</class>
+        
+        <!-- Favoris -->
+        <class>com.megatim.fdxconsultation.model.favoritessearch.FavoriteSearch</class>
+        
+        <!-- File Item -->
+        <class>com.megatim.file.model.entites.ItemFile</class>
+        
+        <!-- Gestion des appels sur les systèmes des participants-->
+        <class>com.megatim.fdxconsultation.model.remoteaction.RemoteConfiguration</class>
+        <class>com.megatim.fdxconsultation.model.remoteaction.Planification</class>
+        
+        <class>com.megatim.fdxcommons.model.dataproduction.metadata.ProductionMetaData</class>
+        
+        <properties>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL95Dialect"/>
+            <property name="hibernate.hbm2ddl.auto" value="update"/>
+            <property name="hibernate.show_sql" value="false"/>
+        </properties>
+    
+    </persistence-unit>
+    
+    <persistence-unit name="mgtchatmodule" transaction-type="JTA">    
+        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
+        <jta-data-source>java:/fdxConsultationDS</jta-data-source>
+        <shared-cache-mode>NONE</shared-cache-mode>
+        <class>com.megatim.chat.model.entites.Message</class>
+        <class>com.megatim.chat.model.entites.FileAttente</class>
+        <class>com.megatim.chat.model.entites.UserConversation</class>
+        <properties>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL95Dialect"/>
+            <property name="hibernate.hbm2ddl.auto" value="update" />
+            <property name="hibernate.show_sql" value="false" />
+        </properties>    
+    </persistence-unit>
+    
+    <persistence-unit name="mgtfilemodule" transaction-type="JTA">    
+        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
+        <jta-data-source>java:/fdxConsultationDS</jta-data-source>
+        <shared-cache-mode>NONE</shared-cache-mode>
+        <class>com.megatim.file.model.entites.ItemFile</class>
+        <properties>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL95Dialect"/>
+            <property name="hibernate.hbm2ddl.auto" value="update"/>
+            <property name="hibernate.show_sql" value="false"/>
+        </properties>    
+    </persistence-unit>
+
+</persistence>
diff --git a/fdx-consultation/fdxconsultation-model/.gitignore b/fdx-consultation/fdxconsultation-model/.gitignore
new file mode 100644
index 0000000..b24d71e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/.gitignore
@@ -0,0 +1,50 @@
+# These are some examples of commonly ignored file patterns.
+# You should customize this list as applicable to your project.
+# Learn more about .gitignore:
+#     https://www.atlassian.com/git/tutorials/saving-changes/gitignore
+
+# Node artifact files
+node_modules/
+dist/
+
+# Compiled Java class files
+*.class
+
+# Compiled Python bytecode
+*.py[cod]
+
+# Log files
+*.log
+
+# Package files
+*.jar
+
+# Maven
+target/
+dist/
+
+# JetBrains IDE
+.idea/
+
+# Unit test reports
+TEST*.xml
+
+# Generated by MacOS
+.DS_Store
+
+# Generated by Windows
+Thumbs.db
+
+# Applications
+*.app
+*.exe
+*.war
+
+# Large media files
+*.mp4
+*.tiff
+*.avi
+*.flv
+*.mov
+*.wmv
+
diff --git a/fdx-consultation/fdxconsultation-model/nb-configuration.xml b/fdx-consultation/fdxconsultation-model/nb-configuration.xml
new file mode 100644
index 0000000..a65c451
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/nb-configuration.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+    <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+        <!--
+Properties that influence various parts of the IDE, especially code formatting and the like. 
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+        <netbeans.hint.jdkPlatform>JDK_1.8</netbeans.hint.jdkPlatform>
+    </properties>
+</project-shared-configuration>
diff --git a/fdx-consultation/fdxconsultation-model/pom.xml b/fdx-consultation/fdxconsultation-model/pom.xml
new file mode 100644
index 0000000..c2edf65
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/pom.xml
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+        <groupId>com.megatim.fdxconsultation</groupId>
+        <artifactId>fdxconsultation</artifactId>
+        <version>1.0</version>
+    </parent>
+    
+    <groupId>com.megatim.fdxconsultation.model</groupId>
+    <artifactId>fdxconsultation-model</artifactId>
+    <version>1.0</version>
+    <packaging>jar</packaging>
+    
+    <properties>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <jakartaee>8.0</jakartaee>
+        <version.lombok>1.18.18</version.lombok>
+        <version.mapstruct>1.4.2.Final</version.mapstruct>
+        <version.mapstruct-lombok>0.2.0</version.mapstruct-lombok>
+    </properties>
+    
+    <dependencies>
+        <dependency>
+            <groupId>com.megatim.file</groupId>
+            <artifactId>application-file-service-impl-dependency</artifactId>
+            <version>1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>javax</groupId>
+            <artifactId>javaee-api</artifactId>
+            <version>${jakartaee}</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>${version.lombok}</version>
+            <optional>true</optional>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim</groupId>
+            <artifactId>rs-security-core</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.mapstruct</groupId>
+            <artifactId>mapstruct</artifactId>
+            <version>${version.mapstruct}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok-mapstruct-binding</artifactId>
+            <version>${version.mapstruct-lombok}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.hibernate.validator</groupId>
+            <artifactId>hibernate-validator</artifactId>
+            <version>6.0.13.Final</version>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdx.messaging</groupId>
+            <artifactId>fdx-messaging-common</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxcommons.model</groupId>
+            <artifactId>fdxcommons-model</artifactId>
+            <version>1.0</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+    </dependencies>
+    
+    <build>
+        <plugins>
+            <!-- ... -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.5.1</version>
+                <configuration>
+                    <source>1.8</source> 
+                    <target>1.8</target> 
+                    <annotationProcessorPaths>
+                        <path>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                            <version>${version.lombok}</version>
+                        </path>
+                        <path>
+                            <groupId>org.mapstruct</groupId>
+                            <artifactId>mapstruct-processor</artifactId>
+                            <version>${version.mapstruct}</version>
+                        </path>
+                        <path>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok-mapstruct-binding</artifactId>
+                            <version>${version.mapstruct-lombok}</version>
+                        </path>
+                    </annotationProcessorPaths>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+    
+    <name>fdxconsultation-model</name>
+    
+</project>
\ No newline at end of file
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/adapters/LocalDateTimeAdapter.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/adapters/LocalDateTimeAdapter.java
new file mode 100644
index 0000000..eaabe62
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/adapters/LocalDateTimeAdapter.java
@@ -0,0 +1,25 @@
+package com.megatim.fdxconsultation.model.adapters;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import javax.xml.bind.annotation.adapters.XmlAdapter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class LocalDateTimeAdapter extends XmlAdapter<String, LocalDateTime> {
+    
+    private static final DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
+    
+    @Override
+    public LocalDateTime unmarshal(String value) throws Exception {
+        return LocalDateTime.parse(value, formatter);
+    }
+
+    @Override
+    public String marshal(LocalDateTime value) throws Exception {
+        return value.toString();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/Action.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/Action.java
new file mode 100644
index 0000000..b8eccf0
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/Action.java
@@ -0,0 +1,220 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.administration;
+
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+
+/**
+ *
+ * @author Leonel FOFOU
+ */
+@Entity(name = "Action")
+@Table(name = "FS_ACTION")
+public class Action implements Comparable<Action>, Serializable {
+
+    @SequenceGenerator(name = "SEQ_ACTION",
+            sequenceName = "SEQ_ACTION",
+            allocationSize = 1,
+            initialValue = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_ACTION")
+    @Column(name = "ID")
+    @Id
+    private Long id;
+
+    @Column(name = "path")
+    private String path;
+
+    @Column(name = "module")
+    private String module;
+
+    @Column(name = "name")
+    private String name;
+
+    @Column(name = "categorie")
+    private String categorie;
+
+    @Column(name = "description")
+    private String description;
+
+    @Column(name = "autorise")
+    private Boolean autorise;
+
+    @Column(name = "ID_GENERER")
+    protected String idGenerer;
+
+    @Column(name = "TYPE_OPERATION")
+    private TypeOperation typeOperation = TypeOperation.AJOUTER;
+
+    @ManyToMany(mappedBy = "actions")
+    private List<Role> roles = new ArrayList<Role>();
+
+    public Action() {
+    }
+
+    public Action(String name, String description, String path, String module, Boolean autorise) {
+        this.name = name;
+        this.description = description;
+        this.path = path;
+        this.module = module;
+        this.autorise = autorise;
+    }
+
+    public Action(String name, String description, String path, String module, String categorie, Boolean autorise) {
+        this.name = name;
+        this.description = description;
+        this.path = path;
+        this.module = module;
+        this.categorie = categorie;
+        this.autorise = autorise;
+    }
+
+    public Action(String name, String description, String path, String module, Boolean autorise, Role role) {
+        this.name = name;
+        this.description = description;
+        this.path = path;
+        this.module = module;
+        this.autorise = autorise;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public List<Role> getRoles() {
+        return roles;
+    }
+
+    public void setRoles(List<Role> roles) {
+        this.roles = roles;
+    }
+
+    public String getIdGenerer() {
+        return idGenerer;
+    }
+
+    public void setIdGenerer(String idGenerer) {
+        this.idGenerer = idGenerer;
+    }
+
+    public TypeOperation getTypeOperation() {
+        return typeOperation;
+    }
+
+    public void setTypeOperation(TypeOperation typeOperation) {
+        this.typeOperation = typeOperation;
+    }
+
+    public Boolean getAutorise() {
+        return autorise;
+    }
+
+    public void setAutorise(Boolean autorise) {
+        this.autorise = autorise;
+    }
+
+    public String getModule() {
+        return module;
+    }
+
+    public void setModule(String module) {
+        this.module = module;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getCategorie() {
+        return categorie;
+    }
+
+    public void setCategorie(String categorie) {
+        this.categorie = categorie;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 79 * hash + Objects.hashCode(this.id);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final Action other = (Action) obj;
+        return Objects.equals(this.id, other.id);
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see java.lang.Comparable#compareTo(java.lang.Object)
+     */
+    @Override
+    public int compareTo(Action parameter) {
+
+        // Si le parametre est null
+        if (parameter == null) {
+            return -1;
+        }
+
+        // Si le code du parametre est vide
+        if (parameter.id == null) {
+            return -1;
+        }
+
+        // Si le code du parametre en cours est vide
+        if (id == null) {
+            return 1;
+        }
+
+        // On retourne la comparaison des codes
+        return id.compareTo(parameter.id);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/HistoriqueMotDePasse.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/HistoriqueMotDePasse.java
new file mode 100644
index 0000000..c0c7381
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/HistoriqueMotDePasse.java
@@ -0,0 +1,139 @@
+package com.megatim.fdxconsultation.model.administration;
+
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author DYNABOOK
+ */
+@Getter
+@Setter
+@Entity(name = "HistoriqueMotDePasse")
+@Table(name = "FDX_HIST_PWD")
+public class HistoriqueMotDePasse implements Comparable<HistoriqueMotDePasse>, Serializable {
+
+    @SequenceGenerator(name = "SEQ_HIST_PWD",
+            sequenceName = "SEQ_HIST_PWD",
+            allocationSize = 1,
+            initialValue = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_HIST_PWD")
+    @Column(name = "ID")
+    @Id
+    private Long id;
+
+    @Column(name = "ID_GENERER")
+    protected String idGenerer;
+
+    @Column(name = "TYPE_OPERATION")
+    private TypeOperation typeOperation = TypeOperation.AJOUTER;
+
+    @ManyToOne
+    @JoinColumn(name = "USER_ID")
+    private User user;
+    
+    @Column(name = "PWD")
+    private String motDePasse;
+
+    @Column(name = "DATE_CREATION")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date dateCreation;
+
+    @Column(name = "USER_CREATION")
+    private String utilisateurCreation;
+
+    @Column(name = "DATE_DERN_MOD")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date dateDerniereModification;
+
+    @Column(name = "USER_UPDATE")
+    private String utilisateurModification;
+
+    @Column(name = "DATE_SUPPR")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date dateSuppression;
+
+    @Column(name = "USER_DELETE")
+    private String utilisateurSuppression;
+
+    public HistoriqueMotDePasse() {}
+    
+    public HistoriqueMotDePasse(String motDePasse, User user) {
+        this.motDePasse = motDePasse;
+        this.user = user;
+    }
+
+    @Override
+    public boolean equals(Object parameter) {
+
+        // Si le parametre est null
+        if (parameter == null) {
+            return false;
+        }
+
+        // Si le parametre n'est pas de l'instance
+        if (!(parameter instanceof HistoriqueMotDePasse)) {
+            return false;
+        }
+
+        // On caste
+        HistoriqueMotDePasse casted = (HistoriqueMotDePasse) parameter;
+
+        // Si l'id du parametre est vide
+        if (casted.id == null) {
+            return false;
+        }
+
+        // Si l'id en cours est vide
+        if (id == null) {
+            return false;
+        }
+
+        // On retourne la comparaison des ids 
+        return id.equals(casted.id);
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see java.lang.Comparable#compareTo(java.lang.Object)
+     */
+    @Override
+    public int compareTo(HistoriqueMotDePasse parameter) {
+        if (parameter == null) {
+            return -1;
+        }
+
+        // Si le code du parametre est vide
+        if (parameter.id == null) {
+            return -1;
+        }
+
+        // Si l'id du parametre en cours est vide
+        if (id == null) {
+            return 1;
+        }
+
+        // On retourne la comparaison des codes
+        return id.compareTo(parameter.getId());
+    }
+
+    @Override
+    public String toString() {
+        return "HistoriqueMotDePasse{" + "id=" + id + ", idGenerer=" + idGenerer + ", typeOperation=" + typeOperation + ", user=" + user + ", motDePasse=" + motDePasse + ", dateCreation=" + dateCreation + ", utilisateurCreation=" + utilisateurCreation + ", dateDerniereModification=" + dateDerniereModification + ", utilisateurModification=" + utilisateurModification + ", dateSuppression=" + dateSuppression + ", utilisateurSuppression=" + utilisateurSuppression + '}';
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/JournalActionUtilisateur.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/JournalActionUtilisateur.java
new file mode 100644
index 0000000..d45a064
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/JournalActionUtilisateur.java
@@ -0,0 +1,111 @@
+package com.megatim.fdxconsultation.model.administration;
+
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Objects;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author DYNABOOK
+ */
+@Getter
+@Setter
+@Entity(name = "JournalActionUtilisateur")
+@Table(name = "useractionlog")
+public class JournalActionUtilisateur implements Comparable<JournalActionUtilisateur>, Serializable {
+
+    @Id
+    @SequenceGenerator(name = "SEQ_USER_ACTION_LOGS",
+            sequenceName = "SEQ_USER_ACTION_LOGS",
+            allocationSize = 1,
+            initialValue = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_USER_ACTION_LOGS")
+    private Long id;
+
+    @NotEmpty(message = "La description est obligatoire")
+    @CriteriaEntitySearch(libelle = "Description", rang = 2)
+    private String message;
+
+    @CriteriaEntitySearch(libelle = "Utilisateur", rang = 5)
+    private String userName;
+
+    //@XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    @NotNull(message = "La date de l'action est obligatoire")
+    @CriteriaEntitySearch(libelle = "Date", rang = 1)
+    private LocalDateTime dateAction;
+
+    @CriteriaEntitySearch(libelle = "Adresse IP", rang = 4)
+    @NotEmpty(message = "L'addresse IP est obligatoire")
+    private String ipAddress;
+
+    @CriteriaEntitySearch(libelle = "Statut requete", visible = false)
+    private Integer status;
+
+    @CriteriaEntitySearch(libelle = "Navigateur", rang = 3)
+    private String userAgent;
+    
+    @CriteriaEntitySearch(libelle = "Path", visible = false)
+    private String relativePath;
+
+    private String httpMethod;
+    
+    @CriteriaEntitySearch(libelle = "Motif erreur", rang = 6, visible = false)
+    private String motif;
+
+    public JournalActionUtilisateur() {
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 11 * hash + Objects.hashCode(this.id);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final JournalActionUtilisateur other = (JournalActionUtilisateur) obj;
+        if (!Objects.equals(this.id, other.id)) {
+            return false;
+        }
+        return true;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see java.lang.Comparable#compareTo(java.lang.Object)
+     */
+    @Override
+    public int compareTo(JournalActionUtilisateur parameter) {
+        if (parameter == null) {
+            return -1;
+        }
+        if (parameter.id == null) {
+            return -1;
+        }
+        if (id == null) {
+            return 1;
+        }
+        return id.compareTo(parameter.id);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/JournalConnexionUtilisateur.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/JournalConnexionUtilisateur.java
new file mode 100644
index 0000000..20cf9c4
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/JournalConnexionUtilisateur.java
@@ -0,0 +1,111 @@
+package com.megatim.fdxconsultation.model.administration;
+
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Objects;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author DYNABOOK
+ */
+@Getter
+@Setter
+@Entity(name = "JournalConnexionUtilisateur")
+@Table(name = "useractionlog")
+public class JournalConnexionUtilisateur implements Comparable<JournalConnexionUtilisateur>, Serializable {
+
+    @Id
+    @SequenceGenerator(name = "SEQ_USER_ACTION_LOGS",
+            sequenceName = "SEQ_USER_ACTION_LOGS",
+            allocationSize = 1,
+            initialValue = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_USER_ACTION_LOGS")
+    private Long id;
+
+    @NotEmpty(message = "La description est obligatoire")
+    @CriteriaEntitySearch(libelle = "Description", rang = 2)
+    private String message;
+
+    //@CriteriaEntitySearch(libelle = "Utilisateur", rang = 5)
+    private String userName;
+
+    //@XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    @NotNull(message = "La date de l'action est obligatoire")
+    @CriteriaEntitySearch(libelle = "Date", rang = 1)
+    private LocalDateTime dateAction;
+
+    @CriteriaEntitySearch(libelle = "Adresse IP", rang = 4)
+    @NotEmpty(message = "L'addresse IP est obligatoire")
+    private String ipAddress;
+
+    @CriteriaEntitySearch(libelle = "Statut requete", visible = false)
+    private Integer status;
+
+    @CriteriaEntitySearch(libelle = "Navigateur", rang = 3)
+    private String userAgent;
+    
+    @CriteriaEntitySearch(libelle = "Path", visible = false)
+    private String relativePath;
+
+    private String httpMethod;
+    
+    @CriteriaEntitySearch(libelle = "Motif erreur", visible = false)
+    private String motif;
+
+    public JournalConnexionUtilisateur() {
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 11 * hash + Objects.hashCode(this.id);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final JournalConnexionUtilisateur other = (JournalConnexionUtilisateur) obj;
+        if (!Objects.equals(this.id, other.id)) {
+            return false;
+        }
+        return true;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see java.lang.Comparable#compareTo(java.lang.Object)
+     */
+    @Override
+    public int compareTo(JournalConnexionUtilisateur parameter) {
+        if (parameter == null) {
+            return -1;
+        }
+        if (parameter.id == null) {
+            return -1;
+        }
+        if (id == null) {
+            return 1;
+        }
+        return id.compareTo(parameter.id);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/Role.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/Role.java
new file mode 100644
index 0000000..a6866ba
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/Role.java
@@ -0,0 +1,176 @@
+package com.megatim.fdxconsultation.model.administration;
+
+import com.megatim.fdxcommons.model.enumeration.EtatOperation;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.OneToMany;
+import javax.persistence.Transient;
+import javax.validation.constraints.NotEmpty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author DYNABOOK
+ */
+@Getter
+@Setter
+@Entity(name = "Role")
+@Table(name = "FDX_ROLE")
+public class Role implements Comparable<Role>, Serializable {
+
+    @SequenceGenerator(name = "SEQ_ROLE",
+            sequenceName = "SEQ_ROLE",
+            allocationSize = 1,
+            initialValue = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_ROLE")
+    @Column(name = "ID")
+    @Id
+    private Long id;
+
+    @Column(name = "ID_GENERER")
+    protected String idGenerer;
+
+    @Column(nullable = false, name = "libelle")
+    @NotEmpty(message = "Le libellé est obligatoire")
+    @CriteriaEntitySearch(libelle = "Libellé", rang = 1)
+    private String libelle;
+
+    @Column(name = "description")
+    @CriteriaEntitySearch(libelle = "Description", rang = 2)
+    private String description;
+
+    @Column(name = "motif_rejet")
+    private String motifRejet;
+
+    @Column(name = "DATE_VAL")
+    @Temporal(value = TemporalType.TIMESTAMP)
+    private Date dateValidation;
+
+    @Column(name = "USER_VAL")
+    private String utilisateurValidation;
+
+    @Column(name = "DATE_RJT_VAL")
+    @Temporal(value = TemporalType.TIMESTAMP)
+    private Date dateRejetValidation;
+
+    @Column(name = "USER_RJT")
+    private String utilisateurRejetValidation;
+
+    @Column(name = "TYPE_OPERATION")
+    private TypeOperation typeOperation = TypeOperation.AJOUTER;
+
+    @Column(name = "ETAT_OPERATION")
+    @CriteriaEntitySearch(libelle = "Etat", visible = false)
+    @Enumerated(EnumType.STRING)
+    private EtatOperation etatOperation;
+
+    @Column(name = "IS_ADMIN")
+    private Boolean admin = false;
+
+    @Column(name = "IS_SUPER_ADMIN")
+    private Boolean superAdmin = false;
+
+    @Column(name = "IS_MEGA_ADMIN")
+    private Boolean megaAdmin = false;
+
+    @OneToMany(mappedBy = "role")
+    private List<User> users = new ArrayList<>();
+
+    @ManyToMany(fetch = FetchType.EAGER)
+    @JoinTable(
+            name = "FS_ROLE_ACTION",
+            joinColumns = @JoinColumn(name = "FS_ROLE_ID"),
+            inverseJoinColumns = @JoinColumn(name = "FS_ACTION_ID"))
+    private List<Action> actions = new ArrayList<>();
+
+    @Column(name = "DATE_CREATION")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date dateCreation;
+
+    @Column(name = "USER_CREATION")
+    private String utilisateurCreation;
+
+    @Column(name = "DATE_DERN_MOD")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date dateDerniereModification;
+
+    @Column(name = "USER_UPDATE")
+    private String utilisateurModification;
+
+    @Column(name = "DATE_SUPPR")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date dateSuppression;
+
+    @Column(name = "USER_DELETE")
+    private String utilisateurSuppression;
+
+    @Transient
+    private int nbreUtilisateur;
+
+    public Role() {
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 11 * hash + Objects.hashCode(this.id);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final Role other = (Role) obj;
+        if (!Objects.equals(this.id, other.id)) {
+            return false;
+        }
+        return true;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see java.lang.Comparable#compareTo(java.lang.Object)
+     */
+    @Override
+    public int compareTo(Role parameter) {
+        if (parameter == null) {
+            return -1;
+        }
+        if (parameter.libelle == null || parameter.libelle.trim().length() == 0) {
+            return -1;
+        }
+        if (libelle == null || libelle.trim().length() == 0) {
+            return 1;
+        }
+        return libelle.compareTo(parameter.libelle);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/User.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/User.java
new file mode 100644
index 0000000..52f0827
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/User.java
@@ -0,0 +1,252 @@
+package com.megatim.fdxconsultation.model.administration;
+
+import com.megatim.fdxcommons.model.enumeration.EtatOperation;
+import com.megatim.fdxcommons.model.enumeration.Sexe;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Transient;
+import javax.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author DYNABOOK
+ */
+@Getter
+@Setter
+@Entity(name = "User")
+@Table(name = "FDX_USER")
+public class User implements Comparable<User>, Serializable {
+
+    public User() {
+    }
+
+    @SequenceGenerator(name = "SEQ_USER",
+            sequenceName = "SEQ_USER",
+            allocationSize = 1,
+            initialValue = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_USER")
+    @Column(name = "ID")
+    @Id
+    private Long id;
+
+    @Column(name = "ID_GENERER")
+    protected String idGenerer;
+
+    @Column(name = "TYPE_OPERATION")
+    private TypeOperation typeOperation = TypeOperation.AJOUTER;
+
+    @Column(name = "username")
+    @CriteriaEntitySearch(libelle = "Nom utilisateur", rang = 1, fieldName = "userName")
+    private String userName;
+
+    @Column(name = "firstname")
+    @CriteriaEntitySearch(libelle = "Nom", rang = 3, fieldName = "firstName")
+    private String firstName;
+
+    @Column(name = "lastname")
+    @CriteriaEntitySearch(libelle = "Prénom", rang = 2, fieldName = "lastName")
+    private String lastName;
+
+    @Column(name = "motif_rejet")
+    private String motifRejet;
+    
+    @Column(name = "DATE_VAL")
+    @Temporal(value = TemporalType.TIMESTAMP)
+    private Date dateValidation;
+    
+    @Column(name = "USER_VAL")
+    private String utilisateurValidation;
+    
+    @Column(name = "DATE_RJT_VAL")
+    @Temporal(value = TemporalType.TIMESTAMP)
+    private Date dateRejetValidation;
+    
+    @Column(name = "USER_RJT")
+    private String utilisateurRejetValidation;
+
+    @Column(name = "expirationdelay")
+    private int expirationDelay;
+
+    @Column(name = "alertdelay")
+    private int alertDelay;
+
+    @Column(name = "attempsnumber")
+    private int attempsNumber;
+
+    @Column(name = "attemps")
+    private int attemps;
+
+    @Column(name = "locked")
+    private boolean locked;
+
+    @Column(name = "active")
+    private boolean active;
+
+    @Column(name = "editpassword")
+    private boolean editPassword;
+
+    @Column(name = "connected")
+    private boolean connected;
+
+    @Transient
+    private boolean updatePassword;
+
+    @Column(name = "lastconnexiondatetime")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date lastConnexionDateTime;
+
+    @Column(name = "pwd")
+    private String pwd;
+
+    @Transient
+    private String pwdConfirm;
+    
+    @Column(name = "lastdateupdatepwd")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date dateDerniereModificationMotDePasse;
+    
+    @Column(name = "DELAI_INACTIVITE")
+    private int delaiInactivite = 0;
+    
+    @Column(name = "SESSION_KEY")
+    private String cleSession;
+    
+    @NotNull(message = "Le sexe est obligatoire")
+    @Column(name = "SEXE")
+    @Enumerated(EnumType.STRING)
+    private Sexe sexe = Sexe.HOMME;
+
+    @Column(name = "ETAT_OPERATION")
+    @Enumerated(EnumType.STRING)
+    @CriteriaEntitySearch(libelle = "Etat", visible = false, fieldName = "etatOperation")
+    private EtatOperation etatOperation;
+
+    @Column(name = "DATE_CREATION")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date dateCreation;
+
+    @Column(name = "USER_CREATION")
+    private String utilisateurCreation;
+
+    @Column(name = "DATE_DERN_MOD")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date dateDerniereModification;
+
+    @Column(name = "USER_UPDATE")
+    private String utilisateurModification;
+
+    @Column(name = "DATE_SUPPR")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date dateSuppression;
+
+    @Column(name = "USER_DELETE")
+    private String utilisateurSuppression;
+
+    @ManyToOne
+    @JoinColumn(name = "ROLE")
+    @CriteriaEntitySearch(libelle = "Groupe utilisateur", fieldName = "role.libelle", rang = 4)
+    private Role role;
+
+    @ManyToMany
+    @JoinTable(name = "user_type_fichier",
+            joinColumns = @JoinColumn(name = "user_id"),
+            inverseJoinColumns = @JoinColumn(name = "type_fichier_id"))
+    private Set<TypeFichier> typeFichiers = new HashSet<>();
+    
+    @ManyToMany
+    @JoinTable(name = "user_participant",
+            joinColumns = @JoinColumn(name = "user_id"),
+            inverseJoinColumns = @JoinColumn(name = "participant_id"))
+    private Set<Participant> participants = new HashSet<Participant>();
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 79 * hash + Objects.hashCode(this.userName);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final User other = (User) obj;
+        return Objects.equals(this.userName, other.userName);
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see java.lang.Comparable#compareTo(java.lang.Object)
+     */
+    @Override
+    public int compareTo(User parameter) {
+        if (parameter == null) {
+            return -1;
+        }
+
+        // Si le code du parametre est vide
+        if (parameter.userName == null || parameter.userName.trim().length() == 0) {
+            return -1;
+        }
+
+        // Si le code du parametre en cours est vide
+        if (userName == null || userName.trim().length() == 0) {
+            return 1;
+        }
+
+        // On retourne la comparaison des codes
+        return userName.compareTo(parameter.userName);
+    }
+
+    @Override
+    public String toString() {
+
+        //Variables
+        String variable = "";
+
+        if (this.lastName != null) {
+            variable = variable + this.lastName;
+        }
+
+        if (this.firstName != null) {
+            variable = variable + " " + this.firstName;
+        }
+
+        if (this.userName != null) {
+            variable = variable + " (" + this.userName + ")";
+        }
+
+        return variable;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/security/ActionSecurity.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/security/ActionSecurity.java
new file mode 100644
index 0000000..348b4a7
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/security/ActionSecurity.java
@@ -0,0 +1,167 @@
+package com.megatim.fdxconsultation.model.administration.security;
+
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxconsultation.model.administration.Action;
+import com.mgt.rs.security.core.ifaces.ActionRsSecurity;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ *
+ * @author DYNABOOK
+ */
+public class ActionSecurity implements Comparable<ActionSecurity>, Serializable, ActionRsSecurity {
+
+    private Long id;
+
+    private String path;
+
+    private String module;
+
+    private String name;
+
+    private String categorie;
+
+    private String description;
+
+    protected String idGenerer;
+
+    private List<RoleSecurity> roles = new ArrayList<>();
+
+    private TypeOperation typeOperation = TypeOperation.AJOUTER;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    public String getModule() {
+        return module;
+    }
+
+    public void setModule(String module) {
+        this.module = module;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCategorie() {
+        return categorie;
+    }
+
+    public void setCategorie(String categorie) {
+        this.categorie = categorie;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getIdGenerer() {
+        return idGenerer;
+    }
+
+    public void setIdGenerer(String idGenerer) {
+        this.idGenerer = idGenerer;
+    }
+
+    public List<RoleSecurity> getRoles() {
+        return roles;
+    }
+
+    public void setRoles(List<RoleSecurity> roles) {
+        this.roles = roles;
+    }
+
+    public TypeOperation getTypeOperation() {
+        return typeOperation;
+    }
+
+    public void setTypeOperation(TypeOperation typeOperation) {
+        this.typeOperation = typeOperation;
+    }
+
+    public ActionSecurity() {
+    }
+
+    public ActionSecurity(Action action) {
+        
+        path = action.getPath();
+        module = action.getModule();
+        name = action.getName();
+        categorie = action.getCategorie();
+        description = action.getDescription();
+        
+    }
+    
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 79 * hash + Objects.hashCode(this.id);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final ActionSecurity other = (ActionSecurity) obj;
+        return Objects.equals(this.id, other.id);
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see java.lang.Comparable#compareTo(java.lang.Object)
+     */
+    @Override
+    public int compareTo(ActionSecurity parameter) {
+
+        // Si le parametre est null
+        if (parameter == null) {
+            return -1;
+        }
+
+        // Si le code du parametre est vide
+        if (parameter.id == null) {
+            return -1;
+        }
+
+        // Si le code du parametre en cours est vide
+        if (id == null) {
+            return 1;
+        }
+
+        // On retourne la comparaison des codes
+        return id.compareTo(parameter.id);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/security/RoleSecurity.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/security/RoleSecurity.java
new file mode 100644
index 0000000..e3777f3
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/security/RoleSecurity.java
@@ -0,0 +1,252 @@
+package com.megatim.fdxconsultation.model.administration.security;
+
+import com.megatim.fdxconsultation.model.administration.Role;
+import com.megatim.fdxcommons.model.enumeration.EtatOperation;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxconsultation.model.administration.Action;
+import com.mgt.rs.security.core.ifaces.ActionRsSecurity;
+import com.mgt.rs.security.core.ifaces.RoleRsSecurity;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ *
+ * @author DYNABOOK
+ */
+public class RoleSecurity implements Comparable<RoleSecurity>, Serializable, RoleRsSecurity {
+
+    private Long id;
+
+    protected String idGenerer;
+
+    private String libelle;
+
+    private String description;
+
+    private TypeOperation typeOperation = TypeOperation.AJOUTER;
+
+    private EtatOperation etatOperation;
+
+    private List<ActionRsSecurity> actions = new ArrayList<ActionRsSecurity>();
+
+    private Date dateCreation;
+
+    private String utilisateurCreation;
+
+    private Date dateDerniereModification;
+
+    private String utilisateurModification;
+
+    private Date dateSuppression;
+
+    private String utilisateurSuppression;
+
+    private Boolean admin = false;
+
+    private Boolean superAdmin = false;
+
+    private Boolean megaAdmin = false;
+
+    public RoleSecurity() {
+    }
+    
+    public RoleSecurity(Role role) {
+        admin = role.getAdmin();
+        superAdmin = role.getSuperAdmin();
+        megaAdmin = role.getMegaAdmin();
+        
+        //On parcourt lrs roles
+        for(Action action : role.getActions()){            
+            actions.add(new ActionSecurity(action));            
+        }
+        
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getLibelle() {
+        return libelle;
+    }
+
+    public void setLibelle(String libelle) {
+        this.libelle = libelle;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public TypeOperation getTypeOperation() {
+        return typeOperation;
+    }
+
+    public void setTypeOperation(TypeOperation typeOperation) {
+        this.typeOperation = typeOperation;
+    }
+
+    public String getIdGenerer() {
+        return idGenerer;
+    }
+
+    public void setIdGenerer(String idGenerer) {
+        this.idGenerer = idGenerer;
+    }
+
+    public void setActions(List<ActionRsSecurity> actions) {
+        this.actions = actions;
+    }
+
+    public Date getDateCreation() {
+        return dateCreation;
+    }
+
+    public void setDateCreation(Date dateCreation) {
+        this.dateCreation = dateCreation;
+    }
+
+    public String getUtilisateurCreation() {
+        return utilisateurCreation;
+    }
+
+    public void setUtilisateurCreation(String utilisateurCreation) {
+        this.utilisateurCreation = utilisateurCreation;
+    }
+
+    public Date getDateDerniereModification() {
+        return dateDerniereModification;
+    }
+
+    public void setDateDerniereModification(Date dateDerniereModification) {
+        this.dateDerniereModification = dateDerniereModification;
+    }
+
+    public String getUtilisateurModification() {
+        return utilisateurModification;
+    }
+
+    public void setUtilisateurModification(String utilisateurModification) {
+        this.utilisateurModification = utilisateurModification;
+    }
+
+    public Date getDateSuppression() {
+        return dateSuppression;
+    }
+
+    public void setDateSuppression(Date dateSuppression) {
+        this.dateSuppression = dateSuppression;
+    }
+
+    public String getUtilisateurSuppression() {
+        return utilisateurSuppression;
+    }
+
+    public void setUtilisateurSuppression(String utilisateurSuppression) {
+        this.utilisateurSuppression = utilisateurSuppression;
+    }
+
+    public EtatOperation getEtatOperation() {
+        return etatOperation;
+    }
+
+    public void setEtatOperation(EtatOperation etatOperation) {
+        this.etatOperation = etatOperation;
+    }
+
+    /*public List<User> getUsers() {
+        return users;
+    }
+
+    public void setUsers(List<User> users) {
+        this.users = users;
+    }*/
+    public boolean isAdmin() {
+        return admin;
+    }
+
+    public void setAdmin(boolean admin) {
+        this.admin = admin;
+    }
+
+    public boolean isSuperAdmin() {
+        return superAdmin;
+    }
+
+    public void setSuperAdmin(boolean superAdmin) {
+        this.superAdmin = superAdmin;
+    }
+
+    public boolean isMegaAdmin() {
+        return megaAdmin;
+    }
+
+    public void setMegaAdmin(boolean meegaAdmin) {
+        this.megaAdmin = meegaAdmin;
+    }
+
+    @Override
+    public List<ActionRsSecurity> getActions() {
+        return actions;
+    }
+    
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 79 * hash + Objects.hashCode(this.id);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final RoleSecurity other = (RoleSecurity) obj;
+        return Objects.equals(this.id, other.id);
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see java.lang.Comparable#compareTo(java.lang.Object)
+     */
+    @Override
+    public int compareTo(RoleSecurity parameter) {
+
+        // Si le parametre est null
+        if (parameter == null) {
+            return -1;
+        }
+
+        // Si le code du parametre est vide
+        if (parameter.libelle == null || parameter.libelle.trim().length() == 0) {
+            return -1;
+        }
+
+        // Si le code du parametre en cours est vide
+        if (libelle == null || libelle.trim().length() == 0) {
+            return 1;
+        }
+
+        // On retourne la comparaison des codes
+        return libelle.compareTo(parameter.libelle);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/security/UserSecurity.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/security/UserSecurity.java
new file mode 100644
index 0000000..6e5d39c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/administration/security/UserSecurity.java
@@ -0,0 +1,37 @@
+package com.megatim.fdxconsultation.model.administration.security;
+
+import com.megatim.fdxconsultation.model.administration.User;
+import com.mgt.rs.security.core.ifaces.RoleRsSecurity;
+import com.mgt.rs.security.core.ifaces.UserRsSecurity;
+
+/**
+ *
+ * @author ASUS
+ */
+public class UserSecurity implements UserRsSecurity{
+
+    private String userName;
+    private RoleSecurity roleSecurity;
+    
+    public UserSecurity(){}
+    
+    public UserSecurity(User user){
+        this.userName = user.getUserName();
+        roleSecurity = new RoleSecurity(user.getRole());
+    }
+    
+    @Override
+    public String getUserName() {
+        return userName;
+    }
+
+    @Override
+    public RoleRsSecurity getRole() {
+        return roleSecurity;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+    
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/api/token/ApiToken.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/api/token/ApiToken.java
new file mode 100644
index 0000000..b90727e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/api/token/ApiToken.java
@@ -0,0 +1,85 @@
+package com.megatim.fdxconsultation.model.api.token;
+
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import com.megatim.fdxconsultation.model.base.BaseEntity;
+import java.io.Serializable;
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.SequenceGenerator;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+import java.util.Date;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+/**
+ *
+ * @author ASUS
+ */
+@Data
+@Entity
+public class ApiToken implements Serializable {
+
+    @SequenceGenerator(name = "SEQ_API_TOKEN",
+            sequenceName = "SEQ_API_TOKEN",
+            allocationSize = 1,
+            initialValue = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_API_TOKEN")
+    @Column(name = "ID")
+    @Id
+    private Long id;
+
+    @NotNull(message = "Le participant est obligatoire")
+    @ManyToOne
+    @CriteriaEntitySearch(libelle = "Participant", fieldName = "participant.code", rang = 2)
+    private Participant participant;
+
+    @Lob
+    @Basic(fetch = FetchType.EAGER)
+    private String token;
+
+    @Enumerated(EnumType.STRING)
+    @CriteriaEntitySearch(libelle = "Statut du token", rang = 3, visible = false)
+    private ApiTokenStatut apiTokenStatut = ApiTokenStatut.UNLOCKED;
+    
+    @CriteriaEntitySearch(libelle = "type Operation", visible = false)
+    @Column(name = "TYPE_OPERATION")
+    protected TypeOperation typeOperation = TypeOperation.AJOUTER;
+
+    @CriteriaEntitySearch(libelle = "Date première génération", rang = 1)
+    @Column(name = "DATE_CREATION")
+    @Temporal(TemporalType.TIMESTAMP)
+    protected Date dateCreation;
+
+    @CriteriaEntitySearch(libelle = "Généré par", rang = 4)
+    @Column(name = "USER_CREATION")
+    protected String utilisateurCreation;
+
+    @CriteriaEntitySearch(libelle = "Date dernière regen.", rang = 5, visible = false)
+    @Column(name = "DATE_DERN_MOD")
+    @Temporal(TemporalType.TIMESTAMP)
+    protected Date dateDerniereModification;
+
+    @CriteriaEntitySearch(libelle = "Regénéré par", rang = 6, visible = false)
+    @Column(name = "USER_UPDATE")
+    protected String utilisateurModification;
+    
+    @Column(name = "DATE_SUPPR")
+    @Temporal(TemporalType.TIMESTAMP)
+    protected Date dateSuppression;
+
+    @Column(name = "USER_DELETE")
+    protected String utilisateurSuppression;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/api/token/ApiTokenStatut.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/api/token/ApiTokenStatut.java
new file mode 100644
index 0000000..b4ea57e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/api/token/ApiTokenStatut.java
@@ -0,0 +1,37 @@
+package com.megatim.fdxconsultation.model.api.token;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.megatim.fdxcommons.model.search.EnumValue;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public enum ApiTokenStatut {
+
+    UNLOCKED("ACTIF"),
+    LOCKED("INACTIF");
+
+    private final String value;
+
+    private ApiTokenStatut(String value) {
+        this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+        return value;
+    }
+
+    @EnumValue
+    public static ApiTokenStatut fromValeur(String value) {
+        switch (value) {
+            case "INACTIF":
+                return ApiTokenStatut.LOCKED;
+            case "ACTIF":
+                return ApiTokenStatut.UNLOCKED;
+            default:
+                return null;
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/authentification/LoginRequest.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/authentification/LoginRequest.java
new file mode 100644
index 0000000..62274f3
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/authentification/LoginRequest.java
@@ -0,0 +1,15 @@
+package com.megatim.fdxconsultation.model.authentification;
+
+import lombok.Data;
+
+/**
+ *
+ * @author lenovo
+ */
+@Data
+public class LoginRequest {
+
+    private String userName;
+    private String pwd;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/base/BaseEntity.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/base/BaseEntity.java
new file mode 100644
index 0000000..1a7ec0d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/base/BaseEntity.java
@@ -0,0 +1,54 @@
+package com.megatim.fdxconsultation.model.base;
+
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@MappedSuperclass
+@Getter
+@Setter
+@EqualsAndHashCode
+public class BaseEntity {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @Column(name = "TYPE_OPERATION")
+    protected TypeOperation typeOperation = TypeOperation.AJOUTER;
+
+    @Column(name = "DATE_CREATION")
+    @Temporal(TemporalType.TIMESTAMP)
+    protected Date dateCreation;
+
+    @Column(name = "USER_CREATION")
+    protected String utilisateurCreation;
+
+    @Column(name = "DATE_DERN_MOD")
+    @Temporal(TemporalType.TIMESTAMP)
+    protected Date dateDerniereModification;
+
+    @Column(name = "USER_UPDATE")
+    protected String utilisateurModification;
+
+    @Column(name = "DATE_SUPPR")
+    @Temporal(TemporalType.TIMESTAMP)
+    protected Date dateSuppression;
+
+    @Column(name = "USER_DELETE")
+    protected String utilisateurSuppression;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/configuration/CodeStatutHttp.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/configuration/CodeStatutHttp.java
new file mode 100644
index 0000000..504a428
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/configuration/CodeStatutHttp.java
@@ -0,0 +1,124 @@
+package com.megatim.fdxconsultation.model.configuration;
+
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Objects;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Transient;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author DYNABOOK
+ */
+@Getter
+@Setter
+@Entity(name = "CodeStatutHttp")
+@Table(name = "FDX_CODE_STATUT_HTTP")
+public class CodeStatutHttp implements Comparable<CodeStatutHttp>, Serializable {
+
+    @SequenceGenerator(name = "SEQ_FDX_CODE_STATUT_HTTP",
+            sequenceName = "SEQ_FDX_CODE_STATUT_HTTP",
+            allocationSize = 1,
+            initialValue = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_FDX_CODE_STATUT_HTTP")
+    @Column(name = "ID")
+    @Id
+    private Long id;
+
+    @Column(name = "ID_GENERER")
+    protected String idGenerer;
+
+    @Column(name = "CODE")
+    private String code;
+    
+    @Column(nullable = false, name = "LIBELLE")
+    private String libelle;
+
+    @Column(name = "TYPE_OPERATION")
+    private TypeOperation typeOperation = TypeOperation.AJOUTER;
+
+    @Column(name = "DATE_CREATION")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date dateCreation;
+
+    @Column(name = "USER_CREATION")
+    private String utilisateurCreation;
+
+    @Column(name = "DATE_DERN_MOD")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date dateDerniereModification;
+
+    @Column(name = "USER_UPDATE")
+    private String utilisateurModification;
+
+    @Column(name = "DATE_SUPPR")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date dateSuppression;
+
+    @Column(name = "USER_DELETE")
+    private String utilisateurSuppression;
+    
+    @Transient
+    private int nbreUtilisateur;
+
+    public CodeStatutHttp() {}
+
+    public CodeStatutHttp(String code, String libelle) {
+        this.code = code;
+        this.libelle = libelle;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 11 * hash + Objects.hashCode(this.id);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final CodeStatutHttp other = (CodeStatutHttp) obj;
+        if (!Objects.equals(this.id, other.id)) {
+            return false;
+        }
+        return true;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see java.lang.Comparable#compareTo(java.lang.Object)
+     */
+    @Override
+    public int compareTo(CodeStatutHttp parameter) {
+        if (parameter == null) {
+            return -1;
+        }
+        if (parameter.code == null || parameter.code.trim().length() == 0) {
+            return -1;
+        }
+        if (code == null || code.trim().length() == 0) {
+            return 1;
+        }
+        return code.compareTo(parameter.code);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dataproduction/DataProduction.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dataproduction/DataProduction.java
new file mode 100644
index 0000000..dfe5759
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dataproduction/DataProduction.java
@@ -0,0 +1,26 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.dataproduction;
+
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Entity
+@Getter
+@Setter
+@NoArgsConstructor
+public class DataProduction extends CommonDataProduction {
+
+    @Id
+    private Long id;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/documents/Category.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/documents/Category.java
new file mode 100644
index 0000000..4ad90a9
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/documents/Category.java
@@ -0,0 +1,27 @@
+package com.megatim.fdxconsultation.model.documents;
+
+import com.megatim.fdxconsultation.model.base.BaseEntity;
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Setter
+@Getter
+@Entity
+public class Category extends BaseEntity implements Serializable {
+
+    private String name;
+    private int position;
+
+    @OneToMany(mappedBy = "category")
+    private Set<Document> documents = new HashSet<>();
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/documents/Document.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/documents/Document.java
new file mode 100644
index 0000000..25544d7
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/documents/Document.java
@@ -0,0 +1,33 @@
+package com.megatim.fdxconsultation.model.documents;
+
+import com.megatim.fdxconsultation.model.base.BaseEntity;
+import com.megatim.file.model.entites.ItemFile;
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Setter
+@Getter
+@Entity
+@Table(name = "FDX_DOCUMENT")
+public class Document extends BaseEntity implements Serializable {
+
+    private String label;
+    private String version;
+    private int position;
+
+    @ManyToOne
+    private Category category;
+
+    @OneToOne
+    private ItemFile itemFile;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/ActionDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/ActionDto.java
new file mode 100644
index 0000000..195dae8
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/ActionDto.java
@@ -0,0 +1,109 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.model.dto;
+
+
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+
+/**
+ *
+ * @author bissey
+ */
+public class ActionDto {
+
+    private Long id;
+
+    private String path;
+
+    private String module;
+
+    private String name;
+
+    private String categorie;
+
+    private String description;
+
+    private Boolean autorise;
+
+    protected String idGenerer;
+
+    private TypeOperation typeOperation;
+
+    public ActionDto() {
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getIdGenerer() {
+        return idGenerer;
+    }
+
+    public void setIdGenerer(String idGenerer) {
+        this.idGenerer = idGenerer;
+    }
+
+    public TypeOperation getTypeOperation() {
+        return typeOperation;
+    }
+
+    public void setTypeOperation(TypeOperation typeOperation) {
+        this.typeOperation = typeOperation;
+    }
+
+    public Boolean getAutorise() {
+        return autorise;
+    }
+
+    public void setAutorise(Boolean autorise) {
+        this.autorise = autorise;
+    }
+
+    public String getModule() {
+        return module;
+    }
+
+    public void setModule(String module) {
+        this.module = module;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getCategorie() {
+        return categorie;
+    }
+
+    public void setCategorie(String categorie) {
+        this.categorie = categorie;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/ActionSlimDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/ActionSlimDto.java
new file mode 100644
index 0000000..3ba5f8c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/ActionSlimDto.java
@@ -0,0 +1,110 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.model.dto;
+
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+
+/**
+ *
+ * @author bissey
+ */
+public class ActionSlimDto {
+
+     private Long id;
+
+    private String path;
+
+    private String module;
+
+    private String name;
+
+    private String categorie;
+
+    private String description;
+
+    private Boolean autorise;
+
+    protected String idGenerer;
+
+    private TypeOperation typeOperation;
+
+    public ActionSlimDto() {
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    public String getModule() {
+        return module;
+    }
+
+    public void setModule(String module) {
+        this.module = module;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCategorie() {
+        return categorie;
+    }
+
+    public void setCategorie(String categorie) {
+        this.categorie = categorie;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public Boolean getAutorise() {
+        return autorise;
+    }
+
+    public void setAutorise(Boolean autorise) {
+        this.autorise = autorise;
+    }
+
+    public String getIdGenerer() {
+        return idGenerer;
+    }
+
+    public void setIdGenerer(String idGenerer) {
+        this.idGenerer = idGenerer;
+    }
+
+    public TypeOperation getTypeOperation() {
+        return typeOperation;
+    }
+
+    public void setTypeOperation(TypeOperation typeOperation) {
+        this.typeOperation = typeOperation;
+    }
+
+    
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/AdministrationNumberDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/AdministrationNumberDto.java
new file mode 100644
index 0000000..9eec29e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/AdministrationNumberDto.java
@@ -0,0 +1,23 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.model.dto;
+
+import java.io.Serializable;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author lenovo
+ */
+@Setter
+@Getter
+public class AdministrationNumberDto implements Serializable {
+
+    private long utilisateursEnAttenteValidation;
+    private long rolesEnAttenteValidation;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/ApiTokenDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/ApiTokenDto.java
new file mode 100644
index 0000000..0f7e412
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/ApiTokenDto.java
@@ -0,0 +1,35 @@
+package com.megatim.fdxconsultation.model.dto;
+
+import com.megatim.fdxcommons.model.dtos.referentiel.ParticipantSlimDto;
+import com.megatim.fdxconsultation.model.api.token.ApiTokenStatut;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Setter
+@Getter
+public class ApiTokenDto {
+
+    private Long id;
+
+    private ParticipantSlimDto participant;
+
+    private String token;
+
+    private int validite;
+
+    private ApiTokenStatut apiTokenStatut = ApiTokenStatut.UNLOCKED;
+    
+    protected Date dateCreation;
+
+    protected String utilisateurCreation;
+
+    protected Date dateDerniereModification;
+
+    protected String utilisateurModification;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/BaseEntityDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/BaseEntityDto.java
new file mode 100644
index 0000000..113f09f
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/BaseEntityDto.java
@@ -0,0 +1,29 @@
+package com.megatim.fdxconsultation.model.dto;
+
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Getter
+@Setter
+public class BaseEntityDto {
+
+    private Long id;
+
+    protected Date dateCreation;
+
+    protected String utilisateurCreation;
+
+    protected Date dateDerniereModification;
+
+    protected String utilisateurModification;
+
+    protected Date dateSuppression;
+
+    protected String utilisateurSuppression;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/CategoryDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/CategoryDto.java
new file mode 100644
index 0000000..25f617c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/CategoryDto.java
@@ -0,0 +1,21 @@
+package com.megatim.fdxconsultation.model.dto;
+
+import java.util.HashSet;
+import java.util.Set;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Getter
+@Setter
+public class CategoryDto extends BaseEntityDto {
+
+    private String name;
+    private int position;
+
+    private Set<DocumentDto> documents = new HashSet<>();
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/CategorySlimDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/CategorySlimDto.java
new file mode 100644
index 0000000..b77ce57
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/CategorySlimDto.java
@@ -0,0 +1,17 @@
+package com.megatim.fdxconsultation.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Getter
+@Setter
+public class CategorySlimDto extends BaseEntityDto {
+
+    private String name;
+    private int position;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/CodeStatutHttpDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/CodeStatutHttpDto.java
new file mode 100644
index 0000000..17baaf1
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/CodeStatutHttpDto.java
@@ -0,0 +1,43 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.model.dto;
+
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author bissey
+ */
+@Getter
+@Setter
+public class CodeStatutHttpDto {
+
+    private Long id;
+
+    protected String idGenerer;
+
+    private String code;
+    
+    private String libelle;
+
+    private TypeOperation typeOperation;
+
+    private Date dateCreation;
+
+    private String utilisateurCreation;
+
+    private Date dateDerniereModification;
+
+    private String utilisateurModification;
+
+    private Date dateSuppression;
+
+    private String utilisateurSuppression;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/DocumentDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/DocumentDto.java
new file mode 100644
index 0000000..3da5ac6
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/DocumentDto.java
@@ -0,0 +1,24 @@
+package com.megatim.fdxconsultation.model.dto;
+
+import com.megatim.file.model.dtos.ItemFileDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Getter
+@Setter
+public class DocumentDto extends BaseEntityDto {
+
+    private String label;
+
+    private String version;
+
+    private int position;
+
+    private CategorySlimDto category;
+
+    private ItemFileDto itemFile;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/EditPasswordDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/EditPasswordDto.java
new file mode 100644
index 0000000..507f1bb
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/EditPasswordDto.java
@@ -0,0 +1,20 @@
+package com.megatim.fdxconsultation.model.dto;
+
+import javax.validation.constraints.NotBlank;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class EditPasswordDto {
+
+    @NotBlank(message = "Le mot de passe actuel est obligatoire")
+    private String actualPassword;
+
+    @NotBlank(message = "Le nouveau mot de passe est obligatoire")
+    private String newPassword;
+
+    @NotBlank(message = "La confirmation du nouveau mot de passe est obligatoire")
+    private String newPasswordConfirm;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/FavoriteSearchDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/FavoriteSearchDto.java
new file mode 100644
index 0000000..92727bf
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/FavoriteSearchDto.java
@@ -0,0 +1,23 @@
+package com.megatim.fdxconsultation.model.dto;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Getter
+@Setter
+public class FavoriteSearchDto extends BaseEntityDto {
+
+    private String libelle;
+
+    private String codeTypeFichier;
+
+    private String referentielVersion;
+
+    private CriteriaEntityFromView criteria;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/InformationGeneraleDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/InformationGeneraleDto.java
new file mode 100644
index 0000000..ad608fa
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/InformationGeneraleDto.java
@@ -0,0 +1,24 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.model.dto;
+
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+
+/**
+ * Classe representant un DTO de InformationGeneraleDto
+ */
+@Getter
+@Setter
+public class InformationGeneraleDto {
+
+    private Date dateServeur = new Date();
+    private String sessionKeyUser;
+    private boolean etatServeur;
+    private String messageEtatServeur;
+}
\ No newline at end of file
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/JournalActionUtilisateurDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/JournalActionUtilisateurDto.java
new file mode 100644
index 0000000..227826e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/JournalActionUtilisateurDto.java
@@ -0,0 +1,34 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.model.dto;
+
+import com.megatim.fdxcommons.model.enumeration.Gravite;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import java.time.LocalDateTime;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author bissey
+ */
+@Getter
+@Setter
+public class JournalActionUtilisateurDto {
+
+    private Long id;
+    private String message;
+    private String userName;
+    private LocalDateTime dateAction;
+    private String ipAddress;
+    private Integer status;
+    private String userAgent;
+    private String relativePath;
+    private String httpMethod;
+    private String motif;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/JournalConnexionUtilisateurDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/JournalConnexionUtilisateurDto.java
new file mode 100644
index 0000000..4426ec8
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/JournalConnexionUtilisateurDto.java
@@ -0,0 +1,34 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.model.dto;
+
+import com.megatim.fdxcommons.model.enumeration.Gravite;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import java.time.LocalDateTime;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author bissey
+ */
+@Getter
+@Setter
+public class JournalConnexionUtilisateurDto {
+
+    private Long id;
+    private String message;
+    private String userName;
+    private LocalDateTime dateAction;
+    private String ipAddress;
+    private Integer status;
+    private String userAgent;
+    private String relativePath;
+    private String httpMethod;
+    private String motif;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/MessageSystemeDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/MessageSystemeDto.java
new file mode 100644
index 0000000..eb8553f
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/MessageSystemeDto.java
@@ -0,0 +1,26 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.model.dto;
+
+import com.megatim.fdxcommons.model.enumeration.*;
+import lombok.Getter;
+import lombok.Setter;
+
+
+/**
+ * Classe representant un DTO de MessageSysteme
+ */
+@Getter
+@Setter
+public class MessageSystemeDto {
+
+    private Long id;
+    private TypeIdMessageSysteme typeIdMessageSysteme;
+    private TypeMessageSysteme typeMessageSysteme;
+    private TypeActionSysteme TypeActionSysteme;
+    private String contenu;
+    
+}
\ No newline at end of file
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/ParticipantToFichierDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/ParticipantToFichierDto.java
new file mode 100644
index 0000000..2a69c0c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/ParticipantToFichierDto.java
@@ -0,0 +1,23 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author lenovo
+ */
+@Getter
+@Setter
+@AllArgsConstructor
+public class ParticipantToFichierDto {
+    
+    private String codeParticipant;
+    private String codeFichier;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/RoleDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/RoleDto.java
new file mode 100644
index 0000000..275b87a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/RoleDto.java
@@ -0,0 +1,60 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.model.dto;
+
+
+
+import com.megatim.fdxcommons.model.enumeration.EtatOperation;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import java.util.Date;
+import java.util.List;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author bissey
+ */
+@Getter
+@Setter
+public class RoleDto {
+
+    private Long id;
+
+    protected String idGenerer;
+
+    private String libelle;
+
+    private String description;
+
+    private boolean admin;
+
+    private boolean superAdmin;
+
+    private boolean megaAdmin;
+    
+    private TypeOperation typeOperation;
+
+    private EtatOperation etatOperation;
+
+    private int nbreUtilisateur;
+
+    private List<ActionDto> actions;
+
+    private Date dateCreation;
+
+    private String utilisateurCreation;
+
+    private Date dateDerniereModification;
+
+    private String utilisateurModification;
+
+    private Date dateSuppression;
+
+    private String utilisateurSuppression;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/RoleSlimDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/RoleSlimDto.java
new file mode 100644
index 0000000..b162f0f
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/RoleSlimDto.java
@@ -0,0 +1,33 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author bissey
+ */
+@Getter
+@Setter
+public class RoleSlimDto {
+
+    private Long id;
+
+    private String libelle;
+
+    private String description;
+
+    private boolean admin;
+
+    private boolean superAdmin;
+
+    private int nbreUtilisateur;
+    
+    private boolean megaAdmin;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/UserDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/UserDto.java
new file mode 100644
index 0000000..6b930e9
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/UserDto.java
@@ -0,0 +1,49 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.model.dto;
+
+
+import com.megatim.fdxcommons.model.dtos.referentiel.ParticipantSlimDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.TypeFichierSlimDto;
+import com.megatim.fdxcommons.model.enumeration.EtatOperation;
+import com.megatim.fdxcommons.model.enumeration.Sexe;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import java.util.Date;
+import java.util.Set;
+import lombok.Getter;
+import lombok.Setter;
+/**
+ *
+ * @author bissey
+ */
+@Getter
+@Setter
+public class UserDto {
+
+    private Long id;
+    private String userName;
+    private String firstName;
+    private String lastName;
+    private int expirationDelay;
+    private int alertDelay;
+    private int attempsNumber;
+    private int attemps;
+    private boolean locked;
+    private boolean active;
+    private boolean connected;
+    private EtatOperation etatOperation;
+    private int delaiInactivite;
+    private String cleSession;
+    private Sexe sexe;
+    private RoleDto role;    
+    private Set<TypeFichierSlimDto> typeFichiers;
+    private Set<ParticipantSlimDto> participants;
+    private Date dateCreation;
+    private String utilisateurCreation;
+    private Date dateDerniereModification;
+    private String utilisateurModification;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/UserSlimDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/UserSlimDto.java
new file mode 100644
index 0000000..6a0c376
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/UserSlimDto.java
@@ -0,0 +1,42 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.model.dto;
+
+import com.megatim.fdxcommons.model.enumeration.EtatOperation;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+
+/**
+ *
+ * @author bissey
+ */
+@Getter
+@Setter
+public class UserSlimDto {
+    
+    private Long id;
+    private String userName;
+    private String firstName;
+    private String lastName;
+    private int expirationDelay;
+    private int alertDelay;
+    private int attempsNumber;
+    private int attemps;
+    private boolean locked;
+    private boolean active;
+    private boolean connected;
+    private int delaiInactivite;
+    private EtatOperation etatOperation;
+    private RoleSlimDto role;
+    private Date dateCreation;
+    private String utilisateurCreation;
+    private Date dateDerniereModification;
+    private String utilisateurModification;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/log/UserActionLogDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/log/UserActionLogDto.java
new file mode 100644
index 0000000..3a337ab
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/log/UserActionLogDto.java
@@ -0,0 +1,34 @@
+package com.megatim.fdxconsultation.model.dto.log;
+
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class UserActionLogDto {
+
+    private Long id;
+
+    @PrintColumn(libelle = "Message", rang = 3)
+    private String message;
+
+    @PrintColumn(libelle = "Nom de l'utilisateur", rang = 1)
+    private String userName;
+
+    @PrintColumn(libelle = "Date de l'action", rang = 2)
+    private LocalDateTime dateAction;
+
+    @PrintColumn(libelle = "Adresse IP source", rang = 4)
+    private String ipAddress;
+
+    @PrintColumn(libelle = "Statut de l'action", rang = 5)
+    private int status;
+    
+    private String httpMethod;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/log/UserActionStatData.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/log/UserActionStatData.java
new file mode 100644
index 0000000..26b324c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/log/UserActionStatData.java
@@ -0,0 +1,22 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.dto.log;
+
+import java.util.ArrayList;
+import java.util.List;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Getter
+@Setter
+public class UserActionStatData {
+
+    private String libelle;
+    private List<UserActionStatDto> data = new ArrayList<>();
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/log/UserActionStatDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/log/UserActionStatDto.java
new file mode 100644
index 0000000..996dbf4
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/log/UserActionStatDto.java
@@ -0,0 +1,21 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.dto.log;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class UserActionStatDto {
+
+    private String libelle;
+
+    private Long value;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/FonctionAggregationCriterionDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/FonctionAggregationCriterionDto.java
new file mode 100644
index 0000000..4a00645
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/FonctionAggregationCriterionDto.java
@@ -0,0 +1,17 @@
+package com.megatim.fdxconsultation.model.dto.stats;
+
+import com.megatim.fdxconsultation.model.enums.FonctionAggregationOperateur;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class FonctionAggregationCriterionDto {
+
+    private FonctionAggregationOperateur operateur;
+    private Object criteriaValue;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/GroupingColumnDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/GroupingColumnDto.java
new file mode 100644
index 0000000..3a3ffe3
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/GroupingColumnDto.java
@@ -0,0 +1,20 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.dto.stats;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class GroupingColumnDto {
+
+    private String label;
+    private Object value;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/StatListResult.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/StatListResult.java
new file mode 100644
index 0000000..285172d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/StatListResult.java
@@ -0,0 +1,26 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.dto.stats;
+
+import com.megatim.fdxconsultation.model.enums.TypeResultatConfiguration;
+import java.util.ArrayList;
+import java.util.List;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class StatListResult {
+
+    private String libelle;
+    
+    private TypeResultatConfiguration typeResultatConfiguration;
+    
+    private List<StatScalarResult> values = new ArrayList<>();
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/StatResultDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/StatResultDto.java
new file mode 100644
index 0000000..22d4bb6
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/StatResultDto.java
@@ -0,0 +1,25 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.dto.stats;
+
+import java.util.ArrayList;
+import java.util.List;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class StatResultDto {
+
+    private String description;
+
+    private List<StatScalarResult> scalarResults = new ArrayList<>();
+
+    private List<StatListResult> listResults = new ArrayList<>();
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/StatScalarResult.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/StatScalarResult.java
new file mode 100644
index 0000000..fc84527
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/StatScalarResult.java
@@ -0,0 +1,19 @@
+package com.megatim.fdxconsultation.model.dto.stats;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class StatScalarResult {
+
+    private String libelle;
+    
+    private String color;
+    
+    private Object value;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableConfigurationDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableConfigurationDto.java
new file mode 100644
index 0000000..3306c70
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableConfigurationDto.java
@@ -0,0 +1,44 @@
+package com.megatim.fdxconsultation.model.dto.stats;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+import com.megatim.fdxcommons.model.enumeration.FonctionAggregation;
+import com.megatim.fdxconsultation.model.enums.TypeResultatConfiguration;
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.validation.constraints.NotEmpty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+@NoArgsConstructor
+public class TableConfigurationDto {
+
+    @NotEmpty(message = "Le libellé est obligatoire")
+    private String libelle;
+
+    @NotEmpty(message = "La fonction d'aggrégation est obligatoire")
+    private FonctionAggregation fonctionAggregation;
+
+    @Enumerated(EnumType.STRING)
+    @CriteriaEntitySearch(libelle = "Type de Résultat")
+    private TypeResultatConfiguration typeResultatConfiguration;
+
+    private TableauBordColumnDto targetedColumn;
+
+    private Set<TableauBordColumnDto> groupingColumns = new HashSet<>();
+
+    private CriteriaEntityFromView criterion;
+
+    private String color;
+
+    private FonctionAggregationCriterionDto fonctionAggregationCriterion;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableConfigurationSlimDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableConfigurationSlimDto.java
new file mode 100644
index 0000000..ad1a20f
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableConfigurationSlimDto.java
@@ -0,0 +1,22 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.dto.stats;
+
+import com.megatim.fdxcommons.model.enumeration.FonctionAggregation;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter @Setter
+public class TableConfigurationSlimDto {
+
+    private String libelle;
+
+    private FonctionAggregation fonctionAggregation;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableauBordColumnDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableauBordColumnDto.java
new file mode 100644
index 0000000..df63bda
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableauBordColumnDto.java
@@ -0,0 +1,22 @@
+package com.megatim.fdxconsultation.model.dto.stats;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter @Setter
+public class TableauBordColumnDto {
+    
+    @NotEmpty(message = "Le nom de la colonne est obligatoire")
+    private String name;
+
+    @NotNull(message = "Le type de données de la colonne est obligatoire")
+    private TypeDonnee typeDonnee;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableauBordDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableauBordDto.java
new file mode 100644
index 0000000..f3d8ded
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableauBordDto.java
@@ -0,0 +1,36 @@
+package com.megatim.fdxconsultation.model.dto.stats;
+
+import com.megatim.fdxcommons.model.dtos.referentiel.ReferentielSlimDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.TypeFichierSlimDto;
+import com.megatim.fdxconsultation.model.enums.TypeConfigurationTableauBord;
+import java.util.HashSet;
+import java.util.Set;
+import javax.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+@NoArgsConstructor
+public class TableauBordDto {
+
+    private Long id;
+
+    @NotNull(message = "La description est obligatoire")
+    private String description;
+
+    @NotNull(message = "La description est obligatoire")
+    private TypeFichierSlimDto typeFichier;
+
+    private ReferentielSlimDto referentiel;
+
+    private TypeConfigurationTableauBord typeConfiguration;
+
+    private Set<TableConfigurationDto> tableConfigurations = new HashSet<>();
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableauBordQueryPojo.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableauBordQueryPojo.java
new file mode 100644
index 0000000..c6ebc62
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableauBordQueryPojo.java
@@ -0,0 +1,32 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.dto.stats;
+
+import com.megatim.fdxcommons.model.pojo.QueryParameter;
+import com.megatim.fdxconsultation.model.enums.StatResultType;
+import java.util.ArrayList;
+import java.util.List;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class TableauBordQueryPojo {
+
+    private String libelle;
+
+    private String color;
+
+    private String query;
+
+    private List<QueryParameter> queryParameters = new ArrayList<>();
+
+    private StatResultType statResultType;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableauBordSlimDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableauBordSlimDto.java
new file mode 100644
index 0000000..c065aab
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dto/stats/TableauBordSlimDto.java
@@ -0,0 +1,27 @@
+package com.megatim.fdxconsultation.model.dto.stats;
+
+import com.megatim.fdxcommons.model.dtos.referentiel.ReferentielSlimDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.TypeFichierSlimDto;
+import com.megatim.fdxconsultation.model.enums.TypeConfigurationTableauBord;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class TableauBordSlimDto {
+
+    private Long id;
+
+    private String description;
+
+    private TypeFichierSlimDto typeFichier;
+    
+    private ReferentielSlimDto referentiel;
+
+    private TypeConfigurationTableauBord typeConfiguration;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dtos/reporting/CustomFieldDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dtos/reporting/CustomFieldDto.java
new file mode 100644
index 0000000..5ccc530
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dtos/reporting/CustomFieldDto.java
@@ -0,0 +1,19 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.dtos.reporting;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class CustomFieldDto {
+
+    private String libelle;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dtos/reporting/CustomTypeFichierReportConfiguration.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dtos/reporting/CustomTypeFichierReportConfiguration.java
new file mode 100644
index 0000000..25b4ee9
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dtos/reporting/CustomTypeFichierReportConfiguration.java
@@ -0,0 +1,30 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.dtos.reporting;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.reporting.adhoc.dto.Column;
+import com.megatim.reporting.adhoc.dto.HeaderData;
+import java.util.ArrayList;
+import java.util.List;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class CustomTypeFichierReportConfiguration {
+
+    private CriteriaEntityFromView criterionFromView;
+
+    private String title;
+
+    private final List<Column> columns = new ArrayList<>();
+
+    private final List<HeaderData> headerDatas = new ArrayList<>();
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dtos/reporting/CustomTypeFichierReportConfigurationFromView.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dtos/reporting/CustomTypeFichierReportConfigurationFromView.java
new file mode 100644
index 0000000..d11ab4e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dtos/reporting/CustomTypeFichierReportConfigurationFromView.java
@@ -0,0 +1,31 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.dtos.reporting;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.reporting.adhoc.dto.Column;
+import com.megatim.reporting.adhoc.dto.HeaderData;
+import java.util.ArrayList;
+import java.util.List;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class CustomTypeFichierReportConfigurationFromView {
+
+    private CriteriaEntityFromView criterionFromView ;
+
+    private String title;
+
+    private final List<Column> columns = new ArrayList<>();
+
+    private final List<HeaderData> headerDatas = new ArrayList<>();
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dtos/reporting/ReportingDto.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dtos/reporting/ReportingDto.java
new file mode 100644
index 0000000..db55326
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/dtos/reporting/ReportingDto.java
@@ -0,0 +1,23 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.dtos.reporting;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class ReportingDto<U> {
+
+    private ReportConfiguration<U> reportConfiguration;
+
+    private CriteriaEntityFromView criterion;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/enums/FonctionAggregationOperateur.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/enums/FonctionAggregationOperateur.java
new file mode 100644
index 0000000..0f3cc14
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/enums/FonctionAggregationOperateur.java
@@ -0,0 +1,69 @@
+package com.megatim.fdxconsultation.model.enums;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.megatim.fdxcommons.model.search.EnumValue;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum FonctionAggregationOperateur {
+    EQUALS("="), NOT_EQUALS("<>"),
+    GREATER_THAN(">"), GREATER_OR_EQUALS_THAN(">="),
+    LOWER_THAN("<"), LOWER_OR_EQUALS_THAN("<="),
+    IN("IN"), NOT_IN("NOT IN"),
+    BETWEEN("BETWEEN"), NOT_BETWEEN("NOT BETWEEN");
+
+    private final String value;
+
+    private FonctionAggregationOperateur(String value) {
+        this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+        return value;
+    }
+
+    @EnumValue
+    public static FonctionAggregationOperateur fromValeur(String value) {
+        String cleanValue = value.trim().toUpperCase();
+        cleanValue = cleanValue.replaceAll("\\s+", " ");//remplacer plusieurs chaines vides par une seule chaine vide
+
+        switch (cleanValue) {
+
+            case "=":
+                return FonctionAggregationOperateur.EQUALS;
+
+            case "<>":
+                return FonctionAggregationOperateur.NOT_EQUALS;
+
+            case ">":
+                return FonctionAggregationOperateur.GREATER_THAN;
+
+            case ">=":
+                return FonctionAggregationOperateur.GREATER_OR_EQUALS_THAN;
+
+            case "<":
+                return FonctionAggregationOperateur.LOWER_THAN;
+
+            case "<=":
+                return FonctionAggregationOperateur.LOWER_OR_EQUALS_THAN;
+
+            case "IN":
+                return FonctionAggregationOperateur.IN;
+
+            case "NOT IN":
+                return FonctionAggregationOperateur.NOT_IN;
+
+            case "BETWEEN":
+                return FonctionAggregationOperateur.BETWEEN;
+
+            case "NOT BETWEEN":
+                return FonctionAggregationOperateur.NOT_BETWEEN;
+
+            default:
+                return null;
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/enums/StatResultType.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/enums/StatResultType.java
new file mode 100644
index 0000000..e871461
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/enums/StatResultType.java
@@ -0,0 +1,13 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Enum.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.enums;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum StatResultType {
+    SCALAR, LIST
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/enums/TypeConfigurationTableauBord.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/enums/TypeConfigurationTableauBord.java
new file mode 100644
index 0000000..3009e8c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/enums/TypeConfigurationTableauBord.java
@@ -0,0 +1,48 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.enums;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.megatim.fdxcommons.model.search.EnumValue;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum TypeConfigurationTableauBord {
+    GLOBAL("GLOBAL"), USER_SPECIFIC("SPECIFIQUE A L'UTILISATEUR");
+
+    private TypeConfigurationTableauBord(String typeConfiguration) {
+        this.typeConfiguration = typeConfiguration;
+    }
+
+    private final String typeConfiguration;
+
+    @JsonValue
+    public String getTypeConfiguration() {
+        return typeConfiguration;
+    }
+
+    @EnumValue
+    public static TypeConfigurationTableauBord fromValeur(String value) {
+        if (value == null) {
+            return null;
+        }
+        if (value.equalsIgnoreCase("GLOBAL")) {
+            return TypeConfigurationTableauBord.GLOBAL;
+        } else if (value.equalsIgnoreCase("SPECIFIQUE A L'UTILISATEUR") || value.equalsIgnoreCase("USER_SPECIFIC")
+                || value.equalsIgnoreCase("USER SPECIFIC")) {
+            return TypeConfigurationTableauBord.USER_SPECIFIC;
+        } else {
+            return null;
+
+        }
+    }
+
+    @Override
+    public String toString() {
+        return typeConfiguration;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/enums/TypeResultatConfiguration.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/enums/TypeResultatConfiguration.java
new file mode 100644
index 0000000..08c6432
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/enums/TypeResultatConfiguration.java
@@ -0,0 +1,48 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Enum.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.enums;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.megatim.fdxcommons.model.search.EnumValue;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum TypeResultatConfiguration {
+
+    RECAPITULATIF("RECAPITULATIF"),
+    HISTOGRAMME("HISTOGRAMME"),
+    CAMEMBERT("CAMEMBERT");
+
+    private final String value;
+
+    private TypeResultatConfiguration(String value) {
+        this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+        return value;
+    }
+
+    @Override
+    public String toString() {
+        return value;
+    }
+
+    @EnumValue
+    public static TypeResultatConfiguration fromValeur(String value) {
+        if (value.equalsIgnoreCase("RECAPITULATIF")) {
+            return TypeResultatConfiguration.RECAPITULATIF;
+        } else if (value.equalsIgnoreCase("HISTOGRAMME")) {
+            return TypeResultatConfiguration.HISTOGRAMME;
+        } else if (value.equalsIgnoreCase("CAMEMBERT")) {
+            return TypeResultatConfiguration.CAMEMBERT;
+        } else {
+            return null;
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/favoritessearch/FavoriteSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/favoritessearch/FavoriteSearch.java
new file mode 100644
index 0000000..c275d66
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/favoritessearch/FavoriteSearch.java
@@ -0,0 +1,33 @@
+package com.megatim.fdxconsultation.model.favoritessearch;
+
+import com.megatim.fdxconsultation.model.base.BaseEntity;
+import com.megatim.fdxconsultation.model.stats.CriteriaEntityPersisted;
+import java.io.Serializable;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.ManyToOne;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Getter
+@Setter
+@EqualsAndHashCode(callSuper = true)
+@Entity
+public class FavoriteSearch extends BaseEntity implements Serializable {
+
+    private String libelle;
+
+    private String codeTypeFichier;
+
+    private String referentielVersion;
+    
+    private String userName;
+
+    @ManyToOne(cascade = CascadeType.ALL)
+    private CriteriaEntityPersisted criteria;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/formodel/RoleFormModel.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/formodel/RoleFormModel.java
new file mode 100644
index 0000000..7377fdd
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/formodel/RoleFormModel.java
@@ -0,0 +1,30 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.model.formodel;
+
+import com.megatim.fdxconsultation.model.dto.ActionSlimDto;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author bissey
+ */
+public class RoleFormModel {
+    
+    List<ActionSlimDto> actions =  new ArrayList<>();
+
+    public List<ActionSlimDto> getActions() {
+        return actions;
+    }
+
+    public void setActions(List<ActionSlimDto> actions) {
+        this.actions = actions;
+    }
+
+   
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/formodel/UserFormModel.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/formodel/UserFormModel.java
new file mode 100644
index 0000000..cf5ffbc
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/formodel/UserFormModel.java
@@ -0,0 +1,28 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.model.formodel;
+
+import com.megatim.fdxconsultation.model.dto.RoleSlimDto;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author bissey
+ */
+public class UserFormModel {
+    
+    List<RoleSlimDto> roles =  new ArrayList<>();
+
+    public List<RoleSlimDto> getRoles() {
+        return roles;
+    }
+
+    public void setRoles(List<RoleSlimDto> roles) {
+        this.roles = roles;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/integration/EchecIntegration.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/integration/EchecIntegration.java
new file mode 100644
index 0000000..327c2c7
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/integration/EchecIntegration.java
@@ -0,0 +1,33 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.integration;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.validation.constraints.NotNull;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@Entity
+public class EchecIntegration implements Serializable{
+    
+    @Id
+    private Long dataProductionId;
+    
+    @NotNull(message = "La date de création de l'echec d'intégration est obligatoire")
+    private LocalDateTime dateCreation;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/log/ApiUserActionLog.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/log/ApiUserActionLog.java
new file mode 100644
index 0000000..bfcb6c3
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/log/ApiUserActionLog.java
@@ -0,0 +1,56 @@
+package com.megatim.fdxconsultation.model.log;
+
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Entity
+@Getter
+@Setter
+@NoArgsConstructor
+public class ApiUserActionLog implements Serializable {
+
+    @Id
+    private Long id;
+
+    @NotEmpty(message = "Le message est obligatoire")
+    @CriteriaEntitySearch(libelle = "Description", rang = 2)
+    @Lob
+    private String message;
+
+    @CriteriaEntitySearch(libelle = "Utilisateur", rang = 5)
+    private String userName;
+
+    @NotNull(message = "La date de l'action est obligatoire")
+    @CriteriaEntitySearch(libelle = "Date et heure", rang = 1)
+    private LocalDateTime dateAction;
+
+    @CriteriaEntitySearch(libelle = "Adresse IP", rang = 4)
+    @NotEmpty(message = "L'addresse IP est obligatoire")
+    private String ipAddress;
+
+    @CriteriaEntitySearch(libelle = "Statut requete", visible = false)
+    private Integer status;
+
+    @CriteriaEntitySearch(libelle = "Navigateur", rang = 3)
+    private String userAgent;
+    
+    @CriteriaEntitySearch(libelle = "Path", visible = false)
+    private String relativePath;
+    
+    private String httpMethod;
+    
+    private String motif;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/log/dtos/ApiUserActionSummarySearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/log/dtos/ApiUserActionSummarySearch.java
new file mode 100644
index 0000000..e36c141
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/log/dtos/ApiUserActionSummarySearch.java
@@ -0,0 +1,21 @@
+package com.megatim.fdxconsultation.model.log.dtos;
+
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Getter
+@Setter
+public class ApiUserActionSummarySearch implements Serializable {
+
+    private Participant participant;
+    private LocalDateTime dateDebut;
+    private LocalDateTime dateFin;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/mappers/MapStructMapper.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/mappers/MapStructMapper.java
new file mode 100644
index 0000000..b2d41b6
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/mappers/MapStructMapper.java
@@ -0,0 +1,203 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.model.mappers;
+
+import com.fdx.messaging.common.AgentConfiguration;
+import com.fdx.messaging.common.StandaloneServerState;
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import com.megatim.fdxcommons.model.dtos.dataproduction.CommonDataProductionDto;
+import com.megatim.fdxcommons.model.dtos.dataproduction.DataProductionDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.ParticipantSlimDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.ReferentielSlimDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.RoutageDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.RoutageSlimDto;
+import com.megatim.fdxcommons.model.dtos.remoteproduction.PlanificationDto;
+import com.megatim.fdxcommons.model.dtos.remoteproduction.RemoteConfigurationDto;
+import com.megatim.fdxcommons.model.log.UserActionLog;
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxcommons.model.referentiel.Routage;
+import com.megatim.fdxconsultation.model.remoteaction.Planification;
+import com.megatim.fdxconsultation.model.remoteaction.RemoteConfiguration;
+import com.megatim.fdxconsultation.model.administration.Action;
+import com.megatim.fdxconsultation.model.administration.JournalActionUtilisateur;
+import com.megatim.fdxconsultation.model.administration.JournalConnexionUtilisateur;
+import com.megatim.fdxconsultation.model.administration.Role;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.api.token.ApiToken;
+import com.megatim.fdxconsultation.model.configuration.CodeStatutHttp;
+import com.megatim.fdxconsultation.model.dataproduction.DataProduction;
+import com.megatim.fdxconsultation.model.documents.Category;
+import com.megatim.fdxconsultation.model.documents.Document;
+import com.megatim.fdxconsultation.model.dto.ActionDto;
+import com.megatim.fdxconsultation.model.dto.ActionSlimDto;
+import com.megatim.fdxconsultation.model.dto.ApiTokenDto;
+import com.megatim.fdxconsultation.model.dto.CategoryDto;
+import com.megatim.fdxconsultation.model.dto.CategorySlimDto;
+import com.megatim.fdxconsultation.model.dto.CodeStatutHttpDto;
+import com.megatim.fdxconsultation.model.dto.DocumentDto;
+import com.megatim.fdxconsultation.model.dto.FavoriteSearchDto;
+import com.megatim.fdxconsultation.model.dto.RoleDto;
+import com.megatim.fdxconsultation.model.dto.UserDto;
+import com.megatim.fdxconsultation.model.dto.UserSlimDto;
+import com.megatim.fdxconsultation.model.dto.JournalActionUtilisateurDto;
+import com.megatim.fdxconsultation.model.dto.JournalConnexionUtilisateurDto;
+import com.megatim.fdxconsultation.model.dto.MessageSystemeDto;
+import com.megatim.fdxconsultation.model.dto.RoleSlimDto;
+import com.megatim.fdxconsultation.model.dto.log.UserActionLogDto;
+import com.megatim.fdxconsultation.model.dto.stats.TableConfigurationSlimDto;
+import com.megatim.fdxconsultation.model.dto.stats.TableauBordColumnDto;
+import com.megatim.fdxconsultation.model.dto.stats.TableauBordSlimDto;
+import com.megatim.fdxconsultation.model.dtos.reporting.CustomFieldDto;
+import com.megatim.fdxconsultation.model.dtos.reporting.CustomTypeFichierReportConfiguration;
+import com.megatim.fdxconsultation.model.dtos.reporting.CustomTypeFichierReportConfigurationFromView;
+import com.megatim.fdxconsultation.model.favoritessearch.FavoriteSearch;
+import com.megatim.fdxconsultation.model.log.ApiUserActionLog;
+import com.megatim.fdxconsultation.model.message.systeme.MessageSysteme;
+import com.megatim.fdxconsultation.model.stats.TableConfiguration;
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import com.megatim.fdxconsultation.model.stats.TableauBordColumn;
+import com.megatim.fdxconsultation.model.supervision.AgentConfigurationEntity;
+import com.megatim.fdxconsultation.model.supervision.StandaloneServerStateEntity;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import java.util.List;
+import java.util.Set;
+import org.mapstruct.AfterMapping;
+import org.mapstruct.BeforeMapping;
+import org.mapstruct.InjectionStrategy;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.MappingTarget;
+
+/**
+ *
+ * @author bissey
+ */
+@Mapper(componentModel = "cdi", injectionStrategy = InjectionStrategy.FIELD)
+public interface MapStructMapper {
+
+    CategoryDto categoryToCategoryDto(Category category);
+
+    @Mapping(target = "criteria", ignore = true)
+    FavoriteSearchDto favoriteSearchToFavoriteSearchDto(FavoriteSearch favoriteSearch);
+
+    CategorySlimDto categoryToCategorySlimDto(Category category);
+
+    DocumentDto documentToDocumentDto(Document document);
+
+    ParticipantSlimDto partcipantToPartcipantSlimDto(Participant participant);
+
+    ReferentielSlimDto referentielToReferentielSlimDto(Referentiel referentiel);
+
+    ApiTokenDto apiTokenToApiTokenDto(ApiToken apiToken);
+
+    List<ApiTokenDto> apiTokenListToApiTokenDtoList(List<ApiToken> apiTokens);
+
+    UserDto userToUserDto(User user);
+
+    List<UserSlimDto> userListToUserDtoList(List<User> roles);
+
+    UserSlimDto userToUserSlimDto(User user);
+
+    CodeStatutHttpDto codeStatutHttpToCodeStatutHttpDto(CodeStatutHttp codeStatutHttp);
+
+    List<UserSlimDto> userSlimDtos(List<User> users);
+
+    RoleDto roleToRoleDto(Role role);
+
+    List<RoleDto> roleListToRoleDtoList(List<Role> roles);
+
+    RoleSlimDto roleToRoleSlimDto(Role role);
+
+    List<RoleSlimDto> roleSlimDtos(List<Role> roles);
+
+    ActionDto actionToActionDto(Action action);
+
+    ActionSlimDto actionToaActionSlimDto(Action action);
+
+    List<ActionSlimDto> actionSlimDtos(List<Action> actions);
+
+    CustomFieldDto customFieldToCustomFieldDto(CustomField customField);
+
+    List<CustomFieldDto> customFieldListToCustomFieldDtoList(List<CustomField> customFields);
+
+    CustomTypeFichierReportConfiguration customTypeFichierReportConfigurationFromViewToCustomTypeFichierReportConfiguration(CustomTypeFichierReportConfigurationFromView fromView);
+
+    List<CustomTypeFichierReportConfiguration> customTypeFichierReportConfigurationFromViewListToCustomTypeFichierReportConfigurationList(List<CustomTypeFichierReportConfigurationFromView> fromViews);
+
+    TableauBordSlimDto tableauBordToTableauBordSlimDto(TableauBord tableauBord);
+
+    TableConfigurationSlimDto tableConfigurationToTableConfigurationSlimDto(TableConfiguration tableConfiguration);
+
+    TableauBordColumnDto tableauBordColumnToTableauBordColumnDto(TableauBordColumn tableauBordColumn);
+
+    TableauBordColumn tableauBordColumnDtoToTableauBordColumn(TableauBordColumnDto dto);
+
+    Set<TableauBordColumn> setTableauBordColumnDtoToSetTableauBordColumn(Set<TableauBordColumnDto> dtos);
+
+    Set<TableauBordColumnDto> setTableauBordColumnToSetTableauBordColumnDto(Set<TableauBordColumn> tableauBordColumns);
+
+    StandaloneServerStateEntity standaloneServerStateToStandaloneServerStateEntity(StandaloneServerState serverState);
+
+    AgentConfigurationEntity agentConfigurationToAgentConfigurationEntity(AgentConfiguration agent);
+
+    List<AgentConfigurationEntity> agentConfigurationListToAgentConfigurationEntityList(List<AgentConfiguration> agents);
+
+    MessageSystemeDto messageSystemeToMessageSystemeDto(MessageSysteme messageSysteme);
+
+    RoutageSlimDto routageToRoutageSlimDto(Routage routage);
+
+    RoutageDto routageToRoutageDto(Routage routage);
+
+    UserActionLogDto userActionLogToUserActionLogDto(UserActionLog log);
+
+    JournalActionUtilisateurDto journalActionUtilisateurToJournalActionUtilisateurDto(JournalActionUtilisateur log);
+
+    JournalConnexionUtilisateurDto journalConnexionUtilisateurToJournalConnexionUtilisateurDto(JournalConnexionUtilisateur log);
+
+    List<UserActionLogDto> userActionLogListToUserActionLogDtoList(List<UserActionLog> logs);
+
+    List<JournalActionUtilisateurDto> journalActionUtilisateurListToJournalActionUtilisateurgDtoList(List<JournalActionUtilisateur> logs);
+
+    List<JournalConnexionUtilisateurDto> journalConnexionUtilisateurListToJournalConnexionUtilisateurDtoList(List<JournalConnexionUtilisateur> logs);
+
+    ApiUserActionLog userActionLogToApiUserActionLog(UserActionLog log);
+
+    UserActionLogDto apiUserActionLogToUserActionLogDto(ApiUserActionLog log);
+
+    List<UserActionLogDto> apiUserActionLogListToUserActionLogDtoList(List<ApiUserActionLog> logs);
+
+    PlanificationDto planificationToPlanificationDto(Planification plan);
+
+    List<PlanificationDto> planificationListToPlanificationDtoList(List<Planification> liste);
+
+    RemoteConfigurationDto remoteConfigurationToRemoteConfigurationDto(RemoteConfiguration entity);
+
+    List<RemoteConfigurationDto> remoteConfigurationListToRemoteConfigurationDtoList(List<RemoteConfiguration> liste);
+
+    DataProduction commonDataProductionToDataProduction(CommonDataProduction cd);
+    
+    DataProduction commonDataProductionDtoToDataProduction(CommonDataProductionDto cd);
+    
+    CommonDataProduction dataProductionToCommonDataProduction(DataProduction d);
+
+    List<DataProductionDto> dataProductionListToDataProductionDtoList(List<DataProduction> liste);
+
+    DataProductionDto dataProductionToDataProductionDto(DataProduction d);
+    
+    DataProduction dataProductionDtoToDataProduction(DataProductionDto dto);
+
+    @AfterMapping
+    default void setRoutageDtoCode(@MappingTarget RoutageDto routageDto) {
+        routageDto.setCode(routageDto.getTypeFichier().getCode() + "-" + routageDto.getReferentiel().getVersion());
+    }
+
+    @BeforeMapping
+    default void setRoutageSlimDtoCode(Routage routage, @MappingTarget RoutageSlimDto routageDto) {
+        routageDto.setCode(routage.getTypeFichier().getCode() + "-" + routage.getReferentiel().getVersion());
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/ApplicationData.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/ApplicationData.java
new file mode 100644
index 0000000..ae57b8a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/ApplicationData.java
@@ -0,0 +1,33 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.model.message.systeme;
+
+import com.megatim.fdxcommons.model.enumeration.Gravite;
+import com.megatim.fdxconsultation.model.dto.AdministrationNumberDto;
+import com.megatim.fdxconsultation.model.dto.InformationGeneraleDto;
+import com.megatim.fdxconsultation.model.dto.MessageSystemeDto;
+import com.megatim.fdxconsultation.model.dto.UserDto;
+import java.util.ArrayList;
+import java.util.List;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ABEGA
+ */
+@Getter
+@Setter
+public class ApplicationData {
+    
+    private Gravite gravite = Gravite.INFO;
+    private InformationGeneraleDto informationGeneraleDto;
+    private AdministrationNumberDto administrationNumberDto;
+    private List<UserDto> utlisateursConnectes = new ArrayList<UserDto>();
+    private MessageSystemeDto messageSystemeDto;
+    private String description;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/MessageDecoder.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/MessageDecoder.java
new file mode 100644
index 0000000..c08357d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/MessageDecoder.java
@@ -0,0 +1,39 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.message.systeme;
+
+import com.google.gson.Gson;
+import javax.websocket.DecodeException;
+import javax.websocket.Decoder;
+import javax.websocket.EndpointConfig;
+
+/**
+ *
+ * @author Lenovo P53
+ */
+public class MessageDecoder implements Decoder.Text<ApplicationData> {
+
+    private static Gson gson = new Gson();
+
+    @Override
+    public ApplicationData decode(String s) throws DecodeException {
+        return gson.fromJson(s, ApplicationData.class);
+    }
+
+    @Override
+    public boolean willDecode(String s) {
+        return (s != null);
+    }
+
+    @Override
+    public void init(EndpointConfig endpointConfig) {
+        // Custom initialization logic
+    }
+
+    @Override
+    public void destroy() {
+        // Close resources
+    }
+}
\ No newline at end of file
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/MessageEncoder.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/MessageEncoder.java
new file mode 100644
index 0000000..2672614
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/MessageEncoder.java
@@ -0,0 +1,34 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.message.systeme;
+
+import com.google.gson.Gson;
+import javax.websocket.EncodeException;
+import javax.websocket.Encoder;
+import javax.websocket.EndpointConfig;
+
+/**
+ *
+ * @author Lenovo P53
+ */
+public class MessageEncoder implements Encoder.Text<ApplicationData> {
+
+    private static Gson gson = new Gson();
+
+    @Override
+    public String encode(ApplicationData message) throws EncodeException {
+        return gson.toJson(message);
+    }
+
+    @Override
+    public void init(EndpointConfig endpointConfig) {
+        // Custom initialization logic
+    }
+
+    @Override
+    public void destroy() {
+        // Close resources
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/MessageSysteme.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/MessageSysteme.java
new file mode 100644
index 0000000..c22b384
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/MessageSysteme.java
@@ -0,0 +1,135 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.message.systeme;
+
+import com.megatim.fdxcommons.model.enumeration.TypeActionSysteme;
+import com.megatim.fdxcommons.model.enumeration.TypeIdMessageSysteme;
+import com.megatim.fdxcommons.model.enumeration.TypeMessageSysteme;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxconsultation.model.administration.User;
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Lenovo P53
+ */
+@Entity(name = "MessageSysteme")
+@Table(name = "FDX_MSG_SYST")
+@Getter
+@Setter
+public class MessageSysteme implements Serializable, Comparable<MessageSysteme> {
+    
+    @SequenceGenerator(name = "SEQ_FDX_MSG_SYST",
+            sequenceName = "SEQ_FDX_MSG_SYST",
+            allocationSize = 1,
+            initialValue = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_FDX_MSG_SYST")
+    @Column(name = "ID")
+    @Id
+    private Long id;
+    
+    @Column(name = "TYPE_OPERATION")
+    private TypeOperation typeOperation = TypeOperation.AJOUTER;
+
+    @Column(name = "TYP_ID_MSG_SYST")
+    @Enumerated(EnumType.STRING)
+    private TypeIdMessageSysteme typeIdMessageSysteme;
+    
+    @Column(name = "TYP_MSG_SYST")
+    @Enumerated(EnumType.STRING)
+    private TypeMessageSysteme typeMessageSysteme;
+    
+    @Column(name = "TYP_ACTION_SYST")
+    @Enumerated(EnumType.STRING)
+    private TypeActionSysteme typeActionSysteme;
+    
+    @Column(name = "CONTENU_MSG")
+    private String contenu;
+    
+    @ManyToOne
+    @JoinColumn(name = "ID_UTILISATEUR")
+    private User utilisateur;
+    
+    @Column(name = "DATE_CREATION")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date dateCreation;
+    
+    @Column(name = "USER_CREATION")
+    private String utilisateurCreation;
+    
+    @Column(name = "DATE_DERN_MOD")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date dateDerniereModification;
+    
+    @Column(name = "USER_UPDATE")
+    private String utilisateurModification;
+    
+    @Column(name = "DATE_SUPPR")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date dateSuppression;
+    
+    @Column(name = "USER_DELETE")
+    private String utilisateurSuppression;
+    
+    public MessageSysteme() {}
+
+    @Override
+    public boolean equals(Object parameter) {
+
+        // Si le parametre est null
+        if(parameter == null) return false;
+
+        // Si le parametre n'est pas de l'instance
+        if(!(parameter instanceof MessageSysteme)) return false;
+
+        // On caste
+        MessageSysteme casted = (MessageSysteme) parameter;
+
+        // Si le code du parametre est vide
+        if(casted.id == null) return false;
+
+        // Si le code du parametre en cours est vide
+        if(id == null) return false;
+
+        // On retourne la comparaison des id
+        return id.equals(casted.id);
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see java.lang.Comparable#compareTo(java.lang.Object)
+     */
+    @Override
+    public int compareTo(MessageSysteme parameter) {
+
+        // Si le parametre est null
+        if(parameter == null) return -1;
+
+        // Si le code du parametre est vide
+        if(parameter.id == null) return -1;
+
+        // Si le code du parametre en cours est vide
+        if(id == null) return 1;
+
+        // On retourne la comparaison des codes
+        return id.compareTo(parameter.id);
+    }
+}
\ No newline at end of file
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/UserSesionApplication.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/UserSesionApplication.java
new file mode 100644
index 0000000..dc464fb
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/UserSesionApplication.java
@@ -0,0 +1,100 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.message.systeme;
+
+import com.megatim.fdxconsultation.model.administration.User;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import javax.websocket.EncodeException;
+import javax.websocket.Session;
+
+/**
+ *
+ * @author Lenovo P53
+ */
+public class UserSesionApplication {
+
+    private static UserSesionApplication userSesion;
+    private static HashMap<String, UserWebSocket> users;
+
+    public static UserSesionApplication getInstance() {
+        if (userSesion == null) {
+            userSesion = new UserSesionApplication();
+            users = new HashMap<String, UserWebSocket>();
+        }
+        return userSesion;
+    }
+
+    public synchronized static HashMap<String, UserWebSocket> getUsers() {
+        return users;
+    }
+
+    public static void setUsers(HashMap<String, UserWebSocket> users) {
+        UserSesionApplication.users = users;
+    }
+
+    public void addSession(User utilidateur, Session session, String type) {
+        this.users.put(session.getId(), new UserWebSocket(session, utilidateur, type));
+    }
+
+    public void removeSession(Session session) {
+        this.users.remove(session.getId());
+    }
+
+    public void send(Session session, ApplicationData message) throws IOException, EncodeException {
+        session.getBasicRemote().sendObject(message);
+    }
+    
+    public static boolean siUtilisateurConnecte(User user) {
+        boolean etat = false;        
+        UserWebSocket userSession = null;
+        Iterator<String> iterator = UserSesionApplication.getInstance().getUsers().keySet().iterator();
+        while(iterator.hasNext()){
+            userSession = UserSesionApplication.getInstance().getUsers().get(iterator.next());
+            if((userSession != null && userSession.getUtilisateur() != null)
+                    && user != null
+                    && userSession.getUtilisateur().getId() == user.getId()){
+                etat = true;
+                break;
+            }
+        }
+        return etat;
+    }
+    
+    public void removeAllSessionsForUser(User user) {
+        
+        //Variables
+        List<String> sessionsId = new ArrayList();
+        
+        //On parcourt la liste des sessions
+        UserSesionApplication.getInstance().getUsers().forEach((sessionId, userSession) -> {
+            
+            //Si l'utilisateur non null
+            if((userSession != null && userSession.getUtilisateur() != null)
+                    && user != null
+                    && userSession.getUtilisateur().getId() == user.getId()){
+                
+                //On recuoère les sessions de l'utilisateur
+                sessionsId.add(sessionId);
+                
+            }
+        });
+        
+        //On retire les sessions de l'utilisateur
+        for(String sessionId : sessionsId){
+            
+            //On retire la session
+            this.users.remove(sessionId);
+            
+            System.out.println("=============================removeAllSessionsForUser=====================================>");
+            
+        }
+        
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/UserWebSocket.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/UserWebSocket.java
new file mode 100644
index 0000000..f0a85bc
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/message/systeme/UserWebSocket.java
@@ -0,0 +1,52 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.message.systeme;
+
+import com.megatim.fdxconsultation.model.administration.User;
+import javax.websocket.Session;
+
+/**
+ *
+ * @author 
+ */
+public class UserWebSocket {
+
+    private Session session;
+    private String type;
+    private User utilisateur;
+
+    public UserWebSocket() {}
+
+    public UserWebSocket(Session session, User utilisateur, String type) {
+        this.session = session;
+        this.utilisateur = utilisateur;
+        this.type = type;
+    }
+
+    public Session getSession() {
+        return session;
+    }
+
+    public void setSession(Session session) {
+        this.session = session;
+    }
+
+    public User getUtilisateur() {
+        return utilisateur;
+    }
+
+    public void setUtilisateur(User utilisateur) {
+        this.utilisateur = utilisateur;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+    
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/ExtensionFichierSlimResponse.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/ExtensionFichierSlimResponse.java
new file mode 100644
index 0000000..c8737b2
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/ExtensionFichierSlimResponse.java
@@ -0,0 +1,52 @@
+package com.megatim.fdxconsultation.model.referentiel.dtos;
+
+import com.megatim.fdxcommons.model.enumeration.TypeExtension;
+import com.megatim.fdxcommons.model.referentiel.ExtensionFichier;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class ExtensionFichierSlimResponse implements Serializable {
+
+    private final ExtensionFichier extensionFichier;
+
+    public ExtensionFichierSlimResponse(ExtensionFichier extensionFichier) {
+        this.extensionFichier = extensionFichier;
+    }
+
+    public String getExtension() {
+        return extensionFichier.getExtension();
+    }
+
+    public String getLibelle() {
+        return extensionFichier.getLibelle();
+    }
+
+    public TypeExtension getTypeExtension() {
+        return extensionFichier.getTypeExtension();
+    }
+    
+    public ReferentielSlimResponse getReferentiel() {
+        return new ReferentielSlimResponse(extensionFichier.getReferentiel());
+    }
+
+    public String getCreateBy() {
+        return extensionFichier.getCreateBy();
+    }
+
+    public String getLastModifiedBy() {
+        return extensionFichier.getLastModifiedBy();
+    }
+
+    public LocalDateTime getDateCreation() {
+        return extensionFichier.getDateCreation();
+    }
+
+    public LocalDateTime getDateMiseAjour() {
+        return extensionFichier.getDateMiseAjour();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/GroupeNoeudSlimResponse.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/GroupeNoeudSlimResponse.java
new file mode 100644
index 0000000..2f8c7e1
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/GroupeNoeudSlimResponse.java
@@ -0,0 +1,51 @@
+package com.megatim.fdxconsultation.model.referentiel.dtos;
+
+import com.megatim.fdxcommons.model.referentiel.GroupeNoeud;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class GroupeNoeudSlimResponse implements Serializable {
+
+    private final GroupeNoeud groupeNoeud;
+
+    public GroupeNoeudSlimResponse(GroupeNoeud groupeNoeud) {
+        this.groupeNoeud = groupeNoeud;
+    }
+
+    public String getCode() {
+        return groupeNoeud.getCode();
+    }
+
+    public String getLibelle() {
+        return groupeNoeud.getLibelle();
+    }
+
+    public String getDescription() {
+        return groupeNoeud.getDescription();
+    }
+    
+    public ReferentielSlimResponse getReferentiel() {
+        return new ReferentielSlimResponse(groupeNoeud.getReferentiel());
+    }
+
+    public String getCreateBy() {
+        return groupeNoeud.getCreateBy();
+    }
+
+    public String getLastModifiedBy() {
+        return groupeNoeud.getLastModifiedBy();
+    }
+
+    public LocalDateTime getDateCreation() {
+        return groupeNoeud.getDateCreation();
+    }
+
+    public LocalDateTime getDateMiseAjour() {
+        return groupeNoeud.getDateMiseAjour();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/GroupeParticipantSlimResponse.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/GroupeParticipantSlimResponse.java
new file mode 100644
index 0000000..43bf623
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/GroupeParticipantSlimResponse.java
@@ -0,0 +1,51 @@
+package com.megatim.fdxconsultation.model.referentiel.dtos;
+
+import com.megatim.fdxcommons.model.referentiel.GroupeParticipant;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class GroupeParticipantSlimResponse implements Serializable {
+
+    private final GroupeParticipant groupeParticipant;
+
+    public GroupeParticipantSlimResponse(GroupeParticipant groupeParticipant) {
+        this.groupeParticipant = groupeParticipant;
+    }
+
+    public String getCode() {
+        return groupeParticipant.getCode();
+    }
+
+    public String getLibelle() {
+        return groupeParticipant.getLibelle();
+    }
+
+    public String getDescription() {
+        return groupeParticipant.getDescription();
+    }
+
+    public ReferentielSlimResponse getReferentiel() {
+        return new ReferentielSlimResponse(groupeParticipant.getReferentiel());
+    }
+
+    public String getCreateBy() {
+        return groupeParticipant.getCreateBy();
+    }
+
+    public String getLastModifiedBy() {
+        return groupeParticipant.getLastModifiedBy();
+    }
+
+    public LocalDateTime getDateCreation() {
+        return groupeParticipant.getDateCreation();
+    }
+
+    public LocalDateTime getDateMiseAjour() {
+        return groupeParticipant.getDateMiseAjour();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/NoeudSlimResponse.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/NoeudSlimResponse.java
new file mode 100644
index 0000000..bd2d4f9
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/NoeudSlimResponse.java
@@ -0,0 +1,51 @@
+package com.megatim.fdxconsultation.model.referentiel.dtos;
+
+import com.megatim.fdxcommons.model.referentiel.Noeud;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class NoeudSlimResponse implements Serializable {
+    
+    private final Noeud noeud;
+
+    public NoeudSlimResponse(Noeud noeud) {
+        this.noeud = noeud;
+    }
+    
+    public String getCode() {
+        return noeud.getCode();
+    }
+
+    public String getLibelle() {
+        return noeud.getLibelle();
+    }
+    
+    public ReferentielSlimResponse getReferentiel() {
+        return new ReferentielSlimResponse(noeud.getReferentiel());
+    }
+    
+    public ParticipantSlimResponse getParticipant() {
+        return new ParticipantSlimResponse(noeud.getParticipant());
+    }
+
+    public String getCreateBy() {
+        return noeud.getCreateBy();
+    }
+
+    public String getLastModifiedBy() {
+        return noeud.getLastModifiedBy();
+    }
+
+    public LocalDateTime getDateCreation() {
+        return noeud.getDateCreation();
+    }
+
+    public LocalDateTime getDateMiseAjour() {
+        return noeud.getDateMiseAjour();
+    }
+    
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/ParticipantSlimResponse.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/ParticipantSlimResponse.java
new file mode 100644
index 0000000..7d2fca3
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/ParticipantSlimResponse.java
@@ -0,0 +1,54 @@
+package com.megatim.fdxconsultation.model.referentiel.dtos;
+
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class ParticipantSlimResponse implements Serializable {
+
+    private final Participant participant;
+
+    public ParticipantSlimResponse(Participant participant) {
+        this.participant = participant;
+    }
+
+    public String getCode() {
+        return participant.getCode();
+    }
+
+    public String getLibelle() {
+        return participant.getLibelle();
+    }
+
+    public String getDescription() {
+        return participant.getDescription();
+    }
+
+    public ReferentielSlimResponse getReferentiel() {
+        return new ReferentielSlimResponse(participant.getReferentiel());
+    }
+    
+    public PaysSlimResponse getPays() {
+        return new PaysSlimResponse(participant.getPays());
+    }
+
+    public String getCreateBy() {
+        return participant.getCreateBy();
+    }
+
+    public String getLastModifiedBy() {
+        return participant.getLastModifiedBy();
+    }
+
+    public LocalDateTime getDateCreation() {
+        return participant.getDateCreation();
+    }
+
+    public LocalDateTime getDateMiseAjour() {
+        return participant.getDateMiseAjour();
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/PaysSlimResponse.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/PaysSlimResponse.java
new file mode 100644
index 0000000..c21e6dc
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/PaysSlimResponse.java
@@ -0,0 +1,47 @@
+package com.megatim.fdxconsultation.model.referentiel.dtos;
+
+import com.megatim.fdxcommons.model.referentiel.Pays;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class PaysSlimResponse implements Serializable {
+
+    private final Pays pays;
+
+    public PaysSlimResponse(Pays pays) {
+        this.pays = pays;
+    }
+
+    public String getCode() {
+        return pays.getCode();
+    }
+
+    public String getLibelle() {
+        return pays.getLibelle();
+    }
+
+    public ReferentielSlimResponse getReferentiel() {
+        return new ReferentielSlimResponse(pays.getReferentiel());
+    }
+
+    public String getCreateBy() {
+        return pays.getCreateBy();
+    }
+
+    public String getLastModifiedBy() {
+        return pays.getLastModifiedBy();
+    }
+
+    public LocalDateTime getDateCreation() {
+        return pays.getDateCreation();
+    }
+
+    public LocalDateTime getDateMiseAjour() {
+        return pays.getDateMiseAjour();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/ReferentielSlimResponse.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/ReferentielSlimResponse.java
new file mode 100644
index 0000000..e757c18
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/ReferentielSlimResponse.java
@@ -0,0 +1,52 @@
+package com.megatim.fdxconsultation.model.referentiel.dtos;
+
+import com.megatim.fdxcommons.model.enumeration.StatutReferentiel;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class ReferentielSlimResponse implements Serializable {
+
+    private final Referentiel referentiel;
+
+    public ReferentielSlimResponse(Referentiel referentiel) {
+        this.referentiel = referentiel;
+    }
+
+    public String getVersion() {
+        return referentiel.getVersion();
+    }
+
+    public String getDescription() {
+        return referentiel.getDescription();
+    }
+
+    public StatutReferentiel getStatutReferentiel() {
+        return referentiel.getStatutReferentiel();
+    }
+
+    public String getCreateBy() {
+        return referentiel.getCreateBy();
+    }
+
+    public String getLastModifiedBy() {
+        return referentiel.getLastModifiedBy();
+    }
+
+    public LocalDateTime getDateCreation() {
+        return referentiel.getDateCreation();
+    }
+
+    public LocalDateTime getDateMiseAjour() {
+        return referentiel.getDateMiseAjour();
+    }
+
+    public LocalDateTime getDateGeneration() {
+        return referentiel.getDateGeneration();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/RoutageDetailsResponse.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/RoutageDetailsResponse.java
new file mode 100644
index 0000000..b10c458
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/RoutageDetailsResponse.java
@@ -0,0 +1,81 @@
+package com.megatim.fdxconsultation.model.referentiel.dtos;
+
+import com.megatim.fdxcommons.model.referentiel.Routage;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class RoutageDetailsResponse extends RoutageSlimResponse {
+
+    public RoutageDetailsResponse(Routage routage) {
+        super(routage);
+    }
+
+    public Set<NoeudSlimResponse> getNoeudsEnvoi() {
+        return routage
+                .getNoeudsEnvoi()
+                .stream()
+                .map(r -> new NoeudSlimResponse(r))
+                .collect(Collectors.toSet());
+    }
+
+    public Set<GroupeNoeudSlimResponse> getGroupeNoeudsEnvoi() {
+        return routage
+                .getGroupeNoeudsEnvoi()
+                .stream()
+                .map(g -> new GroupeNoeudSlimResponse(g))
+                .collect(Collectors.toSet());
+    }
+
+    public Set<ParticipantSlimResponse> getParticipantsEnvoi() {
+        return routage
+                .getParticipantsEnvoi()
+                .stream()
+                .map(p -> new ParticipantSlimResponse(p))
+                .collect(Collectors.toSet());
+    }
+
+    public Set<GroupeParticipantSlimResponse> getGroupeParticipantsEnvoi() {
+        return routage
+                .getGroupeParticipantsEnvoi()
+                .stream()
+                .map(g -> new GroupeParticipantSlimResponse(g))
+                .collect(Collectors.toSet());
+    }
+
+    public Set<NoeudSlimResponse> getNoeudsReception() {
+        return routage
+                .getNoeudsReception()
+                .stream()
+                .map(r -> new NoeudSlimResponse(r))
+                .collect(Collectors.toSet());
+    }
+
+    public Set<GroupeNoeudSlimResponse> getGroupeNoeudsReception() {
+        return routage
+                .getGroupeNoeudsReception()
+                .stream()
+                .map(g -> new GroupeNoeudSlimResponse(g))
+                .collect(Collectors.toSet());
+    }
+
+    public Set<ParticipantSlimResponse> getParticipantsReception() {
+        return routage
+                .getParticipantsReception()
+                .stream()
+                .map(p -> new ParticipantSlimResponse(p))
+                .collect(Collectors.toSet());
+    }
+
+    public Set<GroupeParticipantSlimResponse> getGroupeParticipantsReception() {
+        return routage
+                .getGroupeParticipantsReception()
+                .stream()
+                .map(g -> new GroupeParticipantSlimResponse(g))
+                .collect(Collectors.toSet());
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/RoutageSlimResponse.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/RoutageSlimResponse.java
new file mode 100644
index 0000000..593c2a5
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/RoutageSlimResponse.java
@@ -0,0 +1,47 @@
+package com.megatim.fdxconsultation.model.referentiel.dtos;
+
+import com.megatim.fdxcommons.model.referentiel.Routage;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class RoutageSlimResponse implements Serializable {
+
+    protected final Routage routage;
+
+    public RoutageSlimResponse(Routage routage) {
+        this.routage = routage;
+    }
+
+    public String getCode() {
+        return routage.getTypeFichier().getCode() + "-" + routage.getReferentiel().getVersion();
+    }
+
+    public ReferentielSlimResponse getReferentiel() {
+        return new ReferentielSlimResponse(routage.getReferentiel());
+    }
+
+    public TypeFichierSlimResponse getTypeFichier() {
+        return new TypeFichierSlimResponse(routage.getTypeFichier());
+    }
+
+    public String getCreateBy() {
+        return routage.getCreateBy();
+    }
+
+    public String getLastModifiedBy() {
+        return routage.getLastModifiedBy();
+    }
+
+    public LocalDateTime getDateCreation() {
+        return routage.getDateCreation();
+    }
+
+    public LocalDateTime getDateMiseAjour() {
+        return routage.getDateMiseAjour();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/TypeFichierSlimResponse.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/TypeFichierSlimResponse.java
new file mode 100644
index 0000000..d4ef68b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/referentiel/dtos/TypeFichierSlimResponse.java
@@ -0,0 +1,63 @@
+package com.megatim.fdxconsultation.model.referentiel.dtos;
+
+import com.megatim.fdxcommons.model.enumeration.CategorieFichier;
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class TypeFichierSlimResponse implements Serializable {
+
+    private final TypeFichier typeFichier;
+
+    public TypeFichierSlimResponse(TypeFichier typeFichier) {
+        this.typeFichier = typeFichier;
+    }
+
+    public String getCode() {
+        return typeFichier.getCode();
+    }
+
+    public String getLibelle() {
+        return typeFichier.getLibelle();
+    }
+
+    public String getDescription() {
+        return typeFichier.getDescription();
+    }
+
+    public ParticipantSlimResponse getParticipant() {
+        return new ParticipantSlimResponse(typeFichier.getParticipant());
+    }
+
+    public ReferentielSlimResponse getReferentiel() {
+        return new ReferentielSlimResponse(typeFichier.getReferentiel());
+    }
+
+    public CategorieFichier getCategorieFichier() {
+        return typeFichier.getCategorieFichier();
+    }
+
+    public ExtensionFichierSlimResponse getExtensionFichier() {
+        return new ExtensionFichierSlimResponse(typeFichier.getExtensionFichier());
+    }
+
+    public String getCreateBy() {
+        return typeFichier.getCreateBy();
+    }
+
+    public String getLastModifiedBy() {
+        return typeFichier.getLastModifiedBy();
+    }
+
+    public LocalDateTime getDateCreation() {
+        return typeFichier.getDateCreation();
+    }
+
+    public LocalDateTime getDateMiseAjour() {
+        return typeFichier.getDateMiseAjour();
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/remoteaction/Planification.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/remoteaction/Planification.java
new file mode 100644
index 0000000..597758a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/remoteaction/Planification.java
@@ -0,0 +1,79 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.remoteaction;
+
+import com.megatim.fdxcommons.model.base.BaseEntity;
+import com.megatim.fdxcommons.model.remotedataproduction.enums.ScheduleAction;
+import com.megatim.fdxcommons.model.remotedataproduction.enums.TypePas;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.validation.constraints.Max;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Entity
+@Getter
+@Setter
+public class Planification extends BaseEntity implements Serializable {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    private String description;
+
+    @ManyToOne
+    private RemoteConfiguration configuration;
+
+    private Boolean executeOnce = false;
+
+    private Boolean active = true;
+
+    private LocalDateTime nextExecution;
+
+    @Enumerated(EnumType.STRING)
+    private ScheduleAction scheduleAction = ScheduleAction.AJOUTER;
+
+    //debut
+    @Max(message = "L'heure de début d'exécution doit être inférieure ou égale à 23", value = 23)
+    private int heureDebutTache = 0;
+    @Max(message = "La minute d'execution doit être inférieure ou égale à 59", value = 59)
+    private int minuteDebutTache = 0;
+    @Max(message = "La Seconde d'execution doit être inférieure ou égale à 59", value = 59)
+    private int secondeDebutTache = 0;
+
+    //fin 
+    @Max(message = "L'heure de fin d'exécution doit être inférieure ou égale à 23", value = 23)
+    private int heureFinTache = 0;
+    @Max(message = "La minute de fin d'execution doit être inférieure ou égale à 59", value = 59)
+    private int minuteFinTache = 0;
+    @Max(message = "La seconde de fin d'execution doit être inférieure ou égale à 59", value = 59)
+    private int secondeFinTache = 0;
+
+    //pas
+    private int intervalleTache = 0;
+    @Enumerated(EnumType.STRING)
+    private TypePas typePas = TypePas.MINUTE;
+
+    //les jours
+    private boolean monday;
+    private boolean tuesday;
+    private boolean wednesday;
+    private boolean thursday;
+    private boolean friday;
+    private boolean saturday;
+    private boolean sunday;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/remoteaction/RemoteConfiguration.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/remoteaction/RemoteConfiguration.java
new file mode 100644
index 0000000..8080fc0
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/remoteaction/RemoteConfiguration.java
@@ -0,0 +1,59 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.remoteaction;
+
+import com.megatim.fdxcommons.model.base.BaseEntity;
+import com.megatim.fdxcommons.model.enumeration.RemoteTypeAction;
+import com.megatim.fdxcommons.model.remoteaction.RemoteConfigurationId;
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.OneToMany;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+@NoArgsConstructor
+@IdClass(RemoteConfigurationId.class)
+@Entity
+public class RemoteConfiguration extends BaseEntity implements Serializable {
+
+    @Id
+    @NotEmpty(message = "Le type de fichier est obligatoire")
+    @CriteriaEntitySearch(libelle = "Type de fichier", rang = 5)
+    private String codeTypeFichier;
+
+    @Id
+    @NotEmpty(message = "Le participant est obligatoire")
+    @CriteriaEntitySearch(libelle = "Type de fichier")
+    private String codeParticipant;
+
+    @NotEmpty(message = "L'URL est obligatoire")
+    private String url;
+
+    @NotNull(message = "Le type d'action est obligatoire")
+    @Enumerated(EnumType.STRING)
+    @CriteriaEntitySearch(libelle = "Type d'action", rang = 7)
+    private RemoteTypeAction remoteTypeAction;//Type d'action à effectuer au niveau du endpoint du participant
+
+    @OneToMany(mappedBy = "configuration", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
+    private Set<Planification> planifications = new HashSet<>();
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ApiTokenSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ApiTokenSearch.java
new file mode 100644
index 0000000..09d2de0
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ApiTokenSearch.java
@@ -0,0 +1,13 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.searchentities;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class ApiTokenSearch {
+    
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ApplicationSourceSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ApplicationSourceSearch.java
new file mode 100644
index 0000000..b11c30a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ApplicationSourceSearch.java
@@ -0,0 +1,21 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.search.Search;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter @Setter
+public class ApplicationSourceSearch {
+    @Search(fieldName = "libelle", operateur = SearchAnnotationOperateur.EQUALS)
+    private String libelle;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/CodeStatutHttpSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/CodeStatutHttpSearch.java
new file mode 100644
index 0000000..fd40ed4
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/CodeStatutHttpSearch.java
@@ -0,0 +1,26 @@
+package com.megatim.fdxconsultation.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.model.search.Search;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Getter
+@Setter
+public class CodeStatutHttpSearch {
+    
+    @Search(fieldName = "code", operateur = SearchAnnotationOperateur.LIKE)
+    private String code;
+    
+    @Search(fieldName = "libelle", operateur = SearchAnnotationOperateur.LIKE )
+    private String libelle;
+    
+    @Search(fieldName = "typeOperation", operateur = SearchAnnotationOperateur.EQUALS )
+    private TypeOperation typeOperation = TypeOperation.AJOUTER;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ExtensionFichierSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ExtensionFichierSearch.java
new file mode 100644
index 0000000..95f4d87
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ExtensionFichierSearch.java
@@ -0,0 +1,22 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.search.Search;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter @Setter
+public class ExtensionFichierSearch {
+
+    @Search(fieldName = "extension", operateur = SearchAnnotationOperateur.EQUALS)
+    private String extension;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/GroupeNoeudSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/GroupeNoeudSearch.java
new file mode 100644
index 0000000..4641d7a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/GroupeNoeudSearch.java
@@ -0,0 +1,21 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.search.Search;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter @Setter
+public class GroupeNoeudSearch {
+    @Search(fieldName = "code", operateur = SearchAnnotationOperateur.EQUALS)
+    private String code;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/GroupeParticipantSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/GroupeParticipantSearch.java
new file mode 100644
index 0000000..4a0c340
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/GroupeParticipantSearch.java
@@ -0,0 +1,23 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.search.Search;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class GroupeParticipantSearch {
+
+    @Search(fieldName = "code", operateur = SearchAnnotationOperateur.EQUALS)
+    private String code;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/JournalActionUtilisateurSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/JournalActionUtilisateurSearch.java
new file mode 100644
index 0000000..e350873
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/JournalActionUtilisateurSearch.java
@@ -0,0 +1,36 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.Gravite;
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.search.Search;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class JournalActionUtilisateurSearch {
+
+    @Search(fieldName = "dateCreation", operateur = SearchAnnotationOperateur.GREATER_OR_EQUALS_THAN)
+    private String dateDebut;
+
+    @Search(fieldName = "dateCreation", operateur = SearchAnnotationOperateur.LESS_OR_EQUALS_THAN)
+    private String dateFin;
+    
+    @Search(fieldName = "gravite", operateur = SearchAnnotationOperateur.EQUALS)
+    protected Gravite gravite;
+    
+    @Search(fieldName = "utilisateur", operateur = SearchAnnotationOperateur.LIKE)
+    protected String utilisateur;
+    
+    @Search(fieldName = "description", operateur = SearchAnnotationOperateur.LIKE)
+    protected String description;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/JournalConnexionUtilisateurSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/JournalConnexionUtilisateurSearch.java
new file mode 100644
index 0000000..00bb0fa
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/JournalConnexionUtilisateurSearch.java
@@ -0,0 +1,36 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.Gravite;
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.search.Search;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class JournalConnexionUtilisateurSearch {
+
+    @Search(fieldName = "dateCreation", operateur = SearchAnnotationOperateur.GREATER_OR_EQUALS_THAN)
+    private String dateDebut;
+
+    @Search(fieldName = "dateCreation", operateur = SearchAnnotationOperateur.LESS_OR_EQUALS_THAN)
+    private String dateFin;
+    
+    @Search(fieldName = "gravite", operateur = SearchAnnotationOperateur.EQUALS)
+    protected Gravite gravite;
+    
+    @Search(fieldName = "utilisateur", operateur = SearchAnnotationOperateur.LIKE)
+    protected String utilisateur;
+    
+    @Search(fieldName = "description", operateur = SearchAnnotationOperateur.LIKE)
+    protected String description;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/NoeudSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/NoeudSearch.java
new file mode 100644
index 0000000..43c89e5
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/NoeudSearch.java
@@ -0,0 +1,22 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.search.Search;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class NoeudSearch {
+
+    @Search(fieldName = "code", operateur = SearchAnnotationOperateur.EQUALS)
+    private String code;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ParticipantSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ParticipantSearch.java
new file mode 100644
index 0000000..e1fd101
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ParticipantSearch.java
@@ -0,0 +1,21 @@
+package com.megatim.fdxconsultation.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.search.Search;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class ParticipantSearch {
+
+    @Search(fieldName = "code", operateur = SearchAnnotationOperateur.LIKE)
+    private String code;
+
+    @Search(fieldName = "libelle", operateur = SearchAnnotationOperateur.LIKE)
+    private String libelle;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/PaysSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/PaysSearch.java
new file mode 100644
index 0000000..c26354d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/PaysSearch.java
@@ -0,0 +1,22 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.search.Search;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class PaysSearch {
+
+    @Search(fieldName = "code", operateur = SearchAnnotationOperateur.EQUALS)
+    private String code;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ReferentielSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ReferentielSearch.java
new file mode 100644
index 0000000..44cb38d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ReferentielSearch.java
@@ -0,0 +1,22 @@
+package com.megatim.fdxconsultation.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.enumeration.StatutReferentiel;
+import com.megatim.fdxcommons.model.search.Search;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class ReferentielSearch {
+
+    @Search(fieldName = "version", operateur = SearchAnnotationOperateur.LIKE)
+    private String version;
+
+    @Search(fieldName = "statutReferentiel", operateur = SearchAnnotationOperateur.EQUALS)
+    private StatutReferentiel statutReferentiel;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/RoleSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/RoleSearch.java
new file mode 100644
index 0000000..b573631
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/RoleSearch.java
@@ -0,0 +1,39 @@
+package com.megatim.fdxconsultation.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.EtatOperation;
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.model.search.Search;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Getter
+@Setter
+public class RoleSearch {
+    
+    @Search(fieldName = "libelle", operateur = SearchAnnotationOperateur.LIKE)
+    private String libelle;
+    
+    @Search(fieldName = "description", operateur = SearchAnnotationOperateur.LIKE )
+    private String description;
+    
+    @Search(fieldName = "admin", operateur = SearchAnnotationOperateur.EQUALS )
+    private Boolean admin = false;
+
+    @Search(fieldName = "superAdmin", operateur = SearchAnnotationOperateur.EQUALS )
+    private Boolean superAdmin = false;
+
+    @Search(fieldName = "megaAdmin", operateur = SearchAnnotationOperateur.EQUALS )
+    private Boolean megaAdmin = false;
+    
+    @Search(fieldName = "typeOperation", operateur = SearchAnnotationOperateur.EQUALS )
+    private TypeOperation typeOperation = TypeOperation.AJOUTER;
+    
+    @Search(fieldName = "etatOperation", operateur = SearchAnnotationOperateur.EQUALS )
+    private EtatOperation etatOperation = EtatOperation.ACTIF;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/RoutageSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/RoutageSearch.java
new file mode 100644
index 0000000..4ee371e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/RoutageSearch.java
@@ -0,0 +1,26 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.search.Search;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class RoutageSearch {
+
+    @Search(fieldName = "referentiel.version", operateur = SearchAnnotationOperateur.EQUALS)
+    private String referentielVersion;
+
+    @Search(fieldName = "typeFichier.code", operateur = SearchAnnotationOperateur.EQUALS)
+    private String codeTypeFichier;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/StructureLigneSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/StructureLigneSearch.java
new file mode 100644
index 0000000..6e7898b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/StructureLigneSearch.java
@@ -0,0 +1,22 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.search.Search;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class StructureLigneSearch {
+
+    @Search(fieldName = "id", operateur = SearchAnnotationOperateur.EQUALS)
+    private String id;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TableauBordGlobalSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TableauBordGlobalSearch.java
new file mode 100644
index 0000000..f3544f4
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TableauBordGlobalSearch.java
@@ -0,0 +1,28 @@
+package com.megatim.fdxconsultation.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.search.Search;
+import com.megatim.fdxconsultation.model.enums.TypeConfigurationTableauBord;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class TableauBordGlobalSearch {
+
+    @Search(fieldName = "typeFichier.code", operateur = SearchAnnotationOperateur.LIKE)
+    private String codeTypeFichier;
+
+    @Search(fieldName = "referentiel.version", operateur = SearchAnnotationOperateur.LIKE)
+    private String referentielVersion;
+
+    @Search(fieldName = "description", operateur = SearchAnnotationOperateur.LIKE)
+    private String description;
+
+    @Search(fieldName = "typeConfiguration", operateur = SearchAnnotationOperateur.EQUALS)
+    private TypeConfigurationTableauBord typeConfiguration = TypeConfigurationTableauBord.GLOBAL;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TableauBordSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TableauBordSearch.java
new file mode 100644
index 0000000..4beaf25
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TableauBordSearch.java
@@ -0,0 +1,24 @@
+package com.megatim.fdxconsultation.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.search.Search;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class TableauBordSearch {
+
+    @Search(fieldName = "user.userName", operateur = SearchAnnotationOperateur.EQUALS)
+    private String userName;
+
+    @Search(fieldName = "typeFichier.code", operateur = SearchAnnotationOperateur.EQUALS)
+    private String codeTypeFichier;
+
+    @Search(fieldName = "referentiel.version", operateur = SearchAnnotationOperateur.EQUALS)
+    private String referentielVersion;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TableauBordSpecificSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TableauBordSpecificSearch.java
new file mode 100644
index 0000000..78da5fb
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TableauBordSpecificSearch.java
@@ -0,0 +1,31 @@
+package com.megatim.fdxconsultation.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.search.Search;
+import com.megatim.fdxconsultation.model.enums.TypeConfigurationTableauBord;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class TableauBordSpecificSearch {
+
+    @Search(fieldName = "user.userName", operateur = SearchAnnotationOperateur.EQUALS)
+    private String userName;
+
+    @Search(fieldName = "typeFichier.code", operateur = SearchAnnotationOperateur.LIKE)
+    private String codeTypeFichier;
+
+    @Search(fieldName = "referentiel.version", operateur = SearchAnnotationOperateur.LIKE)
+    private String referentielVersion;
+
+    @Search(fieldName = "description", operateur = SearchAnnotationOperateur.LIKE)
+    private String description;
+
+    @Search(fieldName = "typeConfiguration", operateur = SearchAnnotationOperateur.EQUALS)
+    private TypeConfigurationTableauBord typeConfiguration = TypeConfigurationTableauBord.USER_SPECIFIC;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TransfertSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TransfertSearch.java
new file mode 100644
index 0000000..03411af
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TransfertSearch.java
@@ -0,0 +1,14 @@
+package com.megatim.fdxconsultation.model.searchentities;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Getter
+@Setter
+public class TransfertSearch {
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TypeFichierReferentielSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TypeFichierReferentielSearch.java
new file mode 100644
index 0000000..203ac6e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TypeFichierReferentielSearch.java
@@ -0,0 +1,28 @@
+package com.megatim.fdxconsultation.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.search.Search;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class TypeFichierReferentielSearch {
+
+    @Search(fieldName = "code", operateur = SearchAnnotationOperateur.LIKE)
+    private String code;
+
+    @Search(fieldName = "libelle", operateur = SearchAnnotationOperateur.LIKE)
+    private String libelle;
+
+    @Search(fieldName = "description", operateur = SearchAnnotationOperateur.LIKE)
+    private String description;
+
+    @Search(fieldName = "referentiel.version", operateur = SearchAnnotationOperateur.LESS_OR_EQUALS_THAN)
+    private String referentiel;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TypeFichierSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TypeFichierSearch.java
new file mode 100644
index 0000000..de473b5
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/TypeFichierSearch.java
@@ -0,0 +1,24 @@
+package com.megatim.fdxconsultation.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.search.Search;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class TypeFichierSearch {
+
+    @Search(fieldName = "code", operateur = SearchAnnotationOperateur.LIKE)
+    private String code;
+
+    @Search(fieldName = "libelle", operateur = SearchAnnotationOperateur.LIKE)
+    private String libelle;
+
+    @Search(fieldName = "description", operateur = SearchAnnotationOperateur.LIKE)
+    private String description;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/UserSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/UserSearch.java
new file mode 100644
index 0000000..24e2d8e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/UserSearch.java
@@ -0,0 +1,19 @@
+package com.megatim.fdxconsultation.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.search.Search;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Getter
+@Setter
+public class UserSearch {
+    
+    @Search(fieldName = "userName", operateur = SearchAnnotationOperateur.EQUALS)
+    private String userName;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ValidateurFichierConfigurationSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ValidateurFichierConfigurationSearch.java
new file mode 100644
index 0000000..e067659
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ValidateurFichierConfigurationSearch.java
@@ -0,0 +1,26 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.EtatIntegration;
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.search.Search;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class ValidateurFichierConfigurationSearch {
+
+    @Search(fieldName = "referentiel.version", operateur = SearchAnnotationOperateur.EQUALS)
+    private String referentielVersion;
+
+    @Search(fieldName = "typeFichier.code", operateur = SearchAnnotationOperateur.EQUALS)
+    private String codeTypeFichier;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ValidateurFichierSearch.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ValidateurFichierSearch.java
new file mode 100644
index 0000000..b1595bf
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/searchentities/ValidateurFichierSearch.java
@@ -0,0 +1,23 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.searchentities;
+
+import com.megatim.fdxcommons.model.enumeration.SearchAnnotationOperateur;
+import com.megatim.fdxcommons.model.search.Search;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+public class ValidateurFichierSearch {
+
+    @Search(fieldName = "id", operateur = SearchAnnotationOperateur.EQUALS)
+    private String id;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/settings/DisplayOptions.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/settings/DisplayOptions.java
new file mode 100644
index 0000000..3fd9b06
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/settings/DisplayOptions.java
@@ -0,0 +1,28 @@
+package com.megatim.fdxconsultation.model.settings;
+
+import com.megatim.fdxconsultation.model.base.BaseEntity;
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Setter
+@Getter
+@Entity
+@Table(name = "DISPLAY_OPTIONS")
+public class DisplayOptions extends BaseEntity implements Serializable {
+
+    private int auditAPI;
+    private int statParticipantAPI;
+    private int statPathAPI;
+    private int tableauBordAPI;
+
+    private int suiviEchangeStandalone;
+    private int tableauBordStandalone;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/CriteriaEntityPersisted.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/CriteriaEntityPersisted.java
new file mode 100644
index 0000000..794fb94
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/CriteriaEntityPersisted.java
@@ -0,0 +1,85 @@
+package com.megatim.fdxconsultation.model.stats;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxconsultation.model.base.BaseEntity;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.ElementCollection;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Entity
+@Getter
+@Setter
+@NoArgsConstructor
+public class CriteriaEntityPersisted extends BaseEntity implements Serializable {
+
+    private String nomColonne;
+
+    private Number criteriaNumericValue;
+
+    private LocalDateTime criteriaDateValue;
+
+    private String criteriaStringValue;
+
+    private Number criteriaNumericLowerBound;
+
+    private LocalDateTime criteriaDateLowerBound;
+
+    private String criteriaStringLowerBound;
+
+    private Number criteriaNumericUpperBound;
+
+    private LocalDateTime criteriaDateUpperBound;
+
+    private String criteriaStringUpperBound;
+
+    @ElementCollection(targetClass = Number.class, fetch = FetchType.EAGER)
+    private Set<Number> criteriaNumericListValue = new HashSet<>();
+
+    @ElementCollection(targetClass = LocalDateTime.class, fetch = FetchType.EAGER)
+    private Set<LocalDateTime> criteriaDateListValue = new HashSet<>();
+
+    @ElementCollection(targetClass = String.class, fetch = FetchType.EAGER)
+    private Set<String> criteriaStringListValue = new HashSet<>();
+
+    @Enumerated(EnumType.STRING)
+    private Operateur operateur;
+
+    @Enumerated(EnumType.STRING)
+    private CriteriaLogicConnector criteriaLogicConnector;
+
+    @OneToOne(mappedBy = "criterion")
+    private TableConfiguration tableConfiguration;
+
+    @ManyToOne(fetch = FetchType.LAZY)
+    private CriteriaEntityPersisted parent;
+
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "parent", fetch = FetchType.LAZY)
+    private List<CriteriaEntityPersisted> subCriterias = new ArrayList<>();
+
+    @JsonIgnore
+    public List<CriteriaEntityPersisted> getSubCriterias() {
+        return subCriterias;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/FonctionAggregationCriterion.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/FonctionAggregationCriterion.java
new file mode 100644
index 0000000..9f53335
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/FonctionAggregationCriterion.java
@@ -0,0 +1,53 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.stats;
+
+import com.megatim.fdxconsultation.model.enums.FonctionAggregationOperateur;
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.ElementCollection;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.SequenceGenerator;
+import javax.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+@Entity
+public class FonctionAggregationCriterion implements Serializable {
+
+    @Id
+    @SequenceGenerator(name = "SEQ_FONCT_AGGR_CRITERIA",
+            sequenceName = "SEQ_FONCT_AGGR_CRITERIA",
+            allocationSize = 1,
+            initialValue = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_FONCT_AGGR_CRITERIA")
+    private Long id;
+
+    @NotNull(message = "L'opérateur du critère sur la fonction d'aggrégation est obligatoire")
+    @Enumerated(EnumType.STRING)
+    private FonctionAggregationOperateur operateur;
+
+    private Number criteriaValue;
+
+    private Number criteriaLowerBound;
+
+    private Number criteriaNumericUpperBound;
+
+    @ElementCollection(targetClass = Number.class, fetch = FetchType.EAGER)
+    private Set<Number> criteriaNumericListValue = new HashSet<>();
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/TableConfiguration.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/TableConfiguration.java
new file mode 100644
index 0000000..791030b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/TableConfiguration.java
@@ -0,0 +1,101 @@
+package com.megatim.fdxconsultation.model.stats;
+
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+import com.megatim.fdxconsultation.model.base.BaseEntity;
+import com.megatim.fdxcommons.model.enumeration.FonctionAggregation;
+import com.megatim.fdxconsultation.model.enums.TypeResultatConfiguration;
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import javax.persistence.SequenceGenerator;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+@Entity
+@NoArgsConstructor
+public class TableConfiguration extends BaseEntity implements Serializable {
+
+    @Id
+    @SequenceGenerator(name = "SEQ_TABLE_CONF",
+            sequenceName = "SEQ_TABLE_CONF",
+            allocationSize = 1,
+            initialValue = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_TABLE_CONF")
+    private Long id;
+
+    @NotEmpty(message = "Le libellé est obligatoire")
+    private String libelle;
+
+    @OneToOne(cascade = CascadeType.ALL)
+    @JoinColumn(name = "targeted_column_id", referencedColumnName = "id")
+    private TableauBordColumn targetedColumn;
+
+    @OneToMany(mappedBy = "tableConfiguration", cascade = CascadeType.ALL)
+    private Set<TableauBordColumn> groupingColumns = new HashSet<>();
+
+    @Enumerated(EnumType.STRING)
+    @NotNull(message = "La fonction d'aggrégation est obligatoire")
+    private FonctionAggregation fonctionAggregation;
+
+    @Enumerated(EnumType.STRING)
+    @CriteriaEntitySearch(libelle = "Type de Résultat")
+    private TypeResultatConfiguration typeResultatConfiguration;
+
+    @ManyToOne
+    @JoinColumn(name = "tableaubord_id", referencedColumnName = "id")
+    private TableauBord tableauBord;
+
+    @OneToOne(cascade = CascadeType.ALL)
+    @JoinColumn(name = "criterion_id", referencedColumnName = "id")
+    private CriteriaEntityPersisted criterion;
+
+    private String color = "#527ccc";
+
+    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
+    @JoinColumn(name = "fonctionAggCriterion_id", referencedColumnName = "id")
+    private FonctionAggregationCriterion fonctionAggregationCriterion;
+
+    @Override
+    public int hashCode() {
+        int hash = 3;
+        hash = 71 * hash + Objects.hashCode(this.libelle);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final TableConfiguration other = (TableConfiguration) obj;
+        return Objects.equals(this.libelle, other.libelle);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/TableauBord.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/TableauBord.java
new file mode 100644
index 0000000..eeefcd1
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/TableauBord.java
@@ -0,0 +1,81 @@
+package com.megatim.fdxconsultation.model.stats;
+
+import com.megatim.fdxconsultation.model.enums.TypeConfigurationTableauBord;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.base.BaseEntity;
+import java.io.Serializable;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.SequenceGenerator;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+@Entity
+@NoArgsConstructor
+public class TableauBord extends BaseEntity implements Serializable {
+
+    @Id
+    @SequenceGenerator(name = "SEQ_TABLEAU_BORD",
+            sequenceName = "SEQ_TABLEAU_BORD",
+            allocationSize = 1,
+            initialValue = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_TABLEAU_BORD")
+    private Long id;
+
+    @ManyToOne
+    @CriteriaEntitySearch(libelle = "Utilisateur", fieldName = "user.userName")
+    private User user;
+
+    @ManyToOne
+    @NotNull(message = "Le type de fichier associé au tableau de bord est obligatoire")
+    @CriteriaEntitySearch(libelle = "TypeFichier", fieldName = "typeFichier.code")
+    private TypeFichier typeFichier;
+
+    @ManyToOne
+    @NotNull(message = "Le référentiel associé au tableau de bord est obligatoire")
+    @CriteriaEntitySearch(libelle = "Référentiel", fieldName = "referentiel.version")
+    private Referentiel referentiel;
+
+    @NotEmpty(message = "La description du tableau de bord de bord est obligatoire")
+    private String description;
+
+    @Enumerated(EnumType.STRING)
+    @NotNull(message = "Le type de configuration est obligatoire")
+    @CriteriaEntitySearch(libelle = "Type de Configuration")
+    private TypeConfigurationTableauBord typeConfiguration = TypeConfigurationTableauBord.USER_SPECIFIC;
+
+    @OneToMany(mappedBy = "tableauBord", cascade = CascadeType.ALL, orphanRemoval = true)
+    private Set<TableConfiguration> tableConfigurations = new HashSet<>();
+
+    public void addTableConfiguration(TableConfiguration tableConfiguration) {
+        tableConfigurations.add(tableConfiguration);
+        tableConfiguration.setTableauBord(this);
+    }
+
+    public void removeTableConfiguration(TableConfiguration tableConfiguration) {
+        tableConfigurations.remove(tableConfiguration);
+        tableConfiguration.setTableauBord(null);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/TableauBordColumn.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/TableauBordColumn.java
new file mode 100644
index 0000000..a4b2a36
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/TableauBordColumn.java
@@ -0,0 +1,76 @@
+package com.megatim.fdxconsultation.model.stats;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxconsultation.model.base.BaseEntity;
+import java.io.Serializable;
+import java.util.Objects;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.SequenceGenerator;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+@Entity
+@NoArgsConstructor
+@AllArgsConstructor
+public class TableauBordColumn extends BaseEntity implements Serializable {
+
+    @Id
+    @SequenceGenerator(name = "SEQ_TABLEAU_BORD_COLUMN",
+            sequenceName = "SEQ_TABLEAU_BORD_COLUMN",
+            allocationSize = 1,
+            initialValue = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_TABLEAU_BORD_COLUMN")
+    private Long id;
+
+    @NotEmpty(message = "Le nom de la colonne est obligatoire")
+    private String name;
+
+    @NotNull(message = "Le type de données est obligatoire")
+    @Enumerated(EnumType.STRING)
+    private TypeDonnee typeDonnee;
+
+    @ManyToOne
+    private TableConfiguration tableConfiguration;
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 37 * hash + Objects.hashCode(this.name);
+        hash = 37 * hash + Objects.hashCode(this.typeDonnee);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final TableauBordColumn other = (TableauBordColumn) obj;
+        if (!Objects.equals(this.name, other.name)) {
+            return false;
+        }
+        return this.typeDonnee == other.typeDonnee;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/dto/TableConfigurationResponse.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/dto/TableConfigurationResponse.java
new file mode 100644
index 0000000..a108a23
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/dto/TableConfigurationResponse.java
@@ -0,0 +1,43 @@
+package com.megatim.fdxconsultation.model.stats.dto;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.enumeration.FonctionAggregation;
+import com.megatim.fdxconsultation.model.enums.TypeResultatConfiguration;
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+import lombok.Getter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Getter
+public class TableConfigurationResponse implements Serializable {
+
+    private final String libelle;
+    private final FonctionAggregation fonctionAggregation;
+    private final TypeResultatConfiguration typeResultatConfiguration;
+    private final TableauBordColumnResponse targetedColumn;
+    private final Set<TableauBordColumnResponse> groupingColumns = new HashSet<>();
+    private final CriteriaEntityFromView criterion;
+    private final String color;
+
+    public TableConfigurationResponse(
+            String libelle,
+            FonctionAggregation fonctionAggregation,
+            TypeResultatConfiguration typeResultatConfiguration,
+            TableauBordColumnResponse targetedColumn,
+            Set<TableauBordColumnResponse> groupingColumns,
+            CriteriaEntityFromView criterion,
+            String color
+    ) {
+        this.libelle = libelle;
+        this.fonctionAggregation = fonctionAggregation;
+        this.typeResultatConfiguration = typeResultatConfiguration;
+        this.targetedColumn = targetedColumn;
+        this.criterion = criterion;
+        this.color = color;
+        this.groupingColumns.addAll(groupingColumns);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/dto/TableauBordColumnResponse.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/dto/TableauBordColumnResponse.java
new file mode 100644
index 0000000..28e6b59
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/dto/TableauBordColumnResponse.java
@@ -0,0 +1,21 @@
+package com.megatim.fdxconsultation.model.stats.dto;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import java.io.Serializable;
+import lombok.Getter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Getter
+public class TableauBordColumnResponse implements Serializable {
+
+    private final String name;
+    private final TypeDonnee typeDonnee;
+
+    public TableauBordColumnResponse(String name, TypeDonnee typeDonnee) {
+        this.name = name;
+        this.typeDonnee = typeDonnee;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/dto/TableauBordFlatResponse.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/dto/TableauBordFlatResponse.java
new file mode 100644
index 0000000..ffd0156
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/dto/TableauBordFlatResponse.java
@@ -0,0 +1,33 @@
+package com.megatim.fdxconsultation.model.stats.dto;
+
+import com.megatim.fdxcommons.model.dtos.referentiel.ReferentielSlimDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.TypeFichierSlimDto;
+import com.megatim.fdxconsultation.model.enums.TypeConfigurationTableauBord;
+import java.io.Serializable;
+import lombok.Getter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Getter
+public class TableauBordFlatResponse implements Serializable {
+
+    private final String description;
+    private final TypeFichierSlimDto typeFichier;
+    private final ReferentielSlimDto referentiel;
+    private final TypeConfigurationTableauBord typeConfiguration;
+
+    public TableauBordFlatResponse(
+            String description,
+            TypeFichierSlimDto typeFichier,
+            ReferentielSlimDto referentiel,
+            TypeConfigurationTableauBord typeConfiguration) {
+
+        this.description = description;
+        this.typeFichier = typeFichier;
+        this.referentiel = referentiel;
+        this.typeConfiguration = typeConfiguration;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/dto/TableauBordRequest.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/dto/TableauBordRequest.java
new file mode 100644
index 0000000..b118919
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/dto/TableauBordRequest.java
@@ -0,0 +1,33 @@
+package com.megatim.fdxconsultation.model.stats.dto;
+
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.model.dto.stats.TableConfigurationDto;
+import java.util.HashSet;
+import java.util.Set;
+import javax.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Getter
+@Setter
+public class TableauBordRequest {
+    
+    private Long id;
+    
+    @NotNull(message = "La description est obligatoire")
+    private String description;
+
+    @NotNull(message = "La description est obligatoire")
+    private TypeFichier typeFichier;
+    
+    @NotNull(message = "Le référentiel est obligatoire")
+    private Referentiel referentiel;
+    
+    private Set<TableConfigurationDto> tableConfigurations = new HashSet<>();
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/dto/TableauBordResponse.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/dto/TableauBordResponse.java
new file mode 100644
index 0000000..da4c81a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/stats/dto/TableauBordResponse.java
@@ -0,0 +1,36 @@
+package com.megatim.fdxconsultation.model.stats.dto;
+
+import com.megatim.fdxcommons.model.dtos.referentiel.ReferentielSlimDto;
+import com.megatim.fdxcommons.model.dtos.referentiel.TypeFichierSlimDto;
+import com.megatim.fdxconsultation.model.enums.TypeConfigurationTableauBord;
+import java.io.Serializable;
+import java.util.Set;
+import lombok.Getter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Getter
+public class TableauBordResponse implements Serializable {
+
+    private final String description;
+    private final TypeFichierSlimDto typeFichier;
+    private final ReferentielSlimDto referentiel;
+    private TypeConfigurationTableauBord typeConfiguration;
+    private final Set<TableConfigurationResponse> tableConfigurations;
+
+    public TableauBordResponse(
+            String description,
+            TypeFichierSlimDto typeFichier,
+            ReferentielSlimDto referentiel,
+            TypeConfigurationTableauBord typeConfiguration,
+            Set<TableConfigurationResponse> tableConfigurations
+    ) {
+        this.description = description;
+        this.typeFichier = typeFichier;
+        this.referentiel = referentiel;
+        this.tableConfigurations = tableConfigurations;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/AgentConfigurationEntity.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/AgentConfigurationEntity.java
new file mode 100644
index 0000000..8d404e9
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/AgentConfigurationEntity.java
@@ -0,0 +1,55 @@
+package com.megatim.fdxconsultation.model.supervision;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.SequenceGenerator;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+@Entity
+public class AgentConfigurationEntity implements Serializable {
+
+    @SequenceGenerator(name = "SEQ_AGENT_CONFIGURATION",
+            sequenceName = "SEQ_AGENT_CONFIGURATION",
+            allocationSize = 1,
+            initialValue = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_AGENT_CONFIGURATION")
+    @Column(name = "ID")
+    @Id
+    private Long id;
+
+    @NotEmpty(message = "Le code de l'agent est obligatoire")
+    private String agentCode;
+
+    @NotEmpty(message = "L'adresse IP de l'agent est obligatoire")
+    private String agentAddress;
+
+    @NotEmpty(message = "L'adresse MAC de l'agent est obligatoire")
+    private String agentMAC;
+
+    private boolean statut;
+
+    @Enumerated(EnumType.STRING)
+    @NotNull(message = "Le statut de la configuration est obligatoire")
+    private StatutConfiguration statutConfiguration;
+    
+    @JsonIgnore
+    @ManyToOne
+    private StandaloneServerStateEntity standaloneServerState;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/EtatTransfert.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/EtatTransfert.java
new file mode 100644
index 0000000..3f7e29e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/EtatTransfert.java
@@ -0,0 +1,82 @@
+package com.megatim.fdxconsultation.model.supervision;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public enum EtatTransfert {
+    //ETAT D'INTEGRATION
+    EN_ATTENTE_INTEGRATION("EN ATTENTE INTEGRATION"),
+    
+    //PHASE DE PREPARATION DU TRANSFERT
+    EN_ATTENTE_PREPARATION("EN ATTENTE DE PREPARATION"),
+    EN_COURS_DE_PREPARATION("EN COURS DE PREPARATION"),
+    ECHEC_NOMENCLATURE("ECHEC DE NOMENCLATURE DE FICHIER"),
+    ECHEC_CONTENU("ECHEC DE VALIDATION DE CONTENU DU FICHIER"),
+    
+    //PHASE DE CALCUL DE L'EMPREINTE
+    EN_ATTENTE_VALIDATION_EMPREINTE("EN ATTENTE DE VALIDATION DE L'EMPREINTE"),
+    EN_ATTENTE_RECEPTION_EMPREINTE("EN ATTENTE DE RECEPTION DE L'EMPREINTE"),
+    FILE_NOT_FOUND("FILE NOT FOUND"),
+    FILE_EXCEPTION("FILE EXCEPTION"),
+    ECHEC_EMPREINTE("ECHEC DE L'EMPREINTE"),
+    ATTENTE_ROUTAGE("ATTENTE ROUTAGE"),
+    
+    //PHASE DE TRANSMISSION DES TRANSFERTS VALIDES
+    EN_ATTENTE("EN ATTENTE"),
+    EN_COURS("EN COURS"),
+    TERMINE("TERMINE"),
+    ECHOUE("ECHOUE");
+
+    private final String value;
+
+    private EtatTransfert(String value) {
+        this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+        return value;
+    }
+
+    public static EtatTransfert fromValeur(String value) {
+        switch (value) {
+            //PREPARATION
+            case "EN ATTENTE DE PREPARATION":
+                return EtatTransfert.EN_ATTENTE_PREPARATION;
+            case "EN COURS DE PREPARATION":
+                return EtatTransfert.EN_COURS_DE_PREPARATION;
+            case "ECHEC DE NOMENCLATURE DE FICHIER":
+                return EtatTransfert.ECHEC_NOMENCLATURE;
+            case "ECHEC DE VALIDATION DE CONTENU DU FICHIER":
+                return EtatTransfert.ECHEC_CONTENU;
+
+            //CALCUL DE L'EMPREINTE
+            case "EN ATTENTE DE VALIDATION DE L'EMPREINTE":
+                return EtatTransfert.EN_ATTENTE_VALIDATION_EMPREINTE;
+            case "EN ATTENTE DE RECEPTION DE L'EMPREINTE":
+                return EtatTransfert.EN_ATTENTE_RECEPTION_EMPREINTE;
+            case "ECHEC DE L'EMPREINTE":
+                return EtatTransfert.ECHEC_EMPREINTE;
+
+            //TRANSMISSION
+            case "EN ATTENTE":
+                return EtatTransfert.EN_ATTENTE;
+            case "EN COURS":
+                return EtatTransfert.EN_COURS;
+            case "TERMINE":
+                return EtatTransfert.TERMINE;
+            case "ECHOUE":
+                return EtatTransfert.ECHOUE;
+            default:
+                return null;
+        }
+    }
+
+    @Override
+    public String toString() {
+        return value;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/SensTransfert.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/SensTransfert.java
new file mode 100644
index 0000000..e44c388
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/SensTransfert.java
@@ -0,0 +1,41 @@
+package com.megatim.fdxconsultation.model.supervision;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public enum SensTransfert {
+
+    ENVOI("ENVOI"),
+    RECEPTION("RECEPTION");
+
+    private final String value;
+
+    private SensTransfert(String value) {
+        this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+        return value;
+    }
+
+    public static SensTransfert fromValeur(String value) {
+        switch (value) {
+            case "ENVOI":
+                return SensTransfert.ENVOI;
+            case "RECEPTION":
+                return SensTransfert.RECEPTION;
+            default:
+                return null;
+        }
+    }
+
+    @Override
+    public String toString() {
+        return value;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/StandaloneServerStateEntity.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/StandaloneServerStateEntity.java
new file mode 100644
index 0000000..6fd6e28
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/StandaloneServerStateEntity.java
@@ -0,0 +1,73 @@
+package com.megatim.fdxconsultation.model.supervision;
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.ElementCollection;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.SequenceGenerator;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author ASUS
+ */
+@Getter
+@Setter
+@Entity
+public class StandaloneServerStateEntity implements Serializable {
+
+    @SequenceGenerator(name = "SEQ_STANDALONE_SERVER_STATE",
+            sequenceName = "SEQ_STANDALONE_SERVER_STATE",
+            allocationSize = 1,
+            initialValue = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_STANDALONE_SERVER_STATE")
+    @Column(name = "ID")
+    @Id
+    private Long id;
+
+    @NotEmpty(message = "Le référentiel est obligatoire")
+    private String currentReferential;
+
+    //Configuration serveur
+    private String serverAddress;
+    private int closingDelay;
+
+    @ElementCollection(targetClass = Integer.class, fetch = FetchType.EAGER)
+    private List<Integer> portNumbers;
+
+    private String integrationPath;
+    private String referentialIntegrationPath;
+    private String fileIntegrationPath;
+
+    //Option d'affichage
+    private int transfertDisplayOptions;
+    private int logDisplayOptions;
+
+    //Répertoires de BAL
+    private String inDir;
+    private String outDir;
+    private String errDir;
+    private String tmpDir;
+
+    @Enumerated(EnumType.STRING)
+    @NotNull(message = "Le statut de la configuration est obligatoire")
+    private StatutConfiguration statutConfiguration;
+
+    //Configurations des agents
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "standaloneServerState")
+    private Set<AgentConfigurationEntity> agentConfigurations = new HashSet<>();
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/StatutConfiguration.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/StatutConfiguration.java
new file mode 100644
index 0000000..f4b4faa
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/StatutConfiguration.java
@@ -0,0 +1,13 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Enum.java to edit this template
+ */
+package com.megatim.fdxconsultation.model.supervision;
+
+/**
+ *
+ * @author ASUS
+ */
+public enum StatutConfiguration {
+    ARCHIVE, EN_COURS;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/SupervisionData.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/SupervisionData.java
new file mode 100644
index 0000000..bbdf85f
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/SupervisionData.java
@@ -0,0 +1,17 @@
+package com.megatim.fdxconsultation.model.supervision;
+
+import java.util.List;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Getter
+@Setter
+public class SupervisionData {
+
+    private List<Transfert> transferts;
+    private StandaloneServerStateEntity standaloneServerState;
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/Transfert.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/Transfert.java
new file mode 100644
index 0000000..0ccd64a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/Transfert.java
@@ -0,0 +1,90 @@
+package com.megatim.fdxconsultation.model.supervision;
+
+import com.megatim.fdxcommons.model.referentiel.LocalDateTimeAdapter;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.SequenceGenerator;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import lombok.Data;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Data
+@Entity
+public class Transfert implements Serializable {
+
+    @SequenceGenerator(name = "TRANSFERT_TOKEN",
+            sequenceName = "TRANSFERT_TOKEN",
+            allocationSize = 1,
+            initialValue = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "TRANSFERT_TOKEN")
+    @Column(name = "ID")
+    @Id
+    private Long id;
+
+    private String codeAgent;
+
+    private String codeAgentRecepteur;
+
+    @Enumerated(EnumType.STRING)
+    private SensTransfert sensTransfert;
+
+    private String nomFichier;
+
+    private String typeFichier;
+
+    private double taille;
+
+    private double sended;
+
+    @Enumerated(EnumType.STRING)
+    private EtatTransfert etatTransfert;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateCreation;
+
+    private LocalDateTime dateDebut;
+
+    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
+    private LocalDateTime dateFin;
+
+    public Transfert() {
+    }
+
+    public Transfert(
+            String codeAgent,
+            String codeAgentRecepteur,
+            SensTransfert sensTransfert,
+            EtatTransfert etatTransfert,
+            String nomFichier,
+            String typeFichier,
+            double taille,
+            double sended,
+            LocalDateTime dateCreation,
+            LocalDateTime dateDebut,
+            LocalDateTime dateFin
+    ) {
+
+        this.codeAgent = codeAgent;
+        this.codeAgentRecepteur = codeAgentRecepteur;
+        this.sensTransfert = sensTransfert;
+        this.etatTransfert = etatTransfert;
+        this.nomFichier = nomFichier;
+        this.typeFichier = typeFichier;
+        this.taille = taille;
+        this.sended = sended;
+        this.dateCreation = dateCreation;
+        this.dateDebut = dateDebut;
+        this.dateFin = dateFin;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/dto/StandaloneDashboardRequest.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/dto/StandaloneDashboardRequest.java
new file mode 100644
index 0000000..c1e3e64
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/dto/StandaloneDashboardRequest.java
@@ -0,0 +1,20 @@
+package com.megatim.fdxconsultation.model.supervision.dto;
+
+import com.megatim.fdxconsultation.model.supervision.SensTransfert;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Getter
+@Setter
+public class StandaloneDashboardRequest {
+
+    private LocalDateTime dateDebut;
+    private LocalDateTime dateFin;
+    private SensTransfert sens;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/dto/StandaloneDashboardResponse.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/dto/StandaloneDashboardResponse.java
new file mode 100644
index 0000000..4a39dc4
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/dto/StandaloneDashboardResponse.java
@@ -0,0 +1,25 @@
+package com.megatim.fdxconsultation.model.supervision.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Getter
+@Setter
+public class StandaloneDashboardResponse {
+    
+    private long totalTransfert;
+    private long transfertReussie;
+    private long transfertAttente;
+    private long totalTransfertEchec;
+    private long totalTransfertManuel;
+    private long totalTransfertAutomatique;
+    private double tailleTotale;
+    private double tailleMoyenne;
+    private double vitesseMoyenne;
+    private long nombreTypeFichier;
+
+}
diff --git a/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/dto/SupervisionFilterModalFormRequest.java b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/dto/SupervisionFilterModalFormRequest.java
new file mode 100644
index 0000000..bf495d3
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-model/src/main/java/com/megatim/fdxconsultation/model/supervision/dto/SupervisionFilterModalFormRequest.java
@@ -0,0 +1,25 @@
+package com.megatim.fdxconsultation.model.supervision.dto;
+
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.model.supervision.EtatTransfert;
+import com.megatim.fdxconsultation.model.supervision.SensTransfert;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Getter
+@Setter
+public class SupervisionFilterModalFormRequest {
+
+    private String nomFichier;
+    private TypeFichier typeFichier;
+    private LocalDateTime dateDebut;
+    private LocalDateTime dateFin;
+    private SensTransfert sensTransfert;
+    private EtatTransfert etatTransfert;
+
+}
diff --git a/fdx-consultation/fdxconsultation-reporting/.gitignore b/fdx-consultation/fdxconsultation-reporting/.gitignore
new file mode 100644
index 0000000..b24d71e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-reporting/.gitignore
@@ -0,0 +1,50 @@
+# These are some examples of commonly ignored file patterns.
+# You should customize this list as applicable to your project.
+# Learn more about .gitignore:
+#     https://www.atlassian.com/git/tutorials/saving-changes/gitignore
+
+# Node artifact files
+node_modules/
+dist/
+
+# Compiled Java class files
+*.class
+
+# Compiled Python bytecode
+*.py[cod]
+
+# Log files
+*.log
+
+# Package files
+*.jar
+
+# Maven
+target/
+dist/
+
+# JetBrains IDE
+.idea/
+
+# Unit test reports
+TEST*.xml
+
+# Generated by MacOS
+.DS_Store
+
+# Generated by Windows
+Thumbs.db
+
+# Applications
+*.app
+*.exe
+*.war
+
+# Large media files
+*.mp4
+*.tiff
+*.avi
+*.flv
+*.mov
+*.wmv
+
diff --git a/fdx-consultation/fdxconsultation-reporting/nb-configuration.xml b/fdx-consultation/fdxconsultation-reporting/nb-configuration.xml
new file mode 100644
index 0000000..a65c451
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-reporting/nb-configuration.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+    <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+        <!--
+Properties that influence various parts of the IDE, especially code formatting and the like. 
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+        <netbeans.hint.jdkPlatform>JDK_1.8</netbeans.hint.jdkPlatform>
+    </properties>
+</project-shared-configuration>
diff --git a/fdx-consultation/fdxconsultation-reporting/pom.xml b/fdx-consultation/fdxconsultation-reporting/pom.xml
new file mode 100644
index 0000000..0fc26b9
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-reporting/pom.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+        <groupId>com.megatim.fdxconsultation</groupId>
+        <artifactId>fdxconsultation</artifactId>
+        <version>1.0</version>
+    </parent>
+    
+    <groupId>com.megatim.fdxconsultation.reporting</groupId>
+    <artifactId>fdxconsultation-reporting</artifactId>
+    <version>1.0</version>
+    <packaging>jar</packaging>
+    
+    <properties>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <jakartaee>8.0</jakartaee>
+        <version.lombok>1.18.18</version.lombok>
+        <version.mapstruct>1.4.2.Final</version.mapstruct>
+        <version.mapstruct-lombok>0.2.0</version.mapstruct-lombok>
+    </properties>
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>${version.lombok}</version>
+            <optional>true</optional>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.mapstruct</groupId>
+            <artifactId>mapstruct</artifactId>
+            <version>${version.mapstruct}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok-mapstruct-binding</artifactId>
+            <version>${version.mapstruct-lombok}</version>
+        </dependency>
+    </dependencies>    
+    <build>
+        <plugins>
+            <!-- ... -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.5.1</version>
+                <configuration>
+                    <source>1.8</source> 
+                    <target>1.8</target> 
+                    <annotationProcessorPaths>
+                        <path>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                            <version>${version.lombok}</version>
+                        </path>
+                        <path>
+                            <groupId>org.mapstruct</groupId>
+                            <artifactId>mapstruct-processor</artifactId>
+                            <version>${version.mapstruct}</version>
+                        </path>
+                        <path>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok-mapstruct-binding</artifactId>
+                            <version>${version.mapstruct-lombok}</version>
+                        </path>
+                    </annotationProcessorPaths>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+    
+    <name>fdxconsultation-reporting</name>
+    
+</project>
\ No newline at end of file
diff --git a/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/administration/JournalActionUtilisateurReporting.java b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/administration/JournalActionUtilisateurReporting.java
new file mode 100644
index 0000000..e10066d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/administration/JournalActionUtilisateurReporting.java
@@ -0,0 +1,44 @@
+package com.megatim.fdxconsultation.reporting.model.administration;
+
+import com.megatim.export.excel.annotations.ExportToExcel;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author DYNABOOK
+ */
+@Getter
+@Setter
+public class JournalActionUtilisateurReporting {
+
+    private Long id;
+    
+    @ExportToExcel(entete = "Description", position = 2, width = 60)
+    @PrintColumn(libelle = "Description", rang = 2)
+    private String message;
+    
+    @ExportToExcel(entete = "Utilisateur", position = 5, width = 60)
+    @PrintColumn(libelle = "Utilisateur", rang = 5)
+    private String userName;
+    
+    @ExportToExcel(entete = "Date et heure", position = 1, width = 60)
+    @PrintColumn(libelle = "Date et heure", rang = 1)
+    private String dateAction;
+    
+    @ExportToExcel(entete = "Adresse IP", position = 4, width = 60)
+    @PrintColumn(libelle = "Adresse IP", rang = 4)
+    private String ipAddress;
+    
+    private Integer status;
+    
+    @ExportToExcel(entete = "Navigateur", position = 3, width = 60)
+    @PrintColumn(libelle = "Navigateur", rang = 3)
+    private String userAgent;
+    
+    private String relativePath;    
+    private String httpMethod;
+
+}
diff --git a/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/administration/JournalConnexionUtilisateurReporting.java b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/administration/JournalConnexionUtilisateurReporting.java
new file mode 100644
index 0000000..206641c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/administration/JournalConnexionUtilisateurReporting.java
@@ -0,0 +1,42 @@
+package com.megatim.fdxconsultation.reporting.model.administration;
+
+import com.megatim.export.excel.annotations.ExportToExcel;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author DYNABOOK
+ */
+@Getter
+@Setter
+public class JournalConnexionUtilisateurReporting {
+
+    private Long id;
+    
+    @ExportToExcel(entete = "Description", position = 2, width = 60)
+    @PrintColumn(libelle = "Description", rang = 2)
+    private String message;
+    
+    private String userName;
+    
+    @ExportToExcel(entete = "Date et heure", position = 1, width = 60)
+    @PrintColumn(libelle = "Date et heure", rang = 1)
+    private String dateAction;
+    
+    @ExportToExcel(entete = "Adresse IP", position = 4, width = 60)
+    @PrintColumn(libelle = "Adresse IP", rang = 4)
+    private String ipAddress;
+    
+    private Integer status;
+    
+    @ExportToExcel(entete = "Navigateur", position = 3, width = 60)
+    @PrintColumn(libelle = "Navigateur", rang = 3)
+    private String userAgent;
+    
+    private String relativePath;
+    
+    private String httpMethod;
+}
diff --git a/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/administration/RoleReporting.java b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/administration/RoleReporting.java
new file mode 100644
index 0000000..2d643df
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/administration/RoleReporting.java
@@ -0,0 +1,75 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.reporting.model.administration;
+
+
+
+import com.megatim.export.excel.annotations.ExportToExcel;
+import com.megatim.fdxcommons.model.enumeration.EtatOperation;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import java.util.Date;
+import java.util.List;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author bissey
+ */
+@Getter
+@Setter
+public class RoleReporting {
+
+    private Long id;
+
+    protected String idGenerer;
+
+    @ExportToExcel(entete = "Libellé", position = 1, width = 60)
+    @PrintColumn(libelle = "Libellé", rang = 1)
+    private String libelle;
+
+    @ExportToExcel(entete = "Description", position = 2, width = 60)
+    @PrintColumn(libelle = "Description", rang = 2)
+    private String description;
+
+    private boolean admin;
+
+    private boolean superAdmin;
+
+    private boolean megaAdmin;
+    
+    private String typeOperation;
+
+    @ExportToExcel(entete = "Etat", position = 3, width = 60)
+    @PrintColumn(libelle = "Etat", rang = 3)
+    private String etatOperation;
+
+    @ExportToExcel(entete = "Nbre utilisateur(s)", position = 4, width = 60)
+    @PrintColumn(libelle = "Nbre utilisateur(s)", rang = 4)
+    private int nbreUtilisateur;
+
+    @ExportToExcel(entete = "Date création", position = 5, width = 60)
+    @PrintColumn(libelle = "Date création", rang = 5)
+    private String dateCreation;
+
+    @ExportToExcel(entete = "Crée par", position = 6, width = 60)
+    @PrintColumn(libelle = "Crée par", rang = 6)
+    private String utilisateurCreation;
+
+    @ExportToExcel(entete = "Date Dern. Mod.", position = 7, width = 60)
+    @PrintColumn(libelle = "Date Dern. Mod.", rang = 7)
+    private String dateDerniereModification;
+
+    @ExportToExcel(entete = "Modifié par", position = 8, width = 60)
+    @PrintColumn(libelle = "Modifié par", rang = 8)
+    private String utilisateurModification;
+
+    private String dateSuppression;
+
+    private String utilisateurSuppression;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/administration/UserReporting.java b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/administration/UserReporting.java
new file mode 100644
index 0000000..9c0964c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/administration/UserReporting.java
@@ -0,0 +1,74 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.reporting.model.administration;
+
+import com.megatim.export.excel.annotations.ExportToExcel;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import lombok.Getter;
+import lombok.Setter;
+
+
+/**
+ *
+ * @author bissey
+ */
+@Getter
+@Setter
+public class UserReporting {
+    
+    private Long id;
+   
+    @ExportToExcel(entete = "Nom utilisateur", position = 3, width = 60)
+    @PrintColumn(libelle = "Nom utilisateur", rang = 3)
+    private String userName;
+   
+    @ExportToExcel(entete = "Prénom (s)", position = 2, width = 60)
+    @PrintColumn(libelle = "Prénom (s)", rang = 2)
+    private String firstName;
+    
+    @ExportToExcel(entete = "Nom (s)", position = 1, width = 60)
+    @PrintColumn(libelle = "Nom (s)", rang = 1)
+    private String lastName;
+    
+    private int expirationDelay;
+    
+    private int alertDelay;
+    
+    private int attempsNumber;
+    
+    private int attemps;
+    
+    private boolean locked;
+    
+    private boolean active;
+    
+    private boolean connected;
+    
+    @ExportToExcel(entete = "Statut", position = 4, width = 60)
+    @PrintColumn(libelle = "Statut", rang = 4)
+    private String etatOperation;
+    
+    @ExportToExcel(entete = "Groupe utilisateur", position = 5, width = 60)
+    @PrintColumn(libelle = "Groupe utilisateur", rang = 5)
+    private String role;
+    
+    @ExportToExcel(entete = "Date création", position = 6, width = 60)
+    @PrintColumn(libelle = "Date création", rang = 6)
+    private String dateCreation;
+    
+    @ExportToExcel(entete = "Crée par", position = 7, width = 60)
+    @PrintColumn(libelle = "Crée par", rang = 7)
+    private String utilisateurCreation;
+    
+    @ExportToExcel(entete = "Date Dern. Mod.", position = 8, width = 60)
+    @PrintColumn(libelle = "Date Dern. Mod.", rang = 8)
+    private String dateDerniereModification;
+    
+    @ExportToExcel(entete = "Modifié par", position = 9, width = 60)
+    @PrintColumn(libelle = "Modifié par", rang = 9)
+    private String utilisateurModification;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/api/token/ApiTokenReporting.java b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/api/token/ApiTokenReporting.java
new file mode 100644
index 0000000..d2042ec
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/api/token/ApiTokenReporting.java
@@ -0,0 +1,53 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.reporting.model.api.token;
+
+
+
+import com.megatim.export.excel.annotations.ExportToExcel;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author bissey
+ */
+@Getter
+@Setter
+public class ApiTokenReporting {
+
+    private Long id;
+
+    @ExportToExcel(entete = "Participant", position = 1, width = 60)
+    @PrintColumn(libelle = "Participant", rang = 1)
+    private String participant;
+
+    @ExportToExcel(entete = "Statut", position = 1, width = 60)
+    @PrintColumn(libelle = "Statut", rang = 2)
+    private String apiTokenStatut;
+    
+    @ExportToExcel(entete = "Date première génération", position = 3, width = 60)
+    @PrintColumn(libelle = "Date première génération", rang = 3)
+    private String dateCreation;
+
+    @ExportToExcel(entete = "Généré par", position = 4, width = 60)
+    @PrintColumn(libelle = "Généré par", rang = 4)
+    private String utilisateurCreation;
+
+    @ExportToExcel(entete = "Date dernière regén.", position = 5, width = 60)
+    @PrintColumn(libelle = "Date dernière regén.", rang = 5)
+    private String dateDerniereModification;
+
+    @ExportToExcel(entete = "Regénéré par", position = 6, width = 60)
+    @PrintColumn(libelle = "Regénéré par", rang = 6)
+    private String utilisateurModification;
+
+    private String dateSuppression;
+
+    private String utilisateurSuppression;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/configuration/CodeStatutHttpReporting.java b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/configuration/CodeStatutHttpReporting.java
new file mode 100644
index 0000000..96d3c03
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/configuration/CodeStatutHttpReporting.java
@@ -0,0 +1,41 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.reporting.model.configuration;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author bissey
+ */
+@Getter
+@Setter
+public class CodeStatutHttpReporting {
+
+    private Long id;
+
+    protected String idGenerer;
+
+    private String code;
+
+    private String libelle;
+
+    private String typeOperation;
+    
+    private String dateCreation;
+
+    private String utilisateurCreation;
+
+    private String dateDerniereModification;
+
+    private String utilisateurModification;
+
+    private String dateSuppression;
+
+    private String utilisateurSuppression;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/log/ApiUserActionLogReporting.java b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/log/ApiUserActionLogReporting.java
new file mode 100644
index 0000000..606e86f
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/log/ApiUserActionLogReporting.java
@@ -0,0 +1,43 @@
+package com.megatim.fdxconsultation.reporting.model.log;
+
+import com.megatim.export.excel.annotations.ExportToExcel;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author DYNABOOK
+ */
+@Getter
+@Setter
+public class ApiUserActionLogReporting {
+
+    private Long id;
+    
+    @ExportToExcel(entete = "Description", position = 2, width = 60)
+    @PrintColumn(libelle = "Description", rang = 2)
+    private String message;
+    
+    @ExportToExcel(entete = "Utilisateur", position = 5, width = 60)
+    @PrintColumn(libelle = "Utilisateur", rang = 5)
+    private String userName;
+    
+    @ExportToExcel(entete = "Date et heure", position = 1, width = 60)
+    @PrintColumn(libelle = "Date et heure", rang = 1)
+    private String dateAction;
+    
+    @ExportToExcel(entete = "Adresse IP", position = 4, width = 60)
+    @PrintColumn(libelle = "Adresse IP", rang = 4)
+    private String ipAddress;
+    
+    private Integer status;
+    
+    @ExportToExcel(entete = "Navigateur", position = 3, width = 60)
+    @PrintColumn(libelle = "Navigateur", rang = 3)
+    private String userAgent;
+    
+    private String relativePath;    
+    private String httpMethod;
+
+}
diff --git a/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/ExtensionFichierReporting.java b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/ExtensionFichierReporting.java
new file mode 100644
index 0000000..4472931
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/ExtensionFichierReporting.java
@@ -0,0 +1,56 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.reporting.model.referentiel;
+
+import com.megatim.export.excel.annotations.ExportToExcel;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import lombok.Getter;
+import lombok.Setter;
+
+
+/**
+ *
+ * @author bissey
+ */
+@Getter
+@Setter
+public class ExtensionFichierReporting {
+    
+    private Long id;
+   
+    @ExportToExcel(entete = "Code", position = 1, width = 60)
+    @PrintColumn(libelle = "Code", rang = 1)
+    private String extension;
+   
+    @ExportToExcel(entete = "Libellé", position = 2, width = 60)
+    @PrintColumn(libelle = "Libellé", rang = 2)
+    private String libelle;
+    
+    @ExportToExcel(entete = "Type extension", position = 3, width = 60)
+    @PrintColumn(libelle = "Type extension", rang = 3)
+    private String typeExtension;
+    
+    @ExportToExcel(entete = "Référentiel", position = 3, width = 60)
+    @PrintColumn(libelle = "Référentiel", rang = 3)
+    private String referentiel;
+    
+    @ExportToExcel(entete = "Date création", position = 4, width = 60)
+    @PrintColumn(libelle = "Date création", rang = 4)
+    private String dateCreation;
+    
+    @ExportToExcel(entete = "Crée par", position = 5, width = 60)
+    @PrintColumn(libelle = "Crée par", rang = 5)
+    private String utilisateurCreation;
+    
+    @ExportToExcel(entete = "Date Dern. Mod.", position = 6, width = 60)
+    @PrintColumn(libelle = "Date Dern. Mod.", rang = 6)
+    private String dateDerniereModification;
+    
+    @ExportToExcel(entete = "Modifié par", position = 7, width = 60)
+    @PrintColumn(libelle = "Modifié par", rang = 7)
+    private String utilisateurModification;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/GroupeNoeudReporting.java b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/GroupeNoeudReporting.java
new file mode 100644
index 0000000..894041d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/GroupeNoeudReporting.java
@@ -0,0 +1,52 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.reporting.model.referentiel;
+
+import com.megatim.export.excel.annotations.ExportToExcel;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import lombok.Getter;
+import lombok.Setter;
+
+
+/**
+ *
+ * @author bissey
+ */
+@Getter
+@Setter
+public class GroupeNoeudReporting {
+    
+    private Long id;
+   
+    @ExportToExcel(entete = "Code", position = 1, width = 60)
+    @PrintColumn(libelle = "Code", rang = 1)
+    private String code;
+   
+    @ExportToExcel(entete = "Libellé", position = 2, width = 60)
+    @PrintColumn(libelle = "Libellé", rang = 2)
+    private String libelle;
+    
+    @ExportToExcel(entete = "Référentiel", position = 3, width = 60)
+    @PrintColumn(libelle = "Référentiel", rang = 3)
+    private String referentiel;
+    
+    @ExportToExcel(entete = "Date création", position = 4, width = 60)
+    @PrintColumn(libelle = "Date création", rang = 4)
+    private String dateCreation;
+    
+    @ExportToExcel(entete = "Crée par", position = 5, width = 60)
+    @PrintColumn(libelle = "Crée par", rang = 5)
+    private String utilisateurCreation;
+    
+    @ExportToExcel(entete = "Date Dern. Mod.", position = 6, width = 60)
+    @PrintColumn(libelle = "Date Dern. Mod.", rang = 6)
+    private String dateDerniereModification;
+    
+    @ExportToExcel(entete = "Modifié par", position = 7, width = 60)
+    @PrintColumn(libelle = "Modifié par", rang = 7)
+    private String utilisateurModification;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/GroupeParticipantReporting.java b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/GroupeParticipantReporting.java
new file mode 100644
index 0000000..810343d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/GroupeParticipantReporting.java
@@ -0,0 +1,52 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.reporting.model.referentiel;
+
+import com.megatim.export.excel.annotations.ExportToExcel;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import lombok.Getter;
+import lombok.Setter;
+
+
+/**
+ *
+ * @author bissey
+ */
+@Getter
+@Setter
+public class GroupeParticipantReporting {
+    
+    private Long id;
+   
+    @ExportToExcel(entete = "Code", position = 1, width = 60)
+    @PrintColumn(libelle = "Code", rang = 1)
+    private String code;
+   
+    @ExportToExcel(entete = "Libellé", position = 2, width = 60)
+    @PrintColumn(libelle = "Libellé", rang = 2)
+    private String libelle;
+    
+    @ExportToExcel(entete = "Référentiel", position = 3, width = 60)
+    @PrintColumn(libelle = "Référentiel", rang = 3)
+    private String referentiel;
+    
+    @ExportToExcel(entete = "Date création", position = 4, width = 60)
+    @PrintColumn(libelle = "Date création", rang = 4)
+    private String dateCreation;
+    
+    @ExportToExcel(entete = "Crée par", position = 5, width = 60)
+    @PrintColumn(libelle = "Crée par", rang = 5)
+    private String utilisateurCreation;
+    
+    @ExportToExcel(entete = "Date Dern. Mod.", position = 6, width = 60)
+    @PrintColumn(libelle = "Date Dern. Mod.", rang = 6)
+    private String dateDerniereModification;
+    
+    @ExportToExcel(entete = "Modifié par", position = 7, width = 60)
+    @PrintColumn(libelle = "Modifié par", rang = 7)
+    private String utilisateurModification;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/NoeudReporting.java b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/NoeudReporting.java
new file mode 100644
index 0000000..d284ccc
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/NoeudReporting.java
@@ -0,0 +1,56 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.reporting.model.referentiel;
+
+import com.megatim.export.excel.annotations.ExportToExcel;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import lombok.Getter;
+import lombok.Setter;
+
+
+/**
+ *
+ * @author bissey
+ */
+@Getter
+@Setter
+public class NoeudReporting {
+    
+    private Long id;
+   
+    @ExportToExcel(entete = "Code", position = 1, width = 60)
+    @PrintColumn(libelle = "Code", rang = 1)
+    private String code;
+   
+    @ExportToExcel(entete = "Libellé", position = 2, width = 60)
+    @PrintColumn(libelle = "Libellé", rang = 2)
+    private String libelle;
+    
+    @ExportToExcel(entete = "Participant", position = 3, width = 60)
+    @PrintColumn(libelle = "Participant", rang = 3)
+    private String participant;
+    
+    @ExportToExcel(entete = "Référentiel", position = 4, width = 60)
+    @PrintColumn(libelle = "Référentiel", rang = 4)
+    private String referentiel;
+    
+    @ExportToExcel(entete = "Date création", position = 5, width = 60)
+    @PrintColumn(libelle = "Date création", rang = 5)
+    private String dateCreation;
+    
+    @ExportToExcel(entete = "Crée par", position = 6, width = 60)
+    @PrintColumn(libelle = "Crée par", rang = 6)
+    private String utilisateurCreation;
+    
+    @ExportToExcel(entete = "Date Dern. Mod.", position = 7, width = 60)
+    @PrintColumn(libelle = "Date Dern. Mod.", rang = 7)
+    private String dateDerniereModification;
+    
+    @ExportToExcel(entete = "Modifié par", position = 8, width = 60)
+    @PrintColumn(libelle = "Modifié par", rang = 8)
+    private String utilisateurModification;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/ParticipantReporting.java b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/ParticipantReporting.java
new file mode 100644
index 0000000..1a4564a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/ParticipantReporting.java
@@ -0,0 +1,56 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.reporting.model.referentiel;
+
+import com.megatim.export.excel.annotations.ExportToExcel;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import lombok.Getter;
+import lombok.Setter;
+
+
+/**
+ *
+ * @author bissey
+ */
+@Getter
+@Setter
+public class ParticipantReporting {
+    
+    private Long id;
+   
+    @ExportToExcel(entete = "Code", position = 1, width = 60)
+    @PrintColumn(libelle = "Code", rang = 1)
+    private String code;
+   
+    @ExportToExcel(entete = "Libellé", position = 2, width = 60)
+    @PrintColumn(libelle = "Libellé", rang = 2)
+    private String libelle;
+    
+    @ExportToExcel(entete = "Référentiel", position = 3, width = 60)
+    @PrintColumn(libelle = "Référentiel", rang = 3)
+    private String referentiel;
+    
+    @ExportToExcel(entete = "Pays", position = 4, width = 60)
+    @PrintColumn(libelle = "Pays", rang = 4)
+    private String pays;
+    
+    @ExportToExcel(entete = "Date création", position = 5, width = 60)
+    @PrintColumn(libelle = "Date création", rang = 5)
+    private String dateCreation;
+    
+    @ExportToExcel(entete = "Crée par", position = 6, width = 60)
+    @PrintColumn(libelle = "Crée par", rang = 6)
+    private String utilisateurCreation;
+    
+    @ExportToExcel(entete = "Date Dern. Mod.", position = 7, width = 60)
+    @PrintColumn(libelle = "Date Dern. Mod.", rang = 7)
+    private String dateDerniereModification;
+    
+    @ExportToExcel(entete = "Modifié par", position = 8, width = 60)
+    @PrintColumn(libelle = "Modifié par", rang = 8)
+    private String utilisateurModification;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/PaysReporting.java b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/PaysReporting.java
new file mode 100644
index 0000000..f6e00d7
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/PaysReporting.java
@@ -0,0 +1,51 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.reporting.model.referentiel;
+
+import com.megatim.export.excel.annotations.ExportToExcel;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author bissey
+ */
+@Getter
+@Setter
+public class PaysReporting {
+
+    private Long id;
+
+    @ExportToExcel(entete = "Code", position = 1, width = 60)
+    @PrintColumn(libelle = "Code", rang = 1, width = 100)
+    private String code;
+
+    @ExportToExcel(entete = "Libellé", position = 2, width = 60)
+    @PrintColumn(libelle = "Libellé", rang = 2)
+    private String libelle;
+
+    @ExportToExcel(entete = "Référentiel", position = 3, width = 60)
+    @PrintColumn(libelle = "Référentiel", rang = 3, width = 100)
+    private String referentiel;
+
+    @ExportToExcel(entete = "Date création", position = 4, width = 60)
+    @PrintColumn(libelle = "Date création", rang = 4)
+    private String dateCreation;
+
+    @ExportToExcel(entete = "Crée par", position = 5, width = 60)
+    @PrintColumn(libelle = "Crée par", rang = 5)
+    private String utilisateurCreation;
+
+    @ExportToExcel(entete = "Date Dern. Mod.", position = 6, width = 60)
+    @PrintColumn(libelle = "Date Dern. Mod.", rang = 6)
+    private String dateDerniereModification;
+
+    @ExportToExcel(entete = "Modifié par", position = 7, width = 60)
+    @PrintColumn(libelle = "Modifié par", rang = 7)
+    private String utilisateurModification;
+
+}
diff --git a/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/ReferentielReporting.java b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/ReferentielReporting.java
new file mode 100644
index 0000000..915f8e7
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/ReferentielReporting.java
@@ -0,0 +1,52 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.reporting.model.referentiel;
+
+import com.megatim.export.excel.annotations.ExportToExcel;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import lombok.Getter;
+import lombok.Setter;
+
+
+/**
+ *
+ * @author bissey
+ */
+@Getter
+@Setter
+public class ReferentielReporting {
+    
+    private Long id;
+   
+    @ExportToExcel(entete = "Version", position = 1, width = 60)
+    @PrintColumn(libelle = "Version", rang = 1)
+    private String version;
+   
+    @ExportToExcel(entete = "Description", position = 2, width = 60)
+    @PrintColumn(libelle = "Description", rang = 2)
+    private String description;
+    
+    @ExportToExcel(entete = "Statut", position = 3, width = 60)
+    @PrintColumn(libelle = "Statut", rang = 3)
+    private String statutReferentiel;
+    
+    @ExportToExcel(entete = "Date création", position = 4, width = 60)
+    @PrintColumn(libelle = "Date création", rang = 4)
+    private String dateCreation;
+    
+    @ExportToExcel(entete = "Crée par", position = 5, width = 60)
+    @PrintColumn(libelle = "Crée par", rang = 5)
+    private String utilisateurCreation;
+    
+    @ExportToExcel(entete = "Date Dern. Mod.", position = 6, width = 60)
+    @PrintColumn(libelle = "Date Dern. Mod.", rang = 6)
+    private String dateDerniereModification;
+    
+    @ExportToExcel(entete = "Modifié par", position = 7, width = 60)
+    @PrintColumn(libelle = "Modifié par", rang = 7)
+    private String utilisateurModification;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/RoutageReporting.java b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/RoutageReporting.java
new file mode 100644
index 0000000..3767ca4
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/RoutageReporting.java
@@ -0,0 +1,64 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.reporting.model.referentiel;
+
+import com.megatim.export.excel.annotations.ExportToExcel;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import lombok.Getter;
+import lombok.Setter;
+
+
+/**
+ *
+ * @author bissey
+ */
+@Getter
+@Setter
+public class RoutageReporting {
+    
+    private Long id;
+   
+    @ExportToExcel(entete = "Code type fichier", position = 1, width = 60)
+    @PrintColumn(libelle = "Code type fichier", rang = 1)
+    private String code;
+    
+    @ExportToExcel(entete = "Libellé", position = 2, width = 60)
+    @PrintColumn(libelle = "Libellé", rang = 2)
+    private String libelle;
+    
+    @ExportToExcel(entete = "Extension", position = 3, width = 60)
+    @PrintColumn(libelle = "Extension", rang = 3)
+    private String extension;
+    
+    @ExportToExcel(entete = "Categorie", position = 4, width = 60)
+    @PrintColumn(libelle = "Categorie", rang = 4)
+    private String categorie;
+    
+    @ExportToExcel(entete = "Participant", position = 6, width = 60)
+    @PrintColumn(libelle = "Participant", rang = 7)
+    private String participant;
+    
+    @ExportToExcel(entete = "Référentiel", position = 8, width = 60)
+    @PrintColumn(libelle = "Référentiel", rang = 8)
+    private String referentiel;
+    
+    @ExportToExcel(entete = "Date création", position = 9, width = 60)
+    @PrintColumn(libelle = "Date création", rang = 9)
+    private String dateCreation;
+    
+    @ExportToExcel(entete = "Crée par", position = 10, width = 60)
+    @PrintColumn(libelle = "Crée par", rang = 10)
+    private String utilisateurCreation;
+    
+    @ExportToExcel(entete = "Date Dern. Mod.", position = 11, width = 60)
+    @PrintColumn(libelle = "Date Dern. Mod.", rang = 11)
+    private String dateDerniereModification;
+    
+    @ExportToExcel(entete = "Modifié par", position = 12, width = 60)
+    @PrintColumn(libelle = "Modifié par", rang = 12)
+    private String utilisateurModification;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/TypeFichierReporting.java b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/TypeFichierReporting.java
new file mode 100644
index 0000000..07b5acd
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-reporting/src/main/java/com/megatim/fdxconsultation/reporting/model/referentiel/TypeFichierReporting.java
@@ -0,0 +1,64 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.reporting.model.referentiel;
+
+import com.megatim.export.excel.annotations.ExportToExcel;
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import lombok.Getter;
+import lombok.Setter;
+
+
+/**
+ *
+ * @author bissey
+ */
+@Getter
+@Setter
+public class TypeFichierReporting {
+    
+    private Long id;
+   
+    @ExportToExcel(entete = "Code", position = 1, width = 60)
+    @PrintColumn(libelle = "Code", rang = 1)
+    private String code;
+   
+    @ExportToExcel(entete = "Libellé", position = 2, width = 60)
+    @PrintColumn(libelle = "Libellé", rang = 2)
+    private String libelle;
+    
+    @ExportToExcel(entete = "Categorie", position = 3, width = 60)
+    @PrintColumn(libelle = "Categorie", rang = 3)
+    private String categorie;
+    
+    @ExportToExcel(entete = "Extension", position = 4, width = 60)
+    @PrintColumn(libelle = "Extension", rang = 4)
+    private String extension;
+    
+    @ExportToExcel(entete = "Participant", position = 5, width = 60)
+    @PrintColumn(libelle = "Participant", rang = 5)
+    private String participant;
+    
+    @ExportToExcel(entete = "Référentiel", position = 6, width = 60)
+    @PrintColumn(libelle = "Référentiel", rang = 6)
+    private String referentiel;
+    
+    @ExportToExcel(entete = "Date création", position = 7, width = 60)
+    @PrintColumn(libelle = "Date création", rang = 7)
+    private String dateCreation;
+    
+    @ExportToExcel(entete = "Crée par", position = 8, width = 60)
+    @PrintColumn(libelle = "Crée par", rang = 8)
+    private String utilisateurCreation;
+    
+    @ExportToExcel(entete = "Date Dern. Mod.", position = 9, width = 60)
+    @PrintColumn(libelle = "Date Dern. Mod.", rang = 9)
+    private String dateDerniereModification;
+    
+    @ExportToExcel(entete = "Modifié par", position = 10, width = 60)
+    @PrintColumn(libelle = "Modifié par", rang = 10)
+    private String utilisateurModification;
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/.gitignore b/fdx-consultation/fdxconsultation-service-ifaces/.gitignore
new file mode 100644
index 0000000..b24d71e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/.gitignore
@@ -0,0 +1,50 @@
+# These are some examples of commonly ignored file patterns.
+# You should customize this list as applicable to your project.
+# Learn more about .gitignore:
+#     https://www.atlassian.com/git/tutorials/saving-changes/gitignore
+
+# Node artifact files
+node_modules/
+dist/
+
+# Compiled Java class files
+*.class
+
+# Compiled Python bytecode
+*.py[cod]
+
+# Log files
+*.log
+
+# Package files
+*.jar
+
+# Maven
+target/
+dist/
+
+# JetBrains IDE
+.idea/
+
+# Unit test reports
+TEST*.xml
+
+# Generated by MacOS
+.DS_Store
+
+# Generated by Windows
+Thumbs.db
+
+# Applications
+*.app
+*.exe
+*.war
+
+# Large media files
+*.mp4
+*.tiff
+*.avi
+*.flv
+*.mov
+*.wmv
+
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/nb-configuration.xml b/fdx-consultation/fdxconsultation-service-ifaces/nb-configuration.xml
new file mode 100644
index 0000000..a65c451
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/nb-configuration.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+    <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+        <!--
+Properties that influence various parts of the IDE, especially code formatting and the like. 
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+        <netbeans.hint.jdkPlatform>JDK_1.8</netbeans.hint.jdkPlatform>
+    </properties>
+</project-shared-configuration>
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/pom.xml b/fdx-consultation/fdxconsultation-service-ifaces/pom.xml
new file mode 100644
index 0000000..9929ed8
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/pom.xml
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+        <groupId>com.megatim.fdxconsultation</groupId>
+        <artifactId>fdxconsultation</artifactId>
+        <version>1.0</version>
+    </parent>
+    
+    <groupId>com.megatim.fdxconsultation.service.ifaces</groupId>
+    <artifactId>fdxconsultation-service-ifaces</artifactId>
+    <packaging>jar</packaging>
+    
+    <properties>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>        
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <failOnMissingWebXml>false</failOnMissingWebXml>
+        <jakartaee>8.0</jakartaee>
+    </properties>
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.jboss.resteasy</groupId>
+            <artifactId>resteasy-multipart-provider</artifactId>
+            <version>3.6.3.Final</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxconsultation.tools</groupId>
+            <artifactId>fdxconsultation-tools</artifactId>
+            <version>1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim</groupId>
+            <artifactId>application-backend-commons-tools</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxconsultation.core.ifaces</groupId>
+            <artifactId>fdxconsultation-core-ifaces</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+        <dependency>
+            <groupId>com.megatim</groupId>
+            <artifactId>rs-security-core</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxcommons.service.ifaces</groupId>
+            <artifactId>fdxcommons-service-ifaces</artifactId>
+            <version>1.0</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+        <dependency>
+            <groupId>javax</groupId>
+            <artifactId>javaee-api</artifactId>
+            <version>${jakartaee}</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+    </dependencies>
+    <name>fdxconsultation-service-ifaces</name>
+</project>
\ No newline at end of file
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractCUDWithCriteriaEntityIFaces.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractCUDWithCriteriaEntityIFaces.java
new file mode 100644
index 0000000..9029bd2
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractCUDWithCriteriaEntityIFaces.java
@@ -0,0 +1,45 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.ifaces.abstracts;
+
+import com.mgt.rs.security.core.common.Secured;
+import javax.validation.Valid;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface AbstractCUDWithCriteriaEntityIFaces<T, K, ID> {
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("add")
+    @Secured(action = "ajouter", enable = true)
+    public Response save(@Context HttpHeaders headers, @Valid T entity);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Path("update/{id}")
+    @Secured(action = "modifier", enable = true)
+    public Response update(@Context HttpHeaders headers, @PathParam("id") Long id, @Valid T entity);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("delete/{id}")
+    @Secured(action = "ajouter", enable = true)
+    public Response delete(@Context HttpHeaders headers, @PathParam("id") Long id);
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractFormDataIFaces.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractFormDataIFaces.java
new file mode 100644
index 0000000..90441eb
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractFormDataIFaces.java
@@ -0,0 +1,38 @@
+package com.megatim.fdxconsultation.service.ifaces.abstracts;
+
+import javax.annotation.security.PermitAll;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author lenovo
+ */
+public interface AbstractFormDataIFaces<U> {
+
+    @PermitAll
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("form-data")
+    public Response formData(@Context HttpHeaders headers);
+
+    @PermitAll
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("form-data-withpagination/{pageNumber}/{pagesize}")
+    public Response formDataWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pagesize, U searchEntity);
+
+    @PermitAll
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("count-form-data")
+    public Long countFormData(@Context HttpHeaders headers, U searchEntity);
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractFormModelIFaces.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractFormModelIFaces.java
new file mode 100644
index 0000000..934d99c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractFormModelIFaces.java
@@ -0,0 +1,30 @@
+package com.megatim.fdxconsultation.service.ifaces.abstracts;
+
+import javax.annotation.security.PermitAll;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author lenovo
+ */
+public interface AbstractFormModelIFaces<T> {
+    
+    @PermitAll
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("/form-model")
+    Response getFormModel(@Context HttpHeaders headers);
+    
+    @PermitAll
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("/form-model-update")
+    Response getFormModelUpdate(@Context HttpHeaders headers);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractGenericConsultingCompositePKResourceIFaces.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractGenericConsultingCompositePKResourceIFaces.java
new file mode 100644
index 0000000..fcdde3a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractGenericConsultingCompositePKResourceIFaces.java
@@ -0,0 +1,69 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.ifaces.abstracts;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.mgt.rs.security.core.common.Secured;
+import java.util.ArrayList;
+import java.util.List;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface AbstractGenericConsultingCompositePKResourceIFaces<T, K, U> {
+
+    K mapToDto(T entity);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findby-id/{referentielVersion}/{codeTypeFichier}")
+    @Secured(action = "*")
+    public Response findById(@Context HttpHeaders headers, @PathParam("referentielVersion") String referentielVersion, @PathParam("codeTypeFichier") String codeTypeFichier);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(action = "consulter", enable = true)
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pagesize, CriteriaFormRequest criteriaFormRequest);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Secured(action = "consulter", enable = true)
+    @Path("find-all")
+    public Response findAll(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("count")
+    @Secured(actions = {"consulter"})
+    public Long count(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("search-columns")
+    @Secured(actions = {"consulter"})
+    public Response getSearchColumns(@Context HttpHeaders headers);
+
+    public default List<K> allToDto(List<T> datas) {
+        List<K> dtos = new ArrayList<>();
+
+        if (datas != null) {
+            for (T data : datas) {
+                dtos.add(mapToDto(data));
+            }
+        }
+        return dtos;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractGenericCrudResourceIFaces.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractGenericCrudResourceIFaces.java
new file mode 100644
index 0000000..59786af
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractGenericCrudResourceIFaces.java
@@ -0,0 +1,61 @@
+package com.megatim.fdxconsultation.service.ifaces.abstracts;
+
+import com.mgt.rs.security.core.common.Secured;
+import java.io.Serializable;
+import javax.validation.Valid;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+public interface AbstractGenericCrudResourceIFaces<T, K, ID extends Serializable, U> { //U représente le type de l'objet sur lequel on va appliquer la recherche
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("add")
+    @Secured(action = "ajouter")
+    public Response save(@Context HttpHeaders headers, @Valid T entity);
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("update/{id}")
+    @Secured(action = "modifier")
+    public Response update(@Context HttpHeaders headers, @PathParam("id") ID id, @Valid T entity);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("delete/{id}")
+    @Secured(action = "supprimer")
+    public Response delete(@Context HttpHeaders headers, @PathParam("id") ID id);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findbyid/{id}")
+    @Secured(action = "*")
+    public Response findById(@Context HttpHeaders headers, @PathParam("id") ID id);
+
+//    @POST
+//    @Produces({MediaType.APPLICATION_JSON})
+//    @Path("findwithpagination/{pageNumber}/{pagesize}")
+//    @Secured(actions = {"ajouter", "modifier", "supprimer", "voir"})
+//    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pagesize, U searchEntity);
+//
+//    @POST
+//    @Produces({MediaType.APPLICATION_JSON})
+//    @Secured(actions = {"ajouter", "modifier", "supprimer", "voir"})
+//    @Path("findall")
+//    public Response findAll(@Context HttpHeaders headers, U searchEntity);
+//    @POST
+//    @Produces({MediaType.APPLICATION_JSON})
+//    @Path("count")
+//    @Secured(actions = {"ajouter", "modifier", "supprimer", "voir"})
+//    public Long count(@Context HttpHeaders headers, U searchEntity);
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractGenericReportingIFaces.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractGenericReportingIFaces.java
new file mode 100644
index 0000000..7c1bab5
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractGenericReportingIFaces.java
@@ -0,0 +1,57 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.ifaces.abstracts;
+
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.mgt.rs.security.core.common.Secured;
+import javax.annotation.security.PermitAll;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface AbstractGenericReportingIFaces<U,K> {
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/all")
+    @Secured(action = "exporter")
+    public Response printAll(@Context HttpHeaders headers, ReportConfiguration<U> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/detail/{id}")
+    @Secured(action = "exporter")
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") K id, ReportConfiguration<U> reportConfiguration);
+
+    @PermitAll
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("print-metadata")
+    Response getPrintableColumns(@Context HttpHeaders headers);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/all")
+    @Secured(action = "exporter")
+    public Response exportExcelAll(@Context HttpHeaders headers, ReportConfiguration<U> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/detail/{id}")
+    @Secured(action = "exporter")
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") K id, ReportConfiguration<U> reportConfiguration);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractGenericValidationIFaces.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractGenericValidationIFaces.java
new file mode 100644
index 0000000..20d197c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractGenericValidationIFaces.java
@@ -0,0 +1,99 @@
+package com.megatim.fdxconsultation.service.ifaces.abstracts;
+
+import com.bekosoftware.genericdaolayer.dao.tools.RestrictionsContainer;
+import com.bekosoftware.genericmanagerlayer.core.ifaces.GenericManager;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import javax.annotation.security.PermitAll;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+
+/**
+ *
+ * @author lenovo
+ */
+public interface AbstractGenericValidationIFaces<T, U, K, ID extends Serializable> {
+
+    @PermitAll
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("validate")
+    public default void validate(@Context HttpHeaders headers, T entity) {
+
+    }
+
+    @PermitAll
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("reject")
+    public default void reject(@Context HttpHeaders headers, T entity) {
+
+    }
+
+    @PermitAll
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    public default List<T> findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pagesize, K searchEntity) {
+
+        //Variables
+        List<T> datas = null;
+
+        //On construit la requete
+        RestrictionsContainer requeteur = construireRequete(searchEntity, TypeOperation.AJOUTER);
+
+        //Construction de l'index
+        int index = (pageNumber - 1) * pagesize;
+
+        //Si non vide
+        if (datas == null || datas.isEmpty()) {
+
+            //Liste vide
+            datas = new ArrayList<>();
+
+        }
+
+        return datas;
+
+    }
+
+    @PermitAll
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("count")
+    public default Long count(@Context HttpHeaders headers, K searchEntity) {
+
+        //Variables
+        Long count = 0l;
+
+        //On construit la requete
+        RestrictionsContainer requeteur = construireRequete(searchEntity, TypeOperation.AJOUTER);
+
+        //On on recherche l'entité
+        count = getManager().count(requeteur.getPredicats());
+
+        return count;
+
+    }
+
+    public abstract GenericManager<T, ID> getManager();
+
+    public abstract U getActualState();
+
+    public abstract U getNextState();
+
+    public abstract U getRejectionState();
+
+    public abstract RestrictionsContainer construireRequete(K parametre, TypeOperation typeOperation);
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractReadWithCriteriaEntityIFaces.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractReadWithCriteriaEntityIFaces.java
new file mode 100644
index 0000000..6f4567f
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractReadWithCriteriaEntityIFaces.java
@@ -0,0 +1,53 @@
+package com.megatim.fdxconsultation.service.ifaces.abstracts;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.mgt.rs.security.core.common.Secured;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface AbstractReadWithCriteriaEntityIFaces<T, K, ID> {
+
+    public K mapToDto(T entity);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findbyid/{id}")
+    @Secured(action = "*")
+    public Response findById(@Context HttpHeaders headers, @PathParam("id") ID id);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(action = "consulter", enable = true)
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("count")
+    @Secured(actions = {"consulter"})
+    public Long count(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("search-columns")
+    @Secured(actions = {"consulter"})
+    public Response getSearchColumns(@Context HttpHeaders headers);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Secured(action = "consulter", enable = true)
+    @Path("find-all")
+    public Response findAll(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractUniqueElementIFace.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractUniqueElementIFace.java
new file mode 100644
index 0000000..b30f2f4
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/abstracts/AbstractUniqueElementIFace.java
@@ -0,0 +1,11 @@
+package com.megatim.fdxconsultation.service.ifaces.abstracts;
+
+//import com.megatim.retrocedor.web.core.ifaces.common.UniqueElement;
+
+/**
+ *
+ * @author lenovo
+ */
+public interface AbstractUniqueElementIFace<T> {
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/ActionRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/ActionRS.java
new file mode 100644
index 0000000..bb2957d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/ActionRS.java
@@ -0,0 +1,15 @@
+package com.megatim.fdxconsultation.service.ifaces.administration;
+
+import com.megatim.fdxconsultation.model.administration.Action;
+import com.megatim.fdxconsultation.model.dto.ActionDto;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericCrudResourceIFaces;
+
+/**
+ * Interface du service JAX-RS
+ *
+ * @since Fri Sep 27 08:15:34 GMT+01:00 2019
+ *
+ */
+public interface ActionRS extends AbstractGenericCrudResourceIFaces<Action, ActionDto, Long, Action> {
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/JournalActionUtilisateurRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/JournalActionUtilisateurRS.java
new file mode 100644
index 0000000..facb6a3
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/JournalActionUtilisateurRS.java
@@ -0,0 +1,92 @@
+package com.megatim.fdxconsultation.service.ifaces.administration;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.model.administration.JournalActionUtilisateur;
+import com.megatim.fdxconsultation.model.dto.JournalActionUtilisateurDto;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericReportingIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractReadWithCriteriaEntityIFaces;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.mgt.rs.security.core.common.Secured;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ * Interface du service JAX-RS
+ *
+ * @since Fri Sep 27 08:15:34 GMT+01:00 2019
+ *
+ */
+public interface JournalActionUtilisateurRS extends AbstractReadWithCriteriaEntityIFaces<JournalActionUtilisateur, JournalActionUtilisateurDto, Long>,
+        AbstractGenericReportingIFaces<CriteriaFormRequest, Long> {
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(actions = {"exporter"})
+    @LoggingInterceptorBinding(message = "Consultation liste des actions utilisateurs")
+    @Override
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("count")
+    @Secured(actions = {"exporter"})
+    @Override
+    public Long count(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("search-columns")
+    @Secured(actions = {"exporter"})
+    @Override
+    public Response getSearchColumns(@Context HttpHeaders headers);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Secured(actions = {"exporter"})
+    @Path("find-all")
+    @Override
+    public Response findAll(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export pdf liste des actions utilisateurs")
+    @Override
+    public Response printAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/detail/{id}")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export pdf détail action utilisateur id={id}")
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export excel liste des actions utilisateurs")
+    @Override
+    public Response exportExcelAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/detail/{id}")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export excel détail action utilisateur id={id}")
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/JournalConnexionUtilisateurRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/JournalConnexionUtilisateurRS.java
new file mode 100644
index 0000000..bff6133
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/JournalConnexionUtilisateurRS.java
@@ -0,0 +1,94 @@
+package com.megatim.fdxconsultation.service.ifaces.administration;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.model.log.UserActionLog;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.model.administration.JournalConnexionUtilisateur;
+import com.megatim.fdxconsultation.model.dto.JournalConnexionUtilisateurDto;
+import com.megatim.fdxconsultation.model.dto.log.UserActionLogDto;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericReportingIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractReadWithCriteriaEntityIFaces;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.mgt.rs.security.core.common.Secured;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ * Interface du service JAX-RS
+ *
+ * @since Fri Sep 27 08:15:34 GMT+01:00 2019
+ *
+ */
+public interface JournalConnexionUtilisateurRS extends AbstractReadWithCriteriaEntityIFaces<JournalConnexionUtilisateur, JournalConnexionUtilisateurDto, Long>,
+        AbstractGenericReportingIFaces<CriteriaFormRequest, Long> {
+    
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(actions = {"imprimer", "exporter"})
+    @LoggingInterceptorBinding(message = "Consultation liste des connexions utilisateurs")
+    @Override
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("count")
+    @Secured(actions = {"imprimer", "exporter"})
+    @Override
+    public Long count(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("search-columns")
+    @Secured(actions = {"imprimer", "exporter"})
+    @Override
+    public Response getSearchColumns(@Context HttpHeaders headers);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Secured(actions = {"imprimer", "exporter"})
+    @Path("find-all")
+    @Override
+    public Response findAll(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export pdf liste des connexions utilisateurs")
+    @Override
+    public Response printAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/detail/{id}")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export pdf détail connexion utilisateur id={id}")
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id")Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export excel liste des connexions utilisateurs")
+    @Override
+    public Response exportExcelAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/detail/{id}")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export excel détail connexion utilisateur id={id}")
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/RoleRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/RoleRS.java
new file mode 100644
index 0000000..a6d1208
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/RoleRS.java
@@ -0,0 +1,125 @@
+package com.megatim.fdxconsultation.service.ifaces.administration;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.model.administration.Role;
+import com.megatim.fdxconsultation.model.dto.RoleDto;
+import com.megatim.fdxconsultation.model.formodel.RoleFormModel;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractFormModelIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericCrudResourceIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericReportingIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractReadWithCriteriaEntityIFaces;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.mgt.rs.security.core.common.Secured;
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ * Interface du service JAX-RS
+ *
+ * @since Fri Sep 27 08:15:34 GMT+01:00 2019
+ *
+ */
+public interface RoleRS extends 
+        AbstractGenericCrudResourceIFaces<Role, RoleDto, Long, Role>,
+        AbstractReadWithCriteriaEntityIFaces<Role, RoleDto, Long>, 
+        AbstractGenericReportingIFaces<CriteriaFormRequest, Long>, AbstractFormModelIFaces<RoleFormModel> {
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("add")
+    @Secured(action = "ajouter")
+    @LoggingInterceptorBinding(message = "Enregistrement d'un nouvel groupe utilisateur : [1.libelle]")
+    @Override
+    public Response save(@Context HttpHeaders headers, @Valid Role entity);
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("update/{id}")
+    @Secured(action = "modifier")
+    @LoggingInterceptorBinding(message = "Mise à jour du groupe utilisateur : [2.libelle]")
+    @Override
+    public Response update(@Context HttpHeaders headers, @PathParam("id") Long id, @Valid Role entity);
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("delete/{id}")
+    @Secured(action = "supprimer")
+    @LoggingInterceptorBinding(message = "Suppression du groupe utilisateur : [2.libelle]")
+    @Override
+    public Response delete(@Context HttpHeaders headers, @PathParam("id") Long id);
+    
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(actions = {"ajouter", "modifier", "supprimer", "consulter"})
+    @LoggingInterceptorBinding(message = "Consultation liste des groupes utilisateurs")
+    @Override
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("count")
+    @Secured(actions = {"ajouter", "modifier", "supprimer", "consulter"})
+    @Override
+    public Long count(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("search-columns")
+    @Secured(actions = {"ajouter", "modifier", "supprimer", "consulter"})
+    @Override
+    public Response getSearchColumns(@Context HttpHeaders headers);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Secured(actions = {"ajouter", "modifier", "supprimer", "consulter"})
+    @Path("find-all")
+    @Override
+    public Response findAll(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export pdf liste des groupes utilisateurs en attente de validation")
+    @Override
+    public Response printAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/detail/{id}")
+    @Secured(action = "exporter")
+    //@LoggingInterceptorBinding(message = "Impression détail groupe utilisateur")
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id")Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export excel liste des groupes utilisateurs en attente de validation")
+    @Override
+    public Response exportExcelAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/detail/{id}")
+    @Secured(action = "exporter")
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/RoleValidationRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/RoleValidationRS.java
new file mode 100644
index 0000000..1ae46d8
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/RoleValidationRS.java
@@ -0,0 +1,115 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.ifaces.administration;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.model.administration.Role;
+import com.megatim.fdxconsultation.model.dto.RoleDto;
+import com.megatim.fdxconsultation.model.formodel.RoleFormModel;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractFormModelIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericReportingIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractReadWithCriteriaEntityIFaces;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.mgt.rs.security.core.common.Secured;
+import com.mgt.rs.security.core.common.SecuredSuperAdmin;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface RoleValidationRS extends AbstractReadWithCriteriaEntityIFaces<Role, RoleDto, Long>,
+        AbstractGenericReportingIFaces<CriteriaFormRequest, Long>, AbstractFormModelIFaces<RoleFormModel> {
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("validate/{name}")
+    @Secured(action = "valider")
+    @SecuredSuperAdmin
+    @LoggingInterceptorBinding(message = "Validation du groupe utilisateur : {name}")
+    public void validate(@Context HttpHeaders headers, @PathParam("name") String name);
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("reject/{name}")
+    @Secured(action = "rejeter")
+    @SecuredSuperAdmin
+    @LoggingInterceptorBinding(message = "Validation rejetée du groupe utilisateur : {name}")
+    public void reject(@Context HttpHeaders headers, @PathParam("name") String name, Role entity);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(actions = {"valider", "rejeter", "exporter"})
+    @LoggingInterceptorBinding(message = "Consultation liste des groupes utilisateurs en attente de validation")
+    @Override
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("count")
+    @Secured(actions = {"valider", "rejeter", "exporter"})
+    @Override
+    public Long count(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("search-columns")
+    @Secured(actions = {"valider", "rejeter", "exporter"})
+    @Override
+    public Response getSearchColumns(@Context HttpHeaders headers);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Secured(actions = {"valider", "rejeter", "exporter"})
+    @Path("find-all")
+    @Override
+    public Response findAll(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export pdf liste des groupes utilisateurs en attente de validation")
+    @Override
+    public Response printAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/detail/{id}")
+    @Secured(action = "exporter")
+    //@LoggingInterceptorBinding(message = "Impression détail groupe utilisateur en attente de validation")
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id")Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export excel liste des utilisateurs en attente de validation")
+    @Override
+    public Response exportExcelAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/detail/{id}")
+    @Secured(action = "exporter")
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/UserRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/UserRS.java
new file mode 100644
index 0000000..545d971
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/UserRS.java
@@ -0,0 +1,132 @@
+package com.megatim.fdxconsultation.service.ifaces.administration;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.EditPasswordDto;
+import com.megatim.fdxconsultation.model.dto.UserDto;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericCrudResourceIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericReportingIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractReadWithCriteriaEntityIFaces;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.mgt.rs.security.core.common.Secured;
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ * Interface du service JAX-RS
+ *
+ * @since Fri Sep 27 08:15:34 GMT+01:00 2019
+ *
+ */
+public interface UserRS extends AbstractGenericCrudResourceIFaces<User, UserDto, Long, User>,
+        AbstractReadWithCriteriaEntityIFaces<User, UserDto, Long>, 
+        AbstractGenericReportingIFaces<CriteriaFormRequest, Long> {
+    
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("add")
+    @Secured(action = "ajouter")
+    @LoggingInterceptorBinding(message = "Enregistrement d'un nouvel utilisateur : [1.userName]")
+    @Override
+    public Response save(@Context HttpHeaders headers, @Valid User entity);
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("update/{id}")
+    @Secured(action = "modifier")
+    @LoggingInterceptorBinding(message = "Mise à jour de l'utilisateur : [2.userName]")
+    @Override
+    public Response update(@Context HttpHeaders headers, @PathParam("id") Long id, @Valid User entity);
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("delete/{id}")
+    @Secured(action = "supprimer")
+    @LoggingInterceptorBinding(message = "Suppression de l'utilisateur : [2.userName]")
+    @Override
+    public Response delete(@Context HttpHeaders headers, @PathParam("id") Long id);
+    
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("edit-password/{username}")
+    @Secured(actions = {"ajouter", "modifier", "supprimer", "consulter"})
+    @LoggingInterceptorBinding(message = "Modification du mot de passe de l'utilisateur : {username}")
+    public Response editPassword(@Context HttpHeaders headers, @PathParam("username") String username, @Valid EditPasswordDto editPasswordDto);
+    
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(actions = {"ajouter", "modifier", "supprimer", "consulter"})
+    @LoggingInterceptorBinding(message = "Consultation liste des utilisateurs")
+    @Override
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("count")
+    @Secured(actions = {"ajouter", "modifier", "supprimer", "consulter"})
+    @Override
+    public Long count(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("search-columns")
+    @Secured(actions = {"ajouter", "modifier", "supprimer", "consulter"})
+    @Override
+    public Response getSearchColumns(@Context HttpHeaders headers);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Secured(actions = {"ajouter", "modifier", "supprimer", "consulter"})
+    @Path("find-all")
+    @Override
+    public Response findAll(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export pdf liste des utilisateurs")
+    @Override
+    public Response printAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/detail/{id}")
+    @Secured(action = "exporter")
+    //@LoggingInterceptorBinding(message = "Impression détail utilisateur")
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id")Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export excel liste des utilisateurs")
+    @Override
+    public Response exportExcelAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/detail/{id}")
+    @Secured(action = "exporter")
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/UserValidationRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/UserValidationRS.java
new file mode 100644
index 0000000..2326989
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/administration/UserValidationRS.java
@@ -0,0 +1,109 @@
+package com.megatim.fdxconsultation.service.ifaces.administration;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.UserDto;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericReportingIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractReadWithCriteriaEntityIFaces;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.mgt.rs.security.core.common.Secured;
+import com.mgt.rs.security.core.common.SecuredSuperAdmin;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface UserValidationRS extends AbstractReadWithCriteriaEntityIFaces<User, UserDto, Long>, 
+        AbstractGenericReportingIFaces<CriteriaFormRequest, Long> {
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("validate/{username}")
+    @Secured(action = "valider")
+    @SecuredSuperAdmin
+    @LoggingInterceptorBinding(message = "Validation de l'utilisateur : {username}")
+    public void validate(@Context HttpHeaders headers, @PathParam("username") String username);
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("reject/{username}")
+    @Secured(action = "rejeter")
+    @SecuredSuperAdmin
+    @LoggingInterceptorBinding(message = "Validation rejetée de l'utilisateur : {username}")
+    public void reject(@Context HttpHeaders headers, @PathParam("username") String username, User entity);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(actions = {"valider", "rejeter", "exporter"})
+    @LoggingInterceptorBinding(message = "Consultation liste des utilisateurs en attente de validation")
+    @Override
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("count")
+    @Secured(actions = {"valider", "rejeter", "exporter"})
+    @Override
+    public Long count(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("search-columns")
+    @Secured(actions = {"valider", "rejeter", "exporter"})
+    @Override
+    public Response getSearchColumns(@Context HttpHeaders headers);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Secured(actions = {"valider", "rejeter", "exporter"})
+    @Path("find-all")
+    @Override
+    public Response findAll(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export pdf liste des utilisateurs en attente de validation")
+    @Override
+    public Response printAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/detail/{id}")
+    @Secured(action = "exporter")
+    //@LoggingInterceptorBinding(message = "Export pdf utilisateur en attente de validation")
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id")Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export excel liste des utilisateurs en attente de validation")
+    @Override
+    public Response exportExcelAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/detail/{id}")
+    @Secured(action = "exporter")
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/api/token/ApiTokenRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/api/token/ApiTokenRS.java
new file mode 100644
index 0000000..84b1079
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/api/token/ApiTokenRS.java
@@ -0,0 +1,120 @@
+package com.megatim.fdxconsultation.service.ifaces.api.token;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.model.api.token.ApiToken;
+import com.megatim.fdxconsultation.model.dto.ApiTokenDto;
+import com.mgt.rs.security.core.common.Secured;
+import javax.validation.Valid;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericCrudResourceIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericReportingIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractReadWithCriteriaEntityIFaces;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface ApiTokenRS extends AbstractGenericCrudResourceIFaces<ApiToken, ApiTokenDto, Long, ApiToken>,
+        AbstractReadWithCriteriaEntityIFaces<ApiToken, ApiTokenDto, Long>,
+        AbstractGenericReportingIFaces<CriteriaFormRequest, Long>{
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("add")
+    @Secured(action = "ajouter")
+    @LoggingInterceptorBinding(message = "Mot de passe API généré, pour le participant  : [1.participant.code]")
+    public Response save(@Context HttpHeaders headers, @Valid ApiToken entity);
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("update/{id}")
+    @Secured(action = "modifier")
+    @LoggingInterceptorBinding(message = "Mot de passe API regénéré, pour le participant  : [2.participant.code]")
+    public Response update(@Context HttpHeaders headers, @PathParam("id") Long id, @Valid ApiToken entity);
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("delete/{id}")
+    @Secured(action = "supprimer")
+    @LoggingInterceptorBinding(message = "Suppression mot de passe API, pour le participant : [2.participant.code]")
+    @Override
+    public Response delete(@Context HttpHeaders headers, @PathParam("id") Long id);
+    
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("search-columns")
+    @Secured(action = "*", enable = true)
+    public Response getSearchColumns(@Context HttpHeaders headers);
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces(MediaType.APPLICATION_JSON)
+    @Secured(action = "bloquer")
+    @Path("lock/{id}")
+    //@LoggingInterceptorBinding(message = "Mot de passe API désactivé, pour le participant  : {id}")
+    public Response lock(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") Long id);
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces(MediaType.APPLICATION_JSON)
+    @Secured(action = "débloquer")
+    @Path("unlock/{id}")
+    //@LoggingInterceptorBinding(message = "Mot de passe API activé, pour le participant  : {id}")
+    public Response unLock(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") Long id);
+    
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(actions = {"ajouter", "modifier", "supprimer", "consulter"})
+    @LoggingInterceptorBinding(message = "Consultation liste des mots de passe API")
+    @Override
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Impression liste des mots de passe API")
+    @Override
+    public Response printAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/detail/{id}")
+    @Secured(action = "exporter")
+    //@LoggingInterceptorBinding(message = "Impression détail mot de passe API")
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id")Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export excel liste des mots de passe API ")
+    @Override
+    public Response exportExcelAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/detail/{id}")
+    @Secured(action = "exporter")
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/authentication/AuthenticationRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/authentication/AuthenticationRS.java
new file mode 100644
index 0000000..54bc64e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/authentication/AuthenticationRS.java
@@ -0,0 +1,110 @@
+package com.megatim.fdxconsultation.service.ifaces.authentication;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.authentification.LoginRequest;
+import com.mgt.rs.security.core.common.Secured;
+import com.mgt.rs.security.core.common.SecuredAdmin;
+import com.mgt.rs.security.core.common.SecuredMegaAdmin;
+import com.mgt.rs.security.core.common.SecuredSuperAdmin;
+import javax.annotation.security.PermitAll;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author lenovo
+ */
+public interface AuthenticationRS {
+    
+    /**
+     * Validate user credentials and issue a token for the user.
+     *
+     * @param loginRequest
+     * @return
+     */
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @PermitAll
+    @Path("login")
+    @LoggingInterceptorBinding(message = "Connexion de l'utilisateur [0.userName]")
+    public Response authenticate(LoginRequest loginRequest);
+    
+    /**
+     * Permet de recuperer les informations de l'utilisateur.
+     * 
+     * @param headers
+     * @param username
+     * @return
+     */
+    @GET
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @SecuredAdmin
+    @SecuredSuperAdmin
+    @SecuredMegaAdmin
+    @Path("info")
+    @Secured(action = "*")
+    public Response getInfoUser(@Context HttpHeaders headers);
+    
+    /**
+     * Permet de savoir si un utilisateur avec le même username existe dejà
+     *
+     * @param headers
+     * @param username
+     * @return
+     */
+    @GET
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("checkusername/{username}")
+    @Secured(action = "*")
+    @SecuredAdmin
+    @SecuredSuperAdmin
+    @SecuredMegaAdmin
+    public Response ifUserNameExist(@Context HttpHeaders headers, @PathParam("username") String username);
+    
+    /**
+     * Permet de déconnecter l'utilisateur.
+     *
+     * @param headers
+     * @param entity
+     * @return
+     */
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @SecuredAdmin
+    @SecuredSuperAdmin
+    @SecuredMegaAdmin
+    @Path("logout")
+    @Secured(action = "*")
+    @LoggingInterceptorBinding(message = "Déconnexion de l'utilisateur [1.userName]")
+    public Response logout(@Context HttpHeaders headers, User entity);
+    
+    /**
+     * Permet de générer les données de test
+     *
+     * @param headers
+     * @return
+     */
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @SecuredAdmin
+    @SecuredSuperAdmin
+    @SecuredMegaAdmin
+    @Path("test")
+    @Secured(action="*")
+    public Response generateDataTotTest(@Context HttpHeaders headers);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/chat/UserChatListRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/chat/UserChatListRS.java
new file mode 100644
index 0000000..1d8f19b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/chat/UserChatListRS.java
@@ -0,0 +1,31 @@
+package com.megatim.fdxconsultation.service.ifaces.chat;
+
+import com.megatim.fdxconsultation.model.searchentities.UserSearch;
+import javax.annotation.security.PermitAll;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface UserChatListRS {
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findall")
+    @PermitAll
+    public Response findAll(@Context HttpHeaders headers, UserSearch searchEntity);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("count")
+    @PermitAll
+    public Long count(@Context HttpHeaders headers, UserSearch searchEntity);
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/consumption/DataConsumptionOperationsRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/consumption/DataConsumptionOperationsRS.java
new file mode 100644
index 0000000..d11d695
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/consumption/DataConsumptionOperationsRS.java
@@ -0,0 +1,63 @@
+package com.megatim.fdxconsultation.service.ifaces.consumption;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.model.dtos.reporting.CustomTypeFichierReportConfigurationFromView;
+import com.mgt.rs.security.core.common.Secured;
+import javax.annotation.security.PermitAll;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface DataConsumptionOperationsRS {
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Path("find/{referentiel_version}/{code_type_fichier}")
+    @Secured(action = "*", enable = true)
+    @LoggingInterceptorBinding(message = "Consultation des données du typefichier {code_type_fichier}")
+    public Response find(@Context HttpHeaders headers, @PathParam("referentiel_version") String referentielVersion, @PathParam("code_type_fichier") String codeTypeFichier, CriteriaFormRequest criteriaFormRequest);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Path("find-with-pagination/{referentiel_version}/{code_type_fichier}/{pageNumber}/{pageSize}")
+    @Secured(action = "consulter", enable = true)
+    @LoggingInterceptorBinding(message = "Consultation des données du typefichier {code_type_fichier}")
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("referentiel_version") String referentielVersion, @PathParam("code_type_fichier") String codeTypeFichier, @PathParam("pageNumber") Integer pageNumber, @PathParam("pageSize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Path("count/{referentiel_version}/{code_type_fichier}")
+    @PermitAll
+    @LoggingInterceptorBinding(message = "Compte des données du typefichier {code_type_fichier}")
+    public Long count(@Context HttpHeaders headers, @PathParam("referentiel_version") String referentielVersion, @PathParam("code_type_fichier") String codeTypeFichier, CriteriaFormRequest criteriaFormRequest);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("print-metadata/{referentiel_version}/{code_type_fichier}")
+    @PermitAll
+    @LoggingInterceptorBinding(message = "Consultation des colonnes imprimables du typefichier [code_type_fichier]")
+    public Response getPrintableColumns(@Context HttpHeaders headers, @PathParam("referentiel_version") String referentielVersion, @PathParam("code_type_fichier") String codeTypeFichier);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("print-all/{referentiel_version}/{code_type_fichier}")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Impression d'un état du typefichier {code_type_fichier}")
+    public Response printAll(@Context HttpHeaders headers, @PathParam("referentiel_version") String referentielVersion, @PathParam("code_type_fichier") String codeTypeFichier, CustomTypeFichierReportConfigurationFromView reportConfiguration);
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/dataproduction/DataProductionRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/dataproduction/DataProductionRS.java
new file mode 100644
index 0000000..7719d5f
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/dataproduction/DataProductionRS.java
@@ -0,0 +1,71 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.ifaces.dataproduction;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.model.dtos.dataproduction.DataProductionDto;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.model.dataproduction.DataProduction;
+import com.megatim.fdxconsultation.model.dto.stats.TableauBordSlimDto;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericReportingIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractReadWithCriteriaEntityIFaces;
+import com.mgt.rs.security.core.common.Secured;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface DataProductionRS extends AbstractReadWithCriteriaEntityIFaces<DataProduction, DataProductionDto, Long>,
+        AbstractGenericReportingIFaces<CriteriaFormRequest, Long> {
+
+    @Override
+    public DataProductionDto mapToDto(DataProduction entity);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findbyid/{id}")
+    @Secured(action = "*")
+    @Override
+    public Response findById(@Context HttpHeaders headers, @PathParam("id") Long id);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(action = "Echanges données", enable = true)
+    @LoggingInterceptorBinding(message = "Consultation tableau de bord Fdx API", classe = TableauBordSlimDto.class)
+    @Override
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("count")
+    @Secured(actions = {"Echanges données"})
+    @Override
+    public Long count(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("search-columns")
+    @Secured(actions = {"Echanges données"})
+    @Override
+    public Response getSearchColumns(@Context HttpHeaders headers);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Secured(action = "Echanges données", enable = true)
+    @Path("find-all")
+    @Override
+    public Response findAll(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/documents/CategoryRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/documents/CategoryRS.java
new file mode 100644
index 0000000..b934b8c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/documents/CategoryRS.java
@@ -0,0 +1,49 @@
+package com.megatim.fdxconsultation.service.ifaces.documents;
+
+import com.megatim.fdxconsultation.model.documents.Category;
+import com.mgt.rs.security.core.common.Secured;
+import javax.validation.Valid;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface CategoryRS {
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("add")
+    @Secured(action = "ajouter")
+    public Response save(@Context HttpHeaders headers, @Valid Category entity);
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("update/{id}")
+    @Secured(action = "modifier")
+    public Response update(@Context HttpHeaders headers, @PathParam("id") Long id, @Valid Category entity);
+
+    @DELETE
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("delete/{id}")
+    @Secured(action = "supprimer")
+    public void delete(@Context HttpHeaders headers, @PathParam("id") Long id);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("all")
+    public Response all(@Context HttpHeaders headers);
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/documents/DocumentRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/documents/DocumentRS.java
new file mode 100644
index 0000000..2425d05
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/documents/DocumentRS.java
@@ -0,0 +1,44 @@
+package com.megatim.fdxconsultation.service.ifaces.documents;
+
+import com.megatim.fdxconsultation.model.documents.Document;
+import com.mgt.rs.security.core.common.Secured;
+import javax.validation.Valid;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface DocumentRS {
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("add/{categoryId}")
+    @Secured(action = "ajouter")
+    public Response save(@Context HttpHeaders headers, @PathParam("categoryId") Long categoryId, @Valid Document entity);
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("update/{id}")
+    @Secured(action = "modifier")
+    public Response update(@Context HttpHeaders headers, @PathParam("id") Long id, @Valid Document entity);
+
+    @DELETE
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("delete/{id}")
+    @Secured(action = "supprimer")
+    public void delete(@Context HttpHeaders headers, @PathParam("id") Long id);
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/favoritessearch/FavoriteSearchRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/favoritessearch/FavoriteSearchRS.java
new file mode 100644
index 0000000..894a31d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/favoritessearch/FavoriteSearchRS.java
@@ -0,0 +1,56 @@
+package com.megatim.fdxconsultation.service.ifaces.favoritessearch;
+
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.model.dto.FavoriteSearchDto;
+import com.megatim.fdxconsultation.model.favoritessearch.FavoriteSearch;
+import com.mgt.rs.security.core.common.Secured;
+import javax.validation.Valid;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface FavoriteSearchRS {
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("add")
+    @Secured(action = "consulter")
+    public Response save(@Context HttpHeaders headers, @Valid FavoriteSearchDto favoriteSearch);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("all")
+    @Secured(action = "consulter")
+    public Response all(@Context HttpHeaders headers);
+    
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(action = "consulter", enable = true)
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("count")
+    @Secured(actions = {"consulter"})
+    public Long count(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("search-columns")
+    @Secured(actions = {"consulter"})
+    public Response getSearchColumns(@Context HttpHeaders headers);
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/integration/ColumnDefinitionResource.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/integration/ColumnDefinitionResource.java
new file mode 100644
index 0000000..209dde9
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/integration/ColumnDefinitionResource.java
@@ -0,0 +1,23 @@
+package com.megatim.fdxconsultation.service.ifaces.integration;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface ColumnDefinitionResource {
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("/{codeTypeFichier}/{referentielVersion}")
+    public Response columnDefinitions(@Context HttpHeaders headers, @PathParam("codeTypeFichier") String codeTypeFichier, @PathParam("referentielVersion") String referentielVersion);
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/log/ApiUserActionLogRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/log/ApiUserActionLogRS.java
new file mode 100644
index 0000000..373da24
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/log/ApiUserActionLogRS.java
@@ -0,0 +1,90 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.ifaces.log;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.model.dto.log.UserActionLogDto;
+import com.megatim.fdxconsultation.model.log.ApiUserActionLog;
+import com.megatim.fdxconsultation.model.log.dtos.ApiUserActionSummarySearch;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericReportingIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractReadWithCriteriaEntityIFaces;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.mgt.rs.security.core.common.Secured;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ApiUserActionLogRS extends AbstractReadWithCriteriaEntityIFaces<ApiUserActionLog, UserActionLogDto, Long>,
+        AbstractGenericReportingIFaces<CriteriaFormRequest, Long> {
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("getby-statut")
+    @Secured(action = "Tableau de bord", enable = true)
+    public Response getByStatut(@Context HttpHeaders headers, ApiUserActionSummarySearch apiUserActionSummarySearch);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("getby-statut-participant")
+    @Secured(action = "Stat endpoint par participant", enable = true)
+    public Response getByStatutAndUserName(@Context HttpHeaders headers, ApiUserActionSummarySearch apiUserActionSummarySearch);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("getby-statut-path")
+    @Secured(action = "Stat endpoint par path", enable = true)
+    public Response getByStatutAndPath(@Context HttpHeaders headers, ApiUserActionSummarySearch apiUserActionSummarySearch);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(action = "Piste d'audit", enable = true)
+    @LoggingInterceptorBinding(message = "Consultation liste des logs API")
+    @Override
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/all")
+    @Secured(action = "Piste d'audit", enable = true)
+    @LoggingInterceptorBinding(message = "Export pdf liste des logs API")
+    @Override
+    public Response printAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/detail/{id}")
+    @Secured(action = "Piste d'audit", enable = true)
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/all")
+    @Secured(action = "Piste d'audit", enable = true)
+    @LoggingInterceptorBinding(message = "Export excel liste des logs API")
+    @Override
+    public Response exportExcelAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/detail/{id}")
+    @Secured(action = "Piste d'audit", enable = true)
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/log/UserActionLogRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/log/UserActionLogRS.java
new file mode 100644
index 0000000..f61623f
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/log/UserActionLogRS.java
@@ -0,0 +1,14 @@
+package com.megatim.fdxconsultation.service.ifaces.log;
+
+import com.megatim.fdxcommons.model.log.UserActionLog;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.model.dto.log.UserActionLogDto;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericReportingIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractReadWithCriteriaEntityIFaces;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface UserActionLogRS extends AbstractReadWithCriteriaEntityIFaces<UserActionLog, UserActionLogDto, Long>, AbstractGenericReportingIFaces<CriteriaFormRequest, Long> {
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/ExtensionFichierRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/ExtensionFichierRS.java
new file mode 100644
index 0000000..0374f5d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/ExtensionFichierRS.java
@@ -0,0 +1,70 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.ifaces.referentiel;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.model.referentiel.ExtensionFichier;
+import com.megatim.fdxcommons.model.dtos.referentiel.ExtensionFichierDto;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericReportingIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractReadWithCriteriaEntityIFaces;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.mgt.rs.security.core.common.Secured;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ExtensionFichierRS extends AbstractReadWithCriteriaEntityIFaces<ExtensionFichier, ExtensionFichierDto, String>,
+        AbstractGenericReportingIFaces<CriteriaFormRequest, String> {
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(actions = {"valider", "rejeter", "exporter"})
+    @LoggingInterceptorBinding(message = "Consultation liste des extensions")
+    @Override
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export pdf liste des extensions")
+    @Override
+    public Response printAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/detail/{id}")
+    @Secured(action = "exporter")
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id")String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export excel liste des extensions")
+    @Override
+    public Response exportExcelAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/detail/{id}")
+    @Secured(action = "exporter")
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/GroupeNoeudRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/GroupeNoeudRS.java
new file mode 100644
index 0000000..7c26bfa
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/GroupeNoeudRS.java
@@ -0,0 +1,70 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.ifaces.referentiel;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.model.referentiel.GroupeNoeud;
+import com.megatim.fdxcommons.model.dtos.referentiel.GroupeNoeudDto;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericReportingIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractReadWithCriteriaEntityIFaces;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.mgt.rs.security.core.common.Secured;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface GroupeNoeudRS extends AbstractReadWithCriteriaEntityIFaces<GroupeNoeud, GroupeNoeudDto, String>,
+        AbstractGenericReportingIFaces<CriteriaFormRequest, String> {
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(actions = {"valider", "rejeter", "exporter"})
+    @LoggingInterceptorBinding(message = "Consultation liste des groupes de noeuds")
+    @Override
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export pdf liste des groupes de noeuds")
+    @Override
+    public Response printAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/detail/{id}")
+    @Secured(action = "exporter")
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id")String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export excel liste des groupes de noeuds")
+    @Override
+    public Response exportExcelAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/detail/{id}")
+    @Secured(action = "exporter")
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/GroupeParticipantRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/GroupeParticipantRS.java
new file mode 100644
index 0000000..6a54255
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/GroupeParticipantRS.java
@@ -0,0 +1,70 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.ifaces.referentiel;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.model.referentiel.GroupeParticipant;
+import com.megatim.fdxcommons.model.dtos.referentiel.GroupeParticipantDto;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericReportingIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractReadWithCriteriaEntityIFaces;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.mgt.rs.security.core.common.Secured;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface GroupeParticipantRS extends AbstractReadWithCriteriaEntityIFaces<GroupeParticipant, GroupeParticipantDto, String>,
+        AbstractGenericReportingIFaces<CriteriaFormRequest, String> {
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(actions = {"valider", "rejeter", "exporter"})
+    @LoggingInterceptorBinding(message = "Consultation liste des groupes de participants")
+    @Override
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export pdf liste des groupes de participants")
+    @Override
+    public Response printAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/detail/{id}")
+    @Secured(action = "exporter")
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id")String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export excel liste des groupes de participants")
+    @Override
+    public Response exportExcelAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/detail/{id}")
+    @Secured(action = "exporter")
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/NoeudRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/NoeudRS.java
new file mode 100644
index 0000000..49cc15c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/NoeudRS.java
@@ -0,0 +1,70 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.ifaces.referentiel;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.model.referentiel.Noeud;
+import com.megatim.fdxcommons.model.dtos.referentiel.NoeudDto;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericReportingIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractReadWithCriteriaEntityIFaces;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.mgt.rs.security.core.common.Secured;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface NoeudRS extends AbstractReadWithCriteriaEntityIFaces<Noeud, NoeudDto, String>, 
+        AbstractGenericReportingIFaces<CriteriaFormRequest, String> {
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(actions = {"valider", "rejeter", "exporter"})
+    @LoggingInterceptorBinding(message = "Consultation liste des noeuds")
+    @Override
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export pdf liste des noeuds")
+    @Override
+    public Response printAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/detail/{id}")
+    @Secured(action = "exporter")
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id")String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export excel liste des noeuds")
+    @Override
+    public Response exportExcelAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/detail/{id}")
+    @Secured(action = "exporter")
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/ParticipantRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/ParticipantRS.java
new file mode 100644
index 0000000..1f528e7
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/ParticipantRS.java
@@ -0,0 +1,66 @@
+package com.megatim.fdxconsultation.service.ifaces.referentiel;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import com.megatim.fdxcommons.model.dtos.referentiel.ParticipantDto;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericReportingIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractReadWithCriteriaEntityIFaces;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.mgt.rs.security.core.common.Secured;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ParticipantRS extends AbstractReadWithCriteriaEntityIFaces<Participant, ParticipantDto, String>, 
+        AbstractGenericReportingIFaces<CriteriaFormRequest, String> {
+    
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(actions = {"valider", "rejeter", "exporter"})
+    @LoggingInterceptorBinding(message = "Consultation liste des participants")
+    @Override
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export pdf liste des participants")
+    @Override
+    public Response printAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/detail/{id}")
+    @Secured(action = "exporter")
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id")String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export excel liste des participants")
+    @Override
+    public Response exportExcelAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/detail/{id}")
+    @Secured(action = "exporter")
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/PaysRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/PaysRS.java
new file mode 100644
index 0000000..b266491
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/PaysRS.java
@@ -0,0 +1,68 @@
+package com.megatim.fdxconsultation.service.ifaces.referentiel;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.model.referentiel.Pays;
+import com.megatim.fdxcommons.model.dtos.referentiel.PaysDto;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericReportingIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractReadWithCriteriaEntityIFaces;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.mgt.rs.security.core.common.Secured;
+import javax.annotation.security.PermitAll;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface PaysRS extends AbstractReadWithCriteriaEntityIFaces<Pays, PaysDto, String>, AbstractGenericReportingIFaces<CriteriaFormRequest, String> {
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(actions = {"valider", "rejeter", "exporter"})
+    @LoggingInterceptorBinding(message = "Consultation liste des pays")
+    @Override
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export pdf liste des pays")
+    @Override
+    public Response printAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/detail/{id}")
+    @PermitAll
+//    @Secured(action = "exporter")
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id")String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export excel liste des pays")
+    @Override
+    public Response exportExcelAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/detail/{id}")
+    @Secured(action = "exporter")
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/ReferentielRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/ReferentielRS.java
new file mode 100644
index 0000000..15598fd
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/ReferentielRS.java
@@ -0,0 +1,66 @@
+package com.megatim.fdxconsultation.service.ifaces.referentiel;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.model.dtos.referentiel.ReferentielDto;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericReportingIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractReadWithCriteriaEntityIFaces;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.mgt.rs.security.core.common.Secured;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface ReferentielRS extends AbstractReadWithCriteriaEntityIFaces<Referentiel, ReferentielDto, String>,
+        AbstractGenericReportingIFaces<CriteriaFormRequest, String> {
+    
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(actions = {"valider", "rejeter", "exporter"})
+    @LoggingInterceptorBinding(message = "Consultation liste des referentiels")
+    @Override
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export pdf liste des referentiels")
+    @Override
+    public Response printAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/detail/{id}")
+    @Secured(action = "exporter")
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id")String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export excel liste des referentiels")
+    @Override
+    public Response exportExcelAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/detail/{id}")
+    @Secured(action = "exporter")
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/RoutageRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/RoutageRS.java
new file mode 100644
index 0000000..af10940
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/RoutageRS.java
@@ -0,0 +1,85 @@
+package com.megatim.fdxconsultation.service.ifaces.referentiel;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.model.referentiel.Routage;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.model.referentiel.dtos.RoutageSlimResponse;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericConsultingCompositePKResourceIFaces;
+import com.megatim.fdxconsultation.model.searchentities.RoutageSearch;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericReportingIFaces;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.mgt.rs.security.core.common.Secured;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface RoutageRS extends AbstractGenericConsultingCompositePKResourceIFaces<Routage, RoutageSlimResponse, RoutageSearch>,
+        AbstractGenericReportingIFaces<CriteriaFormRequest, String> {
+    
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(actions = {"valider", "rejeter", "exporter"})
+    @LoggingInterceptorBinding(message = "Consultation liste des extensions")
+    @Override
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export pdf liste des routages")
+    @Override
+    public Response printAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/detail/{id}")
+    @Secured(action = "exporter")
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id")String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/detail/{codetypefichier}/{versionreferentiel}")
+    @Secured(action = "exporter")
+    public Response printOneRoutage(@Context HttpHeaders headers, @Context HttpServletRequest request,
+            @PathParam("codetypefichier") String codeTypeFichier, 
+            @PathParam("versionreferentiel") String versionReferentiel, 
+            ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export excel liste des routages")
+    @Override
+    public Response exportExcelAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/detail/{id}")
+    @Secured(action = "exporter")
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/detail/{codetypefichier}/{versionreferentiel}")
+    @Secured(action = "exporter")
+    public Response exportExcelOneRoutage(@Context HttpHeaders headers, @Context HttpServletRequest request, 
+            @PathParam("codetypefichier") String codeTypeFichier, 
+            @PathParam("versionreferentiel") String versionReferentiel,
+            ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/TestRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/TestRS.java
new file mode 100644
index 0000000..6e5f1cd
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/TestRS.java
@@ -0,0 +1,27 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.ifaces.referentiel;
+
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface TestRS<U, ID> {
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("add-one/{id}")
+    public Response test(@Context HttpHeaders headers,  @PathParam("id") String id, ReportConfiguration<U> reportConfiguration);
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/TypeFichierRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/TypeFichierRS.java
new file mode 100644
index 0000000..ca5b69a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/referentiel/TypeFichierRS.java
@@ -0,0 +1,66 @@
+package com.megatim.fdxconsultation.service.ifaces.referentiel;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.model.dtos.referentiel.TypeFichierDto;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericReportingIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractReadWithCriteriaEntityIFaces;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.mgt.rs.security.core.common.Secured;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface TypeFichierRS extends AbstractReadWithCriteriaEntityIFaces<TypeFichier, TypeFichierDto, String>, 
+        AbstractGenericReportingIFaces<CriteriaFormRequest, String> {
+    
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(actions = {"valider", "rejeter", "exporter"})
+    @LoggingInterceptorBinding(message = "Consultation liste des types fichiers")
+    @Override
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export pdf liste des types fichiers")
+    @Override
+    public Response printAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/pdf/detail/{id}")
+    @Secured(action = "exporter")
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id")String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/all")
+    @Secured(action = "exporter")
+    @LoggingInterceptorBinding(message = "Export excel liste des types fichiers")
+    @Override
+    public Response exportExcelAll(@Context HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+
+    @POST
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    @Path("export/excel/detail/{id}")
+    @Secured(action = "exporter")
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration);
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/remoteaction/RemoteConfigurationRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/remoteaction/RemoteConfigurationRS.java
new file mode 100644
index 0000000..2a3b35d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/remoteaction/RemoteConfigurationRS.java
@@ -0,0 +1,19 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.ifaces.remoteaction;
+
+import com.megatim.fdxcommons.model.dtos.remoteproduction.RemoteConfigurationDto;
+import com.megatim.fdxconsultation.model.remoteaction.RemoteConfiguration;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractGenericCrudResourceIFaces;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractReadWithCriteriaEntityIFaces;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface RemoteConfigurationRS extends AbstractReadWithCriteriaEntityIFaces<RemoteConfiguration, RemoteConfigurationDto, String>,
+        AbstractGenericCrudResourceIFaces<RemoteConfiguration, RemoteConfigurationDto, String, RemoteConfiguration> {
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/DasboardTypeFichierSearchRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/DasboardTypeFichierSearchRS.java
new file mode 100644
index 0000000..757ddb9
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/DasboardTypeFichierSearchRS.java
@@ -0,0 +1,33 @@
+package com.megatim.fdxconsultation.service.ifaces.searchs;
+
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierSearch;
+import com.mgt.rs.security.core.common.Secured;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface DasboardTypeFichierSearchRS {
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{referentiel}/{pageNumber}/{pagesize}")
+    @Secured(action = "*")
+    public Response formDataWithPagination(@Context HttpHeaders headers, @PathParam("referentiel") String referentiel, @PathParam("pageNumber") Integer pageNumber,
+            @PathParam("pagesize") Integer pagesize, TypeFichierSearch searchEntity);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("count/{referentiel}")
+    @Secured(action = "*")
+    public Long countFormData(@Context HttpHeaders headers, @PathParam("referentiel") String referentiel, TypeFichierSearch searchEntity);
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/GlobalDasboardSearchRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/GlobalDasboardSearchRS.java
new file mode 100644
index 0000000..8128f70
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/GlobalDasboardSearchRS.java
@@ -0,0 +1,7 @@
+package com.megatim.fdxconsultation.service.ifaces.searchs;
+
+import com.megatim.fdxconsultation.model.searchentities.TableauBordGlobalSearch;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractFormDataIFaces;
+
+public interface GlobalDasboardSearchRS extends AbstractFormDataIFaces<TableauBordGlobalSearch> {
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/ParticipantSearchRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/ParticipantSearchRS.java
new file mode 100644
index 0000000..3fd9646
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/ParticipantSearchRS.java
@@ -0,0 +1,11 @@
+package com.megatim.fdxconsultation.service.ifaces.searchs;
+
+import com.megatim.fdxconsultation.model.searchentities.ParticipantSearch;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractFormDataIFaces;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface ParticipantSearchRS extends AbstractFormDataIFaces<ParticipantSearch> {
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/ReferentielSearchRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/ReferentielSearchRS.java
new file mode 100644
index 0000000..60f9b74
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/ReferentielSearchRS.java
@@ -0,0 +1,11 @@
+package com.megatim.fdxconsultation.service.ifaces.searchs;
+
+import com.megatim.fdxconsultation.model.searchentities.ReferentielSearch;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractFormDataIFaces;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface ReferentielSearchRS extends AbstractFormDataIFaces<ReferentielSearch> {
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/RoleSearchRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/RoleSearchRS.java
new file mode 100644
index 0000000..e50030b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/RoleSearchRS.java
@@ -0,0 +1,11 @@
+package com.megatim.fdxconsultation.service.ifaces.searchs;
+
+import com.megatim.fdxconsultation.model.searchentities.RoleSearch;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractFormDataIFaces;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface RoleSearchRS extends AbstractFormDataIFaces<RoleSearch> {
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/TableauBordSearchRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/TableauBordSearchRS.java
new file mode 100644
index 0000000..94f9c53
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/TableauBordSearchRS.java
@@ -0,0 +1,7 @@
+package com.megatim.fdxconsultation.service.ifaces.searchs;
+
+import com.megatim.fdxconsultation.model.searchentities.TableauBordSpecificSearch;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractFormDataIFaces;
+
+public interface TableauBordSearchRS extends AbstractFormDataIFaces<TableauBordSpecificSearch> {
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/TypeFichierReferentielSearchRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/TypeFichierReferentielSearchRS.java
new file mode 100644
index 0000000..712012f
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/TypeFichierReferentielSearchRS.java
@@ -0,0 +1,32 @@
+package com.megatim.fdxconsultation.service.ifaces.searchs;
+
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierReferentielSearch;
+import com.mgt.rs.security.core.common.Secured;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface TypeFichierReferentielSearchRS {
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(action = "*")
+    public Response formDataWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pagesize, TypeFichierReferentielSearch searchEntity);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("count")
+    @Secured(action = "*")
+    public Long countFormData(@Context HttpHeaders headers, TypeFichierReferentielSearch searchEntity);
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/TypeFichierSearchRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/TypeFichierSearchRS.java
new file mode 100644
index 0000000..34966c2
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/TypeFichierSearchRS.java
@@ -0,0 +1,11 @@
+package com.megatim.fdxconsultation.service.ifaces.searchs;
+
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierSearch;
+import com.megatim.fdxconsultation.service.ifaces.abstracts.AbstractFormDataIFaces;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface TypeFichierSearchRS extends AbstractFormDataIFaces<TypeFichierSearch> {
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/UserParticipantSearchRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/UserParticipantSearchRS.java
new file mode 100644
index 0000000..5073590
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/UserParticipantSearchRS.java
@@ -0,0 +1,45 @@
+package com.megatim.fdxconsultation.service.ifaces.searchs;
+
+import com.megatim.fdxconsultation.model.searchentities.ParticipantSearch;
+import com.mgt.rs.security.core.common.Secured;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface UserParticipantSearchRS {
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("form-data")
+    @Secured(action = "*")
+    public Response formData(@Context HttpHeaders headers);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("form-data-withpagination/{pageNumber}/{pagesize}")
+    @Secured(action = "*")
+    public Response formDataWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber,
+            @PathParam("pagesize") Integer pagesize, ParticipantSearch searchEntity);
+    
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("form-data-all")
+    @Secured(action = "*")
+    public Response formDataFindAll(@Context HttpHeaders headers, ParticipantSearch searchEntity);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("count-form-data")
+    @Secured(action = "*")
+    public Long countFormData(@Context HttpHeaders headers, ParticipantSearch searchEntity);
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/UserTypeFichierSearchRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/UserTypeFichierSearchRS.java
new file mode 100644
index 0000000..412735d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/UserTypeFichierSearchRS.java
@@ -0,0 +1,35 @@
+package com.megatim.fdxconsultation.service.ifaces.searchs;
+
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierSearch;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface UserTypeFichierSearchRS {
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("form-data/{userName}")
+    public Response formData(@Context HttpHeaders headers, @PathParam("userName") String userName);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("form-data-withpagination/{userName}/{pageNumber}/{pagesize}")
+    public Response formDataWithPagination(@Context HttpHeaders headers, @PathParam("userName") String userName, @PathParam("pageNumber") Integer pageNumber,
+            @PathParam("pagesize") Integer pagesize, TypeFichierSearch searchEntity);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("count-form-data/{userName}")
+    public Long countFormData(@Context HttpHeaders headers, @PathParam("userName") String userName, TypeFichierSearch searchEntity);
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/UserTypeFichierWithReferentielSearchRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/UserTypeFichierWithReferentielSearchRS.java
new file mode 100644
index 0000000..a4bd000
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/searchs/UserTypeFichierWithReferentielSearchRS.java
@@ -0,0 +1,33 @@
+package com.megatim.fdxconsultation.service.ifaces.searchs;
+
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierSearch;
+import com.mgt.rs.security.core.common.Secured;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface UserTypeFichierWithReferentielSearchRS {
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{referentiel}/{pageNumber}/{pagesize}")
+    @Secured(action = "*")
+    public Response formDataWithPagination(@Context HttpHeaders headers, @PathParam("referentiel") String referentiel, @PathParam("pageNumber") Integer pageNumber,
+            @PathParam("pagesize") Integer pagesize, TypeFichierSearch searchEntity);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("count/{referentiel}")
+    @Secured(action = "*")
+    public Long countFormData(@Context HttpHeaders headers, @PathParam("referentiel") String referentiel, TypeFichierSearch searchEntity);
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/settings/DisplayOptionsRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/settings/DisplayOptionsRS.java
new file mode 100644
index 0000000..f3693f0
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/settings/DisplayOptionsRS.java
@@ -0,0 +1,32 @@
+package com.megatim.fdxconsultation.service.ifaces.settings;
+
+import com.megatim.fdxconsultation.model.settings.DisplayOptions;
+import com.mgt.rs.security.core.common.Secured;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface DisplayOptionsRS {
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("current")
+    @Secured(action = "edition", enable = true)
+    public Response current(@Context HttpHeaders headers);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("edit")
+    @Secured(action = "edition", enable = true)
+    public Response edit(@Context HttpHeaders headers, DisplayOptions displayOptions);
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/settings/SettingRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/settings/SettingRS.java
new file mode 100644
index 0000000..3d31c8f
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/settings/SettingRS.java
@@ -0,0 +1,22 @@
+package com.megatim.fdxconsultation.service.ifaces.settings;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface SettingRS {
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("current-referentiel")
+    public Response currentReferentiel(@Context HttpHeaders headers);
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/stats/TableauBordGlobalRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/stats/TableauBordGlobalRS.java
new file mode 100644
index 0000000..fc71bf1
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/stats/TableauBordGlobalRS.java
@@ -0,0 +1,123 @@
+package com.megatim.fdxconsultation.service.ifaces.stats;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.model.dto.stats.TableauBordDto;
+import com.megatim.fdxconsultation.model.dto.stats.TableauBordSlimDto;
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import com.megatim.fdxconsultation.model.stats.dto.TableauBordRequest;
+import com.mgt.rs.security.core.common.Secured;
+import java.util.ArrayList;
+import java.util.List;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.validation.Valid;
+import javax.ws.rs.POST;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface TableauBordGlobalRS /*extends AbstractReadWithCriteriaEntityIFaces<TableauBord, TableauBordDto, Long>*/ {
+
+    public TableauBordSlimDto mapToSlimDto(TableauBord entity);
+
+    //@Override
+    public default TableauBordDto mapToDto(TableauBord entity) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public default List<TableauBordSlimDto> allToSlimDto(List<TableauBord> datas) {
+        List<TableauBordSlimDto> dtos = new ArrayList<>();
+
+        if (datas != null) {
+            for (TableauBord data : datas) {
+                dtos.add(mapToSlimDto(data));
+            }
+        }
+        return dtos;
+    }
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Path("print-metadata/{referentiel_version}/{code_type_fichier}")
+    @Secured(actions = {"ajouter", "modifier"})
+    @LoggingInterceptorBinding(message = "Consultation des colonnes de recherche pour le tableau de bord dont associé au typefichier {code_type_fichier}", classe = TableauBordSlimDto.class)
+    public Response getColumns(@Context HttpHeaders headers, @PathParam("referentiel_version") String referentielVersion, @PathParam("code_type_fichier") String codeTypeFichier);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Path("get-datas/{referentiel_version}/{code_type_fichier}")
+    @Secured(action = "consulter", actions = {"ajouter", "modifier"}, enable = true)
+    @LoggingInterceptorBinding(message = "Consultation des données pour le tableau de bord dont associé au typefichier {code_type_fichier}", classe = TableauBordSlimDto.class)
+    public Response getDatas(@Context HttpHeaders headers, @PathParam("referentiel_version") String referentielVersion, @PathParam("code_type_fichier") String codeTypeFichier);
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("add")
+    @Secured(action = "ajouter", enable = true)
+    @LoggingInterceptorBinding(message = "Ajout d'un nouveau tableau de bord du typefichier [1.typeFichier.code], l'identifiant est (id)", classe = TableauBordSlimDto.class)
+    public Response save(@Context HttpHeaders headers, @Valid TableauBordRequest tableauBordRequest);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Path("update/{id}")
+    @Secured(action = "modifier", enable = true)
+    public Response update(@Context HttpHeaders headers, @PathParam("id") Long id, @Valid TableauBordRequest tableauBordRequest);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("delete/{id}")
+    @Secured(action = "ajouter", enable = true)
+    @LoggingInterceptorBinding(message = "Suppression du tableau de bord dont l'identifiant est {id}")
+    public Response delete(@Context HttpHeaders headers, @PathParam("id") Long id);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("delete-user-tableaubord/{userName}")
+    @Secured(action = "ajouter", enable = true)
+    public Response deleteUserTableauBord(@Context HttpHeaders headers, @PathParam("userName") String userName);
+
+    //public K mapToDto(T entity);
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findbyid/{id}")
+    @Secured(actions = {"ajouter", "modifier"})
+    public Response findById(@Context HttpHeaders headers, @PathParam("id") Long id);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(actions = {"ajouter", "modifier"})
+    @LoggingInterceptorBinding(message = "Consultation des colonnes de recherche pour le tableau de bord dont associé au typefichier {code_type_fichier}", classe = TableauBordSlimDto.class)
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("count")
+    @Secured(actions = {"ajouter", "modifier"})
+    public Long count(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("search-columns")
+    @Secured(actions = {"ajouter", "modifier"})
+    public Response getSearchColumns(@Context HttpHeaders headers);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Secured(actions = {"ajouter", "modifier"})
+    @Path("find-all")
+    public Response findAll(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/stats/TableauBordRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/stats/TableauBordRS.java
new file mode 100644
index 0000000..2df603e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/stats/TableauBordRS.java
@@ -0,0 +1,122 @@
+package com.megatim.fdxconsultation.service.ifaces.stats;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.model.dto.stats.TableauBordDto;
+import com.megatim.fdxconsultation.model.dto.stats.TableauBordSlimDto;
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import com.megatim.fdxconsultation.model.stats.dto.TableauBordRequest;
+import com.mgt.rs.security.core.common.Secured;
+import java.util.ArrayList;
+import java.util.List;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.validation.Valid;
+import javax.ws.rs.POST;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface TableauBordRS /*extends AbstractReadWithCriteriaEntityIFaces<TableauBord, TableauBordDto, Long>*/ {
+
+    public TableauBordSlimDto mapToSlimDto(TableauBord entity);
+
+    //@Override
+    public default TableauBordDto mapToDto(TableauBord entity) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public default List<TableauBordSlimDto> allToSlimDto(List<TableauBord> datas) {
+        List<TableauBordSlimDto> dtos = new ArrayList<>();
+
+        if (datas != null) {
+            for (TableauBord data : datas) {
+                dtos.add(mapToSlimDto(data));
+            }
+        }
+        return dtos;
+    }
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Path("print-metadata/{referentiel_version}/{code_type_fichier}")
+    @Secured(actions = {"éditer"}, enable = true)
+    @LoggingInterceptorBinding(message = "Consultation des colonnes de recherche pour le tableau de bord dont associé au typefichier {code_type_fichier}", classe = TableauBordSlimDto.class)
+    public Response getColumns(@Context HttpHeaders headers, @PathParam("referentiel_version") String referentielVersion, @PathParam("code_type_fichier") String codeTypeFichier);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Path("get-datas/{referentiel_version}/{code_type_fichier}")
+    @Secured(action = "éditer", enable = true)
+    @LoggingInterceptorBinding(message = "Consultation des données pour le tableau de bord dont associé au typefichier {code_type_fichier}", classe = TableauBordSlimDto.class)
+    public Response getDatas(@Context HttpHeaders headers, @PathParam("referentiel_version") String referentielVersion, @PathParam("code_type_fichier") String codeTypeFichier);
+
+    @POST
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("add")
+    @Secured(action = "éditer", enable = true)
+    @LoggingInterceptorBinding(message = "Ajout d'un nouveau tableau de bord du typefichier [1.typeFichier.code], l'identifiant est (id)", classe = TableauBordSlimDto.class)
+    public Response save(@Context HttpHeaders headers, @Valid TableauBordRequest tableauBordRequest);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Consumes({MediaType.APPLICATION_JSON})
+    @Path("update/{id}")
+    @Secured(action = "éditer", enable = true)
+    public Response update(@Context HttpHeaders headers, @PathParam("id") Long id, @Valid TableauBordRequest tableauBordRequest);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("delete/{id}")
+    @Secured(action = "éditer", enable = true)
+    @LoggingInterceptorBinding(message = "Suppression du tableau de bord dont l'identifiant est {id}")
+    public Response delete(@Context HttpHeaders headers, @PathParam("id") Long id);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("delete-user-tableaubord/{userName}")
+    @Secured(action = "éditer", enable = true)
+    public Response deleteUserTableauBord(@Context HttpHeaders headers, @PathParam("userName") String userName);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findbyid/{id}")
+    @Secured(actions = {"éditer"})
+    public Response findById(@Context HttpHeaders headers, @PathParam("id") Long id);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("findwithpagination/{pageNumber}/{pagesize}")
+    @Secured(actions = {"éditer"})
+    @LoggingInterceptorBinding(message = "Consultation des colonnes de recherche pour le tableau de bord dont associé au typefichier {code_type_fichier}", classe = TableauBordSlimDto.class)
+    public Response findWithPagination(@Context HttpHeaders headers, @PathParam("pageNumber") Integer pageNumber, @PathParam("pagesize") Integer pageSize, CriteriaFormRequest criteriaFormRequest);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("count")
+    @Secured(actions = {"éditer"})
+    public Long count(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("search-columns")
+    @Secured(actions = {"éditer"})
+    public Response getSearchColumns(@Context HttpHeaders headers);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Secured(actions = {"éditer"})
+    @Path("find-all")
+    public Response findAll(@Context HttpHeaders headers, CriteriaFormRequest criteriaFormRequest);
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/supervision/SupervisionRS.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/supervision/SupervisionRS.java
new file mode 100644
index 0000000..b9c4a5d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/supervision/SupervisionRS.java
@@ -0,0 +1,45 @@
+package com.megatim.fdxconsultation.service.ifaces.supervision;
+
+import com.megatim.fdxconsultation.model.supervision.dto.StandaloneDashboardRequest;
+import com.megatim.fdxconsultation.model.supervision.dto.SupervisionFilterModalFormRequest;
+import com.mgt.rs.security.core.common.Secured;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public interface SupervisionRS {
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("data")
+    @Secured(action = "Suivi des échanges", enable = true)
+    public Response supervisionData(@Context HttpHeaders headers, SupervisionFilterModalFormRequest supervisionFilterModalFormRequest);
+
+    @GET
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("standalone-state")
+    @Secured(action = "Paramètres", enable = true)
+    public Response standaloneState(@Context HttpHeaders headers);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("dashboard")
+    @Secured(action = "Tableau bord activités", enable = true)
+    public Response dashboard(@Context HttpHeaders headers, StandaloneDashboardRequest standaloneDashboardRequest);
+
+    @POST
+    @Produces({MediaType.APPLICATION_JSON})
+    @Path("filter")
+    @Secured(action = "Suivi des échanges", enable = true)
+    public Response filterTransferts(@Context HttpHeaders headers, SupervisionFilterModalFormRequest supervisionFilterModalFormRequest);
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/timer/processor/DeleteDataProductionJob.java b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/timer/processor/DeleteDataProductionJob.java
new file mode 100644
index 0000000..3b03d0a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-ifaces/src/main/java/com/megatim/fdxconsultation/service/ifaces/timer/processor/DeleteDataProductionJob.java
@@ -0,0 +1,13 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.ifaces.timer.processor;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface DeleteDataProductionJob {
+    void delete() throws Exception;
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/.gitignore b/fdx-consultation/fdxconsultation-service-impl/.gitignore
new file mode 100644
index 0000000..b24d71e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/.gitignore
@@ -0,0 +1,50 @@
+# These are some examples of commonly ignored file patterns.
+# You should customize this list as applicable to your project.
+# Learn more about .gitignore:
+#     https://www.atlassian.com/git/tutorials/saving-changes/gitignore
+
+# Node artifact files
+node_modules/
+dist/
+
+# Compiled Java class files
+*.class
+
+# Compiled Python bytecode
+*.py[cod]
+
+# Log files
+*.log
+
+# Package files
+*.jar
+
+# Maven
+target/
+dist/
+
+# JetBrains IDE
+.idea/
+
+# Unit test reports
+TEST*.xml
+
+# Generated by MacOS
+.DS_Store
+
+# Generated by Windows
+Thumbs.db
+
+# Applications
+*.app
+*.exe
+*.war
+
+# Large media files
+*.mp4
+*.tiff
+*.avi
+*.flv
+*.mov
+*.wmv
+
diff --git a/fdx-consultation/fdxconsultation-service-impl/nb-configuration.xml b/fdx-consultation/fdxconsultation-service-impl/nb-configuration.xml
new file mode 100644
index 0000000..d7fafee
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/nb-configuration.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+    <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+        <!--
+Properties that influence various parts of the IDE, especially code formatting and the like. 
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+        <org-netbeans-modules-maven-j2ee.netbeans_2e_hint_2e_j2eeVersion>1.8-web</org-netbeans-modules-maven-j2ee.netbeans_2e_hint_2e_j2eeVersion>
+        <org-netbeans-modules-maven-j2ee.netbeans_2e_hint_2e_deploy_2e_server>WildFly</org-netbeans-modules-maven-j2ee.netbeans_2e_hint_2e_deploy_2e_server>
+        <org-netbeans-modules-maven-jaxws.rest_2e_config_2e_type>ide</org-netbeans-modules-maven-jaxws.rest_2e_config_2e_type>
+        <netbeans.hint.jdkPlatform>JDK_1.8</netbeans.hint.jdkPlatform>
+    </properties>
+</project-shared-configuration>
diff --git a/fdx-consultation/fdxconsultation-service-impl/pom.xml b/fdx-consultation/fdxconsultation-service-impl/pom.xml
new file mode 100644
index 0000000..0320f3e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/pom.xml
@@ -0,0 +1,242 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <artifactId>fdxconsultation</artifactId>
+        <groupId>com.megatim.fdxconsultation</groupId>
+        <version>1.0</version>
+    </parent>
+
+    <groupId>com.megatim.fdxconsultation.service.impl</groupId>
+    <artifactId>fdxconsultation-service-impl</artifactId>
+    <version>1.0</version>
+    <packaging>war</packaging>
+
+    <name>fdxconsultation-service-impl</name>
+
+    <properties>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <failOnMissingWebXml>false</failOnMissingWebXml>
+        <jakartaee>8.0</jakartaee>
+
+        <!--        <serveur.jboss.repertoire.deploiement.war>
+            C:\wildfly\standalone\deployments\fdxconsultation-service-impl-1.0.war
+        </serveur.jboss.repertoire.deploiement.war>
+        <repertoire.target.generation.war>
+            C:\Users\Gabuntu\Documents\NetBeansProjects\share_sources\fdx-consultation\fdxconsultation-service-impl\target\fdxconsultation-service-impl-1.0.war
+        </repertoire.target.generation.war>-->
+<!--        <serveur.jboss.repertoire.deploiement.war>C:\Users\serge\Documents\donnees\serveurs\wildfly-17.0.0.Final-fdx-consultation-local\standalone\deployments\fdxconsultation-service-impl-1.0.war</serveur.jboss.repertoire.deploiement.war>
+        <repertoire.target.generation.war>C:\sources\share_sources\fdx-consultation\fdxconsultation-service-impl\target\fdxconsultation-service-impl-1.0.war</repertoire.target.generation.war>-->
+        <serveur.jboss.repertoire.deploiement.war>D:\wildfly-17.0.0.Final-web-local\standalone\deployments\fdxconsultation-service-impl-1.0.war</serveur.jboss.repertoire.deploiement.war>
+        <repertoire.target.generation.war>C:\Users\ASUS\Documents\NetBeansProjects\share_sources\fdx-consultation\fdxconsultation-service-impl\target\fdxconsultation-service-impl-1.0.war</repertoire.target.generation.war><!--
+        -->
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.megatim.fdxconsultation.service.ifaces</groupId>
+            <artifactId>fdxconsultation-service-ifaces</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.xmlbeans</groupId>
+                    <artifactId>xmlbeans</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim</groupId>
+            <artifactId>rs-security-core</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.xmlbeans</groupId>
+                    <artifactId>xmlbeans</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxconsultation.core.impl</groupId>
+            <artifactId>fdxconsultation-core-impl</artifactId>
+            <version>1.0</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.xmlbeans</groupId>
+                    <artifactId>xmlbeans</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxconsultation.model</groupId>
+            <artifactId>fdxconsultation-model</artifactId>
+            <version>1.0</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.xmlbeans</groupId>
+                    <artifactId>xmlbeans</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.chat</groupId>
+            <artifactId>application-chat-service-impl-dependency</artifactId>
+            <version>1.0</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.xmlbeans</groupId>
+                    <artifactId>xmlbeans</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxconsultation</groupId>
+            <artifactId>fdxconsultation-tools</artifactId>
+            <version>1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>javax</groupId>
+            <artifactId>javaee-api</artifactId>
+            <version>${jakartaee}</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.xmlbeans</groupId>
+                    <artifactId>xmlbeans</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>xerces</groupId>
+            <artifactId>xercesImpl</artifactId>
+            <version>2.12.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.eclipse.aether</groupId>
+            <artifactId>aether-api</artifactId>
+            <version>1.1.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.11.0</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <compilerArguments>
+                        <endorseddirs>${endorsed.dir}</endorseddirs>
+                    </compilerArguments>
+                    <!--<annotationProcessorPaths>
+                        <path>
+                            <groupId>org.mapstruct</groupId>
+                            <artifactId>mapstruct-processor</artifactId>
+                            <version>1.5.3.Final</version>
+                        </path>
+                        <path>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                            <version>1.18.22</version>
+                        </path>
+                    </annotationProcessorPaths>-->
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <version>2.6</version>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>2.8</version>
+                <executions>
+                    <execution>
+                        <phase>validate</phase>
+                        <goals>
+                            <goal>copy</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${endorsed.dir}</outputDirectory>
+                            <silent>true</silent>
+                            <artifactItems>
+                                <artifactItem>
+                                    <groupId>javax</groupId>
+                                    <artifactId>javaee-api</artifactId>
+                                    <version>${jakartaee}</version>
+                                    <type>jar</type>
+                                </artifactItem>
+                            </artifactItems>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <!--  Ant run maven plugin -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <version>1.8</version>
+                <executions>
+                    <execution>
+                        <id>mkdir-files-artifact-repo</id>
+                        <phase>install</phase>
+                        <configuration>
+                            <tasks>
+                                <delete file="${serveur.jboss.repertoire.deploiement.war}"/>
+                                <copy file="${repertoire.target.generation.war}"
+                                      tofile="${serveur.jboss.repertoire.deploiement.war}"/>
+                            </tasks>
+                        </configuration>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/JAXRSConfiguration.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/JAXRSConfiguration.java
new file mode 100644
index 0000000..0078ef4
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/JAXRSConfiguration.java
@@ -0,0 +1,13 @@
+package com.megatim.fdxconsultation.service.impl;
+
+import javax.ws.rs.ApplicationPath;
+import javax.ws.rs.core.Application;
+
+/**
+ * Configures JAX-RS for the application.
+ * @author Leonel FOFOU
+ */
+@ApplicationPath("fdx-consultation")
+public class JAXRSConfiguration extends Application {
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/Utils.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/Utils.java
new file mode 100644
index 0000000..e69583e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/Utils.java
@@ -0,0 +1,48 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.megatim.fdxconsultation.service.impl;
+
+import com.megatim.fdxconsultation.model.administration.Role;
+import com.megatim.fdxconsultation.model.administration.User;
+import java.util.List;
+
+/**
+ *
+ * @author bissey
+ */
+public class Utils {
+
+    /**
+     * On injecte un Gestionnaire d'entites
+     *
+     */
+
+    public static final String MODULE_MEDIAS = "Medias";
+
+
+    public static List<Role> removeRoleAdmin(List<Role> roles) {
+
+        //Si non vide
+        if (roles != null) {
+            roles.removeIf(r -> (r.getAdmin()));
+            roles.removeIf(r -> (r.getMegaAdmin()));
+            roles.removeIf(r -> (r.getSuperAdmin()));
+        }
+        return roles;
+    }
+
+    public static List<User> removeUserAdmin(List<User> users) {
+
+        //Si non vide
+        if (users != null) {
+            users.removeIf(u -> (u.getUserName().equals("adminc")));
+            users.removeIf(u -> (u.getUserName().equals("adminv")));
+            users.removeIf(u -> (u.getUserName().equals("admin")));
+        }
+        return users;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/JournalActionUtilisateurRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/JournalActionUtilisateurRSImpl.java
new file mode 100644
index 0000000..dbda0a3
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/JournalActionUtilisateurRSImpl.java
@@ -0,0 +1,221 @@
+package com.megatim.fdxconsultation.service.impl.administration;
+
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.administration.JournalActionUtilisateurManager;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.log.UserActionLogManager;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.fdxconsultation.model.administration.JournalActionUtilisateur;
+import com.megatim.fdxconsultation.reporting.model.administration.JournalActionUtilisateurReporting;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.JournalActionUtilisateurDto;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.service.ifaces.administration.JournalActionUtilisateurRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.util.PrintableColumnExtractor;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredAdmin;
+import com.mgt.rs.security.core.common.SecuredClass;
+import com.mgt.rs.security.core.common.SecuredMegaAdmin;
+import com.mgt.rs.security.core.common.SecuredSuperAdmin;
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import javax.enterprise.context.Dependent;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ * REST Web Service
+ *
+ * @author ABEGA
+ */
+@SecuredClass(module = AppCommonContext.MODULE_ADMINISTRATION, path = "Journal des actions utilisateur", description = "Journal des actions utilisateur")
+@SecuredAdmin(action = {"exporter"})
+@SecuredSuperAdmin(action = {"exporter"})
+@SecuredMegaAdmin(action = {"exporter"})
+@Path("journalactionutilisateur")
+@Dependent
+public class JournalActionUtilisateurRSImpl implements JournalActionUtilisateurRS {
+
+    @Inject
+    protected JournalActionUtilisateurManager manager;
+
+    @Inject
+    private UserActionLogManager userActionLogManager;
+
+    @Inject
+    protected UserManager userManager;
+
+    @AuthenticatedUser
+    private User utilisateurConnecte;
+
+    @Inject
+    private MapStructMapper mapstructMapper;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    public JournalActionUtilisateurRSImpl() {
+        super();
+    }
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public JournalActionUtilisateurDto mapToDto(JournalActionUtilisateur entity) {
+        return mapstructMapper.journalActionUtilisateurToJournalActionUtilisateurDto(entity);
+    }
+
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(JournalActionUtilisateur.class)).build();
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pageSize, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            List<JournalActionUtilisateur> data = manager.findWithPagination(ajoutDesCriteresFixesDeRecherche(criteriaFormRequest),
+                    Arrays.asList(), Arrays.asList(new OrderByDefinition(manager.getEntityIdName(), OrderByType.DESC)), pageNumber, pageSize);
+            return Response.ok(mapstructMapper.journalActionUtilisateurListToJournalActionUtilisateurgDtoList(data)).build();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = ajoutDesCriteresFixesDeRecherche(criteriaFormRequest);
+            return manager.count(criterion);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, Long id) {
+        JournalActionUtilisateur datum = manager.findById(id);
+        return Response.ok(mapToDto(datum)).build();
+    }
+
+    @Override
+    public Response printAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            CriteriaEntityFromView criterion = ajoutDesCriteresFixesDeRecherche(reportConfiguration.getSearchEntity());
+            reportConfiguration.setSearchEntity(new CriteriaFormRequest(criterion));
+            File file = manager.printAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response printOne(HttpHeaders headers, @Context HttpServletRequest request, Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.printOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response getPrintableColumns(HttpHeaders headers) {
+        List<CustomField> customFields = PrintableColumnExtractor.extract(JournalActionUtilisateurReporting.class);
+        return Response.ok(mapstructMapper.customFieldListToCustomFieldDtoList(customFields)).build();
+    }
+
+    @Override
+    public Response exportExcelAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            CriteriaEntityFromView criterion = ajoutDesCriteresFixesDeRecherche(reportConfiguration.getSearchEntity());
+            reportConfiguration.setSearchEntity(new CriteriaFormRequest(criterion));
+            File file = manager.exportExcelAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.exportExcelOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            return Response.ok(manager.findAll(ajoutDesCriteresFixesDeRecherche(criteriaFormRequest),
+                    Arrays.asList(), Arrays.asList())).build();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    /**
+     * Methode permettant d'ajouter critères des recherches fixes
+     *
+     * @param criteriaFormRequest
+     * @return
+     */
+    private CriteriaEntityFromView ajoutDesCriteresFixesDeRecherche(CriteriaFormRequest criteriaFormRequest) {
+        CriteriaEntityFromView finalCriterion = new CriteriaEntityFromView();
+        CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+        finalCriterion.setCriteriaLogicConnector(CriteriaLogicConnector.AND);
+        finalCriterion.getSubCriterias().add( newCriteriaEntityFromView("relativePath", "/auth/login", Operateur.NOT_EQUALS));
+        finalCriterion.getSubCriterias().add( newCriteriaEntityFromView("relativePath", "/auth/logout", Operateur.NOT_EQUALS));
+        
+        if (criterion != null) {
+            finalCriterion.getSubCriterias().add(criterion);
+        }
+        return finalCriterion;
+    }
+
+    private CriteriaEntityFromView newCriteriaEntityFromView(String nomColonne, Object criteriaValue, Operateur operateur) {
+        CriteriaEntityFromView criterion = new CriteriaEntityFromView();
+        criterion.setNomColonne(nomColonne);
+        criterion.setCriteriaValue(criteriaValue);
+        criterion.setOperateur(operateur);
+
+        return criterion;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/JournalConnexionUtilisateurRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/JournalConnexionUtilisateurRSImpl.java
new file mode 100644
index 0000000..2609915
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/JournalConnexionUtilisateurRSImpl.java
@@ -0,0 +1,220 @@
+package com.megatim.fdxconsultation.service.impl.administration;
+
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.administration.JournalConnexionUtilisateurManager;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.fdxconsultation.model.administration.JournalConnexionUtilisateur;
+import com.megatim.fdxconsultation.reporting.model.administration.JournalConnexionUtilisateurReporting;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.JournalConnexionUtilisateurDto;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.service.ifaces.administration.JournalConnexionUtilisateurRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.util.PrintableColumnExtractor;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredAdmin;
+import com.mgt.rs.security.core.common.SecuredClass;
+import com.mgt.rs.security.core.common.SecuredMegaAdmin;
+import com.mgt.rs.security.core.common.SecuredSuperAdmin;
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import javax.enterprise.context.Dependent;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ * REST Web Service
+ *
+ * @author ABEGA
+ */
+@SecuredClass(module = AppCommonContext.MODULE_ADMINISTRATION, path = "Journal des connexions utilisateur", description = "Journal des connexions utilisateur")
+@SecuredAdmin(action = {"exporter"})
+@SecuredSuperAdmin(action = {"exporter"})
+@SecuredMegaAdmin(action = {"exporter"})
+@Path("journalconnexionutilisateur")
+@Dependent
+public class JournalConnexionUtilisateurRSImpl implements JournalConnexionUtilisateurRS {
+
+    @Inject
+    protected JournalConnexionUtilisateurManager manager;
+
+    @Inject
+    protected UserManager userManager;
+
+    @AuthenticatedUser
+    private User utilisateurConnecte;
+
+    @Inject
+    private MapStructMapper mapstructMapper;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    public JournalConnexionUtilisateurRSImpl() {
+        super();
+    }
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public JournalConnexionUtilisateurDto mapToDto(JournalConnexionUtilisateur entity) {
+        return mapstructMapper.journalConnexionUtilisateurToJournalConnexionUtilisateurDto(entity);
+    }
+    
+
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(JournalConnexionUtilisateur.class)).build();
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pageSize, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            List<JournalConnexionUtilisateur> data = manager.findWithPagination(ajoutDesCriteresFixesDeRecherche(criteriaFormRequest),
+                    Arrays.asList(), Arrays.asList(new OrderByDefinition(manager.getEntityIdName(), OrderByType.DESC)), pageNumber, pageSize);
+            return Response.ok(mapstructMapper.journalConnexionUtilisateurListToJournalConnexionUtilisateurDtoList(data)).build();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = ajoutDesCriteresFixesDeRecherche(criteriaFormRequest);
+            return manager.count(criterion);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, Long id) {
+        JournalConnexionUtilisateur datum = manager.findById(id);
+        return Response.ok(mapToDto(datum)).build();
+    }
+
+    @Override
+    public Response printAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        
+        try {
+            CriteriaEntityFromView criterion = ajoutDesCriteresFixesDeRecherche(reportConfiguration.getSearchEntity());
+            reportConfiguration.setSearchEntity(new CriteriaFormRequest(criterion));
+            File file = manager.printAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+        
+    }
+
+    @Override
+    public Response printOne(HttpHeaders headers, @Context HttpServletRequest request, Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        
+        try {
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.printOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+        
+    }
+    
+    @Override
+    public Response getPrintableColumns(HttpHeaders headers) {
+        List<CustomField> customFields = PrintableColumnExtractor.extract(JournalConnexionUtilisateurReporting.class);
+        return Response.ok(mapstructMapper.customFieldListToCustomFieldDtoList(customFields)).build();
+    }
+
+    @Override
+    public Response exportExcelAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            CriteriaEntityFromView criterion = ajoutDesCriteresFixesDeRecherche(reportConfiguration.getSearchEntity());
+            reportConfiguration.setSearchEntity(new CriteriaFormRequest(criterion));
+            File file = manager.exportExcelAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.exportExcelOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+    
+    @Override
+    public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            return Response.ok(manager.findAll(ajoutDesCriteresFixesDeRecherche(criteriaFormRequest), 
+                    Arrays.asList(), Arrays.asList())).build();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+    
+    /**
+     * Methode permettant d'ajouter critères des recherches fixes
+     * @param criteriaFormRequest
+     * @return 
+     */
+    private CriteriaEntityFromView ajoutDesCriteresFixesDeRecherche(CriteriaFormRequest criteriaFormRequest) {
+        CriteriaEntityFromView finalCriterion = new CriteriaEntityFromView();
+        CriteriaEntityFromView tmpCriterion = new CriteriaEntityFromView();
+        CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+        finalCriterion.setCriteriaLogicConnector(CriteriaLogicConnector.AND);
+        tmpCriterion.setCriteriaLogicConnector(CriteriaLogicConnector.OR);
+        tmpCriterion.getSubCriterias().add(newCriteriaEntityFromView("relativePath", "/auth/login", Operateur.LIKE));
+        tmpCriterion.getSubCriterias().add(newCriteriaEntityFromView("relativePath", "/auth/logout", Operateur.LIKE));
+        finalCriterion.getSubCriterias().add(tmpCriterion);
+        if (criterion != null) {
+            finalCriterion.getSubCriterias().add(criterion);
+        }       
+        return finalCriterion;
+    }
+    
+    private CriteriaEntityFromView newCriteriaEntityFromView(String nomColonne, Object criteriaValue, Operateur operateur) {
+        CriteriaEntityFromView criterion = new CriteriaEntityFromView();
+        criterion.setNomColonne(nomColonne);
+        criterion.setCriteriaValue(criteriaValue);
+        criterion.setOperateur(operateur);
+
+        return criterion;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/RoleRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/RoleRSImpl.java
new file mode 100644
index 0000000..d65df5c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/RoleRSImpl.java
@@ -0,0 +1,270 @@
+package com.megatim.fdxconsultation.service.impl.administration;
+
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.EtatOperation;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.administration.ActionManager;
+import com.megatim.fdxconsultation.core.ifaces.administration.RoleManager;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.log.UserActionLogManager;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.fdxconsultation.model.administration.Role;
+import com.megatim.fdxconsultation.reporting.model.administration.RoleReporting;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.RoleDto;
+import com.megatim.fdxconsultation.model.formodel.RoleFormModel;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.service.ifaces.administration.RoleRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.util.PrintableColumnExtractor;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredAdmin;
+import com.mgt.rs.security.core.common.SecuredClass;
+import com.mgt.rs.security.core.common.SecuredMegaAdmin;
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ * REST Web Service
+ *
+ * @author ABEGA
+ */
+@SecuredClass(module = AppCommonContext.MODULE_ADMINISTRATION, path = "Groupes utilisateurs", description = "Groupes utilisateurs")
+@SecuredAdmin(action = {"ajouter", "modifier", "supprimer", "exporter"})
+@SecuredMegaAdmin(action = {"ajouter", "modifier", "supprimer", "exporter"})
+@Path("role")
+public class RoleRSImpl implements RoleRS {
+
+    @Inject
+    private RoleManager manager;
+
+    @Inject
+    private UserActionLogManager userActionLogManager;
+
+    @Inject
+    private UserManager userManager;
+
+    @Inject
+    private ActionManager actionManager;
+
+    @Inject
+    private MapStructMapper mapstructMapper;
+
+    @AuthenticatedUser
+    private static User utilisateurConnecte;
+
+    @Inject
+    private com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    public RoleRSImpl() {
+        super();
+    }
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public Response save(HttpHeaders headers, Role entity) {
+        Role newEntity = manager.add(entity, utilisateurConnecte);
+        return Response.ok(manager.mapToDto(newEntity)).build();
+    }
+
+    @Override
+    public Response update(HttpHeaders headers, Long id, Role entity) {
+        Role newEntity = manager.modify(id, entity, utilisateurConnecte);
+        return Response.ok(manager.mapToDto(newEntity)).build();
+    }
+
+    @Override
+    public Response delete(HttpHeaders headers, Long id) {
+        manager.remove(id, utilisateurConnecte);
+        return Response.ok().build();
+    }
+
+    @Override
+    public RoleDto mapToDto(Role entity) {
+        return mapstructMapper.roleToRoleDto(entity);
+    }
+
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(Role.class)).build();
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pageSize, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            List<Role> datas = manager.findWithPagination(ajoutDesCriteresFixesDeRecherche(criteriaFormRequest),
+                    Arrays.asList(), Arrays.asList(new OrderByDefinition(manager.getEntityIdName(), OrderByType.DESC)), pageNumber, pageSize);
+            return Response.ok(mapstructMapper.roleListToRoleDtoList(datas)).build();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = ajoutDesCriteresFixesDeRecherche(criteriaFormRequest);
+            return manager.count(criterion);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, Long id) {
+        RoleDto datum = manager.getById(id);
+        return Response.ok(datum).build();
+    }
+
+    @Override
+    public Response printAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            CriteriaEntityFromView criterion = ajoutDesCriteresFixesDeRecherche(reportConfiguration.getSearchEntity());
+            reportConfiguration.setSearchEntity(new CriteriaFormRequest(criterion));
+            File file = manager.printAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response printOne(HttpHeaders headers, @Context HttpServletRequest request, Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            Role entite = manager.find(manager.getEntityIdName(), id);
+            userActionLogManager.log(headers, request, "Export pdf détail groupe utilisateur : " + entite.getLibelle() + " (id=" + entite.getId() + ")",
+                    utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.printOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response getPrintableColumns(HttpHeaders headers) {
+        List<CustomField> customFields = PrintableColumnExtractor.extract(RoleReporting.class);
+        return Response.ok(mapstructMapper.customFieldListToCustomFieldDtoList(customFields)).build();
+    }
+
+    @Override
+    public Response exportExcelAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            CriteriaEntityFromView criterion = ajoutDesCriteresFixesDeRecherche(reportConfiguration.getSearchEntity());
+            reportConfiguration.setSearchEntity(new CriteriaFormRequest(criterion));
+            File file = manager.exportExcelAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            Role entite = manager.find(manager.getEntityIdName(), id);
+            userActionLogManager.log(headers, request, "Export excel détail groupe utilisateur : " + entite.getLibelle() + " (id=" + entite.getId() + ")",
+                    utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.exportExcelOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            return Response.ok(manager.findAll(ajoutDesCriteresFixesDeRecherche(criteriaFormRequest), Arrays.asList(), Arrays.asList())).build();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response getFormModel(@Context HttpHeaders headers) {
+        RoleFormModel formModel = new RoleFormModel();
+        formModel.setActions(mapstructMapper.actionSlimDtos(actionManager.findAll()));
+        return Response.ok(formModel).build();
+    }
+
+    @Override
+    public Response getFormModelUpdate(@Context HttpHeaders headers) {
+        RoleFormModel formModel = new RoleFormModel();
+        formModel.setActions(mapstructMapper.actionSlimDtos(actionManager.findAll()));
+        return Response.ok(formModel).build();
+    }
+
+    /**
+     * Methode permettant d'ajouter critères de recherches fixes
+     *
+     * @param criteriaFormRequest
+     * @return
+     */
+    private CriteriaEntityFromView ajoutDesCriteresFixesDeRecherche(CriteriaFormRequest criteriaFormRequest) {
+        CriteriaEntityFromView finalCriterion = new CriteriaEntityFromView();
+        CriteriaEntityFromView critere = new CriteriaEntityFromView();
+        CriteriaEntityFromView critere2 = new CriteriaEntityFromView();
+        CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+        finalCriterion.setCriteriaLogicConnector(CriteriaLogicConnector.AND);
+        finalCriterion.getSubCriterias().add(newCriteriaEntityFromView("typeOperation", TypeOperation.AJOUTER, Operateur.EQUALS));
+        critere.setCriteriaLogicConnector(CriteriaLogicConnector.OR);
+        critere.getSubCriterias().add(newCriteriaEntityFromView("etatOperation", EtatOperation.ACTIF, Operateur.EQUALS));
+        critere.getSubCriterias().add(newCriteriaEntityFromView("etatOperation", EtatOperation.ATTENTE_VALIDATION, Operateur.EQUALS));
+        finalCriterion.getSubCriterias().add(critere);
+        critere2.setCriteriaLogicConnector(CriteriaLogicConnector.AND);
+        critere2.getSubCriterias().add(newCriteriaEntityFromView("admin", Boolean.FALSE, Operateur.EQUALS));
+        critere2.getSubCriterias().add(newCriteriaEntityFromView("superAdmin", Boolean.FALSE, Operateur.EQUALS));
+        critere2.getSubCriterias().add(newCriteriaEntityFromView("megaAdmin", Boolean.FALSE, Operateur.EQUALS));
+        finalCriterion.getSubCriterias().add(critere2);
+
+        if (criterion != null) {
+            finalCriterion.getSubCriterias().add(criterion);
+        }
+        return finalCriterion;
+    }
+
+    private CriteriaEntityFromView newCriteriaEntityFromView(String nomColonne, Object criteriaValue, Operateur operateur) {
+        CriteriaEntityFromView criterion = new CriteriaEntityFromView();
+        criterion.setNomColonne(nomColonne);
+        criterion.setCriteriaValue(criteriaValue);
+        criterion.setOperateur(operateur);
+
+        return criterion;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/RoleValidationRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/RoleValidationRSImpl.java
new file mode 100644
index 0000000..15d1664
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/RoleValidationRSImpl.java
@@ -0,0 +1,260 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.impl.administration;
+
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.EtatOperation;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.core.ifaces.administration.ActionManager;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.administration.RoleManager;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.log.UserActionLogManager;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.fdxconsultation.model.administration.Role;
+import com.megatim.fdxconsultation.reporting.model.administration.RoleReporting;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.RoleDto;
+import com.megatim.fdxconsultation.model.formodel.RoleFormModel;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.service.ifaces.administration.RoleValidationRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.util.PrintableColumnExtractor;
+import com.mgt.rs.security.core.common.SecuredClass;
+import com.mgt.rs.security.core.common.SecuredSuperAdmin;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredMegaAdmin;
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import javax.enterprise.event.Observes;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+@SecuredClass(module = AppCommonContext.MODULE_ADMINISTRATION, path = "Validation des groupes utilisateurs", description = "Validation des groupes utilisateurs")
+@SecuredSuperAdmin(action = {"valider", "rejeter", "exporter"})
+@SecuredMegaAdmin(action = {"valider", "rejeter", "exporter"})
+@Path("role-validation")
+public class RoleValidationRSImpl implements RoleValidationRS {
+
+    @Inject
+    protected RoleManager manager;
+
+    @Inject
+    private UserActionLogManager userActionLogManager;
+
+    @Inject
+    private ActionManager actionManager;
+
+    @Inject
+    protected UserManager userManager;
+
+    @Inject
+    private MapStructMapper mapstructMapper;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @AuthenticatedUser
+    private static User utilisateurConnecte;
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public void validate(@Context HttpHeaders headers, @PathParam("name") String name) {
+        manager.validate(name, utilisateurConnecte);
+    }
+
+    @Override
+    public void reject(HttpHeaders headers, @PathParam("name") String name, Role role) {
+        manager.reject(name, role, utilisateurConnecte);
+    }
+
+    @Override
+    public RoleDto mapToDto(Role entity) {
+        return mapstructMapper.roleToRoleDto(entity);
+    }
+
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(Role.class)).build();
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pageSize, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            List<Role> datas = manager.findWithPagination(ajoutDesCriteresFixesDeRecherche(criteriaFormRequest),
+                    Arrays.asList(), Arrays.asList(new OrderByDefinition(manager.getEntityIdName(), OrderByType.DESC)), pageNumber, pageSize);
+            datas = manager.formaterDonnees(datas);
+            return Response.ok(mapstructMapper.roleListToRoleDtoList(datas)).build();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = ajoutDesCriteresFixesDeRecherche(criteriaFormRequest);
+            return manager.count(criterion);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, Long id) {
+        RoleDto datum = manager.getById(id);
+        return Response.ok(datum).build();
+    }
+
+    @Override
+    public Response printAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            CriteriaEntityFromView criterion = ajoutDesCriteresFixesDeRecherche(reportConfiguration.getSearchEntity());
+            reportConfiguration.setSearchEntity(new CriteriaFormRequest(criterion));
+            File file = manager.printAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response printOne(HttpHeaders headers, @Context HttpServletRequest request, Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            Role entite = manager.find(manager.getEntityIdName(), id);
+            userActionLogManager.log(headers, request, "Export pdf détail groupe utilisateur (validation) : " + entite.getLibelle() + " (id=" + entite.getId() + ")",
+                    utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.printOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response getPrintableColumns(HttpHeaders headers) {
+        List<CustomField> customFields = PrintableColumnExtractor.extract(RoleReporting.class);
+        return Response.ok(mapstructMapper.customFieldListToCustomFieldDtoList(customFields)).build();
+    }
+
+    @Override
+    public Response exportExcelAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            CriteriaEntityFromView criterion = ajoutDesCriteresFixesDeRecherche(reportConfiguration.getSearchEntity());
+            reportConfiguration.setSearchEntity(new CriteriaFormRequest(criterion));
+            File file = manager.exportExcelAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            Role entite = manager.find(manager.getEntityIdName(), id);
+            userActionLogManager.log(headers, request, "Export excel détail groupe utilisateur (validation) : " + entite.getLibelle() + " (id=" + entite.getId() + ")",
+                    utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.exportExcelOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            List<Role> datas = manager.findAll(ajoutDesCriteresFixesDeRecherche(criteriaFormRequest), Arrays.asList(), Arrays.asList());
+            datas = manager.formaterDonnees(datas);
+            return Response.ok(datas).build();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response getFormModel(@Context HttpHeaders headers) {
+        RoleFormModel formModel = new RoleFormModel();
+        formModel.setActions(mapstructMapper.actionSlimDtos(actionManager.findAll()));
+        return Response.ok(formModel).build();
+    }
+
+    @Override
+    public Response getFormModelUpdate(@Context HttpHeaders headers) {
+        RoleFormModel formModel = new RoleFormModel();
+        formModel.setActions(mapstructMapper.actionSlimDtos(actionManager.findAll()));
+        return Response.ok(formModel).build();
+    }
+
+    /**
+     * Methode permettant d'ajouter critères de recherches fixes
+     *
+     * @param criteriaFormRequest
+     * @return
+     */
+    private CriteriaEntityFromView ajoutDesCriteresFixesDeRecherche(CriteriaFormRequest criteriaFormRequest) {
+        
+        CriteriaEntityFromView finalCriterion = new CriteriaEntityFromView();
+        finalCriterion.setCriteriaLogicConnector(CriteriaLogicConnector.AND);
+        finalCriterion.getSubCriterias().add(newCriteriaEntityFromView("typeOperation", TypeOperation.AJOUTER, Operateur.EQUALS));
+        finalCriterion.getSubCriterias().add(newCriteriaEntityFromView("etatOperation", EtatOperation.ATTENTE_VALIDATION, Operateur.EQUALS));
+        finalCriterion.getSubCriterias().add(newCriteriaEntityFromView("admin", Boolean.FALSE, Operateur.EQUALS));
+        finalCriterion.getSubCriterias().add(newCriteriaEntityFromView("superAdmin", Boolean.FALSE, Operateur.EQUALS));
+        finalCriterion.getSubCriterias().add(newCriteriaEntityFromView("megaAdmin", Boolean.FALSE, Operateur.EQUALS));
+        
+        CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+        if (criterion != null) {
+            finalCriterion.getSubCriterias().add(criterion);
+        }
+        
+        return finalCriterion;
+    }
+
+    private CriteriaEntityFromView newCriteriaEntityFromView(String nomColonne, Object criteriaValue, Operateur operateur) {
+        CriteriaEntityFromView criterion = new CriteriaEntityFromView();
+        criterion.setNomColonne(nomColonne);
+        criterion.setCriteriaValue(criteriaValue);
+        criterion.setOperateur(operateur);
+
+        return criterion;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/UserRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/UserRSImpl.java
new file mode 100644
index 0000000..fdb3727
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/UserRSImpl.java
@@ -0,0 +1,269 @@
+package com.megatim.fdxconsultation.service.impl.administration;
+
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.EtatOperation;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.administration.RoleManager;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.log.UserActionLogManager;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.reporting.model.administration.UserReporting;
+import com.megatim.fdxconsultation.model.dto.EditPasswordDto;
+import com.megatim.fdxconsultation.model.dto.UserDto;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.service.ifaces.administration.UserRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.util.PrintableColumnExtractor;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredAdmin;
+import com.mgt.rs.security.core.common.SecuredClass;
+import com.mgt.rs.security.core.common.SecuredMegaAdmin;
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import javax.enterprise.context.Dependent;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+
+/**
+ * REST Web Service
+ *
+ * @author ABEGA
+ */
+@SecuredClass(module = AppCommonContext.MODULE_ADMINISTRATION, path = "Utilisateurs", description = "Utilisateurs")
+@SecuredAdmin(action = {"ajouter", "modifier", "supprimer", "exporter"})
+@SecuredMegaAdmin(action = {"ajouter", "modifier", "supprimer", "exporter"})
+@Path("user")
+@Dependent
+public class UserRSImpl implements UserRS {
+
+    @Inject
+    private UserManager manager;
+    
+    @Inject
+    private UserActionLogManager userActionLogManager;
+
+    @Inject
+    private RoleManager roleManager;
+    
+    @Inject
+    private MapStructMapper mapstructMapper;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @Context
+    private UriInfo context;
+    
+    @AuthenticatedUser
+    private static User utilisateurConnecte;
+
+    public UserRSImpl() {
+        super();
+    }
+
+    /**
+     * Methode permettant de recuperer l'utilisateur connecté
+     *
+     * @param username
+     */
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = manager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public Response save(HttpHeaders headers, User entity) {
+        User newEntity = manager.add(entity, utilisateurConnecte);
+        return Response.ok(manager.mapToDto(newEntity)).build();
+    }
+
+    @Override
+    public Response update(HttpHeaders headers, Long id, User entity) {
+        User newEntity = manager.modify(id, entity, utilisateurConnecte);
+        return Response.ok(manager.mapToDto(newEntity)).build();
+    }
+
+    @Override
+    public Response delete(HttpHeaders headers, Long id) {
+        manager.remove(id, utilisateurConnecte);
+        return Response.ok().build();
+    }
+
+    @Override
+    public Response editPassword(HttpHeaders headers, String username, EditPasswordDto editPasswordDto) {
+        manager.editPassword(username, editPasswordDto);
+        return Response.ok().build();
+    }
+
+    @Override
+    public UserDto mapToDto(User entity) {
+        return mapstructMapper.userToUserDto(entity);
+    }
+    
+
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(User.class)).build();
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pageSize, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            List<User> data = manager.findWithPagination(ajoutDesCriteresFixesDeRecherche(criteriaFormRequest),
+                    Arrays.asList(), Arrays.asList(new OrderByDefinition(manager.getEntityIdName(), OrderByType.DESC)), pageNumber, pageSize);
+            return Response.ok(mapstructMapper.userListToUserDtoList(data)).build();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = ajoutDesCriteresFixesDeRecherche(criteriaFormRequest);
+            return manager.count(criterion);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, Long id) {
+        UserDto datum = manager.getById(id);
+        return Response.ok(datum).build();
+    }
+
+    @Override
+    public Response printAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            CriteriaEntityFromView criterion = ajoutDesCriteresFixesDeRecherche(reportConfiguration.getSearchEntity());
+            reportConfiguration.setSearchEntity(new CriteriaFormRequest(criterion));
+            File file = manager.printAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response printOne(HttpHeaders headers, @Context HttpServletRequest request, Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            User entite = manager.find(manager.getEntityIdName(), id);
+            userActionLogManager.log(headers, request, "Export pdf détail compte utilisateur : "+entite.getUserName()+" (id="+entite.getId()+")",
+                utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.printOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response getPrintableColumns(HttpHeaders headers) {
+        List<CustomField> customFields = PrintableColumnExtractor.extract(UserReporting.class);
+        return Response.ok(mapstructMapper.customFieldListToCustomFieldDtoList(customFields)).build();
+    }
+
+    @Override
+    public Response exportExcelAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            CriteriaEntityFromView criterion = ajoutDesCriteresFixesDeRecherche(reportConfiguration.getSearchEntity());
+            reportConfiguration.setSearchEntity(new CriteriaFormRequest(criterion));
+            File file = manager.exportExcelAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            User entite = manager.find(manager.getEntityIdName(), id);
+            userActionLogManager.log(headers, request, "Export excel détail compte utilisateur : "+entite.getUserName()+" (id="+entite.getId()+")",
+                utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.exportExcelOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+    
+    @Override
+    public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            return Response.ok(manager.findAll(ajoutDesCriteresFixesDeRecherche(criteriaFormRequest), 
+                    Arrays.asList(), Arrays.asList())).build();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+    
+    /**
+     * Methode permettant d'ajouter critères de recherches fixes
+     * @param criteriaFormRequest
+     * @return 
+     */
+    private CriteriaEntityFromView ajoutDesCriteresFixesDeRecherche(CriteriaFormRequest criteriaFormRequest) {
+        CriteriaEntityFromView finalCriterion = new CriteriaEntityFromView();
+        CriteriaEntityFromView critere = new CriteriaEntityFromView();
+        CriteriaEntityFromView critere2 = new CriteriaEntityFromView();
+        CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;        
+        finalCriterion.setCriteriaLogicConnector(CriteriaLogicConnector.AND);
+        finalCriterion.getSubCriterias().add(newCriteriaEntityFromView("typeOperation", TypeOperation.AJOUTER, Operateur.EQUALS));
+        critere.setCriteriaLogicConnector(CriteriaLogicConnector.OR);
+        critere.getSubCriterias().add(newCriteriaEntityFromView("etatOperation", EtatOperation.ACTIF, Operateur.EQUALS));
+        critere.getSubCriterias().add(newCriteriaEntityFromView("etatOperation", EtatOperation.ATTENTE_VALIDATION, Operateur.EQUALS));
+        finalCriterion.getSubCriterias().add(critere);
+        critere2.setCriteriaLogicConnector(CriteriaLogicConnector.AND);
+        critere2.getSubCriterias().add(newCriteriaEntityFromView("role.admin", Boolean.FALSE, Operateur.EQUALS));
+        critere2.getSubCriterias().add(newCriteriaEntityFromView("role.superAdmin", Boolean.FALSE, Operateur.EQUALS)); 
+        critere2.getSubCriterias().add(newCriteriaEntityFromView("role.megaAdmin", Boolean.FALSE, Operateur.EQUALS));
+        finalCriterion.getSubCriterias().add(critere2);
+        if (criterion != null) {
+            finalCriterion.getSubCriterias().add(criterion);
+        }       
+        return finalCriterion;
+    }
+    
+    private CriteriaEntityFromView newCriteriaEntityFromView(String nomColonne, Object criteriaValue, Operateur operateur) {
+        CriteriaEntityFromView criterion = new CriteriaEntityFromView();
+        criterion.setNomColonne(nomColonne);
+        criterion.setCriteriaValue(criteriaValue);
+        criterion.setOperateur(operateur);
+
+        return criterion;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/UserValidationRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/UserValidationRSImpl.java
new file mode 100644
index 0000000..d0c0dce
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/administration/UserValidationRSImpl.java
@@ -0,0 +1,230 @@
+package com.megatim.fdxconsultation.service.impl.administration;
+
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.EtatOperation;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.log.UserActionLogManager;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.reporting.model.administration.UserReporting;
+import com.megatim.fdxconsultation.model.dto.UserDto;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.mgt.rs.security.core.common.SecuredClass;
+import com.mgt.rs.security.core.common.SecuredSuperAdmin;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import javax.enterprise.event.Observes;
+import javax.ws.rs.core.Response;
+import com.megatim.fdxconsultation.service.ifaces.administration.UserValidationRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.util.PrintableColumnExtractor;
+import com.mgt.rs.security.core.common.SecuredMegaAdmin;
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ *
+ * @author ASUS
+ */
+@SecuredClass(module = AppCommonContext.MODULE_ADMINISTRATION, path = "Validation des utilisateurs", description = "Validation des utilisateurs")
+@SecuredSuperAdmin(action = {"valider", "rejeter", "exporter"})
+@SecuredMegaAdmin(action = {"valider", "rejeter", "exporter"})
+@Path("user-validation")
+public class UserValidationRSImpl implements UserValidationRS {
+
+    @Inject
+    protected UserManager manager;
+
+    @Inject
+    private UserActionLogManager userActionLogManager;
+
+    @Inject
+    private MapStructMapper mapstructMapper;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @AuthenticatedUser
+    private static User utilisateurConnecte;
+
+    public UserValidationRSImpl() {
+        super();
+    }
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = manager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public void validate(@Context HttpHeaders headers, @PathParam("username") String username) {
+        manager.validate(username, utilisateurConnecte);
+    }
+
+    @Override
+    public void reject(@Context HttpHeaders headers, @PathParam("username") String username, User entity) {
+        manager.reject(username, entity, utilisateurConnecte);
+    }
+
+    @Override
+    public UserDto mapToDto(User entity) {
+        return mapstructMapper.userToUserDto(entity);
+    }
+
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(User.class)).build();
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pageSize, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            List<User> data = manager.findWithPagination(ajoutDesCriteresFixesDeRecherche(criteriaFormRequest), Arrays.asList(),
+                    Arrays.asList(new OrderByDefinition(manager.getEntityIdName(), OrderByType.DESC)), pageNumber, pageSize);
+            return Response.ok(mapstructMapper.userListToUserDtoList(data)).build();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = ajoutDesCriteresFixesDeRecherche(criteriaFormRequest);
+            return manager.count(criterion);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, Long id) {
+        UserDto datum = manager.getById(id);
+        return Response.ok(datum).build();
+    }
+
+    @Override
+    public Response printAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            CriteriaEntityFromView criterion = ajoutDesCriteresFixesDeRecherche(reportConfiguration.getSearchEntity());
+            reportConfiguration.setSearchEntity(new CriteriaFormRequest(criterion));
+            File file = manager.printAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response printOne(HttpHeaders headers, @Context HttpServletRequest request, Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            User entite = manager.find(manager.getEntityIdName(), id);
+            userActionLogManager.log(headers, request, "Export pdf détail compte utilisateur : " + entite.getUserName() + " (id=" + entite.getId() + ")",
+                    utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.printOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response getPrintableColumns(HttpHeaders headers) {
+        List<CustomField> customFields = PrintableColumnExtractor.extract(UserReporting.class);
+        return Response.ok(mapstructMapper.customFieldListToCustomFieldDtoList(customFields)).build();
+    }
+
+    @Override
+    public Response exportExcelAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            CriteriaEntityFromView criterion = ajoutDesCriteresFixesDeRecherche(reportConfiguration.getSearchEntity());
+            reportConfiguration.setSearchEntity(new CriteriaFormRequest(criterion));
+            File file = manager.exportExcelAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            User entite = manager.find(manager.getEntityIdName(), id);
+            userActionLogManager.log(headers, request, "Export excel détail compte utilisateur : " + entite.getUserName() + " (id=" + entite.getId() + ")",
+                    utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.exportExcelOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            return Response.ok(manager.findAll(ajoutDesCriteresFixesDeRecherche(criteriaFormRequest), Arrays.asList(), Arrays.asList())).build();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    /**
+     * Methode permettant d'ajouter critères de recherches fixes
+     *
+     * @param criteriaFormRequest
+     * @return
+     */
+    private CriteriaEntityFromView ajoutDesCriteresFixesDeRecherche(CriteriaFormRequest criteriaFormRequest) {
+
+        CriteriaEntityFromView finalCriterion = new CriteriaEntityFromView();
+        finalCriterion.setCriteriaLogicConnector(CriteriaLogicConnector.AND);
+        finalCriterion.getSubCriterias().add(newCriteriaEntityFromView("typeOperation", TypeOperation.AJOUTER, Operateur.EQUALS));
+        finalCriterion.getSubCriterias().add(newCriteriaEntityFromView("etatOperation", EtatOperation.ATTENTE_VALIDATION, Operateur.EQUALS));
+        finalCriterion.getSubCriterias().add(newCriteriaEntityFromView("role.admin", Boolean.FALSE, Operateur.EQUALS));
+        finalCriterion.getSubCriterias().add(newCriteriaEntityFromView("role.superAdmin", Boolean.FALSE, Operateur.EQUALS));
+        finalCriterion.getSubCriterias().add(newCriteriaEntityFromView("role.megaAdmin", Boolean.FALSE, Operateur.EQUALS));
+
+        CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+        if (criterion != null) {
+            finalCriterion.getSubCriterias().add(criterion);
+        }
+
+        return finalCriterion;
+    }
+
+    private CriteriaEntityFromView newCriteriaEntityFromView(String nomColonne, Object criteriaValue, Operateur operateur) {
+        CriteriaEntityFromView criterion = new CriteriaEntityFromView();
+        criterion.setNomColonne(nomColonne);
+        criterion.setCriteriaValue(criteriaValue);
+        criterion.setOperateur(operateur);
+
+        return criterion;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/api/token/ApiTokenRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/api/token/ApiTokenRSImpl.java
new file mode 100644
index 0000000..3c0e7c7
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/api/token/ApiTokenRSImpl.java
@@ -0,0 +1,268 @@
+package com.megatim.fdxconsultation.service.impl.api.token;
+
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.api.token.ApiTokenManager;
+import com.megatim.fdxconsultation.core.ifaces.log.UserActionLogManager;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.api.token.ApiToken;
+import com.megatim.fdxconsultation.model.dto.ApiTokenDto;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.reporting.model.api.token.ApiTokenReporting;
+import com.megatim.fdxconsultation.service.ifaces.api.token.ApiTokenRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.util.PrintableColumnExtractor;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@SecuredClass(module = AppCommonContext.MODULE_ADMINISTRATION, path = AppCommonContext.PATH_API_TOKEN, description = AppCommonContext.PATH_API_TOKEN)
+@Path("token-management")
+public class ApiTokenRSImpl implements ApiTokenRS {
+
+    @Inject
+    private ApiTokenManager manager;
+
+    @Inject
+    private UserActionLogManager userActionLogManager;
+
+    @Inject
+    private UserManager userManager;
+
+    @AuthenticatedUser
+    private User utilisateurConnecte;
+
+    @Inject
+    private MapStructMapper mapStructMapper;
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public ApiTokenDto mapToDto(ApiToken entity) {
+        return mapStructMapper.apiTokenToApiTokenDto(entity);
+    }
+
+    @Override
+    public Response save(HttpHeaders headers, ApiToken entity) {
+        String token = manager.addAndGetToken(entity, utilisateurConnecte);
+        File tokenFile = writeToken(token, entity.getParticipant().getCode());
+        Response.ResponseBuilder response = Response.ok((Object) tokenFile);
+        response.header("Content-Disposition", "attachment;filename=" + tokenFile.getName());
+        return response.build();
+    }
+
+    @Override
+    public Response update(HttpHeaders headers, Long id, ApiToken entity) {
+        String token = manager.updateAndGetToken(id, entity, utilisateurConnecte);
+        File tokenFile = writeToken(token, entity.getParticipant().getCode());
+        Response.ResponseBuilder response = Response.ok((Object) tokenFile);
+        response.header("Content-Disposition", "attachment;filename=" + tokenFile.getName());
+        return response.build();
+    }
+
+    @Override
+    public Response delete(HttpHeaders headers, Long id) {
+        manager.remove(id, utilisateurConnecte);
+        return Response.ok().build();
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, Long id) {
+        ApiToken apiToken = manager.find(manager.getEntityIdName(), id);
+        return Response.ok(mapToDto(apiToken)).build();
+    }
+
+    @Override
+    public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            return Response.ok(manager.findAll(ajoutDesCriteresFixesDeRecherche(criteriaFormRequest),
+                    Arrays.asList(), Arrays.asList(new OrderByDefinition(manager.getEntityIdName(), OrderByType.DESC)))).build();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = ajoutDesCriteresFixesDeRecherche(criteriaFormRequest);
+            return manager.count(criterion);
+        } catch (Exception ex) {
+            Logger.getLogger(ApiTokenRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(ApiToken.class)).build();
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pagesize, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            List<ApiToken> datas = manager.findWithPagination(ajoutDesCriteresFixesDeRecherche(criteriaFormRequest),
+                    Arrays.asList(), Arrays.asList(new OrderByDefinition(manager.getEntityIdName(), OrderByType.DESC)), pageNumber, pagesize);
+            return Response.ok(mapStructMapper.apiTokenListToApiTokenDtoList(datas)).build();
+        } catch (Exception ex) {
+            Logger.getLogger(ApiTokenRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    private File writeToken(String token, String codeParticipant) {
+        File tokenFile = new File(AppCommonContext.APP_DIR + File.separator + "TOKEN-" + codeParticipant + new Date().getTime() + ".token");
+        try ( FileWriter writer = new FileWriter(tokenFile)) {
+            writer.write(token);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return tokenFile;
+    }
+
+    @Override
+    public Response lock(@Context HttpHeaders headers, @Context HttpServletRequest request, Long id) {
+        ApiToken apiToken = manager.find(manager.getEntityIdName(), id);
+        userActionLogManager.log(headers, request, "Mot de passe API désactivé, pour le participant : " + apiToken.getParticipant().getCode(),
+                utilisateurConnecte.getUserName());
+        return Response.ok(mapToDto(manager.lock(id, utilisateurConnecte))).build();
+    }
+
+    @Override
+    public Response unLock(@Context HttpHeaders headers, @Context HttpServletRequest request, Long id) {
+        ApiToken apiToken = manager.find(manager.getEntityIdName(), id);
+        userActionLogManager.log(headers, request, "Mot de passe API désactivé, pour le participant : " + apiToken.getParticipant().getCode(),
+                utilisateurConnecte.getUserName());
+        return Response.ok(mapToDto(manager.unLock(id, utilisateurConnecte))).build();
+    }
+
+    @Override
+    public Response printAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            CriteriaEntityFromView criterion = ajoutDesCriteresFixesDeRecherche(reportConfiguration.getSearchEntity());
+            reportConfiguration.setSearchEntity(new CriteriaFormRequest(criterion));
+            File file = manager.printAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response printOne(HttpHeaders headers, @Context HttpServletRequest request, Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            ApiToken apiToken = manager.find(manager.getEntityIdName(), id);
+            userActionLogManager.log(headers, request, "Export pdf détail mot de passe API, pour le participant : " + apiToken.getParticipant().getCode(),
+                    utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.printOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response getPrintableColumns(HttpHeaders headers) {
+        List<CustomField> customFields = PrintableColumnExtractor.extract(ApiTokenReporting.class);
+        return Response.ok(mapStructMapper.customFieldListToCustomFieldDtoList(customFields)).build();
+    }
+
+    @Override
+    public Response exportExcelAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            CriteriaEntityFromView criterion = ajoutDesCriteresFixesDeRecherche(reportConfiguration.getSearchEntity());
+            reportConfiguration.setSearchEntity(new CriteriaFormRequest(criterion));
+            File file = manager.exportExcelAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response exportExcelOne(HttpHeaders headers, @Context HttpServletRequest request, Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            ApiToken apiToken = manager.find(manager.getEntityIdName(), id);
+            userActionLogManager.log(headers, request, "Export excel détail mot de passe API, pour le participant : " + apiToken.getParticipant().getCode(),
+                    utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.exportExcelOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    /**
+     * Methode permettant d'ajouter critères de recherches fixes
+     *
+     * @param criteriaFormRequest
+     * @return
+     */
+    private CriteriaEntityFromView ajoutDesCriteresFixesDeRecherche(CriteriaFormRequest criteriaFormRequest) {
+        CriteriaEntityFromView finalCriterion = new CriteriaEntityFromView();
+        CriteriaEntityFromView critere = new CriteriaEntityFromView();
+        CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+        finalCriterion.setCriteriaLogicConnector(CriteriaLogicConnector.AND);
+        
+        if (utilisateurConnecte != null
+                && (utilisateurConnecte.getParticipants() != null && !utilisateurConnecte.getParticipants().isEmpty())) {
+            for (Participant paticipant : utilisateurConnecte.getParticipants()) {
+                critere.setCriteriaLogicConnector(CriteriaLogicConnector.OR);
+                critere.getSubCriterias().add(newCriteriaEntityFromView("participant.code", paticipant.getCode(), Operateur.EQUALS));
+            }
+            finalCriterion.getSubCriterias().add(critere);
+        }
+        if (criterion != null) {
+            finalCriterion.getSubCriterias().add(criterion);
+        }
+        return finalCriterion;
+    }
+
+    private CriteriaEntityFromView newCriteriaEntityFromView(String nomColonne, Object criteriaValue, Operateur operateur) {
+        CriteriaEntityFromView criterion = new CriteriaEntityFromView();
+        criterion.setNomColonne(nomColonne);
+        criterion.setCriteriaValue(criteriaValue);
+        criterion.setOperateur(operateur);
+
+        return criterion;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/authentication/AuthenticationRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/authentication/AuthenticationRSImpl.java
new file mode 100644
index 0000000..14f594d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/authentication/AuthenticationRSImpl.java
@@ -0,0 +1,177 @@
+package com.megatim.fdxconsultation.service.impl.authentication;
+
+import com.megatim.fdxcommons.tools.context.AppContext;
+import com.megatim.fdxconsultation.core.ifaces.administration.ActionManager;
+import com.megatim.fdxconsultation.core.ifaces.administration.RoleManager;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.helper.RequestHandler;
+import com.megatim.fdxconsultation.core.ifaces.log.UserActionLogManager;
+import com.megatim.fdxconsultation.model.administration.Action;
+import com.megatim.fdxconsultation.model.administration.Role;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.authentification.LoginRequest;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.service.ifaces.authentication.AuthenticationRS;
+import com.megatim.retrocedor.commons.tools.CommonsTools;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.exception.AuthenticationException;
+import com.mgt.rs.security.core.model.AuthenticationToken;
+import com.mgt.rs.security.core.service.AuthenticationTokenService;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author lenovo
+ */
+@Path("auth")
+public class AuthenticationRSImpl implements AuthenticationRS {
+
+    @Inject
+    private AuthenticationTokenService authenticationTokenService;
+
+    @Inject
+    protected UserManager userManager;
+    
+    @Inject
+    UserActionLogManager userActionLogManager;
+
+    @Inject
+    protected RoleManager roleManager;
+
+    @Inject
+    private MapStructMapper mapstructMapper;
+
+    @AuthenticatedUser
+    private User utilisateurConnecte;
+
+    @Inject
+    protected ActionManager actionManager;
+
+    @Inject
+    private RequestHandler requestHandler;
+
+    /**
+     * Methode permettant de recupere l'utilisateur connecté
+     *
+     * @param username
+     */
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = userManager.recuperUtilisateur(username);
+    }
+
+    /**
+     * Validate user credentials and issue a token for the user.
+     *
+     * @param loginRequest
+     * @return
+     */
+    @Override
+    public Response authenticate(LoginRequest loginRequest) {
+        User user = validateCredentials(loginRequest.getUserName(), loginRequest.getPwd());
+        String token = authenticationTokenService.issueToken(user.getUserName());
+        String refreshToken = authenticationTokenService.issueRefreshToken(user.getUserName());
+        AuthenticationToken authenticationToken = new AuthenticationToken();
+        authenticationToken.setToken(token);
+        authenticationToken.setRefreshToken(refreshToken);
+        user.setLastConnexionDateTime(new Date());
+        user.setCleSession(CommonsTools.formaterDate(AppContext.FORMAT_DATE_DDMMYYYYHHMMSS, new Date()));
+        user.setConnected(true);
+        userManager.update(user.getId(), user);
+        return Response.ok(authenticationToken).build();
+    }
+
+    /**
+     * Validate username and password.
+     *
+     * @param username
+     * @param password
+     * @return
+     */
+    public User validateCredentials(String username, String password) {
+        
+        //Variables
+        List<String> errors = new ArrayList<>();
+        User user = null;
+        
+        //On recupère les erreurs
+        errors = userManager.validerParametresConnexion(username, password);
+        
+        //Si non vide
+        if(!errors.isEmpty()){
+            
+            //On lève l'execption
+            throw new AuthenticationException(errors.get(0));
+            
+        }
+        
+        //On recupère l'utilisateur connecté
+        user = userManager.recuperUtilisateur(username, password);
+        
+        return user;
+    }
+    
+    @Override
+    public Response getInfoUser(HttpHeaders headers) {
+        return Response.ok(mapstructMapper.userToUserDto(utilisateurConnecte)).build();
+    }
+
+    @Override
+    public Response ifUserNameExist(HttpHeaders headers, String username) {
+        User user = userManager.recuperUtilisateur(username);
+        return Response.ok(mapstructMapper.userToUserDto(user)).build();
+    }
+
+    @Override
+    public Response logout(HttpHeaders headers, User user) {
+        User userBd = userManager.findById(user.getId());
+        userBd.setConnected(false);
+        userManager.update(userBd.getId(), userBd);
+        return Response.ok().build();
+    }
+
+    @Override
+    public Response generateDataTotTest(HttpHeaders headers) {
+
+        String userName = "test";
+        User testUser = userManager.recuperUtilisateur(userName);
+
+        boolean isUpdate = testUser != null;
+        if (testUser == null) {
+            testUser = new User();
+        }
+        testUser.setUserName(userName);
+        testUser.setPwd(CommonsTools.encryptPassword(userName));
+
+        Role role = new Role();
+        role.setLibelle("test");
+        role.setDescription("test");
+
+        List<Action> actions = actionManager.findAll();
+        if (actions != null && !actions.isEmpty()) {
+
+            List<Role> roles = roleManager.findByUniqueProperty("libelle", role.getLibelle(), null);
+            if (roles != null && !roles.isEmpty()) {
+                role = roles.get(0);
+                role.setActions(actions);
+                roleManager.update(role.getId(), role);
+            } else {
+                role.setActions(actions);
+                role = roleManager.save(role);
+            }
+            testUser.setRole(role);
+        }
+
+        //On recupère le user
+        User updatedTestUser = (!isUpdate) ? userManager.save(testUser) : userManager.update(testUser.getId(), testUser);
+
+        return Response.ok(mapstructMapper.userToUserDto(updatedTestUser)).build();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/CamelBootstrap.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/CamelBootstrap.java
new file mode 100644
index 0000000..2bb699b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/CamelBootstrap.java
@@ -0,0 +1,78 @@
+package com.megatim.fdxconsultation.service.impl.camel;
+
+import com.megatim.fdxcommons.model.camel.BrokerProperties;
+import com.megatim.fdxcommons.model.camel.FileProperties;
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.annotation.PostConstruct;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import org.apache.camel.cdi.CdiCamelConfiguration;
+import org.apache.camel.cdi.CdiCamelContext;
+import org.apache.camel.component.rabbitmq.RabbitMQComponent;
+
+@Singleton
+@Startup
+public class CamelBootstrap {
+
+    @Inject
+    private CdiCamelContext camelContext;
+
+    @PostConstruct
+    public void init() {
+        try {
+            FileProperties fileProperties = new FileProperties(com.megatim.fdxcommons.tools.context.AppContext.BROKER_FILE_PATH);
+
+            // Add RabbitMQ Component with connection details
+            RabbitMQComponent rabbitMQComponent = new RabbitMQComponent();
+            rabbitMQComponent.setHostname(brokerHostName(fileProperties));
+            rabbitMQComponent.setPortNumber(brokerPortNumber(fileProperties));
+            rabbitMQComponent.setUsername(brokerUserName(fileProperties));
+            rabbitMQComponent.setPassword(brokerPassword(fileProperties));
+
+            camelContext.addComponent("rabbitmq", rabbitMQComponent);
+
+            camelContext.start();
+        } catch (IOException ex) {
+            Logger.getLogger(CamelBootstrap.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+        }
+    }
+
+    public static void configuration(@Observes CdiCamelConfiguration configuration) {
+
+        System.out.println("<-------------------------------------------------------------------------------------------->");
+        System.out.println("<-------------------------------------------------------------------------------------------->");
+        System.out.println("<-------------------------------------------------------------------------------------------->");
+        System.out.println("<-------------------------------------------------------------------------------------------->");
+        System.out.println("<-------------------------------------------------------------------------------------------->");
+
+        System.out.println("INSIDE CONFIGURE OF ROUTE");
+
+        System.out.println("<-------------------------------------------------------------------------------------------->");
+        System.out.println("<-------------------------------------------------------------------------------------------->");
+        System.out.println("<-------------------------------------------------------------------------------------------->");
+        System.out.println("<-------------------------------------------------------------------------------------------->");
+
+//        configuration.autoConfigureRoutes(false);
+        configuration.autoStartContexts(false);
+    }
+
+    private String brokerHostName(FileProperties fileProperties) throws IOException {
+        return fileProperties.properties().getProperty(BrokerProperties.HOSTNAME);
+    }
+
+    private int brokerPortNumber(FileProperties fileProperties) throws IOException {
+        return Integer.parseInt(fileProperties.properties().getProperty(BrokerProperties.PORT_NUMBER));
+    }
+
+    private String brokerUserName(FileProperties fileProperties) throws IOException {
+        return fileProperties.properties().getProperty(BrokerProperties.USER_NAME);
+    }
+
+    private String brokerPassword(FileProperties fileProperties) throws IOException {
+        return fileProperties.properties().getProperty(BrokerProperties.PASSWORD);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/ApiUserActionLogConsumer.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/ApiUserActionLogConsumer.java
new file mode 100644
index 0000000..a271884
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/ApiUserActionLogConsumer.java
@@ -0,0 +1,29 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.impl.camel.consumer;
+
+import com.megatim.fdxcommons.model.log.UserActionLog;
+import com.megatim.fdxconsultation.core.ifaces.log.ApiUserActionLogManager;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import javax.inject.Inject;
+import org.apache.camel.Handler;
+
+/**
+ *
+ * @author ASUS
+ */
+public class ApiUserActionLogConsumer {
+
+    @Inject
+    private ApiUserActionLogManager apiLogManager;
+
+    @Inject
+    MapStructMapper mapper;
+
+    @Handler
+    public void process(UserActionLog log) throws Exception {
+        apiLogManager.save(mapper.userActionLogToApiUserActionLog(log));
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/ConnexionStatutConsumer.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/ConnexionStatutConsumer.java
new file mode 100644
index 0000000..e9bfce9
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/ConnexionStatutConsumer.java
@@ -0,0 +1,23 @@
+package com.megatim.fdxconsultation.service.impl.camel.consumer;
+
+import com.fdx.messaging.common.ConnexionStatutMessages;
+import com.megatim.fdxconsultation.service.impl.sockets.helpers.ConnexionStatutSessionHandler;
+import javax.inject.Inject;
+import org.apache.camel.Handler;
+
+/**
+ *
+ * @author lenovo
+ */
+public class ConnexionStatutConsumer {
+
+    @Inject
+    private ConnexionStatutSessionHandler connexionStatutSessionHandler;
+
+    @Handler
+    public void process(ConnexionStatutMessages connexionStatutMessages) throws Exception {
+        connexionStatutMessages.getConnexionStatuts().forEach(c -> System.out.println(c.getAgentCode() + " " + c.isConnected()));
+        connexionStatutSessionHandler.publishMessage(connexionStatutMessages.getConnexionStatuts());
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/ProductionMetaDaConsumer.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/ProductionMetaDaConsumer.java
new file mode 100644
index 0000000..40bd770
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/ProductionMetaDaConsumer.java
@@ -0,0 +1,52 @@
+package com.megatim.fdxconsultation.service.impl.camel.consumer;
+
+import com.megatim.fdxcommons.model.dataproduction.metadata.ProductionMetaData;
+import com.megatim.fdxcommons.model.dtos.dataproduction.ProductionMetaDataDto;
+import com.megatim.fdxcommons.model.enumeration.StatutDataProduction;
+import com.megatim.fdxcommons.tools.database.connection.DBConnection;
+import javax.inject.Inject;
+import org.apache.camel.Handler;
+import com.megatim.fdxconsultation.dao.impl.dataproduction.metadata.CreateDataProductionQuery;
+import com.megatim.fdxconsultation.dao.impl.dataproduction.metadata.CreateProductionMetaDataQuery;
+import com.megatim.fdxconsultation.model.dataproduction.DataProduction;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import java.sql.Connection;
+import javax.annotation.Resource;
+import javax.sql.DataSource;
+
+/**
+ *
+ * @author lenovo
+ */
+public class ProductionMetaDaConsumer {
+
+    @Resource(lookup = AppCommonContext.JNDI_NAME)
+    private DataSource dataSource;
+
+    @Inject
+    private MapStructMapper mapper;
+
+    @Inject
+    private com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @Handler
+    public void saveData(ProductionMetaDataDto dto) throws Exception {
+        System.out.println("----------------In ProductionMetaDaConsumer--------------------");
+        DataProduction dataProduction = mapper.commonDataProductionDtoToDataProduction(dto.getDataProduction());
+        dataProduction.setId(dto.getDataProduction().getId());
+        dataProduction.setStatutDataProduction(StatutDataProduction.ENCOURS_DE_CONSOMMATION);
+        System.out.println("------------ NbreElts " + dataProduction.getNbreElements() + ", FileName = " + dataProduction.getFileName() + ", IntegrationFileName = " + dataProduction.getIntegrationFileName());
+
+        ProductionMetaData pmd = commonMapper.productionMetaDataDtoToProductionMetaData(dto);
+
+        try ( Connection connection = new DBConnection(dataSource).connection()) {
+            connection.setAutoCommit(false);
+
+            new CreateDataProductionQuery(dataProduction, connection).execute();
+            new CreateProductionMetaDataQuery(pmd, dataProduction.getDataProductionType(), connection).execute();
+
+            connection.commit();
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/ReferentielDataConsumer.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/ReferentielDataConsumer.java
new file mode 100644
index 0000000..dc8b68c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/ReferentielDataConsumer.java
@@ -0,0 +1,24 @@
+package com.megatim.fdxconsultation.service.impl.camel.consumer;
+
+import com.megatim.fdxcommons.core.ifaces.helper.ReferentielConsumptionHelper;
+import com.megatim.fdxcommons.model.pojo.ReferentielToImportData;
+import javax.inject.Inject;
+import javax.transaction.Transactional;
+import org.apache.camel.Handler;
+
+/**
+ *
+ * @author ASUS
+ */
+public class ReferentielDataConsumer {
+    
+    @Inject
+    private ReferentielConsumptionHelper referentielConsumptionHelper;
+
+    @Handler
+    @Transactional
+    public void consumeReferentiel(ReferentielToImportData referentielToImportData) throws Exception {
+        //On consomme le référentiel
+        referentielConsumptionHelper.consume(referentielToImportData);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/StandaloneServerStateConsumer.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/StandaloneServerStateConsumer.java
new file mode 100644
index 0000000..28a6a83
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/StandaloneServerStateConsumer.java
@@ -0,0 +1,31 @@
+package com.megatim.fdxconsultation.service.impl.camel.consumer;
+
+import org.apache.camel.Handler;
+import com.fdx.messaging.common.StandaloneServerState;
+import com.megatim.fdxconsultation.core.ifaces.supervision.StandaloneServerStateEntityManager;
+import com.megatim.fdxconsultation.model.supervision.StandaloneServerStateEntity;
+import com.megatim.fdxconsultation.service.impl.sockets.helpers.StandaloneServerStateSessionHandler;
+import javax.inject.Inject;
+import javax.transaction.Transactional;
+
+/**
+ *
+ * @author ASUS
+ */
+public class StandaloneServerStateConsumer {
+
+    @Inject
+    StandaloneServerStateEntityManager serverStateManager;
+    
+    @Inject
+    private StandaloneServerStateSessionHandler standaloneServerStateSessionHandler;
+
+    @Handler
+    @Transactional
+    public void consume(StandaloneServerState serverState) {
+        StandaloneServerStateEntity standaloneServerStateEntity = serverStateManager.persistStandaloneConfigurationStateEntity(serverState);
+        if(standaloneServerStateEntity != null) {
+            standaloneServerStateSessionHandler.publishMessage(standaloneServerStateEntity);
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/TransfertDataMessageConsumer.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/TransfertDataMessageConsumer.java
new file mode 100644
index 0000000..f81077e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/TransfertDataMessageConsumer.java
@@ -0,0 +1,33 @@
+package com.megatim.fdxconsultation.service.impl.camel.consumer;
+
+import com.fdx.messaging.common.TransfertDataMessage;
+import com.megatim.fdxconsultation.core.ifaces.supervision.TransfertManager;
+import com.megatim.fdxconsultation.core.impl.api.supervision.TransfertDataMessageToTransfert;
+import com.megatim.fdxconsultation.model.supervision.Transfert;
+import com.megatim.fdxconsultation.service.impl.sockets.helpers.TransfertDataMessageSessionHandler;
+import javax.inject.Inject;
+import org.apache.camel.Handler;
+
+/**
+ *
+ * @author lenovo
+ */
+public class TransfertDataMessageConsumer {
+
+    @Inject
+    private TransfertManager transfertManager;
+
+    @Inject
+    private TransfertDataMessageSessionHandler transfertDataMessageSessionHandler;
+
+    @Handler
+    public void process(TransfertDataMessage transfertDataMessage) throws Exception {
+
+        Transfert transfert = new TransfertDataMessageToTransfert(transfertDataMessage).transfert();
+
+        transfertManager.persistTransfert(transfert);
+
+        transfertDataMessageSessionHandler.sendMessage(transfert);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/UserActionLogConsumer.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/UserActionLogConsumer.java
new file mode 100644
index 0000000..3db32cd
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/consumer/UserActionLogConsumer.java
@@ -0,0 +1,25 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.impl.camel.consumer;
+
+import com.megatim.fdxcommons.model.log.UserActionLog;
+import com.megatim.fdxconsultation.core.ifaces.log.UserActionLogManager;
+import javax.inject.Inject;
+import org.apache.camel.Handler;
+
+/**
+ *
+ * @author ASUS
+ */
+public class UserActionLogConsumer {
+
+    @Inject
+    private UserActionLogManager logManager;
+
+    @Handler
+    public void process(UserActionLog log) throws Exception {
+        logManager.save(log);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/UserActionsRoute.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/UserActionsRoute.java
new file mode 100644
index 0000000..1328131
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/UserActionsRoute.java
@@ -0,0 +1,34 @@
+package com.megatim.fdxconsultation.service.impl.camel.routes;
+
+import com.megatim.fdxcommons.model.log.UserActionLog;
+import com.megatim.fdxconsultation.service.impl.camel.consumer.UserActionLogConsumer;
+import com.megatim.fdxconsultation.service.resolvers.JacksonMapperFormat;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ *
+ * @author ASUS
+ */
+public class UserActionsRoute extends RouteBuilder {
+
+    @Override
+    public void configure() throws Exception {
+
+        from("direct:" + AppCommonContext.WEB_USER_ACTION_DIRECT)
+                .marshal(JacksonMapperFormat.jacksonDataFormat(UserActionLog.class))
+                .to("rabbitmq:"
+                        + AppCommonContext.WEB_USER_ACTION_EXCHANGE
+                        + "?queue=" + AppCommonContext.WEB_USER_ACTION_QUEUE
+                        + "&routingKey=" + AppCommonContext.WEB_USER_ACTION_ROUTING_KEY
+                        + "&autoDelete=false");
+
+        from("rabbitmq:"
+                + AppCommonContext.WEB_USER_ACTION_EXCHANGE
+                + "?queue=" + AppCommonContext.WEB_USER_ACTION_QUEUE
+                + "&routingKey=" + AppCommonContext.WEB_USER_ACTION_ROUTING_KEY
+                + "&autoDelete=false")
+                .unmarshal(JacksonMapperFormat.jacksonDataFormat(UserActionLog.class))
+                .bean(UserActionLogConsumer.class);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/ApiUserActionsRoute.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/ApiUserActionsRoute.java
new file mode 100644
index 0000000..5eed155
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/ApiUserActionsRoute.java
@@ -0,0 +1,26 @@
+package com.megatim.fdxconsultation.service.impl.camel.routes.in;
+
+import com.megatim.fdxcommons.model.log.UserActionLog;
+import com.megatim.fdxcommons.tools.context.AppContext;
+import com.megatim.fdxconsultation.service.impl.camel.consumer.ApiUserActionLogConsumer;
+import com.megatim.fdxconsultation.service.resolvers.JacksonMapperFormat;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ *
+ * @author ASUS
+ */
+public class ApiUserActionsRoute extends RouteBuilder {
+
+    @Override
+    public void configure() throws Exception {
+
+        from("rabbitmq:"
+                + AppContext.USER_ACTION_TO_FDX_CONS_EXCHANGE
+                + "?queue=" + AppContext.USER_ACTION_TO_FDX_CONS_QUEUE
+                + "&routingKey=" + AppContext.USER_ACTION_TO_FDX_CONS_ROUTING_KEY
+                + "&autoDelete=false")
+                .unmarshal(JacksonMapperFormat.jacksonDataFormat(UserActionLog.class))
+                .bean(ApiUserActionLogConsumer.class);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/ConnectedStatutsRoute.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/ConnectedStatutsRoute.java
new file mode 100644
index 0000000..bb4c347
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/ConnectedStatutsRoute.java
@@ -0,0 +1,28 @@
+package com.megatim.fdxconsultation.service.impl.camel.routes.in;
+
+import com.fdx.messaging.common.ConnexionStatutMessages;
+import com.fdx.messaging.common.FdxMessagingContext;
+import com.megatim.fdxconsultation.service.impl.camel.consumer.ConnexionStatutConsumer;
+import com.megatim.fdxconsultation.service.resolvers.JacksonMapperFormat;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class ConnectedStatutsRoute extends RouteBuilder {
+
+    @Override
+    public void configure() throws Exception {
+
+        from("rabbitmq:"
+                + FdxMessagingContext.CONNECTED_NODE_EXCHANGE
+                + "?queue=" + FdxMessagingContext.CONNECTED_NODE_QUEUE
+                + "&routingKey=" + FdxMessagingContext.CONNECTED_NODE_ROUTING_KEY
+                + "&autoDelete=false&arg.queue.x-message-ttl=3000")
+                .unmarshal(JacksonMapperFormat.jacksonDataFormat(ConnexionStatutMessages.class))
+                .log("${body}")
+                .bean(ConnexionStatutConsumer.class);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/ProductionMetaDataRoute.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/ProductionMetaDataRoute.java
new file mode 100644
index 0000000..be08045
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/ProductionMetaDataRoute.java
@@ -0,0 +1,98 @@
+package com.megatim.fdxconsultation.service.impl.camel.routes.in;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import com.megatim.fdxcommons.model.dtos.dataproduction.ProductionMetaDataDto;
+import com.megatim.fdxcommons.tools.context.AppContext;
+import com.megatim.fdxcommons.tools.database.connection.DBConnection;
+import com.megatim.fdxcommons.tools.database.queries.EchecIntegrationQueries;
+import com.megatim.fdxcommons.tools.database.tables.FdxConsultationTable;
+import com.megatim.fdxconsultation.core.ifaces.integration.EchecIntegrationManager;
+import com.megatim.fdxconsultation.service.impl.camel.consumer.ProductionMetaDaConsumer;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.annotation.Resource;
+import javax.inject.Inject;
+import javax.sql.DataSource;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.jackson.JacksonDataFormat;
+
+/**
+ *
+ * @author lenovo
+ */
+public class ProductionMetaDataRoute extends RouteBuilder {
+
+    @Inject
+    private EchecIntegrationManager echecIntegrationManager;
+
+    @Resource(lookup = AppCommonContext.JNDI_NAME)
+    private DataSource dataSource;
+
+    @Override
+    public void configure() throws Exception {
+
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.registerModule(new JavaTimeModule());
+        mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+
+        JacksonDataFormat jacksonDataFormat = new JacksonDataFormat();
+        jacksonDataFormat.setObjectMapper(mapper);
+        jacksonDataFormat.setUnmarshalType(ProductionMetaDataDto.class);
+
+        onException(Exception.class)
+                .handled(false)
+                .log("Exception occured: ${exception.message}")
+                .logStackTrace(true)
+                .process(ex -> {
+                    System.out.println("---------------------In Exception process----------------------------");
+                    ProductionMetaDataDto dto = ex.getIn().getBody(ProductionMetaDataDto.class);
+
+                    if (echecIntegrationManager.getById(dto.getDataProduction().getId()) == null) {
+                        updateDb(dto);
+                    }
+                })
+                .end();
+
+        from("rabbitmq:"
+                + AppContext.DATA_INTEGRATION_EXCHANGE
+                + "?queue=" + AppContext.DATA_INTEGRATION_QUEUE
+                + "&routingKey=" + AppContext.DATA_INTEGRATION_ROUTING_KEY
+                + "&autoDelete=false"
+                + "&autoAck=false")//Désactiver l'auto acquittement du message
+                //                .log("************************In FdxConsultation*****************************")
+                .errorHandler(defaultErrorHandler()
+                        .maximumRedeliveries(3)
+                        .onExceptionOccurred(ex -> {
+                            Throwable caused = ex.getProperty(Exchange.EXCEPTION_CAUGHT, Throwable.class);
+                            caused.printStackTrace();
+
+                        }))
+                .unmarshal(jacksonDataFormat)
+                .log("------------------------------In ProductionMetaDataRoute-----------------------------------")
+                .bean(ProductionMetaDaConsumer.class);
+    }
+
+    private void updateDb(ProductionMetaDataDto dto) {
+        FdxConsultationTable consTable = new FdxConsultationTable(dto.getDataProduction().getCodeTypeFichier(), dto.getDataProduction().getReferentielVersion());
+
+        try ( Connection connection = new DBConnection(dataSource).connection()) {
+            connection.setAutoCommit(false);
+
+            consTable.removeUnCompleteData(connection, dto.getDataProduction().getId());
+            new EchecIntegrationQueries(connection, dto.getDataProduction().getId()).save();
+
+            connection.commit();
+
+        } catch (SQLException ex) {
+            Logger.getLogger(ProductionMetaDataRoute.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+        } catch (Exception ex) {
+            Logger.getLogger(ProductionMetaDataRoute.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/ReferentialConsumerRoute.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/ReferentialConsumerRoute.java
new file mode 100644
index 0000000..63f0615
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/ReferentialConsumerRoute.java
@@ -0,0 +1,30 @@
+package com.megatim.fdxconsultation.service.impl.camel.routes.in;
+
+import com.megatim.fdxcommons.model.pojo.ReferentielToImportData;
+import com.megatim.fdxcommons.tools.context.AppContext;
+import com.megatim.fdxconsultation.service.impl.camel.consumer.ReferentielDataConsumer;
+import com.megatim.fdxconsultation.service.resolvers.JacksonMapperFormat;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ *
+ * @author lenovo
+ */
+public class ReferentialConsumerRoute extends RouteBuilder {
+
+    @Override
+    public void configure() throws Exception {
+
+        from("rabbitmq:"
+                + AppContext.REFERENTIEL_INTEGRATION_EXCHANGE
+                + "?queue=" + AppContext.REFERENTIEL_INTEGRATION_QUEUE
+                + "&routingKey=" + AppContext.REFERENTIEL_INTEGRATION_ROUTING_KEY
+                + "&autoDelete=false"
+                + "&autoAck=false"//Désactiver l'auto acquittement du message
+                + "&durable=true")//permettre à l'échange de survivre à un redémarrage
+                .log("************************receiving ref from api before unmarshalling***********************")
+                .unmarshal(JacksonMapperFormat.jacksonDataFormat(ReferentielToImportData.class))
+                .bean(ReferentielDataConsumer.class);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/StandaloneServerStateConsumerRoute.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/StandaloneServerStateConsumerRoute.java
new file mode 100644
index 0000000..01dd819
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/StandaloneServerStateConsumerRoute.java
@@ -0,0 +1,26 @@
+package com.megatim.fdxconsultation.service.impl.camel.routes.in;
+
+import com.fdx.messaging.common.FdxMessagingContext;
+import com.fdx.messaging.common.StandaloneServerState;
+import com.megatim.fdxconsultation.service.impl.camel.consumer.StandaloneServerStateConsumer;
+import com.megatim.fdxconsultation.service.resolvers.JacksonMapperFormat;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ *
+ * @author ASUS
+ */
+public class StandaloneServerStateConsumerRoute extends RouteBuilder {
+
+    @Override
+    public void configure() throws Exception {
+
+        from("rabbitmq:"
+                + FdxMessagingContext.STANDALONE_SERVER_EXCHANGE
+                + "?queue=" + FdxMessagingContext.STANDALONE_SERVER_QUEUE
+                + "&routingKey=" + FdxMessagingContext.STANDALONE_SERVER_ROUTING_KEY
+                + "&autoDelete=false")
+                .unmarshal(JacksonMapperFormat.jacksonDataFormat(StandaloneServerState.class))
+                .bean(StandaloneServerStateConsumer.class);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/TransfertDataMessageRoute.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/TransfertDataMessageRoute.java
new file mode 100644
index 0000000..0ef831b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/in/TransfertDataMessageRoute.java
@@ -0,0 +1,28 @@
+package com.megatim.fdxconsultation.service.impl.camel.routes.in;
+
+import com.fdx.messaging.common.FdxMessagingContext;
+import com.fdx.messaging.common.TransfertDataMessage;
+import com.megatim.fdxconsultation.service.impl.camel.consumer.TransfertDataMessageConsumer;
+import com.megatim.fdxconsultation.service.resolvers.JacksonMapperFormat;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class TransfertDataMessageRoute extends RouteBuilder {
+
+    @Override
+    public void configure() throws Exception {
+
+        from("rabbitmq:"
+                + FdxMessagingContext.TRANSFERT_DATA_EXCHANGE
+                + "?queue=" + FdxMessagingContext.TRANSFERT_DATA_QUEUE
+                + "&routingKey=" + FdxMessagingContext.TRANSFERT_DATA_ROUTING_KEY
+                + "&autoDelete=false")
+                .log("*******************In fdxconsultation JmsTransfertDataMessageRoute")
+                .unmarshal(JacksonMapperFormat.jacksonDataFormat(TransfertDataMessage.class))
+                .bean(TransfertDataMessageConsumer.class);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/out/DirectToTokenGenerationKafkaRoute.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/out/DirectToTokenGenerationKafkaRoute.java
new file mode 100644
index 0000000..0f31a2e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/out/DirectToTokenGenerationKafkaRoute.java
@@ -0,0 +1,31 @@
+package com.megatim.fdxconsultation.service.impl.camel.routes.out;
+
+import com.megatim.fdxcommons.model.jms.messages.ApiTokenMessage;
+import com.megatim.fdxcommons.tools.CommonAppContext;
+import com.megatim.fdxconsultation.service.resolvers.JacksonMapperFormat;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class DirectToTokenGenerationKafkaRoute extends RouteBuilder {
+
+    @Override
+    public void configure() throws Exception {
+
+        from("direct:" + AppCommonContext.TOKEN_GENERATION_DIRECT)
+                .process(ex -> {
+                    System.out.println("in DirectToTokenGenerationQueueRoute codeParticipant = " + ((ApiTokenMessage) ex.getIn().getBody()).getCodeParticipant());
+                    System.out.println("token = " + ((ApiTokenMessage) ex.getIn().getBody()).getToken());
+                })
+                .marshal(JacksonMapperFormat.jacksonDataFormat(ApiTokenMessage.class))
+                .to("rabbitmq:"
+                        + CommonAppContext.TOKEN_GENERATION_EXCHANGE
+                        + "?queue=" + CommonAppContext.TOKEN_GENERATION_QUEUE
+                        + "&routingKey=" + CommonAppContext.TOKEN_GENERATION_ROUTING_KEY
+                        + "&autoDelete=false");
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/out/RemoteConfigurationRoute.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/out/RemoteConfigurationRoute.java
new file mode 100644
index 0000000..51d3f94
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/out/RemoteConfigurationRoute.java
@@ -0,0 +1,36 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.impl.camel.routes.out;
+
+import com.megatim.fdxcommons.model.dtos.remoteproduction.RemoteConfigurationDto;
+import com.megatim.fdxcommons.tools.context.AppContext;
+import com.megatim.fdxconsultation.service.resolvers.JacksonMapperFormat;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ *
+ * @author ASUS
+ */
+public class RemoteConfigurationRoute extends RouteBuilder {
+
+    @Override
+    public void configure() throws Exception {
+        onException(Exception.class)
+                .handled(false)
+                .log("Exception occured: ${exception.message}")
+                .logStackTrace(true)
+                .end();
+
+        from("direct:" + AppCommonContext.REMOTE_CONGIGURATION_DIRECT)
+                .marshal(JacksonMapperFormat.jacksonDataFormat(RemoteConfigurationDto.class))
+                .to("rabbitmq:"
+                        + AppContext.REMOTE_CONFIGURATION_EXCHANGE
+                        + "?queue=" + AppContext.REMOTE_CONFIGURATION_QUEUE
+                        + "&routingKey=" + AppContext.REMOTE_CONFIGURATION_ROUTING_KEY
+                        + "&autoDelete=false"
+                        + "&durable=true");
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/timers/DataIntegrationTimer.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/timers/DataIntegrationTimer.java
new file mode 100644
index 0000000..f24cb32
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/timers/DataIntegrationTimer.java
@@ -0,0 +1,31 @@
+package com.megatim.fdxconsultation.service.impl.camel.routes.timers;
+
+import com.megatim.fdxconsultation.service.impl.camel.routes.timers.processor.DataIntegrationProcessor;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import javax.inject.Inject;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ *
+ * @author ASUS
+ */
+public class DataIntegrationTimer extends RouteBuilder {
+
+    @Inject
+    private DataIntegrationProcessor processor;
+
+    @Override
+    public void configure() throws Exception {
+
+        onException(Exception.class)
+                .handled(true)
+                .log("Exception occured: ${exception.message}")
+                .logStackTrace(true)
+                .end();
+
+        from("timer://" + AppCommonContext.DATA_INTEGRATION_TIMER + "?period=10000&delay=0&fixedRate=false&synchronous=true")
+                .log("*************************** In " + AppCommonContext.DATA_INTEGRATION_TIMER)
+                .throttle(1)
+                .bean(processor);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/timers/DeleteDataProductionTimer.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/timers/DeleteDataProductionTimer.java
new file mode 100644
index 0000000..00a7ebb
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/timers/DeleteDataProductionTimer.java
@@ -0,0 +1,33 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.impl.camel.routes.timers;
+
+import com.megatim.fdxcommons.tools.context.AppContext;
+import com.megatim.fdxconsultation.service.ifaces.timer.processor.DeleteDataProductionJob;
+import javax.inject.Inject;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ *
+ * @author ASUS
+ */
+public class DeleteDataProductionTimer extends RouteBuilder {
+
+    @Inject
+    private DeleteDataProductionJob deleteDataProductionJob;
+    
+    @Override
+    public void configure() throws Exception {
+        onException(Exception.class)
+                .handled(true)
+                .log("Exception occured: ${exception.message}")
+                .logStackTrace(true)
+                .end();
+
+        from("timer://" + AppContext.DELETE_DATAPRODUCTION_TIMER + "?period=30000&delay=0&fixedRate=false&synchronous=true")
+                .throttle(1)
+                .bean(deleteDataProductionJob);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/timers/processor/DataIntegrationProcessor.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/timers/processor/DataIntegrationProcessor.java
new file mode 100644
index 0000000..ff78857
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/timers/processor/DataIntegrationProcessor.java
@@ -0,0 +1,53 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.impl.camel.routes.timers.processor;
+
+import com.megatim.fdxcommons.model.enumeration.StatutDataProduction;
+import com.megatim.fdxconsultation.core.ifaces.dataproduction.DataProductionManager;
+import com.megatim.fdxconsultation.core.ifaces.integration.ColumnDefinitionManager;
+import com.megatim.fdxconsultation.core.impl.dataproductionworker.DataProductionWorkerGroup;
+import com.megatim.fdxconsultation.model.dataproduction.DataProduction;
+import com.megatim.fdxconsultation.core.impl.sockets.DataProductionSessionHandler;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import java.util.List;
+import javax.annotation.Resource;
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import javax.sql.DataSource;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+
+/**
+ *
+ * @author ASUS
+ */
+@ApplicationScoped
+public class DataIntegrationProcessor implements Processor {
+
+    @Resource(lookup = AppCommonContext.JNDI_NAME)
+    private DataSource dataSource;
+
+    @Inject
+    private DataProductionManager dataProductionManager;
+
+    @Inject
+    private ColumnDefinitionManager columnDefinitionManager;
+
+    @Inject
+    private DataProductionSessionHandler dataProductionSessionHandler;
+
+    @Inject
+    private DataProductionWorkerGroup dataProductionWorkerGroup;
+
+    @Override
+    public void process(Exchange exchange) throws Exception {
+        List<DataProduction> dataProductions = dataProductionManager.findByStatutDataProduction(StatutDataProduction.ENCOURS_DE_CONSOMMATION);
+
+        for (DataProduction d : dataProductions) {
+            dataProductionWorkerGroup.addNewDataProductionTask(d);
+        }
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/timers/processor/DeleteDataProductionJobImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/timers/processor/DeleteDataProductionJobImpl.java
new file mode 100644
index 0000000..2dde692
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/camel/routes/timers/processor/DeleteDataProductionJobImpl.java
@@ -0,0 +1,101 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.impl.camel.routes.timers.processor;
+
+import com.megatim.fdxcommons.model.dataproduction.DataProductionToDelete;
+import javax.enterprise.context.Dependent;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.enumeration.StatutDataProduction;
+import com.megatim.fdxcommons.tools.database.connection.DBConnection;
+import com.megatim.fdxcommons.tools.database.queries.DeleteTableDataQuery;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionIdColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.FdxConsultationTable;
+import com.megatim.fdxconsultation.core.ifaces.dataproduction.DataProductionManager;
+import com.megatim.fdxconsultation.core.ifaces.dataproduction.DataProductionToDeleteManager;
+import com.megatim.fdxconsultation.core.impl.factory.FdxConsultationTableFactory;
+import com.megatim.fdxconsultation.model.dataproduction.DataProduction;
+import com.megatim.fdxconsultation.service.ifaces.timer.processor.DeleteDataProductionJob;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.annotation.Resource;
+import javax.inject.Inject;
+import javax.sql.DataSource;
+import javax.transaction.Transactional;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class DeleteDataProductionJobImpl implements DeleteDataProductionJob {
+
+    @Inject
+    private DataProductionToDeleteManager dataProdToDeleteManager;
+
+    @Inject
+    private DataProductionManager dataProdManager;
+
+    @Resource(lookup = AppCommonContext.JNDI_NAME)
+    private DataSource dataSource;
+
+    @Override
+    public void delete() throws Exception {
+        List<DataProductionToDelete> liste = dataProdToDeleteManager.findAll(null, Arrays.asList(), Arrays.asList());
+
+        if (liste != null && !liste.isEmpty()) {
+
+            try ( Connection connection = new DBConnection(dataSource).connection()) {
+
+                liste.stream().forEach(dt -> {
+                    try {
+                        DataProduction dataProduction = dataProdManager.getById(dt.getId());
+
+                        if (dataProduction != null && dataProduction.getStatutDataProduction().equals(StatutDataProduction.A_CONSOMMER)) {
+                            System.out.println("------------------In Consultation DeleteDataProductionTimer dataProductionId = " + dt.getId() + " --------------------------------");
+                            deleteDataProductionToDelete(dataProduction, connection);
+                        }
+                    } catch (Exception ex) {
+                        Logger.getLogger(DeleteDataProductionJobImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+                    }
+                });
+            } catch (Exception ex) {
+                Logger.getLogger(DeleteDataProductionJobImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            }
+        }
+    }
+
+    @Transactional
+    private void deleteDataProductionToDelete(DataProduction dataProduction, Connection connection) throws SQLException, Exception {
+        System.out.println("------------------------------------------in Consultation deleteDataProductionToDelete------------------------------------");
+        FdxConsultationTable consTable = FdxConsultationTableFactory.createTable(dataProduction.getCodeTypeFichier(), dataProduction.getReferentielVersion(), connection);
+        new DeleteTableDataQuery(consTable.getTableName().name(connection),
+                connection,
+                deleteTableDataCriterion(dataProduction.getId())
+        ).execute();
+
+        String query = "DELETE FROM dataproductiontodelete WHERE id = ?";
+
+        try ( PreparedStatement statement = connection.prepareStatement(query)) {
+            statement.setLong(1, dataProduction.getId());
+            statement.executeUpdate();
+        }
+    }
+
+    private QueryCriterion deleteTableDataCriterion(Long dataProductionId) {
+        return new QueryCriterion(new DataProductionIdColumnDefinition().name(),
+                dataProductionId,
+                Operateur.NOT_EQUALS,
+                null,
+                Arrays.asList()
+        );
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/chat/UserChatListRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/chat/UserChatListRSImpl.java
new file mode 100644
index 0000000..ca91504
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/chat/UserChatListRSImpl.java
@@ -0,0 +1,49 @@
+package com.megatim.fdxconsultation.service.impl.chat;
+
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.searchentities.UserSearch;
+import com.megatim.fdxconsultation.service.ifaces.chat.UserChatListRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.util.stream.Collectors;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@SecuredClass(module = AppCommonContext.MODULE_ADMINISTRATION, path = "Utilisateurs pour le chat", description = "Utilisateurs pour le chat")
+@Path("user-chat-list")
+public class UserChatListRSImpl implements UserChatListRS {
+
+    @Inject
+    private UserManager manager;
+
+    @AuthenticatedUser
+    private User utilisateurConnecte;
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = manager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public Response findAll(HttpHeaders headers, UserSearch searchEntity) {
+        return Response.ok(
+                manager.getAll(searchEntity, utilisateurConnecte)
+                        .stream()
+                        .collect(Collectors.toList())
+        ).build();
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, UserSearch searchEntity) {
+        return manager.size(searchEntity);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/consumption/DataConsumptionOperationsRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/consumption/DataConsumptionOperationsRSImpl.java
new file mode 100644
index 0000000..5a209ad
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/consumption/DataConsumptionOperationsRSImpl.java
@@ -0,0 +1,130 @@
+package com.megatim.fdxconsultation.service.impl.consumption;
+
+import com.megatim.fdxcommons.model.pojo.PageData;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationValidationException;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxcommons.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.model.dtos.reporting.CustomTypeFichierReportConfigurationFromView;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxcommons.tools.exceptions.ApplicationForbidenException;
+import com.megatim.fdxcommons.tools.exceptions.CommonRessourceNotFoundException;
+import com.megatim.fdxconsultation.core.ifaces.integration.ColumnDefinitionManager;
+import com.megatim.fdxconsultation.core.ifaces.helper.DataConsumptionOperations;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.io.File;
+import java.util.List;
+import java.util.Optional;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+import com.megatim.fdxconsultation.service.ifaces.consumption.DataConsumptionOperationsRS;
+
+/**
+ *
+ * @author ASUS
+ */
+@SecuredClass(module = AppCommonContext.MODULE_CONSULTATION_WEB, path = "Consultation des fichiers", description = "Consultation des fichiers")
+@Path("consume-typefichier")
+public class DataConsumptionOperationsRSImpl implements DataConsumptionOperationsRS {
+
+    @Inject
+    private UserManager userManager;
+
+    @AuthenticatedUser
+    private User utilisateurConnecte;
+
+    @Inject
+    MapStructMapper commonMapper;
+
+    @Inject
+    DataConsumptionOperations dataConsumptionOperations;
+
+    @Inject
+    ColumnDefinitionManager columnDefinitionManager;
+
+    public DataConsumptionOperationsRSImpl() {
+        super();
+    }
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public Response find(HttpHeaders headers, String referentielVersion, String codeTypeFichier, CriteriaFormRequest criteriaFormRequest) {
+        stopIfTypeFichierNotExists(referentielVersion, codeTypeFichier);
+        stopIfUserNotAllowed(utilisateurConnecte, codeTypeFichier);
+
+        List<Map<String, Object>> datas = dataConsumptionOperations.findByCriteria(referentielVersion, codeTypeFichier, criteriaFormRequest.getCriteria());
+        return Response.ok(datas).build();
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, String referentielVersion, String codeTypeFichier, Integer pageNumber, Integer pageSize, CriteriaFormRequest criteriaFormRequest) {
+        stopIfTypeFichierNotExists(referentielVersion, codeTypeFichier);
+        stopIfUserNotAllowed(utilisateurConnecte, codeTypeFichier);
+
+        PageData datas = dataConsumptionOperations.findByCriteriaWithPagination(referentielVersion, codeTypeFichier, criteriaFormRequest.getCriteria(), pageNumber, pageSize);
+        return Response.ok(datas).build();
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, String referentielVersion, String codeTypeFichier, CriteriaFormRequest criteriaFormRequest) {
+        stopIfTypeFichierNotExists(referentielVersion, codeTypeFichier);
+        return dataConsumptionOperations.count(referentielVersion, codeTypeFichier, criteriaFormRequest.getCriteria());
+    }
+
+    @Override
+    public Response getPrintableColumns(HttpHeaders headers, String referentielVersion, String codeTypeFichier) {
+        stopIfTypeFichierNotExists(referentielVersion, codeTypeFichier);
+        return Response.ok(commonMapper.columnDefinitionListToColumnDefinitionDtoList(dataConsumptionOperations.getPrintableColumns(referentielVersion, codeTypeFichier))).build();
+    }
+
+    @Override
+    public Response printAll(HttpHeaders headers, String referentielVersion, String codeTypeFichier, CustomTypeFichierReportConfigurationFromView reportConfiguration) {
+        stopIfTypeFichierNotExists(referentielVersion, codeTypeFichier);
+        stopIfUserNotAllowed(utilisateurConnecte, codeTypeFichier);
+
+        File file = null;
+        try {
+            reportConfiguration.setTitle("LISTE DES DONNEES POUR LE TYPE DE FICHIER (" + codeTypeFichier + ")");
+            file = dataConsumptionOperations.printAll(referentielVersion, codeTypeFichier, reportConfiguration, utilisateurConnecte);
+        } catch (CommonApplicationValidationException ex) {
+            throw ex;
+        } catch (Exception ex) {
+            Logger.getLogger(DataConsumptionOperationsRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+
+        Response.ResponseBuilder response = Response.ok((Object) file);
+        response.header("Content-Disposition", "attachment;filename=" + file.getName());
+        return response.build();
+    }
+
+    private void stopIfUserNotAllowed(User user, String codeTypeFichier) {
+
+        Optional<TypeFichier> optTypeFichier = user.getTypeFichiers().stream().filter(t -> t.getCode().equals(codeTypeFichier)).findFirst();
+
+        if (!optTypeFichier.isPresent()) {
+            throw new ApplicationForbidenException("Impossible de continuer la requête car l'utilisateur "
+                    + user.getUserName() + " n'a pas accès au typefichier " + codeTypeFichier);
+        }
+    }
+
+    private void stopIfTypeFichierNotExists(String referentielVersion, String codeTypeFichier) {
+
+        if (columnDefinitionManager.findByReferentielAndTypeFichier(referentielVersion, codeTypeFichier).isEmpty()) {
+            throw new CommonRessourceNotFoundException("Structure du typeFichier '" + codeTypeFichier + "' inexistant ou  structure ");
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/dataproduction/DataProductionRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/dataproduction/DataProductionRSImpl.java
new file mode 100644
index 0000000..9247561
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/dataproduction/DataProductionRSImpl.java
@@ -0,0 +1,164 @@
+package com.megatim.fdxconsultation.service.impl.dataproduction;
+
+import com.megatim.fdxcommons.model.dtos.dataproduction.DataProductionDto;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.dataproduction.DataProductionManager;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dataproduction.DataProduction;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.service.ifaces.dataproduction.DataProductionRS;
+import com.megatim.fdxconsultation.service.impl.referentiel.ParticipantRSImpl;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.util.PrintableColumnExtractor;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.context.Dependent;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+@SecuredClass(module = AppCommonContext.MODULE_INFRASTRUCTURES, path = "Fdx API", description = "Fdx API")
+@Path("data-production")
+@Dependent
+public class DataProductionRSImpl implements DataProductionRS {
+
+    @Inject
+    private UserManager userManager;
+
+    @Inject
+    private DataProductionManager manager;
+
+    @Inject
+    MapStructMapper mapper;
+
+
+    @AuthenticatedUser
+    private User utilisateurConnecte;
+
+    public DataProductionRSImpl() {
+    }
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public DataProductionDto mapToDto(DataProduction entity) {
+        return mapper.dataProductionToDataProductionDto(entity);
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, Long id) {
+        DataProduction datum = manager.getById(id);
+        return Response.ok(mapToDto(datum)).build();
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pageSize, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            List<DataProduction> data = manager.findWithPagination(criteriaFormRequest, Arrays.asList(), pageNumber, pageSize);
+            return Response.ok(mapper.dataProductionListToDataProductionDtoList(data)).build();
+        } catch (Exception ex) {
+            Logger.getLogger(ParticipantRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            return manager.count(criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null);
+        } catch (Exception ex) {
+            Logger.getLogger(ParticipantRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(DataProduction.class)).build();
+    }
+
+    @Override
+    public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        return Response.ok(manager.findAll(criteriaFormRequest, Arrays.asList())).build();
+    }
+
+    @Override
+    public Response printAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            File file = manager.printAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(ParticipantRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            File file = manager.printOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(ParticipantRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response getPrintableColumns(HttpHeaders headers) {
+        List<CustomField> customFields = PrintableColumnExtractor.extract(DataProductionDto.class);
+        return Response.ok(mapper.customFieldListToCustomFieldDtoList(customFields)).build();
+    }
+
+    @Override
+    public Response exportExcelAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            File file = manager.exportExcelAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response exportExcelOne(HttpHeaders headers, @Context HttpServletRequest request, Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.exportExcelOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/documents/CategoryRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/documents/CategoryRSImpl.java
new file mode 100644
index 0000000..40a8bf4
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/documents/CategoryRSImpl.java
@@ -0,0 +1,66 @@
+package com.megatim.fdxconsultation.service.impl.documents;
+
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.documents.CategoryManager;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.documents.Category;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.service.ifaces.documents.CategoryRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@SecuredClass(module = AppCommonContext.MODULE_DOCUMENTATION, path = "Catégories", description = "Catégories")
+@Path("category")
+public class CategoryRSImpl implements CategoryRS {
+
+    @Inject
+    private CategoryManager categoryManager;
+
+    @Inject
+    private UserManager userManager;
+
+    @Inject
+    private MapStructMapper mapper;
+
+    private User connectedUser;
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        connectedUser = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public Response save(HttpHeaders headers, Category entity) {
+        Category c = categoryManager.add(entity, connectedUser);
+        return Response.ok(mapper.categoryToCategorySlimDto(c)).build();
+    }
+
+    @Override
+    public Response update(HttpHeaders headers, Long id, Category entity) {
+        Category c = categoryManager.update(id, entity, connectedUser);
+        return Response.ok(mapper.categoryToCategorySlimDto(c)).build();
+    }
+
+    @Override
+    public void delete(HttpHeaders headers, Long id) {
+        Category c = categoryManager.delete(id, connectedUser);
+    }
+
+    @Override
+    public Response all(HttpHeaders headers) {
+        List<Category> categories = categoryManager.loadAll();
+        return Response.ok(categories.stream().map(c -> mapper.categoryToCategoryDto(c)).collect(Collectors.toList())).build();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/documents/DocumentRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/documents/DocumentRSImpl.java
new file mode 100644
index 0000000..91e4551
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/documents/DocumentRSImpl.java
@@ -0,0 +1,58 @@
+package com.megatim.fdxconsultation.service.impl.documents;
+
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.documents.DocumentManager;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.documents.Document;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.service.ifaces.documents.DocumentRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredClass;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@SecuredClass(module = AppCommonContext.MODULE_DOCUMENTATION, path = "Documents", description = "Documents")
+@Path("document")
+public class DocumentRSImpl implements DocumentRS {
+
+    @Inject
+    private DocumentManager documentManager;
+
+    @Inject
+    private UserManager userManager;
+
+    @Inject
+    private MapStructMapper mapper;
+
+    private User connectedUser;
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        connectedUser = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public Response save(HttpHeaders headers, Long categoryId, Document entity) {
+        Document document = documentManager.add(categoryId, entity, connectedUser);
+        return Response.ok(mapper.documentToDocumentDto(document)).build();
+    }
+
+    @Override
+    public Response update(HttpHeaders headers, Long id, Document entity) {
+        Document document = documentManager.update(id, entity, connectedUser);
+        return Response.ok(mapper.documentToDocumentDto(document)).build();
+    }
+
+    @Override
+    public void delete(HttpHeaders headers, Long id) {
+        documentManager.delete(id, connectedUser);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/favoritessearch/FavoriteSearchRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/favoritessearch/FavoriteSearchRSImpl.java
new file mode 100644
index 0000000..ad538dc
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/favoritessearch/FavoriteSearchRSImpl.java
@@ -0,0 +1,130 @@
+package com.megatim.fdxconsultation.service.impl.favoritessearch;
+
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.mappers.MapStructMapper;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.favoritessearch.FavoriteSearchManager;
+import com.megatim.fdxconsultation.core.ifaces.stats.CriteriaEntityPersistedManager;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.FavoriteSearchDto;
+import com.megatim.fdxconsultation.model.favoritessearch.FavoriteSearch;
+import com.megatim.fdxconsultation.service.ifaces.favoritessearch.FavoriteSearchRS;
+import com.megatim.fdxconsultation.service.impl.referentiel.PaysRSImpl;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@SecuredClass(module = AppCommonContext.MODULE_CONSULTATION_WEB, path = "Favoris recherches", description = "Favoris recherches")
+@Path("favorite-search")
+public class FavoriteSearchRSImpl implements FavoriteSearchRS {
+
+    @Inject
+    private FavoriteSearchManager manager;
+
+    @Inject
+    private UserManager userManager;
+
+    @Inject
+    private MapStructMapper commonMapper;
+
+    @Inject
+    private com.megatim.fdxconsultation.model.mappers.MapStructMapper mapper;
+
+    @Inject
+    private CriteriaEntityPersistedManager criteriaManager;
+
+    private User connectedUser;
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        connectedUser = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public Response save(HttpHeaders headers, FavoriteSearchDto favoriteSearchRequest) {
+        manager.add(favoriteSearchRequest, connectedUser);
+        return Response.noContent().build();
+    }
+
+    @Override
+    public Response all(HttpHeaders headers) {
+        return Response.ok(manager.all(connectedUser.getUserName())).build();
+    }
+
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(FavoriteSearch.class)).build();
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            return manager.count(criterion(criteriaFormRequest));
+        } catch (Exception ex) {
+            Logger.getLogger(PaysRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    private CriteriaEntityFromView criterion(CriteriaFormRequest criteriaFormRequest) {
+
+        CriteriaEntityFromView finalCriterion = new CriteriaEntityFromView();
+        finalCriterion.setCriteriaLogicConnector(CriteriaLogicConnector.AND);
+        finalCriterion.getSubCriterias().add(newCriteriaEntityFromView("userName", connectedUser.getUserName(), Operateur.EQUALS));
+
+        CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+        if (criterion != null) {
+            finalCriterion.getSubCriterias().add(criterion);
+        }
+
+        return finalCriterion;
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pageSize, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            List<FavoriteSearchDto> data = manager
+                    .findWithPagination(criterion(criteriaFormRequest), Arrays.asList(), Arrays.asList(new OrderByDefinition("dateCreation", OrderByType.DESC)), pageNumber, pageSize)
+                    .stream()
+                    .map(f -> {
+                        FavoriteSearchDto favoriteSearchDto = mapper.favoriteSearchToFavoriteSearchDto(f);
+                        favoriteSearchDto.setCriteria(criteriaManager.criteriaEntityPersistedToCriteriaEntityFromView(f.getCriteria()));
+                        return favoriteSearchDto;
+                    })
+                    .collect(Collectors.toList());
+            return Response.ok(data).build();
+        } catch (Exception ex) {
+            Logger.getLogger(PaysRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    private CriteriaEntityFromView newCriteriaEntityFromView(String nomColonne, Object criteriaValue, Operateur operateur) {
+        CriteriaEntityFromView criterion = new CriteriaEntityFromView();
+        criterion.setNomColonne(nomColonne);
+        criterion.setCriteriaValue(criteriaValue);
+        criterion.setOperateur(operateur);
+
+        return criterion;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/filters/AfterUserActionFilter.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/filters/AfterUserActionFilter.java
new file mode 100644
index 0000000..af345ed
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/filters/AfterUserActionFilter.java
@@ -0,0 +1,78 @@
+package com.megatim.fdxconsultation.service.impl.filters;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.AfterUserAction;
+import com.megatim.fdxcommons.core.ifaces.interceptor.InterceptorHandler;
+import com.megatim.fdxcommons.model.log.ContainerContextDto;
+import com.megatim.fdxcommons.model.log.UserActionLog;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ContainerResponseContext;
+import javax.ws.rs.container.ContainerResponseFilter;
+import javax.ws.rs.container.ResourceInfo;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.SecurityContext;
+import javax.ws.rs.core.UriInfo;
+import javax.ws.rs.ext.Provider;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelContext;
+
+/**
+ *
+ * @author ASUS
+ */
+@Provider
+public class AfterUserActionFilter implements ContainerResponseFilter {
+
+    @Context
+    private ResourceInfo resourceInfo;
+
+    @Inject
+    private InterceptorHandler handler;
+
+    @Inject
+    private CdiCamelContext camelContext;
+
+    @Context
+    private SecurityContext securityContext;
+
+    @Context
+    private HttpServletRequest servletRequest;
+
+    @Context
+    private UriInfo uriInfo;
+
+    @Inject
+    private AfterUserAction afterAction;
+
+    @Override
+    public void filter(ContainerRequestContext crc, ContainerResponseContext crc1) throws IOException {
+        try {
+
+            UserActionLog log = afterAction.filter(getContainerContext(crc, crc1));
+            if (log != null) {
+                ProducerTemplate producerTemplate = camelContext.createProducerTemplate();
+                producerTemplate.asyncSendBody("direct:" + AppCommonContext.WEB_USER_ACTION_DIRECT, log);
+            }
+
+        } catch (Exception ex) {
+            Logger.getLogger(AfterUserActionFilter.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+        }
+
+    }
+
+    private ContainerContextDto getContainerContext(ContainerRequestContext containerRequestContext, ContainerResponseContext containerResponseContext) {
+        ContainerContextDto containerContext = new ContainerContextDto();
+        containerContext.setContainerRequestContext(containerRequestContext);
+        containerContext.setContainerResponseContext(containerResponseContext);
+        containerContext.setHttpServletRequest(servletRequest);
+        containerContext.setUriInfo(uriInfo);
+        containerContext.setResourceInfo(resourceInfo);
+        containerContext.setSecurityContext(securityContext);
+        return containerContext;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/filters/BeforeUserActionFilter.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/filters/BeforeUserActionFilter.java
new file mode 100644
index 0000000..ee5fc51
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/filters/BeforeUserActionFilter.java
@@ -0,0 +1,34 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.impl.filters;
+
+import com.megatim.fdxcommons.core.ifaces.interceptor.BeforeAction;
+import java.io.IOException;
+import javax.inject.Inject;
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ContainerRequestFilter;
+import javax.ws.rs.container.ResourceInfo;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.ext.Provider;
+
+/**
+ *
+ * @author ASUS
+ */
+@Provider
+public class BeforeUserActionFilter implements ContainerRequestFilter {
+    
+    @Context
+    private ResourceInfo resourceInfo;
+    
+    @Inject
+    private BeforeAction beforeAction;
+    
+    @Override
+    public void filter(ContainerRequestContext crc) throws IOException {
+//        beforeAction.filter(crc, resourceInfo);
+    }
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/filters/CORSFilter.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/filters/CORSFilter.java
new file mode 100644
index 0000000..c914b80
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/filters/CORSFilter.java
@@ -0,0 +1,47 @@
+package com.megatim.fdxconsultation.service.impl.filters;
+
+import java.io.IOException;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ *
+ * @author lenovo
+ */
+public class CORSFilter implements Filter {
+
+    @Override
+    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+
+        HttpServletRequest request = (HttpServletRequest) servletRequest;
+        HttpServletResponse response = (HttpServletResponse) servletResponse;
+
+        response.addHeader("Access-Control-Allow-Origin", "*");
+        response.addHeader("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,PATCH,OPTIONS");
+        response.addHeader("Access-Control-Allow-Headers", request.getHeader("Access-Control-Request-Headers"));
+        response.addHeader("Access-Control-Expose-Headers", "Location, Content-Disposition");
+
+        // For HTTP OPTIONS verb reply with ACCEPTED status code, for CORS handshake
+        if (request.getMethod().equals("OPTIONS")) {
+            response.setStatus(HttpServletResponse.SC_ACCEPTED);
+            return;
+        }
+
+        filterChain.doFilter(servletRequest, servletResponse);
+    }
+
+    @Override
+    public void destroy() {
+    }
+
+    @Override
+    public void init(FilterConfig arg0) throws ServletException {
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/filters/SecurityFilter.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/filters/SecurityFilter.java
new file mode 100644
index 0000000..d24d5e4
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/filters/SecurityFilter.java
@@ -0,0 +1,54 @@
+package com.megatim.fdxconsultation.service.impl.filters;
+
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.administration.security.UserSecurity;
+import com.mgt.rs.security.core.common.Secured;
+import com.mgt.rs.security.core.filter.AuthenticationFilter;
+import javax.inject.Inject;
+import com.mgt.rs.security.core.ifaces.UserRsSecurity;
+import javax.annotation.Priority;
+import javax.enterprise.context.Dependent;
+import javax.ws.rs.Priorities;
+import javax.ws.rs.ext.Provider;
+
+/**
+ *
+ * @author ASUS
+ */
+@Secured
+@Provider
+@Dependent
+@Priority(Priorities.AUTHENTICATION)
+public class SecurityFilter extends AuthenticationFilter {
+
+    /**
+     * On injecte un Gestionnaire d'entites
+     *
+     */
+    @Inject
+    private UserManager userManager;
+
+    /**
+     * Permet de recupérer un utilisateur via son username
+     *
+     * @param userName
+     * @return
+     */
+    @Override
+    protected UserRsSecurity recuperUtilisateur(String userName) {
+        User user = userManager.recuperUtilisateur(userName);
+        if (user != null) {
+            UserSecurity utilisateur = new UserSecurity(user);
+            utilisateur.setUserName(userName);
+            return utilisateur;
+        }
+        return null;
+    }
+
+    @Override
+    public boolean applicationValidation(UserRsSecurity user, Secured secured) {
+        return true;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/integration/ColumnDefinitionResourceImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/integration/ColumnDefinitionResourceImpl.java
new file mode 100644
index 0000000..127b1ae
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/integration/ColumnDefinitionResourceImpl.java
@@ -0,0 +1,32 @@
+package com.megatim.fdxconsultation.service.impl.integration;
+
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxconsultation.core.ifaces.integration.ColumnDefinitionManager;
+import com.megatim.fdxconsultation.service.ifaces.integration.ColumnDefinitionResource;
+import java.util.List;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Path("column-definitions")
+@Dependent
+public class ColumnDefinitionResourceImpl implements ColumnDefinitionResource {
+
+    @Inject
+    private ColumnDefinitionManager columDefinitionManager;
+
+    @Override
+    public Response columnDefinitions(HttpHeaders headers, String codeTypeFichier, String referentielVersion) {
+        List<ColumnDefinition> columDefinitions
+                = columDefinitionManager.findByReferentielAndTypeFichier(referentielVersion, codeTypeFichier);
+
+        return Response.ok(columDefinitions).build();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/log/ApiUserActionLogRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/log/ApiUserActionLogRSImpl.java
new file mode 100644
index 0000000..ba96366
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/log/ApiUserActionLogRSImpl.java
@@ -0,0 +1,198 @@
+package com.megatim.fdxconsultation.service.impl.log;
+
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.log.ApiUserActionLogManager;
+import com.megatim.fdxconsultation.core.ifaces.log.UserActionLogManager;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.log.UserActionLogDto;
+import com.megatim.fdxconsultation.model.log.ApiUserActionLog;
+import com.megatim.fdxconsultation.model.log.dtos.ApiUserActionSummarySearch;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.reporting.model.log.ApiUserActionLogReporting;
+import com.megatim.fdxconsultation.service.ifaces.log.ApiUserActionLogRS;
+import com.megatim.fdxconsultation.service.impl.referentiel.PaysRSImpl;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.util.PrintableColumnExtractor;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+@SecuredClass(module = AppCommonContext.MODULE_INFRASTRUCTURES, path = "Fdx API", description = "Fdx API")
+@Path("api-user-action-log")
+public class ApiUserActionLogRSImpl implements ApiUserActionLogRS {
+
+    @Inject
+    MapStructMapper mapper;
+
+    @Inject
+    private UserManager userManager;
+
+    @Inject
+    private UserActionLogManager userActionLogManager;
+
+    @Inject
+    ApiUserActionLogManager manager;
+
+    @AuthenticatedUser
+    private static User utilisateurConnecte;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    public ApiUserActionLogRSImpl() {
+        super();
+    }
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public UserActionLogDto mapToDto(ApiUserActionLog entity) {
+        return mapper.apiUserActionLogToUserActionLogDto(entity);
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, Long id) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pageSize, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            List<ApiUserActionLog> logs = manager.findWithPagination(criterion, Arrays.asList(), Arrays.asList(new OrderByDefinition(manager.getEntityIdName(), OrderByType.DESC)), pageNumber, pageSize);
+
+            return Response.ok(mapper.apiUserActionLogListToUserActionLogDtoList(logs)).build();
+        } catch (Exception ex) {
+            Logger.getLogger(UserActionLogRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return manager.count(criterion);
+        } catch (Exception ex) {
+            Logger.getLogger(UserActionLogRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(ApiUserActionLog.class)).build();
+    }
+
+    @Override
+    public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            List<ApiUserActionLog> logs = manager.findAll(criterion, Arrays.asList(), Arrays.asList(new OrderByDefinition(manager.getEntityIdName(), OrderByType.DESC)));
+
+            return Response.ok(mapper.apiUserActionLogListToUserActionLogDtoList(logs)).build();
+        } catch (Exception ex) {
+            Logger.getLogger(UserActionLogRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response printAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            File file = manager.printAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(PaysRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            ApiUserActionLog entite = manager.getById(id);
+            userActionLogManager.log(headers, request, "Export pdf détail log API (id=" + entite.getId() + ")",
+                    utilisateurConnecte.getUserName());
+            File file = manager.printOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(UserActionLogRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response getPrintableColumns(HttpHeaders headers) {
+        List<CustomField> customFields = PrintableColumnExtractor.extract(ApiUserActionLogReporting.class);
+        return Response.ok(mapper.customFieldListToCustomFieldDtoList(customFields)).build();
+    }
+
+    @Override
+    public Response exportExcelAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            File file = manager.exportExcelAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response exportExcelOne(HttpHeaders headers, @Context HttpServletRequest request, Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            ApiUserActionLog entite = manager.getById(id);
+            userActionLogManager.log(headers, request, "Export excel détail log API (id=" + entite.getId() + ")",
+                    utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.exportExcelOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response getByStatut(HttpHeaders headers, ApiUserActionSummarySearch apiUserActionSummarySearch) {
+        return Response.ok(manager.getByStatut(apiUserActionSummarySearch)).build();
+    }
+
+    @Override
+    public Response getByStatutAndUserName(HttpHeaders headers, ApiUserActionSummarySearch apiUserActionSummarySearch) {
+        return Response.ok(manager.getByStatutAndUserName(apiUserActionSummarySearch)).build();
+    }
+
+    @Override
+    public Response getByStatutAndPath(HttpHeaders headers, ApiUserActionSummarySearch apiUserActionSummarySearch) {
+        return Response.ok(manager.getByStatutAndPath(apiUserActionSummarySearch)).build();
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/log/UserActionLogRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/log/UserActionLogRSImpl.java
new file mode 100644
index 0000000..79d96f0
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/log/UserActionLogRSImpl.java
@@ -0,0 +1,165 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.impl.log;
+
+import com.megatim.fdxcommons.model.log.UserActionLog;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.log.UserActionLogManager;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.log.UserActionLogDto;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.service.ifaces.log.UserActionLogRS;
+import com.megatim.fdxconsultation.service.impl.referentiel.PaysRSImpl;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.util.PrintableColumnExtractor;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+@SecuredClass(module = "", path = "", description = "")
+@Path("user-action-log")
+public class UserActionLogRSImpl implements UserActionLogRS {
+
+    @Inject
+    MapStructMapper mapper;
+
+    @Inject
+    UserActionLogManager manager;
+
+    @AuthenticatedUser
+    private User utilisateurConnecte;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @Override
+    public UserActionLogDto mapToDto(UserActionLog entity) {
+        return mapper.userActionLogToUserActionLogDto(entity);
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, Long id) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pageSize, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            List<UserActionLog> logs = manager.findWithPagination(criterion, Arrays.asList(), Arrays.asList(), pageNumber, pageSize);
+
+            return Response.ok(mapper.userActionLogListToUserActionLogDtoList(logs)).build();
+        } catch (Exception ex) {
+            Logger.getLogger(UserActionLogRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return manager.count(criterion);
+        } catch (Exception ex) {
+            Logger.getLogger(UserActionLogRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(UserActionLog.class)).build();
+    }
+
+    @Override
+    public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            List<UserActionLog> logs = manager.findAll(criterion, Arrays.asList(), Arrays.asList());
+
+            return Response.ok(mapper.userActionLogListToUserActionLogDtoList(logs)).build();
+        } catch (Exception ex) {
+            Logger.getLogger(UserActionLogRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response printAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            File file = manager.printAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(PaysRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            File file = manager.printOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(UserActionLogRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response getPrintableColumns(HttpHeaders headers) {
+        List<CustomField> customFields = PrintableColumnExtractor.extract(UserActionLogDto.class);
+        return Response.ok(mapper.customFieldListToCustomFieldDtoList(customFields)).build();
+    }
+    
+    @Override
+    public Response exportExcelAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            File file = manager.exportExcelAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response exportExcelOne(HttpHeaders headers, @Context HttpServletRequest request, Long id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.exportExcelOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/ExtensionFichierRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/ExtensionFichierRSImpl.java
new file mode 100644
index 0000000..3d8466a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/ExtensionFichierRSImpl.java
@@ -0,0 +1,173 @@
+package com.megatim.fdxconsultation.service.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.ExtensionFichier;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.ExtensionFichierManager;
+import com.megatim.fdxcommons.model.dtos.referentiel.ExtensionFichierDto;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.log.UserActionLogManager;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.reporting.model.referentiel.ExtensionFichierReporting;
+import com.megatim.fdxconsultation.service.ifaces.referentiel.ExtensionFichierRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.util.PrintableColumnExtractor;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredAdmin;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.context.Dependent;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+@SecuredClass(module = AppCommonContext.MODULE_INFRASTRUCTURES, path = "Extensions des fichiers", description = "Extensions des fichiers")
+@SecuredAdmin(action = {"consulter"})
+@Path("extension-fichier")
+@Dependent
+public class ExtensionFichierRSImpl implements ExtensionFichierRS {
+
+    @Inject
+    private ExtensionFichierManager manager;
+
+    @Inject
+    private UserActionLogManager userActionLogManager;
+
+    @Inject
+    private UserManager userManager;
+
+    @AuthenticatedUser
+    private static User utilisateurConnecte;
+
+    @Inject
+    MapStructMapper mapStructMapper;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    public ExtensionFichierRSImpl() {
+        super();
+    }
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public ExtensionFichierDto mapToDto(ExtensionFichier entity) {
+        return commonMapper.extensionFichierToExtensionFichierDto(entity);
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pagesize, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            List<ExtensionFichier> data = manager.findWithPagination(criteriaFormRequest, Arrays.asList(), pageNumber, pagesize);
+            return Response.ok(commonMapper.extensionFichierListToExtensionFichierDtoList(data)).build();
+        } catch (Exception ex) {
+            Logger.getLogger(ExtensionFichierRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return manager.count(criterion);
+        } catch (Exception ex) {
+            Logger.getLogger(ExtensionFichierRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, String id) {
+        ExtensionFichier datum = manager.getById(id);
+        return Response.ok(mapToDto(datum)).build();
+    }
+
+    @Override
+    public Response printAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            File file = manager.printAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(ExtensionFichierRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            ExtensionFichier entite = manager.getById(id);
+            userActionLogManager.log(headers, request, "Export pdf détail extension fichier : " + entite.getExtension() + " (id=" + entite.getExtension() + ")",
+                    utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.printOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(ExtensionFichierRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response getPrintableColumns(HttpHeaders headers) {
+        List<CustomField> customFields = PrintableColumnExtractor.extract(ExtensionFichierReporting.class);
+        return Response.ok(mapStructMapper.customFieldListToCustomFieldDtoList(customFields)).build();
+    }
+
+    @Override
+    public Response exportExcelAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            File file = manager.exportExcelAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            ExtensionFichier entite = manager.getById(id);
+            userActionLogManager.log(headers, request, "Export excel détail extension fichier : " + entite.getExtension() + " (id=" + entite.getExtension() + ")",
+                    utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.exportExcelOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(ExtensionFichier.class)).build();
+    }
+
+    @Override
+    public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        return Response.ok(commonMapper.extensionFichierListToExtensionFichierDtoList(manager.findAll(criteriaFormRequest, Arrays.asList()))).build();
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/GroupeNoeudRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/GroupeNoeudRSImpl.java
new file mode 100644
index 0000000..13ec87c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/GroupeNoeudRSImpl.java
@@ -0,0 +1,175 @@
+package com.megatim.fdxconsultation.service.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.GroupeNoeud;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.GroupeNoeudManager;
+import com.megatim.fdxcommons.model.dtos.referentiel.GroupeNoeudDto;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.log.UserActionLogManager;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.reporting.model.referentiel.GroupeNoeudReporting;
+import com.megatim.fdxconsultation.service.ifaces.referentiel.GroupeNoeudRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.util.PrintableColumnExtractor;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.context.Dependent;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+@SecuredClass(module = AppCommonContext.MODULE_INFRASTRUCTURES, path = "Groupes de noeuds", description = "Groupes de noeuds")
+@Path("groupe-noeud")
+@Dependent
+public class GroupeNoeudRSImpl implements GroupeNoeudRS {
+
+    @Inject
+    private GroupeNoeudManager manager;
+
+    @Inject
+    private UserActionLogManager userActionLogManager;
+    
+    @Inject
+    private UserManager userManager;
+
+    @AuthenticatedUser
+    private static User utilisateurConnecte;
+
+    @Inject
+    MapStructMapper mapStructMapper;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    public GroupeNoeudRSImpl() {
+        super();
+    }
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public GroupeNoeudDto mapToDto(GroupeNoeud entity) {
+        return commonMapper.groupeNoeudToGroupeNoeudDto(entity);
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pagesize, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            List<GroupeNoeud> data = manager.findWithPagination(criteriaFormRequest, Arrays.asList(), pageNumber, pagesize);
+            return Response.ok(commonMapper.groupeNoeudListToGroupeNoeudDtoList(data)).build();
+        } catch (Exception ex) {
+            Logger.getLogger(GroupeNoeudRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+        try {
+            return manager.count(criterion);
+        } catch (Exception ex) {
+            Logger.getLogger(GroupeNoeudRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, String id) {
+        GroupeNoeud datum = manager.getById(id);
+        return Response.ok(mapToDto(datum)).build();
+    }
+
+    @Override
+    public Response printAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            File file = manager.printAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(GroupeNoeudRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            GroupeNoeud entite = manager.getById(id);
+            userActionLogManager.log(headers, request, "Export pdf détail groupe noeud : "+entite.getCode()+" (id="+entite.getCode()+")",
+                utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.printOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(GroupeNoeudRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response getPrintableColumns(HttpHeaders headers) {
+        List<CustomField> customFields = PrintableColumnExtractor.extract(GroupeNoeudReporting.class);
+        return Response.ok(mapStructMapper.customFieldListToCustomFieldDtoList(customFields)).build();
+    }
+    
+    @Override
+    public Response exportExcelAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            File file = manager.exportExcelAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            GroupeNoeud entite = manager.getById(id);
+            userActionLogManager.log(headers, request, "Export excel détail groupe noeud : "+entite.getCode()+" (id="+entite.getCode()+")",
+                utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.exportExcelOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(GroupeNoeud.class)).build();
+    }
+
+    @Override
+    public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        return Response.ok(commonMapper.groupeNoeudListToGroupeNoeudDtoList(manager.findAll(criteriaFormRequest, Arrays.asList()))).build();
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/GroupeParticipantRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/GroupeParticipantRSImpl.java
new file mode 100644
index 0000000..9ee8dc0
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/GroupeParticipantRSImpl.java
@@ -0,0 +1,179 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.GroupeParticipant;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.GroupeParticipantManager;
+import com.megatim.fdxcommons.model.dtos.referentiel.GroupeParticipantDto;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntity;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.log.UserActionLogManager;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.reporting.model.referentiel.GroupeParticipantReporting;
+import com.megatim.fdxconsultation.service.ifaces.referentiel.GroupeParticipantRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.util.PrintableColumnExtractor;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.context.Dependent;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+@SecuredClass(module = AppCommonContext.MODULE_INFRASTRUCTURES, path = "Groupes de participants", description = "Groupes de participants")
+@Path("groupe-participant")
+@Dependent
+public class GroupeParticipantRSImpl implements GroupeParticipantRS {
+
+    @Inject
+    private GroupeParticipantManager manager;
+
+    @Inject
+    private UserActionLogManager userActionLogManager;
+    
+    @Inject
+    private UserManager userManager;
+
+    @AuthenticatedUser
+    private static User utilisateurConnecte;
+
+    @Inject
+    MapStructMapper mapStructMapper;
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    public GroupeParticipantRSImpl() {
+        super();
+    }
+
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(GroupeParticipant.class)).build();
+    }
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public GroupeParticipantDto mapToDto(GroupeParticipant entity) {
+        return commonMapper.groupeParticipantToGroupeParticipantDto(entity);
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pagesize, CriteriaFormRequest criteriaFormRequest) {
+
+        try {
+            List<GroupeParticipant> data = manager.findWithPagination(criteriaFormRequest, Arrays.asList(), pageNumber, pagesize);
+            return Response.ok(commonMapper.groupeParticipantListToGroupeParticipantDtoList(data)).build();
+        } catch (Exception ex) {
+            Logger.getLogger(GroupeParticipantRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return manager.count(criterion);
+        } catch (Exception ex) {
+            Logger.getLogger(GroupeParticipantRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, String id) {
+        GroupeParticipant datum = manager.getById(id);
+        return Response.ok(mapToDto(datum)).build();
+    }
+
+    @Override
+    public Response printAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        File file = null;
+
+        try {
+            file = manager.printAll(reportConfiguration, utilisateurConnecte);
+        } catch (Exception ex) {
+            Logger.getLogger(GroupeParticipantRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+        }
+        return manager.downloadFile(file);
+    }
+
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            GroupeParticipant entite = manager.getById(id);
+            userActionLogManager.log(headers, request, "Export pdf détail groupe participant : "+entite.getCode()+"-"+entite.getLibelle()+" (id="+entite.getCode()+")",
+                utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.printOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(GroupeParticipantRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response getPrintableColumns(HttpHeaders headers) {
+        List<CustomField> customFields = PrintableColumnExtractor.extract(GroupeParticipantReporting.class);
+        return Response.ok(mapStructMapper.customFieldListToCustomFieldDtoList(customFields)).build();
+    }
+    
+    @Override
+    public Response exportExcelAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            File file = manager.exportExcelAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            GroupeParticipant entite = manager.getById(id);
+            userActionLogManager.log(headers, request, "Export excel détail groupe participant : "+entite.getCode()+"-"+entite.getLibelle()+" (id="+entite.getCode()+")",
+                utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.exportExcelOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        return Response.ok(commonMapper.groupeParticipantListToGroupeParticipantDtoList(manager.findAll(criteriaFormRequest, Arrays.asList()))).build();
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/NoeudRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/NoeudRSImpl.java
new file mode 100644
index 0000000..58905a7
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/NoeudRSImpl.java
@@ -0,0 +1,188 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.Noeud;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.NoeudManager;
+import com.megatim.fdxcommons.model.dtos.referentiel.NoeudDto;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.search.SearchColumn;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.log.UserActionLogManager;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.reporting.model.referentiel.NoeudReporting;
+import com.megatim.fdxconsultation.service.ifaces.referentiel.NoeudRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.util.PrintableColumnExtractor;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.io.File;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.context.Dependent;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+@SecuredClass(module = AppCommonContext.MODULE_INFRASTRUCTURES, path = "Noeuds", description = "Noeuds")
+@Path("noeud")
+@Dependent
+public class NoeudRSImpl implements NoeudRS {
+
+    @Inject
+    private NoeudManager manager;
+
+    @Inject
+    private UserActionLogManager userActionLogManager;
+    
+    @Inject
+    private UserManager userManager;
+
+    @AuthenticatedUser
+    private static User utilisateurConnecte;
+
+    @Inject
+    MapStructMapper mapStructMapper;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    public NoeudRSImpl() {
+        super();
+    }
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public NoeudDto mapToDto(Noeud entity) {
+        NoeudDto dto = null;
+        try {
+            dto = commonMapper.noeudToNoeudDto(entity);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        return dto;
+    }
+
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        List<SearchColumn> searchColumns = CriteriaEntitySearchUtil.getSearchColumns(Noeud.class);
+        Collections.sort(searchColumns, (SearchColumn s1, SearchColumn s2) -> Integer.valueOf(s1.getRang()).compareTo(s2.getRang()));
+
+        return Response.ok(searchColumns).build();
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pagesize, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            List<Noeud> data = manager.findWithPagination(criteriaFormRequest, Arrays.asList(), pageNumber, pagesize);
+            return Response.ok(commonMapper.noeudListToNoeudDtoList(data)).build();
+        } catch (Exception ex) {
+            Logger.getLogger(NoeudRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return manager.count(criterion);
+        } catch (Exception ex) {
+            Logger.getLogger(NoeudRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, String id) {
+        Noeud datum = manager.getById(id);
+        return Response.ok(mapToDto(datum)).build();
+    }
+
+    @Override
+    public Response printAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            File file = manager.printAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(NoeudRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            Noeud entite = manager.getById(id);
+            userActionLogManager.log(headers, request, "Export pdf détail noeud : "+entite.getCode()+" (id="+entite.getCode()+")",
+                utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.printOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(NoeudRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response getPrintableColumns(HttpHeaders headers) {
+        List<CustomField> customFields = PrintableColumnExtractor.extract(NoeudReporting.class);
+        return Response.ok(mapStructMapper.customFieldListToCustomFieldDtoList(customFields)).build();
+    }
+
+    @Override
+    public Response exportExcelAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            File file = manager.exportExcelAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            Noeud entite = manager.getById(id);
+            userActionLogManager.log(headers, request, "Export excel détail noeud : "+entite.getCode()+" (id="+entite.getCode()+")",
+                utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.exportExcelOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+    
+    @Override
+    public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        return Response.ok(commonMapper.noeudListToNoeudDtoList(manager.findAll(criteriaFormRequest, Arrays.asList()))).build();
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/ParticipantRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/ParticipantRSImpl.java
new file mode 100644
index 0000000..d3bfa6a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/ParticipantRSImpl.java
@@ -0,0 +1,175 @@
+package com.megatim.fdxconsultation.service.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.Participant;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.ParticipantManager;
+import com.megatim.fdxcommons.model.dtos.referentiel.ParticipantDto;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.log.UserActionLogManager;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.reporting.model.referentiel.ParticipantReporting;
+import com.megatim.fdxconsultation.service.ifaces.referentiel.ParticipantRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.util.PrintableColumnExtractor;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.context.Dependent;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+@SecuredClass(module = AppCommonContext.MODULE_INFRASTRUCTURES, path = "Participants", description = "Participants")
+@Path("participant")
+@Dependent
+public class ParticipantRSImpl implements ParticipantRS {
+
+    @Inject
+    private ParticipantManager manager;
+
+    @Inject
+    private UserActionLogManager userActionLogManager;
+    
+    @Inject
+    private UserManager userManager;
+
+    @Inject
+    MapStructMapper mapStructMapper;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @AuthenticatedUser
+    private static User utilisateurConnecte;
+
+    public ParticipantRSImpl() {
+        super();
+    }
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public ParticipantDto mapToDto(Participant entity) {
+        return commonMapper.participantToPartcipantDto(entity);
+    }
+
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(Participant.class)).build();
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pagesize, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            List<Participant> data = manager.findWithPagination(criteriaFormRequest, Arrays.asList("noeuds"), pageNumber, pagesize);
+            return Response.ok(commonMapper.participantListToParticipantDtoList(data)).build();
+        } catch (Exception ex) {
+            Logger.getLogger(ParticipantRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return manager.count(criterion);
+        } catch (Exception ex) {
+            Logger.getLogger(ParticipantRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, String id) {
+        Participant datum = manager.getById(id);
+        return Response.ok(mapToDto(datum)).build();
+    }
+
+    @Override
+    public Response printAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            File file = manager.printAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(ParticipantRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            Participant entite = manager.getById(id);
+            userActionLogManager.log(headers, request, "Export pdf détail participant : "+entite.getCode()+" (id="+entite.getCode()+")",
+                utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.printOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(ParticipantRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        return Response.ok(commonMapper.participantListToParticipantDtoList(manager.findAll(criteriaFormRequest, Arrays.asList("noeuds")))).build();
+    }
+
+    @Override
+    public Response getPrintableColumns(HttpHeaders headers) {
+        List<CustomField> customFields = PrintableColumnExtractor.extract(ParticipantReporting.class);
+        return Response.ok(mapStructMapper.customFieldListToCustomFieldDtoList(customFields)).build();
+    }
+    
+    @Override
+    public Response exportExcelAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            File file = manager.exportExcelAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            Participant entite = manager.getById(id);
+            userActionLogManager.log(headers, request, "Export excel détail participant : "+entite.getCode()+" (id="+entite.getCode()+")",
+                utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.exportExcelOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/PaysRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/PaysRSImpl.java
new file mode 100644
index 0000000..fefe375
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/PaysRSImpl.java
@@ -0,0 +1,175 @@
+package com.megatim.fdxconsultation.service.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.Pays;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.PaysManager;
+import com.megatim.fdxcommons.model.dtos.referentiel.PaysDto;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.log.UserActionLogManager;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.fdxconsultation.reporting.model.referentiel.PaysReporting;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.service.ifaces.referentiel.PaysRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.util.PrintableColumnExtractor;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredAdmin;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+@SecuredClass(module = AppCommonContext.MODULE_INFRASTRUCTURES, path = "Pays", description = "Pays")
+@Path("pays")
+@SecuredAdmin(action = {"valider", "rejeter", "consulter"})
+public class PaysRSImpl implements PaysRS {
+
+    @Inject
+    private PaysManager manager;
+
+    @Inject
+    private UserManager userManager;
+
+    @Inject
+    private UserActionLogManager userActionLogManager;
+
+    @AuthenticatedUser
+    private static User utilisateurConnecte;
+
+    @Inject
+    MapStructMapper mapStructMapper;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    public PaysRSImpl() {
+        super();
+    }
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public PaysDto mapToDto(Pays entity) {
+        return commonMapper.paysToPaysDto(entity);
+    }
+
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(Pays.class)).build();
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pageSize, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            List<Pays> data = manager.findWithPagination(criteriaFormRequest, Arrays.asList("participants"), pageNumber, pageSize);
+            return Response.ok(commonMapper.paysListToPaysDtoList(data)).build();
+        } catch (Exception ex) {
+            Logger.getLogger(PaysRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return manager.count(criterion);
+        } catch (Exception ex) {
+            Logger.getLogger(PaysRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, String id) {
+        Pays datum = manager.getById(id);
+        return Response.ok(mapToDto(datum)).build();
+    }
+
+    @Override
+    public Response printAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            File file = manager.printAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(PaysRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            Pays entite = manager.getById(id);
+//            userActionLogManager.log(headers, request, "Export pdf détail pays : "+entite.getCode()+" (id="+entite.getCode()+")",
+//                utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.printOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(PaysRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response getPrintableColumns(HttpHeaders headers) {
+        List<CustomField> customFields = PrintableColumnExtractor.extract(PaysReporting.class);
+        return Response.ok(mapStructMapper.customFieldListToCustomFieldDtoList(customFields)).build();
+    }
+
+    @Override
+    public Response exportExcelAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            File file = manager.exportExcelAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            Pays entite = manager.getById(id);
+            userActionLogManager.log(headers, request, "Export excel détail pays : " + entite.getCode() + " (id=" + entite.getCode() + ")",
+                    utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.exportExcelOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        return Response.ok(manager.findAll(criteriaFormRequest, Arrays.asList("participants"))).build();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/ReferentielRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/ReferentielRSImpl.java
new file mode 100644
index 0000000..fc829b4
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/ReferentielRSImpl.java
@@ -0,0 +1,174 @@
+package com.megatim.fdxconsultation.service.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.ReferentielManager;
+import com.megatim.fdxcommons.model.dtos.referentiel.ReferentielDto;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.log.UserActionLogManager;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.reporting.model.referentiel.ReferentielReporting;
+import com.megatim.fdxconsultation.service.ifaces.referentiel.ReferentielRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.util.PrintableColumnExtractor;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.SecurityContext;
+
+/**
+ *
+ * @author ASUS
+ */
+@SecuredClass(module = AppCommonContext.MODULE_INFRASTRUCTURES, path = "Referentiels", description = "Referentiels")
+@Path("referentiel")
+public class ReferentielRSImpl implements ReferentielRS {
+
+    @Context
+    private SecurityContext securityContext;
+
+    @Inject
+    private UserActionLogManager userActionLogManager;
+    
+    @Inject
+    private ReferentielManager manager;
+
+    @Inject
+    private UserManager userManager;
+
+    @AuthenticatedUser
+    private static User utilisateurConnecte;
+
+    @Inject
+    MapStructMapper mapStructMapper;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    public ReferentielRSImpl() {
+        super();
+    }
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public ReferentielDto mapToDto(Referentiel entity) {
+        return commonMapper.referentielToReferentielDto(entity);
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pagesize, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            List<Referentiel> data = manager.findWithPagination(criteriaFormRequest, Arrays.asList(), pageNumber, pagesize);
+            return Response.ok(commonMapper.referentielListToReferentielDtoList(data)).build();
+        } catch (Exception ex) {
+            Logger.getLogger(ReferentielRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return manager.count(criterion);
+        } catch (Exception ex) {
+            Logger.getLogger(ReferentielRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, String id) {
+        Referentiel datum = manager.getById(id);
+        return Response.ok(mapToDto(datum)).build();
+    }
+
+    @Override
+    public Response printAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            File file = manager.printAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(ReferentielRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            Referentiel entite = manager.getById(id);
+            userActionLogManager.log(headers, request, "Export pdf détail referentiel : "+entite.getVersion()+" (id="+entite.getVersion()+")",
+                utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.printOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(ReferentielRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response getPrintableColumns(HttpHeaders headers) {
+        List<CustomField> customFields = PrintableColumnExtractor.extract(ReferentielReporting.class);
+        return Response.ok(mapStructMapper.customFieldListToCustomFieldDtoList(customFields)).build();
+    }
+
+    @Override
+    public Response exportExcelAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            File file = manager.exportExcelAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            Referentiel entite = manager.getById(id);
+            userActionLogManager.log(headers, request, "Export excel détail referentiel : "+entite.getVersion()+" (id="+entite.getVersion()+")",
+                utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.exportExcelOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+    
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(Referentiel.class)).build();
+    }
+
+    @Override
+    public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        return Response.ok(manager.findAll(criteriaFormRequest, Arrays.asList("extensionFichiers"))).build();
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/RoutageRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/RoutageRSImpl.java
new file mode 100644
index 0000000..a781956
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/RoutageRSImpl.java
@@ -0,0 +1,189 @@
+package com.megatim.fdxconsultation.service.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.RoutageId;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.RoutageManager;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.referentiel.Routage;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.log.UserActionLogManager;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.referentiel.dtos.RoutageDetailsResponse;
+import com.megatim.fdxconsultation.model.referentiel.dtos.RoutageSlimResponse;
+import com.megatim.fdxconsultation.reporting.model.referentiel.RoutageReporting;
+import com.megatim.fdxconsultation.service.ifaces.referentiel.RoutageRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.util.PrintableColumnExtractor;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.context.Dependent;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+@SecuredClass(module = AppCommonContext.MODULE_INFRASTRUCTURES, path = "Routages", description = "Routages")
+@Path("routage")
+@Dependent
+public class RoutageRSImpl implements RoutageRS {
+
+    @Inject
+    private RoutageManager manager;
+
+    @Inject
+    private UserActionLogManager userActionLogManager;
+
+    @Inject
+    private UserManager userManager;
+
+    @AuthenticatedUser
+    private static User utilisateurConnecte;
+
+    @Inject
+    MapStructMapper mapStructMapper;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    public RoutageRSImpl() {
+        super();
+    }
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public RoutageSlimResponse mapToDto(Routage entity) {
+        return new RoutageSlimResponse(entity);
+    }
+
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(Routage.class)).build();
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return manager.count(criterion);
+        } catch (Exception ex) {
+            Logger.getLogger(RoutageRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, String referentielVersion, String codeTypeFichier) {
+        RoutageId routageId = new RoutageId(codeTypeFichier, referentielVersion);
+        Routage routage = manager.getById(routageId);
+        return Response.ok(new RoutageDetailsResponse(routage)).build();
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pagesize, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            List<Routage> data = manager.findWithPagination(criteriaFormRequest, Arrays.asList(), pageNumber, pagesize);
+            return Response.ok(allToDto(data)).build();
+        } catch (Exception ex) {
+            Logger.getLogger(RoutageRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response printAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            File file = manager.printAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(PaysRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response printOne(HttpHeaders headers, HttpServletRequest request, String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public Response exportExcelAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            File file = manager.exportExcelAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response exportExcelOne(HttpHeaders headers, HttpServletRequest request, String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public Response getPrintableColumns(HttpHeaders headers) {
+        List<CustomField> customFields = PrintableColumnExtractor.extract(RoutageReporting.class);
+        return Response.ok(mapStructMapper.customFieldListToCustomFieldDtoList(customFields)).build();
+    }
+
+    @Override
+    public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        return Response.ok(manager.findAll(criteriaFormRequest, Arrays.asList("routages"))).build();
+    }
+
+    @Override
+    public Response printOneRoutage(HttpHeaders headers, HttpServletRequest request, String codeTypeFichier, String versionReferentiel, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            RoutageId routageId = new RoutageId();
+            routageId.setTypeFichier(codeTypeFichier);
+            routageId.setReferentiel(versionReferentiel);
+            Routage entite = manager.getById(routageId);
+            userActionLogManager.log(headers, request, "Export pdf détail routage fichier : " + entite.getTypeFichier().getCode() + " (id=" + entite.getTypeFichier().getCode() + "-" + entite.getReferentiel().getVersion() + ")",
+                    utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportCustumOneCriterion(codeTypeFichier, versionReferentiel));
+            File file = manager.printOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(ExtensionFichierRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response exportExcelOneRoutage(HttpHeaders headers, HttpServletRequest request, String codeTypeFichier, String versionReferentiel, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            RoutageId routageId = new RoutageId();
+            routageId.setTypeFichier(codeTypeFichier);
+            routageId.setReferentiel(versionReferentiel);
+            Routage entite = manager.getById(routageId);
+            userActionLogManager.log(headers, request, "Export excel détail routage fichier : " + entite.getTypeFichier().getCode() + " (id=" + entite.getTypeFichier().getCode() + "-" + entite.getReferentiel().getVersion() + ")",
+                    utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportCustumOneCriterion(codeTypeFichier, versionReferentiel));
+            File file = manager.exportExcelOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(ExtensionFichierRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/TypeFichierRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/TypeFichierRSImpl.java
new file mode 100644
index 0000000..c079cdd
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/referentiel/TypeFichierRSImpl.java
@@ -0,0 +1,179 @@
+package com.megatim.fdxconsultation.service.impl.referentiel;
+
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.TypeFichierManager;
+import com.megatim.fdxcommons.model.dtos.referentiel.TypeFichierDto;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.log.UserActionLogManager;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.reporting.model.referentiel.TypeFichierReporting;
+import com.megatim.fdxconsultation.service.ifaces.referentiel.TypeFichierRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.util.PrintableColumnExtractor;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.context.Dependent;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+@SecuredClass(module = AppCommonContext.MODULE_INFRASTRUCTURES, path = "Types de fichier", description = "Types de fichier")
+@Path("type-fichier")
+@Dependent
+public class TypeFichierRSImpl implements TypeFichierRS {
+
+    @Inject
+    private TypeFichierManager manager;
+
+    @Inject
+    private UserActionLogManager userActionLogManager;
+    
+    @Inject
+    private UserManager userManager;
+
+    @AuthenticatedUser
+    private static User utilisateurConnecte;
+
+    @Inject
+    MapStructMapper mapStructMapper;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper mapper;
+
+    public TypeFichierRSImpl() {
+        super();
+    }
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public TypeFichierDto mapToDto(TypeFichier entity) {
+        return commonMapper.typeFichierToTypeFichierDto(entity);
+    }
+
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(TypeFichier.class)).build();
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pagesize, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            List<TypeFichier> data = manager.findWithPagination(criteriaFormRequest, Arrays.asList(), pageNumber, pagesize);
+            return Response.ok(commonMapper.typeFichierListToTypeFichierDtoList(data)).build();
+        } catch (Exception ex) {
+            Logger.getLogger(TypeFichierRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        return Response.ok(commonMapper.typeFichierListToTypeFichierDtoList(manager.findAll(criteriaFormRequest, Arrays.asList("routages")))).build();
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
+            return manager.count(criterion);
+        } catch (Exception ex) {
+            Logger.getLogger(TypeFichierRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, String id) {
+        TypeFichier datum = manager.getById(id);
+        return Response.ok(mapToDto(datum)).build();
+    }
+
+    @Override
+    public Response printAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            File file = manager.printAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(TypeFichierRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response printOne(@Context HttpHeaders headers, @Context HttpServletRequest request, String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            TypeFichier entite = manager.getById(id);
+            userActionLogManager.log(headers, request, "Export pdf détail type fichier : "+entite.getCode()+" (id="+entite.getCode()+")",
+                utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.printOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            Logger.getLogger(TypeFichierRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response getPrintableColumns(HttpHeaders headers) {
+        List<CustomField> customFields = PrintableColumnExtractor.extract(TypeFichierReporting.class);
+        return Response.ok(mapStructMapper.customFieldListToCustomFieldDtoList(customFields)).build();
+    }
+    
+    @Override
+    public Response exportExcelAll(HttpHeaders headers, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+
+        try {
+            File file = manager.exportExcelAll(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+
+    @Override
+    public Response exportExcelOne(@Context HttpHeaders headers, @Context HttpServletRequest request, String id, ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        try {
+            TypeFichier entite = manager.getById(id);
+            userActionLogManager.log(headers, request, "Export excel détail type fichier : "+entite.getCode()+" (id="+entite.getCode()+")",
+                utilisateurConnecte.getUserName());
+            reportConfiguration.setSearchEntity(manager.getExportOneCriterion(id));
+            File file = manager.exportExcelOne(reportConfiguration, utilisateurConnecte);
+            return manager.downloadFile(file);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/remoteaction/RemoteConfigurationRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/remoteaction/RemoteConfigurationRSImpl.java
new file mode 100644
index 0000000..9f25a28
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/remoteaction/RemoteConfigurationRSImpl.java
@@ -0,0 +1,136 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.impl.remoteaction;
+
+import com.megatim.fdxcommons.model.dtos.remoteproduction.RemoteConfigurationDto;
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxconsultation.model.remoteaction.RemoteConfiguration;
+import com.megatim.fdxcommons.tools.exceptions.ApplicationForbidenException;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.log.UserActionLogManager;
+import com.megatim.fdxconsultation.core.ifaces.remoteaction.RemoteConfigurationManager;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.service.ifaces.remoteaction.RemoteConfigurationRS;
+import com.megatim.fdxconsultation.service.impl.api.token.ApiTokenRSImpl;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+//@SecuredClass(module = AppCommonContext.MODULE_ADMINISTRATION, path = AppCommonContext.PATH_API_TOKEN, description = AppCommonContext.PATH_API_TOKEN)
+@Path("remoteconfiguration-management")
+public class RemoteConfigurationRSImpl implements RemoteConfigurationRS {
+
+    @Inject
+    private RemoteConfigurationManager manager;
+
+    @Inject
+    private UserActionLogManager userActionLogManager;
+
+    @Inject
+    private UserManager userManager;
+
+    @AuthenticatedUser
+    private User utilisateurConnecte;
+
+    @Inject
+    private MapStructMapper mapStructMapper;
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public RemoteConfigurationDto mapToDto(RemoteConfiguration entity) {
+        return mapStructMapper.remoteConfigurationToRemoteConfigurationDto(entity);
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, String id) {
+        RemoteConfiguration config = manager.find(manager.getEntityIdName(), id);
+        return Response.ok(mapToDto(config)).build();
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pageSize, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            List<RemoteConfiguration> data = manager.findWithPagination(criteriaFormRequest.getCriteria(),
+                    Arrays.asList(), Arrays.asList(new OrderByDefinition(manager.getEntityIdName(), OrderByType.DESC)), pageNumber, pageSize);
+            return Response.ok(mapStructMapper.remoteConfigurationListToRemoteConfigurationDtoList(data)).build();
+        } catch (Exception ex) {
+            Logger.getLogger(ApiTokenRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            return manager.count(criteriaFormRequest.getCriteria());
+        } catch (Exception ex) {
+            Logger.getLogger(ApiTokenRSImpl.class.getName()).log(Level.SEVERE, null, ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(RemoteConfiguration.class)).build();
+    }
+
+    @Override
+    public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            return Response.ok(manager.findAll(criteriaFormRequest.getCriteria(),
+                    Arrays.asList(), Arrays.asList(new OrderByDefinition(manager.getEntityIdName(), OrderByType.DESC)))).build();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response save(HttpHeaders headers, RemoteConfiguration entity) {
+        stopIfUrlNotValid(entity.getUrl());
+        return Response.ok(manager.saveAndSend(entity, utilisateurConnecte)).build();
+    }
+
+    @Override
+    public Response update(HttpHeaders headers, String id, RemoteConfiguration entity) {
+        stopIfUrlNotValid(entity.getUrl());
+        return Response.ok(manager.updateAndSend(id, entity, utilisateurConnecte)).build();
+    }
+
+    @Override
+    public Response delete(HttpHeaders headers, String id) {
+        manager.deleteAndSend(id, utilisateurConnecte);
+        return Response.ok().build();
+    }
+
+    private void stopIfUrlNotValid(String url) {
+        try {
+            new URL(url).toURI();
+        } catch (Exception e) {
+            throw new ApplicationForbidenException("URL not valide");
+        }
+
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/DasboardTypeFichierSearchRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/DasboardTypeFichierSearchRSImpl.java
new file mode 100644
index 0000000..102ab89
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/DasboardTypeFichierSearchRSImpl.java
@@ -0,0 +1,59 @@
+package com.megatim.fdxconsultation.service.impl.searchs;
+
+import com.megatim.fdxcommons.model.dtos.referentiel.TypeFichierSlimDto;
+import com.megatim.fdxcommons.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.searchs.DashboardFichierManager;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierSearch;
+import com.megatim.fdxconsultation.service.ifaces.searchs.DasboardTypeFichierSearchRS;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@SecuredClass(module = "", path = "", description = "")
+@Path("dashboard-fichier-search")
+public class DasboardTypeFichierSearchRSImpl implements DasboardTypeFichierSearchRS {
+
+    @Inject
+    private DashboardFichierManager manager;
+
+    @Inject
+    private UserManager userManager;
+
+    @Inject
+    private MapStructMapper mapper;
+
+    private String username;
+
+    public DasboardTypeFichierSearchRSImpl() {
+        super();
+    }
+    
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        this.username = username;
+    }
+
+    @Override
+    public Response formDataWithPagination(HttpHeaders headers, String referentiel, Integer pageNumber, Integer pagesize, TypeFichierSearch searchEntity) {
+        List<TypeFichierSlimDto> dtos = manager.tableauBordTypeFichiers(username, referentiel, searchEntity, pageNumber, pagesize)
+                .stream()
+                .map(t -> mapper.typeFichierToTypeFichierSlimDto(t))
+                .collect(Collectors.toList());
+        return Response.ok(dtos).build();
+    }
+
+    @Override
+    public Long countFormData(HttpHeaders headers, String referentiel, TypeFichierSearch searchEntity) {
+        return manager.countTableauBordTypeFichiers(username, referentiel, searchEntity);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/GlobalDasboardTypeFichierSearchRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/GlobalDasboardTypeFichierSearchRSImpl.java
new file mode 100644
index 0000000..158f47b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/GlobalDasboardTypeFichierSearchRSImpl.java
@@ -0,0 +1,42 @@
+package com.megatim.fdxconsultation.service.impl.searchs;
+
+import com.megatim.fdxcommons.model.dtos.referentiel.TypeFichierSlimDto;
+import com.megatim.fdxcommons.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.core.ifaces.searchs.DashboardFichierManager;
+import com.megatim.fdxconsultation.core.ifaces.searchs.UserTypeFichierManager;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierSearch;
+import com.megatim.fdxconsultation.service.ifaces.searchs.DasboardTypeFichierSearchRS;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Path("dashboard-global-fichier-search")
+public class GlobalDasboardTypeFichierSearchRSImpl implements DasboardTypeFichierSearchRS {
+
+    @Inject
+    private DashboardFichierManager manager;
+
+    @Inject
+    private MapStructMapper mapper;
+
+    @Override
+    public Response formDataWithPagination(HttpHeaders headers, String referentiel, Integer pageNumber, Integer pagesize, TypeFichierSearch searchEntity) {
+        List<TypeFichierSlimDto> dtos = manager.tableauBordGlobalTypeFichiers(referentiel, searchEntity, pageNumber, pagesize)
+                .stream()
+                .map(t -> mapper.typeFichierToTypeFichierSlimDto(t))
+                .collect(Collectors.toList());
+        return Response.ok(dtos).build();
+    }
+
+    @Override
+    public Long countFormData(HttpHeaders headers, String referentiel, TypeFichierSearch searchEntity) {
+        return manager.countTableauBordGlobalTypeFichiers(referentiel, searchEntity);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/ParticipantSearchRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/ParticipantSearchRSImpl.java
new file mode 100644
index 0000000..7aa7ea7
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/ParticipantSearchRSImpl.java
@@ -0,0 +1,52 @@
+package com.megatim.fdxconsultation.service.impl.searchs;
+
+import com.megatim.fdxcommons.model.dtos.referentiel.ParticipantSlimDto;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.ParticipantManager;
+import com.megatim.fdxconsultation.model.searchentities.ParticipantSearch;
+import com.megatim.fdxconsultation.service.ifaces.searchs.ParticipantSearchRS;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Path("participant-search")
+public class ParticipantSearchRSImpl implements ParticipantSearchRS {
+
+    @Inject
+    private ParticipantManager manager;
+
+    @Inject
+    private MapStructMapper mapper;
+
+    @Override
+    public Response formData(HttpHeaders headers) {
+        List<ParticipantSlimDto> dtos = manager
+                .findAll(null)
+                .stream()
+                .map(p -> mapper.partcipantToPartcipantSlimDto(p))
+                .collect(Collectors.toList());
+        return Response.ok(dtos).build();
+    }
+
+    @Override
+    public Response formDataWithPagination(HttpHeaders headers, Integer pageNumber, Integer pagesize, ParticipantSearch searchEntity) {
+        List<ParticipantSlimDto> dtos = manager
+                .findWithPagination(pageNumber, pagesize, searchEntity)
+                .stream()
+                .map(p -> mapper.partcipantToPartcipantSlimDto(p))
+                .collect(Collectors.toList());
+        return Response.ok(dtos).build();
+    }
+
+    @Override
+    public Long countFormData(HttpHeaders headers, ParticipantSearch searchEntity) {
+        return manager.count(searchEntity);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/ReferentielSearchRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/ReferentielSearchRSImpl.java
new file mode 100644
index 0000000..b77da81
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/ReferentielSearchRSImpl.java
@@ -0,0 +1,50 @@
+package com.megatim.fdxconsultation.service.impl.searchs;
+
+import com.megatim.fdxcommons.model.dtos.referentiel.ReferentielSlimDto;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.ReferentielManager;
+import com.megatim.fdxconsultation.model.referentiel.dtos.ReferentielSlimResponse;
+import com.megatim.fdxconsultation.model.searchentities.ReferentielSearch;
+import com.megatim.fdxconsultation.service.ifaces.searchs.ReferentielSearchRS;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Path("referentiel-search")
+public class ReferentielSearchRSImpl implements ReferentielSearchRS {
+
+    @Inject
+    private ReferentielManager manager;
+
+    @Override
+    public Response formData(HttpHeaders headers) {
+        List<ReferentielSlimResponse> dtos = manager
+                .all()
+                .stream()
+                .map(r -> new ReferentielSlimResponse(r))
+                .collect(Collectors.toList());
+        return Response.ok(dtos).build();
+    }
+
+    @Override
+    public Response formDataWithPagination(HttpHeaders headers, Integer pageNumber, Integer pagesize, ReferentielSearch searchEntity) {
+        List<ReferentielSlimResponse> dtos = manager
+                .findWithPagination(pageNumber, pagesize, searchEntity)
+                .stream()
+                .map(r -> new ReferentielSlimResponse(r))
+                .collect(Collectors.toList());
+        return Response.ok(dtos).build();
+    }
+
+    @Override
+    public Long countFormData(HttpHeaders headers, ReferentielSearch searchEntity) {
+        return manager.count(searchEntity);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/RoleSearchRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/RoleSearchRSImpl.java
new file mode 100644
index 0000000..34acdc6
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/RoleSearchRSImpl.java
@@ -0,0 +1,50 @@
+package com.megatim.fdxconsultation.service.impl.searchs;
+
+import com.megatim.fdxconsultation.core.ifaces.administration.RoleManager;
+import com.megatim.fdxconsultation.model.dto.RoleDto;
+import com.megatim.fdxconsultation.model.dto.RoleSlimDto;
+import com.megatim.fdxconsultation.model.searchentities.RoleSearch;
+import com.megatim.fdxconsultation.service.ifaces.searchs.RoleSearchRS;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Path("role-search")
+public class RoleSearchRSImpl implements RoleSearchRS {
+
+    @Inject
+    private RoleManager manager;
+
+    @Inject
+    private com.megatim.fdxconsultation.model.mappers.MapStructMapper mapper;
+
+    @Override
+    public Response formData(HttpHeaders headers) {
+        List<RoleDto> dtos = manager.findAll()
+                .stream()
+                .map(t -> mapper.roleToRoleDto(t))
+                .collect(Collectors.toList());
+        return Response.ok(dtos).build();
+    }
+
+    @Override
+    public Response formDataWithPagination(HttpHeaders headers, Integer pageNumber, Integer pagesize, RoleSearch searchEntity) {
+        List<RoleDto> data = manager.findWithPagination(pageNumber, pagesize, searchEntity)
+                .stream()
+                .map(t -> mapper.roleToRoleDto(t))
+                .collect(Collectors.toList());
+        return Response.ok(data).build();
+    }
+
+    @Override
+    public Long countFormData(HttpHeaders headers, RoleSearch searchEntity) {
+        return manager.count(searchEntity);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/TableauBordGlobalSearchRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/TableauBordGlobalSearchRSImpl.java
new file mode 100644
index 0000000..3f85e88
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/TableauBordGlobalSearchRSImpl.java
@@ -0,0 +1,48 @@
+package com.megatim.fdxconsultation.service.impl.searchs;
+
+import com.megatim.fdxconsultation.core.ifaces.stats.TableauBordGlobalSearchManager;
+import com.megatim.fdxconsultation.core.impl.stats.ConvertedTableauBordResponse;
+import com.megatim.fdxconsultation.model.searchentities.TableauBordGlobalSearch;
+import com.megatim.fdxconsultation.model.stats.dto.TableauBordFlatResponse;
+import com.megatim.fdxconsultation.service.ifaces.searchs.GlobalDasboardSearchRS;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Path("tableau-bord-global-search")
+public class TableauBordGlobalSearchRSImpl implements GlobalDasboardSearchRS {
+
+    @Inject
+    private TableauBordGlobalSearchManager manager;
+
+    @Override
+    public Response formData(HttpHeaders headers) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public Response formDataWithPagination(HttpHeaders headers, Integer pageNumber, Integer pagesize, TableauBordGlobalSearch searchEntity) {
+
+        List<TableauBordFlatResponse> response = manager
+                .findWithPagination(pageNumber, pagesize, searchEntity)
+                .stream()
+                .map(tableauBord -> new ConvertedTableauBordResponse(tableauBord).tableauBordFlatResponse())
+                .collect(Collectors.toList());
+
+        return Response.ok(response).build();
+    }
+
+    @Override
+    public Long countFormData(HttpHeaders headers, TableauBordGlobalSearch searchEntity) {
+        return manager.count(searchEntity);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/TableauBordSearchRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/TableauBordSearchRSImpl.java
new file mode 100644
index 0000000..7064787
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/TableauBordSearchRSImpl.java
@@ -0,0 +1,57 @@
+package com.megatim.fdxconsultation.service.impl.searchs;
+
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.core.ifaces.stats.TableauBordUserSpecificSearchManager;
+import com.megatim.fdxconsultation.core.impl.stats.ConvertedTableauBordResponse;
+import com.megatim.fdxconsultation.model.searchentities.TableauBordSpecificSearch;
+import com.megatim.fdxconsultation.model.stats.dto.TableauBordFlatResponse;
+import com.megatim.fdxconsultation.service.ifaces.searchs.TableauBordSearchRS;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@SecuredClass(module = "", path = "", description = "")
+@Path("tableau-bord-search")
+public class TableauBordSearchRSImpl implements TableauBordSearchRS {
+
+    @Inject
+    private TableauBordUserSpecificSearchManager manager;
+
+    private String username;
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        this.username = username;
+    }
+
+    @Override
+    public Response formData(HttpHeaders headers) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public Response formDataWithPagination(HttpHeaders headers, Integer pageNumber, Integer pagesize, TableauBordSpecificSearch searchEntity) {
+        searchEntity.setUserName(username);
+        List<TableauBordFlatResponse> response
+                = manager.findWithPagination(pageNumber, pagesize, searchEntity)
+                        .stream()
+                        .map(tableauBord -> new ConvertedTableauBordResponse(tableauBord).tableauBordFlatResponse())
+                        .collect(Collectors.toList());
+        return Response.ok(response).build();
+    }
+
+    @Override
+    public Long countFormData(HttpHeaders headers, TableauBordSpecificSearch searchEntity) {
+        searchEntity.setUserName(username);
+        return manager.count(searchEntity);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/TypeFichierReferentielForUserSearchRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/TypeFichierReferentielForUserSearchRSImpl.java
new file mode 100644
index 0000000..715ba16
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/TypeFichierReferentielForUserSearchRSImpl.java
@@ -0,0 +1,51 @@
+package com.megatim.fdxconsultation.service.impl.searchs;
+
+import com.megatim.fdxcommons.model.dtos.referentiel.TypeFichierSlimDto;
+import com.megatim.fdxcommons.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.core.ifaces.searchs.TypeFichierReferentielManager;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierReferentielSearch;
+import com.megatim.fdxconsultation.service.ifaces.searchs.TypeFichierReferentielSearchRS;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Path("type-fichier-referentiel-for-user-search")
+@SecuredClass(module = "", path = "", description = "")
+public class TypeFichierReferentielForUserSearchRSImpl implements TypeFichierReferentielSearchRS {
+
+    @Inject
+    private TypeFichierReferentielManager manager;
+
+    @Inject
+    private MapStructMapper mapper;
+
+    private String username;
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        this.username = username;
+    }
+
+    @Override
+    public Response formDataWithPagination(HttpHeaders headers, Integer pageNumber, Integer pagesize, TypeFichierReferentielSearch searchEntity) {
+        List<TypeFichierSlimDto> dtos = manager.all(username, pageNumber, pagesize, searchEntity)
+                .stream()
+                .map(t -> mapper.typeFichierToTypeFichierSlimDto(t))
+                .collect(Collectors.toList());
+        return Response.ok(dtos).build();
+    }
+
+    @Override
+    public Long countFormData(HttpHeaders headers, TypeFichierReferentielSearch searchEntity) {
+        return manager.count(username, searchEntity);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/TypeFichierReferentielSearchRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/TypeFichierReferentielSearchRSImpl.java
new file mode 100644
index 0000000..f2351d3
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/TypeFichierReferentielSearchRSImpl.java
@@ -0,0 +1,41 @@
+package com.megatim.fdxconsultation.service.impl.searchs;
+
+import com.megatim.fdxcommons.model.dtos.referentiel.TypeFichierSlimDto;
+import com.megatim.fdxcommons.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.core.ifaces.searchs.TypeFichierReferentielManager;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierReferentielSearch;
+import com.megatim.fdxconsultation.service.ifaces.searchs.TypeFichierReferentielSearchRS;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Path("type-fichier-referentiel-search")
+public class TypeFichierReferentielSearchRSImpl implements TypeFichierReferentielSearchRS {
+
+    @Inject
+    private TypeFichierReferentielManager manager;
+
+    @Inject
+    private MapStructMapper mapper;
+
+    @Override
+    public Response formDataWithPagination(HttpHeaders headers, Integer pageNumber, Integer pagesize, TypeFichierReferentielSearch searchEntity) {
+        List<TypeFichierSlimDto> dtos = manager.all(pageNumber, pagesize, searchEntity)
+                .stream()
+                .map(t -> mapper.typeFichierToTypeFichierSlimDto(t))
+                .collect(Collectors.toList());
+        return Response.ok(dtos).build();
+    }
+
+    @Override
+    public Long countFormData(HttpHeaders headers, TypeFichierReferentielSearch searchEntity) {
+        return manager.count(searchEntity);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/TypeFichierSearchRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/TypeFichierSearchRSImpl.java
new file mode 100644
index 0000000..13726fd
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/TypeFichierSearchRSImpl.java
@@ -0,0 +1,50 @@
+package com.megatim.fdxconsultation.service.impl.searchs;
+
+import com.megatim.fdxcommons.model.dtos.referentiel.TypeFichierSlimDto;
+import com.megatim.fdxconsultation.core.ifaces.referentiel.TypeFichierManager;
+import com.megatim.fdxcommons.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierSearch;
+import com.megatim.fdxconsultation.service.ifaces.searchs.TypeFichierSearchRS;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Path("type-fichier-search")
+public class TypeFichierSearchRSImpl implements TypeFichierSearchRS {
+
+    @Inject
+    private TypeFichierManager manager;
+
+    @Inject
+    private MapStructMapper mapper;
+
+    @Override
+    public Response formData(HttpHeaders headers) {
+        List<TypeFichierSlimDto> dtos = manager.findAll(null)
+                .stream()
+                .map(t -> mapper.typeFichierToTypeFichierSlimDto(t))
+                .collect(Collectors.toList());
+        return Response.ok(dtos).build();
+    }
+
+    @Override
+    public Response formDataWithPagination(HttpHeaders headers, Integer pageNumber, Integer pagesize, TypeFichierSearch searchEntity) {
+        List<TypeFichierSlimDto> data = manager.findWithPagination(pageNumber, pagesize, searchEntity)
+                .stream()
+                .map(t -> mapper.typeFichierToTypeFichierSlimDto(t))
+                .collect(Collectors.toList());
+        return Response.ok(data).build();
+    }
+
+    @Override
+    public Long countFormData(HttpHeaders headers, TypeFichierSearch searchEntity) {
+        return manager.count(searchEntity);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/UserParticipantSearchRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/UserParticipantSearchRSImpl.java
new file mode 100644
index 0000000..c1609ce
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/UserParticipantSearchRSImpl.java
@@ -0,0 +1,79 @@
+package com.megatim.fdxconsultation.service.impl.searchs;
+
+import com.megatim.fdxcommons.model.dtos.referentiel.ParticipantSlimDto;
+import com.megatim.fdxcommons.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.searchs.UserParticipantManager;
+import com.megatim.fdxconsultation.model.searchentities.ParticipantSearch;
+import com.megatim.fdxconsultation.service.ifaces.searchs.UserParticipantSearchRS;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@SecuredClass(module = "", path = "", description = "")
+@Path("user-participant-search")
+public class UserParticipantSearchRSImpl implements UserParticipantSearchRS {
+
+    @Inject
+    private UserParticipantManager manager;
+
+    @Inject
+    private MapStructMapper mapper;
+
+    @Inject
+    private UserManager userManager;
+
+    private String username;
+
+    public UserParticipantSearchRSImpl() {
+        super();
+    }
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        this.username = username;
+    }
+
+    @Override
+    public Response formData(HttpHeaders headers) {
+        List<ParticipantSlimDto> dtos = manager.findUserParticipants(this.username)
+                .stream().
+                map(t -> mapper.participantToParticipantSlimDto(t))
+                .collect(Collectors.toList());
+        return Response.ok(dtos).build();
+    }
+
+    @Override
+    public Response formDataWithPagination(HttpHeaders headers, Integer pageNumber, Integer pagesize, ParticipantSearch searchEntity) {
+        List<ParticipantSlimDto> dtos = manager.findUserParticipantsWithPagination(this.username, searchEntity, pageNumber, pagesize)
+                .stream().
+                map(t -> mapper.participantToParticipantSlimDto(t))
+                .collect(Collectors.toList());
+        return Response.ok(dtos).build();
+    }
+
+    @Override
+    public Long countFormData(HttpHeaders headers, ParticipantSearch searchEntity) {
+        Long val = manager.countUserParticipants(this.username, searchEntity);
+        System.out.println("countFormData----------------------------------"+this.username+"------------------------------"+val);
+        return val;
+    }
+
+    @Override
+    public Response formDataFindAll(HttpHeaders headers, ParticipantSearch searchEntity) {
+        List<ParticipantSlimDto> dtos = manager.findAllUserParticipants(this.username, searchEntity)
+                .stream().
+                map(t -> mapper.participantToParticipantSlimDto(t))
+                .collect(Collectors.toList());
+        return Response.ok(dtos).build();
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/UserTypeFichierSearchRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/UserTypeFichierSearchRSImpl.java
new file mode 100644
index 0000000..9d99b15
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/UserTypeFichierSearchRSImpl.java
@@ -0,0 +1,50 @@
+package com.megatim.fdxconsultation.service.impl.searchs;
+
+import com.megatim.fdxcommons.model.dtos.referentiel.TypeFichierSlimDto;
+import com.megatim.fdxcommons.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.core.ifaces.searchs.UserTypeFichierManager;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierSearch;
+import com.megatim.fdxconsultation.service.ifaces.searchs.UserTypeFichierSearchRS;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Path("user-type-fichier-search")
+public class UserTypeFichierSearchRSImpl implements UserTypeFichierSearchRS {
+
+    @Inject
+    private UserTypeFichierManager manager;
+
+    @Inject
+    private MapStructMapper mapper;
+
+    @Override
+    public Response formData(HttpHeaders headers, String userName) {
+        List<TypeFichierSlimDto> dtos = manager.findUserTypeFichiers(userName)
+                .stream().
+                map(t -> mapper.typeFichierToTypeFichierSlimDto(t))
+                .collect(Collectors.toList());
+        return Response.ok(dtos).build();
+    }
+
+    @Override
+    public Response formDataWithPagination(HttpHeaders headers, String userName, Integer pageNumber, Integer pagesize, TypeFichierSearch searchEntity) {
+        List<TypeFichierSlimDto> dtos = manager.findUserTypeFichiersWithPagination(userName, searchEntity, pageNumber, pagesize)
+                .stream().
+                map(t -> mapper.typeFichierToTypeFichierSlimDto(t))
+                .collect(Collectors.toList());
+        return Response.ok(dtos).build();
+    }
+
+    @Override
+    public Long countFormData(HttpHeaders headers, String userName, TypeFichierSearch searchEntity) {
+        return manager.countUserTypeFichiers(userName, searchEntity);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/UserTypeFichierWithReferentielSearchRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/UserTypeFichierWithReferentielSearchRSImpl.java
new file mode 100644
index 0000000..29df4f5
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/searchs/UserTypeFichierWithReferentielSearchRSImpl.java
@@ -0,0 +1,55 @@
+package com.megatim.fdxconsultation.service.impl.searchs;
+
+import com.megatim.fdxcommons.model.dtos.referentiel.TypeFichierSlimDto;
+import com.megatim.fdxcommons.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.core.ifaces.searchs.UserTypeFichierManager;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierSearch;
+import com.megatim.fdxconsultation.service.ifaces.searchs.UserTypeFichierWithReferentielSearchRS;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@SecuredClass(module = "", path = "", description = "")
+@Path("user-type-fichier-referentiel-search")
+public class UserTypeFichierWithReferentielSearchRSImpl implements UserTypeFichierWithReferentielSearchRS {
+
+    @Inject
+    private UserTypeFichierManager manager;
+
+    @Inject
+    private MapStructMapper mapper;
+
+    private String username;
+
+    public UserTypeFichierWithReferentielSearchRSImpl() {
+        super();
+    }
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        this.username = username;
+    }
+
+    @Override
+    public Response formDataWithPagination(HttpHeaders headers, String referentiel, Integer pageNumber, Integer pagesize, TypeFichierSearch searchEntity) {
+        List<TypeFichierSlimDto> dtos = manager.findUserTypeFichiersInReferentielWithPagination(username, referentiel, searchEntity, pageNumber, pagesize)
+                .stream().
+                map(t -> mapper.typeFichierToTypeFichierSlimDto(t))
+                .collect(Collectors.toList());
+        return Response.ok(dtos).build();
+    }
+
+    @Override
+    public Long countFormData(HttpHeaders headers, String referentiel, TypeFichierSearch searchEntity) {
+        return manager.countUserTypeFichiersInReferentiel(username, referentiel, searchEntity);
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/settings/DisplayOptionsRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/settings/DisplayOptionsRSImpl.java
new file mode 100644
index 0000000..7c8edd8
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/settings/DisplayOptionsRSImpl.java
@@ -0,0 +1,38 @@
+package com.megatim.fdxconsultation.service.impl.settings;
+
+import com.megatim.fdxconsultation.core.ifaces.settings.DisplayOptionsManager;
+import com.megatim.fdxconsultation.model.settings.DisplayOptions;
+import com.megatim.fdxconsultation.service.ifaces.settings.DisplayOptionsRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.mgt.rs.security.core.common.SecuredClass;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Path("display-options")
+@SecuredClass(module = AppCommonContext.MODULE_ADMINISTRATION, path = "Options affichage", description = "Fdx serveur")
+public class DisplayOptionsRSImpl implements DisplayOptionsRS {
+
+    @Inject
+    private DisplayOptionsManager manager;
+
+    @Override
+    public Response current(HttpHeaders headers) {
+        return Response
+                .ok(manager.current())
+                .build();
+    }
+
+    @Override
+    public Response edit(HttpHeaders headers, DisplayOptions displayOptions) {
+        return Response
+                .ok(manager.edit(displayOptions))
+                .build();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/settings/SettingRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/settings/SettingRSImpl.java
new file mode 100644
index 0000000..2b3556c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/settings/SettingRSImpl.java
@@ -0,0 +1,28 @@
+package com.megatim.fdxconsultation.service.impl.settings;
+
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxconsultation.core.ifaces.settings.SettingsManager;
+import com.megatim.fdxconsultation.model.referentiel.dtos.ReferentielSlimResponse;
+import com.megatim.fdxconsultation.service.ifaces.settings.SettingRS;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Path("settings")
+public class SettingRSImpl implements SettingRS {
+
+    @Inject
+    private SettingsManager settingManager;
+
+    @Override
+    public Response currentReferentiel(HttpHeaders headers) {
+        Referentiel referentiel = settingManager.currentReferentiel();
+        return Response.ok(referentiel != null ? new ReferentielSlimResponse(referentiel) : null).build();
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/AdministrationCronBean.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/AdministrationCronBean.java
new file mode 100644
index 0000000..6729b5d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/AdministrationCronBean.java
@@ -0,0 +1,157 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.impl.sockets;
+
+/**
+ *
+ * @author Lenovo P53
+ */
+import com.bekosoftware.genericdaolayer.dao.tools.RestrictionsContainer;
+import com.megatim.fdxcommons.model.enumeration.EtatOperation;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxconsultation.core.ifaces.administration.RoleManager;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.AdministrationNumberDto;
+import com.megatim.fdxconsultation.model.dto.InformationGeneraleDto;
+import com.megatim.fdxconsultation.model.dto.UserDto;
+import com.megatim.fdxconsultation.model.message.systeme.ApplicationData;
+import com.megatim.fdxconsultation.model.message.systeme.UserSesionApplication;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import javax.annotation.PostConstruct;
+import javax.ejb.LocalBean;
+import javax.ejb.Schedule;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+import javax.inject.Inject;
+import javax.websocket.Session;
+
+@Singleton
+@Startup
+@LocalBean
+public class AdministrationCronBean {
+
+    @Inject
+    private UserManager userManager;
+
+    @Inject
+    private RoleManager roleManager;
+
+    @PostConstruct
+    public void init() {
+
+    }
+
+//    @Schedule(second = "*/1", minute = "*", hour = "*", persistent = false)
+    public void refreshDatas() {
+
+        //Variables
+        ApplicationData message = new ApplicationData();
+        InformationGeneraleDto informationGeneraleDto = null;
+        AdministrationNumberDto administrationNumberDto = null;
+        Iterator<String> iterateur = null;
+        String idSession = null;
+        Session session = null;
+        User utilisateur = null;
+        User utilisateurBD = null;
+
+        try {
+
+            //On crée une instance de l'iterateur
+            iterateur = UserSesionApplication.getInstance().getUsers().keySet().iterator();
+
+            //On construit l'objet AdministrationNumberDto
+            administrationNumberDto = new AdministrationNumberDto();
+            administrationNumberDto.setUtilisateursEnAttenteValidation(countUsers(EtatOperation.ATTENTE_VALIDATION));
+            administrationNumberDto.setRolesEnAttenteValidation(countRoles(EtatOperation.ATTENTE_VALIDATION));
+
+            //On construit l'objet InformationGeneraleDto
+            informationGeneraleDto = new InformationGeneraleDto();
+
+            //On parcourt la liste des sessions
+            while (iterateur.hasNext()) {
+
+                //On recupère l'id de la session
+                idSession = iterateur.next();
+
+                //On filtre par type
+                if (UserSesionApplication.getInstance().getUsers() != null && UserSesionApplication.getInstance().getUsers().get(idSession) != null
+                        && (UserSesionApplication.getInstance().getUsers().get(idSession).getType() != null
+                        && UserSesionApplication.getInstance().getUsers().get(idSession).getType().equalsIgnoreCase(AppCommonContext.CODE_WEB_SOCKET_PATH_APPLICATION_MESSAGE))) {
+
+                    //On recupère la session
+                    session = UserSesionApplication.getInstance().getUsers().get(idSession).getSession();
+
+                    //On recupère l'utilisateur associé à cette session
+                    utilisateur = UserSesionApplication.getInstance().getUsers().get(idSession).getUtilisateur();
+                    utilisateurBD = userManager.findById(utilisateur.getId());
+
+                    //Si non null
+                    if (utilisateurBD != null) {
+
+                        //On set la clé de la session
+                        informationGeneraleDto.setSessionKeyUser(utilisateurBD.getCleSession());
+
+                    }
+
+                    //On hydrate le message
+                    message.setInformationGeneraleDto(informationGeneraleDto);
+                    message.setAdministrationNumberDto(administrationNumberDto);
+                    message.setUtlisateursConnectes(obtenirListeUtilisateursConnectes());
+
+                    //On envoie le message
+                    UserSesionApplication.getInstance().send(session, message);
+
+                }
+
+            }
+
+        } catch (Exception ex) {
+
+            //On affiche les erreurs
+            ex.printStackTrace();
+
+        }
+
+    }
+
+    /**
+     * Methode permettant de recuperer la liste des utilisateurs connectés
+     *
+     * @return
+     */
+    private List<UserDto> obtenirListeUtilisateursConnectes() {
+        List<UserDto> liste = new ArrayList<UserDto>();
+        String idSession = null;
+        Iterator<String> iterateur = null;
+        UserDto userDto = null;
+        iterateur = UserSesionApplication.getInstance().getUsers().keySet().iterator();
+        while (iterateur.hasNext()) {
+            idSession = iterateur.next();
+            userDto = new UserDto();
+            userDto.setUserName(UserSesionApplication.getInstance().getUsers().get(idSession).getUtilisateur().getUserName());
+            liste.add(userDto);
+        }
+        return liste;
+    }
+
+    private long countUsers(EtatOperation etatOperation) {
+        RestrictionsContainer requeteur = RestrictionsContainer.newInstance();
+        requeteur.addEq("typeOperation", TypeOperation.AJOUTER);
+        requeteur.addEq("etatOperation", etatOperation);
+        return userManager.count(requeteur.getPredicats());
+    }
+
+    private long countRoles(EtatOperation etatOperation) {
+        RestrictionsContainer requeteur = RestrictionsContainer.newInstance();
+        requeteur.addEq("typeOperation", TypeOperation.AJOUTER);
+        requeteur.addEq("etatOperation", etatOperation);
+        return roleManager.count(requeteur.getPredicats());
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/ApplicationEndpoint.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/ApplicationEndpoint.java
new file mode 100644
index 0000000..79456ee
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/ApplicationEndpoint.java
@@ -0,0 +1,84 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.impl.sockets;
+
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.message.systeme.MessageDecoder;
+import com.megatim.fdxconsultation.model.message.systeme.MessageEncoder;
+import com.megatim.fdxconsultation.model.message.systeme.ApplicationData;
+import com.megatim.fdxconsultation.model.message.systeme.UserSesionApplication;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import java.io.IOException;
+import javax.inject.Inject;
+import javax.websocket.EncodeException;
+import javax.websocket.OnClose;
+import javax.websocket.OnError;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+
+/**
+ *
+ * @author 
+ */
+@ServerEndpoint(
+        value = "/application/{id}",
+        decoders = MessageDecoder.class,
+        encoders = MessageEncoder.class)
+public class ApplicationEndpoint {
+    
+    private final UserSesionApplication userSesion = UserSesionApplication.getInstance();
+
+    @Inject
+    private UserManager userManager;
+    
+    @OnOpen
+    public void onOpen(
+            Session session,
+            @PathParam("id") Long id) throws IOException, EncodeException {
+        
+        //Variables
+        User utilisateur = null;
+        
+        //Si id renseigné
+        if(id != null){
+            utilisateur = userManager.findById(id);
+        }
+        
+        //Si non null
+        if(utilisateur != null){
+            
+            //On conserve la session et l'utilisateur associé
+            userSesion.addSession(utilisateur, session, AppCommonContext.CODE_WEB_SOCKET_PATH_APPLICATION_MESSAGE);
+            
+        }
+        
+    }
+
+    @OnMessage
+    public void onMessage(Session session, ApplicationData message)
+            throws IOException, EncodeException {
+    }
+
+    @OnClose
+    public void onClose(Session session) throws IOException, EncodeException {
+        
+        //On supprime la session
+        userSesion.removeSession(session);
+        
+    }
+
+    @OnError
+    public void onError(Session session, Throwable throwable) {
+        
+        //On affiche le message d'erreur
+        throwable.printStackTrace();
+        
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/ConnexionStatutEndpoint.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/ConnexionStatutEndpoint.java
new file mode 100644
index 0000000..42738c2
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/ConnexionStatutEndpoint.java
@@ -0,0 +1,41 @@
+package com.megatim.fdxconsultation.service.impl.sockets;
+
+import com.megatim.fdxconsultation.service.impl.sockets.encoders.ConnexionStatutsDecoder;
+import com.megatim.fdxconsultation.service.impl.sockets.encoders.ConnexionStatutsEncoder;
+import com.megatim.fdxconsultation.service.impl.sockets.helpers.ConnexionStatutSessionHandler;
+import javax.inject.Inject;
+import javax.websocket.OnClose;
+import javax.websocket.OnError;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.ServerEndpoint;
+
+/**
+ *
+ * @author lenovo
+ */
+@ServerEndpoint(value = "/connexion-status",
+        encoders = {ConnexionStatutsEncoder.class},
+        decoders = {ConnexionStatutsDecoder.class}
+)
+public class ConnexionStatutEndpoint {
+
+    @Inject
+    private ConnexionStatutSessionHandler connexionStatutSessionHandler;
+
+    @OnOpen
+    public void onOpen(Session session) {
+        connexionStatutSessionHandler.addSession(session);
+    }
+
+    @OnClose
+    public void onClose(Session session) {
+        connexionStatutSessionHandler.removeSession(session);
+    }
+
+    @OnError
+    public void onError(Session session, Throwable throwable) {
+        connexionStatutSessionHandler.removeSession(session);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/DataProductionEndpoint.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/DataProductionEndpoint.java
new file mode 100644
index 0000000..7281337
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/DataProductionEndpoint.java
@@ -0,0 +1,41 @@
+package com.megatim.fdxconsultation.service.impl.sockets;
+
+import com.megatim.fdxconsultation.service.impl.sockets.encoders.DataProductionDecoder;
+import com.megatim.fdxconsultation.service.impl.sockets.encoders.DataProductionEncoder;
+import com.megatim.fdxconsultation.core.impl.sockets.DataProductionSessionHandler;
+import javax.inject.Inject;
+import javax.websocket.OnClose;
+import javax.websocket.OnError;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.ServerEndpoint;
+
+/**
+ *
+ * @author lenovo
+ */
+@ServerEndpoint(value = "/data-production",
+        encoders = {DataProductionEncoder.class},
+        decoders = {DataProductionDecoder.class}
+)
+public class DataProductionEndpoint {
+
+    @Inject
+    private DataProductionSessionHandler dataProductionSessionHandler;
+
+    @OnOpen
+    public void onOpen(Session session) {
+        dataProductionSessionHandler.addSession(session);
+    }
+
+    @OnClose
+    public void onClose(Session session) {
+        dataProductionSessionHandler.removeSession(session);
+    }
+
+    @OnError
+    public void onError(Session session, Throwable throwable) {
+        dataProductionSessionHandler.removeSession(session);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/FichiersEndpoint.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/FichiersEndpoint.java
new file mode 100644
index 0000000..62fd8b1
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/FichiersEndpoint.java
@@ -0,0 +1,55 @@
+package com.megatim.fdxconsultation.service.impl.sockets;
+
+import com.megatim.fdxconsultation.core.ifaces.referentiel.TypeFichierManager;
+import com.megatim.fdxconsultation.service.impl.sockets.encoders.ParticipantToFichiersDecoder;
+import com.megatim.fdxconsultation.service.impl.sockets.encoders.ParticipantToFichiersEncoder;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.inject.Inject;
+import javax.websocket.EncodeException;
+import javax.websocket.OnClose;
+import javax.websocket.OnError;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+
+/**
+ *
+ * @author lenovo
+ */
+@ServerEndpoint(value = "/fichiers/{username}",
+        encoders = {ParticipantToFichiersEncoder.class},
+        decoders = {ParticipantToFichiersDecoder.class}
+)
+public class FichiersEndpoint {
+
+    @Inject
+    private TypeFichierManager manager;
+
+    @OnOpen
+    public void onOpen(Session session, @PathParam("username") String username) {
+        try {
+            session.getBasicRemote().sendObject(manager.particpantToFichierDto(username));
+        } catch (IOException | EncodeException ex) {
+            Logger.getLogger(FichiersEndpoint.class.getName()).log(Level.SEVERE, null, ex);
+        }
+    }
+
+    @OnMessage
+    public void onMessage(Map<String, List<String>> message, Session session) {
+    }
+
+    @OnClose
+    public void onClose(Session session) {
+    }
+
+    @OnError
+    public void onError(Session session, Throwable throwable) {
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/MessageSystemeEndpoint.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/MessageSystemeEndpoint.java
new file mode 100644
index 0000000..ef8524c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/MessageSystemeEndpoint.java
@@ -0,0 +1,87 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.impl.sockets;
+
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.message.systeme.MessageDecoder;
+import com.megatim.fdxconsultation.model.message.systeme.MessageEncoder;
+import com.megatim.fdxconsultation.model.message.systeme.ApplicationData;
+import com.megatim.fdxconsultation.model.message.systeme.UserSesionApplication;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import java.io.IOException;
+import javax.inject.Inject;
+import javax.websocket.EncodeException;
+import javax.websocket.OnClose;
+import javax.websocket.OnError;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+
+/**
+ *
+ * @author 
+ */
+@ServerEndpoint(
+        value = "/application/message/{id}",
+        decoders = MessageDecoder.class,
+        encoders = MessageEncoder.class)
+public class MessageSystemeEndpoint {
+    
+    private final UserSesionApplication userSesion = UserSesionApplication.getInstance();
+
+    @Inject
+    private UserManager userManager;
+    
+    @OnOpen
+    public void onOpen(
+            Session session,
+            @PathParam("id") Long id) throws IOException, EncodeException {
+        
+        //Variables
+        User utilisateur = null;
+        
+        //Si id renseigné
+        if(id != null){
+            
+            //On recupère l'utilisateur
+            utilisateur = userManager.findById(id);
+            
+        }
+        
+        //Si non null
+        if(utilisateur != null){
+            
+            //On conserve la session et l'utilisateur associé
+            userSesion.addSession(utilisateur, session, AppCommonContext.CODE_WEB_SOCKET_PATH_SYSTEME_MESSAGE);
+            
+        }
+        
+    }
+
+    @OnMessage
+    public void onMessage(Session session, ApplicationData message)
+            throws IOException, EncodeException {
+    }
+
+    @OnClose
+    public void onClose(Session session) throws IOException, EncodeException {
+        
+        //On supprime la session
+        userSesion.removeSession(session);
+        
+    }
+
+    @OnError
+    public void onError(Session session, Throwable throwable) {
+        
+        //On affiche le message d'erreur
+        throwable.printStackTrace();
+        
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/MessagesSystemeCronBean.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/MessagesSystemeCronBean.java
new file mode 100644
index 0000000..4e784cc
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/MessagesSystemeCronBean.java
@@ -0,0 +1,103 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.impl.sockets;
+
+/**
+ *
+ * @author Lenovo P53
+ */
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.message.systeme.MessageSystemeManager;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.MessageSystemeDto;
+import com.megatim.fdxconsultation.model.message.systeme.ApplicationData;
+import com.megatim.fdxconsultation.model.message.systeme.UserSesionApplication;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import java.util.Iterator;
+import javax.annotation.PostConstruct;
+import javax.ejb.LocalBean;
+import javax.ejb.Schedule;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+import javax.inject.Inject;
+import javax.websocket.Session;
+
+@Singleton
+@Startup
+@LocalBean
+public class MessagesSystemeCronBean {
+    
+    @Inject
+    private MessageSystemeManager messageSystemeManager;
+    
+    @Inject
+    private UserManager userManager;
+    
+    @PostConstruct
+    public void init() {
+        
+    }
+
+    @Schedule(second = "*/3", minute = "*", hour = "*", persistent = false)
+    public void refreshDatas() {
+        
+        //Variables
+        ApplicationData message = new ApplicationData();
+        MessageSystemeDto messageSystemeDto = null;
+        Iterator<String> iterateur = null;
+        String idSession = null;
+        Session session = null;
+        User utilisateur = null;
+        
+        try {
+        
+            //On crée une instance de l'iterateur
+            iterateur = UserSesionApplication.getInstance().getUsers().keySet().iterator();   
+
+            //On parcourt la liste des sessions
+            while(iterateur.hasNext()){  
+
+                //On recupère l'id de la session
+                idSession = iterateur.next();
+                
+                //On filtre par type
+                if(UserSesionApplication.getInstance().getUsers() != null && UserSesionApplication.getInstance().getUsers().get(idSession) != null
+                        && (UserSesionApplication.getInstance().getUsers().get(idSession).getType() != null
+                        && UserSesionApplication.getInstance().getUsers().get(idSession).getType().equalsIgnoreCase(AppCommonContext.CODE_WEB_SOCKET_PATH_SYSTEME_MESSAGE))){
+                
+                    //On recupère la session
+                    session = UserSesionApplication.getInstance().getUsers().get(idSession).getSession();
+
+                    //On recupère l'utilisateur associé à cette session
+                    utilisateur = UserSesionApplication.getInstance().getUsers().get(idSession).getUtilisateur();
+
+                    //On recupère le message système
+                    messageSystemeDto = messageSystemeManager.recupererUnMessageSystemeDto(utilisateur);
+
+                    //Si non null
+                    if(messageSystemeDto != null){
+                    
+                        //On hydrate le message
+                        message.setMessageSystemeDto(messageSystemeDto);
+
+                        //On envoie le message
+                        UserSesionApplication.getInstance().send(session, message);
+                    
+                    }
+                    
+                }
+
+            }
+            
+        } catch (Exception ex) {
+                
+            //On affiche les erreurs
+            ex.printStackTrace();
+
+        }
+        
+    }
+    
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/StandaloneServerStateEndpoint.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/StandaloneServerStateEndpoint.java
new file mode 100644
index 0000000..9af36d2
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/StandaloneServerStateEndpoint.java
@@ -0,0 +1,64 @@
+package com.megatim.fdxconsultation.service.impl.sockets;
+
+import com.megatim.fdxconsultation.core.ifaces.supervision.StandaloneServerStateEntityManager;
+import com.megatim.fdxconsultation.model.supervision.StandaloneServerStateEntity;
+import com.megatim.fdxconsultation.service.impl.sockets.encoders.StandaloneServerStateEntityDecoder;
+import com.megatim.fdxconsultation.service.impl.sockets.encoders.StandaloneServerStateEntityEncoder;
+import com.megatim.fdxconsultation.service.impl.sockets.helpers.StandaloneServerStateSessionHandler;
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.inject.Inject;
+import javax.websocket.EncodeException;
+import javax.websocket.OnClose;
+import javax.websocket.OnError;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.ServerEndpoint;
+
+/**
+ *
+ * @author lenovo
+ */
+@ServerEndpoint(value = "/standalone-server-state",
+        encoders = {StandaloneServerStateEntityEncoder.class},
+        decoders = {StandaloneServerStateEntityDecoder.class}
+)
+public class StandaloneServerStateEndpoint {
+
+    @Inject
+    private StandaloneServerStateSessionHandler standaloneServerStateSessionHandler;
+
+    @Inject
+    private StandaloneServerStateEntityManager standaloneServerStateEntityManager;
+
+    @OnOpen
+    public void onOpen(Session session) {
+
+        if (standaloneServerStateEntityManager.getCurrentStandaloneServerStateEntity() != null) {
+            try {
+                session.getBasicRemote().sendObject(standaloneServerStateEntityManager.getCurrentStandaloneServerStateEntity());
+            } catch (IOException | EncodeException ex) {
+                Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
+            }
+        }
+
+        standaloneServerStateSessionHandler.addSession(session);
+    }
+
+    @OnMessage
+    public void onMessage(StandaloneServerStateEntity message, Session session) {
+    }
+
+    @OnClose
+    public void onClose(Session session) {
+        standaloneServerStateSessionHandler.removeSession(session);
+    }
+
+    @OnError
+    public void onError(Session session, Throwable throwable) {
+        standaloneServerStateSessionHandler.removeSession(session);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/TableauBordsEndpoint.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/TableauBordsEndpoint.java
new file mode 100644
index 0000000..0b4f46b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/TableauBordsEndpoint.java
@@ -0,0 +1,75 @@
+package com.megatim.fdxconsultation.service.impl.sockets;
+
+import com.megatim.fdxconsultation.core.ifaces.stats.TableauBordManager;
+import com.megatim.fdxconsultation.service.impl.sockets.encoders.ParticipantToFichiersDecoder;
+import com.megatim.fdxconsultation.service.impl.sockets.encoders.ParticipantToFichiersEncoder;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.inject.Inject;
+import javax.websocket.EncodeException;
+import javax.websocket.OnClose;
+import javax.websocket.OnError;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+
+/**
+ *
+ * @author ASUS
+ */
+@ServerEndpoint(value = "/tableaubord/{username}",
+        encoders = {ParticipantToFichiersEncoder.class},
+        decoders = {ParticipantToFichiersDecoder.class}
+)
+public class TableauBordsEndpoint {
+
+    @Inject
+    private TableauBordManager manager;
+
+    @Inject
+    private UserSessionBean userSessionBean;
+
+    @OnOpen
+    public void onOpen(Session session, @PathParam("username") String username) {
+        try {
+            session.getBasicRemote().sendObject(manager.userTableauBordToTypeFichiers(username));
+            userSessionBean.getSessionMap().put(username, session);
+        } catch (IOException | EncodeException ex) {
+            Logger.getLogger(FichiersEndpoint.class.getName()).log(Level.SEVERE, null, ex);
+        }
+    }
+
+    @OnMessage
+    public void onMessage(Map<String, List<String>> message, Session session) {
+    }
+
+    @OnClose
+    public void onClose(Session session) {
+        removeSession(session);
+    }
+
+    @OnError
+    public void onError(Session session, Throwable throwable) {
+        removeSession(session);
+    }
+
+    private void removeSession(Session session) {
+        String userName = null;
+
+        for (Entry<String, Session> e : userSessionBean.getSessionMap().entrySet()) {
+            if (e.getValue().getId().equals(session.getId())) {
+                userName = e.getKey();
+                break;
+            }
+        }
+        if (userName != null) {
+            userSessionBean.getSessionMap().remove(userName);
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/TableauBordsGlobalEndpoint.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/TableauBordsGlobalEndpoint.java
new file mode 100644
index 0000000..edc1ac3
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/TableauBordsGlobalEndpoint.java
@@ -0,0 +1,54 @@
+package com.megatim.fdxconsultation.service.impl.sockets;
+
+import com.megatim.fdxconsultation.core.ifaces.stats.TableauBordManager;
+import com.megatim.fdxconsultation.service.impl.sockets.encoders.ParticipantToFichiersDecoder;
+import com.megatim.fdxconsultation.service.impl.sockets.encoders.ParticipantToFichiersEncoder;
+import com.megatim.fdxconsultation.service.impl.sockets.helpers.TableauBordGlobalSessionHandler;
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.inject.Inject;
+import javax.websocket.EncodeException;
+import javax.websocket.OnClose;
+import javax.websocket.OnError;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.ServerEndpoint;
+
+/**
+ *
+ * @author ASUS
+ */
+@ServerEndpoint(value = "/tableaubord-global",
+        encoders = {ParticipantToFichiersEncoder.class},
+        decoders = {ParticipantToFichiersDecoder.class}
+)
+public class TableauBordsGlobalEndpoint {
+
+    @Inject
+    private TableauBordGlobalSessionHandler tableauBordGlobalSessionHandler;
+
+    @Inject
+    private TableauBordManager manager;
+
+    @OnOpen
+    public void onOpen(Session session) {
+        try {
+            session.getBasicRemote().sendObject(manager.globalTableauBordToTypeFichiers());
+            tableauBordGlobalSessionHandler.addSession(session);
+        } catch (IOException | EncodeException ex) {
+            Logger.getLogger(TableauBordsGlobalEndpoint.class.getName()).log(Level.SEVERE, null, ex);
+        }
+    }
+
+    @OnClose
+    public void onClose(Session session) {
+        tableauBordGlobalSessionHandler.removeSession(session);
+    }
+
+    @OnError
+    public void onError(Session session, Throwable throwable) {
+        tableauBordGlobalSessionHandler.removeSession(session);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/TransfertEndpoint.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/TransfertEndpoint.java
new file mode 100644
index 0000000..e4f02c4
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/TransfertEndpoint.java
@@ -0,0 +1,41 @@
+package com.megatim.fdxconsultation.service.impl.sockets;
+
+import com.megatim.fdxconsultation.service.impl.sockets.encoders.TranfertDecoder;
+import com.megatim.fdxconsultation.service.impl.sockets.encoders.TransfertEncoder;
+import com.megatim.fdxconsultation.service.impl.sockets.helpers.TransfertDataMessageSessionHandler;
+import javax.inject.Inject;
+import javax.websocket.OnClose;
+import javax.websocket.OnError;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.ServerEndpoint;
+
+/**
+ *
+ * @author lenovo
+ */
+@ServerEndpoint(value = "/transferts",
+        encoders = {TransfertEncoder.class},
+        decoders = {TranfertDecoder.class}
+)
+public class TransfertEndpoint {
+
+    @Inject
+    private TransfertDataMessageSessionHandler transfertDataMessageSessionHandler;
+
+    @OnOpen
+    public void onOpen(Session session) {
+        transfertDataMessageSessionHandler.addSession(session);
+    }
+
+    @OnClose
+    public void onClose(Session session) {
+        transfertDataMessageSessionHandler.removeSession(session);
+    }
+
+    @OnError
+    public void onError(Session session, Throwable throwable) {
+        transfertDataMessageSessionHandler.removeSession(session);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/UserSessionBean.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/UserSessionBean.java
new file mode 100644
index 0000000..16f95e4
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/UserSessionBean.java
@@ -0,0 +1,23 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.impl.sockets;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import javax.enterprise.context.ApplicationScoped;
+import javax.websocket.Session;
+
+/**
+ *
+ * @author ASUS
+ */
+@ApplicationScoped
+public class UserSessionBean {
+    private final Map<String, Session> sessionMap = new ConcurrentHashMap<>();
+
+    public Map<String, Session> getSessionMap() {
+        return sessionMap;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/ConnexionStatutsDecoder.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/ConnexionStatutsDecoder.java
new file mode 100644
index 0000000..b10120e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/ConnexionStatutsDecoder.java
@@ -0,0 +1,40 @@
+package com.megatim.fdxconsultation.service.impl.sockets.encoders;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fdx.messaging.common.ConnexionStatut;
+import java.util.List;
+import javax.websocket.DecodeException;
+import javax.websocket.Decoder;
+import javax.websocket.EndpointConfig;
+
+/**
+ *
+ * @author lenovo
+ */
+public class ConnexionStatutsDecoder implements Decoder.Text<List<ConnexionStatut>> {
+
+    private ObjectMapper objectMapper = new ObjectMapper();
+
+    @Override
+    public List<ConnexionStatut> decode(String s) throws DecodeException {
+        try {
+            return objectMapper.readValue(s, new TypeReference<List<ConnexionStatut>>() {});
+        } catch (Exception e) {
+            throw new DecodeException(s, "Unable to decode message", e);
+        }
+    }
+
+    @Override
+    public boolean willDecode(String s) {
+        return s != null;
+    }
+
+    @Override
+    public void init(EndpointConfig endpointConfig) {
+    }
+
+    @Override
+    public void destroy() {
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/ConnexionStatutsEncoder.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/ConnexionStatutsEncoder.java
new file mode 100644
index 0000000..acebc85
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/ConnexionStatutsEncoder.java
@@ -0,0 +1,35 @@
+package com.megatim.fdxconsultation.service.impl.sockets.encoders;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fdx.messaging.common.ConnexionStatut;
+import java.util.List;
+import javax.websocket.EncodeException;
+import javax.websocket.Encoder;
+import javax.websocket.EndpointConfig;
+
+/**
+ *
+ * @author lenovo
+ */
+public class ConnexionStatutsEncoder implements Encoder.Text<List<ConnexionStatut>> {
+
+    private final ObjectMapper objectMapper = new ObjectMapper();
+
+    @Override
+    public String encode(List<ConnexionStatut> message) throws EncodeException {
+        try {
+            return objectMapper.writeValueAsString(message);
+        } catch (JsonProcessingException e) {
+            throw new EncodeException(message, "Unable to encode message", e);
+        }
+    }
+
+    @Override
+    public void init(EndpointConfig endpointConfig) {
+    }
+
+    @Override
+    public void destroy() {
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/DataProductionDecoder.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/DataProductionDecoder.java
new file mode 100644
index 0000000..d14aec1
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/DataProductionDecoder.java
@@ -0,0 +1,41 @@
+package com.megatim.fdxconsultation.service.impl.sockets.encoders;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import java.io.IOException;
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import javax.websocket.DecodeException;
+import javax.websocket.Decoder;
+import javax.websocket.EndpointConfig;
+
+/**
+ *
+ * @author lenovo
+ */
+public class DataProductionDecoder implements Decoder.Text<CommonDataProduction> {
+
+    private final ObjectMapper objectMapper = new ObjectMapper();
+
+    @Override
+    public CommonDataProduction decode(String s) throws DecodeException {
+        try {
+            return objectMapper.readValue(s, new TypeReference<CommonDataProduction>() {
+            });
+        } catch (IOException e) {
+            throw new DecodeException(s, "Unable to decode map", e);
+        }
+    }
+
+    @Override
+    public boolean willDecode(String s) {
+        return s != null;
+    }
+
+    @Override
+    public void init(EndpointConfig endpointConfig) {
+    }
+
+    @Override
+    public void destroy() {
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/DataProductionEncoder.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/DataProductionEncoder.java
new file mode 100644
index 0000000..c211889
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/DataProductionEncoder.java
@@ -0,0 +1,34 @@
+package com.megatim.fdxconsultation.service.impl.sockets.encoders;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
+import javax.websocket.EncodeException;
+import javax.websocket.Encoder;
+import javax.websocket.EndpointConfig;
+
+/**
+ *
+ * @author lenovo
+ */
+public class DataProductionEncoder implements Encoder.Text<CommonDataProduction> {
+
+    private final ObjectMapper objectMapper = new ObjectMapper();
+
+    @Override
+    public String encode(CommonDataProduction dataProduction) throws EncodeException {
+        try {
+            return objectMapper.writeValueAsString(dataProduction);
+        } catch (JsonProcessingException e) {
+            throw new EncodeException(dataProduction, "Unable to encode message", e);
+        }
+    }
+
+    @Override
+    public void init(EndpointConfig endpointConfig) {
+    }
+
+    @Override
+    public void destroy() {
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/ParticipantToFichiersDecoder.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/ParticipantToFichiersDecoder.java
new file mode 100644
index 0000000..7fb4a3e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/ParticipantToFichiersDecoder.java
@@ -0,0 +1,40 @@
+package com.megatim.fdxconsultation.service.impl.sockets.encoders;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import java.util.List;
+import java.util.Map;
+import javax.websocket.DecodeException;
+import javax.websocket.Decoder;
+import javax.websocket.EndpointConfig;
+
+/**
+ *
+ * @author lenovo
+ */
+public class ParticipantToFichiersDecoder implements Decoder.Text<Map<String, List<String>>> {
+
+    private ObjectMapper objectMapper = new ObjectMapper();
+
+    @Override
+    public Map<String, List<String>> decode(String s) throws DecodeException {
+        try {
+            return objectMapper.readValue(s, new TypeReference<Map<String, List<String>>>() {});
+        } catch (Exception e) {
+            throw new DecodeException(s, "Unable to decode map", e);
+        }
+    }
+
+    @Override
+    public boolean willDecode(String s) {
+        return s != null;
+    }
+
+    @Override
+    public void init(EndpointConfig endpointConfig) {
+    }
+
+    @Override
+    public void destroy() {
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/ParticipantToFichiersEncoder.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/ParticipantToFichiersEncoder.java
new file mode 100644
index 0000000..8dc2490
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/ParticipantToFichiersEncoder.java
@@ -0,0 +1,35 @@
+package com.megatim.fdxconsultation.service.impl.sockets.encoders;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import java.util.List;
+import java.util.Map;
+import javax.websocket.EncodeException;
+import javax.websocket.Encoder;
+import javax.websocket.EndpointConfig;
+
+/**
+ *
+ * @author lenovo
+ */
+public class ParticipantToFichiersEncoder implements Encoder.Text<Map<String, List<String>>> {
+
+    private final ObjectMapper objectMapper = new ObjectMapper();
+
+    @Override
+    public String encode(Map<String, List<String>> map) throws EncodeException {
+        try {
+            return objectMapper.writeValueAsString(map);
+        } catch (JsonProcessingException e) {
+            throw new EncodeException(map, "Unable to encode map", e);
+        }
+    }
+
+    @Override
+    public void init(EndpointConfig endpointConfig) {
+    }
+
+    @Override
+    public void destroy() {
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/StandaloneServerStateEntityDecoder.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/StandaloneServerStateEntityDecoder.java
new file mode 100644
index 0000000..3c10e53
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/StandaloneServerStateEntityDecoder.java
@@ -0,0 +1,39 @@
+package com.megatim.fdxconsultation.service.impl.sockets.encoders;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.megatim.fdxconsultation.model.supervision.StandaloneServerStateEntity;
+import javax.websocket.DecodeException;
+import javax.websocket.Decoder;
+import javax.websocket.EndpointConfig;
+
+/**
+ *
+ * @author lenovo
+ */
+public class StandaloneServerStateEntityDecoder implements Decoder.Text<StandaloneServerStateEntity> {
+
+    private ObjectMapper objectMapper = new ObjectMapper();
+
+    @Override
+    public StandaloneServerStateEntity decode(String s) throws DecodeException {
+        try {
+            return objectMapper.readValue(s, new TypeReference<StandaloneServerStateEntity>() {});
+        } catch (Exception e) {
+            throw new DecodeException(s, "Unable to decode map", e);
+        }
+    }
+
+    @Override
+    public boolean willDecode(String s) {
+        return s != null;
+    }
+
+    @Override
+    public void init(EndpointConfig endpointConfig) {
+    }
+
+    @Override
+    public void destroy() {
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/StandaloneServerStateEntityEncoder.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/StandaloneServerStateEntityEncoder.java
new file mode 100644
index 0000000..d99f845
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/StandaloneServerStateEntityEncoder.java
@@ -0,0 +1,34 @@
+package com.megatim.fdxconsultation.service.impl.sockets.encoders;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.megatim.fdxconsultation.model.supervision.StandaloneServerStateEntity;
+import javax.websocket.EncodeException;
+import javax.websocket.Encoder;
+import javax.websocket.EndpointConfig;
+
+/**
+ *
+ * @author lenovo
+ */
+public class StandaloneServerStateEntityEncoder implements Encoder.Text<StandaloneServerStateEntity> {
+
+    private final ObjectMapper objectMapper = new ObjectMapper();
+
+    @Override
+    public String encode(StandaloneServerStateEntity msg) throws EncodeException {
+        try {
+            return objectMapper.writeValueAsString(msg);
+        } catch (JsonProcessingException e) {
+            throw new EncodeException(msg, "Unable to encode message", e);
+        }
+    }
+
+    @Override
+    public void init(EndpointConfig endpointConfig) {
+    }
+
+    @Override
+    public void destroy() {
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/TranfertDecoder.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/TranfertDecoder.java
new file mode 100644
index 0000000..d72c64d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/TranfertDecoder.java
@@ -0,0 +1,41 @@
+package com.megatim.fdxconsultation.service.impl.sockets.encoders;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.megatim.fdxconsultation.model.supervision.Transfert;
+import java.io.IOException;
+import javax.websocket.DecodeException;
+import javax.websocket.Decoder;
+import javax.websocket.EndpointConfig;
+
+/**
+ *
+ * @author lenovo
+ */
+public class TranfertDecoder implements Decoder.Text<Transfert> {
+
+    private final ObjectMapper objectMapper = new ObjectMapper();
+
+    @Override
+    public Transfert decode(String s) throws DecodeException {
+        try {
+            return objectMapper.readValue(s, new TypeReference<Transfert>() {
+            });
+        } catch (IOException e) {
+            throw new DecodeException(s, "Unable to decode map", e);
+        }
+    }
+
+    @Override
+    public boolean willDecode(String s) {
+        return s != null;
+    }
+
+    @Override
+    public void init(EndpointConfig endpointConfig) {
+    }
+
+    @Override
+    public void destroy() {
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/TransfertEncoder.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/TransfertEncoder.java
new file mode 100644
index 0000000..e2211e1
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/encoders/TransfertEncoder.java
@@ -0,0 +1,40 @@
+package com.megatim.fdxconsultation.service.impl.sockets.encoders;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.megatim.fdxconsultation.model.supervision.Transfert;
+import javax.websocket.EncodeException;
+import javax.websocket.Encoder;
+import javax.websocket.EndpointConfig;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+
+/**
+ *
+ * @author lenovo
+ */
+public class TransfertEncoder implements Encoder.Text<Transfert> {
+
+    private final ObjectMapper objectMapper = new ObjectMapper();
+
+    @Override
+    public String encode(Transfert transfert) throws EncodeException {
+        try {
+
+            objectMapper.registerModule(new JavaTimeModule());
+            objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+
+            return objectMapper.writeValueAsString(transfert);
+        } catch (JsonProcessingException e) {
+            throw new EncodeException(transfert, "Unable to encode transfert data message", e);
+        }
+    }
+
+    @Override
+    public void init(EndpointConfig endpointConfig) {
+    }
+
+    @Override
+    public void destroy() {
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/helpers/ConnexionStatutSessionHandler.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/helpers/ConnexionStatutSessionHandler.java
new file mode 100644
index 0000000..5c8fb6b
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/helpers/ConnexionStatutSessionHandler.java
@@ -0,0 +1,89 @@
+package com.megatim.fdxconsultation.service.impl.sockets.helpers;
+
+import com.fdx.messaging.common.ConnexionStatut;
+import com.megatim.fdxconsultation.core.ifaces.supervision.StandaloneServerStateEntityManager;
+import com.megatim.fdxconsultation.model.supervision.StandaloneServerStateEntity;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import javax.websocket.EncodeException;
+import javax.websocket.Session;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@ApplicationScoped
+public class ConnexionStatutSessionHandler {
+
+    @Inject
+    StandaloneServerStateEntityManager serverStateManager;
+
+    private final Map<String, Session> idToSessions = new ConcurrentHashMap<>();
+
+    private Timer timer = new Timer();
+
+    public void publishMessage(List<ConnexionStatut> connectedStatuts) {
+        getSessions().forEach(s -> {
+            try {
+                s.getBasicRemote().sendObject(connectedStatuts);
+            } catch (IOException | EncodeException ex) {
+                Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
+            }
+        });
+
+        scheduleTask();
+
+    }
+
+    public void addSession(Session session) {
+        idToSessions.put(session.getId(), session);
+    }
+
+    public void removeSession(Session session) {
+        idToSessions.remove(session.getId());
+    }
+
+    private List<Session> getSessions() {
+        return idToSessions
+                .entrySet()
+                .stream()
+                .map(e -> e.getValue())
+                .collect(Collectors.toList());
+    }
+
+    private void scheduleTask() {
+
+        timer.cancel();
+
+        final long lastPublishTime = System.nanoTime();
+        timer = new Timer();
+        timer.schedule(new TimerTask() {
+            @Override
+            public void run() {
+                if (System.nanoTime() - lastPublishTime >= 10_000_000_000L) {
+                    StandaloneServerStateEntity stateEntity = serverStateManager.getCurrentStandaloneServerStateEntity();
+                    if (stateEntity != null) {
+                        List<ConnexionStatut> connectedStatuts = stateEntity.getAgentConfigurations().stream().map(a -> {
+                            ConnexionStatut connexionStatut = new ConnexionStatut();
+                            connexionStatut.setAgentCode(a.getAgentCode());
+                            connexionStatut.setConnected(false);
+                            return connexionStatut;
+                        }).collect(Collectors.toList());
+
+                        publishMessage(connectedStatuts);
+                    }
+                }
+            }
+        }, 0, 5000);
+
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/helpers/StandaloneServerStateSessionHandler.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/helpers/StandaloneServerStateSessionHandler.java
new file mode 100644
index 0000000..5a42513
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/helpers/StandaloneServerStateSessionHandler.java
@@ -0,0 +1,50 @@
+package com.megatim.fdxconsultation.service.impl.sockets.helpers;
+
+import com.megatim.fdxconsultation.model.supervision.StandaloneServerStateEntity;
+import com.megatim.fdxconsultation.service.impl.sockets.StandaloneServerStateEndpoint;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import javax.enterprise.context.ApplicationScoped;
+import javax.websocket.EncodeException;
+import javax.websocket.Session;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@ApplicationScoped
+public class StandaloneServerStateSessionHandler {
+
+    private final Map<String, Session> idtoSessions = new ConcurrentHashMap<>();
+
+    public void publishMessage(StandaloneServerStateEntity standaloneServerStateEntity) {
+        getSessions().forEach(s -> {
+            try {
+                s.getBasicRemote().sendObject(standaloneServerStateEntity);
+            } catch (IOException | EncodeException ex) {
+                Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
+            }
+        });
+    }
+
+    public void addSession(Session session) {
+        idtoSessions.put(session.getId(), session);
+    }
+
+    public void removeSession(Session session) {
+        idtoSessions.remove(session.getId());
+    }
+
+    private List<Session> getSessions() {
+        return idtoSessions
+                .entrySet()
+                .stream()
+                .map(e -> e.getValue())
+                .collect(Collectors.toList());
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/helpers/TableauBordGlobalSessionHandler.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/helpers/TableauBordGlobalSessionHandler.java
new file mode 100644
index 0000000..1102eb1
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/helpers/TableauBordGlobalSessionHandler.java
@@ -0,0 +1,51 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.service.impl.sockets.helpers;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import javax.enterprise.context.ApplicationScoped;
+import javax.websocket.EncodeException;
+import javax.websocket.Session;
+
+/**
+ *
+ * @author ASUS
+ */
+@ApplicationScoped
+public class TableauBordGlobalSessionHandler {
+    private final Map<String, Session> idToSessions = new ConcurrentHashMap<>();
+
+    public void publishMessage(Map<String, List<String>> participantToTypeFichiers) {
+        getSessions().forEach(s -> {
+            try {
+                s.getBasicRemote().sendObject(participantToTypeFichiers);
+            } catch (IOException | EncodeException ex) {
+                Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
+            }
+        });
+    }
+
+    public void addSession(Session session) {
+        idToSessions.put(session.getId(), session);
+    }
+
+    public void removeSession(Session session) {
+        idToSessions.remove(session.getId());
+    }
+
+    private List<Session> getSessions() {
+        return idToSessions
+                .entrySet()
+                .stream()
+                .map(e -> e.getValue())
+                .collect(Collectors.toList());
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/helpers/TransfertDataMessageSessionHandler.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/helpers/TransfertDataMessageSessionHandler.java
new file mode 100644
index 0000000..d6c6459
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/sockets/helpers/TransfertDataMessageSessionHandler.java
@@ -0,0 +1,50 @@
+package com.megatim.fdxconsultation.service.impl.sockets.helpers;
+
+import com.megatim.fdxconsultation.model.supervision.Transfert;
+import com.megatim.fdxconsultation.service.impl.camel.consumer.TransfertDataMessageConsumer;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import javax.enterprise.context.ApplicationScoped;
+import javax.websocket.EncodeException;
+import javax.websocket.Session;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@ApplicationScoped
+public class TransfertDataMessageSessionHandler {
+
+    private final Map<String, Session> idtoSessions = new ConcurrentHashMap<>();
+
+    public void addSession(Session session) {
+        idtoSessions.put(session.getId(), session);
+    }
+
+    public void removeSession(Session session) {
+        idtoSessions.remove(session.getId());
+    }
+
+    public void sendMessage(Transfert transfert) {
+        getSessions().forEach(session -> {
+            try {
+                session.getBasicRemote().sendObject(transfert);
+            } catch (IOException | EncodeException ex) {
+                Logger.getLogger(TransfertDataMessageConsumer.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        });
+    }
+
+    private List<Session> getSessions() {
+        return idtoSessions
+                .entrySet()
+                .stream()
+                .map(e -> e.getValue())
+                .collect(Collectors.toList());
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/startup/StartupBean.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/startup/StartupBean.java
new file mode 100644
index 0000000..b48968c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/startup/StartupBean.java
@@ -0,0 +1,303 @@
+package com.megatim.fdxconsultation.service.impl.startup;
+
+import com.bekosoftware.genericdaolayer.dao.tools.RestrictionsContainer;
+import com.megatim.fdxcommons.core.ifaces.helper.DataInMemoryHandler;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.tools.context.AppContext;
+import com.megatim.fdxconsultation.tools.CommonTools;
+import com.megatim.fdxconsultation.core.ifaces.administration.ActionManager;
+import com.megatim.fdxconsultation.core.ifaces.administration.RoleManager;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.configuration.CodeStatutHttpManager;
+import com.megatim.fdxconsultation.model.administration.Action;
+import com.megatim.fdxconsultation.model.administration.Role;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.configuration.CodeStatutHttp;
+import com.megatim.file.model.enumeration.TypeSauvegarde;
+import com.megatim.file.tools.entites.context.FileModuleAppContextEntity;
+import com.mgt.rs.security.core.common.Secured;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import javax.annotation.PostConstruct;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+import javax.inject.Inject;
+import com.megatim.fdxconsultation.core.ifaces.integration.AppColumnDeleter;
+import com.megatim.fdxconsultation.core.impl.dataproductionworker.DataProductionWorkerGroup;
+
+/**
+ *
+ * @author lenovo
+ */
+@Singleton
+@Startup
+public class StartupBean {
+
+    @Inject
+    protected ActionManager actionManager;
+
+    @Inject
+    protected RoleManager roleManager;
+
+    @Inject
+    protected UserManager userManager;
+
+    @Inject
+    protected CodeStatutHttpManager codeStatutHttpManager;
+
+    @Inject
+    private DataInMemoryHandler dataInMemoryHandler;
+
+    @Inject
+    private AppColumnDeleter appColumnDeleter;
+
+    @Inject
+    private DataProductionWorkerGroup dataProductionWorkerGroup;
+
+    @PostConstruct
+    public void init() {
+        dataInMemoryHandler.initializeDataInMemory();
+        addNewActions();
+        addAdmins();
+        ajouterCodeStatusHttp();
+        initializeFileModule();
+        appColumnDeleter.delete();
+        dataProductionWorkerGroup.start();
+    }
+
+    private void initializeFileModule() {
+
+        /* Variabless */
+        List<String> extensionsAutorises = Arrays.asList("pdf", "docx", "rar");
+
+        /* Précise le mode de sauvegarde */
+        FileModuleAppContextEntity.configuration.setModeSauvegarde(TypeSauvegarde.DISQUE);
+
+        /* Précise la taille max des fichiers */
+        FileModuleAppContextEntity.configuration.setTailleUploadMax(10);
+
+        /* Précise la liste des extentations autoriséess */
+        FileModuleAppContextEntity.configuration.setExtensionsAutorisees(extensionsAutorises);
+
+    }
+
+    /**
+     * Methode permettant de charger les codes statuts http
+     */
+    private void ajouterCodeStatusHttp() {
+
+        /* Variables */
+        List<CodeStatutHttp> liste = codeStatutHttpManager.findAll();
+
+        /* On vide le registre */
+        AppContext.registre_codes_http.clear();
+
+        /* Si liste non vide */
+        if (liste == null || liste.isEmpty()) {
+
+            /* On initialise la liste */
+            liste = new ArrayList<CodeStatutHttp>();
+
+            /* 1xx - Informations */
+            liste.add(new CodeStatutHttp("100", "Le serveur a reçu les en-têtes et attend le corps de la requête"));
+            liste.add(new CodeStatutHttp("101", "Le client a demandé un changement de protocole, accepté par le serveur"));
+            liste.add(new CodeStatutHttp("102", "La requête est en cours de traitement"));
+
+            /* 2xx - Succès */
+            liste.add(new CodeStatutHttp("200", "La requête a réussi"));
+            liste.add(new CodeStatutHttp("201", "La requête a abouti à la création d'une ressource"));
+            liste.add(new CodeStatutHttp("202", "La requête a été acceptée, mais le traitement est en cours"));
+            liste.add(new CodeStatutHttp("203", "La réponse contient des informations provenant d'une source tierce"));
+            liste.add(new CodeStatutHttp("204", "La requête a réussi, mais il n'y a pas de contenu à retourner"));
+            liste.add(new CodeStatutHttp("205", "La requête a réussi, le client doit réinitialiser l'interface utilisateur"));
+            liste.add(new CodeStatutHttp("206", "Une partie de la ressource a été envoyée"));
+
+            /* 3xx - Redirections */
+            liste.add(new CodeStatutHttp("300", "Plusieurs options sont disponibles pour la ressource"));
+            liste.add(new CodeStatutHttp("301", "La ressource a été déplacée de manière permanente"));
+            liste.add(new CodeStatutHttp("302", "La ressource a été temporairement déplacée"));
+            liste.add(new CodeStatutHttp("303", "La ressource est disponible à une autre URL"));
+            liste.add(new CodeStatutHttp("304", "La ressource n'a pas été modifiée depuis la dernière requête"));
+            liste.add(new CodeStatutHttp("307", "Redirection temporaire avec conservation de la méthode HTTP"));
+            liste.add(new CodeStatutHttp("308", "Redirection permanente avec conservation de la méthode HTTP"));
+
+            /* 4xx - Erreurs du client */
+            liste.add(new CodeStatutHttp("400", "La requête est mal formée ou invalide"));
+            liste.add(new CodeStatutHttp("401", "L'authentification est requise pour accéder à la ressource"));
+            liste.add(new CodeStatutHttp("403", "Le client n'a pas les permissions nécessaires pour accéder à la ressource"));
+            liste.add(new CodeStatutHttp("404", "La ressource demandée n'existe pas"));
+            liste.add(new CodeStatutHttp("405", "La méthode HTTP utilisée n'est pas autorisée pour cette ressource"));
+            liste.add(new CodeStatutHttp("406", "La ressource n'est pas disponible dans un format acceptable pour le client"));
+            liste.add(new CodeStatutHttp("408", "Le serveur a expiré en attente de la requête"));
+            liste.add(new CodeStatutHttp("409", "Un conflit a été détecté"));
+            liste.add(new CodeStatutHttp("410", "La ressource n'est plus disponible et n'a pas d'adresse de redirection"));
+            liste.add(new CodeStatutHttp("411", "La requête doit spécifier la longueur de son contenu"));
+            liste.add(new CodeStatutHttp("412", "Une précondition dans les en-têtes de la requête a échoué"));
+            liste.add(new CodeStatutHttp("413", "La taille de la requête est trop grande"));
+            liste.add(new CodeStatutHttp("414", "L'URI fourni est trop long pour être traité"));
+            liste.add(new CodeStatutHttp("415", "Le format de la requête n'est pas supporté"));
+            liste.add(new CodeStatutHttp("422", "La requête est bien formée mais ne peut pas être traitée"));
+            liste.add(new CodeStatutHttp("429", "Trop de requêtes ont été envoyées dans un court laps de temps"));
+
+            /* 5xx - Erreurs du serveur */
+            liste.add(new CodeStatutHttp("500", "Une erreur inattendue s'est produite sur le serveur"));
+            liste.add(new CodeStatutHttp("501", "La méthode HTTP demandée n'est pas supportée par le serveur"));
+            liste.add(new CodeStatutHttp("502", "Une réponse invalide a été reçue d'un serveur en amont"));
+            liste.add(new CodeStatutHttp("503", "Le serveur est temporairement indisponible"));
+            liste.add(new CodeStatutHttp("504", "Le serveur en amont a mis trop de temps à répondre"));
+            liste.add(new CodeStatutHttp("505", "La version HTTP utilisée n'est pas supportée"));
+
+            /* On save en bd */
+            for (CodeStatutHttp codeStatutHttp : liste) {
+
+                /* On save */
+                codeStatutHttpManager.add(codeStatutHttp, null);
+
+            }
+
+        }
+
+        /* On ajoute dans la map */
+        for (CodeStatutHttp codeStatutHttp : liste) {
+
+            /* On ajoute à la map */
+            AppContext.registre_codes_http.put(codeStatutHttp.getCode(), codeStatutHttp.getLibelle());
+
+        }
+
+    }
+
+    private void addAdmins() {
+
+        List<User> users = userManager.findAll();
+
+        //Pas d'admin
+        if (!users.stream().filter(u -> u.getRole().getAdmin()).findAny().isPresent()) {
+            Role role = new Role();
+            role.setLibelle("Admin");
+            role.setDescription("Admin");
+            role.setAdmin(true);
+            Role newRole = roleManager.save(role);
+            addUser("adminc", "P@ssw0rd", newRole);
+        }
+
+        //pas de super admin
+        if (!users.stream().filter(u -> u.getRole().getSuperAdmin()).findAny().isPresent()) {
+            Role role = new Role();
+            role.setLibelle("Super Admin");
+            role.setDescription("Super Admin");
+            role.setSuperAdmin(true);
+            Role newRole = roleManager.save(role);
+            addUser("adminv", "P@ssw0rd", newRole);
+        }
+
+        //Pas de mega admin
+        if (!users.stream().filter(u -> u.getRole().getMegaAdmin()).findAny().isPresent()) {
+            Role role = new Role();
+            role.setLibelle("Hyper Admin");
+            role.setDescription("Hyper Admin");
+            role.setMegaAdmin(true);
+            Role newRole = roleManager.save(role);
+            addUser("admincontrol", "P@ssw0rd", newRole);
+        }
+
+    }
+
+    private void addUser(String userName, String password, Role role) {
+        User user = new User();
+        user.setUserName(userName);
+        user.setDelaiInactivite(10);
+        user.setPwd(CommonTools.encryptPassword(password));
+        user.setRole(role);
+        //user.getRoles().add(role);
+        userManager.save(user);
+    }
+
+    private void addNewActions() {
+
+        List<Class<?>> classes = CommonTools.getAnnotatedClasses("com.megatim.fdxconsultation.service", "com.mgt.rs.security.core.common.SecuredClass");
+
+        classes.forEach(clazz -> {
+
+            SecuredClass securedClass = clazz.getAnnotation(SecuredClass.class);
+            Method[] methods = clazz.getMethods();
+
+            for (Method method : methods) {
+
+                Secured secured = getInheritedAnnotation(Secured.class, method);
+                if (secured != null && secured.action() != null && !secured.action().isEmpty() && !secured.action().equals("*")) {
+                    //On crée l'action ici
+                    Action action = new Action();
+                    action.setModule(securedClass.module());
+                    action.setPath(securedClass.path());
+                    action.setDescription(securedClass.description());
+                    action.setName(secured.action());
+
+                    RestrictionsContainer requeteur = RestrictionsContainer.newInstance();
+
+                    //On ajoute les criteres
+                    requeteur.addEq("name", action.getName());
+                    requeteur.addEq("path", action.getPath());
+                    requeteur.addEq("module", action.getModule());
+                    requeteur.addEq("typeOperation", TypeOperation.AJOUTER);
+
+                    List<Action> datas = actionManager.filter(requeteur.getPredicats(), null, null, 0, -1);
+                    if (datas.isEmpty()) {
+                        actionManager.save(action);
+                    }
+
+                }
+            }
+
+        });
+
+    }
+
+    public static <A extends Annotation> A getInheritedAnnotation(Class<A> annotationClass, AnnotatedElement element) {
+        A annotation = element.getAnnotation(annotationClass);
+        if (annotation == null && element instanceof Method) {
+            annotation = getOverriddenAnnotation(annotationClass, (Method) element);
+        }
+        return annotation;
+    }
+
+    private static <A extends Annotation> A getOverriddenAnnotation(Class<A> annotationClass, Method method) {
+        final Class<?> methodClass = method.getDeclaringClass();
+        final String name = method.getName();
+        final Class<?>[] params = method.getParameterTypes();
+        // prioritize all superclasses over all interfaces
+        final Class<?> superclass = methodClass.getSuperclass();
+        if (superclass != null) {
+            final A annotation = getOverriddenAnnotationFrom(annotationClass, superclass, name, params);
+            if (annotation != null) {
+                return annotation;
+            }
+        }
+        // depth-first search over interface hierarchy
+        for (final Class<?> intf : methodClass.getInterfaces()) {
+            final A annotation = getOverriddenAnnotationFrom(annotationClass, intf, name, params);
+            if (annotation != null) {
+                return annotation;
+            }
+        }
+        return null;
+    }
+
+    private static <A extends Annotation> A getOverriddenAnnotationFrom(Class<A> annotationClass, Class<?> searchClass, String name, Class<?>[] params) {
+        try {
+            final Method method = searchClass.getMethod(name, params);
+            final A annotation = method.getAnnotation(annotationClass);
+            if (annotation != null) {
+                return annotation;
+            }
+            return getOverriddenAnnotation(annotationClass, method);
+        } catch (final NoSuchMethodException e) {
+            return null;
+        }
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/stats/TableauBordGlobalRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/stats/TableauBordGlobalRSImpl.java
new file mode 100644
index 0000000..8dd4f14
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/stats/TableauBordGlobalRSImpl.java
@@ -0,0 +1,164 @@
+package com.megatim.fdxconsultation.service.impl.stats;
+
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntity;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationValidationException;
+import com.megatim.fdxconsultation.core.ifaces.helper.DataConsumptionOperations;
+import com.megatim.fdxconsultation.core.ifaces.helper.RequestHandler;
+import com.megatim.fdxconsultation.core.ifaces.stats.TableauBordManager;
+import com.megatim.fdxconsultation.core.impl.stats.ConvertedTableauBordResponse;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.fdxconsultation.model.dto.stats.TableauBordSlimDto;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import com.megatim.fdxconsultation.model.enums.TypeConfigurationTableauBord;
+import com.megatim.fdxconsultation.model.stats.dto.TableauBordRequest;
+import com.megatim.fdxconsultation.service.ifaces.stats.TableauBordGlobalRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+@SecuredClass(module = AppCommonContext.MODULE_CONSULTATION_WEB, path = "Tableau de bord global", description = "Tableau de bord global")
+@Path("tableau-bord-global")
+public class TableauBordGlobalRSImpl implements TableauBordGlobalRS {
+
+    @Inject
+    RequestHandler requestHandler;
+
+    @Inject
+    private TableauBordManager manager;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @Inject
+    private MapStructMapper mapper;
+
+    @Inject
+    DataConsumptionOperations dataConsumptionOperations;
+
+    @Override
+    public TableauBordSlimDto mapToSlimDto(TableauBord entity) {
+        return mapper.tableauBordToTableauBordSlimDto(entity);
+    }
+
+    @Override
+    public Response save(HttpHeaders headers, TableauBordRequest tableauBordRequest) {
+        return Response.ok(mapToSlimDto(manager.save(tableauBordRequest))).build();
+    }
+
+    @Override
+    public Response update(HttpHeaders headers, Long id, TableauBordRequest tableauBordRequest) {
+        manager.update(id, tableauBordRequest);
+        return Response.ok().build();
+    }
+
+    @Override
+    public Response delete(HttpHeaders headers, Long id) {
+        requestHandler.deleteTableauBord(id);
+        return Response.ok().build();
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, Long id) {
+        return Response.ok(new ConvertedTableauBordResponse(manager.get(id)).tableauBordResponse()).build();
+    }
+
+    @Override
+    public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView finalCriterion = getCriteriaEntityAndAddTypeConfiguration(criteriaFormRequest);
+            List<TableauBordSlimDto> dtos = requestHandler.findTableauBord(new CriteriaFormRequest(finalCriterion));
+            return Response.ok(dtos).build();
+        } catch (CommonApplicationValidationException ex) {
+            throw ex;
+        } catch (Exception ex) {
+            Logger.getLogger(TableauBordGlobalRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pageSize, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView finalCriterion = getCriteriaEntityAndAddTypeConfiguration(criteriaFormRequest);
+            List<TableauBordSlimDto> dtos = requestHandler.findTableauBordWithPagination(new CriteriaFormRequest(finalCriterion),
+                    Arrays.asList(),
+                    pageNumber,
+                    pageSize);
+            return Response.ok(dtos).build();
+        } catch (Exception ex) {
+            Logger.getLogger(TableauBordGlobalRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response getColumns(HttpHeaders headers, String referentielVersion, String codeTypeFichier) {
+        List<ColumnDefinition> colDefs = dataConsumptionOperations.getPrintableColumns(referentielVersion, codeTypeFichier);
+        return Response.ok(commonMapper.columnDefinitionListToColumnDefinitionDtoList(colDefs)).build();
+    }
+
+    @Override
+    public Response getDatas(HttpHeaders headers, String referentielVersion, String codeTypeFichier) {
+        return Response.ok(manager.getDatas(referentielVersion, codeTypeFichier)).build();
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = getCriteriaEntityAndAddTypeConfiguration(criteriaFormRequest);
+            return requestHandler.countTableauBord(new CriteriaFormRequest(criterion));
+        } catch (Exception ex) {
+            Logger.getLogger(TableauBordGlobalRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(TableauBord.class)).build();
+    }
+
+    @Override
+    public Response deleteUserTableauBord(HttpHeaders headers, String userName) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    private CriteriaEntityFromView getCriteriaEntityAndAddTypeConfiguration(CriteriaFormRequest criteriaFormRequest) {
+        CriteriaEntityFromView finalCriterion = new CriteriaEntityFromView();
+        finalCriterion.setCriteriaLogicConnector(CriteriaLogicConnector.AND);
+        finalCriterion.getSubCriterias().add(newCriteriaEntityFromView("typeConfiguration", TypeConfigurationTableauBord.GLOBAL, Operateur.EQUALS));
+
+        if (criteriaFormRequest != null && criteriaFormRequest.getCriteria() != null) {
+            finalCriterion.getSubCriterias().add(criteriaFormRequest.getCriteria());
+        }
+
+        return finalCriterion;
+    }
+
+    private CriteriaEntityFromView newCriteriaEntityFromView(String nomColonne, Object criteriaValue, Operateur operateur) {
+        CriteriaEntityFromView criterion = new CriteriaEntityFromView();
+        criterion.setNomColonne(nomColonne);
+        criterion.setCriteriaValue(criteriaValue);
+        criterion.setOperateur(operateur);
+
+        return criterion;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/stats/TableauBordRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/stats/TableauBordRSImpl.java
new file mode 100644
index 0000000..b006ab1
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/stats/TableauBordRSImpl.java
@@ -0,0 +1,181 @@
+package com.megatim.fdxconsultation.service.impl.stats;
+
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationValidationException;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.helper.DataConsumptionOperations;
+import com.megatim.fdxconsultation.core.ifaces.helper.RequestHandler;
+import com.megatim.fdxconsultation.core.ifaces.stats.TableauBordManager;
+import com.megatim.fdxconsultation.core.impl.stats.ConvertedTableauBordResponse;
+import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.stats.StatResultDto;
+import com.megatim.fdxconsultation.model.dto.stats.TableauBordSlimDto;
+import com.megatim.fdxconsultation.model.enums.TypeConfigurationTableauBord;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import com.megatim.fdxconsultation.model.stats.dto.TableauBordRequest;
+import com.megatim.fdxconsultation.service.ifaces.stats.TableauBordRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.mgt.rs.security.core.common.AuthenticatedUser;
+import com.mgt.rs.security.core.common.SecuredAdmin;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+@SecuredClass(module = AppCommonContext.MODULE_CONSULTATION_WEB, path = "Tableau de bord", description = "Tableau de Bord")
+@Path("tableau-bord")
+//@SecuredAdmin(action = {"consulter", "éditer"})
+public class TableauBordRSImpl implements TableauBordRS {
+
+    @Inject
+    private UserManager userManager;
+
+    @AuthenticatedUser
+    private User utilisateurConnecte;
+
+    @Inject
+    RequestHandler requestHandler;
+
+    @Inject
+    private TableauBordManager manager;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @Inject
+    private MapStructMapper mapper;
+
+    @Inject
+    DataConsumptionOperations dataConsumptionOperations;
+
+    public TableauBordRSImpl() {
+    }
+
+    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
+        utilisateurConnecte = userManager.recuperUtilisateur(username);
+    }
+
+    @Override
+    public TableauBordSlimDto mapToSlimDto(TableauBord entity) {
+        return mapper.tableauBordToTableauBordSlimDto(entity);
+    }
+
+    @Override
+    public Response save(HttpHeaders headers, TableauBordRequest tableauBordRequest) {
+        return Response.ok(mapToSlimDto(manager.save(utilisateurConnecte, tableauBordRequest))).build();
+    }
+
+    @Override
+    public Response update(HttpHeaders headers, Long id, TableauBordRequest tableauBordRequest) {
+        manager.update(id, tableauBordRequest);
+        return Response.ok().build();
+    }
+
+    @Override
+    public Response delete(HttpHeaders headers, Long id) {
+        requestHandler.deleteTableauBord(id);
+        return Response.ok().build();
+    }
+
+    @Override
+    public Response findById(HttpHeaders headers, Long id) {
+        return Response.ok(new ConvertedTableauBordResponse(manager.get(id)).tableauBordResponse()).build();
+    }
+
+    @Override
+    public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+
+            CriteriaEntityFromView finalCriterion = getCriteriaEntityAndAddTypeConfiguration(criteriaFormRequest);
+            List<TableauBordSlimDto> dtos = requestHandler.findTableauBord(new CriteriaFormRequest(finalCriterion));
+
+            return Response.ok(dtos).build();
+        } catch (CommonApplicationValidationException ex) {
+            throw ex;
+        } catch (Exception ex) {
+            Logger.getLogger(TableauBordRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pageSize, CriteriaFormRequest criteriaFormRequest) {
+        try {
+
+            CriteriaEntityFromView finalCriterion = getCriteriaEntityAndAddTypeConfiguration(criteriaFormRequest);
+            List<TableauBordSlimDto> dtos = requestHandler.findTableauBordWithPagination(new CriteriaFormRequest(finalCriterion), Arrays.asList(), pageNumber, pageSize);
+
+            return Response.ok(dtos).build();
+        } catch (Exception ex) {
+            Logger.getLogger(TableauBordRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response getColumns(HttpHeaders headers, String referentielVersion, String codeTypeFichier) {
+        List<ColumnDefinition> colDefs = dataConsumptionOperations.getPrintableColumns(referentielVersion, codeTypeFichier);
+        return Response.ok(commonMapper.columnDefinitionListToColumnDefinitionDtoList(colDefs)).build();
+    }
+
+    @Override
+    public Response getDatas(HttpHeaders headers, String referentielVersion, String codeTypeFichier) {
+        StatResultDto results = manager.getDatas(utilisateurConnecte, referentielVersion, codeTypeFichier);
+        return Response.ok(results).build();
+    }
+
+    @Override
+    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
+        try {
+            CriteriaEntityFromView criterion = getCriteriaEntityAndAddTypeConfiguration(criteriaFormRequest);
+            return requestHandler.countTableauBord(new CriteriaFormRequest(criterion));
+        } catch (Exception ex) {
+            Logger.getLogger(TableauBordRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            throw new CommonApplicationServerException();
+        }
+    }
+
+    @Override
+    public Response getSearchColumns(HttpHeaders headers) {
+        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(TableauBord.class)).build();
+    }
+
+    @Override
+    public Response deleteUserTableauBord(HttpHeaders headers, String userName) {
+        User user = userManager.recuperUtilisateur(userName);
+        manager.deleteUserTableauBord(user);
+
+        return Response.ok().build();
+    }
+
+    private CriteriaEntityFromView getCriteriaEntityAndAddTypeConfiguration(CriteriaFormRequest criteriaFormRequest) {
+
+        CriteriaEntityFromView finalCriterion = new CriteriaEntityFromView();
+        finalCriterion.setCriteriaLogicConnector(CriteriaLogicConnector.AND);
+
+        finalCriterion.getSubCriterias().add(new CriteriaEntityFromView("user.userName", utilisateurConnecte.getUserName(), Operateur.EQUALS));
+        finalCriterion.getSubCriterias().add(new CriteriaEntityFromView("typeConfiguration", TypeConfigurationTableauBord.USER_SPECIFIC, Operateur.EQUALS));
+
+        if (criteriaFormRequest != null && criteriaFormRequest.getCriteria() != null) {
+            finalCriterion.getSubCriterias().add(criteriaFormRequest.getCriteria());
+        }
+        return finalCriterion;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/resolvers/JacksonMapperFormat.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/resolvers/JacksonMapperFormat.java
new file mode 100644
index 0000000..1104420
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/resolvers/JacksonMapperFormat.java
@@ -0,0 +1,26 @@
+package com.megatim.fdxconsultation.service.resolvers;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+//import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import org.apache.camel.component.jackson.JacksonDataFormat;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JacksonMapperFormat {
+
+    public static JacksonDataFormat jacksonDataFormat(Class<?> classe) {
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.registerModule(new JavaTimeModule());
+        mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+
+        JacksonDataFormat jacksonDataFormat = new JacksonDataFormat();
+        jacksonDataFormat.setObjectMapper(mapper);
+        jacksonDataFormat.setUnmarshalType(classe);
+
+        return jacksonDataFormat;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/resolvers/ObjectMapperContextResolver.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/resolvers/ObjectMapperContextResolver.java
new file mode 100644
index 0000000..1fd1fc0
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/resolvers/ObjectMapperContextResolver.java
@@ -0,0 +1,33 @@
+package com.megatim.fdxconsultation.service.resolvers;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.jsr310.JSR310Module;
+import javax.ws.rs.ext.ContextResolver;
+import javax.ws.rs.ext.Provider;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Provider
+public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {
+
+    private final ObjectMapper mapper;
+
+    public ObjectMapperContextResolver() {
+        mapper = new ObjectMapper();
+        // Now you should use JavaTimeModule instead
+        mapper.registerModule(new JSR310Module());
+//        mapper.activateDefaultTyping(
+//                mapper.getPolymorphicTypeValidator(),
+//                ObjectMapper.DefaultTyping.OBJECT_AND_NON_CONCRETE
+//        );
+        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
+    }
+
+    @Override
+    public ObjectMapper getContext(Class<?> type) {
+        return mapper;
+    }
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/supervision/SupervisionRSImpl.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/supervision/SupervisionRSImpl.java
new file mode 100644
index 0000000..520cf76
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/supervision/SupervisionRSImpl.java
@@ -0,0 +1,78 @@
+package com.megatim.fdxconsultation.service.supervision;
+
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.supervision.StandaloneServerStateEntityManager;
+import com.megatim.fdxconsultation.core.ifaces.supervision.TransfertManager;
+import com.megatim.fdxconsultation.model.supervision.SupervisionData;
+import com.megatim.fdxconsultation.model.supervision.Transfert;
+import com.megatim.fdxconsultation.model.supervision.dto.StandaloneDashboardRequest;
+import com.megatim.fdxconsultation.model.supervision.dto.SupervisionFilterModalFormRequest;
+import com.megatim.fdxconsultation.service.ifaces.supervision.SupervisionRS;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.util.List;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author Gabuntu
+ */
+//@RequestScoped
+@SecuredClass(module = AppCommonContext.MODULE_INFRASTRUCTURES, path = "Fdx serveur", description = "Fdx serveur")
+@Path("supervision")
+public class SupervisionRSImpl implements SupervisionRS {
+
+    @Inject
+    private UserManager userManager;
+
+    @Inject
+    private TransfertManager transfertManager;
+
+    @Inject
+    private StandaloneServerStateEntityManager standaloneServerStateEntityManager;
+
+    public SupervisionRSImpl() {
+        super();
+    }
+
+    @Override
+    public Response supervisionData(HttpHeaders headers, SupervisionFilterModalFormRequest supervisionFilterModalFormRequest) {
+        return Response
+                .ok(supervisionData(supervisionFilterModalFormRequest))
+                .build();
+    }
+
+    @Override
+    public Response standaloneState(HttpHeaders headers) {
+        return Response.ok(standaloneServerStateEntityManager.getCurrentStandaloneServerStateEntity()).build();
+    }
+
+    @Override
+    public Response dashboard(HttpHeaders headers, StandaloneDashboardRequest standaloneDashboardRequest) {
+        return Response
+                .ok(transfertManager.standaloneDashboardResponse(standaloneDashboardRequest))
+                .build();
+    }
+
+    @Override
+    public Response filterTransferts(HttpHeaders headers, SupervisionFilterModalFormRequest supervisionFilterModalFormRequest) {
+        return Response.ok(transfertManager.filter(supervisionFilterModalFormRequest)).build();
+    }
+
+    private SupervisionData supervisionData(SupervisionFilterModalFormRequest supervisionFilterModalFormRequest) {
+
+        //List<Transfert> transferts = transfertManager.findAll();
+        List<Transfert> transferts = transfertManager.filter(supervisionFilterModalFormRequest);
+        transferts.sort((t1, t2) -> Long.compare(t2.getId(), t1.getId()));
+
+        SupervisionData supervisionData = new SupervisionData();
+        supervisionData.setTransferts(transfertManager.filter(supervisionFilterModalFormRequest));
+        supervisionData.setStandaloneServerState(standaloneServerStateEntityManager.getCurrentStandaloneServerStateEntity());
+
+        return supervisionData;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/resources/application.properties b/fdx-consultation/fdxconsultation-service-impl/src/main/resources/application.properties
new file mode 100644
index 0000000..dabd265
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/resources/application.properties
@@ -0,0 +1,10 @@
+authentication.jwt.secret = secret
+authentication.jwt.issuer = http://example.org
+authentication.jwt.audience =  http://example.org
+authentication.jwt.clockSkew = 10
+authentication.jwt.validFor = 600000
+authentication.jwt.validForRefresh = 900000
+authentication.jwt.refreshLimit = 1
+authentication.jwt.claimNames.authorities = authorities
+authentication.jwt.claimNames.refreshCount = refreshCount
+authentication.jwt.claimNames.refreshLimit = refreshLimit
\ No newline at end of file
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/resources/natureProductionFichiers.xml b/fdx-consultation/fdxconsultation-service-impl/src/main/resources/natureProductionFichiers.xml
new file mode 100644
index 0000000..2d6f986
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/resources/natureProductionFichiers.xml
@@ -0,0 +1,168 @@
+<NatureProductionFichiersToExport>
+    <natureProductionFichierList>
+        <typeFichier>
+            <code>DGICON</code>
+            <libelle>FICHIER DU CONTRIBUABLE ACTIF</libelle>
+            <description>FICHIER DU CONTRIBUABLE ACTIF</description>
+            <participant>
+                <code>DGI</code>
+                <libelle>DIRECTION GENERALE DES IMPOTS</libelle>
+                <description>DIRECTION GENERALE DES IMPOTS</description>
+                <referentiel>
+                    <version>000001</version>
+                    <description>REFERENTIEL DE DEMARRAGE</description>
+                    <statutReferentiel>ARCHIVE</statutReferentiel>
+                    <dateMiseAjour>2024-09-18T16:19:01.323</dateMiseAjour>
+                    <dateGeneration>2024-09-18T16:13:42.673</dateGeneration>
+                    <lastModifiedBy>AdminMinfi</lastModifiedBy>
+                </referentiel>
+                <pays>
+                    <code>CM</code>
+                    <libelle>CAMEROUN</libelle>
+                    <referentiel>
+                        <version>000001</version>
+                        <description>REFERENTIEL DE DEMARRAGE</description>
+                        <statutReferentiel>ARCHIVE</statutReferentiel>
+                        <dateMiseAjour>2024-09-18T16:19:01.323</dateMiseAjour>
+                        <dateGeneration>2024-09-18T16:13:42.673</dateGeneration>
+                        <lastModifiedBy>AdminMinfi</lastModifiedBy>
+                    </referentiel>
+                    <dateCreation>18/09/2024 15:37:15</dateCreation>
+                    <dateMiseAjour>18/09/2024 15:37:15</dateMiseAjour>
+                    <createBy>AdminMinfi</createBy>
+                    <lastModifiedBy>AdminMinfi</lastModifiedBy>
+                </pays>
+                <dateCreation>18/09/2024 15:37:47</dateCreation>
+                <dateMiseAjour>18/09/2024 15:37:47</dateMiseAjour>
+                <createBy>AdminMinfi</createBy>
+                <lastModifiedBy>AdminMinfi</lastModifiedBy>
+            </participant>
+            <referentiel>
+                <version>000001</version>
+                <description>REFERENTIEL DE DEMARRAGE</description>
+                <statutReferentiel>ARCHIVE</statutReferentiel>
+                <dateMiseAjour>2024-09-18T16:19:01.323</dateMiseAjour>
+                <dateGeneration>2024-09-18T16:13:42.673</dateGeneration>
+                <lastModifiedBy>AdminMinfi</lastModifiedBy>
+            </referentiel>
+            <categorieFichier>STRUCTURE</categorieFichier>
+            <extensionFichier>
+                <extension>txt</extension>
+                <libelle>Fichier texte</libelle>
+                <typeExtension>TEXTE</typeExtension>
+                <referentiel>
+                    <version>000001</version>
+                    <description>REFERENTIEL DE DEMARRAGE</description>
+                    <statutReferentiel>ARCHIVE</statutReferentiel>
+                    <dateMiseAjour>2024-09-18T16:19:01.323</dateMiseAjour>
+                    <dateGeneration>2024-09-18T16:13:42.673</dateGeneration>
+                    <lastModifiedBy>AdminMinfi</lastModifiedBy>
+                </referentiel>
+                <dateCreation>18/09/2024 15:48:51</dateCreation>
+                <dateMiseAjour>18/09/2024 15:48:51</dateMiseAjour>
+                <createBy>AdminMinfi</createBy>
+                <lastModifiedBy>AdminMinfi</lastModifiedBy>
+            </extensionFichier>
+            <dateCreation>18/09/2024 15:49:48</dateCreation>
+            <dateMiseAjour>18/09/2024 15:49:48</dateMiseAjour>
+            <createBy>AdminMinfi</createBy>
+            <lastModifiedBy>AdminMinfi</lastModifiedBy>
+        </typeFichier>
+        <referentiel>
+            <version>000034</version>
+            <description>REF000034</description>
+            <statutReferentiel>ARCHIVE</statutReferentiel>
+            <dateMiseAjour>2024-10-01T09:32:06.177</dateMiseAjour>
+            <dateGeneration>2024-09-30T17:46:22.75</dateGeneration>
+            <lastModifiedBy>AdminMinfi</lastModifiedBy>
+        </referentiel>
+        <natureProduction>CUMMULATIVE</natureProduction>
+        <dateCreation>30/09/2024 14:10:31</dateCreation>
+        <dateMiseAjour>30/09/2024 14:10:31</dateMiseAjour>
+        <createBy>AdminMinfi</createBy>
+        <lastModifiedBy>AdminMinfi</lastModifiedBy>
+    </natureProductionFichierList>
+    <natureProductionFichierList>
+        <typeFichier>
+            <code>DGICON</code>
+            <libelle>FICHIER DU CONTRIBUABLE ACTIF</libelle>
+            <description>FICHIER DU CONTRIBUABLE ACTIF</description>
+            <participant>
+                <code>DGI</code>
+                <libelle>DIRECTION GENERALE DES IMPOTS</libelle>
+                <description>DIRECTION GENERALE DES IMPOTS</description>
+                <referentiel>
+                    <version>000001</version>
+                    <description>REFERENTIEL DE DEMARRAGE</description>
+                    <statutReferentiel>ARCHIVE</statutReferentiel>
+                    <dateMiseAjour>2024-09-18T16:19:01.323</dateMiseAjour>
+                    <dateGeneration>2024-09-18T16:13:42.673</dateGeneration>
+                    <lastModifiedBy>AdminMinfi</lastModifiedBy>
+                </referentiel>
+                <pays>
+                    <code>CM</code>
+                    <libelle>CAMEROUN</libelle>
+                    <referentiel>
+                        <version>000001</version>
+                        <description>REFERENTIEL DE DEMARRAGE</description>
+                        <statutReferentiel>ARCHIVE</statutReferentiel>
+                        <dateMiseAjour>2024-09-18T16:19:01.323</dateMiseAjour>
+                        <dateGeneration>2024-09-18T16:13:42.673</dateGeneration>
+                        <lastModifiedBy>AdminMinfi</lastModifiedBy>
+                    </referentiel>
+                    <dateCreation>18/09/2024 15:37:15</dateCreation>
+                    <dateMiseAjour>18/09/2024 15:37:15</dateMiseAjour>
+                    <createBy>AdminMinfi</createBy>
+                    <lastModifiedBy>AdminMinfi</lastModifiedBy>
+                </pays>
+                <dateCreation>18/09/2024 15:37:47</dateCreation>
+                <dateMiseAjour>18/09/2024 15:37:47</dateMiseAjour>
+                <createBy>AdminMinfi</createBy>
+                <lastModifiedBy>AdminMinfi</lastModifiedBy>
+            </participant>
+            <referentiel>
+                <version>000001</version>
+                <description>REFERENTIEL DE DEMARRAGE</description>
+                <statutReferentiel>ARCHIVE</statutReferentiel>
+                <dateMiseAjour>2024-09-18T16:19:01.323</dateMiseAjour>
+                <dateGeneration>2024-09-18T16:13:42.673</dateGeneration>
+                <lastModifiedBy>AdminMinfi</lastModifiedBy>
+            </referentiel>
+            <categorieFichier>STRUCTURE</categorieFichier>
+            <extensionFichier>
+                <extension>txt</extension>
+                <libelle>Fichier texte</libelle>
+                <typeExtension>TEXTE</typeExtension>
+                <referentiel>
+                    <version>000001</version>
+                    <description>REFERENTIEL DE DEMARRAGE</description>
+                    <statutReferentiel>ARCHIVE</statutReferentiel>
+                    <dateMiseAjour>2024-09-18T16:19:01.323</dateMiseAjour>
+                    <dateGeneration>2024-09-18T16:13:42.673</dateGeneration>
+                    <lastModifiedBy>AdminMinfi</lastModifiedBy>
+                </referentiel>
+                <dateCreation>18/09/2024 15:48:51</dateCreation>
+                <dateMiseAjour>18/09/2024 15:48:51</dateMiseAjour>
+                <createBy>AdminMinfi</createBy>
+                <lastModifiedBy>AdminMinfi</lastModifiedBy>
+            </extensionFichier>
+            <dateCreation>18/09/2024 15:49:48</dateCreation>
+            <dateMiseAjour>18/09/2024 15:49:48</dateMiseAjour>
+            <createBy>AdminMinfi</createBy>
+            <lastModifiedBy>AdminMinfi</lastModifiedBy>
+        </typeFichier>
+        <referentiel>
+            <version>000035</version>
+            <description>REF0000035</description>
+            <statutReferentiel>EN_COURS</statutReferentiel>
+            <dateMiseAjour>2024-10-01T09:32:06.177</dateMiseAjour>
+            <dateGeneration>2024-10-01T09:32:06.127</dateGeneration>
+            <lastModifiedBy>AdminMinfi</lastModifiedBy>
+        </referentiel>
+        <natureProduction>CUMMULATIVE</natureProduction>
+        <dateCreation>30/09/2024 17:48:04</dateCreation>
+        <dateMiseAjour>01/10/2024 09:31:58</dateMiseAjour>
+        <createBy>AdminMinfi</createBy>
+        <lastModifiedBy>AdminMinfi</lastModifiedBy>
+    </natureProductionFichierList>
+</NatureProductionFichiersToExport>
\ No newline at end of file
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/webapp/WEB-INF/beans.xml b/fdx-consultation/fdxconsultation-service-impl/src/main/webapp/WEB-INF/beans.xml
new file mode 100644
index 0000000..f8e2542
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/webapp/WEB-INF/beans.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd"
+       bean-discovery-mode="all">
+</beans>
\ No newline at end of file
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/webapp/WEB-INF/web.xml b/fdx-consultation/fdxconsultation-service-impl/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..4ee0b6f
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app version="4.0" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
+    <session-config>
+        <session-timeout>
+            30
+        </session-timeout>
+    </session-config>
+    <filter>
+        <filter-name>CorsFilter</filter-name>
+        <filter-class>com.megatim.fdxconsultation.service.impl.filters.CORSFilter</filter-class>
+    </filter>
+    <filter-mapping>
+        <filter-name>CorsFilter</filter-name>
+        <url-pattern>/*</url-pattern>
+    </filter-mapping>
+</web-app>
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/webapp/index.html b/fdx-consultation/fdxconsultation-service-impl/src/main/webapp/index.html
new file mode 100644
index 0000000..f67377e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/webapp/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>API GAD </title>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    </head>
+    <body>
+        <h1>API GAD PROJECT </h1>
+    </body>
+</html>
diff --git a/fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools-entities/pom.xml b/fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools-entities/pom.xml
new file mode 100644
index 0000000..cdd67fc
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools-entities/pom.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.megatim.fdxconsultation</groupId>
+        <artifactId>fdxconsultation-tools-module</artifactId>
+        <version>1.0</version>
+    </parent>
+    <artifactId>fdxconsultation-tools-entities</artifactId>
+    <version>1.0</version>
+    <packaging>jar</packaging>
+    <name>fdxconsultation-tools-entities</name>    
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>2.3.2</version>
+                <configuration>
+                    <debug>false</debug>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+    </properties>    
+    <dependencies>
+         <dependency>
+            <groupId>com.megatim.fdxconsultation.model</groupId>
+            <artifactId>fdxconsultation-model</artifactId>
+            <version>1.0</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxconsultation.reporting</groupId>
+            <artifactId>fdxconsultation-reporting</artifactId>
+            <version>1.0</version>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools-entities/src/main/java/com/megatim/fdxconsultation/tools/CommonsToolsEntity.java b/fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools-entities/src/main/java/com/megatim/fdxconsultation/tools/CommonsToolsEntity.java
new file mode 100644
index 0000000..d6f20dd
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools-entities/src/main/java/com/megatim/fdxconsultation/tools/CommonsToolsEntity.java
@@ -0,0 +1,430 @@
+package com.megatim.fdxconsultation.tools;
+
+import com.megatim.fdxcommons.model.referentiel.*;
+import com.megatim.fdxconsultation.reporting.model.administration.JournalActionUtilisateurReporting;
+import com.megatim.fdxconsultation.reporting.model.administration.RoleReporting;
+import com.megatim.fdxconsultation.reporting.model.administration.JournalConnexionUtilisateurReporting;
+import com.megatim.fdxconsultation.reporting.model.administration.UserReporting;
+import com.megatim.fdxcommons.tools.CommonsTools;
+import com.megatim.fdxcommons.tools.context.AppContext;
+import com.megatim.fdxconsultation.model.administration.*;
+import com.megatim.fdxconsultation.model.api.token.ApiToken;
+import com.megatim.fdxconsultation.reporting.model.api.token.ApiTokenReporting;
+import com.megatim.fdxconsultation.model.configuration.CodeStatutHttp;
+import com.megatim.fdxconsultation.model.log.ApiUserActionLog;
+import com.megatim.fdxconsultation.reporting.model.configuration.CodeStatutHttpReporting;
+import com.megatim.fdxconsultation.reporting.model.log.ApiUserActionLogReporting;
+import com.megatim.fdxconsultation.reporting.model.referentiel.ExtensionFichierReporting;
+import com.megatim.fdxconsultation.reporting.model.referentiel.*;
+import java.util.ArrayList;
+import java.util.List;
+
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+/**
+ *
+ * @author ABEGA
+ */
+public class CommonsToolsEntity {
+
+    /**
+     * Methode permettant de convertir une liste de roles en liste de RoleReporting
+     * @param objets
+     * @return 
+     */
+    public static List<RoleReporting> convertToRoleReporting(List<Role> objets){
+        List<RoleReporting> liste = new ArrayList<>();
+        RoleReporting reporting = null;
+        if(objets != null){
+            for(Role obj : objets){
+                reporting = new RoleReporting();
+                reporting.setLibelle(obj.getLibelle());
+                reporting.setDescription(obj.getDescription());
+                reporting.setNbreUtilisateur(obj.getNbreUtilisateur());
+                reporting.setEtatOperation(obj.getEtatOperation() != null ? obj.getEtatOperation().toString() : null);
+                reporting.setDateCreation(obj.getDateCreation() != null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateCreation()) : null);
+                reporting.setUtilisateurCreation(obj.getUtilisateurCreation());
+                reporting.setDateDerniereModification(obj.getDateDerniereModification() != null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateDerniereModification()) : null);
+                reporting.setUtilisateurModification(obj.getUtilisateurModification());
+                liste.add(reporting);
+            }
+        }
+        return liste;
+    }
+    
+    /**
+     * Methode permettant de convertir une liste de user en liste de UserReporting
+     * @param objets
+     * @return 
+     */
+    public static List<UserReporting> convertToUserReporting(List<User> objets){
+        List<UserReporting> liste = new ArrayList<>();
+        UserReporting reporting = null;
+        if(objets != null){
+            for(User obj : objets){
+                reporting = new UserReporting();
+                reporting.setLastName(obj.getLastName());
+                reporting.setFirstName(obj.getFirstName());
+                reporting.setUserName(obj.getUserName());
+                reporting.setRole(obj.getRole() != null ? obj.getRole().getLibelle() : null);
+                reporting.setEtatOperation(obj.getEtatOperation() != null ? obj.getEtatOperation().name() : null);
+                reporting.setDateCreation(obj.getDateCreation() != null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateCreation()) : null);
+                reporting.setUtilisateurCreation(obj.getUtilisateurCreation());
+                reporting.setDateDerniereModification(obj.getDateDerniereModification() != null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateDerniereModification()) : null);
+                reporting.setUtilisateurModification(obj.getUtilisateurModification());
+                liste.add(reporting);
+            }
+        }
+        return liste;
+    }
+    
+    /**
+     * Methode permettant de convertir une liste de user en liste de CodeStatutHttpReporting
+     * @param objets
+     * @return 
+     */
+    public static List<CodeStatutHttpReporting> convertToCodeStatutHttpReporting(List<CodeStatutHttp> objets){
+        List<CodeStatutHttpReporting> liste = new ArrayList<>();
+        CodeStatutHttpReporting reporting = null;
+        if(objets != null){
+            for(CodeStatutHttp obj : objets){
+                reporting = new CodeStatutHttpReporting();
+                reporting.setCode(obj.getCode());
+                reporting.setLibelle(obj.getLibelle());
+                reporting.setDateCreation(obj.getDateCreation() != null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateCreation()) : null);
+                reporting.setUtilisateurCreation(obj.getUtilisateurCreation());
+                reporting.setDateDerniereModification(obj.getDateDerniereModification() != null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateDerniereModification()) : null);
+                reporting.setUtilisateurModification(obj.getUtilisateurModification());
+                liste.add(reporting);
+            }
+        }
+        return liste;
+    }
+    
+    /**
+     * Methode permettant de convertir une liste de user en liste de ApiTokenReporting
+     * @param objets
+     * @return 
+     */
+    public static List<ApiTokenReporting> convertToApiTokenReporting(List<ApiToken> objets){
+        List<ApiTokenReporting> liste = new ArrayList<>();
+        ApiTokenReporting reporting = null;
+        if(objets != null){
+            for(ApiToken obj : objets){
+                reporting = new ApiTokenReporting();
+                reporting.setParticipant(obj.getParticipant().getCode());
+                reporting.setApiTokenStatut(obj.getApiTokenStatut().getValue());
+                reporting.setDateCreation(obj.getDateCreation() != null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateCreation()) : null);
+                reporting.setUtilisateurCreation(obj.getUtilisateurCreation());
+                reporting.setDateDerniereModification(obj.getDateDerniereModification() != null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateDerniereModification()) : null);
+                reporting.setUtilisateurModification(obj.getUtilisateurModification());
+                liste.add(reporting);
+            }
+        }
+        return liste;
+    }
+    
+    /**
+     * Methode permettant de convertir une liste de journalActionUtilisateur en liste de JournalActionUtilisateurReporting
+     * @param objets
+     * @return 
+     */
+    public static List<JournalActionUtilisateurReporting> convertToJournalActionUtilisateurReporting(List<JournalActionUtilisateur> objets){
+        List<JournalActionUtilisateurReporting> liste = new ArrayList<>();
+        JournalActionUtilisateurReporting reporting = null;
+        if(objets != null){
+            for(JournalActionUtilisateur obj : objets){
+                reporting = new JournalActionUtilisateurReporting();
+                reporting.setDateAction(obj.getDateAction() != null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateAction()) : null);
+                reporting.setHttpMethod(obj.getHttpMethod());
+                reporting.setIpAddress(obj.getIpAddress());
+                reporting.setMessage(obj.getMessage());
+                reporting.setRelativePath(obj.getRelativePath());
+                reporting.setStatus(obj.getStatus());
+                reporting.setUserAgent(obj.getUserAgent());
+                reporting.setUserName(obj.getUserName());
+                liste.add(reporting);
+            }
+        }
+        return liste;
+    }
+    
+    /**
+     * Methode permettant de convertir une liste de journalActionUtilisateur en liste de ApiUserActionLogReporting
+     * @param objets
+     * @return 
+     */
+    public static List<ApiUserActionLogReporting> convertToApiUserActionLogReporting(List<ApiUserActionLog> objets){
+        List<ApiUserActionLogReporting> liste = new ArrayList<>();
+        ApiUserActionLogReporting reporting = null;
+        if(objets != null){
+            for(ApiUserActionLog obj : objets){
+                reporting = new ApiUserActionLogReporting();
+                reporting.setDateAction(obj.getDateAction() != null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateAction()) : null);
+                reporting.setHttpMethod(obj.getHttpMethod());
+                reporting.setIpAddress(obj.getIpAddress());
+                reporting.setMessage(obj.getMessage());
+                reporting.setRelativePath(obj.getRelativePath());
+                reporting.setStatus(obj.getStatus());
+                reporting.setUserAgent(obj.getUserAgent());
+                reporting.setUserName(obj.getUserName());
+                liste.add(reporting);
+            }
+        }
+        return liste;
+    }
+    
+    /**
+     * Methode permettant de convertir une liste de journalConnexionUtilisateur en liste de JournalConnexionUtilisateurReporting
+     * @param objets
+     * @return 
+     */
+    public static List<JournalConnexionUtilisateurReporting> convertToJournalConnexionUtilisateurReporting(List<JournalConnexionUtilisateur> objets){
+        List<JournalConnexionUtilisateurReporting> liste = new ArrayList<>();
+        JournalConnexionUtilisateurReporting reporting = null;
+        if(objets != null){
+            for(JournalConnexionUtilisateur obj : objets){
+                reporting = new JournalConnexionUtilisateurReporting();
+                reporting.setDateAction(obj.getDateAction() != null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateAction()) : null);
+                reporting.setHttpMethod(obj.getHttpMethod());
+                reporting.setIpAddress(obj.getIpAddress());
+                reporting.setMessage(obj.getMessage());
+                reporting.setRelativePath(obj.getRelativePath());
+                reporting.setStatus(obj.getStatus());
+                reporting.setUserAgent(obj.getUserAgent());
+                reporting.setUserName(obj.getUserName());
+                liste.add(reporting);
+            }
+        }
+        return liste;
+    }
+    
+    /**
+     * Methode permettant de convertir une liste de user en liste de PaysReporting
+     * @param objets
+     * @return 
+     */
+    public static List<PaysReporting> convertToPaysReporting(List<Pays> objets){
+        List<PaysReporting> liste = new ArrayList<>();
+        PaysReporting reporting = null;
+        if(objets != null){
+            for(Pays obj : objets){
+                reporting = new PaysReporting();
+                reporting.setCode(obj.getCode());
+                reporting.setLibelle(obj.getLibelle());
+                reporting.setReferentiel(obj.getReferentiel() != null ? obj.getReferentiel().getVersion() : null);
+                reporting.setDateCreation(obj.getDateCreation() != null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateCreation()) : null);
+                reporting.setUtilisateurCreation(obj.getCreateBy());
+                reporting.setDateDerniereModification(obj.getDateMiseAjour()!= null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateMiseAjour()) : null);
+                reporting.setUtilisateurModification(obj.getLastModifiedBy());
+                liste.add(reporting);
+            }
+        }
+        return liste;
+    }
+    
+    /**
+     * Methode permettant de convertir une liste de user en liste de ExtensionFichierReporting
+     * @param objets
+     * @return 
+     */
+    public static List<ExtensionFichierReporting> convertToExtensionFichierReporting(List<ExtensionFichier> objets){
+        List<ExtensionFichierReporting> liste = new ArrayList<>();
+        ExtensionFichierReporting reporting = null;
+        if(objets != null){
+            for(ExtensionFichier obj : objets){
+                reporting = new ExtensionFichierReporting();
+                reporting.setLibelle(obj.getLibelle());
+                reporting.setTypeExtension(obj.getTypeExtension().getValue());
+                reporting.setExtension(obj.getExtension());
+                reporting.setReferentiel(obj.getReferentiel() != null ? obj.getReferentiel().getVersion() : null);
+                reporting.setDateCreation(obj.getDateCreation() != null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateCreation()) : null);
+                reporting.setUtilisateurCreation(obj.getCreateBy());
+                reporting.setDateDerniereModification(obj.getDateMiseAjour()!= null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateMiseAjour()) : null);
+                reporting.setUtilisateurModification(obj.getLastModifiedBy());
+                liste.add(reporting);
+            }
+        }
+        return liste;
+    }
+    
+    /**
+     * Methode permettant de convertir une liste de user en liste de GroupeNoeudReporting
+     * @param objets
+     * @return 
+     */
+    public static List<GroupeNoeudReporting> convertToGroupeNoeudReporting(List<GroupeNoeud> objets){
+        List<GroupeNoeudReporting> liste = new ArrayList<>();
+        GroupeNoeudReporting reporting = null;
+        if(objets != null){
+            for(GroupeNoeud obj : objets){
+                reporting = new GroupeNoeudReporting();
+                reporting.setCode(obj.getCode());
+                reporting.setLibelle(obj.getLibelle());
+                reporting.setReferentiel(obj.getReferentiel() != null ? obj.getReferentiel().getVersion() : null);
+                reporting.setDateCreation(obj.getDateCreation() != null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateCreation()) : null);
+                reporting.setUtilisateurCreation(obj.getCreateBy());
+                reporting.setDateDerniereModification(obj.getDateMiseAjour()!= null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateMiseAjour()) : null);
+                reporting.setUtilisateurModification(obj.getLastModifiedBy());
+                liste.add(reporting);
+            }
+        }
+        return liste;
+    }
+    
+    /**
+     * Methode permettant de convertir une liste de user en liste de GroupeParticipantReporting
+     * @param objets
+     * @return 
+     */
+    public static List<GroupeParticipantReporting> convertToGroupeParticipantReporting(List<GroupeParticipant> objets){
+        List<GroupeParticipantReporting> liste = new ArrayList<>();
+        GroupeParticipantReporting reporting = null;
+        if(objets != null){
+            for(GroupeParticipant obj : objets){
+                reporting = new GroupeParticipantReporting();
+                reporting.setCode(obj.getCode());
+                reporting.setLibelle(obj.getLibelle());
+                reporting.setReferentiel(obj.getReferentiel() != null ? obj.getReferentiel().getVersion() : null);
+                reporting.setDateCreation(obj.getDateCreation() != null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateCreation()) : null);
+                reporting.setUtilisateurCreation(obj.getCreateBy());
+                reporting.setDateDerniereModification(obj.getDateMiseAjour()!= null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateMiseAjour()) : null);
+                reporting.setUtilisateurModification(obj.getLastModifiedBy());
+                liste.add(reporting);
+            }
+        }
+        return liste;
+    }
+    
+    /**
+     * Methode permettant de convertir une liste de user en liste de NoeudReporting
+     * @param objets
+     * @return 
+     */
+    public static List<NoeudReporting> convertToNoeudReporting(List<Noeud> objets){
+        List<NoeudReporting> liste = new ArrayList<>();
+        NoeudReporting reporting = null;
+        if(objets != null){
+            for(Noeud obj : objets){
+                reporting = new NoeudReporting();
+                reporting.setCode(obj.getCode());
+                reporting.setLibelle(obj.getLibelle());                
+                reporting.setParticipant(obj.getParticipant() != null ? obj.getParticipant().getCode(): null);
+                reporting.setReferentiel(obj.getReferentiel() != null ? obj.getReferentiel().getVersion() : null);
+                reporting.setDateCreation(obj.getDateCreation() != null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateCreation()) : null);
+                reporting.setUtilisateurCreation(obj.getCreateBy());
+                reporting.setDateDerniereModification(obj.getDateMiseAjour()!= null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateMiseAjour()) : null);
+                reporting.setUtilisateurModification(obj.getLastModifiedBy());
+                liste.add(reporting);
+            }
+        }
+        return liste;
+    }
+    
+    /**
+     * Methode permettant de convertir une liste de user en liste de ParticipantReporting
+     * @param objets
+     * @return 
+     */
+    public static List<ParticipantReporting> convertToParticipantReporting(List<Participant> objets){
+        List<ParticipantReporting> liste = new ArrayList<>();
+        ParticipantReporting reporting = null;
+        if(objets != null){
+            for(Participant obj : objets){
+                reporting = new ParticipantReporting();
+                reporting.setCode(obj.getCode());
+                reporting.setLibelle(obj.getLibelle());                
+                reporting.setPays(obj.getPays() != null ? obj.getPays().getCode() : null);                
+                reporting.setReferentiel(obj.getReferentiel() != null ? obj.getReferentiel().getVersion() : null);
+                reporting.setDateCreation(obj.getDateCreation() != null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateCreation()) : null);
+                reporting.setUtilisateurCreation(obj.getCreateBy());
+                reporting.setDateDerniereModification(obj.getDateMiseAjour()!= null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateMiseAjour()) : null);
+                reporting.setUtilisateurModification(obj.getLastModifiedBy());
+                liste.add(reporting);
+            }
+        }
+        return liste;
+    }
+    
+    /**
+     * Methode permettant de convertir une liste de user en liste de ReferentielReporting
+     * @param objets
+     * @return 
+     */
+    public static List<ReferentielReporting> convertToReferentielReporting(List<Referentiel> objets){
+        List<ReferentielReporting> liste = new ArrayList<>();
+        ReferentielReporting reporting = null;
+        if(objets != null){
+            for(Referentiel obj : objets){
+                reporting = new ReferentielReporting();
+                reporting.setVersion(obj.getVersion());
+                reporting.setDescription(obj.getDescription());
+                reporting.setStatutReferentiel(obj.getStatutReferentiel() != null ? obj.getStatutReferentiel().getValue(): null);
+                reporting.setDateCreation(obj.getDateCreation() != null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateCreation()) : null);
+                reporting.setUtilisateurCreation(obj.getCreateBy());
+                reporting.setDateDerniereModification(obj.getDateMiseAjour()!= null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateMiseAjour()) : null);
+                reporting.setUtilisateurModification(obj.getLastModifiedBy());
+                liste.add(reporting);
+            }
+        }
+        return liste;
+    }
+    
+    /**
+     * Methode permettant de convertir une liste de user en liste de RoutageReporting
+     * @param objets
+     * @return 
+     */
+    public static List<RoutageReporting> convertToRoutageReporting(List<Routage> objets){
+        List<RoutageReporting> liste = new ArrayList<>();
+        RoutageReporting reporting = null;
+        if(objets != null){
+            for(Routage obj : objets){
+                reporting = new RoutageReporting();
+                reporting.setCode(obj.getTypeFichier() != null ? obj.getTypeFichier().getCode(): null);
+                reporting.setCategorie(obj.getTypeFichier() != null ? obj.getTypeFichier().getCategorieFichier().toString() : null);
+                reporting.setExtension(obj.getTypeFichier() != null ? obj.getTypeFichier().getExtensionFichier().toString() : null);
+                reporting.setLibelle(obj.getTypeFichier() != null ? obj.getTypeFichier().getLibelle() : null);
+                reporting.setParticipant(obj.getTypeFichier() != null ? obj.getTypeFichier().getParticipant().getCode() : null);
+                reporting.setReferentiel(obj.getReferentiel() != null ? obj.getReferentiel().getVersion() : null);
+                reporting.setDateCreation(obj.getDateCreation() != null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateCreation()) : null);
+                reporting.setUtilisateurCreation(obj.getCreateBy());
+                reporting.setDateDerniereModification(obj.getDateMiseAjour()!= null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateMiseAjour()) : null);
+                reporting.setUtilisateurModification(obj.getLastModifiedBy());
+                liste.add(reporting);
+            }
+        }
+        return liste;
+    }
+    
+    /**
+     * Methode permettant de convertir une liste de user en liste de TypeFichierReporting
+     * @param objets
+     * @return 
+     */
+    public static List<TypeFichierReporting> convertToTypeFichierReporting(List<TypeFichier> objets){
+        List<TypeFichierReporting> liste = new ArrayList<>();
+        TypeFichierReporting reporting = null;
+        if(objets != null){
+            for(TypeFichier obj : objets){
+                reporting = new TypeFichierReporting();
+                reporting.setCode(obj.getCode());
+                reporting.setLibelle(obj.getLibelle());                
+                reporting.setCategorie(obj.getCategorieFichier() != null ? obj.getCategorieFichier().toString() : null);
+                reporting.setExtension(obj.getExtensionFichier()!= null ? obj.getExtensionFichier().toString() : null);
+                reporting.setParticipant(obj.getParticipant() != null ? obj.getParticipant().toString() : null);
+                reporting.setReferentiel(obj.getReferentiel() != null ? obj.getReferentiel().getVersion() : null);
+                reporting.setDateCreation(obj.getDateCreation() != null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateCreation()) : null);
+                reporting.setUtilisateurCreation(obj.getCreateBy());
+                reporting.setDateDerniereModification(obj.getDateMiseAjour()!= null ? CommonsTools.formaterDate(AppContext.FORMAT_DATE_HEURE_CLASSIQUE, obj.getDateMiseAjour()) : null);
+                reporting.setUtilisateurModification(obj.getLastModifiedBy());
+                liste.add(reporting);
+            }
+        }
+        return liste;
+    }
+    
+}
diff --git a/fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools-entities/src/main/java/com/megatim/fdxconsultation/tools/context/AppContextEntity.java b/fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools-entities/src/main/java/com/megatim/fdxconsultation/tools/context/AppContextEntity.java
new file mode 100644
index 0000000..ee4854d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools-entities/src/main/java/com/megatim/fdxconsultation/tools/context/AppContextEntity.java
@@ -0,0 +1,16 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconsultation.tools.context;
+
+import java.io.File;
+
+/**
+ *
+ * @author ASUS
+ */
+public class AppContextEntity {
+
+    
+}
diff --git a/fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools/pom.xml b/fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools/pom.xml
new file mode 100644
index 0000000..12d18b7
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools/pom.xml
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.megatim.fdxconsultation</groupId>
+        <artifactId>fdxconsultation-tools-module</artifactId>
+        <version>1.0</version>
+    </parent>
+    
+    <groupId>com.megatim.fdxconsultation.tools</groupId>
+    <artifactId>fdxconsultation-tools</artifactId>
+    <packaging>jar</packaging>
+    <name>fdxconsultation-tools</name>       
+    
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>2.3.2</version>
+                <configuration>
+                    <debug>false</debug>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+    
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+    </properties>    
+    
+    <dependencies>
+        <dependency>
+            <groupId>javax</groupId>
+            <artifactId>javaee-api</artifactId>
+            <version>8.0</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>io.github.classgraph</groupId>
+            <artifactId>classgraph</artifactId>
+            <version>4.8.90</version>
+        </dependency>            
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>3.17</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-scratchpad</artifactId>
+            <version>3.17</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions> 
+        </dependency>
+        
+        <dependency>
+            <groupId>net.sf.jasperreports</groupId>
+            <artifactId>jasperreports</artifactId>
+            <version>6.19.1</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>net.sf.jasperreports</groupId>
+            <artifactId>jasperreports-fonts</artifactId>
+            <version>6.19.1</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency> 
+            <groupId>com.opencsv</groupId> 
+            <artifactId>opencsv</artifactId> 
+            <version>4.1</version> 
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency> 
+        <dependency>
+            <groupId>com.megatim</groupId>
+            <artifactId>export-excel</artifactId>
+            <version>1.0</version>
+            <exclusions>
+                <exclusion> 
+                    <groupId>org.apache.xmlbeans</groupId> 
+                    <artifactId>xmlbeans</artifactId> 
+                </exclusion> 
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>       
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools/src/main/java/com/megatim/fdxconsultation/tools/CommonTools.java b/fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools/src/main/java/com/megatim/fdxconsultation/tools/CommonTools.java
new file mode 100644
index 0000000..a5a0eba
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools/src/main/java/com/megatim/fdxconsultation/tools/CommonTools.java
@@ -0,0 +1,404 @@
+package com.megatim.fdxconsultation.tools;
+
+import com.megatim.export.excel.Export;
+import io.github.classgraph.ClassGraph;
+import io.github.classgraph.ClassInfoList;
+import io.github.classgraph.ScanResult;
+import java.io.File;
+import java.io.FileInputStream;
+import java.math.BigInteger;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.security.spec.InvalidKeySpecException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.PBEKeySpec;
+import java.lang.annotation.Annotation;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+/**
+ *
+ * @author ABEGA
+ */
+public class CommonTools {
+
+    /**
+     * Permet de generer des nomre aleatorement
+     *
+     * @return
+     */
+    public static synchronized String genererChaineAleatoire() {
+        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
+        String nombre = format.format(new Date()) + String.valueOf((int) (Math.random() * 1000000000));
+        return nombre;
+    }
+    
+    /**
+     * Permet d'exporter en excel dans repertoire donn�
+     *
+     * @param datas
+     * @param repertoireGeneration
+     * @return
+     */
+    public static File exporterEnExcel(List datas, File fichier) {
+
+        try {
+
+            //On effectue l'export
+            Export.exportExcel(datas, fichier.getAbsolutePath());
+
+        } catch (Exception ex) {
+
+            //On affiche l'erreur
+            ex.printStackTrace();
+
+        }
+
+        return fichier;
+    }
+    
+    /**
+     * Methode permettant de
+     * @param headers
+     * @param request
+     * @return 
+     */
+    public static Map<String, String> recupererInfosRequete(HttpHeaders headers, @Context HttpServletRequest request) {
+        
+        //Variables
+        Map<String, String> map = new HashMap<String, String>();
+        
+        // Adresse IP du client
+        String clientIp = request.getRemoteAddr();
+
+        // En-tête User-Agent
+        String userAgent = headers.getHeaderString("User-Agent");
+        
+        // Methode
+        String methode = request.getMethod();
+        
+        // Path
+        String path = request.getRequestURI();
+        
+        //On ajoute les informations dans la map
+        map.put(AppCommonContext.REQUETE_HTTP_ADRESSE_IP, clientIp);
+        map.put(AppCommonContext.REQUETE_HTTP_CLIENT, userAgent);
+        map.put(AppCommonContext.REQUETE_HTTP_METHODE, methode);        
+        map.put(AppCommonContext.REQUETE_HTTP_PATH, path.toLowerCase().replaceAll(AppCommonContext.PATH_BASE_MODULE_CONSULTATION.toLowerCase(), ""));
+        
+        //On retourne la map
+        return map;
+        
+    }
+    
+    /**
+     * Permet d'ajouter des jours à une date donnée
+     * @param date
+     * @param nbreJour
+     * @return 
+     */
+    public static Date addDay(Date date, int nbreJour){
+        
+        //Varaibles
+        Calendar cal = Calendar.getInstance();
+        
+        //On ajoute la date
+        cal.setTime(date);
+        
+        //On ajoute la date
+        cal.add(Calendar.DATE, nbreJour);
+        
+        // convert calendar to date
+        Date modifiedDate = cal.getTime();
+        
+        return modifiedDate;
+    }
+    
+    /**
+     * Permet de formater les chiffres avec un zero devant
+     * @return 
+     */
+    public static String formaterChiffreAvecZeroDevant(long chiffre) {
+        
+        //Si nombre
+        if(chiffre >= 10){
+            return String.valueOf(chiffre);
+        }else{
+            return "0"+String.valueOf(chiffre);
+        }
+        
+    }
+    
+    /**
+     * Renvoie les champs de la liste qui n'appartiennent pas à l'entité
+     *
+     * @param classe
+     * @param fieldsToCheck
+     * @return
+     */
+    public static List<String> checkIfEntityField(Class<?> classe, List<String> fieldsToCheck) {
+        List<String> fieldsNotFound = new ArrayList<>();
+       Set<String> fieldsSet = Arrays.asList(classe.getDeclaredFields()).stream().map(f ->f.getName()).collect(Collectors.toSet());
+        
+        fieldsToCheck.stream().forEach(s -> {
+            System.out.println("field to check "+s);
+            if (!fieldsSet.contains(s)) {
+                fieldsNotFound.add(s);
+            }
+        });
+        return fieldsNotFound;
+    }
+
+    /**
+     * Permet de hacher le mot de passe
+     *
+     * @param password
+     * @return
+     */
+    public static String encryptPassword(String password) {
+
+        try {
+
+            int iterations = 1000;
+            char[] chars = password.toCharArray();
+            byte[] salt = getSalt();
+
+            PBEKeySpec spec = new PBEKeySpec(chars, salt, iterations, 64 * 8);
+            SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
+
+            byte[] hash = skf.generateSecret(spec).getEncoded();
+            return iterations + ":" + toHex(salt) + ":" + toHex(hash);
+
+        } catch (Exception ex) {
+
+            //On affiche le message d'errreur
+            ex.printStackTrace();
+
+        }
+
+        return null;
+    }
+
+    /**
+     * Permet de charger des classes qui ont une annotation pr�cise
+     *
+     * @param pkgName
+     * @param annotation
+     * @return
+     */
+    public static List<Annotation> getAnnotations(final String pkgName, String annotation) {
+
+        //Variables
+        List<Class<?>> classRefs = new ArrayList<>();
+
+        List<Annotation> annotations = new ArrayList<>();
+
+        try ( ScanResult scanResult = new ClassGraph().acceptPackages(pkgName).enableAllInfo().scan()) {
+
+            //On recup�re les classes annot�es
+            ClassInfoList liste = scanResult.getClassesWithAnnotation(annotation);
+
+            //On charge les classes
+            classRefs = liste.loadClasses();
+
+            //On parcourt les classes
+            for (Class<?> classe : classRefs) {
+
+                //On parcourt les annotations
+                for (Annotation annotationDeclaree : classe.getDeclaredAnnotations()) {
+
+                    //On ajoute l'annotation
+                    annotations.add(annotationDeclaree);
+
+                }
+
+            }
+
+        } catch (Exception e) {
+
+            //On affiche les traces
+            e.printStackTrace();
+
+        }
+
+        return annotations;
+    }
+
+    /**
+     * Permet de charger des classes qui ont une annotation pr�cise
+     *
+     * @param pkgName
+     * @param annotation
+     * @return
+     */
+    public static List<Class<?>> getAnnotatedClasses(final String pkgName, String annotation) {
+
+        //Variables
+        List<Class<?>> classRefs = new ArrayList<>();
+
+        try ( ScanResult scanResult = new ClassGraph().acceptPackages(pkgName).enableAllInfo().scan()) {
+
+            //On recup�re les classes annot�es
+            ClassInfoList liste = scanResult.getClassesWithAnnotation(annotation);
+
+            //On charge les classes
+            classRefs = liste.loadClasses();
+
+        } catch (Exception e) {
+
+            //On affiche les traces
+            e.printStackTrace();
+
+        }
+
+        return classRefs;
+    }
+
+    /**
+     * Permet de valider le mot de passe
+     *
+     * @param originalPassword
+     * @param storedPassword
+     * @return
+     * @throws NoSuchAlgorithmException
+     * @throws InvalidKeySpecException
+     */
+    public static boolean validerMotDePasse(String originalPassword, String storedPassword)
+            throws NoSuchAlgorithmException, InvalidKeySpecException {
+        String[] parts = storedPassword.split(":");
+        int iterations = Integer.parseInt(parts[0]);
+
+        byte[] salt = fromHex(parts[1]);
+        byte[] hash = fromHex(parts[2]);
+
+        PBEKeySpec spec = new PBEKeySpec(originalPassword.toCharArray(),
+                salt, iterations, hash.length * 8);
+        SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
+        byte[] testHash = skf.generateSecret(spec).getEncoded();
+
+        int diff = hash.length ^ testHash.length;
+        for (int i = 0; i < hash.length && i < testHash.length; i++) {
+            diff |= hash[i] ^ testHash[i];
+        }
+        return diff == 0;
+    }
+
+    /**
+     * Retourne le chemin du serveur
+     *
+     * @return
+     */
+    public static String getCurrentDirectoryOfServer() {
+
+        //On recup�re le chemin du repertoire
+        AppCommonContext.REPERTOIRE_SERVEUR = getCurrentDirectory().getParent() + File.separator + "standalone" + File.separator + "data" + File.separator + "donnees";
+
+        return AppCommonContext.REPERTOIRE_SERVEUR;
+    }
+
+    /**
+     * Retourne le chemin du serveur
+     *
+     * @return
+     */
+    public static String getCurrentTempDirectoryOfServer() {
+
+        //On recup�re le chemin du repertoire
+        AppCommonContext.REPERTOIRE_SERVEUR = getCurrentDirectory().getParent() + File.separator + "standalone" + File.separator + "tmp";
+
+        return AppCommonContext.REPERTOIRE_SERVEUR;
+    }
+
+    /**
+     * Retourn le chemin courant
+     *
+     * @return
+     */
+    public static File getCurrentDirectory() {
+        String fileName = (String) System.getProperties().get("user.dir");
+        return new File(fileName);
+    }
+
+    public static Properties loadProperties(String filename) {
+        Properties properties = new Properties();
+
+        try {
+
+            //On charge le fichier de config
+            properties.load(new FileInputStream(filename));
+
+        } catch (Exception ex) {
+
+            //On affiche l'erreur
+            ex.printStackTrace();
+
+        }
+
+        return properties;
+    }
+
+    /**
+     * Permet de convertir un hexadeicmal en tableau de byte
+     *
+     * @param hex
+     * @return
+     * @throws NoSuchAlgorithmException
+     */
+    public static byte[] fromHex(String hex) throws NoSuchAlgorithmException {
+        byte[] bytes = new byte[hex.length() / 2];
+        for (int i = 0; i < bytes.length; i++) {
+            bytes[i] = (byte) Integer.parseInt(hex.substring(2 * i, 2 * i + 2), 16);
+        }
+        return bytes;
+    }
+
+    /**
+     *
+     * @param array
+     * @return
+     * @throws NoSuchAlgorithmException
+     */
+    public static String toHex(byte[] array) throws NoSuchAlgorithmException {
+        BigInteger bi = new BigInteger(1, array);
+        String hex = bi.toString(16);
+
+        int paddingLength = (array.length * 2) - hex.length();
+        if (paddingLength > 0) {
+            return String.format("%0" + paddingLength + "d", 0) + hex;
+        } else {
+            return hex;
+        }
+    }
+
+    /**
+     *
+     * @return @throws NoSuchAlgorithmException
+     */
+    public static byte[] getSalt() throws NoSuchAlgorithmException {
+        SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
+        byte[] salt = new byte[16];
+        sr.nextBytes(salt);
+        return salt;
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools/src/main/java/com/megatim/fdxconsultation/tools/context/AppCommonContext.java b/fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools/src/main/java/com/megatim/fdxconsultation/tools/context/AppCommonContext.java
new file mode 100644
index 0000000..0b737e9
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools/src/main/java/com/megatim/fdxconsultation/tools/context/AppCommonContext.java
@@ -0,0 +1,69 @@
+package com.megatim.fdxconsultation.tools.context;
+
+import java.io.File;
+
+/**
+ *
+ * @author ASUS
+ */
+public class AppCommonContext {
+
+    public static final String DATA_INTEGRATION_TIMER = "consultation-data-integration-timer";
+    public static final String PATH_API_TOKEN = "Gestion des tokens";
+    public static final String MODULE_ADMINISTRATION = "Paramètres généraux";
+    public static final String MODULE_DOCUMENTATION = "Infos et docs";
+    public static final String MODULE_MESSAGERIE = "Messagerie";
+    public static final String MODULE_INFRASTRUCTURES = "Infrastructures";
+    public static final String MODULE_CONSULTATION_WEB = "Consultation web";
+
+    public static final String REQUETE_HTTP_ADRESSE_IP = "adresseip";
+    public static final String REQUETE_HTTP_CLIENT = "useragent";
+    public static final String REQUETE_HTTP_METHODE = "methode";
+    public static final String REQUETE_HTTP_STATUT = "statut";
+    public static final String REQUETE_HTTP_PATH = "path";
+
+    public static final String JNDI_NAME = "java:/fdxConsultationDS";
+    public static final String PERSISTENCE_UNIT_NAME = "fdxConsultationPersistenceUnit";
+
+    public static final String PATH_BASE_MODULE_CONSULTATION = "/fdxconsultation-service-impl-1.0/fdx-consultation";
+    public static final String CONFIG_FILE = "";
+    public static final String REPERTOIRE_CONF = "";
+    public static String REPERTOIRE_SERVEUR = "";
+    public static String CLE_DONNEES_VALIDES = "";
+    public static String CLE_DONNEES_INVALIDES = "";
+
+    public static final String TOKEN_GENERATION_DIRECT = "token-authentification-direct";
+    public static final String REMOTE_CONGIGURATION_DIRECT = "remote-configuration-direct";
+
+    public static final String WEB_USER_ACTION_DIRECT = "webUserActionDirect";
+    public static final String WEB_USER_ACTION_EXCHANGE = "webUserActionExchange";
+    public static final String WEB_USER_ACTION_QUEUE = "webUserActionQueue";
+    public static final String WEB_USER_ACTION_ROUTING_KEY = "webUserActionRoutingKey";
+
+    public static final String SERVER_DIR = getCurrentDirectory().getParent();
+    public static final String APP_DIR = SERVER_DIR + File.separator + "standalone" + File.separator + "fdxconsultation";
+    public static final String JASPER_DIR = APP_DIR + File.separator + "jasper";
+    public static final String PDF_DIR = APP_DIR + File.separator + "pdfs";
+    public static final String EXPORT_DIR = APP_DIR + File.separator + "exports";
+    public static final String IMAGES_DIR = APP_DIR + File.separator + "images";
+    public static final String TEMPLATE_DIR = APP_DIR + File.separator + "templates";
+    public static final String TEMPLATE_LISTE = "templateEtatsListe.xml";
+    public static final String TEMPLATE_DETAIL = "templateEtatsDetail.xml";
+    public static final String LOGO = "logo.png";
+    public static final String DYNAMIC_CLASSES_DIR = APP_DIR + File.separator + "dynamic_classes";
+    public static final String DYNAMIC_CLASSES_PACKAGE = "generated";
+
+    //Libellés websocket
+    public static final String CODE_WEB_SOCKET_PATH_APPLICATION_MESSAGE = "/application/message";
+    public static final String CODE_WEB_SOCKET_PATH_SYSTEME_MESSAGE = "/systeme/message";
+
+    //Extensions
+    public static String EXTENSION_PDF = "pdf";
+    public static String EXTENSION_EXCEL = "xlsx";
+
+    public static File getCurrentDirectory() {
+        String fileName = (String) System.getProperties().get("user.dir");
+        return new File(fileName);
+    }
+
+}
diff --git a/fdx-consultation/fdxconsultation-tools-module/pom.xml b/fdx-consultation/fdxconsultation-tools-module/pom.xml
new file mode 100644
index 0000000..893e171
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-tools-module/pom.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>    
+    <parent>
+        <groupId>com.megatim.fdxconsultation</groupId>
+        <artifactId>fdxconsultation</artifactId>
+        <version>1.0</version>
+    </parent>
+    <artifactId>fdxconsultation-tools-module</artifactId>
+    <version>1.0</version>
+    <packaging>pom</packaging>
+    <name>fdxconsultation-tools-module</name>    
+    <modules>
+        <module>fdxconsultation-tools-entities</module>
+        <module>fdxconsultation-tools</module>
+    </modules>
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <version>1.0</version>
+    </properties>    
+</project>
diff --git a/fdx-consultation/nb-configuration.xml b/fdx-consultation/nb-configuration.xml
new file mode 100644
index 0000000..a65c451
--- /dev/null
+++ b/fdx-consultation/nb-configuration.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+    <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+        <!--
+Properties that influence various parts of the IDE, especially code formatting and the like. 
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+        <netbeans.hint.jdkPlatform>JDK_1.8</netbeans.hint.jdkPlatform>
+    </properties>
+</project-shared-configuration>
diff --git a/fdx-consultation/pom.xml b/fdx-consultation/pom.xml
new file mode 100644
index 0000000..25c08e6
--- /dev/null
+++ b/fdx-consultation/pom.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    
+    <modelVersion>4.0.0</modelVersion>
+    
+    <groupId>com.megatim.fdxconsultation</groupId>
+    <artifactId>fdxconsultation</artifactId>
+    <version>1.0</version>
+    <packaging>pom</packaging>
+    
+    <modules>
+        <module>fdxconsultation-model</module>
+        <module>fdxconsultation-dao-ifaces</module>
+        <module>fdxconsultation-dao-impl</module>
+        <module>fdxconsultation-core-ifaces</module>
+        <module>fdxconsultation-core-impl</module>
+        <module>fdxconsultation-service-ifaces</module>
+        <module>fdxconsultation-service-impl</module>
+        <module>fdxconsultation-reporting</module>
+        <module>fdxconsultation-tools-module</module>
+    </modules>
+    
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <version>1.0</version>
+    </properties>
+    
+    <dependencies>
+        <dependency>
+            <groupId>com.megatim</groupId>
+            <artifactId>reporting-adhoc</artifactId>
+            <version>1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.megatim.fdxcommons.core.impl</groupId>
+            <artifactId>fdxcommons-core-impl</artifactId>
+            <version>1.0</version>
+        </dependency>
+    </dependencies>
+    
+</project>

--
Gitblit v1.10.0