PC/GAA/L032/DB - Conversão Python

Descrição

Este projeto é uma conversão completa do programa COBOL PC/GAA/L032/DB para Python. O programa original verifica ocorrências de roubo, furto e outros crimes relacionados a veículos consultando um banco de dados específico (TDBFURTO).

Estrutura do Projeto

📁 Projeto PC/GAA/L032/DB Python
├── 📄 database_simulator.py      # Simulador dos bancos de dados COBOL
├── 📄 cobol_structures.py        # Estruturas de dados equivalentes
├── 📄 pc_gaa_l032_db.py         # Programa principal (lógica de negócio)
├── 📄 test_interactive.py       # Interface de teste interativa
├── 📄 README.md                 # Esta documentação
└── 📄 requirements.txt          # Dependências (se houver)

Funcionalidades

✅ Funcionalidades Implementadas

  • Consulta por Placa Tradicional: Busca veículos usando placas no formato ABC1234
  • Consulta por Placa Mercosul: Busca veículos usando placas no formato BRA2E19
  • Consulta por Chassi: Busca veículos pelo número do chassi
  • Validação de Município: Verifica códigos de município brasileiros
  • Pesquisa em Múltiplas Bases: Consulta em queixas, recuperados e alertas
  • Pesquisa por Capital: Busca na capital quando não encontra no município
  • Pesquisa Ampla: Busca por 3 letras sem filtro de localização
  • Tratamento de Erros: Manejo adequado de UF e município inválidos

🎯 Tipos de Ocorrência Suportados

Código Descrição
0 Nenhum registro encontrado
1 Roubo
2 Furto
3 Apropriação indébita
4 Estelionato
5 Veículo e pessoa desaparecida
6 Extorsão
7 Concussão
8 Peculato
9 Outros crimes
88 Veículo com alerta de furto/roubo
99 Erro: UF inválida

Instalação e Execução

Pré-requisitos

  • Python 3.7 ou superior
  • Nenhuma dependência externa (usa apenas bibliotecas padrão)

Execução

1. Programa Principal com Testes Automáticos

python pc_gaa_l032_db.py

2. Interface Interativa

python test_interactive.py

Uso da API

Exemplo Básico

from pc_gaa_l032_db import PcGaaL032Db
from cobol_structures import AxLibGaal032

# Criar instância do programa
programa = PcGaaL032Db()

# Preparar dados de entrada
input_data = AxLibGaal032()
input_data.set_placa("ABC1234")
input_data.ax_gaa_munic = 3550308  # São Paulo

# Executar consulta
resultado = programa.execute(input_data)

# Verificar resultado
print(f"Código: {resultado.ax_ret_pesq}")
print(f"Tipo: {resultado.ax_gaa_ret}")
print(f"Detalhes: {resultado.ax_gaa_queixa}")

Estrutura de Entrada (AxLibGaal032)

input_data = AxLibGaal032()
input_data.ax_gaa_letra = "ABC"        # 3 letras da placa
input_data.ax_gaa_numero = 1234        # 4 números da placa
input_data.ax_gaa_munic = 3550308      # Código do município
input_data.ax_gaa_chassis = "9BWZZZ..." # Chassi do veículo
input_data.ax_gaa_plamerc = "BRA2E19"  # Placa Mercosul

Estrutura de Saída (AxGaaRetl032)

# Campos principais do resultado
resultado.ax_gaa_ret        # Código do tipo de ocorrência
resultado.ax_gaa_ret_blq    # Código de bloqueio judicial
resultado.ax_gaa_ret_ds     # Tipo de dataset (Q/R/A)
resultado.ax_ret_sit        # Situação da pesquisa
resultado.ax_gaa_queixa     # Detalhes da ocorrência
resultado.ax_ret_pesq       # Código de pesquisa formatado

Dados de Teste

O sistema inclui dados de teste pré-carregados para demonstração:

