Search in sources :

Example 1 with SwaggerAsyncResponse

use of com.crivano.swaggerservlet.SwaggerAsyncResponse in project balcaovirtual by trf2-jus-br.

the class SoapMNI method enviarPeticaoInicial.

public static PeticaoInicial enviarPeticaoInicial(String idManif, String senhaManif, String sistema, String localidade, String especialidade, String classe, String assuntoPrincipal, double valorCausa, String cdas, String pas, int nvlSigilo, boolean justicagratuita, boolean tutelaantecipada, boolean prioridadeidoso, List<Parte> partes, String nomePdfs, String tpDocPdfs, String nomePoloAtivo, String nomePoloPassivo) throws Exception {
    Map<String, Object> jwt = AutenticarPost.assertUsuarioAutorizado();
    String email = (String) jwt.get("email");
    String nome = (String) jwt.get("name");
    String usuario = (String) jwt.get("username");
    String dataEnvio = new DateTime(new Date()).toString("yyyyMMddHHmmss");
    String dirFinal = Utils.getDirFinal();
    ServicoIntercomunicacao222 client = getClient(sistema);
    List<TipoDocumento> l = new ArrayList<>();
    String[] tpDocs = tpDocPdfs.split(",");
    int i = 0;
    String[] classificacoes = tpDocPdfs.split(",");
    for (String nomePdf : nomePdfs.split(",")) {
        TipoDocumento doc = new TipoDocumento();
        doc.setMimetype("application/pdf");
        doc.setDataHora(dataEnvio);
        doc.setNivelSigilo(nvlSigilo == 0 ? 0 : 5);
        doc.setTipoDocumento(tpDocs[i]);
        // TODO: Substituir esse número mágico pela tabela de tipos de
        // documentos
        // doc.setTipoDocumento("58");
        Path path = Paths.get(dirFinal + "/" + nomePdf + ".pdf");
        byte[] data = Files.readAllBytes(path);
        doc.setConteudo(data);
        TipoParametro classificacao = new TipoParametro();
        classificacao.setNome("CLASSIFICACAO");
        classificacao.setValor(classificacoes[i]);
        doc.getOutroParametro().add(classificacao);
        l.add(doc);
        i++;
    }
    TipoCabecalhoProcesso dadosBasicos = new TipoCabecalhoProcesso();
    dadosBasicos.setNivelSigilo(nvlSigilo == 0 ? 0 : 5);
    TipoParte tp = null;
    for (Parte parte : partes) {
        ModalidadePoloProcessual m = parte.polo == 1 ? ModalidadePoloProcessual.AT : ModalidadePoloProcessual.PA;
        TipoPoloProcessual tpp = null;
        for (TipoPoloProcessual itpp : dadosBasicos.getPolo()) {
            if (itpp.getPolo().equals(m)) {
                tpp = itpp;
                break;
            }
        }
        if (tpp == null) {
            tpp = new TipoPoloProcessual();
            tpp.setPolo(m);
            dadosBasicos.getPolo().add(tpp);
        }
        TipoQualificacaoPessoa tqp = null;
        switch(parte.tipopessoa) {
            case 1:
                tqp = TipoQualificacaoPessoa.FISICA;
                break;
            case 2:
                tqp = TipoQualificacaoPessoa.JURIDICA;
                break;
            case 3:
                tqp = TipoQualificacaoPessoa.JURIDICA;
                break;
            case 4:
                if (tp == null)
                    throw new Exception("Não há pessoa para vincular ao advogado");
                TipoRepresentanteProcessual rp = new TipoRepresentanteProcessual();
                rp.setNome(parte.nome);
                rp.setInscricao(Utils.removePontuacao(parte.documento));
                rp.setTipoRepresentante(ModalidadeRepresentanteProcessual.A);
                // rp.setNumeroDocumentoPrincipal("11111111111");
                // rp.setIntimacao(false);
                tp.getAdvogado().add(rp);
                tqp = TipoQualificacaoPessoa.ORGAOREPRESENTACAO;
                continue;
        }
        tp = new TipoParte();
        // if (justicagratuita && tqp == TipoQualificacaoPessoa.FISICA)
        // tp.setAssistenciaJudiciaria(true);
        tp.setRelacionamentoProcessual(ModalidadeRelacionamentoProcessual.RP);
        TipoPessoa pess = new TipoPessoa();
        pess.setNome(parte.nome);
        pess.setNumeroDocumentoPrincipal(Utils.removePontuacao(parte.documento));
        // pess.setCidadeNatural("Rio de Janeiro");
        // pess.setEstadoNatural("RJ");
        pess.setTipoPessoa(tqp);
        tp.setPessoa(pess);
        tpp.getParte().add(tp);
    }
    dadosBasicos.setCodigoLocalidade(localidade);
    // dadosBasicos.setClasseProcessual(20);
    dadosBasicos.setValorCausa(valorCausa);
    // new
    List<TipoParametro> parametros = dadosBasicos.getOutroParametro();
    if (nomePoloAtivo != null) {
        TipoParametro p = new TipoParametro();
        p.setNome("NOMEPOLOATIVO");
        p.setValor(nomePoloAtivo);
        parametros.add(p);
    }
    if (nomePoloPassivo != null) {
        TipoParametro p = new TipoParametro();
        p.setNome("NOMEPOLOPASSIVO");
        p.setValor(nomePoloPassivo);
        parametros.add(p);
    }
    // Classe processual e parâmetro adicional para informar a classe do
    // Apolo
    String[] aClasse = classe.split("\\|");
    dadosBasicos.setClasseProcessual(Integer.parseInt(aClasse[0]));
    if (aClasse.length == 2) {
        TipoParametro p = new TipoParametro();
        p.setNome("CLASSEINTERNA");
        p.setValor(aClasse[1]);
        parametros.add(p);
    }
    // Assunto principal
    TipoAssuntoProcessual tap = new TipoAssuntoProcessual();
    tap.setCodigoNacional(Integer.parseInt(assuntoPrincipal));
    tap.setPrincipal(true);
    dadosBasicos.getAssunto().add(tap);
    if (prioridadeidoso) {
        dadosBasicos.getPrioridade().add("IDOSO");
    }
    if (justicagratuita) {
        TipoParametro jg = new TipoParametro();
        jg.setNome("JUSTICAGRATUITA");
        jg.setValor("TRUE");
        parametros.add(jg);
    }
    if (justicagratuita) {
        TipoParametro jg = new TipoParametro();
        jg.setNome("JUSTICAGRATUITA");
        jg.setValor("TRUE");
        parametros.add(jg);
    }
    if (tutelaantecipada) {
        TipoParametro tla = new TipoParametro();
        if (sistema.contains("eproc")) {
            tla.setNome("CautelaAntecipacaoTutela");
            tla.setValor("1");
        } else {
            tla.setNome("TUTELAANTECIPADA");
            tla.setValor("TRUE");
        }
        parametros.add(tla);
    }
    if (cdas != null) {
        for (String s : cdas.split(",")) {
            String ss = Utils.removePontuacao(s).trim();
            if (ss.length() == 0)
                continue;
            TipoParametro cda = new TipoParametro();
            cda.setNome("NUMEROCDA");
            cda.setValor(ss);
            parametros.add(cda);
        }
    }
    if (pas != null) {
        for (String s : pas.split(",")) {
            String ss = Utils.removePontuacao(s).trim();
            if (ss.length() == 0)
                continue;
            TipoParametro pa = new TipoParametro();
            pa.setNome("NUMEROPROCESSOADMINISTRATIVO");
            pa.setValor(ss);
            parametros.add(pa);
        }
    }
    Holder<Boolean> sucesso = new Holder<>();
    Holder<String> mensagem = new Holder<>();
    Holder<String> protocoloRecebimento = new Holder<>();
    Holder<String> dataOperacao = new Holder<>();
    Holder<byte[]> recibo = new Holder<>();
    Holder<List<TipoParametro>> parametro = new Holder<>();
    client.entregarManifestacaoProcessual(idManif, senhaManif, null, dadosBasicos, l, dataEnvio, parametros, sucesso, mensagem, protocoloRecebimento, dataOperacao, recibo, parametro);
    if (!sucesso.value)
        throw new Exception(mensagem.value);
    String numProc = null;
    String numProcFormatado = null;
    for (TipoParametro p : parametro.value) {
        if (p.getNome().equalsIgnoreCase("numerodoprocesso") || p.getNome().equalsIgnoreCase("numeroProcesso")) {
            numProc = p.getValor();
            numProcFormatado = Utils.formatarNumeroProcesso(numProc);
            break;
        }
    }
    String unidade = null;
    try {
        Future<SwaggerAsyncResponse<IUsuarioUsernameProcessoNumerosGet.Response>> future = SwaggerCall.callAsync("validar depois de petição inicial", Utils.getApiPassword(sistema), "GET", Utils.getApiUrl(sistema) + "/usuario/" + idManif + "/processo/" + numProc, null, IUsuarioUsernameProcessoNumerosGet.Response.class);
        SwaggerAsyncResponse<IUsuarioUsernameProcessoNumerosGet.Response> sar = future.get();
        if (sar.getException() != null)
            throw sar.getException();
        IUsuarioUsernameProcessoNumerosGet.Response r = (IUsuarioUsernameProcessoNumerosGet.Response) sar.getResp();
        unidade = r.list.get(0).unidade != null ? r.list.get(0).unidade.trim() : null;
    } catch (Exception ex) {
        SwaggerUtils.log(SoapMNI.class).error("Não foi possível obter a unidade", ex);
    }
    DateTime dt = DateTime.parse(dataOperacao.value, dtfMNI);
    String dataProtocoloFormatada = dt.toString(dtfBR);
    boolean sent = false;
    if (email != null) {
        try {
            String conteudo = "Prezado(a) " + nome + ",\n\nAcusamos o recebimento da petição inicial conforme dados abaixo:" + "\n\nProcesso Autuado Número: " + numProcFormatado + "\nProtocolo: " + protocoloRecebimento.value + "\nData/Hora do Protocolo: " + dataProtocoloFormatada + "\n\nAtenciosamente,\n\nTribunal Regional Federal da 2a Região";
            Correio.enviar(email, "Balcãojus: Protocolo de Petição Inicial", conteudo, numProcFormatado + "-protocolo-" + protocoloRecebimento.value + ".pdf", "application/pdf", recibo.value);
            sent = true;
        } catch (Exception ex) {
            SwaggerUtils.log(SoapMNI.class).error("Email não enviado", ex);
        }
    }
    SwaggerUtils.log(SoapMNI.class).debug("*** Processo: " + numProcFormatado + " Petição Inicial protocolada: " + protocoloRecebimento.value + " Por: " + usuario + " Email: " + email + (sent ? "" : " (email não enviado)"));
    PeticaoInicial pi = new PeticaoInicial();
    pi.mensagem = "Protocolo: " + protocoloRecebimento.value + ", Data: " + dataProtocoloFormatada + ", Processo Autuado: " + numProcFormatado + (unidade != null ? " - " + unidade : "") + (sent ? "" : " (email não enviado)");
    pi.protocolo = protocoloRecebimento.value;
    pi.data = dt.toDate();
    pi.numProcFormatado = numProcFormatado;
    pi.unidade = unidade;
    return pi;
}
Also used : SwaggerAsyncResponse(com.crivano.swaggerservlet.SwaggerAsyncResponse) ArrayList(java.util.ArrayList) ServicoIntercomunicacao222(br.jus.cnj.servico_intercomunicacao_2_2.ServicoIntercomunicacao222) DateTime(org.joda.time.DateTime) TipoPessoa(br.jus.cnj.intercomunicacao_2_2.TipoPessoa) TipoPoloProcessual(br.jus.cnj.intercomunicacao_2_2.TipoPoloProcessual) TipoParte(br.jus.cnj.intercomunicacao_2_2.TipoParte) List(java.util.List) ArrayList(java.util.ArrayList) TipoRepresentanteProcessual(br.jus.cnj.intercomunicacao_2_2.TipoRepresentanteProcessual) Path(java.nio.file.Path) TipoCabecalhoProcesso(br.jus.cnj.intercomunicacao_2_2.TipoCabecalhoProcesso) ModalidadePoloProcessual(br.jus.cnj.intercomunicacao_2_2.ModalidadePoloProcessual) TipoParte(br.jus.cnj.intercomunicacao_2_2.TipoParte) Holder(javax.xml.ws.Holder) IUsuarioUsernameProcessoNumerosGet(br.jus.trf2.sistemaprocessual.ISistemaProcessual.IUsuarioUsernameProcessoNumerosGet) Date(java.util.Date) SOAPException(javax.xml.soap.SOAPException) TransformerException(javax.xml.transform.TransformerException) PresentableUnloggedException(com.crivano.swaggerservlet.PresentableUnloggedException) TipoDocumento(br.jus.cnj.intercomunicacao_2_2.TipoDocumento) SwaggerAsyncResponse(com.crivano.swaggerservlet.SwaggerAsyncResponse) TipoQualificacaoPessoa(br.jus.cnj.intercomunicacao_2_2.TipoQualificacaoPessoa) TipoAssuntoProcessual(br.jus.cnj.intercomunicacao_2_2.TipoAssuntoProcessual) TipoParametro(br.jus.cnj.intercomunicacao_2_2.TipoParametro) JsonObject(com.google.gson.JsonObject)

