{"id":13622709,"url":"https://github.com/juntossomosmais/code-challenge","last_synced_at":"2025-09-17T21:20:07.824Z","repository":{"id":46192830,"uuid":"164712604","full_name":"juntossomosmais/code-challenge","owner":"juntossomosmais","description":"Conheça nosso desafio para trabalhar conosco como engenheiro de software","archived":false,"fork":false,"pushed_at":"2024-11-27T17:15:45.000Z","size":155,"stargazers_count":54,"open_issues_count":1,"forks_count":19,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-03-26T23:07:09.119Z","etag":null,"topics":["apps","back-end","code-challenge","csharp","full-stack","java","javascript","kotlin","nodejs","python"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/juntossomosmais.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-01-08T18:50:57.000Z","updated_at":"2025-01-29T19:15:22.000Z","dependencies_parsed_at":"2024-11-27T18:22:26.454Z","dependency_job_id":"b4f85498-eedc-47a3-a84f-31fb1dd760e5","html_url":"https://github.com/juntossomosmais/code-challenge","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juntossomosmais%2Fcode-challenge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juntossomosmais%2Fcode-challenge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juntossomosmais%2Fcode-challenge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juntossomosmais%2Fcode-challenge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/juntossomosmais","download_url":"https://codeload.github.com/juntossomosmais/code-challenge/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248675434,"owners_count":21143763,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apps","back-end","code-challenge","csharp","full-stack","java","javascript","kotlin","nodejs","python"],"created_at":"2024-08-01T21:01:23.157Z","updated_at":"2025-09-17T21:20:02.783Z","avatar_url":"https://github.com/juntossomosmais.png","language":"Shell","funding_links":[],"categories":["Shell"],"sub_categories":[],"readme":"\n# Code Challenge Juntos Somos+\n\nO objetivo desse code challenge é, mais do que seu currículo, formação e certificações, avaliarmos como você lida com esse desafio, quais ferramentas escolhe, a qualidade do seu código e a maneira de pensar nele.\n\nA solução desse desafio é extremamente importante para entendermos os seus requisitos de qualidade, organização do seu código, performance, portabilidade, etc.\n\nO desafio deve ser feito em Python ou C#, de acordo com a vaga do processo seltivo. Sinta-se à vontade para escolher as ferramentas que achar necessário. Queremos ser surpreendidos pela sua abordagem no desafio!\n\nTemos apenas dois pré-requisitos: código testado e pronto para produção.\n\nTopa? 😁\n\n# O desafio\n\nRecebemos insumos de clientes via arquivo CSV das empresas participantes todo mês, contudo, recebemos de alguns no formato JSON.\n\nExemplo do CSV:\n\n```\ngender,name.title,name.first,name.last,location.street,location.city,location.state,location.postcode,location.coordinates.latitude,location.coordinates.longitude,location.timezone.offset,location.timezone.description,email,dob.date,dob.age,registered.date,registered.age,phone,cell,picture.large,picture.medium,picture.thumbnail\nmale,mr,joselino,alves,2095 rua espirito santo ,são josé de ribamar,paraná,96895,-35.8687,-131.8801,-10:00,Hawaii,joselino.alves@example.com,1996-01-09T02:53:34Z,22,2014-02-09T19:19:32Z,4,(97) 0412-1519,(94) 6270-3362,https://randomuser.me/api/portraits/men/75.jpg,https://randomuser.me/api/portraits/med/men/75.jpg,https://randomuser.me/api/portraits/thumb/men/75.jpg\n```\nExemplo do JSON:\n\n```\n{\"gender\":\"male\",\"name\":{\"title\":\"mr\",\"first\":\"antonelo\",\"last\":\"da conceição\"},\"location\":{\"street\":\"8986 rua rui barbosa \",\"city\":\"santo andré\",\"state\":\"alagoas\",\"postcode\":40751,\"coordinates\":{\"latitude\":\"-69.8704\",\"longitude\":\"-165.9545\"},\"timezone\":{\"offset\":\"+1:00\",\"description\":\"Brussels, Copenhagen, Madrid, Paris\"}},\"email\":\"antonelo.daconceição@example.com\",\"dob\":{\"date\":\"1956-02-12T10:38:37Z\",\"age\":62},\"registered\":{\"date\":\"2005-12-05T15:22:53Z\",\"age\":13},\"phone\":\"(85) 8747-8125\",\"cell\":\"(87) 2414-0993\",\"picture\":{\"large\":\"https://randomuser.me/api/portraits/men/8.jpg\",\"medium\":\"https://randomuser.me/api/portraits/med/men/8.jpg\",\"thumbnail\":\"https://randomuser.me/api/portraits/thumb/men/8.jpg\"}}\n```\n\nPrecisamos aplicar nossa regra de negócio a fim de casar com necessidades internas da Juntos Somos+.\n\n## Regras de negócio que você precisa implementar\n\nCostumamos trabalhar com os **clientes pelas 5 regiões do país**: \n\n- Norte\n- Nordeste\n- Centro-Oeste\n- Sudeste\n- Sul\n\nComo a concentração de consultores nossos é mais forte em alguns pontos, dependendo da localidade do cliente pode ficar mais fácil nosso time atendê-lo. Considere os pontos abaixo **(bounding box) para classificá-lo de acordo com os rótulos**:\n\n- **ESPECIAL**\n\n```\nminlon: -2.196998\nminlat -46.361899\nmaxlon: -15.411580\nmaxlat: -34.276938\n```\n```\nminlon: -19.766959\nminlat -52.997614\nmaxlon: -23.966413\nmaxlat: -44.428305\n```\n\n- **NORMAL**\n\n```\nminlon: -26.155681\nminlat -54.777426\nmaxlon: -34.016466\nmaxlat: -46.603598\n```\n\n- **TRABALHOSO:** Qualquer outro usuário que não se encaixa nas regras acima.\n\nOutro ponto é que temos intenção de expandir os serviços para outros países, então **quanto mais genérico o cadastro, melhor**. Infelizmente os registros CSVs e JSONs não estão 100% prontos. Para melhorá-los, precisamos:\n\n1. Transformar os contatos telefônicos no formato [E.164](https://en.wikipedia.org/wiki/E.164). Exemplo: (86) 8370-9831 vira +558683709831.\n2. Inserir a nacionalidade. Como todos os clientes ainda são do brasil, o valor padrão será BR.\n3. Alterar o valor do campo `gender` para `F` ou `M` em vez de `female` ou `male`.\n4. Retirar o campo `age` de `dob` e `registered`.\n5. Alterar estrutura para simplificar leitura e usar arrays em campos específicos (ver exemplo abaixo)\n\nExemplo de contrato de OUTPUT:\n\n```json\n{\n  \"type\": \"laborious\"\n  \"gender\": \"m\",\n  \"name\": {\n    \"title\": \"mr\",\n    \"first\": \"quirilo\",\n    \"last\": \"nascimento\"\n  },\n  \"location\": {\n    \"region\": \"sul\"\n    \"street\": \"680 rua treze \",\n    \"city\": \"varginha\",\n    \"state\": \"paraná\",\n    \"postcode\": 37260,\n    \"coordinates\": {\n      \"latitude\": \"-46.9519\",\n      \"longitude\": \"-57.4496\"\n    },\n    \"timezone\": {\n      \"offset\": \"+8:00\",\n      \"description\": \"Beijing, Perth, Singapore, Hong Kong\"\n    }\n  },\n  \"email\": \"quirilo.nascimento@example.com\",\n  \"birthday\": \"1979-01-22T03:35:31Z\",\n  \"registered\": \"2005-07-01T13:52:48Z\",\n  \"telephoneNumbers\": [\n    \"+556629637520\"\n  ],\n  \"mobileNumbers\": [\n    \"+553270684089\"\n  ],\n  \"picture\": {\n    \"large\": \"https://randomuser.me/api/portraits/men/83.jpg\",\n    \"medium\": \"https://randomuser.me/api/portraits/med/men/83.jpg\",\n    \"thumbnail\": \"https://randomuser.me/api/portraits/thumb/men/83.jpg\"\n  },\n  \"nationality\": \"BR\"\n}\n\n```\n\n## Faça uma API\n\nPense em uma API que dada a **região do usuário** e seu **tipo de classificação**, responda a **listagem dos elegíveis**. Não existe routing definido para a aplicação, fica a seu gosto.\n\nÉ **obrigatório** trabalhar com toda manipulação dos dados **em memória**. O carregamento dos dados de input deve ser por meio de request HTTP **ao subir a sua aplicação**, ou seja, antes do seu App estar `ready`, você fará um request para os links fornecidos abaixo.\n\nAlém da lista dos usuários elegíveis, para permitir navegação entre os registros, **deve ser implementado** os seguintes metadados de paginação:\n\n```\n  {\n    pageNumber: X,\n    pageSize: P,\n    totalCount: T,\n    users: [\n      ...\n    ]\n  }\n```\n\nImagine que essa API possa ser acessada por consumidores específicos, então coloque o que mais achar necessário.\n\nUse como input os links abaixo (~1000 registros cada):\n\n- https://storage.googleapis.com/juntossomosmais-code-challenge/input-backend.csv\n- https://storage.googleapis.com/juntossomosmais-code-challenge/input-backend.json\n\n## Validação\n\nO arquivo [validate.sh](./validate.sh) contém um teste mínimo da chamada da API. O teste só será avaliado se a API for validada corretamente com esse script.\n\n\n# Como entregar\n\nVocê deve disponibilizar seu código em seu repositório do Github e manter o repositório como privado.\n\nÉ obrigatório ter um **README** com todas as instruções sobre o seu desafio.\n\nAssim que finalizar, nos avise pelo e-mail vagas-dev@juntossomosmais.com.br com:\n\n- Assunto: [Back-end Developer] Seu Nome;\n- Link do repositório para testes\n- Informações sobre você: Github, LinkedIn e o que mais achar relevante.\n\nEm seguida enviaremos o(s) usuário(s) do github que você deve liberar acesso ao código.\n\nO prazo para envio é de 7 dias, mas se precisar de mais tempo é só nos avisar 😊\n\n## Outros desafios\n\nSe a sua vaga for específica para front-end, veja [este outro desafio](https://github.com/juntossomosmais/frontend-challenge).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuntossomosmais%2Fcode-challenge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuntossomosmais%2Fcode-challenge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuntossomosmais%2Fcode-challenge/lists"}