diff --git a/backoffice/src/main/java/uy/edu/fing/tse/jsf/GestionhechosBean.java b/backoffice/src/main/java/uy/edu/fing/tse/jsf/GestionhechosBean.java
index 672bd064ea9d06aa02bd07b2196e2bbf24c9d2bb..c637d37b683dbf4c8bb73b16ddb22c28604ad0aa 100644
--- a/backoffice/src/main/java/uy/edu/fing/tse/jsf/GestionhechosBean.java
+++ b/backoffice/src/main/java/uy/edu/fing/tse/jsf/GestionhechosBean.java
@@ -1,91 +1,36 @@
 package uy.edu.fing.tse.jsf;
 
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import uy.edu.fing.tse.central.business.BusinessLocal;
-import uy.edu.fing.tse.central.business.common.Notifier;
 import uy.edu.fing.tse.dto.Fact;
-import uy.edu.fing.tse.dto.Peripherical;
 
 import javax.annotation.PostConstruct;
 import javax.ejb.EJB;
 import javax.enterprise.context.RequestScoped;
-import javax.faces.bean.ManagedBean;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.AjaxBehaviorEvent;
-import javax.faces.push.Push;
-import javax.faces.push.PushContext;
-import javax.inject.Inject;
 import javax.inject.Named;
 import java.io.Serializable;
-import java.time.LocalDateTime;
-import java.util.ArrayList;
 import java.util.List;
-import javax.enterprise.context.RequestScoped;
-import javax.inject.Named;
-import java.io.Serializable;
 
 @RequestScoped
 @Named("gestionHechos")