Example 2 with SwaggerAsyncResponse

use of com.crivano.swaggerservlet.SwaggerAsyncResponse in project balcaovirtual by trf2-jus-br.

the class VotosIdConsultarMinutaGet method run.

@Override
public void run(Request req, Response resp, BalcaojusContext ctx) throws Exception {
    if (!req.sistema.contains(".eproc"))
        throw new Exception("Operação disponível apenas para o Eproc");
    Usuario u = BalcaojusServlet.getPrincipal();
    if (u.usuarios.get(req.sistema) == null)
        throw new PresentableUnloggedException("Login inválido para " + Utils.getName(req.sistema));
    IUsuarioUsernameVotosIdMinutasId2Get.Request q = new IUsuarioUsernameVotosIdMinutasId2Get.Request();
    Future<SwaggerAsyncResponse<IUsuarioUsernameVotosIdMinutasId2Get.Response>> future = SwaggerCall.callAsync(getContext(), Utils.getApiEprocPassword(req.sistema), "GET", Utils.getApiEprocVotosUrl(req.sistema) + "/minuta?idminuta=" + req.idminuta, q, IUsuarioUsernameVotosIdMinutasId2Get.Response.class);
    SwaggerAsyncResponse<IUsuarioUsernameVotosIdMinutasId2Get.Response> sar = future.get();
    if (sar.getException() != null)
        throw sar.getException();
    IUsuarioUsernameVotosIdMinutasId2Get.Response r = (IUsuarioUsernameVotosIdMinutasId2Get.Response) sar.getResp();
    resp.status = r.status;
    resp.html = r.html;
}
Also used : SwaggerAsyncResponse(com.crivano.swaggerservlet.SwaggerAsyncResponse) SwaggerAsyncResponse(com.crivano.swaggerservlet.SwaggerAsyncResponse) Usuario(br.jus.trf2.balcaojus.AutenticarPost.Usuario) PresentableUnloggedException(com.crivano.swaggerservlet.PresentableUnloggedException) IUsuarioUsernameVotosIdMinutasId2Get(br.jus.trf2.sistemaprocessual.ISistemaProcessual.IUsuarioUsernameVotosIdMinutasId2Get) PresentableUnloggedException(com.crivano.swaggerservlet.PresentableUnloggedException)

