Files
RadioPropagationApi/api/app/models/link.py
T
2026-06-24 07:50:00 +03:00

41 lines
1.1 KiB
Python

from typing import Literal
from pydantic import BaseModel, Field
from app.models.common import DataSources
from app.models.coverage import LinkRx, LinkTx
from app.models.terrain import Obstruction
class LinkBudgetRequest(BaseModel):
tx: LinkTx
rx: LinkRx
frequency_mhz: float = Field(gt=0)
model: Literal["p452", "itm", "manual"] = "manual"
include_buildings: bool = True
include_vegetation: bool = True
include_canopy: bool = True
k_factor: float = Field(default=1.333, gt=0)
class LinkBudgetResponse(BaseModel):
distance_km: float
fspl_db: float
diffraction_db: float
vegetation_db: float
atmospheric_db: float
total_loss_db: float
rx_power_dbm: float
fade_margin_db: float
fresnel_clear: bool
fresnel_quality: Literal["clear", "partial", "blocked"]
link_viable: bool
los_clear: bool
geometric_los: bool
first_fresnel_clearance_pct: float
fresnel_violations_count: int
geometric_obstructions_count: int
building_obstructions_count: int
worst_obstruction: Obstruction | None
data_sources: DataSources = Field(default_factory=DataSources)