-
-
 public class GestionhechosBean implements Serializable {
 
-    private static final long serialVersionUID = -7674319505640122631L;
-
-    private String username;
-    private String password;
-    private String repassword;
+    private static final long serialVersionUID = 9142442208455999158L;
 
+    @EJB
+    private BusinessLocal service;
 
-    private HechosService service;
-
+    @PostConstruct
     public void init() {
-        filteredFacts = service.createHechos(10);
-
+        filteredFacts = service.listarHechos();
     }
 
-
     private List<Fact> filteredFacts;
 
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    public String getRepassword() {
-        return repassword;
-    }
-
-    public void setRepassword(String repassword) {
-        this.repassword = repassword;
-    }
-
-
-    public void login() {
-        //aca va el login
-    }
-
-    public void register() {
-        //aca va el register
-    }
-
 
     public List<Fact> getFilteredNFact() {
         return filteredFacts;
     }
+
     public void setFilteredNoticias(List<Fact> filteredNoticias) {
         this.filteredFacts = filteredNoticias;
     }
diff --git a/backoffice/src/main/java/uy/edu/fing/tse/jsf/RequestBean.java b/backoffice/src/main/java/uy/edu/fing/tse/jsf/RequestBean.java
index 5b5ed564fdc0df3da6d7e38c29bef1342caea83f..b73c2ca0a6f5d84b4a4c2707f5118da762e7f26a 100644
--- a/backoffice/src/main/java/uy/edu/fing/tse/jsf/RequestBean.java
+++ b/backoffice/src/main/java/uy/edu/fing/tse/jsf/RequestBean.java
@@ -68,7 +68,6 @@ public class RequestBean implements Serializable {
 
     public void hacerAlgo() {
         LOG.info("hacerAlgo");
-        negocio.test();
     }
 
     public String getName() {
diff --git a/backoffice/src/main/webapp/jsf/gestionhechos.xhtml b/backoffice/src/main/webapp/jsf/gestionhechos.xhtml
index fad0588d716e503096a1c69498152361c8476c23..f4c83b75a277af6e474e87499394f42f03eae80b 100644
--- a/backoffice/src/main/webapp/jsf/gestionhechos.xhtml
+++ b/backoffice/src/main/webapp/jsf/gestionhechos.xhtml
@@ -37,11 +37,11 @@
 
 <f:view>
     <h:form >
-
         <p:outputPanel style="font-size: 30px;text-align: center">
             <h:outputText value= "Bienvenido " />
             <h:outputText value=  "#{userLoginView.user.mail}" />
         </p:outputPanel>
+
         <p:dataTable var="hecho" id="dataHecho" value="#{gestionHechos.filteredNFact}" widgetVar="NoticiasTable"
                      emptyMessage="Hecho no encontrada" filteredValue="#{gestionHechos.filteredNFact}">
             <f:facet name="header">
@@ -66,10 +66,7 @@
                 </f:facet>
 
             </p:column>
-
         </p:dataTable>
-
-
     </h:form>
 </f:view>
 </html>
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/GenericDao.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/GenericDao.java
new file mode 100644
index 0000000000000000000000000000000000000000..ad8e199ef3b5fe2a3a5294b748a7953f6b6fd9f7
--- /dev/null
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/GenericDao.java
@@ -0,0 +1,14 @@
+package uy.edu.fing.tse.central.db.dao;
+
+import java.util.List;
+
+public interface GenericDao<T> {
+
+    void create(T elem);
+
+    T find(String key);
+
+    T find(Long id);
+
+    List<T> findAll();
+}
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/fact/FactDAOBean.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/fact/FactDAOBean.java
new file mode 100644
index 0000000000000000000000000000000000000000..7680fa07120b5d4246eb76e5ad5ad59c568b3fbc
--- /dev/null
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/fact/FactDAOBean.java
@@ -0,0 +1,157 @@
+package uy.edu.fing.tse.central.db.dao.fact;
+
+import uy.edu.fing.tse.central.db.entity.Hecho;
+import uy.edu.fing.tse.central.db.mapper.MyMapper;
+import uy.edu.fing.tse.dto.Fact;
+
+import javax.annotation.PostConstruct;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Stateless
+public class FactDAOBean implements FactDaoLocal {
+
+    @PersistenceContext(unitName = "central")
+    private EntityManager em;
+
+    @PostConstruct
+    void init() {
+        //Despues del constructor hace esto
+    }
+
+    @Override
+    public void create(Fact elem) {
+        final var hecho = MyMapper.INSTANCE.convert(elem);
+        em.persist(hecho);
+        em.flush();
+    }
+
+    @Override
+    public Fact find(String key) {
+        return find(Long.parseLong(key));
+    }
+
+    @Override
+    public Fact find(Long id) {
+        final var hecho = em.find(Hecho.class, id);
+        return MyMapper.INSTANCE.convert(hecho);
+    }
+
+    @Override
+    public List<Fact> findAll() {
+        final var query = em.createNamedQuery("Hecho.findAll", Hecho.class);
+        final List<Hecho> hechos = query.getResultList();
+        return hechos.stream().map(MyMapper.INSTANCE::convert).collect(Collectors.toList());
+    }
+
+    @Override
+    public List<Fact> search(final String value, final String state, final Date after, final Date before) {
+        boolean addWhere = true;
+        Map<String, Object> params = new HashMap<>();
+        String hql = "SELECT DISTINCT h FROM Hecho h INNER JOIN h.actualState AS e INNER JOIN h.history AS s ";
+
+        if (notNullOrEmpty(value)) {
+            hql += " WHERE ";
+            addWhere = false;
+            hql += "( h.title LIKE %:title%";
+            hql += " OR ";
+            hql += " h.desc LIKE %:description% )";
+            params.put("title", value);
+            params.put("description", value);
+        }
+
+        if (notNullOrEmpty(state)) {
+            if (addWhere) {
+                hql += " WHERE ";
+                addWhere = false;
+            } else {
+                hql += " AND ";
+            }
+            hql += " e.value = :state";
+            params.put("state", state);
+        }
+
+        if (after != null) {
+            if (addWhere) {
+                hql += " WHERE ";
+                addWhere = false;
+            } else {
+                hql += " AND ";
+            }
+            hql += " s.date <= :after";
+            params.put("after", after);
+        }
+
+        if (before != null) {
+            if (addWhere) {
+                hql += " WHERE ";
+                addWhere = false;
+            } else {
+                hql += " AND ";
+            }
+            hql += " s.date >= :before";
+            params.put("state", before);
+        }
+
+        final var query = em.createQuery(hql, Hecho.class);
+        for (Map.Entry<String, Object> param : params.entrySet()) {
+            query.setParameter(param.getKey(), param.getValue());
+        }
+        final List<Hecho> hechos = query.getResultList();
+        return hechos.stream().map(MyMapper.INSTANCE::convert).collect(Collectors.toList());
+    }
+
+    @Override
+    public List<Fact> filter(final String title, final String desc, final String state) {
+        boolean addWhere = true;
+        Map<String, String> params = new HashMap<>();
+        String hql = "SELECT h FROM Hecho h INNER JOIN h.actualState AS e ";
+
+        if (notNullOrEmpty(title)) {
+            hql += " WHERE ";
+            addWhere = false;
+            hql += " h.title = :title";
+            params.put("title", title);
+        }
+        if (notNullOrEmpty(desc)) {
+            if (addWhere) {
+                hql += " WHERE ";
+                addWhere = false;
+            } else {
+                hql += " AND ";
+            }
+            hql += " h.desc = :description";
+            params.put("description", desc);
+        }
+        if (notNullOrEmpty(state)) {
+            if (addWhere) {
+                hql += " WHERE ";
+                addWhere = false;
+            } else {
+                hql += " AND ";
+            }
+            hql += " e.value = :state";
+            params.put("state", state);
+        }
+        final var query = em.createQuery(hql, Hecho.class);
+        for (Map.Entry<String, String> param : params.entrySet()) {
+            query.setParameter(param.getKey(), param.getValue());
+        }
+        final List<Hecho> hechos = query.getResultList();
+        return hechos.stream().map(MyMapper.INSTANCE::convert).collect(Collectors.toList());
+    }
+
+    private boolean nullOrEmpty(final String val) {
+        return val == null || val.isEmpty();
+    }
+
+    private boolean notNullOrEmpty(final String val) {
+        return !nullOrEmpty(val);
+    }
+}
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/fact/FactDaoLocal.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/fact/FactDaoLocal.java
new file mode 100644
index 0000000000000000000000000000000000000000..6165408466b1a40341dff6386645130ac19237eb
--- /dev/null
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/fact/FactDaoLocal.java
@@ -0,0 +1,27 @@
+package uy.edu.fing.tse.central.db.dao.fact;
+
+import uy.edu.fing.tse.central.db.dao.GenericDao;
+import uy.edu.fing.tse.dto.Fact;
+
+import javax.ejb.Local;
+import java.util.Date;
+import java.util.List;
+
+@Local
+public interface FactDaoLocal extends GenericDao<Fact> {
+    @Override
+    void create(Fact elem);
+
+    @Override
+    Fact find(String key);
+
+    @Override
+    Fact find(Long id);
+
+    @Override
+    List<Fact> findAll();
+
+    List<Fact> search(String value, String state, Date after, Date before);
+
+    List<Fact> filter(String title, String desc, String state);
+}
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Hecho.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Hecho.java
index 9f843f06015815840ac90a94f9864e7e0bda7bde..6f78c6819650d8532b0f3d882236f62df3153d41 100644
--- a/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Hecho.java
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Hecho.java
@@ -6,8 +6,10 @@ import java.util.List;
 
 @Entity
 @NamedQueries({
-        //@NamedQuery(name = "Periferico.findAll", query = "select c from Categoria c"),
-        //@NamedQuery(name = "Periferico.findByName", query = "select c from Categoria c where c.name = :name")
+        @NamedQuery(name = "Hecho.findAll", query = "select h from Hecho h"),
+        @NamedQuery(name = "Hecho.findByTitle", query = "select h from Hecho h where h.title = :title"),
+        @NamedQuery(name = "Hecho.findByDescription", query = "select h from Hecho h where h.description = :description"),
+        @NamedQuery(name = "Hecho.findByState", query = "select h from Hecho h INNER JOIN h.actualState AS e WHERE e.value = :state")
 })
 public final class Hecho {
 
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/startup/Config.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/startup/Config.java
index 4415d904a53f84cf68e44e28485ac0bb5541e734..0616ecc878fbc7d5bd5cf74ee77b0d1d2ff46c53 100644
--- a/central-db/src/main/java/uy/edu/fing/tse/central/db/startup/Config.java
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/startup/Config.java
@@ -1,28 +1,99 @@
 package uy.edu.fing.tse.central.db.startup;
 
-import uy.edu.fing.tse.central.db.DataAccessLocal;
+import uy.edu.fing.tse.central.db.dao.fact.FactDaoLocal;
+import uy.edu.fing.tse.central.db.dao.user.UserDaoLocal;
+import uy.edu.fing.tse.dto.Fact;
+import uy.edu.fing.tse.dto.State;
+import uy.edu.fing.tse.dto.StateHistory;
+import uy.edu.fing.tse.dto.UserBO;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 import javax.ejb.EJB;
 import javax.ejb.Singleton;
 import javax.ejb.Startup;
+import java.util.Date;
 
 @Singleton
 @Startup
 public class Config {
 
     @EJB
-    private DataAccessLocal dataAccess;
+    private FactDaoLocal hechos;
+    private UserDaoLocal users;
 
     @PostConstruct
     public void start() {
-
+        initUser();
+        initFacts();
     }
 
     @PreDestroy
     public void stop() {
     }
 
+    private void initUser() {
+        UserBO u = new UserBO();
+        u.setPassword("admin");
+        u.setMail("admin");
+        users.register(u);
+    }
+
+    private void initFacts() {
+        String[] titulos = new String[10];
+        String[] descripciones = new String[10];
+        String[] estados = new String[10];
+
+        titulos[0] = "Debutó la Unidad Previsional con éxito";
+        titulos[1] = "Sin claras señales de cambios en el billete verde";
+        titulos[2] = "Conaprole e Isusa colocaron US$ 17: en el mercado";
+        titulos[3] = "¿Quiere ser de la nobleza? Compre un título en Escocia";
+        titulos[4] = "¿Qué hacer con el dinero en momentos de \"nubarrones\"?";
+        titulos[5] = "Cavani alcanzó al \"Cebolla\"";
+        titulos[6] = "Petrobras emitió y captó US$ 2.000 millones";
+        titulos[7] = "Bonos brasileños en manos de argentinos no pagarán impuestos";
+        titulos[8] = "Noticia 9";
+        titulos[9] = "esta es la ultima noticia";
 
+        descripciones[0] = "Ayer, por primera vez, se emitió deuda en la recientemente creada Unidad Previsional (UP) que tiene cotización diaria y ajusta según la evolución del Índice Medio de Salarios Nominales.";
+        descripciones[1] = "En Brasil la divisa estadounidense subió un 2,49% en la semana, y en Argentina un 6,81%.";
+        descripciones[2] = "Dos emisiones donde la demanda superó el monto ofertado.";
+        descripciones[3] = "¿Le apetece unirse a la nobleza escocesa? Esta región del norte de Reino Unido ha visto desarrollarse toda una industria que permite que la gente ordinaria haga justamente eso, algunos con más justificación legal que otros.";
+        descripciones[4] = "Presidente y director de la Bolsa de Valores hicieron análisis y sugerencias.";
+        descripciones[5] = "PSG se consagró y el \"Matador\" es uno de los uruguayos con más títulos";
+        descripciones[6] = "La petrolera brasileña Petrobras informó ayer que captó US$ 2.000 millones con el lanzamiento el jueves en el exterior de títulos con vencimiento en 2029 por los que pagará un interés anual del 5,750%.";
+        descripciones[7] = "Bonos brasileños en manos de argentinos no pagarán impuestos";
+        descripciones[8] = "descripcion noticia 9";
+        descripciones[9] = "descripcion noticia 10";
+
+        estados[0] = "Verificado";
+        estados[1] = "Verificado";
+        estados[2] = "No Verificado";
+        estados[3] = "No Verificado";
+        estados[4] = "No Verificado";
+        estados[5] = "Verificado";
+        estados[6] = "Verificado";
+        estados[7] = "No Verificado";
+        estados[8] = "Verificado";
+        estados[9] = "No Verificado";
+
+        for (int i = 0; i < 10; i++) {
+            State actualState = new State();
+            actualState.setValue(estados[i]);
+            final var fact = new Fact();
+            fact.setTitle(titulos[i]);
+            fact.setDescription(descripciones[i]);
+            fact.setActualState(actualState);
+            StateHistory sh = new StateHistory();
+            sh.setState(actualState);
+            sh.setDate(new Date());
+            UserBO u = new UserBO();
+            u.setPassword("admin");
+            u.setMail("admin");
+            sh.setUser(u);
+            sh.setFact(fact);
+            fact.addHistory(sh);
+            hechos.create(fact);
+        }
+    }
 }
diff --git a/central-ejb/src/main/java/uy/edu/fing/tse/central/business/Business.java b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/Business.java
index cc868ccffd10753e93a8a6577d789a5c6470eb08..73b48b7ee7dc90b8cda08a8935aed0df8349e131 100644
--- a/central-ejb/src/main/java/uy/edu/fing/tse/central/business/Business.java
+++ b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/Business.java
@@ -2,17 +2,18 @@ package uy.edu.fing.tse.central.business;
 
 
 import uy.edu.fing.tse.dto.CheckMechanism;
+import uy.edu.fing.tse.dto.Fact;
 import uy.edu.fing.tse.dto.Peripherical;
 
-import javax.ejb.Asynchronous;
+import java.io.Serializable;
+import java.util.List;
 
-public interface Business {
+public interface Business extends Serializable {
 
     void altaPeriferico(Peripherical p);
 
     void altaVerificacionMecanismo(CheckMechanism cm);
 
-    @Asynchronous
-    void test();
+    List<Fact> listarHechos();
 }
 
diff --git a/central-ejb/src/main/java/uy/edu/fing/tse/central/business/BusinessBean.java b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/BusinessBean.java
index 60701e38d83bbb8f3b4c00101b396d4344a7baa3..01fd5884e4e9304598010a6dd068a19c3aa0cf7b 100644
--- a/central-ejb/src/main/java/uy/edu/fing/tse/central/business/BusinessBean.java
+++ b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/BusinessBean.java
@@ -3,22 +3,24 @@ package uy.edu.fing.tse.central.business;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import uy.edu.fing.tse.central.business.common.Notifier;
-import uy.edu.fing.tse.central.db.DataAccessLocal;
+import uy.edu.fing.tse.central.db.dao.fact.FactDaoLocal;
 import uy.edu.fing.tse.dto.CheckMechanism;
+import uy.edu.fing.tse.dto.Fact;
 import uy.edu.fing.tse.dto.Peripherical;
 
 import javax.annotation.PostConstruct;
 import javax.ejb.EJB;
 import javax.ejb.Stateless;
+import java.util.List;
 
 @Stateless
 public class BusinessBean implements BusinessLocal, BusinessRemote {
 
+    private static final long serialVersionUID = 4079626203846038482L;
     private static final Logger LOG = LoggerFactory.getLogger(Business.class);
 
     @EJB
-    private DataAccessLocal dataAccess;
+    private FactDaoLocal hechos;
 
     @PostConstruct
     void init() {
@@ -36,14 +38,8 @@ public class BusinessBean implements BusinessLocal, BusinessRemote {
     }
 
     @Override
-    public void test() {
-        try {
-            Thread.sleep(2000);
-        } catch (InterruptedException e) {
-
-        }
-        LOG.info("###++++++++++++++++++");
-        Notifier.notify("test", "este es un mensaje del mas alla");
+    public List<Fact> listarHechos() {
+        return hechos.findAll();
     }