Example 3 with SwaggerAsyncResponse

use of com.crivano.swaggerservlet.SwaggerAsyncResponse in project balcaovirtual by trf2-jus-br.

the class ProcessoNumeroConsultarGet method enhanceEproc.

private String enhanceEproc(String usuario, String sistema, String numero, String json) throws Exception {
    Future<SwaggerAsyncResponse<IUsuarioUsernameProcessoNumeroConsultarGet.Response>> future = SwaggerCall.callAsync("obter tipos de petição intercorrente", Utils.getApiPassword(sistema), "GET", Utils.getApiUrl(sistema) + "/usuario/" + usuario + "/processo/" + numero + "/consultar", null, IUsuarioUsernameProcessoNumeroConsultarGet.Response.class);
    SwaggerAsyncResponse<IUsuarioUsernameProcessoNumeroConsultarGet.Response> sar = future.get();
    if (sar.getException() != null)
        throw sar.getException();
    IUsuarioUsernameProcessoNumeroConsultarGet.Response r = (IUsuarioUsernameProcessoNumeroConsultarGet.Response) sar.getResp();
    if (r.numero == null)
        return json;
    JsonParser parser = new JsonParser();
    JsonElement e = parser.parse(json);
    JsonObject op = e.getAsJsonObject().getAsJsonObject("value").getAsJsonObject("dadosBasicos").getAsJsonObject("outroParametro");
    op.addProperty("nomeMagistrado", r.magistrado);
    json = e.toString();
    return json;
}
Also used : SwaggerAsyncResponse(com.crivano.swaggerservlet.SwaggerAsyncResponse) SwaggerAsyncResponse(com.crivano.swaggerservlet.SwaggerAsyncResponse) IUsuarioUsernameProcessoNumeroConsultarGet(br.jus.trf2.sistemaprocessual.ISistemaProcessual.IUsuarioUsernameProcessoNumeroConsultarGet) JsonElement(com.google.gson.JsonElement) JsonObject(com.google.gson.JsonObject) JsonParser(com.google.gson.JsonParser)

