# Instruções de Deploy - Módulo TCE
## 📋 Resumo das Alterações
O módulo TCE foi implementado com funcionalidades de:
- Upload e organização de arquivos por processo/pasta/subpasta
- Verificação de tamanho de arquivos (≤5MB)
- Aplicação de OCR (preparado, mas simulado)
- **Assinatura digital com certificado A1 (.pfx)** - IMPLEMENTADO
- Geração de arquivos .p7s
- Visualização de PDFs
## 🔧 Instalação no Servidor de Produção
### 1. Atualizar o Código
```bash
cd /caminho/do/sapl
git pull origin 3.1.x
```
### 2. Instalar Dependências Python
```bash
# Ativar o virtualenv do SAPL (ajuste o caminho conforme necessário)
source /opt/venv/bin/activate # ou o caminho do seu venv
# Instalar bibliotecas necessárias
pip install pyhanko==0.31.0
pip install pyhanko-certvalidator==0.29.0
pip install cryptography>=43.0.3
```
**OU** use o arquivo requirements:
```bash
pip install -r /caminho/para/tce_requirements.txt
```
### 3. Executar Migrações do Banco de Dados
```bash
python manage.py migrate
```
**Migrações criadas:**
- `0001_initial.py` - Estrutura inicial (TceProcesso, TcePasta, TceArquivo, etc)
- `0002_tcearquivo_subpasta.py` - Campo subpasta em TceArquivo
- `0003_tcepasta_subpastas_customizadas.py` - Campo para subpastas customizadas
### 4. Coletar Arquivos Estáticos
```bash
python manage.py collectstatic --noinput
```
### 5. Criar Diretórios de Upload
```bash
# Criar diretórios para arquivos TCE
mkdir -p /caminho/do/media/tce/arquivos
mkdir -p /caminho/do/media/tce/reduzidos
mkdir -p /caminho/do/media/tce/ocr
mkdir -p /caminho/do/media/tce/assinados
mkdir -p /caminho/do/media/tce/p7s
# Dar permissões adequadas (ajuste o usuário conforme necessário)
chown -R www-data:www-data /caminho/do/media/tce
chmod -R 755 /caminho/do/media/tce
```
### 6. Reiniciar Serviços
```bash
# Para Apache
sudo systemctl restart apache2
# OU para Nginx + Gunicorn/uWSGI
sudo systemctl restart gunicorn # ou uwsgi
sudo systemctl restart nginx
```
## 📁 Arquivos Criados/Modificados
### Novos Arquivos:
1. **Modelos:**
- `/sapl/tce/models.py` - Modelos TceProcesso, TcePasta, TceArquivo, TceAssinatura, TceLog
2. **Views:**
- `/sapl/tce/admin_views.py` - Views e APIs do módulo TCE
3. **URLs:**
- `/sapl/tce/urls.py` - Rotas do módulo
4. **Templates:**
- `/sapl/templates/admin/tce/admin_index.html` - Dashboard TCE
- `/sapl/templates/admin/tce/processo_detail.html` - Detalhes do processo
- `/sapl/templates/admin/tce/subpasta_detail.html` - Detalhes da subpasta (com wizard de upload)
- `/sapl/templates/admin/tce/change_form.html` - Formulário admin
- `/sapl/templates/admin/tce/change_list.html` - Lista admin
- `/sapl/templates/admin/tce/app_index.html` - Índice do app
5. **Template Filters:**
- `/sapl/tce/templatetags/tce_filters.py` - Filtros customizados
6. **Migrações:**
- `/sapl/tce/migrations/0001_initial.py`
- `/sapl/tce/migrations/0002_tcearquivo_subpasta.py`
- `/sapl/tce/migrations/0003_tcepasta_subpastas_customizadas.py`
### Arquivos Modificados:
1. `/sapl/templates/admin/base_site.html` - Navbar do SAPL no admin
## 🔐 Configurações de Segurança
### Permissões de Arquivos
```python
# Em settings.py, verificar:
MEDIA_ROOT = '/caminho/do/media'
MEDIA_URL = '/media/'
# Limite de upload (opcional)
FILE_UPLOAD_MAX_MEMORY_SIZE = 5242880 # 5MB
DATA_UPLOAD_MAX_MEMORY_SIZE = 5242880 # 5MB
```
### Configuração do Servidor Web
**Para Apache (.htaccess ou VirtualHost):**
```apache
# Permitir upload de arquivos PDF e certificados
Options -Indexes
AllowOverride None
Require all granted
# Apenas permitir acesso a arquivos específicos
Require all granted
```
**Para Nginx:**
```nginx
location /media/tce/ {
alias /caminho/do/media/tce/;
# Apenas permitir download de PDFs e p7s
location ~ \.(pdf|p7s)$ {
add_header Content-Disposition "inline";
}
# Bloquear acesso a outros arquivos
location ~ \.(pfx|p12)$ {
deny all;
}
}
```
## 🧪 Testar a Instalação
### 1. Verificar se as bibliotecas foram instaladas:
```bash
python -c "from pyhanko.sign import signers; print('✓ PyHanko OK')"
python -c "from pyhanko_certvalidator import ValidationContext; print('✓ Certvalidator OK')"
```
### 2. Acessar o módulo:
```
http://seu-servidor.com/tce/admin/
```
### 3. Testar funcionalidades:
1. **Criar um processo** - Dashboard TCE > Novo Processo
2. **Criar pastas/subpastas** - Dentro do processo
3. **Upload de arquivo** - Com wizard de 5 abas
4. **Assinatura digital** - Na aba 4 do wizard (requer certificado .pfx)
5. **Geração .p7s** - Na aba 5 do wizard
## ⚠️ Problemas Conhecidos e Soluções
### Erro: "Biblioteca de assinatura não instalada"
**Solução:**
```bash
pip install pyhanko pyhanko-certvalidator
sudo systemctl restart gunicorn # ou seu servidor WSGI
```
### Erro de permissão ao fazer upload
**Solução:**
```bash
chown -R www-data:www-data /caminho/do/media/tce
chmod -R 755 /caminho/do/media/tce
```
### Erro 404 ao visualizar arquivo
**Solução:**
Verificar se a rota está registrada em `urls.py`:
```python
path('arquivo//visualizar/', admin_views.visualizar_arquivo, name='visualizar_arquivo'),
```
### JSONField não encontrado (Django < 3.1)
O código já está preparado com fallback:
```python
try:
from django.db.models import JSONField
except ImportError:
from django.contrib.postgres.fields import JSONField
```
## 📊 Monitoramento
### Logs para verificar:
```bash
# Logs do Django
tail -f /var/log/sapl/django.log
# Logs do servidor web
tail -f /var/log/apache2/error.log # Apache
tail -f /var/log/nginx/error.log # Nginx
```
### Verificar uploads:
```bash
ls -lah /caminho/do/media/tce/arquivos/
ls -lah /caminho/do/media/tce/assinados/
ls -lah /caminho/do/media/tce/p7s/
```
## 🔄 Rollback (se necessário)
Se precisar reverter as alterações:
```bash
# Reverter migrações
python manage.py migrate tce 0000_initial # ou zero
# Reverter código
git revert
git push
```
## 📞 Suporte
Em caso de dúvidas ou problemas:
1. Verificar logs do servidor
2. Testar em ambiente de desenvolvimento primeiro
3. Verificar se todas as dependências foram instaladas
4. Confirmar permissões de arquivos e diretórios
---
**Data de criação:** 03/10/2025
**Versão do SAPL:** 3.1.x
**Última atualização:** Após merge com branch principal