# Padrao Organizacao Pacotes

> Define o padrão de organização de pacotes e arquivos de código por funcionalidade (Package by Feature)

- Skill: `moisesfilho/padrao-organizacao-pacotes` (Agent Skill)
- Install (CLI): `npx skillmds@latest add moisesfilho/padrao-organizacao-pacotes`
- Raw SKILL.md: https://api.skillmd.com/api/skills/moisesfilho/padrao-organizacao-pacotes/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: moisesfilho (https://skillmd.com/u/moisesfilho)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/moisesfilho/padrao-organizacao-pacotes

---


# Padrão de Organização de Pacotes: Package by Feature

Este documento serve como base de conhecimento sobre a estrutura de pacotes da aplicação. A organização é feita por funcionalidade (Feature) para manter classes altamente coesas e desacopladas agrupadas no mesmo pacote.

## Estrutura de Pacotes

Todos os novos arquivos de código-fonte Kotlin devem ser organizados em subpacotes específicos sob `br.dev.moisesfilho.companionbot`:

1. **`core`**
   * Contém utilitários transversais e abstrações globais (ex: provedores de tempo, injeção).
   * Pacote: `br.dev.moisesfilho.companionbot.core`

2. **`sensors`**
   * Contém tudo relacionado a sensores físicos e detecção de gestos de hardware.
   * Pacote: `br.dev.moisesfilho.companionbot.sensors`

3. **`sleep`**
   * Contém as regras de negócio de horário de sono e daydream.
   * Pacote: `br.dev.moisesfilho.companionbot.sleep`

4. **`settings`**
   * Contém telas de preferências do usuário e controle de armazenamento (SharedPreferences/fakes).
   * Pacote: `br.dev.moisesfilho.companionbot.settings`

5. **`service`**
   * Contém serviços Android em background e Daydreams.
   * Pacote: `br.dev.moisesfilho.companionbot.service`

6. **`navigation`**
   * Contém rotas e chaves de navegação.
   * Pacote: `br.dev.moisesfilho.companionbot.navigation`

7. **`ui`** e **`viewmodel`**
   * Contém os elementos visuais globais (composables compartilhados e viewModel principal).

## Regras de Implementação

*   **Evite arquivos soltos no pacote raiz**: Apenas a classe principal `MainActivity` e o pacote base devem residir na raiz.
*   **Novas Features**: Para qualquer nova funcionalidade de negócio, crie um novo subpacote apropriado.
*   **Encapsulamento**: Use visibilidade `internal` ou `package-private` (onde aplicável) para classes de utilidade interna da funcionalidade para evitar vazamentos de escopo.