Example 4 with SwaggerAsyncResponse

use of com.crivano.swaggerservlet.SwaggerAsyncResponse in project balcaovirtual by trf2-jus-br.

the class ProcessoNumeroInformacoesAdicionaisGet method run.

@Override
public void run(Request req, Response resp, BalcaojusContext ctx) throws Exception {
    if (!req.sistema.contains(".eproc"))
        return;
    Usuario u = BalcaojusServlet.getPrincipal();
    if (u.usuarios == null)
        throw new PresentableException("Usuário não possui identificador e unidade");
    UsuarioDetalhe ud = u.usuarios.get(req.sistema.toLowerCase());
    if (!u.isInterno() && "prod".equals(BalcaojusServlet.INSTANCE.getProperty("env")) && (u.email == null || !u.email.endsWith("@pgfn.gov.br")))
        return;
    Future<SwaggerAsyncResponse<IUsuarioUsernameProcessoNumeroInformacoesAdicionaisGet.Response>> future = SwaggerCall.callAsync("obter informacoes adicionais", Utils.getApiPassword(req.sistema), "GET", Utils.getApiUrl(req.sistema) + "/usuario/" + u.usuario + "/processo/" + req.numero + "/informacoes-adicionais", null, IUsuarioUsernameProcessoNumeroInformacoesAdicionaisGet.Response.class);
    SwaggerAsyncResponse<IUsuarioUsernameProcessoNumeroInformacoesAdicionaisGet.Response> sar = future.get();
    if (sar.getException() != null)
        throw sar.getException();
    IUsuarioUsernameProcessoNumeroInformacoesAdicionaisGet.Response r = (IUsuarioUsernameProcessoNumeroInformacoesAdicionaisGet.Response) sar.getResp();
    resp.cdas = new ArrayList<>();
    if (r.cdas != null) {
        for (br.jus.trf2.sistemaprocessual.ISistemaProcessual.CDA cda : r.cdas) {
            br.jus.trf2.balcaojus.IBalcaojus.CDA o = new br.jus.trf2.balcaojus.IBalcaojus.CDA();
            o.numero = cda.numero;
            o.processoadministrativo = cda.processoadministrativo;
            o.status = cda.status;
            o.grupo = cda.grupo;
            o.codigotributo = cda.codigotributo;
            o.tributo = cda.tributo;
            o.valor = cda.valor;
            o.valorufir = cda.valorufir;
            o.dataorigem = cda.dataorigem;
            o.datainclusao = cda.datainclusao;
            resp.cdas.add(o);
        }
    }
}
Also used : SwaggerAsyncResponse(com.crivano.swaggerservlet.SwaggerAsyncResponse) Usuario(br.jus.trf2.balcaojus.AutenticarPost.Usuario) SwaggerAsyncResponse(com.crivano.swaggerservlet.SwaggerAsyncResponse) PresentableException(com.crivano.swaggerservlet.PresentableException) IUsuarioUsernameProcessoNumeroInformacoesAdicionaisGet(br.jus.trf2.sistemaprocessual.ISistemaProcessual.IUsuarioUsernameProcessoNumeroInformacoesAdicionaisGet) UsuarioDetalhe(br.jus.trf2.balcaojus.AutenticarPost.UsuarioDetalhe)

