# andrersp/controleestoque architecture

> Architecture diagram of the GitHub repository andrersp/controleestoque, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/andrersp/controleestoque
- Repository: https://github.com/andrersp/controleestoque

## Overview

This is a PyQt desktop inventory, purchasing, sales, customer/supplier, and accounts-payable/receivable application. The principal workflow is to maintain product and business-party records, enter purchases or sales, update stock and create payment/collection installments, then review financial activity. The graph emphasizes the UI/controller and persistence stages, while retaining the README’s major capabilities. Some screens and modules are unsampled; their connections are shown only where the source index or README supports them.

Main entry points: [`controle_estoque/Crud/Models.py`](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/Models.py) (Domain models), [`controle_estoque/maincompras.py`](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/maincompras.py) (Purchase workflow), [`controle_estoque/mainvendas.py`](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/mainvendas.py) (Sales workflow), [`controle_estoque/Crud/core.py`](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/core.py) (Database sessions)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Desktop interface"]
  node_app["Application shell<br/>[main.py]"]
  node_product_ui["Product screens<br/>[formProdutos.py]"]
  node_customer_ui["Customer screens<br/>[formClientes.py]"]
  node_supplier_ui["Supplier screens<br/>[formFornecedor.py]"]
  node_purchase_ui["Purchase screens<br/>[formCompras.py]"]
  node_sales_ui["Sales screens<br/>[formVendas.py]"]
end

subgraph group_commerce["Inventory and commerce"]
  node_inventory_ctrl["Inventory controller<br/>[mainprodutos.py]"]
  node_customer_ctrl["Customer controller<br/>[mainclientes.py]"]
  node_supplier_ctrl["Supplier controller<br/>[mainfornecedor.py]"]
  node_purchase_ctrl["Purchase workflow<br/>[maincompras.py]"]
  node_sales_ctrl["Sales workflow<br/>[mainvendas.py]"]
  node_product_crud["Product and stock<br/>[CrudProduto.py]"]
  node_customer_crud["Customer records<br/>[CrudCliente.py]"]
  node_supplier_crud["Supplier records<br/>[CrudFornecedor.py]"]
  node_purchase_crud["Purchase records<br/>[CrudCompra.py]"]
  node_sales_crud["Sales records<br/>[CrudVenda.py]"]
  node_purchase_items["Purchase line items<br/>[CrudRelCompra.py]"]
  node_sales_items["Sales line items<br/>[CrudRelVenda.py]"]
end

subgraph group_finance["Financial management"]
  node_finance_ui["Accounts screens"]
  node_finance_ctrl["Finance controller<br/>[mainfinanceiro.py]"]
  node_payables["Accounts payable<br/>[CrudContaAPagar.py]"]
  node_receivables["Accounts receivable"]
end

subgraph group_persistence["Persistence layer"]
  node_schema[("Domain models<br/>[Models.py]")]
  node_connection["Database sessions<br/>[core.py]"]
end

node_operator(("Operator"))

node_operator -->|"uses"| node_app
node_app -->|"opens"| node_inventory_ctrl
node_app -->|"opens"| node_customer_ctrl
node_app -->|"opens"| node_purchase_ctrl
node_app -->|"opens"| node_sales_ctrl
node_inventory_ctrl -->|"shows"| node_product_ui
node_customer_ctrl -->|"shows"| node_customer_ui
node_supplier_ctrl -->|"shows"| node_supplier_ui
node_purchase_ctrl -->|"shows"| node_purchase_ui
node_sales_ctrl -->|"shows"| node_sales_ui
node_inventory_ctrl -->|"manages"| node_product_crud
node_customer_ctrl -->|"queries"| node_customer_crud
node_supplier_ctrl -->|"manages"| node_supplier_crud
node_purchase_ctrl -->|"records"| node_purchase_crud
node_purchase_ctrl -->|"queries"| node_supplier_crud
node_purchase_ctrl -->|"queries"| node_product_crud
node_purchase_ctrl -->|"records"| node_purchase_items
node_purchase_ctrl -->|"creates installments"| node_payables
node_sales_ctrl -->|"records"| node_sales_crud
node_sales_ctrl -->|"queries"| node_product_crud
node_sales_ctrl -->|"queries"| node_customer_crud
node_sales_ctrl -->|"records"| node_sales_items
node_sales_ctrl -->|"creates installments"| node_receivables
node_finance_ctrl -.->|"opens"| node_finance_ui
node_payables -->|"queries"| node_schema
node_receivables -->|"queries"| node_schema
node_product_crud -->|"reads and writes"| node_schema
node_customer_crud -->|"reads and writes"| node_schema
node_purchase_crud -->|"reads and writes"| node_schema
node_sales_crud -->|"reads and writes"| node_schema
node_purchase_items -->|"uses models"| node_schema
node_sales_items -->|"uses models"| node_schema
node_schema -->|"declares base"| node_connection
node_product_crud -->|"opens sessions"| node_connection
node_customer_crud -->|"opens sessions"| node_connection
node_purchase_crud -->|"opens sessions"| node_connection
node_sales_crud -->|"opens sessions"| node_connection
node_payables -->|"opens sessions"| node_connection
node_receivables -->|"opens sessions"| node_connection

