{
  "name": "SunCarta methodology",
  "version": "2.0",
  "reviewed": "2026-09-18",
  "canonical": "https://suncarta.com/methodology/",
  "solar_position": {
    "engine": "astronomy-engine 2.1.19",
    "license": "MIT",
    "reference": "https://github.com/cosinekitty/astronomy",
    "inputs": [
      "instant_utc",
      "latitude_north_positive",
      "longitude_east_positive"
    ],
    "civil_date_range": [
      1900,
      2100
    ],
    "altitude": "airless topocentric solar center, sea-level astronomical observer",
    "azimuth": "degrees clockwise from true north",
    "outputs": [
      "altitude_degrees",
      "azimuth_degrees_true_north",
      "sunrise_utc",
      "solar_noon_utc",
      "sunset_utc"
    ],
    "azimuth_warning": "ill-conditioned near zenith/nadir and geographic poles"
  },
  "civil_time": {
    "zone": "IANA identifier via coordinate lookup and runtime tzdata",
    "gap": "move forward by offset jump and disclose adjustment",
    "fold": "earlier or later occurrence",
    "integration": "actual UTC civil-date membership intervals; skipped dates can be empty"
  },
  "events": {
    "sunrise_sunset": "standard upper limb; 34 arcminutes refraction plus variable solar radius",
    "twilight_center_degrees": [
      -6,
      -12,
      -18
    ],
    "golden_center_degrees": [
      -4,
      6
    ],
    "season_events": "solved apparent solar ecliptic longitude 0,90,180,270 degrees",
    "terrain_affects_standard_events": false
  },
  "shadow": {
    "level_ground_formula": "length_m = height_m / tan(solar_altitude)",
    "bearing": "(solar_azimuth_degrees + 180) modulo 360",
    "numeric_cap_m": null,
    "display_cap_m": 100000,
    "obstacle_model": "finite opaque vertical screens; rotation is true-north normal",
    "receiver_height": "relative to the same ground datum as obstacles",
    "automatic_terrain_buildings_vegetation": false
  },
  "daily_sun": {
    "sampling_minutes": 2,
    "sampling": "midpoints weighted by real elapsed interval duration",
    "outdoor_point_requires": [
      "solar_center_above_modeled_horizon",
      "no_modeled_screen_blocks_ray"
    ],
    "vertical_plane_requires": [
      "solar_center_above_modeled_horizon",
      "receiving_plane_faces_sun",
      "no_modeled_screen_blocks_ray"
    ],
    "manual_horizon": "linear interpolation of user-supplied azimuth/elevation points",
    "annual_heatmap": "hourly open-horizon solar elevation, not modeled annual direct sun"
  },
  "window": {
    "reach_formula": "(sill_m + height_m) / tan(altitude) * cos(azimuth-facing)",
    "schematic_depth_cap_m": 8,
    "width_changes_numeric_reach": false
  },
  "verification": {
    "position_cases": 72,
    "position_locations": 8,
    "position_reference": "JPL Horizons DE441 airless topocentric",
    "observed_max_component_difference_degrees": 0.001387,
    "regression_limit_degrees": 0.05,
    "rise_set_cases": 21,
    "rise_set_reference": "USNO minute-rounded events from 13 civil-day fixtures",
    "observed_max_rise_set_difference_minutes": 0.5168,
    "rise_set_regression_limit_minutes": 1,
    "season_cases": 4,
    "observed_max_season_difference_seconds": 60.316,
    "season_regression_limit_minutes": 2,
    "scope": "sampled computational checks, not a universal bound or observed-sky guarantee"
  },
  "storage": {
    "local_scene_limit": 40,
    "share_contains": [
      "coordinates",
      "instant",
      "modeled_scene"
    ],
    "account_required": false
  },
  "intended_use": "planning and comparison",
  "not_intended_for": [
    "survey",
    "legal solar access",
    "weather forecast",
    "bankable photovoltaic yield"
  ]
}