Example 5 with SwaggerAsyncResponse

use of com.crivano.swaggerservlet.SwaggerAsyncResponse in project balcaovirtual by trf2-jus-br.

the class VotosIdDivergirPost method run.

@Override
public void run(Request req, Response resp, BalcaojusContext ctx) throws Exception {
    if (!req.sistema.contains(".eproc"))
        throw new Exception("Operação disponível apenas para o Eproc");
    Usuario u = BalcaojusServlet.getPrincipal();
    if (u.usuarios.get(req.sistema) == null)
        throw new PresentableUnloggedException("Login inválido para " + Utils.getName(req.sistema));
    IUsuarioUsernameVotosIdDivergirPost.Request q = new IUsuarioUsernameVotosIdDivergirPost.Request();
    Future<SwaggerAsyncResponse<IUsuarioUsernameVotosIdDivergirPost.Response>> future = SwaggerCall.callAsync(getContext(), Utils.getApiEprocPassword(req.sistema), "POST", Utils.getApiEprocVotosUrl(req.sistema) + "/acompanha_divergencia?sigla=" + u.usuario + "&id_sessao_item=" + req.id, q, IUsuarioUsernameVotosIdDivergirPost.Response.class);
    SwaggerAsyncResponse<IUsuarioUsernameVotosIdDivergirPost.Response> sar = future.get();
    if (sar.getException() != null)
        throw sar.getException();
    IUsuarioUsernameVotosIdDivergirPost.Response r = (IUsuarioUsernameVotosIdDivergirPost.Response) sar.getResp();
    resp.status = r.status;
    resp.voto = VotosGet.buildVoto(req.sistema, r.voto);
}
Also used : SwaggerAsyncResponse(com.crivano.swaggerservlet.SwaggerAsyncResponse) SwaggerAsyncResponse(com.crivano.swaggerservlet.SwaggerAsyncResponse) Usuario(br.jus.trf2.balcaojus.AutenticarPost.Usuario) PresentableUnloggedException(com.crivano.swaggerservlet.PresentableUnloggedException) IUsuarioUsernameVotosIdDivergirPost(br.jus.trf2.sistemaprocessual.ISistemaProcessual.IUsuarioUsernameVotosIdDivergirPost) PresentableUnloggedException(com.crivano.swaggerservlet.PresentableUnloggedException)

