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

1import pandera.pandas as pa 

2from pandera.typing import Series 

3 

4 

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 """ 

11 

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 

33 

34 class Config: 

35 coerce = True 

36 strict = False # Permite que o dicionário venha com "customerID", mas nós o ignoraremos.