JetBrains-Research / JetBrains-Research/Python-Solution-Preference
[017] Pilot's Logbook (MVP)
- Langage dominant
- Aucune donnée de langage
- Étoiles
- 2
- Forks
- 0
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
OVERVIEW
Single-user pilot logbook to record flights and view analytics and currency status. All dates/times are Zulu (UTC). Future dates are not allowed.
Build this as a Python backend service with no UI; expose the functionality below through an HTTP API.
AIRCRAFT MANAGEMENT
Fields:
- Registration/Tail No. (required), Make/Model (required), Category (required), Class (required)
- Type Designator (optional), Flags: Type rating required, Complex, High-performance, Tailwheel, Turbine
- If "Type rating required" is true, Type Designator becomes required
Categories and Classes:
- Airplane: SEL, SES, MEL, MES
- Rotorcraft: Helicopter, Gyroplane
- Glider: Glider
Uniqueness: Registration/Tail checked canonically (uppercase, spaces/hyphens removed). Stored data preserves user's original formatting.
Status: Aircraft default to Active. User can archive (set Inactive) or unarchive (set Active) aircraft. Inactive aircraft cannot be selected for new flights but remain on existing flights.
FLIGHT LOGGING
Fields:
- Date (required; today or earlier in Zulu)
- Aircraft (Active aircraft only)
- Route: Departure (required), Arrival (required), Via (optional); free text
- Times (decimal hours, must be multiples of 0.1): Total Time (required, > 0), Day Time, Night Time, PIC, SIC, Dual Given, Dual Received, Cross-country, Actual Instrument, Simulated Instrument
- Counts (non-negative integers): Day Takeoffs, Day Landings, Night Takeoffs, Night Landings, Instrument Approaches
- IFR tasks (booleans): Holds performed, Intercept/Track performed
- Notes (optional)
Validation:
- Day Time + Night Time must equal Total Time exactly
- Actual Instrument + Simulated Instrument ≤ Total Time
- PIC and SIC cannot both be > 0; their sum ≤ Total Time
- Dual Given and Dual Received cannot both be > 0; each ≤ Total Time
- Cross-country ≤ Total Time
- All times ≥ 0 and in 0.1 hr increments
Edit Flight: Allowed if aircraft is Inactive (without changing aircraft). Changing aircraft requires selecting an Active one.
Delete Flight: Permanently removes the flight from the logbook.
LOGBOOK LISTING & FILTERS
Default: most recent flights first.
Filters (combine with AND logic):
- Date range (inclusive)
- Aircraft (multi-select)
- Category/Class
- Text search across Route fields and Notes (case-insensitive substring)
Filters can be reused with Analytics.
ANALYTICS & CURRENCY
Totals:
- Presets: Last 90 days, Last 6 months, Last 12 months; or Custom range
- Metrics: Total Time, PIC, SIC, Night, Actual/Simulated Instrument, Cross-country, Approaches, Day/Night Takeoffs/Landings
- Group by: Overall, Category/Class, Make/Model
Day/Night Currency (per Category/Class; also per Type Designator when "Type rating required"):
- Window: last 90 days inclusive (flight date ≥ today − 89 days and ≤ today)
- Requirement: ≥ 3 takeoffs AND ≥ 3 landings
- Report: Current/Not Current with counts (e.g., "Day TO 2/3; Day LDG 4/3")
Instrument Currency (per Category):
- Window: 6 calendar months ending with current month (whole months). Example: 2025-11-11 → window is 2025-06-01 through 2025-11-30
- Requirement: ≥ 6 approaches AND at least one Holds performed AND at least one Intercept/Track performed
Currency results appear only for Category/Class combinations with at least one flight.
EXPORT
Scope: All flights or current filtered set. Output as CSV.
Format: UTF-8, comma-delimited, header row. Dates as YYYY-MM-DD, times with one decimal, counts as integers, booleans as true/false. Each row includes flight fields plus aircraft attributes (preserving Registration/Tail formatting). Reflects current aircraft data (edits apply retroactively).
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Piste de recherche
The payload names no files, tests, or existing HTTP entry points, so repository conventions must be identified before implementation. Done means the backend supports aircraft and flight management, validation, listing and filters, analytics and currency calculations, and CSV export as specified.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- api, backend
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- Calme
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100