Aggregations

SwaggerAsyncResponse (com.crivano.swaggerservlet.SwaggerAsyncResponse)16 Usuario (br.jus.trf2.balcaojus.AutenticarPost.Usuario)9 PresentableUnloggedException (com.crivano.swaggerservlet.PresentableUnloggedException)9 IdNome (br.jus.trf2.sistemaprocessual.ISistemaProcessual.IdNome)4 ILocalidadeGet (br.jus.trf2.sistemaprocessual.ISistemaProcessual.ILocalidadeGet)2 IUsuarioUsernameMesaIdDocumentoId2SalvarPost (br.jus.trf2.sistemaprocessual.ISistemaProcessual.IUsuarioUsernameMesaIdDocumentoId2SalvarPost)2 JsonObject (com.google.gson.JsonObject)2 ModalidadePoloProcessual (br.jus.cnj.intercomunicacao_2_2.ModalidadePoloProcessual)1 TipoAssuntoProcessual (br.jus.cnj.intercomunicacao_2_2.TipoAssuntoProcessual)1 TipoCabecalhoProcesso (br.jus.cnj.intercomunicacao_2_2.TipoCabecalhoProcesso)1 TipoDocumento (br.jus.cnj.intercomunicacao_2_2.TipoDocumento)1 TipoParametro (br.jus.cnj.intercomunicacao_2_2.TipoParametro)1 TipoParte (br.jus.cnj.intercomunicacao_2_2.TipoParte)1 TipoPessoa (br.jus.cnj.intercomunicacao_2_2.TipoPessoa)1 TipoPoloProcessual (br.jus.cnj.intercomunicacao_2_2.TipoPoloProcessual)1 TipoQualificacaoPessoa (br.jus.cnj.intercomunicacao_2_2.TipoQualificacaoPessoa)1 TipoRepresentanteProcessual (br.jus.cnj.intercomunicacao_2_2.TipoRepresentanteProcessual)1 ServicoIntercomunicacao222 (br.jus.cnj.servico_intercomunicacao_2_2.ServicoIntercomunicacao222)1 UsuarioDetalhe (br.jus.trf2.balcaojus.AutenticarPost.UsuarioDetalhe)1 Assunto (br.jus.trf2.balcaojus.IBalcaojus.Assunto)1