De preferência quem mora em Belo Horizonte ou região
Sistema de Comunicação
O objetivo do sistema de comunicação é permitir a usuários trocarem mensagens e documentos com outros usuários em nível profissional, sejam eles pessoas físicas ou empresas, substituindo e-mail, telefonemas e outros sistemas de mensagens instantâneas.
Sistemas de anti-SPAM, censura e denúncia deverão ser implementados para evitar palavrões e ofensas comuns, a troca de arquivos ou links conhecidamente prejudiciais e outros problemas.
Avisos de conteúdo perigoso, mensagens lembrando o usuário que este sistema tem todas as mensagens guardadas e que deve ser usado de forma profissional deverão ser mostrados quando pertinentes, e deverão ser aceitos (confirmação por botões) em alguns casos a serem definidos.
O sistema também servirá para a comunicação entre contabilidades e seus clientes, que será feita através de API com outros sistemas.
O sistema não deverá permitir a comunicação irrestrita entre usuários como os sistemas de comunicação já existentes como Jabber, Whatsapp ou Hangouts, bem como não deverá ser apenas um sistema de comunicação corporativa como Mattermost ou Slack.
Tecnologias para desenvolvimento
O back-end utilizará o servidor RTC (Real-Time Chat) Openfire para comunicação e as funcionalidades extras necessárias devem ser desenvolvidas na forma de plugins e em Laravel.
O acesso ao banco de dados do Openfire não deve ser feito diretamente pelo Laravel nem pela interface de usuário.
A interface do usuário deve ser desenvolvida utilizando Vue, com a biblioteca javascript
Strophe.js para comunicar com o servidor. Deve-se utilizar a arquitetura MVC para o desenvolvimento
A interface deverá utilizar serviços web externos como Gravatar, LinkedIn e outros que possam ser pertinentes à vida profissional dos usuários. Serviços pessoais (como Facebook ou Google) só serão disponibilidados para empresas.
O acesso ao sistema deve utilizar Oauth2 para facilitar a integração com outros sistemas e futuramente permitir o registro e acesso por credenciais de redes sociais e similares.
Para versionar a API, uma opção é utilizar o pacote Dingo para o Laravel.
Detalhamento do sistema
Empresas
Existirão dois tipos de empresas, as locais e as registradas. Qualquer empresa criada por qualquer usuário (mesmo uma contabilidade) será inicialmente local, ou seja, apenas o usuário que criou a empresa e os usuários convidados poderão visualizá-la e interagir com ela. Isso servirá para que os usuários possam experimentar o sistema ou mesmo utilizá-lo quando não tiverem necessidade de nenhuma funcionalidade além da simples conversa.
Para que uma empresa seja registrada, o administrador da empresa deve passar por um processo (que ainda será definido) onde a autenticidade das informações será confirmada, e então esta empresa poderá ser encontrada por qualquer outro usuário através de pesquisas e terá acesso a funções avançadas e ao resto do sistema.
O usuário que criar a empresa será o administrador inicial da empresa. Um administrador pode editar as informações da empresa, criar ou apagar grupos internos de conversa, criar listas de contatos da empresa (um usuário participante de uma destas listas poderá se comunicar com qualquer outro pertencente a esta mesma lista), adicionar ou remover outros usuários como administradores da empresa (mas a empresa sempre deverá ter pelo menos um administrador ativo).
Convites
Para enviar um convite, o usuário deve conhecer o nome completo ou o email do usuário que quer convidar. Se aceito, um será adicionado à lista de contatos do outro e ambos poderão se comunicar.
Quando o convite for do administrador de um grupo de conversas para um usuário participar deste grupo, apenas o grupo será adicionado ao usuário e não cada integrante do grupo.
Mensagens
Qualquer usuário poderá enviar mensagens pré-definidas a outros usuários, mas para qualquer outra comunicação ambos têm que estar na lista de contato um do outro.
A qualquer momento outros usuários podem ser convidados para participar de uma conversa que já está em andamento, transformando-a em uma conversa em grupo. Todos os usuários terão acesso ao histórico desta conversa bem como todos arquivos trocados.
Links HTML
Qualquer tipo de hiperlink será censurado se estiver em uma lista negra (a ser definida). Mesmo se não estiver, quando um usuário tentar acessar o link, avisos de conteúdo perigoso deverão ser mostrados e aceitos antes de se permitir o acesso. Os links sempre serão abertos em uma janela nova para evitar a associação do conteúdo do link com o sistema de comunicação.
Troca de arquivos
Para formatos de arquivos conhecidamente isentos de vírus (imagens, PDF, etc.) A troca será permitida em qualquer conversa, com limites de tamanhos e outras seguranças. Todos arquivos trocados devem ser arquivados junto com as mensagens trocadas.
Arquivos menos seguros só poderão ser trocados quando os usuários fizerem parte de uma empresa devidamente registrada.
Todo arquivo deverá ser mostrado nas conversas como ícones, nunca como preview e um alerta de conteúdo deverá ser mostrado antes de o usuário poder acessá-lo.
Grupos de conversa
Todos os usuários podem criar conversas em grupos, convidando outros usuários a participarem.
O criador de uma empresa também poderá criar grupos para a empresa e os usuários poderão tanto serem convidados quanto poderão pedir permissão para se juntarem a um grupo, desde que tenham vínculo com a empresa.
Quando um usuário participa de um grupo qualquer ele pode enviar mensagens a públicas mas ele não terá permissão de enviar mensagens particulares a nenhum outro participante do grupo que não esteja em sua lista de contatos particular.
Grupos especiais
As contabilidades e as empresas poderão grupos formados por muitos usuários e qualquer usuário deste grupo poderá então tomar a conversa para sí, excluíndo o restante dos usuários desta conversa (podendo ser re-adicionados se necessário).
Apenas os usuários disponíveis receberão a mensagem inicial, quem estiver ausente ou ocupado não.
Prazo de Entrega: 19 de Outubro de 2019