| """ |
| modules/submissao.py |
| Modulo de submissao assistida ao SIAPI/CBMGO |
| Sistema de Prevencao e Protecao contra Incendio - NT-01/2025 |
| """ |
|
|
| import re |
| from datetime import datetime |
|
|
|
|
| class SubmissaoSIAPI: |
| """ |
| Assistente para preparacao de documentacao para submissao no SIAPI/CBMGO |
| """ |
| |
| DOCUMENTOS_OBRIGATORIOS = [ |
| "Memorial descritivo assinado (PPCI)", |
| "Planta baixa cotada (escala 1:100 ou 1:50)", |
| "Planta de situacao e localizacao", |
| "Corte transversal e longitudinal", |
| "ART ou RRT do responsavel tecnico", |
| "Requerimento padrao CBMGO", |
| "DARM quitado (taxa de vistoria)", |
| ] |
| |
| DOCUMENTOS_ESPECIAIS = { |
| "sprinkler": "Projeto hidraulico do sistema de sprinklers", |
| "hidrante": "Projeto do sistema de hidrantes e mangotinhos", |
| "alarme": "Projeto do sistema de deteccao e alarme", |
| "spda": "Projeto do SPDA (para-raios)", |
| "brigada": "Lista de brigadistas treinados (NBR 14276)", |
| } |
| |
| def __init__(self, use_llm=False): |
| self.use_llm = use_llm |
| |
| def validar_cpf(self, cpf): |
| cpf = re.sub(r"[^0-9]", "", cpf) |
| if len(cpf) != 11: |
| return False, "CPF deve ter 11 digitos" |
| if len(set(cpf)) == 1: |
| return False, "CPF invalido" |
| return True, "CPF valido" |
| |
| def validar_registro(self, registro): |
| registro = registro.strip().upper() |
| if "CREA" in registro or "CAU" in registro: |
| return True, f"{registro} reconhecido" |
| return False, "Formato invalido. Use: CREA-GO 12345-D ou CAU A123456-0" |
| def determinar_documentos(self, area_m2, pavimentos, grupo): |
| docs = list(self.DOCUMENTOS_OBRIGATORIOS) |
| letra = grupo.split("-")[0] if "-" in grupo else grupo[0] |
| altura = pavimentos * 3.0 |
| if area_m2 > 750 or pavimentos >= 3: |
| docs.append(self.DOCUMENTOS_ESPECIAIS["hidrante"]) |
| if altura > 15 or area_m2 > 1000: |
| docs.append(self.DOCUMENTOS_ESPECIAIS["spda"]) |
| if altura > 30 or (letra in ["H","I"] and area_m2 > 750): |
| docs.append(self.DOCUMENTOS_ESPECIAIS["sprinkler"]) |
| if letra in ["E","B"] or area_m2 > 1500: |
| docs.append(self.DOCUMENTOS_ESPECIAIS["alarme"]) |
| if area_m2 > 750: |
| docs.append(self.DOCUMENTOS_ESPECIAIS["brigada"]) |
| return docs |
| |
| def preparar_documentos(self, tipo_edificacao, area_m2, responsavel, cpf_responsavel, registro_profissional): |
| cpf_ok, cpf_msg = self.validar_cpf(cpf_responsavel) |
| reg_ok, reg_msg = self.validar_registro(registro_profissional) |
| |
| tipo_lower = tipo_edificacao.lower() |
| if any(w in tipo_lower for w in ["casa","apto","apartamento"]): |
| grupo = "A-2" if "apart" in tipo_lower else "A-1" |
| elif any(w in tipo_lower for w in ["hotel","motel","pousada"]): |
| grupo = "B-1" |
| elif any(w in tipo_lower for w in ["hospital","clinica","ubs"]): |
| grupo = "E-1" |
| elif any(w in tipo_lower for w in ["escola","universidade","colegio"]): |
| grupo = "D-3" |
| elif any(w in tipo_lower for w in ["escritorio","banco","consultorio"]): |
| grupo = "F-1" |
| elif any(w in tipo_lower for w in ["comercio","loja","mercado","shopping"]): |
| grupo = "C-2" if area_m2 > 750 else "C-1" |
| elif any(w in tipo_lower for w in ["industria","fabrica"]): |
| grupo = "H-2" |
| elif any(w in tipo_lower for w in ["deposito","armazem","galpao"]): |
| grupo = "I-1" |
| else: |
| grupo = "F-1" |
| |
| pavimentos = max(1, int(area_m2 / 300)) |
| docs = self.determinar_documentos(area_m2, pavimentos, grupo) |
| docs_str = chr(10).join(" [ ] " + d for d in docs) |
| protocolo = f"CBMGO-{datetime.now().strftime('%Y%m%d')}-{abs(hash(tipo_edificacao)) % 10000:04d}" |
| |
| return f"""PREPARACAO PARA SUBMISSAO SIAPI/CBMGO\n{"="*60}\nPROTOCOLO PROVISORIO: {protocolo}\nData: {datetime.now().strftime('%d/%m/%Y %H:%M')}\n\nDADOS DA EDIFICACAO:\n Tipo: {tipo_edificacao}\n Grupo NT-01/2025: {grupo}\n Area Total: {area_m2:.1f} m2\n\nRESPONSAVEL TECNICO:\n Nome: {responsavel}\n CPF: {cpf_msg}\n Registro: {reg_msg}\n\nDOCUMENTOS NECESSARIOS:\n{docs_str}\n\nCOMO SUBMETER NO SIAPI:\n 1. Acesse: https://siapi.goias.gov.br\n 2. Login com seu CPF\n 3. Novo Protocolo de Analise\n 4. Anexe documentos (PDF, max 10MB)\n 5. Pague DARM e confirme\n Prazo analise: 30 dias uteis\n\nCBMGO: www.bombeiros.go.gov.br | (62) 3201-5959\n{"="*60}""" |
|
|