{"id":22226372,"url":"https://github.com/trkotovicz/inventory-report","last_synced_at":"2026-05-07T17:41:37.446Z","repository":{"id":65750752,"uuid":"598869774","full_name":"trkotovicz/inventory-report","owner":"trkotovicz","description":"Gerador de relatórios que recebe como entrada arquivos com dados de um estoque e gera, como saída, um relatório em cima desses dados. Desenvolvido em Python com POO e testes com Pytest. Lê arquivos CSV, XML e JSON.","archived":false,"fork":false,"pushed_at":"2023-02-09T22:30:01.000Z","size":33,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-30T07:44:06.870Z","etag":null,"topics":["csv","docker","json","poo","pytest","python","xml"],"latest_commit_sha":null,"homepage":"","language":"Python","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/trkotovicz.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":"2023-02-08T00:56:06.000Z","updated_at":"2023-02-09T21:35:36.000Z","dependencies_parsed_at":"2023-06-26T02:03:47.525Z","dependency_job_id":null,"html_url":"https://github.com/trkotovicz/inventory-report","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/trkotovicz%2Finventory-report","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trkotovicz%2Finventory-report/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trkotovicz%2Finventory-report/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trkotovicz%2Finventory-report/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/trkotovicz","download_url":"https://codeload.github.com/trkotovicz/inventory-report/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245425845,"owners_count":20613249,"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":["csv","docker","json","poo","pytest","python","xml"],"created_at":"2024-12-03T00:28:23.340Z","updated_at":"2026-05-07T17:41:32.416Z","avatar_url":"https://github.com/trkotovicz.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Inventory Report\n\nInventory reports é um gerador de relatórios que recebe como entrada arquivos com dados de um estoque e gera, como saída, um relatório acerca destes dados.\n\nEsses dados de estoque poderão ser obtidos de diversas fontes:\n- Através da importação de um arquivo CSV;\n- Através da importação de um arquivo JSON;\n- Através da importação de um arquivo XML.\n\nAlém disso, o relatório final possui duas versões: simples e completa.\n\n\n## Habilidades desenvolvidas:\n\nAplicar conceitos de Orientação a Objetos em Python;\u003c/br\u003e\nAplicar padrões de projeto;\u003c/br\u003e\nLeitura e escrita de arquivos (XML, CSV, JSON).\u003c/br\u003e\n\n\n\n## Relatórios\n\n\n### Versão simplificada do relatório\n\nO método retorna uma string de saída com o seguinte formato:\n```\nData de fabricação mais antiga: YYYY-MM-DD\nData de validade mais próxima: YYYY-MM-DD\nEmpresa com mais produtos: NOME DA EMPRESA\nA data de validade mais próxima, somente considera itens que ainda não venceram.\n```\n\n\n### Versão completa do relatório\n\nO método retorna uma string de saída com o seguinte formato:\n```\nData de fabricação mais antiga: YYYY-MM-DD\nData de validade mais próxima: YYYY-MM-DD\nEmpresa com mais produtos: NOME DA EMPRESA\nProdutos estocados por empresa:\n- Physicians Total Care, Inc.: QUANTIDADE\n- Newton Laboratories, Inc.: QUANTIDADE\n- Forces of Nature: QUANTIDADE\n```\n\n\n### Versão do relatório em cores\n\nUma versão deste relatório será exibida em letreiros em Led, estes letreiros são coloridos, para isso, já implementamos o método responsável por retornar este relatório em cores.\n\n\nRepresentação abaixo de como será a disposição das cores:\n\n🟩Data de fabricação mais antiga:🟩 🟦10-05-2022🟦\u003c/br\u003e\n🟩Data de validade mais próxima:🟩 🟦14-06-2021🟦\u003c/br\u003e\n🟩Empresa com mais produtos:🟩 🟥Farinini🟥\u003c/br\u003e\n\n---\n\n\u003cdetails\u003e\n    \u003csummary\u003e\u003cstrong\u003e💻 Ambiente Virtual\u003c/strong\u003e\u003c/summary\u003e\u003cbr /\u003e\n\nO Python oferece um recurso chamado de ambiente virtual, onde permite sua máquina rodar sem conflitos, diferentes tipos de projetos com diferentes versões de bibliotecas.\u003c/br\u003e\n\nCriar o ambiente virtual\n```\n$ python3 -m venv .venv\n```\n\nAtivar o ambiente virtual\n```\n$ source .venv/bin/activate\n```\n\nInstalar as dependências no ambiente virtual\n```\n$ python3 -m pip install -r dev-requirements.txt\n```\nCom o seu ambiente virtual ativo, as dependências serão instaladas neste ambiente.\nQuando precisar desativar o ambiente virtual, execute o comando \"deactivate\".\n\nO arquivo `dev-requirements.txt` contém todas as dependências que serão utilizadas no projeto.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n    \u003csummary\u003e\u003cstrong\u003e🛠 Testes\u003c/strong\u003e\u003c/summary\u003e\u003cbr /\u003e\n    \nPara executar os testes certifique-se de que você está com o ambiente virtual ativado.\u003c/br\u003e\n\nExecutar os testes\n```\n$ python3 -m pytest\n```\nO arquivo pyproject.toml já configura corretamente o pytest. Entretanto, caso você tenha problemas com isso e queira explicitamente uma saída completa, o comando é:\n```\npython3 -m pytest -s -vv\n```\nCaso precise executar apenas um arquivo de testes basta executar o comando:\n```\npython3 -m pytest tests/nomedoarquivo.py\n```\nCaso precise executar apenas uma função de testes basta executar o comando:\n```\npython3 -m pytest -k nome_da_func_de_tests\n```\nSe desejar que os testes parem de ser executados quando acontecer o primeiro erro, use o parâmetro -x\n```\npython3 -m pytest -x tests/test_simple_report.py\n```\nCaso queria executar um teste especifico de um arquivo basta executar o comando:\n```\npython3 -m pytest -x tests/nomedoarquivo.py::test_nome_do_teste\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n    \u003csummary\u003e\u003cstrong\u003e📟 Executando o Projeto\u003c/strong\u003e\u003c/summary\u003e\u003cbr /\u003e\n\nO programa é executável via linha de comando. O comando a ser executado será `inventory_report`.\u003c/br\u003e\nPara que ele funcione em seu ambiente é preciso antes instalar o próprio código como um pacote pip: \u003ccode\u003epip install .\u003c/code\u003e\n\n\u003c/br\u003e\n\nAgora você poderá chamar o comando inventory_report passando seus argumentos:\n```\ninventory_report argumento1 argumento2\n```\nargumento1 deve receber o caminho de um arquivo a ser importado. O arquivo pode ser um csv, json ou xml.\n\nargumento2 pode receber duas strings: simples ou completo, cada uma gerando o respectivo relatório.\n\nOutra opção é invocar o comando assim:\n```\npython3 -m inventory_report.main argumento1 argumento2\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003e🗃️ Arquivos com os dados de entrada\u003c/strong\u003e\u003c/summary\u003e\u003cbr /\u003e\n\nTrês formatos de importação estão disponíveis no diretório \u003ccode\u003edata\u003c/code\u003e dentro do diretório \u003ccode\u003einventory_report\u003c/code\u003e. Confira o exemplo de formato deles:\n  \n\u003cstrong\u003eArquivos CSV\u003c/strong\u003e\nOs arquivos **CSV** são separados por vírgula, como no exemplo abaixo:\n\n```CSV\nid,nome_do_produto,nome_da_empresa,data_de_fabricacao,data_de_validade,numero_de_serie,instrucoes_de_armazenamento\n1,cadeira,Target Corporation,2021-02-18,2025-09-17,CR25,empilhadas\n2,mesa,\"Galena Madeira, Inc.\",2022-12-06,2026-12-25,FR29,desmontadas\n3,abajur,Keen Iluminação,2019-12-22,2025-11-07,CZ09,em caixas\n```\n\n\u003cstrong\u003eArquivos JSON\u003c/strong\u003e\nOs arquivos JSON seguem o seguinte modelo:\n\n```json\n[\n  {\n    \"id\":1,\n    \"nome_do_produto\":\"Borracha\",\n    \"nome_da_empresa\":\"Papelaria Solar\",\n    \"data_de_fabricacao\":\"2021-07-04\",\n    \"data_de_validade\":\"2029-02-09\",\n    \"numero_de_serie\":\"FR48\",\n    \"instrucoes_de_armazenamento\":\"Ao abrigo de luz solar\"\n  }\n]\n```\n\n\u003cstrong\u003eArquivos XML\u003c/strong\u003e\nOs arquivos **XML** seguem o seguinte modelo:\n\n```xml\n\u003c?xml version='1.0' encoding='UTF-8'?\u003e\n\u003cdataset\u003e\n  \u003crecord\u003e\n    \u003cid\u003e1\u003c/id\u003e\n    \u003cnome_do_produto\u003eMicrofone\u003c/nome_do_produto\u003e\n    \u003cnome_da_empresa\u003eTecno Uau LTDA\u003c/nome_da_empresa\u003e\n    \u003cdata_de_fabricacao\u003e2021-10-27\u003c/data_de_fabricacao\u003e\n    \u003cdata_de_validade\u003e2032-08-31\u003c/data_de_validade\u003e\n    \u003cnumero_de_serie\u003eMT08\u003c/numero_de_serie\u003e\n    \u003cinstrucoes_de_armazenamento\u003eLonge de fonte de calor\u003c/instrucoes_de_armazenamento\u003e\n  \u003c/record\u003e\n\u003c/dataset\u003e\n```\n\n\u003c/details\u003e\n\n---\n\n\nProjeto desenvolvido por [Thais R Kotovicz](https://www.linkedin.com/in/thaiskotovicz/).\n\u003c/br\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrkotovicz%2Finventory-report","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrkotovicz%2Finventory-report","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrkotovicz%2Finventory-report/lists"}