click node_app "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/main.py"
click node_product_ui "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Views/formProdutos.py"
click node_customer_ui "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Views/formClientes.py"
click node_supplier_ui "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Views/formFornecedor.py"
click node_purchase_ui "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Views/formCompras.py"
click node_sales_ui "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Views/formVendas.py"
click node_inventory_ctrl "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/mainprodutos.py"
click node_customer_ctrl "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/mainclientes.py"
click node_supplier_ctrl "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/mainfornecedor.py"
click node_purchase_ctrl "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/maincompras.py"
click node_sales_ctrl "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/mainvendas.py"
click node_product_crud "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/CrudProduto.py"
click node_customer_crud "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/CrudCliente.py"
click node_supplier_crud "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/CrudFornecedor.py"
click node_purchase_crud "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/CrudCompra.py"
click node_sales_crud "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/CrudVenda.py"
click node_purchase_items "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/CrudRelCompra.py"
click node_sales_items "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/CrudRelVenda.py"
click node_finance_ui "https://github.com/andrersp/controleestoque/tree/master/controle_estoque/Views"
click node_finance_ctrl "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/mainfinanceiro.py"
click node_payables "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/CrudContaAPagar.py"
click node_receivables "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/CrudContaAReceber.py"
click node_schema "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/Models.py"
click node_connection "https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/core.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_product_ui,node_customer_ui,node_supplier_ui,node_purchase_ui,node_sales_ui toneBlue
class node_inventory_ctrl,node_customer_ctrl,node_supplier_ctrl,node_purchase_ctrl,node_sales_ctrl,node_product_crud,node_customer_crud,node_supplier_crud,node_purchase_crud,node_sales_crud,node_purchase_items,node_sales_items toneAmber
class node_finance_ui,node_finance_ctrl,node_payables,node_receivables toneMint
class node_schema,node_connection toneRose
class node_operator toneIndigo
```

## Components

### Desktop interface

- [Application shell](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/main.py): `controle_estoque/main.py`
- [Product screens](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Views/formProdutos.py): `controle_estoque/Views/formProdutos.py`
- [Customer screens](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Views/formClientes.py): `controle_estoque/Views/formClientes.py`
- [Supplier screens](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Views/formFornecedor.py): `controle_estoque/Views/formFornecedor.py`
- [Purchase screens](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Views/formCompras.py): `controle_estoque/Views/formCompras.py`
- [Sales screens](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Views/formVendas.py): `controle_estoque/Views/formVendas.py`

### Inventory and commerce

- [Inventory controller](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/mainprodutos.py): `controle_estoque/mainprodutos.py`
- [Customer controller](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/mainclientes.py): `controle_estoque/mainclientes.py`
- [Supplier controller](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/mainfornecedor.py): `controle_estoque/mainfornecedor.py`
- [Purchase workflow](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/maincompras.py): `controle_estoque/maincompras.py`
- [Sales workflow](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/mainvendas.py): `controle_estoque/mainvendas.py`
- [Product and stock](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/CrudProduto.py): `controle_estoque/Crud/CrudProduto.py`
- [Customer records](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/CrudCliente.py): `controle_estoque/Crud/CrudCliente.py`
- [Supplier records](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/CrudFornecedor.py): `controle_estoque/Crud/CrudFornecedor.py`
- [Purchase records](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/CrudCompra.py): `controle_estoque/Crud/CrudCompra.py`
- [Sales records](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/CrudVenda.py): `controle_estoque/Crud/CrudVenda.py`
- [Purchase line items](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/CrudRelCompra.py): `controle_estoque/Crud/CrudRelCompra.py`
- [Sales line items](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/CrudRelVenda.py): `controle_estoque/Crud/CrudRelVenda.py`

### Financial management

- [Accounts screens](https://github.com/andrersp/controleestoque/tree/master/controle_estoque/Views): `controle_estoque/Views`
- [Finance controller](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/mainfinanceiro.py): `controle_estoque/mainfinanceiro.py`
- [Accounts payable](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/CrudContaAPagar.py): `controle_estoque/Crud/CrudContaAPagar.py`
- [Accounts receivable](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/CrudContaAReceber.py): `controle_estoque/Crud/CrudContaAReceber.py`

### Persistence layer

- [Domain models](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/Models.py): `controle_estoque/Crud/Models.py`
- [Database sessions](https://github.com/andrersp/controleestoque/blob/master/controle_estoque/Crud/core.py): `controle_estoque/Crud/core.py`

### Other components

- **Operator**

## Connections

- Operator → Application shell: uses (evidence: `controle_estoque/main.py`)
- Application shell → Inventory controller: opens (evidence: `controle_estoque/main.py`)
- Application shell → Customer controller: opens (evidence: `controle_estoque/main.py`)
- Application shell → Purchase workflow: opens (evidence: `controle_estoque/main.py`)
- Application shell → Sales workflow: opens (evidence: `controle_estoque/main.py`)
- Inventory controller → Product screens: shows (evidence: `controle_estoque/mainprodutos.py`)
- Customer controller → Customer screens: shows (evidence: `controle_estoque/mainclientes.py`)
- Supplier controller → Supplier screens: shows (evidence: `controle_estoque/mainfornecedor.py`)
- Purchase workflow → Purchase screens: shows (evidence: `controle_estoque/maincompras.py`)
- Sales workflow → Sales screens: shows (evidence: `controle_estoque/mainvendas.py`)
- Inventory controller → Product and stock: manages (evidence: `controle_estoque/mainprodutos.py`)
- Customer controller → Customer records: queries (evidence: `controle_estoque/mainclientes.py`)
- Supplier controller → Supplier records: manages (evidence: `controle_estoque/mainfornecedor.py`)
- Purchase workflow → Purchase records: records (evidence: `controle_estoque/maincompras.py`)
- Purchase workflow → Supplier records: queries (evidence: `controle_estoque/maincompras.py`)
- Purchase workflow → Product and stock: queries (evidence: `controle_estoque/maincompras.py`)
- Purchase workflow → Purchase line items: records (evidence: `controle_estoque/maincompras.py`)
- Purchase workflow → Accounts payable: creates installments (evidence: `controle_estoque/maincompras.py`)
- Sales workflow → Sales records: records (evidence: `controle_estoque/mainvendas.py`)
- Sales workflow → Product and stock: queries (evidence: `controle_estoque/mainvendas.py`)
- Sales workflow → Customer records: queries (evidence: `controle_estoque/mainvendas.py`)
- Sales workflow → Sales line items: records (evidence: `controle_estoque/mainvendas.py`)
- Sales workflow → Accounts receivable: creates installments (evidence: `controle_estoque/mainvendas.py`)
- Finance controller → Accounts screens: opens
- Accounts payable → Domain models: queries (evidence: `controle_estoque/Crud/CrudContaAPagar.py`)
- Accounts receivable → Domain models: queries (evidence: `controle_estoque/Crud/CrudContaAReceber.py`)
- Product and stock → Domain models: reads and writes (evidence: `controle_estoque/Crud/CrudProduto.py`)
- Customer records → Domain models: reads and writes (evidence: `controle_estoque/Crud/CrudCliente.py`)
- Purchase records → Domain models: reads and writes (evidence: `controle_estoque/Crud/CrudCompra.py`)
- Sales records → Domain models: reads and writes (evidence: `controle_estoque/Crud/CrudVenda.py`)
- Purchase line items → Domain models: uses models (evidence: `controle_estoque/Crud/CrudRelCompra.py`)
- Sales line items → Domain models: uses models (evidence: `controle_estoque/Crud/CrudRelVenda.py`)
- Domain models → Database sessions: declares base (evidence: `controle_estoque/Crud/Models.py`)
- Product and stock → Database sessions: opens sessions (evidence: `controle_estoque/Crud/CrudProduto.py`)
- Customer records → Database sessions: opens sessions (evidence: `controle_estoque/Crud/CrudCliente.py`)
- Purchase records → Database sessions: opens sessions (evidence: `controle_estoque/Crud/CrudCompra.py`)
- Sales records → Database sessions: opens sessions (evidence: `controle_estoque/Crud/CrudVenda.py`)
- Accounts payable → Database sessions: opens sessions (evidence: `controle_estoque/Crud/CrudContaAPagar.py`)
- Accounts receivable → Database sessions: opens sessions (evidence: `controle_estoque/Crud/CrudContaAReceber.py`)