🚨 Queixas (Roubos/Furtos)

  • ABC1234 (BRA2E19) - Roubo em São Paulo
  • DEF5678 (BRA3A45) - Furto no Rio de Janeiro
  • GHI9012 (BRA4B67) - Apropriação indébita em Belo Horizonte
  • JKL3456 (BRA5C89) - Estelionato em Salvador
  • MNO7890 (BRA6D12) - Extorsão em Curitiba

🔄 Recuperados

  • PQR1234 (BRA7E34) - Veículo roubado recuperado em São Paulo
  • STU5678 (BRA8F56) - Veículo furtado recuperado no Rio de Janeiro

⚠️ Alertas

  • VWX9012 (BRA9G78) - Alerta em Belo Horizonte
  • YZA3456 (BRC1H90) - Alerta em Salvador

Diferenças da Versão COBOL

✅ Melhorias Implementadas

  1. Tratamento de Erros Robusto: Eliminada a divisão por zero, implementado tratamento adequado
  2. Código Estruturado: Uso de classes e métodos em vez de GO TO
  3. Documentação Rica: Comentários detalhados e documentação completa
  4. Testes Automatizados: Bateria de testes para validação
  5. Interface Interativa: Programa de teste com menu amigável
  6. Dados Simulados: Base de dados completa para testes

🔄 Equivalências Mantidas

  • Lógica de Negócio: 100% equivalente ao COBOL original
  • Estruturas de Dados: Campos e tipos mantidos
  • Códigos de Retorno: Mesmos códigos e significados
  • Fluxo de Execução: Sequência de operações preservada
  • Validações: Mesmas regras de validação

Arquitetura

Componentes Principais

  1. PcGaaL032Db: Classe principal com a lógica de negócio
  2. DatabaseSimulator: Simula os bancos TDBFURTO e TTABELAS
  3. AxLibGaal032: Estrutura de dados de entrada
  4. AxGaaRetl032: Estrutura de dados de saída
  5. TestInteractive: Interface de teste interativa

Fluxo de Execução

graph TD
    A[Entrada de Dados] --> B[Validar Município]
    B --> C{Chassi Informado?}
    C -->|Sim| D[Buscar por Chassi]
    C -->|Não| E[Buscar por Placa]
    D --> F{Encontrado?}
    E --> F
    F -->|Não| G{Pesquisar Capital?}
    F -->|Sim| H[Retornar Resultado]
    G -->|Sim| I[Buscar na Capital]
    G -->|Não| J[Buscar por 3 Letras]
    I --> E
    J --> H

Testes

Execução dos Testes

O sistema inclui uma bateria completa de testes:

# Executar testes automáticos
python pc_gaa_l032_db.py

# Executar testes interativos
python test_interactive.py

Cenários de Teste

  1. ✅ Busca por placa roubada
  2. ✅ Busca por chassi furtado
  3. ✅ Busca por placa Mercosul
  4. ✅ Busca por alerta
  5. ✅ Busca por veículo recuperado
  6. ✅ Veículo não encontrado
  7. ✅ Município inválido
  8. ✅ Pesquisa por 3 letras

Códigos de Retorno Detalhados

Formato do Código de Pesquisa (ax_ret_pesq)

  • 000: Nada consta
  • 001: Subjudice
  • 010Q: Roubado (Queixa)
  • 011Q: Roubado e Subjudice (Queixa)
  • 010R: Roubado/Recuperado
  • 020Q: Furtado (Queixa)
  • 880A: Alerta de furto/roubo
  • 9900: UF inválida
  • 9999: Município inválido

Contribuição

Este projeto é uma conversão fiel do sistema COBOL original. Para modificações:

  1. Mantenha a compatibilidade com a interface original
  2. Preserve todos os códigos de retorno existentes
  3. Documente mudanças adequadamente
  4. Execute todos os testes antes de submeter alterações

Licença

Este projeto é uma conversão do sistema COBOL original PC/GAA/L032/DB para fins educacionais e de modernização tecnológica.

Contato

  • Conversão Python: MANUS AI
  • Programa Original: ALFREDO MIYAMOTO
  • Data da Conversão: 30/09/2025
  • Versão: 2.0 (Python)