[{"data":1,"prerenderedAt":1619},["ShallowReactive",2],{"navigation_docs":3,"-projetos-integradores-pi-05-gestao-estoque":252,"-projetos-integradores-pi-05-gestao-estoque-surround":1614},[4,96,189],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"⚙️ Engenharia de Software","i-lucide-book-open","\u002Fengenharia-software","1.engenharia-software",[10,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92],{"title":5,"path":7,"stem":11},"1.engenharia-software\u002Findex",{"title":13,"path":14,"stem":15},"📋 Plano de Ensino e Aplicações","\u002Fengenharia-software\u002Fengenharia-software-aplicacoes","1.engenharia-software\u002F01.engenharia-software-aplicacoes",{"title":17,"path":18,"stem":19},"Cap 01: Introdução e Natureza do Software","\u002Fengenharia-software\u002Fcap-01","1.engenharia-software\u002F02.cap-01",{"title":21,"path":22,"stem":23},"Cap 02: Modelos de Processo de Software","\u002Fengenharia-software\u002Fcap-02","1.engenharia-software\u002F03.cap-02",{"title":25,"path":26,"stem":27},"Cap 03: As Atividades do Processo","\u002Fengenharia-software\u002Fcap-03","1.engenharia-software\u002F04.cap-03",{"title":29,"path":30,"stem":31},"Cap 04: Metodologias Ágeis","\u002Fengenharia-software\u002Fcap-04","1.engenharia-software\u002F05.cap-04",{"title":33,"path":34,"stem":35},"Cap 05: Fundamentos de Requisitos","\u002Fengenharia-software\u002Fcap-05","1.engenharia-software\u002F06.cap-05",{"title":37,"path":38,"stem":39},"Cap 06: Elicitação e Levantamento","\u002Fengenharia-software\u002Fcap-06","1.engenharia-software\u002F07.cap-06",{"title":41,"path":42,"stem":43},"Cap 07: Especificação de Requisitos (ERS)","\u002Fengenharia-software\u002Fcap-07","1.engenharia-software\u002F08.cap-07",{"title":45,"path":46,"stem":47},"Cap 08: Validação e Gestão","\u002Fengenharia-software\u002Fcap-08","1.engenharia-software\u002F09.cap-08",{"title":49,"path":50,"stem":51},"Cap 09: Fundamentos da Modelagem","\u002Fengenharia-software\u002Fcap-09","1.engenharia-software\u002F10.cap-09",{"title":53,"path":54,"stem":55},"Cap 10: Diagrama de Casos de Uso (Conceitos)","\u002Fengenharia-software\u002Fcap-10","1.engenharia-software\u002F11.cap-10",{"title":57,"path":58,"stem":59},"Cap 11: Casos de Uso (Prática e Relações)","\u002Fengenharia-software\u002Fcap-11","1.engenharia-software\u002F12.cap-11",{"title":61,"path":62,"stem":63},"Cap 12: Diagrama de Classes (Conceitos)","\u002Fengenharia-software\u002Fcap-12","1.engenharia-software\u002F13.cap-12",{"title":65,"path":66,"stem":67},"Cap 13: Herança e Polimorfismo","\u002Fengenharia-software\u002Fcap-13","1.engenharia-software\u002F14.cap-13",{"title":69,"path":70,"stem":71},"Cap 14: Diagrama de Sequência","\u002Fengenharia-software\u002Fcap-14","1.engenharia-software\u002F15.cap-14",{"title":73,"path":74,"stem":75},"Cap 15: Diagramas Dinâmicos (Estados e Atividades)","\u002Fengenharia-software\u002Fcap-15","1.engenharia-software\u002F16.cap-15",{"title":77,"path":78,"stem":79},"Cap 16: Qualidade de Software (SQA)","\u002Fengenharia-software\u002Fcap-16","1.engenharia-software\u002F17.cap-16",{"title":81,"path":82,"stem":83},"Cap 17: Estratégias de Teste","\u002Fengenharia-software\u002Fcap-17","1.engenharia-software\u002F18.cap-17",{"title":85,"path":86,"stem":87},"Cap 18: Manutenção e Evolução","\u002Fengenharia-software\u002Fcap-18","1.engenharia-software\u002F19.cap-18",{"title":89,"path":90,"stem":91},"Cap 19: Gerência de Configuração (SCM)","\u002Fengenharia-software\u002Fcap-19","1.engenharia-software\u002F20.cap-19",{"title":93,"path":94,"stem":95},"Cap 20: Conclusão e Próximos Passos","\u002Fengenharia-software\u002Fcap-20","1.engenharia-software\u002F21.cap-20",{"title":97,"icon":98,"path":99,"stem":100,"children":101},"🛠️ Atividades","i-lucide-wrench","\u002Fatividades","2.atividades",[102,105,109,113,117,121,125,129,133,137,141,145,149,153,157,161,165,169,173,177,181,185],{"title":103,"path":99,"stem":104},"📋 Orientações Gerais","2.atividades\u002Findex",{"title":106,"path":107,"stem":108},"📅 Cronograma","\u002Fatividades\u002Fcronograma","2.atividades\u002F01.cronograma",{"title":110,"path":111,"stem":112},"✏️ Atividade 01: Escopo e Personas","\u002Fatividades\u002Fatv-01-escopo","2.atividades\u002F02.atv-01-escopo",{"title":114,"path":115,"stem":116},"⚙️ Atividade 02: Processos de Software","\u002Fatividades\u002Fatv-02-processos","2.atividades\u002F03.atv-02-processos",{"title":118,"path":119,"stem":120},"📋 Atividade 03: Engenharia de Requisitos","\u002Fatividades\u002Fatv-03-requisitos","2.atividades\u002F04.atv-03-requisitos",{"title":122,"path":123,"stem":124},"📝 Atividade 04: User Stories e Backlog","\u002Fatividades\u002Fatv-04-backlog","2.atividades\u002F05.atv-04-backlog",{"title":126,"path":127,"stem":128},"🎭 Atividade 05: Casos de Uso (UML)","\u002Fatividades\u002Fatv-05-casos-uso","2.atividades\u002F06.atv-05-casos-uso",{"title":130,"path":131,"stem":132},"🖼️ Atividade 06: Prototipagem e Wireframes","\u002Fatividades\u002Fatv-06-prototipagem","2.atividades\u002F07.atv-06-prototipagem",{"title":134,"path":135,"stem":136},"🏛️ Atividade 07: Diagrama de Classes (UML)","\u002Fatividades\u002Fatv-07-classes","2.atividades\u002F08.atv-07-classes",{"title":138,"path":139,"stem":140},"🔀 Atividade 08: Diagrama de Sequência (UML)","\u002Fatividades\u002Fatv-08-sequencia","2.atividades\u002F09.atv-08-sequencia",{"title":142,"path":143,"stem":144},"🧪 Atividade 09: Qualidade e Testes","\u002Fatividades\u002Fatv-09-testes","2.atividades\u002F10.atv-09-testes",{"title":146,"path":147,"stem":148},"🏁 Atividade 10: Projeto Integrador Final","\u002Fatividades\u002Fatv-10-projeto-final","2.atividades\u002F11.atv-10-projeto-final",{"title":150,"path":151,"stem":152},"📊 Atividade 11: Diagrama de Atividades (UML)","\u002Fatividades\u002Fatv-11-atividades","2.atividades\u002F12.atv-11-atividades",{"title":154,"path":155,"stem":156},"🔄 Atividade 12: Diagrama de Transição de Estados (UML)","\u002Fatividades\u002Fatv-12-estados","2.atividades\u002F13.atv-12-estados",{"title":158,"path":159,"stem":160},"🏗️ Atividade 13: Arquitetura de Software e Padrões","\u002Fatividades\u002Fatv-13-arquitetura","2.atividades\u002F14.atv-13-arquitetura",{"title":162,"path":163,"stem":164},"🌐 Atividade 14: Modelagem de APIs REST e Swagger","\u002Fatividades\u002Fatv-14-apis-swagger","2.atividades\u002F15.atv-14-apis-swagger",{"title":166,"path":167,"stem":168},"🌿 Atividade 15: GitFlow e Trabalho Colaborativo","\u002Fatividades\u002Fatv-15-gitflow-colaboracao","2.atividades\u002F16.atv-15-gitflow-colaboracao",{"title":170,"path":171,"stem":172},"🚀 Atividade 16: Pipelines de CI\u002FCD com GitHub Actions","\u002Fatividades\u002Fatv-16-pipelines-cicd","2.atividades\u002F17.atv-16-pipelines-cicd",{"title":174,"path":175,"stem":176},"🐳 Atividade 17: Containerização de Ambientes com Docker","\u002Fatividades\u002Fatv-17-conteineres-docker","2.atividades\u002F18.atv-17-conteineres-docker",{"title":178,"path":179,"stem":180},"🔒 Atividade 18: Segurança no Desenvolvimento e OWASP","\u002Fatividades\u002Fatv-18-seguranca-devsecops","2.atividades\u002F19.atv-18-seguranca-devsecops",{"title":182,"path":183,"stem":184},"📈 Atividade 19: Métricas de Software, Estimativas e DORA","\u002Fatividades\u002Fatv-19-metricas-estimativas","2.atividades\u002F20.atv-19-metricas-estimativas",{"title":186,"path":187,"stem":188},"🏆 Atividade 20: Projeto Final Avançado (Fase 2)","\u002Fatividades\u002Fatv-20-projeto-final-avancado","2.atividades\u002F21.atv-20-projeto-final-avancado",{"title":190,"icon":191,"path":192,"stem":193,"children":194},"🖼️ Galeria de Projetos Integradores","i-lucide-image","\u002Fprojetos-integradores","3.projetos-integradores",[195,197,207,216,225,234,243],{"title":190,"path":192,"stem":196},"3.projetos-integradores\u002Findex",{"title":198,"path":199,"stem":200,"children":201},"🅿️ Projeto 01: Gestão de Estacionamentos","\u002Fprojetos-integradores\u002Fpi-01-gestao-estacionamentos","3.projetos-integradores\u002F01.pi-01-gestao-estacionamentos\u002Findex",[202,203],{"title":198,"path":199,"stem":200},{"title":204,"path":205,"stem":206},"README","\u002Fprojetos-integradores\u002Fpi-01-gestao-estacionamentos\u002Freadme","3.projetos-integradores\u002F01.pi-01-gestao-estacionamentos\u002F2.readme",{"title":208,"path":209,"stem":210,"children":211},"🔐 Projeto 02: Gerador de Senhas","\u002Fprojetos-integradores\u002Fpi-02-gerador-senhas","3.projetos-integradores\u002F02.pi-02-gerador-senhas\u002Findex",[212,213],{"title":208,"path":209,"stem":210},{"title":204,"path":214,"stem":215},"\u002Fprojetos-integradores\u002Fpi-02-gerador-senhas\u002Freadme","3.projetos-integradores\u002F02.pi-02-gerador-senhas\u002F2.readme",{"title":217,"path":218,"stem":219,"children":220},"🍣 Projeto 03: Pedidos Restaurante","\u002Fprojetos-integradores\u002Fpi-03-pedidos-restaurante","3.projetos-integradores\u002F03.pi-03-pedidos-restaurante\u002Findex",[221,222],{"title":217,"path":218,"stem":219},{"title":204,"path":223,"stem":224},"\u002Fprojetos-integradores\u002Fpi-03-pedidos-restaurante\u002Freadme","3.projetos-integradores\u002F03.pi-03-pedidos-restaurante\u002F2.readme",{"title":226,"path":227,"stem":228,"children":229},"📱 Projeto 04: Empréstimos Dispositivos","\u002Fprojetos-integradores\u002Fpi-04-emprestimos-dispositivos","3.projetos-integradores\u002F04.pi-04-emprestimos-dispositivos\u002Findex",[230,231],{"title":226,"path":227,"stem":228},{"title":204,"path":232,"stem":233},"\u002Fprojetos-integradores\u002Fpi-04-emprestimos-dispositivos\u002Freadme","3.projetos-integradores\u002F04.pi-04-emprestimos-dispositivos\u002F2.readme",{"title":235,"path":236,"stem":237,"children":238},"📦 Projeto 05: Gestão de Estoque","\u002Fprojetos-integradores\u002Fpi-05-gestao-estoque","3.projetos-integradores\u002F05.pi-05-gestao-estoque\u002Findex",[239,240],{"title":235,"path":236,"stem":237},{"title":204,"path":241,"stem":242},"\u002Fprojetos-integradores\u002Fpi-05-gestao-estoque\u002Freadme","3.projetos-integradores\u002F05.pi-05-gestao-estoque\u002F2.readme",{"title":244,"path":245,"stem":246,"children":247},"🛵 Projeto 06: Aplicativo de Delivery","\u002Fprojetos-integradores\u002Fpi-06-delivery","3.projetos-integradores\u002F06.pi-06-delivery\u002Findex",[248,249],{"title":244,"path":245,"stem":246},{"title":204,"path":250,"stem":251},"\u002Fprojetos-integradores\u002Fpi-06-delivery\u002Freadme","3.projetos-integradores\u002F06.pi-06-delivery\u002F2.readme",{"id":253,"title":235,"body":254,"description":885,"extension":1609,"links":1610,"meta":1611,"navigation":913,"path":236,"seo":1612,"stem":237,"__hash__":1613},"docs\u002F3.projetos-integradores\u002F05.pi-05-gestao-estoque\u002Findex.md",{"type":255,"value":256,"toc":1571},"minimark",[257,311,314,344,355,358,374,379,381,385,549,551,555,563,566,570,574,582,586,593,597,604,608,624,626,630,634,670,674,698,702,709,772,776,800,805,842,848,850,854,861,865,879,1126,1130,1137,1257,1270,1272,1276,1280,1283,1288,1322,1327,1349,1353,1356,1384,1388,1391,1510,1512,1516,1519,1523,1526,1530,1539,1543,1546,1549,1553,1556,1559,1562,1567],[258,259,261,262,261,267,270,272,274,276,278,280,261,282,261,287,261,292,294,296,298,300,302,304,261,306],"div",{"align":260},"center","\n  ",[263,264,266],"h3",{"id":265},"projeto-integrador","PROJETO INTEGRADOR",[268,269],"br",{},[268,271],{},[268,273],{},[268,275],{},[268,277],{},[268,279],{},[268,281],{},[283,284,286],"h1",{"id":285},"projeto-integrador-sistema-de-gerenciamento-de-estoque-digital","PROJETO INTEGRADOR: SISTEMA DE GERENCIAMENTO DE ESTOQUE DIGITAL",[288,289,291],"h2",{"id":290},"otimização-logística-e-controle-de-fluxo-de-mercadorias","Otimização Logística e Controle de Fluxo de Mercadorias",[268,293],{},[268,295],{},[268,297],{},[268,299],{},[268,301],{},[268,303],{},[268,305],{},[307,308,310],"h4",{"id":309},"_2026","2026",[258,312],{"style":313},"page-break-after: always;",[258,315,261,316,261,320,322,324,326,328,330,332,261,334,261,337,261,340,342],{"align":260},[263,317,319],{"id":318},"autores-do-projeto","AUTORES DO PROJETO",[268,321],{},[268,323],{},[268,325],{},[268,327],{},[268,329],{},[268,331],{},[268,333],{},[283,335,286],{"id":336},"projeto-integrador-sistema-de-gerenciamento-de-estoque-digital-1",[288,338,291],{"id":339},"otimização-logística-e-controle-de-fluxo-de-mercadorias-1",[268,341],{},[268,343],{},[258,345,261,347],{"align":346},"right",[258,348,350,351,261],{"style":349},"width: 50%; float: right; text-align: justify; font-size: 14px;","\n    ",[352,353,354],"p",{},"Documentação técnica do Projeto Integrador, desenvolvida como parte dos requisitos de avaliação nas disciplinas de Engenharia de Software e Banco de Dados.",[258,356],{"style":357},"clear: both;",[352,359,360,362,364,366,368,370,372],{},[268,361],{},[268,363],{},[268,365],{},[268,367],{},[268,369],{},[268,371],{},[268,373],{},[258,375,261,376],{"align":260},[307,377,310],{"id":378},"_2026-1",[258,380],{"style":313},[288,382,384],{"id":383},"sumário","Sumário",[386,387,388,396,433,469,491,520],"ol",{},[389,390,391],"li",{},[392,393,395],"a",{"href":394},"#1-introdu%C3%A7%C3%A3o","Introdução",[389,397,398,402],{},[392,399,401],{"href":400},"#2-fundamenta%C3%A7%C3%A3o-te%C3%B3rica","Fundamentação Teórica",[403,404,405,412,419,426],"ul",{},[389,406,407,408],{},"2.1. ",[392,409,411],{"href":410},"#21-o-problema-do-controle-de-estoque-manual","O Problema do Controle de Estoque Manual",[389,413,414,415],{},"2.2. ",[392,416,418],{"href":417},"#22-acur%C3%A1cia-de-invent%C3%A1rio-e-automa%C3%A7%C3%A3o","Acurácia de Inventário e Automação",[389,420,421,422],{},"2.3. ",[392,423,425],{"href":424},"#23-transa%C3%A7%C3%B5es-acid-em-sistemas-de-gest%C3%A3o","Transações ACID em Sistemas de Gestão",[389,427,428,429],{},"2.4. ",[392,430,432],{"href":431},"#24-preven%C3%A7%C3%A3o-de-anomalias-de-concorr%C3%AAncia","Prevenção de Anomalias de Concorrência",[389,434,435,439],{},[392,436,438],{"href":437},"#3-engenharia-de-software","Engenharia de Software",[403,440,441,448,455,462],{},[389,442,443,444],{},"3.1. ",[392,445,447],{"href":446},"#31-requisitos-funcionais-rf","Requisitos Funcionais (RF)",[389,449,450,451],{},"3.2. ",[392,452,454],{"href":453},"#32-requisitos-n%C3%A3o-funcionais-rnf","Requisitos Não Funcionais (RNF)",[389,456,457,458],{},"3.3. ",[392,459,461],{"href":460},"#33-orienta%C3%A7%C3%A3o-a-objetos-na-arquitetura-do-sistema","Orientação a Objetos na Arquitetura do Sistema",[389,463,464,465],{},"3.4. ",[392,466,468],{"href":467},"#34-caso-de-uso-principal-uc-01","Caso de Uso Principal (UC-01)",[389,470,471,475],{},[392,472,474],{"href":473},"#4-banco-de-dados-mysql","Banco de Dados (MySQL)",[403,476,477,484],{},[389,478,479,480],{},"4.1. ",[392,481,483],{"href":482},"#41-modelagem-e-script-ddl","Modelagem e Script DDL",[389,485,486,487],{},"4.2. ",[392,488,490],{"href":489},"#42-consultas-complexas-e-curva-abc-dml","Consultas Complexas e Curva ABC (DML)",[389,492,493,497],{},[392,494,496],{"href":495},"#5-gest%C3%A3o-seguran%C3%A7a-e-lgpd","Gestão, Segurança e LGPD",[403,498,499,506,513],{},[389,500,501,502],{},"5.1. ",[392,503,505],{"href":504},"#51-backlog-e-hist%C3%B3rias-de-usu%C3%A1rio-padr%C3%A3o-invest","Backlog e Histórias de Usuário (Padrão INVEST)",[389,507,508,509],{},"5.2. ",[392,510,512],{"href":511},"#52-conformidade-com-a-lgpd-e-privacy-by-design","Conformidade com a LGPD e Privacy by Design",[389,514,515,516],{},"5.3. ",[392,517,519],{"href":518},"#53-cronograma-do-projeto","Cronograma do Projeto",[389,521,522,526],{},[392,523,525],{"href":524},"#6-diagramas-de-visualiza%C3%A7%C3%A3o","Diagramas de Visualização",[403,527,528,535,542],{},[389,529,530,531],{},"6.1. ",[392,532,534],{"href":533},"#61-diagrama-de-casos-de-uso","Diagrama de Casos de Uso",[389,536,537,538],{},"6.2. ",[392,539,541],{"href":540},"#62-diagrama-de-classes","Diagrama de Classes",[389,543,544,545],{},"6.3. ",[392,546,548],{"href":547},"#63-diagrama-de-entidade-relacionamento-der","Diagrama de Entidade-Relacionamento (DER)",[258,550],{"style":313},[288,552,554],{"id":553},"_1-introdução","1. Introdução",[352,556,557,558,562],{},"No dinâmico mercado de pequenas e médias empresas (PMEs), a gestão eficiente do almoxarifado é um fator determinante para a lucratividade. O excesso de produtos imobiliza capital de giro, enquanto a ruptura de estoque (falta de produto) causa perda imediata de vendas e desgasta a confiança do consumidor. O Projeto Integrador ",[559,560,561],"strong",{},"Sistema de Gerenciamento de Estoque Digital",", desenvolvido como projeto acadêmico (2026), endereça essa problemática ao transformar processos baseados em planilhas não estruturadas em uma solução de software coesa, rastreável e automatizada.",[352,564,565],{},"O projeto tem como objetivo arquitetar um sistema que registre, com alta disponibilidade e consistência, a movimentação de mercadorias (Entradas e Saídas), permitindo que os gestores de armazém mantenham uma visão perfeitamente sincronizada de seus inventários. Este documento compila de forma exaustiva o planejamento arquitetural do sistema, explorando desde o paradigma orientado a objetos utilizado no código até a otimização de instruções relacionais em banco de dados, balizando o desenvolvimento em rigorosas normas de qualidade de software.",[288,567,569],{"id":568},"_2-fundamentação-teórica","2. Fundamentação Teórica",[263,571,573],{"id":572},"_21-o-problema-do-controle-de-estoque-manual","2.1. O Problema do Controle de Estoque Manual",[352,575,576,577,581],{},"O controle manual de estoques, comumente realizado através de fichas de prateleira (Kardex físico) ou planilhas locais não integradas, é altamente suscetível ao erro humano. O lapso em registrar uma saída no exato momento da expedição resulta em divergência entre o estoque físico e o estoque sistêmico. Essa falta de ",[578,579,580],"em",{},"Acurácia de Inventário"," compromete o planejamento de compras e a promessa de prazos de entrega.\nA automação proporcionada por este software visa mitigar esse atraso informacional, integrando a tela do operador diretamente à base de dados central, garantindo que o saldo consultado por qualquer departamento (Vendas, Logística, Diretoria) seja a fonte única da verdade.",[263,583,585],{"id":584},"_22-acurácia-de-inventário-e-automação","2.2. Acurácia de Inventário e Automação",[352,587,588,589,592],{},"Em logística, a Acurácia de Inventário é a métrica que mede a exatidão entre o sistema e o mundo real. Para maximizar esse indicador, o sistema projetado não permite modificações arbitrárias do \"Saldo\" de um produto. Em vez disso, o saldo é estritamente derivado da somatória aritmética do histórico de transações de Entrada (positivo) e Saída (negativo). Esse ",[578,590,591],{},"design pattern"," arquitetural de registro contábil (Double-entry bookkeeping) garante auditoria contínua, sendo impossível alterar o saldo final sem deixar um rastro transacional do motivo.",[263,594,596],{"id":595},"_23-transações-acid-em-sistemas-de-gestão","2.3. Transações ACID em Sistemas de Gestão",[352,598,599,600,603],{},"O núcleo deste sistema de estoque repousa sobre as propriedades ACID (Atomicidade, Consistência, Isolamento e Durabilidade) dos Sistemas de Gerenciamento de Bancos de Dados Relacionais (SGBDR). A atomicidade é crítica: se uma operação de transferência de produtos entre duas filiais falhar no meio da execução (ex: o produto sai da Filial A, mas a rede cai antes de entrar na Filial B), a transação inteira sofre um ",[578,601,602],{},"Rollback",", impedindo que o banco de dados fique em um estado inconsistente e produtos \"desapareçam\" no limbo cibernético.",[263,605,607],{"id":606},"_24-prevenção-de-anomalias-de-concorrência","2.4. Prevenção de Anomalias de Concorrência",[352,609,610,611,614,615,618,619,623],{},"Um desafio comum em estoques digitalizados é o problema da \"Leitura Fantasma\" ou atualizações perdidas (",[578,612,613],{},"Lost Updates","). Se dois operadores tentarem dar saída na última unidade de um produto simultaneamente, o sistema deve garantir que apenas o primeiro consiga concluir a transação, enquanto o segundo receba um aviso de \"Estoque Insuficiente\". Para isso, o banco de dados implementa estratégias de bloqueio pessimista (",[578,616,617],{},"Pessimistic Locking",") como o ",[620,621,622],"code",{},"SELECT ... FOR UPDATE"," nas consultas de disponibilidade, garantindo a integridade (RNF-001) contra concorrência pesada.",[258,625],{"style":313},[288,627,629],{"id":628},"_3-engenharia-de-software","3. Engenharia de Software",[263,631,633],{"id":632},"_31-requisitos-funcionais-rf","3.1. Requisitos Funcionais (RF)",[386,635,636,642,648,654,660],{},[389,637,638,641],{},[559,639,640],{},"RF-001 | Cadastro e Entrada de Produto:"," O sistema deve permitir o cadastro de um novo item de inventário e registrar as entradas oriundas de compras, associando data, quantidade e número de lote.",[389,643,644,647],{},[559,645,646],{},"RF-002 | Baixa e Saída de Produto:"," O sistema deve registrar a expedição\u002Fsaída de produtos, subtraindo o montante do saldo global.",[389,649,650,653],{},[559,651,652],{},"RF-003 | Consulta Rápida (Busca):"," O sistema deve fornecer um campo de busca inteligente (por código de barras ou descrição parcial) para apresentar a disponibilidade e a localização física do item no galpão.",[389,655,656,659],{},[559,657,658],{},"RF-004 | Recálculo de Saldo Automático:"," O sistema não deve exigir o cálculo manual de saldo; a atualização do inventário deve ser disparada automaticamente por gatilhos de software a cada transação computada.",[389,661,662,665,666,669],{},[559,663,664],{},"RF-005 | Histórico de Movimentações (Kardex):"," O sistema deve gerar um extrato (",[578,667,668],{},"log",") individualizado por produto detalhando o tipo, operador, quantidade e o saldo pós-operação.",[263,671,673],{"id":672},"_32-requisitos-não-funcionais-rnf","3.2. Requisitos Não Funcionais (RNF)",[386,675,676,686,692],{},[389,677,678,681,682,685],{},[559,679,680],{},"RNF-001 (Integridade de Dados):"," É expressamente proibido pelo sistema que qualquer registro resulte em saldo (quantidade em estoque) menor que zero. A persistência deve ser validada na camada de negócio e na ",[578,683,684],{},"Constraint"," do Banco de Dados.",[389,687,688,691],{},[559,689,690],{},"RNF-002 (Usabilidade e Desempenho):"," O módulo de consulta (RF-003) deve responder à requisição em menos de 200 milissegundos para não atrasar operações de balcão ou despacho.",[389,693,694,697],{},[559,695,696],{},"RNF-003 (Auditoria Criptográfica):"," Os preços de custo (informação comercial sensível da empresa) devem transitar encriptados ou restritos em tabelas protegidas, garantindo acesso apenas à gerência.",[263,699,701],{"id":700},"_33-orientação-a-objetos-na-arquitetura-do-sistema","3.3. Orientação a Objetos na Arquitetura do Sistema",[352,703,704,705,708],{},"A construção do ",[578,706,707],{},"Back-end"," explora intensamente a Programação Orientada a Objetos para conferir escalabilidade ao projeto:",[403,710,711,721,747],{},[389,712,713,716,717,720],{},[559,714,715],{},"Abstração:"," Uma classe ",[620,718,719],{},"TransacaoEstoque"," abstrai o conceito de movimentação. Independentemente se é uma \"Devolução de Cliente\", \"Avaria\", \"Venda\" ou \"Compra\", a abstração central lida com a data, produto e quantidade absoluta.",[389,722,723,726,727,730,731,734,735,738,739,742,743,746],{},[559,724,725],{},"Encapsulamento:"," A propriedade ",[620,728,729],{},"saldo_atual"," na classe ",[620,732,733],{},"Produto"," é protegida. Nenhuma outra classe pode atribuir valor direto (",[620,736,737],{},"produto.saldo = 50","). Para modificar o saldo, as classes externas invocam os métodos encapsulados ",[620,740,741],{},"produto.acrescentar(qtd)"," e ",[620,744,745],{},"produto.deduzir(qtd)",", as quais detêm toda a lógica de validação do RNF-001 (checar saldo negativo).",[389,748,749,752,753,742,756,759,760,763,764,767,768,771],{},[559,750,751],{},"Polimorfismo:"," Ao despachar um produto, o comportamento da transação pode variar de acordo com o Tipo de Movimentação. Uma hierarquia de herança permite que as classes derivadas ",[620,754,755],{},"TransacaoEntrada",[620,757,758],{},"TransacaoSaida"," estendam a base e apliquem o método polimórfico ",[620,761,762],{},"executarEfeitoContabil()",", que numa entrada multiplica a quantidade por ",[620,765,766],{},"+1"," e na saída por ",[620,769,770],{},"-1",".",[263,773,775],{"id":774},"_34-caso-de-uso-principal-uc-01","3.4. Caso de Uso Principal (UC-01)",[352,777,778,781,782,784,787,788,790,793,794,796,799],{},[559,779,780],{},"Identificador:"," UC-01",[268,783],{},[559,785,786],{},"Nome:"," Registrar Saída de Mercadoria (Despacho)",[268,789],{},[559,791,792],{},"Ator Principal:"," Operador de Logística",[268,795],{},[559,797,798],{},"Pré-condição:"," Operador logado no sistema e mercadoria previamente cadastrada no catálogo.",[352,801,802],{},[559,803,804],{},"Fluxo Principal:",[386,806,807,810,813,816,819,822,828,839],{},[389,808,809],{},"O Operador acessa o módulo de \"Saída de Materiais\".",[389,811,812],{},"O sistema requer a digitação do Código do Produto (ou uso de leitor laser).",[389,814,815],{},"O sistema recupera e exibe os detalhes do produto e o Saldo Atual.",[389,817,818],{},"O Operador insere a quantidade a ser baixada e a justificativa (ex: Ordem de Serviço #123).",[389,820,821],{},"O Operador clica em \"Processar Saída\".",[389,823,824,825,771],{},"A camada de negócios (Encapsulamento) verifica se ",[620,826,827],{},"Quantidade Solicitada \u003C= Saldo Atual",[389,829,830,831,834,835,838],{},"O sistema executa a transação no banco de dados (",[620,832,833],{},"INSERT"," na tabela de movimentação e ",[620,836,837],{},"UPDATE"," no saldo do produto).",[389,840,841],{},"O sistema confirma visualmente que o despacho foi processado com sucesso.",[352,843,844,847],{},[559,845,846],{},"Fluxo de Exceção 1 (Ruptura de Estoque \u002F Saldo Negativo):","\nNo passo 6, se o saldo disponível for menor do que a quantidade solicitada (ex: pediu 10, tem 8), a operação é bloqueada imediatamente. O sistema alerta: \"Erro de Integridade: Quantidade indisponível. Saldo atual: 8 unidades. Ajuste a requisição.\"",[258,849],{"style":313},[288,851,853],{"id":852},"_4-banco-de-dados-mysql","4. Banco de Dados (MySQL)",[352,855,856,857,860],{},"Para gerir a criticidade de um inventário dinâmico, o design lógico do Banco de Dados precisa antecipar os ",[578,858,859],{},"trade-offs"," entre armazenamento e velocidade de leitura.",[263,862,864],{"id":863},"_41-modelagem-e-script-ddl","4.1. Modelagem e Script DDL",[352,866,867,868,870,871,874,875,878],{},"A modelagem utiliza redundância controlada: O saldo total do produto é armazenado na tabela do produto (para buscas em O(1)) e também é calculado transacionalmente na tabela de movimentações (para fins de ",[578,869,668],{}," rigoroso). Para a segurança dos preços de custo contra acessos não autorizados de DBAs juniores, utiliza-se a cifração na coluna ",[620,872,873],{},"preco_custo_cifrado"," (",[578,876,877],{},"VARBINARY",").",[880,881,886],"pre",{"className":882,"code":883,"language":884,"meta":885,"style":885},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","-- Criação do Schema do Almoxarifado\nCREATE DATABASE IF NOT EXISTS db_gestao_estoque\nCHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\n\nUSE db_gestao_estoque;\n\n-- Tabela de Operadores (Usuários do Sistema)\nCREATE TABLE IF NOT EXISTS tbl_operadores (\n    id_operador INT AUTO_INCREMENT PRIMARY KEY,\n    nome_operador VARCHAR(100) NOT NULL,\n    nivel_acesso ENUM('ESTOQUISTA', 'GERENTE', 'AUDITOR') NOT NULL,\n    status_ativo BOOLEAN DEFAULT TRUE\n);\n\n-- Tabela Central do Catálogo de Produtos\nCREATE TABLE IF NOT EXISTS tbl_produtos (\n    id_produto INT AUTO_INCREMENT PRIMARY KEY,\n    codigo_barras VARCHAR(50) UNIQUE NOT NULL,\n    descricao_produto VARCHAR(150) NOT NULL,\n    unidade_medida ENUM('UN', 'KG', 'L', 'CX', 'M') NOT NULL,\n    saldo_atual DECIMAL(10,3) NOT NULL DEFAULT 0.000,\n    estoque_minimo DECIMAL(10,3) NOT NULL DEFAULT 0.000,\n    preco_custo_cifrado VARBINARY(500) COMMENT 'Dado sensível encriptado (AES)',\n    localizacao_prateleira VARCHAR(20),\n    -- Proteção nativa no BD contra Saldo Negativo (RF-001)\n    CONSTRAINT ck_saldo_positivo CHECK (saldo_atual >= 0)\n);\n\n-- Tabela Kardex (Histórico Transacional Imutável)\nCREATE TABLE IF NOT EXISTS tbl_movimentacoes_kardex (\n    id_movimentacao BIGINT AUTO_INCREMENT PRIMARY KEY,\n    id_produto INT NOT NULL,\n    id_operador INT NOT NULL,\n    tipo_operacao ENUM('ENTRADA_COMPRA', 'ENTRADA_DEVOLUCAO', 'SAIDA_VENDA', 'SAIDA_AVARIA', 'AJUSTE_BALANCO') NOT NULL,\n    quantidade DECIMAL(10,3) NOT NULL,\n    data_hora_movimentacao DATETIME DEFAULT CURRENT_TIMESTAMP,\n    numero_documento VARCHAR(50) COMMENT 'Nota fiscal ou Ordem de serviço',\n    FOREIGN KEY (id_produto) REFERENCES tbl_produtos(id_produto) ON DELETE RESTRICT,\n    FOREIGN KEY (id_operador) REFERENCES tbl_operadores(id_operador) ON DELETE RESTRICT\n);\n","sql","",[620,887,888,896,902,908,915,921,926,932,938,944,950,956,962,968,973,979,985,991,997,1003,1009,1015,1021,1027,1033,1039,1045,1050,1055,1061,1067,1073,1079,1085,1091,1097,1103,1109,1115,1121],{"__ignoreMap":885},[889,890,893],"span",{"class":891,"line":892},"line",1,[889,894,895],{},"-- Criação do Schema do Almoxarifado\n",[889,897,899],{"class":891,"line":898},2,[889,900,901],{},"CREATE DATABASE IF NOT EXISTS db_gestao_estoque\n",[889,903,905],{"class":891,"line":904},3,[889,906,907],{},"CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\n",[889,909,911],{"class":891,"line":910},4,[889,912,914],{"emptyLinePlaceholder":913},true,"\n",[889,916,918],{"class":891,"line":917},5,[889,919,920],{},"USE db_gestao_estoque;\n",[889,922,924],{"class":891,"line":923},6,[889,925,914],{"emptyLinePlaceholder":913},[889,927,929],{"class":891,"line":928},7,[889,930,931],{},"-- Tabela de Operadores (Usuários do Sistema)\n",[889,933,935],{"class":891,"line":934},8,[889,936,937],{},"CREATE TABLE IF NOT EXISTS tbl_operadores (\n",[889,939,941],{"class":891,"line":940},9,[889,942,943],{},"    id_operador INT AUTO_INCREMENT PRIMARY KEY,\n",[889,945,947],{"class":891,"line":946},10,[889,948,949],{},"    nome_operador VARCHAR(100) NOT NULL,\n",[889,951,953],{"class":891,"line":952},11,[889,954,955],{},"    nivel_acesso ENUM('ESTOQUISTA', 'GERENTE', 'AUDITOR') NOT NULL,\n",[889,957,959],{"class":891,"line":958},12,[889,960,961],{},"    status_ativo BOOLEAN DEFAULT TRUE\n",[889,963,965],{"class":891,"line":964},13,[889,966,967],{},");\n",[889,969,971],{"class":891,"line":970},14,[889,972,914],{"emptyLinePlaceholder":913},[889,974,976],{"class":891,"line":975},15,[889,977,978],{},"-- Tabela Central do Catálogo de Produtos\n",[889,980,982],{"class":891,"line":981},16,[889,983,984],{},"CREATE TABLE IF NOT EXISTS tbl_produtos (\n",[889,986,988],{"class":891,"line":987},17,[889,989,990],{},"    id_produto INT AUTO_INCREMENT PRIMARY KEY,\n",[889,992,994],{"class":891,"line":993},18,[889,995,996],{},"    codigo_barras VARCHAR(50) UNIQUE NOT NULL,\n",[889,998,1000],{"class":891,"line":999},19,[889,1001,1002],{},"    descricao_produto VARCHAR(150) NOT NULL,\n",[889,1004,1006],{"class":891,"line":1005},20,[889,1007,1008],{},"    unidade_medida ENUM('UN', 'KG', 'L', 'CX', 'M') NOT NULL,\n",[889,1010,1012],{"class":891,"line":1011},21,[889,1013,1014],{},"    saldo_atual DECIMAL(10,3) NOT NULL DEFAULT 0.000,\n",[889,1016,1018],{"class":891,"line":1017},22,[889,1019,1020],{},"    estoque_minimo DECIMAL(10,3) NOT NULL DEFAULT 0.000,\n",[889,1022,1024],{"class":891,"line":1023},23,[889,1025,1026],{},"    preco_custo_cifrado VARBINARY(500) COMMENT 'Dado sensível encriptado (AES)',\n",[889,1028,1030],{"class":891,"line":1029},24,[889,1031,1032],{},"    localizacao_prateleira VARCHAR(20),\n",[889,1034,1036],{"class":891,"line":1035},25,[889,1037,1038],{},"    -- Proteção nativa no BD contra Saldo Negativo (RF-001)\n",[889,1040,1042],{"class":891,"line":1041},26,[889,1043,1044],{},"    CONSTRAINT ck_saldo_positivo CHECK (saldo_atual >= 0)\n",[889,1046,1048],{"class":891,"line":1047},27,[889,1049,967],{},[889,1051,1053],{"class":891,"line":1052},28,[889,1054,914],{"emptyLinePlaceholder":913},[889,1056,1058],{"class":891,"line":1057},29,[889,1059,1060],{},"-- Tabela Kardex (Histórico Transacional Imutável)\n",[889,1062,1064],{"class":891,"line":1063},30,[889,1065,1066],{},"CREATE TABLE IF NOT EXISTS tbl_movimentacoes_kardex (\n",[889,1068,1070],{"class":891,"line":1069},31,[889,1071,1072],{},"    id_movimentacao BIGINT AUTO_INCREMENT PRIMARY KEY,\n",[889,1074,1076],{"class":891,"line":1075},32,[889,1077,1078],{},"    id_produto INT NOT NULL,\n",[889,1080,1082],{"class":891,"line":1081},33,[889,1083,1084],{},"    id_operador INT NOT NULL,\n",[889,1086,1088],{"class":891,"line":1087},34,[889,1089,1090],{},"    tipo_operacao ENUM('ENTRADA_COMPRA', 'ENTRADA_DEVOLUCAO', 'SAIDA_VENDA', 'SAIDA_AVARIA', 'AJUSTE_BALANCO') NOT NULL,\n",[889,1092,1094],{"class":891,"line":1093},35,[889,1095,1096],{},"    quantidade DECIMAL(10,3) NOT NULL,\n",[889,1098,1100],{"class":891,"line":1099},36,[889,1101,1102],{},"    data_hora_movimentacao DATETIME DEFAULT CURRENT_TIMESTAMP,\n",[889,1104,1106],{"class":891,"line":1105},37,[889,1107,1108],{},"    numero_documento VARCHAR(50) COMMENT 'Nota fiscal ou Ordem de serviço',\n",[889,1110,1112],{"class":891,"line":1111},38,[889,1113,1114],{},"    FOREIGN KEY (id_produto) REFERENCES tbl_produtos(id_produto) ON DELETE RESTRICT,\n",[889,1116,1118],{"class":891,"line":1117},39,[889,1119,1120],{},"    FOREIGN KEY (id_operador) REFERENCES tbl_operadores(id_operador) ON DELETE RESTRICT\n",[889,1122,1124],{"class":891,"line":1123},40,[889,1125,967],{},[263,1127,1129],{"id":1128},"_42-consultas-complexas-e-curva-abc-dml","4.2. Consultas Complexas e Curva ABC (DML)",[352,1131,1132,1133,1136],{},"Para prover inteligência ao negócio, o Gestor de Estoque precisa identificar quais produtos exigem mais atenção. A instrução SQL abaixo constrói uma ",[559,1134,1135],{},"Curva ABC"," de movimentação, utilizando funções analíticas e agrupamentos complexos para identificar os 20% dos produtos que representam a maior volumetria de saídas nos últimos 6 meses, além de reportar o saldo residual que ameaça romper o estoque mínimo.",[880,1138,1140],{"className":882,"code":1139,"language":884,"meta":885,"style":885},"-- Relatório Estratégico: Produtos com Maior Volumetria de Saída (Últimos 6 meses)\nSELECT \n    P.codigo_barras AS 'Código',\n    P.descricao_produto AS 'Produto',\n    P.unidade_medida AS 'UM',\n    COUNT(M.id_movimentacao) AS 'Qtd_Despachos',\n    SUM(M.quantidade) AS 'Volume_Total_Movido',\n    P.saldo_atual AS 'Saldo_Físico',\n    IF(P.saldo_atual \u003C= P.estoque_minimo, 'CRÍTICO', 'NORMAL') AS 'Alerta_Abastecimento'\nFROM \n    tbl_produtos P\nINNER JOIN \n    tbl_movimentacoes_kardex M ON P.id_produto = M.id_produto\nWHERE \n    M.tipo_operacao IN ('SAIDA_VENDA', 'SAIDA_AVARIA')\n    AND M.data_hora_movimentacao >= DATE_SUB(CURRENT_DATE(), INTERVAL 6 MONTH)\nGROUP BY \n    P.id_produto, P.codigo_barras, P.descricao_produto, P.unidade_medida, P.saldo_atual, P.estoque_minimo\nHAVING \n    'Volume_Total_Movido' > 50\nORDER BY \n    'Volume_Total_Movido' DESC\nLIMIT 50;\n",[620,1141,1142,1147,1152,1157,1162,1167,1172,1177,1182,1187,1192,1197,1202,1207,1212,1217,1222,1227,1232,1237,1242,1247,1252],{"__ignoreMap":885},[889,1143,1144],{"class":891,"line":892},[889,1145,1146],{},"-- Relatório Estratégico: Produtos com Maior Volumetria de Saída (Últimos 6 meses)\n",[889,1148,1149],{"class":891,"line":898},[889,1150,1151],{},"SELECT \n",[889,1153,1154],{"class":891,"line":904},[889,1155,1156],{},"    P.codigo_barras AS 'Código',\n",[889,1158,1159],{"class":891,"line":910},[889,1160,1161],{},"    P.descricao_produto AS 'Produto',\n",[889,1163,1164],{"class":891,"line":917},[889,1165,1166],{},"    P.unidade_medida AS 'UM',\n",[889,1168,1169],{"class":891,"line":923},[889,1170,1171],{},"    COUNT(M.id_movimentacao) AS 'Qtd_Despachos',\n",[889,1173,1174],{"class":891,"line":928},[889,1175,1176],{},"    SUM(M.quantidade) AS 'Volume_Total_Movido',\n",[889,1178,1179],{"class":891,"line":934},[889,1180,1181],{},"    P.saldo_atual AS 'Saldo_Físico',\n",[889,1183,1184],{"class":891,"line":940},[889,1185,1186],{},"    IF(P.saldo_atual \u003C= P.estoque_minimo, 'CRÍTICO', 'NORMAL') AS 'Alerta_Abastecimento'\n",[889,1188,1189],{"class":891,"line":946},[889,1190,1191],{},"FROM \n",[889,1193,1194],{"class":891,"line":952},[889,1195,1196],{},"    tbl_produtos P\n",[889,1198,1199],{"class":891,"line":958},[889,1200,1201],{},"INNER JOIN \n",[889,1203,1204],{"class":891,"line":964},[889,1205,1206],{},"    tbl_movimentacoes_kardex M ON P.id_produto = M.id_produto\n",[889,1208,1209],{"class":891,"line":970},[889,1210,1211],{},"WHERE \n",[889,1213,1214],{"class":891,"line":975},[889,1215,1216],{},"    M.tipo_operacao IN ('SAIDA_VENDA', 'SAIDA_AVARIA')\n",[889,1218,1219],{"class":891,"line":981},[889,1220,1221],{},"    AND M.data_hora_movimentacao >= DATE_SUB(CURRENT_DATE(), INTERVAL 6 MONTH)\n",[889,1223,1224],{"class":891,"line":987},[889,1225,1226],{},"GROUP BY \n",[889,1228,1229],{"class":891,"line":993},[889,1230,1231],{},"    P.id_produto, P.codigo_barras, P.descricao_produto, P.unidade_medida, P.saldo_atual, P.estoque_minimo\n",[889,1233,1234],{"class":891,"line":999},[889,1235,1236],{},"HAVING \n",[889,1238,1239],{"class":891,"line":1005},[889,1240,1241],{},"    'Volume_Total_Movido' > 50\n",[889,1243,1244],{"class":891,"line":1011},[889,1245,1246],{},"ORDER BY \n",[889,1248,1249],{"class":891,"line":1017},[889,1250,1251],{},"    'Volume_Total_Movido' DESC\n",[889,1253,1254],{"class":891,"line":1023},[889,1255,1256],{},"LIMIT 50;\n",[352,1258,1259],{},[578,1260,1261,1262,1265,1266,1269],{},"Justificativa Técnica: A mescla do ",[620,1263,1264],{},"INNER JOIN"," com a condicional dinâmica ",[620,1267,1268],{},"IF"," na projeção e os agregadores transacionais no filtro temporal garantem que o gestor atue antes que a ruptura ocorra no estoque, aplicando o conceito proativo da tecnologia da informação.",[258,1271],{"style":313},[288,1273,1275],{"id":1274},"_5-gestão-segurança-e-lgpd","5. Gestão, Segurança e LGPD",[263,1277,1279],{"id":1278},"_51-backlog-e-histórias-de-usuário-padrão-invest","5.1. Backlog e Histórias de Usuário (Padrão INVEST)",[352,1281,1282],{},"Na cadência das Sprints de desenvolvimento, os épicos foram decompostos em histórias enxutas e de valor (INVEST):",[352,1284,1285],{},[559,1286,1287],{},"História de Usuário 01 - Proteção Criptográfica do Custo de Mercadorias",[1289,1290,1291],"blockquote",{},[352,1292,1293,1296,1297,1299,1302,1303,1305,1308,1309,1311,1314,1315,1318,1319,1321],{},[559,1294,1295],{},"Como"," um Gerente de Compras,",[268,1298],{},[559,1300,1301],{},"Eu quero"," que os preços de custo de entrada (CMV) sejam armazenados em formato encriptado no banco de dados,",[268,1304],{},[559,1306,1307],{},"Para que"," operadores de logística comuns e ataques cibernéticos não tenham acesso à margem de lucro da empresa.",[268,1310],{},[578,1312,1313],{},"Critérios de Aceite:"," Ao cadastrar a Nota Fiscal de compra, a aplicação (via Python\u002FSecrets\u002FFernet) cifra o valor; o ",[620,1316,1317],{},"SELECT"," puro no banco deve exibir apenas o ",[620,1320,877],{},"; o front-end do estoquista não deve ter a chave de decriptação, apenas a tela da Diretoria.",[352,1323,1324],{},[559,1325,1326],{},"História de Usuário 02 - Alerta de Ruptura (Reposição)",[1289,1328,1329],{},[352,1330,1331,1333,1334,1336,1338,1339,1341,1343,1344,1346,1348],{},[559,1332,1295],{}," um Analista de Compras,",[268,1335],{},[559,1337,1301],{}," que o Dashboard exiba uma notificação em vermelho toda vez que o \"Saldo Atual\" for menor ou igual ao \"Estoque Mínimo\",",[268,1340],{},[559,1342,1307],{}," eu inicie imediatamente a requisição de novos suprimentos aos fornecedores.",[268,1345],{},[578,1347,1313],{}," A verificação deve ocorrer após qualquer operação de \"Saída\"; o painel deve listar os produtos críticos organizados por ordem de criticidade.",[263,1350,1352],{"id":1351},"_52-conformidade-com-a-lgpd-e-privacy-by-design","5.2. Conformidade com a LGPD e Privacy by Design",[352,1354,1355],{},"Ainda que o núcleo do sistema transacione \"coisas\" (produtos), o sistema identifica os operadores que realizam as movimentações (para fins de auditoria de furtos internos).",[403,1357,1358],{},[389,1359,1360,1363,1364,1367,1368,1371,1372,1375,1376,1379,1380,1383],{},[559,1361,1362],{},"Adequação:"," A tabela ",[620,1365,1366],{},"tbl_operadores"," trata os dados pessoais como confidenciais. A conformidade (",[578,1369,1370],{},"Compliance",") requer a adoção do ",[578,1373,1374],{},"Privacy by Design",": A exclusão de um colaborador não apaga as movimentações históricas que ele executou (para não ferir a consistência da empresa). Realiza-se a ",[578,1377,1378],{},"Anonimização do Dado"," (pseudonimização), substituindo o nome na base histórica por uma ",[578,1381,1382],{},"hash"," irreversível, respeitando o direito legal do titular (LGPD) sem violar as obrigações fiscais corporativas.",[263,1385,1387],{"id":1386},"_53-cronograma-do-projeto","5.3. Cronograma do Projeto",[352,1389,1390],{},"A estimativa para finalização do MVP (Minimum Viable Product) foi dividida em um fluxo de 6 semanas:",[1392,1393,1394,1414],"table",{},[1395,1396,1397],"thead",{},[1398,1399,1400,1404,1408,1411],"tr",{},[1401,1402,1403],"th",{"align":260},"Semana",[1401,1405,1407],{"align":1406},"left","Fase de Desenvolvimento",[1401,1409,1410],{"align":1406},"Responsabilidade",[1401,1412,1413],{"align":1406},"Status",[1415,1416,1417,1434,1449,1464,1479,1495],"tbody",{},[1398,1418,1419,1425,1428,1431],{},[1420,1421,1422],"td",{"align":260},[559,1423,1424],{},"01",[1420,1426,1427],{"align":1406},"Modelagem ER, Criação de DDL e Validação das Restrições (CHECK, FK)",[1420,1429,1430],{"align":1406},"Arquiteto de BD",[1420,1432,1433],{"align":1406},"Concluído",[1398,1435,1436,1441,1444,1447],{},[1420,1437,1438],{"align":260},[559,1439,1440],{},"02",[1420,1442,1443],{"align":1406},"Configuração do Back-end, Autenticação e POO das Transações",[1420,1445,1446],{"align":1406},"Engenheiro Backend",[1420,1448,1433],{"align":1406},[1398,1450,1451,1456,1459,1462],{},[1420,1452,1453],{"align":260},[559,1454,1455],{},"03",[1420,1457,1458],{"align":1406},"Interface (Front-end) focada em Usabilidade (Leitura de Cód. Barras)",[1420,1460,1461],{"align":1406},"UI\u002FUX Developer",[1420,1463,1433],{"align":1406},[1398,1465,1466,1471,1474,1477],{},[1420,1467,1468],{"align":260},[559,1469,1470],{},"04",[1420,1472,1473],{"align":1406},"Integração (Integração das requisições com Kardex, Criptografia)",[1420,1475,1476],{"align":1406},"Full-Stack Dev",[1420,1478,1433],{"align":1406},[1398,1480,1481,1486,1489,1492],{},[1420,1482,1483],{"align":260},[559,1484,1485],{},"05",[1420,1487,1488],{"align":1406},"Homologação (Testes de Concorrência ACID e Stress do Banco)",[1420,1490,1491],{"align":1406},"QA Engineer",[1420,1493,1494],{"align":1406},"Em Andamento",[1398,1496,1497,1502,1505,1508],{},[1420,1498,1499],{"align":260},[559,1500,1501],{},"06",[1420,1503,1504],{"align":1406},"Produção Final da Documentação Acadêmica (ABNT) e Deploy",[1420,1506,1507],{"align":1406},"Toda a Equipe",[1420,1509,1494],{"align":1406},[258,1511],{"style":313},[288,1513,1515],{"id":1514},"_6-diagramas-de-visualização","6. Diagramas de Visualização",[352,1517,1518],{},"A estrutura sistêmica é cristalizada por meio dos diagramas modelados via sintaxe Mermaid.",[263,1520,1522],{"id":1521},"_61-diagrama-de-casos-de-uso","6.1. Diagrama de Casos de Uso",[352,1524,1525],{},"Mapeia a restrição de privilégios e os fluxos primordiais do estoque.",[1527,1528],"mermaid",{"code":1529},"flowchart LR\n    EST((\"Estoquista\"))\n    GER((\"Gerente Administrativo\"))\n    \n    subgraph Sistema [\"Sistema Digital de Estoque\"]\n        direction TB\n        UC1([\"Realizar Entrada (Compra\u002FNF)\"])\n        UC2([\"Registrar Saída (Despacho)\"])\n        UC3([\"Consultar Disponibilidade\"])\n        UC4([\"Visualizar Kardex\"])\n        UC5([\"Visualizar Custos (Decriptar)\"])\n    end\n    \n    EST --> UC1\n    EST --> UC2\n    EST --> UC3\n    \n    GER --> UC1\n    GER --> UC2\n    GER --> UC3\n    GER --> UC4\n    GER --> UC5\n",[352,1531,1532,1535],{},[559,1533,1534],{},"Versão em SVG (Diagrama de Casos de Uso):",[1536,1537],"img",{"alt":534,"src":1538},"\u002Fimg\u002Fprojetos-integradores\u002Fpi-05-gestao-estoque\u002Fusecase_estoque.svg",[263,1540,1542],{"id":1541},"_62-diagrama-de-classes-contabilidade-de-estoque","6.2. Diagrama de Classes (Contabilidade de Estoque)",[352,1544,1545],{},"Descreve a correlação orientada a objetos (OO) responsável por efetivar as transações lógicas antes da persistência.",[1527,1547],{"code":1548},"classDiagram\n    class Produto {\n        -String codigoBarras\n        -String descricao\n        -BigDecimal saldoAtual\n        -BigDecimal estoqueMinimo\n        +getSaldo(): BigDecimal\n        +acrescentar(qtd: BigDecimal): void\n        +deduzir(qtd: BigDecimal): void\n    }\n\n    class TransacaoEstoque {\n        \u003C\u003Cabstract>>\n        #Date dataHora\n        #BigDecimal quantidadeAbsoluta\n        #Operador autor\n        +executarEfeitoContabil(prod: Produto): void\n    }\n\n    class TransacaoEntrada {\n        +executarEfeitoContabil(prod: Produto): void\n    }\n\n    class TransacaoSaida {\n        +executarEfeitoContabil(prod: Produto): void\n    }\n\n    class Operador {\n        -String nome\n        -String nivelAcesso\n    }\n\n    Produto \"1\" \u003C-- \"0..*\" TransacaoEstoque : atua sobre\n    TransacaoEstoque \u003C|-- TransacaoEntrada\n    TransacaoEstoque \u003C|-- TransacaoSaida\n    Operador \"1\" --> \"0..*\" TransacaoEstoque : registra\n",[263,1550,1552],{"id":1551},"_63-diagrama-de-entidade-relacionamento-der","6.3. Diagrama de Entidade-Relacionamento (DER)",[352,1554,1555],{},"A espinha dorsal dos dados lógicos transacionados no MySQL (Tabelas do Script DDL).",[1527,1557],{"code":1558},"erDiagram\n    TBL_OPERADORES {\n        int id_operador PK\n        string nome_operador\n        enum nivel_acesso\n        boolean status_ativo\n    }\n\n    TBL_PRODUTOS {\n        int id_produto PK\n        string codigo_barras UK\n        string descricao_produto\n        decimal saldo_atual \"CK: >= 0\"\n        decimal estoque_minimo\n        varbinary preco_custo_cifrado\n    }\n\n    TBL_MOVIMENTACOES_KARDEX {\n        bigint id_movimentacao PK\n        int id_produto FK\n        int id_operador FK\n        enum tipo_operacao\n        decimal quantidade\n        datetime data_hora\n        string numero_documento\n    }\n\n    TBL_OPERADORES ||--o{ TBL_MOVIMENTACOES_KARDEX : \"executa (1:N)\"\n    TBL_PRODUTOS ||--o{ TBL_MOVIMENTACOES_KARDEX : \"possui log (1:N)\"\n",[1560,1561],"hr",{},[352,1563,1564],{},[578,1565,1566],{},"Fim da Documentação do Projeto Integrador (2026). A concepção deste sistema transcende a simples computação, oferecendo uma arquitetura tática que provê segurança criptográfica dos ativos financeiros da empresa e integridade concorrencial nas esteiras de despacho de mercadorias.",[1568,1569,1570],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":885,"searchDepth":898,"depth":904,"links":1572},[1573,1574,1578,1581,1582,1583,1589,1595,1599,1604],{"id":265,"depth":904,"text":266},{"id":290,"depth":898,"text":291,"children":1575},[1576,1577],{"id":309,"depth":910,"text":310},{"id":318,"depth":904,"text":319},{"id":339,"depth":898,"text":291,"children":1579},[1580],{"id":378,"depth":910,"text":310},{"id":383,"depth":898,"text":384},{"id":553,"depth":898,"text":554},{"id":568,"depth":898,"text":569,"children":1584},[1585,1586,1587,1588],{"id":572,"depth":904,"text":573},{"id":584,"depth":904,"text":585},{"id":595,"depth":904,"text":596},{"id":606,"depth":904,"text":607},{"id":628,"depth":898,"text":629,"children":1590},[1591,1592,1593,1594],{"id":632,"depth":904,"text":633},{"id":672,"depth":904,"text":673},{"id":700,"depth":904,"text":701},{"id":774,"depth":904,"text":775},{"id":852,"depth":898,"text":853,"children":1596},[1597,1598],{"id":863,"depth":904,"text":864},{"id":1128,"depth":904,"text":1129},{"id":1274,"depth":898,"text":1275,"children":1600},[1601,1602,1603],{"id":1278,"depth":904,"text":1279},{"id":1351,"depth":904,"text":1352},{"id":1386,"depth":904,"text":1387},{"id":1514,"depth":898,"text":1515,"children":1605},[1606,1607,1608],{"id":1521,"depth":904,"text":1522},{"id":1541,"depth":904,"text":1542},{"id":1551,"depth":904,"text":1552},"md",null,{},{"title":235,"description":885},"NqXHt9b_l1_nTI_8qYH5mMYfgQ6fdUps_lx-HdtBlRg",[1615,1617],{"title":204,"path":232,"stem":233,"description":1616,"children":-1},"Este novo projeto, intitulado Controle de Fluxo de Dispositivos Eletrônicos, complementa seu portfólio de soluções de gestão e automação, focando na agilidade do front-end e na persistência de dados local.",{"title":204,"path":241,"stem":242,"description":1618,"children":-1},"Este novo projeto, intitulado Gerenciamento de Estoque, consolida sua experiência em sistemas de controle de fluxo e organização de dados estruturados.",1788375147848]