/**
   * 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);
  }
  /**
   * Actualiza una notificación de tipo Rotavirus
   *
   * @param idNotificacion de la notificación a actualizar
   * @param persona a quien pertenece la notificación
   * @throws Exception
   */
  public void updateNotificacion(String idNotificacion, SisPersona persona) throws Exception {
    DaNotificacion noti;

    if (idNotificacion != null) {
      // DaNotificacion
      noti = daNotificacionService.getNotifById(idNotificacion);
      noti.setMunicipioResidencia(persona.getMunicipioResidencia());
      noti.setDireccionResidencia(persona.getDireccionResidencia());
      daNotificacionService.updateNotificacion(noti);
    }
  }
  /**
   * Agrega una notificación de tipo Rotavirus
   *
   * @param json con los datos de la ficha
   * @param request con datos de autenticación
   * @return DaNotificacion agregada
   * @throws Exception
   */
  public DaNotificacion guardarNotificacion(String json, HttpServletRequest request)
      throws Exception {

    logger.debug("Guardando Notificacion");
    DaNotificacion noti = new DaNotificacion();
    Integer personaId = null;
    Integer codSilaisAtencion = null;
    Integer codUnidadAtencion = null;
    String urgente = null;
    JsonObject jObjectJson = new Gson().fromJson(json, JsonObject.class);
    if (jObjectJson.get("personaId") != null
        && !jObjectJson.get("personaId").getAsString().isEmpty()) {
      personaId = jObjectJson.get("personaId").getAsInt();
    }
    if (jObjectJson.get("codSilaisAtencion") != null
        && !jObjectJson.get("codSilaisAtencion").getAsString().isEmpty()) {
      codSilaisAtencion = jObjectJson.get("codSilaisAtencion").getAsInt();
    }
    if (jObjectJson.get("codUnidadAtencion") != null
        && !jObjectJson.get("codUnidadAtencion").getAsString().isEmpty()) {
      codUnidadAtencion = jObjectJson.get("codUnidadAtencion").getAsInt();
    }
    if (jObjectJson.get("urgente") != null && !jObjectJson.get("urgente").getAsString().isEmpty()) {
      urgente = jObjectJson.get("urgente").getAsString();
    }

    if (personaId != null) {
      SisPersona persona = personaService.getPersona(personaId);
      noti.setPersona(persona);
      noti.setFechaRegistro(new Timestamp(new Date().getTime()));
      noti.setCodSilaisAtencion(entidadAdmonService.getSilaisByCodigo(codSilaisAtencion));
      noti.setCodUnidadAtencion(unidadesService.getUnidadByCodigo(codUnidadAtencion));
      long idUsuario = seguridadService.obtenerIdUsuario(request);
      noti.setUsuarioRegistro(usuarioService.getUsuarioById((int) idUsuario));
      noti.setCodTipoNotificacion(catalogoService.getTipoNotificacion("TPNOTI|RTV"));
      noti.setMunicipioResidencia(persona.getMunicipioResidencia());
      noti.setDireccionResidencia(persona.getDireccionResidencia());
      noti.setUrgente(catalogoService.getRespuesta(urgente));

      daNotificacionService.addNotification(noti);
      return noti;
    } else {
      throw new Exception();
    }
  }