2026-01-14 10:35:16 -06:00
|
|
|
package standards
|
|
|
|
|
|
|
|
|
|
// Schema strings used by weatherfeeder.
|
|
|
|
|
//
|
|
|
|
|
// We standardize on schema matching for normalizers (rather than matching on
|
|
|
|
|
// source names or kinds) because schema strings are explicit, versionable, and
|
|
|
|
|
// independent of user configuration.
|
|
|
|
|
//
|
|
|
|
|
// Conventions:
|
|
|
|
|
// - Raw upstream payloads: "raw.<provider>.<thing>.vN"
|
|
|
|
|
// - Canonical domain events: "weather.<kind>.vN"
|
|
|
|
|
const (
|
|
|
|
|
// Raw upstream schemas (emitted by sources).
|
|
|
|
|
SchemaRawNWSObservationV1 = "raw.nws.observation.v1"
|
|
|
|
|
SchemaRawOpenMeteoCurrentV1 = "raw.openmeteo.current.v1"
|
|
|
|
|
SchemaRawOpenWeatherCurrentV1 = "raw.openweather.current.v1"
|
|
|
|
|
|
feat(nws, normalizers): add NWS hourly forecast normalization and enforce canonical float rounding
- Implement full NWS hourly forecast normalizer (raw.nws.hourly.forecast.v1 → weather.forecast.v1)
- Add GeoJSON forecast types and helpers for NWS gridpoint hourly payloads
- Normalize temperatures, winds, humidity, PoP, and infer WMO condition codes from forecast text/icons
- Treat forecast IssuedAt as EffectiveAt for stable, dedupe-friendly event IDs
- Introduce project-wide float rounding at normalization finalization
- Round all float values in canonical payloads to 2 decimal places
- Apply consistently across pointers, slices, maps, and nested structs
- Preserve opaque structs (e.g., time.Time) unchanged
- Add SchemaRawNWSHourlyForecastV1 and align schema matching/comments
- Clean up NWS helper organization and comments
- Update documentation to reflect numeric wire-format and normalization policies
This establishes a complete, deterministic hourly forecast pipeline for NWS
and improves JSON output stability across all canonical weather schemas.
2026-01-16 10:28:32 -06:00
|
|
|
SchemaRawNWSHourlyForecastV1 = "raw.nws.hourly.forecast.v1"
|
2026-03-27 16:07:12 -05:00
|
|
|
SchemaRawNWSNarrativeForecastV1 = "raw.nws.narrative.forecast.v1"
|
2026-03-28 16:17:03 -05:00
|
|
|
SchemaRawNWSForecastDiscussionV1 = "raw.nws.forecast_discussion.v1"
|
2026-05-30 06:47:18 -05:00
|
|
|
SchemaRawNWSWeatherStoriesV1 = "raw.nws.weatherstories.v1"
|
feat(nws, normalizers): add NWS hourly forecast normalization and enforce canonical float rounding
- Implement full NWS hourly forecast normalizer (raw.nws.hourly.forecast.v1 → weather.forecast.v1)
- Add GeoJSON forecast types and helpers for NWS gridpoint hourly payloads
- Normalize temperatures, winds, humidity, PoP, and infer WMO condition codes from forecast text/icons
- Treat forecast IssuedAt as EffectiveAt for stable, dedupe-friendly event IDs
- Introduce project-wide float rounding at normalization finalization
- Round all float values in canonical payloads to 2 decimal places
- Apply consistently across pointers, slices, maps, and nested structs
- Preserve opaque structs (e.g., time.Time) unchanged
- Add SchemaRawNWSHourlyForecastV1 and align schema matching/comments
- Clean up NWS helper organization and comments
- Update documentation to reflect numeric wire-format and normalization policies
This establishes a complete, deterministic hourly forecast pipeline for NWS
and improves JSON output stability across all canonical weather schemas.
2026-01-16 10:28:32 -06:00
|
|
|
SchemaRawOpenMeteoHourlyForecastV1 = "raw.openmeteo.hourly.forecast.v1"
|
|
|
|
|
SchemaRawOpenWeatherHourlyForecastV1 = "raw.openweather.hourly.forecast.v1"
|
|
|
|
|
|
2026-01-16 21:40:20 -06:00
|
|
|
SchemaRawNWSAlertsV1 = "raw.nws.alerts.v1"
|
|
|
|
|
|
2026-06-11 00:15:40 +00:00
|
|
|
SchemaRawSPCConvectiveOutlookV1 = "raw.spc.convective_outlook.v1"
|
|
|
|
|
|
2026-01-14 10:35:16 -06:00
|
|
|
// Canonical domain schemas (emitted after normalization).
|
2026-03-28 16:17:03 -05:00
|
|
|
SchemaWeatherObservationV1 = "weather.observation.v1"
|
|
|
|
|
SchemaWeatherForecastV1 = "weather.forecast.v1"
|
|
|
|
|
SchemaWeatherForecastDiscussionV1 = "weather.forecast_discussion.v1"
|
2026-05-30 06:47:18 -05:00
|
|
|
SchemaWeatherStoryV1 = "weather.weather_story.v1"
|
2026-03-28 16:17:03 -05:00
|
|
|
SchemaWeatherAlertV1 = "weather.alert.v1"
|
2026-06-11 00:20:31 +00:00
|
|
|
SchemaWeatherOutlookV1 = "weather.outlook.v1"
|
2026-06-12 04:19:56 +00:00
|
|
|
SchemaWeatherOutlookV2 = "weather.outlook.v2"
|
2026-01-14 10:35:16 -06:00
|
|
|
)
|