**Prompt para Desenvolvimento de Classe Python de Simulação de Economia**

**Contexto:**
Você é um desenvolvedor de software encarregado de criar uma classe em Python capaz de simular uma pequena economia com comportamentos e interações realistas. Essa economia deve contemplar três tipos de atividades econômicas (chamadas “base”, “dinâmica” e “orgânica”) que interajam entre si, mantenham o sistema equilibrado automaticamente e reajam de forma plausível a diferentes ações ou eventos externos. O resultado final será utilizado para fins educacionais e experimentais, de modo que seja possível observar como variáveis como oferta, demanda, preços e recursos evoluem ao longo do tempo.

---

## Objetivos Principais

1. **Modelar três atividades econômicas distintas**

   * **Atividade Base:** Representa setores estáveis (por exemplo, produção primária ou indústrias de commodities), com demanda relativamente constante e variação lenta de parâmetros.
   * **Atividade Dinâmica:** Abrange setores mais responsivos a choques de mercado (por exemplo, manufatura ou comércio), com flutuações moderadas em oferta e demanda conforme decisões internas e externas.
   * **Atividade Orgânica:** Simula um setor fluido (por exemplo, serviços tecnológicos, inovação, economia criativa), com alta dinamização, investimentos variáveis e respostas rápidas a estímulos.

2. **Criar uma estrutura de dados (classe) que mantenha o sistema auto-balanceado**

   * O “auto-balanceamento” deve garantir que, sem intervenção externa, a economia não entre em colapso nem cresça indefinidamente:

     * Ajuste automático de preços (por meio de mecanismos internos de oferta e demanda).
     * Redistribuição de recursos (capital, mão de obra, matérias-primas) entre as três atividades, conforme indicadores de escassez ou superprodução.
     * Geração de feedback loops que leve a estabilização de variáveis-chave ao longo de iterações (ticks/turnos).

3. **Incorporar respostas realistas a ações e choques externos**

   * Métodos para simular eventos como:

     * Aumento ou queda repentina na demanda de um setor (ex.: booms de tecnologia, crises de commodities).
     * Intervenção governamental (políticas fiscais ou subsídios).
     * Mudanças em preço de insumos (gás, petróleo, tarifas).
     * Evolução demográfica (crescimento populacional que impacta mão de obra e consumo).
   * A classe deve recalcular efeitos em cascata nas outras atividades, ajustando produção, estoques e preços.

4. **Fornecer interface de operação mínima**

   * **Inicialização:** Parâmetros iniciais ajustáveis (capital total, força de trabalho total, coeficientes de produtividade, estoques iniciais, elasticidades de demanda).
   * **Passo de Simulação (tick):** Método que avança o tempo em uma unidade discreta, atualizando:

     * Produção e consumo de cada atividade.
     * Preços de mercado.
     * Estoques e balanço de recursos.
   * **Ações Externas:** Funções que permitem injetar choques ou políticas (ex.: alterar taxa de juros, aplicar subsídio a uma atividade, introduzir uma nova tecnologia).
   * **Relatórios/Saídas:** Métodos para obter, a cada tick, indicadores resumidos (PIB simulado, inflação, taxa de desemprego aproximada, nível de preços setoriais).

---

## Requisitos Específicos

1. **Estrutura da Classe**

   * **Nome Sugerido:** `EconomiaSimulator` (ou similar em português, como `SimuladorEconomia`).
   * **Atributos Principais:**

     * `capital_total` (float)
     * `trabalho_total` (int)
     * **Para cada atividade (base, dinâmica, orgânica):**

       * `producao_atual` (float)
       * `estoque` (float)
       * `preco_unitario` (float)
       * `demanda_esperada` (float)
       * `coeficiente_produtividade` (float)
       * `elasticidade_demanda` (float)
   * **Métodos Principais:**

     * `__init__(self, parametros_iniciais: dict)`
     * `simular_tick(self)` — avança uma unidade de tempo; executa:

       1. Cálculo de produção de cada atividade (com base em insumos disponíveis e produtividade).
       2. Atualização de estoques (produção menos vendas).
       3. Ajuste de preços (mecanismo de oferta e demanda);
       4. Realocação de recursos entre atividades, se necessário (auto-balanceamento).
       5. Registro de indicadores setoriais e gerais.
     * `aplicar_choque(self, choque: dict)` — aplica evento externo (ex.: `{"tipo": "demanda_setor", "setor": "dinamica", "variação_pct": -0.2}`).
     * `get_indicadores(self) -> dict` — retorna estado atual: PIB simulado, inflação, estoque médio, taxa de utilização de capacidade, etc.

