Coverage for src / schemas / data_schema.py: 100%
25 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-26 08:30 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-26 08:30 +0000
1import pandera.pandas as pa
2from pandera.typing import Series
5class CustomerSchema(pa.DataFrameModel):
6 """
7 Contrato rigoroso de dados para o modelo de Churn.
8 Garante que qualquer JSON injetado na API possua os tipos e colunas exatos que a
9 Rede Neural espera.
10 """
12 gender: Series[str] = pa.Field(isin=["Female", "Male"])
13 SeniorCitizen: Series[int] = pa.Field(isin=[0, 1])
14 Partner: Series[str] = pa.Field(isin=["Yes", "No"])
15 Dependents: Series[str] = pa.Field(isin=["Yes", "No"])
16 tenure: Series[int] = pa.Field(ge=0)
17 PhoneService: Series[str] = pa.Field(isin=["Yes", "No"])
18 MultipleLines: Series[str]
19 InternetService: Series[str]
20 OnlineSecurity: Series[str]
21 OnlineBackup: Series[str]
22 DeviceProtection: Series[str]
23 TechSupport: Series[str]
24 StreamingTV: Series[str]
25 StreamingMovies: Series[str]
26 Contract: Series[str]
27 PaperlessBilling: Series[str] = pa.Field(isin=["Yes", "No"])
28 PaymentMethod: Series[str]
29 MonthlyCharges: Series[float] = pa.Field(ge=0.0)
30 TotalCharges: Series[str] = pa.Field(
31 nullable=True
32 ) # Aceita string pois tratamos no pipeline
34 class Config:
35 coerce = True
36 strict = False # Permite que o dicionário venha com "customerID", mas nós o ignoraremos.