void Initialize() throws Exception {
    try {

      departamentos = divisionPoliticaService.getAllDepartamentos();
      catClasif = catalogoService.getClasificacionesFinalRotavirus();
      catResp = catalogoService.getRespuesta();
      registroVacunas = catalogoService.getRegistrosVacuna();
      tipoVacunaRotavirus = catalogoService.getTiposVacunasRotavirus();
      caracteristaHeceses = catalogoService.getCaracteristasHeces();
      gradoDeshidratacions = catalogoService.getGradosDeshidratacion();
      condicionEgresos = catalogoService.getCondicionEgreso();
      salaRotaVirusList = catalogoService.getSalasRotaVirus();

      mapModel = new HashMap<>();

      mapModel.put("departamentos", departamentos);
      mapModel.put("catClasif", catClasif);
      mapModel.put("catResp", catResp);
      mapModel.put("registroVacunas", registroVacunas);
      mapModel.put("tipoVacunaRotavirus", tipoVacunaRotavirus);
      mapModel.put("caracteristaHeceses", caracteristaHeceses);
      mapModel.put("gradoDeshidratacions", gradoDeshidratacions);
      mapModel.put("condicionEgresos", condicionEgresos);
      mapModel.put("salas", salaRotaVirusList);

    } catch (Exception ex) {
      ex.printStackTrace();
      throw ex;
    }
  }
  /**
   * Si está habilitada la actualización de la persona mediante el componente de persona del MINSA
   * se actualizan municipio, comunidad y dirección de residencia
   *
   * @param municipioResidencia nuevo municipio
   * @param comunidadResidencia nueva comunidad
   * @param direccionResidencia nueva dirección
   * @param personaId persona a actualizar
   * @param idNotificacion de la persona
   * @param request con datos de autenticación
   * @return resultado de la acción
   * @throws Exception
   */
  @RequestMapping(
      value = "updatePerson",
      method = RequestMethod.GET,
      consumes = MediaType.APPLICATION_JSON_VALUE)
  public ResponseEntity<String> updatePerson(
      @RequestParam(value = "municipioResidencia", required = false) String municipioResidencia,
      @RequestParam(value = "comunidadResidencia", required = false) String comunidadResidencia,
      @RequestParam(value = "direccionResidencia", required = false) String direccionResidencia,
      @RequestParam(value = "personaId", required = false) Integer personaId,
      @RequestParam(value = "idNotificacion", required = false) String idNotificacion,
      HttpServletRequest request)
      throws Exception {

    logger.debug("Actualizando datos persona");
    SisPersona pers = new SisPersona();
    InfoResultado infoResultado;
    if (personaId != null) {
      pers = personaService.getPersona(personaId);
      pers.setMunicipioResidencia(
          divisionPoliticaService.getDivisionPolitiacaByCodNacional(municipioResidencia));
      pers.setComunidadResidencia(comunidadesService.getComunidad(comunidadResidencia));
      pers.setDireccionResidencia(direccionResidencia);
      if (ConstantsSecurity.ENABLE_PERSON_COMPONENT) {
        Persona persona = personaService.ensamblarObjetoPersona(pers);
        try {
          personaService.iniciarTransaccion();

          infoResultado =
              personaService.guardarPersona(
                  persona, seguridadService.obtenerNombreUsuario(request));
          if (infoResultado.isOk() && infoResultado.getObjeto() != null) {
            updateNotificacion(idNotificacion, pers);
          } else
            throw new Exception(
                infoResultado.getMensaje() + "----" + infoResultado.getMensajeDetalle());
          personaService.commitTransaccion();
        } catch (Exception ex) {
          logger.error(ex.getMessage(), ex);
          ex.printStackTrace();
          try {
            personaService.rollbackTransaccion();
          } catch (Exception e) {
            e.printStackTrace();
          }
          throw new Exception(ex);
        } finally {
          try {
            personaService.remover();
          } catch (Exception e) {
            e.printStackTrace();
          }
        }
      } else {
        updateNotificacion(idNotificacion, pers);
      }
    }
    return createJsonResponse(pers);
  }
  /**
   * * Obetener la información de una notificación y cargarla en pantalla para su edición
   *
   * @param idNotificacion a cargar
   * @param request con datos de autenticación
   * @return ModelAndView
   * @throws Exception
   */
  @RequestMapping("edit/{idNotificacion}")
  public ModelAndView editIrag(
      @PathVariable("idNotificacion") String idNotificacion, HttpServletRequest request)
      throws Exception {
    String urlValidacion = "";
    boolean autorizado = true;
    try {
      urlValidacion = seguridadService.validarLogin(request);
      // si la url esta vacia significa que la validaci�n del login fue exitosa
      if (urlValidacion.isEmpty())
        urlValidacion =
            seguridadService.validarAutorizacionUsuario(
                request, ConstantsSecurity.SYSTEM_CODE, true);
    } catch (Exception e) {
      e.printStackTrace();
      urlValidacion = "404";
    }

    ModelAndView mav = new ModelAndView();
    if (urlValidacion.isEmpty()) {

      if (idNotificacion != null) {
        FichaRotavirus fichaRotavirus = rotaVirusService.getFichaById(idNotificacion);

        if (fichaRotavirus != null) {
          Initialize();

          long idUsuario = seguridadService.obtenerIdUsuario(request);
          // irag.setUsuario(usuarioService.getUsuarioById((int) idUsuario));
          if (idUsuario != 0) {
            autorizado =
                seguridadService.esUsuarioNivelCentral(idUsuario, ConstantsSecurity.SYSTEM_CODE)
                    || ((fichaRotavirus.getDaNotificacion().getCodSilaisAtencion() != null
                            && fichaRotavirus.getDaNotificacion().getCodUnidadAtencion() != null)
                        && seguridadService.esUsuarioAutorizadoEntidad(
                            (int) idUsuario,
                            ConstantsSecurity.SYSTEM_CODE,
                            fichaRotavirus.getDaNotificacion().getCodSilaisAtencion().getCodigo())
                        && seguridadService.esUsuarioAutorizadoUnidad(
                            (int) idUsuario,
                            ConstantsSecurity.SYSTEM_CODE,
                            fichaRotavirus.getDaNotificacion().getCodUnidadAtencion().getCodigo()));
          }

          entidades =
              seguridadService.obtenerEntidadesPorUsuario(
                  (int) idUsuario, ConstantsSecurity.SYSTEM_CODE);

          if (entidades.size() <= 0) {
            entidades.add(fichaRotavirus.getDaNotificacion().getCodSilaisAtencion());
          }

          Divisionpolitica municipio =
              divisionPoliticaService.getMunicipiosByUnidadSalud(
                  fichaRotavirus
                      .getDaNotificacion()
                      .getCodUnidadAtencion()
                      .getMunicipio()
                      .getCodigoNacional());
          List<Divisionpolitica> munic =
              divisionPoliticaService.getMunicipiosBySilais(
                  fichaRotavirus.getDaNotificacion().getCodSilaisAtencion().getCodigo());

          List<Unidades> uni = null;
          if (seguridadService.esUsuarioNivelCentral(idUsuario, ConstantsSecurity.SYSTEM_CODE)) {
            if (fichaRotavirus.getDaNotificacion().getCodSilaisAtencion() != null
                && fichaRotavirus.getDaNotificacion().getCodUnidadAtencion() != null) {
              uni =
                  seguridadService.obtenerUnidadesPorUsuarioEntidadMunicipio(
                      (int) idUsuario,
                      fichaRotavirus.getDaNotificacion().getCodSilaisAtencion().getCodigo(),
                      fichaRotavirus
                          .getDaNotificacion()
                          .getCodUnidadAtencion()
                          .getMunicipio()
                          .getCodigoNacional(),
                      ConstantsSecurity.SYSTEM_CODE,
                      HealthUnitType.UnidadesPrimHosp.getDiscriminator());
            }
          } else {
            if (fichaRotavirus.getDaNotificacion().getCodSilaisAtencion() != null
                && fichaRotavirus.getDaNotificacion().getCodUnidadAtencion() != null) {
              uni =
                  seguridadService.obtenerUnidadesPorUsuarioEntidadMunicipio(
                      (int) idUsuario,
                      fichaRotavirus.getDaNotificacion().getCodSilaisAtencion().getCodigo(),
                      fichaRotavirus
                          .getDaNotificacion()
                          .getCodUnidadAtencion()
                          .getMunicipio()
                          .getCodigoNacional(),
                      ConstantsSecurity.SYSTEM_CODE,
                      HealthUnitType.UnidadesPrimHosp.getDiscriminator());
              if (!uni.contains(fichaRotavirus.getDaNotificacion().getCodUnidadAtencion())) {
                uni.add(fichaRotavirus.getDaNotificacion().getCodUnidadAtencion());
              }
            }
          }

          // datos persona
          Divisionpolitica departamentoProce;
          List<Divisionpolitica> municipiosResi = null;
          List<Comunidades> comunidades = null;

          if (fichaRotavirus.getDaNotificacion().getPersona().getMunicipioResidencia() != null) {
            String municipioResidencia =
                fichaRotavirus
                    .getDaNotificacion()
                    .getPersona()
                    .getMunicipioResidencia()
                    .getCodigoNacional();
            departamentoProce =
                divisionPoliticaService.getDepartamentoByMunicipi(municipioResidencia);
            municipiosResi =
                divisionPoliticaService.getMunicipiosFromDepartamento(
                    departamentoProce.getCodigoNacional());
            String comu =
                fichaRotavirus
                    .getDaNotificacion()
                    .getPersona()
                    .getMunicipioResidencia()
                    .getCodigoNacional();
            comunidades = comunidadesService.getComunidades(comu);
          }

          mav.addObject("fichaRotavirus", fichaRotavirus);
          mav.addObject("autorizado", autorizado);
          mav.addObject("entidades", entidades);
          mav.addObject("munic", munic);
          mav.addObject("municipiosResi", municipiosResi);
          mav.addObject("comunidades", comunidades);
          mav.addObject("uni", uni);
          mav.addObject("municipio", municipio);
          mav.addAllObjects(mapModel);

          mav.setViewName("rotavirus/create");
        } else {
          mav.setViewName("404");
        }
      } else {
        mav.setViewName("404");
      }

    } else {
      mav.setViewName(urlValidacion);
    }

    return mav;
  }
  /**
   * Custom handler to create a new one.
   *
   * @param idPerson the ID of the person
   * @return a ModelMap with the model attributes for the respective view
   */
  @RequestMapping("new/{idPerson}")
  public ModelAndView newFicha(@PathVariable("idPerson") long idPerson, HttpServletRequest request)
      throws Exception {
    String urlValidacion = "";
    try {
      urlValidacion = seguridadService.validarLogin(request);
      // si la url esta vacia significa que la validaci�n del login fue exitosa
      if (urlValidacion.isEmpty())
        urlValidacion =
            seguridadService.validarAutorizacionUsuario(
                request, ConstantsSecurity.SYSTEM_CODE, true);
    } catch (Exception e) {
      e.printStackTrace();
      urlValidacion = "404";
    }
    ModelAndView mav = new ModelAndView();
    if (urlValidacion.isEmpty()) {
      boolean autorizado = true;
      FichaRotavirus fichaRotavirus = new FichaRotavirus();
      DaNotificacion noti = new DaNotificacion();
      Initialize();
      SisPersona persona = personaService.getPersona(idPerson);

      long idUsuario = seguridadService.obtenerIdUsuario(request);
      // Si es usuario a nivel central se cargan todas las unidades asociados al SILAIS y municipio
      if (seguridadService.esUsuarioNivelCentral(idUsuario, ConstantsSecurity.SYSTEM_CODE)) {
        entidades = entidadAdmonService.getAllEntidadesAdtvas();
      } else {
        entidades =
            seguridadService.obtenerEntidadesPorUsuario(
                (int) idUsuario, ConstantsSecurity.SYSTEM_CODE);
      }

      if (persona != null) {
        noti.setPersona(persona);
        fichaRotavirus.setDaNotificacion(noti);
        Divisionpolitica departamentoProce =
            divisionPoliticaService.getDepartamentoByMunicipi(
                fichaRotavirus
                    .getDaNotificacion()
                    .getPersona()
                    .getMunicipioResidencia()
                    .getCodigoNacional());
        List<Divisionpolitica> municipiosResi =
            divisionPoliticaService.getMunicipiosFromDepartamento(
                departamentoProce.getCodigoNacional());
        List<Comunidades> comunidades =
            comunidadesService.getComunidades(
                fichaRotavirus
                    .getDaNotificacion()
                    .getPersona()
                    .getMunicipioResidencia()
                    .getCodigoNacional());

        mav.addObject("entidades", entidades);
        mav.addObject("autorizado", autorizado);
        mav.addObject("departamentoProce", departamentoProce);
        mav.addObject("municipiosResi", municipiosResi);
        mav.addObject("comunidades", comunidades);
        mav.addObject("fichaRotavirus", fichaRotavirus);
        mav.addAllObjects(mapModel);
        mav.setViewName("rotavirus/create");
      } else {
        mav.setViewName("404");
      }

    } else {
      mav.setViewName(urlValidacion);
    }

    return mav;
  }