2. **Mecanismo de Auto-Balanceamento**

   * **Regra de Redirecionamento de Recursos:** Se um setor estiver com estoque alto e baixa demanda, parte dos recursos (capital e trabalho) são redirecionados para setores com escassez.
   * **Ajuste de Preços Automatizado:**

     * Se a demanda excede oferta → aumenta preço em x% (definido pela elasticidade).
     * Se oferta excede demanda → abaixa preço em y%.
   * **Limites de Produção:** Cada atividade não pode ultrapassar `capacidade_maxima` (definida no início), e não pode operar abaixo de `capacidade_minima` sem incorrer em penalidade (desemprego, custos fixos).

3. **Modelagem de Respostas Realistas**

   * **Curvas de Demanda e Oferta:** Em cada setor, use fórmulas simples (e.g., demanda = `demanda_base * (preco_referencia / preco_atual) ** elasticidade_demanda`).
   * **Choques Exógenos:** Permitir variação súbita de parâmetros (ex.: custo de matéria-prima em setor “base” aumenta 10% → recalcula custos de produção nos outros setores).
   * **Retroalimentação Multi-Setorial:** Exemplo: queda de produção na “base” afeta matéria-prima para a “dinâmica”, que por sua vez influi em insumos para a “orgânica”. Todos devem reagir automaticamente à mudança.
   * **Estocagem e Backorders:** Se a demanda não for completamente atendida, registra “backorder” que pode influenciar demanda futura (efeito de expectativa de escassez).

4. **Critérios de Realismo e Estabilidade**

   * **Sem Explosões Numéricas:** Garantir que, se não houver choques, o sistema converge a um estado de equilíbrio estável (por exemplo, variação de preços próxima de zero após certo número de ticks).
   * **Parâmetros Calibráveis:** Elasticidades, taxas de reposição, custos fixos, margem de lucro mínima, para permitir ajuste fino e evitar cenários irreais (preços negativos, estoques infinitos).
   * **Registro Histórico:** Armazenar, em listas ou dicionários, valores históricos de variáveis-chave (para posterior análise ou plotagem).

5. **Documentação e Exemplos de Uso**

   * Incluir docstrings em todos os métodos explicando entradas, saídas e efeitos colaterais.
   * Fornecer um script de exemplo (`if __name__ == "__main__":`) que:

     1. Inicializa o simulador com parâmetros-padrão (por exemplo, capital\_total = 1 000 000, trabalho\_total = 1 000, coeficientes de produtividade definidos).
     2. Roda 100 ticks consecutivos, imprimindo a cada 10 ticks os indicadores principais.
     3. Aplica um choque (ex.: queda de 15% na demanda do setor orgânico no tick 50) e demonstra como o sistema reage nos seguintes 20 ticks.

---

## Formato Esperado do Entregável

Entrega-se um único arquivo `economia_simulator.py` contendo:

1. A definição completa da classe `EconomiaSimulator` (ou nome equivalente em português).
2. Métodos implementados conforme descrito.
3. Docstrings e comentários suficientes para tornar o código legível.
4. Bloco de demonstração no final do arquivo que roda um ciclo de simulação simples e imprime resultados resumidos no console.

**Não é necessário** interface gráfica nem persistência em banco de dados. A ênfase está na lógica de simulação e na corretude do auto-balanceamento e das respostas realistas a eventos.

---

## Pontos de Avaliação

1. **Coerência Lógica:** O modelo de oferta e demanda e o mecanismo de realocação de recursos devem fazer sentido e gerar equilíbrios estáveis.
2. **Modularidade do Código:** Métodos bem separados (cálculo de produção, ajuste de preços, realocação, aplicação de choques).
3. **Flexibilidade:** Permitir que parâmetros (elasticidades, coeficientes de produtividade, taxas de reposição) sejam facilmente alterados sem reescrever a lógica.
4. **Clareza da Documentação:** Cada classe, método e atributo deve possuir docstrings claras.
5. **Exemplo Funcional:** O bloco `__main__` deve demonstrar claramente o funcionamento, com saídas concisas que permitam verificar o auto-balanceamento e a reação a choques.

---

**Observação Final:**
Ao implementar a classe, assegure que, mesmo sem eventos externos, o sistema alcance um ponto de equilíbrio (variações de preços e estoques tendendo a zero entre ticks sucessivos). Ao aplicar choques, verifique no exemplo que as três atividades se ajustam unas às outras, retornando a um novo equilíbrio ou mostrando ciclos econômicos plausíveis (como breve recessão seguida de recuperação).