Ajustado campos de valores para aceitar 0, "emolumento": 0, "taxa_judiciaria": 0, "fundos_estaduais": 0. Removida validação de cpf CNPJ válido, aceitar vazio ou formato inválido
This commit is contained in:
parent
c6eb6c38c5
commit
8dd6191179
3 changed files with 90 additions and 92 deletions
|
|
@ -53,46 +53,34 @@ class AtoDocumentoIdSchema(BaseModel):
|
|||
# Schema para Criação (SAVE): Campos obrigatórios e sem ID
|
||||
# ----------------------------------------------------
|
||||
class AtoDocumentoSaveSchema(BaseModel):
|
||||
# Campos obrigatórios
|
||||
ato_principal_id: Optional[int] = None
|
||||
# Campo obrigatório
|
||||
ato_principal_id: int
|
||||
|
||||
# Campos opcionais
|
||||
arquivo: Optional[str] = None
|
||||
nome_documento: constr(max_length=255)
|
||||
tipo_documento: constr(max_length=50)
|
||||
nome_documento: Optional[str] = None
|
||||
tipo_documento: Optional[str] = None
|
||||
|
||||
# Validação e Sanitização de Tipo Documento (chk_tipo_documento_not_empty)
|
||||
@field_validator("tipo_documento")
|
||||
def validate_tipo_documento(cls, v: str):
|
||||
v = v.strip()
|
||||
if not v:
|
||||
# Validação obrigatória para ato_principal_id
|
||||
@field_validator("ato_principal_id")
|
||||
def validate_ato_principal_id(cls, v):
|
||||
if v is None:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
detail=[
|
||||
{
|
||||
"input": "tipo_documento",
|
||||
"message": "O tipo de documento não pode ser vazio.",
|
||||
"input": "ato_principal_id",
|
||||
"message": "O campo 'ato_principal_id' deve ser informado.",
|
||||
}
|
||||
],
|
||||
)
|
||||
return v
|
||||
|
||||
# Sanitiza o campo
|
||||
return Text.sanitize_input(v)
|
||||
|
||||
# Validação e Sanitização de Nome Documento
|
||||
@field_validator("nome_documento")
|
||||
def validate_nome_documento(cls, v: str):
|
||||
v = v.strip()
|
||||
if not v:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
detail=[
|
||||
{
|
||||
"input": "nome_documento",
|
||||
"message": "O nome do documento não pode ser vazio.",
|
||||
}
|
||||
],
|
||||
)
|
||||
|
||||
# Sanitiza o campo
|
||||
# Sanitização dos campos opcionais
|
||||
@field_validator("arquivo", "nome_documento", "tipo_documento", mode="before")
|
||||
def sanitize_optional_fields(cls, v: Optional[str]):
|
||||
if v is None:
|
||||
return None
|
||||
return Text.sanitize_input(v)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -92,25 +92,35 @@ def validate_nome_not_empty(cls, v: str):
|
|||
# Schema para Criação (SAVE): Campos obrigatórios e sem ID
|
||||
# ----------------------------------------------------
|
||||
class AtoParteSaveSchema(BaseModel):
|
||||
# Campos obrigatórios
|
||||
ato_principal_id: Optional[int] = None # <<< tornar opcional
|
||||
nome: constr(max_length=255)
|
||||
cpf_cnpj: constr(
|
||||
max_length=20
|
||||
) # Permitindo até 20 para acomodar a entrada antes de limpar
|
||||
# Campo obrigatório
|
||||
ato_principal_id: int
|
||||
|
||||
# Campo opcional (nullable na DDL)
|
||||
telefone: Optional[constr(max_length=20)] = None
|
||||
# Campos opcionais
|
||||
nome: Optional[str] = None
|
||||
cpf_cnpj: Optional[str] = None
|
||||
telefone: Optional[str] = None
|
||||
|
||||
# Validação de Nome
|
||||
@field_validator("nome")
|
||||
def validate_nome(cls, v: str):
|
||||
return validate_nome_not_empty(cls, Text.sanitize_input(v))
|
||||
# Validação obrigatória para ato_principal_id
|
||||
@field_validator("ato_principal_id")
|
||||
def validate_ato_principal_id(cls, v):
|
||||
if v is None:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
detail=[
|
||||
{
|
||||
"input": "ato_principal_id",
|
||||
"message": "O campo 'ato_principal_id' deve ser informado.",
|
||||
}
|
||||
],
|
||||
)
|
||||
return v
|
||||
|
||||
# Validação de CPF/CNPJ
|
||||
@field_validator("cpf_cnpj")
|
||||
def validate_cpf_cnpj_field(cls, v: str):
|
||||
return validate_cpf_cnpj(cls, Text.sanitize_input(v))
|
||||
# Sanitização dos campos opcionais
|
||||
@field_validator("nome", "cpf_cnpj", "telefone", mode="before")
|
||||
def sanitize_optional_fields(cls, v: Optional[str]):
|
||||
if v is None:
|
||||
return None
|
||||
return Text.sanitize_input(v)
|
||||
|
||||
|
||||
# ----------------------------------------------------
|
||||
|
|
@ -134,7 +144,7 @@ class AtoParteUpdateSchema(BaseModel):
|
|||
@field_validator("cpf_cnpj")
|
||||
def validate_cpf_cnpj_update(cls, v: Optional[str]):
|
||||
if v is None:
|
||||
return Text.sanitize_input(v)
|
||||
return v
|
||||
return validate_cpf_cnpj(cls, Text.sanitize_input(v))
|
||||
|
||||
# Nota: Telefone não precisa de validação complexa além do constr(max_length)
|
||||
|
|
|
|||
|
|
@ -134,35 +134,38 @@ class AtoPrincipalCodigoAtoSchema(BaseModel):
|
|||
# Schema para Criação (SAVE): Campos obrigatórios e sem ID
|
||||
# ----------------------------------------------------
|
||||
class AtoPrincipalSaveSchema(BaseModel):
|
||||
ato_principal_id: Optional[int] = None # <<< tornar opcional
|
||||
ato_principal_id: Optional[int] = None # Opcional no SAVE
|
||||
origem_ato_principal_id: Optional[int] = None
|
||||
|
||||
# Campos obrigatórios baseados na DDL (NOT NULL)
|
||||
origem_ato_principal_id: Optional[int] = None # bigint DEFAULT NULL
|
||||
identificacao_pedido_cgj: int # bigint NOT NULL
|
||||
tipo_ato: int # int NOT NULL
|
||||
codigo_selo: constr(max_length=50) # varchar(50) NOT NULL
|
||||
codigo_ato: constr(max_length=50) # varchar(50) NOT NULL
|
||||
nome_civil_ato: constr(max_length=255) # varchar(255) NOT NULL
|
||||
nome_serventuario_praticou_ato: constr(max_length=255) # varchar(255) NOT NULL
|
||||
data_solicitacao: datetime # datetime NOT NULL
|
||||
ip_maquina: Optional[constr(max_length=45)] = None # varchar(45) DEFAULT NULL
|
||||
inteiro_teor: str # text NOT NULL
|
||||
valor_entrada: Optional[Decimal] = None # decimal(12,2) DEFAULT NULL
|
||||
emolumento: Decimal # decimal(12,2) NOT NULL
|
||||
taxa_judiciaria: Decimal # decimal(12,2) NOT NULL
|
||||
fundos_estaduais: Decimal # decimal(12,2) NOT NULL
|
||||
protocolo_protesto: Optional[constr(max_length=50)] = (
|
||||
None # varchar(50) DEFAULT NULL
|
||||
# Campos obrigatórios (NOT NULL)
|
||||
identificacao_pedido_cgj: int
|
||||
tipo_ato: int
|
||||
codigo_selo: constr(max_length=50)
|
||||
codigo_ato: constr(max_length=50)
|
||||
nome_civil_ato: constr(max_length=255)
|
||||
nome_serventuario_praticou_ato: constr(max_length=255)
|
||||
data_solicitacao: datetime
|
||||
inteiro_teor: str
|
||||
|
||||
# Campos opcionais
|
||||
ip_maquina: Optional[constr(max_length=45)] = None
|
||||
valor_entrada: Optional[Decimal] = None # Aceita None
|
||||
emolumento: Decimal = Decimal(0) # Valor padrão = 0
|
||||
taxa_judiciaria: Decimal = Decimal(0) # Valor padrão = 0
|
||||
fundos_estaduais: Decimal = Decimal(0) # Valor padrão = 0
|
||||
protocolo_protesto: Optional[constr(max_length=50)] = None
|
||||
protocolo_imovel: Optional[constr(max_length=50)] = None
|
||||
|
||||
# Relações
|
||||
ato_partes: List[AtoParteSaveSchema] = []
|
||||
ato_documentos: List[AtoDocumentoSaveSchema] = []
|
||||
atos_vinculados: Optional[List["AtoPrincipalSaveSchema"]] = (
|
||||
None # referência recursiva
|
||||
)
|
||||
protocolo_imovel: Optional[constr(max_length=50)] = None # varchar(50) DEFAULT NULL
|
||||
ato_partes: List[AtoParteSaveSchema] = [] # precisa existir
|
||||
ato_documentos: List[AtoDocumentoSaveSchema] = [] # precisa existir
|
||||
|
||||
# NOVO CAMPO: Referência recursiva a outros atos principais
|
||||
# Usando string para forward reference
|
||||
atos_vinculados: Optional[List["AtoPrincipalSaveSchema"]] = None
|
||||
|
||||
# Validação e Sanitização de campos de texto obrigatórios (adaptado do código fonte)
|
||||
# ----------------------------------------------------
|
||||
# Validação e sanitização de campos de texto obrigatórios
|
||||
# ----------------------------------------------------
|
||||
@field_validator(
|
||||
"codigo_selo",
|
||||
"codigo_ato",
|
||||
|
|
@ -170,46 +173,43 @@ class AtoPrincipalSaveSchema(BaseModel):
|
|||
"nome_serventuario_praticou_ato",
|
||||
"inteiro_teor",
|
||||
)
|
||||
def validate_required_strings(cls, v: str):
|
||||
v = v.strip()
|
||||
if not v:
|
||||
# Identifica o campo que falhou a validação
|
||||
input_name = (
|
||||
"Erro de campo" # Será substituído se a função for mais complexa
|
||||
)
|
||||
def validate_required_strings(cls, v: str, info):
|
||||
if not v or not v.strip():
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
detail=[
|
||||
{
|
||||
"input": input_name,
|
||||
"message": "Este campo obrigatório não pode ser vazio.",
|
||||
"input": info.field_name,
|
||||
"message": f"O campo '{info.field_name}' não pode ser vazio.",
|
||||
}
|
||||
],
|
||||
)
|
||||
# Adicionar aqui a sanitização de texto (ex: Text.sanitize(v)) se disponível
|
||||
return Text.sanitize_input(v)
|
||||
# Sanitiza o texto antes de retornar
|
||||
return Text.sanitize_input(v.strip())
|
||||
|
||||
# Validação dos campos monetários (baseado na CHECK CONSTRAINT da DDL)
|
||||
# ----------------------------------------------------
|
||||
# Validação de campos monetários (aceita 0 e None em valor_entrada)
|
||||
# ----------------------------------------------------
|
||||
@field_validator(
|
||||
"valor_entrada", "emolumento", "taxa_judiciaria", "fundos_estaduais"
|
||||
)
|
||||
def validate_positive_values(cls, v: Optional[Decimal]):
|
||||
if v is None and (
|
||||
"valor_entrada" in cls.__annotations__
|
||||
and cls.__annotations__["valor_entrada"] == Optional[Decimal]
|
||||
):
|
||||
# valor_entrada é o único campo DEFAULT NULL, aceita None
|
||||
def validate_positive_values(cls, v: Optional[Decimal], info):
|
||||
# valor_entrada pode ser None
|
||||
if info.field_name == "valor_entrada" and v is None:
|
||||
return v
|
||||
|
||||
# Se valor foi informado, valida
|
||||
if v is not None and v < 0:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
detail=[
|
||||
{
|
||||
"input": "campo_monetario",
|
||||
"input": info.field_name,
|
||||
"message": "Os valores monetários não podem ser negativos.",
|
||||
}
|
||||
],
|
||||
)
|
||||
# Retorna o valor (inclusive 0 é aceito)
|
||||
return v
|
||||
|
||||
class Config:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue