Automated Showjumping Reports (Node.js)
Budget: $750 – $1,500 USD
ShowjumpingWorld Report Automation Requirements (Node.js Backend)
User Stories
• As a customer, I want to be able to purchase a one-time report or a subscription to access data about show jumping performance.
• As a customer, after successful payment, I want to be redirected to a form where I can enter a USEF number to retrieve data for a specific horse or rider.
• As a customer, I want the system to automatically gather data for a specified date range (1, 3, or 5 years) using today as the end date.
• As a customer, I want to view the data presented on screen or download it as a PDF in the future.
• As a customer, I want to receive the generated report in my email.
• As a customer, I want to access all my reports through a dashboard on the website.
• As an admin, I need to be able to run reports on demand for any USEF number.
• As an admin, I need the system to automatically generate and send reports to subscribers every 11 days.
• As an admin, I need the system to automatically delete reports older than 365 days.
Requirements
1. Purchase Flow and Payment Integration
• Requirement 1.1: The website must display a list of available services (reports and subscriptions) with clear descriptions and pricing.
• Requirement 1.2: Implement a "Buy" button for each service which will determine the type and date range, redirecting the user to Stripe for payment processing.
• Requirement 1.3: Upon successful payment in Stripe, redirect the user to a data entry form.
• Requirement 1.4: The data entry form must include fields for:
• USEF Number (with validation)
• Horse/Rider Selection (with links to USEF search). Consider auto-suggest based on USEF number.
2. Data Retrieval and Parsing
• Requirement 2.1: The system must use the provided USEF number (Horse or Rider) to query and retrieve data from USEF.
• Requirement 2.2: Implement a data parsing mechanism to extract relevant information from the retrieved data (
• Requirement 2.3: The data parsing mechanism must extract the following fields from the USEF data source :
• Horse Name
• USEF #
• Show
• Jumper Level
• State
• Zone
• Section
• Description
• Height
• Placing
• Competed
• 1st Round Faults
• 2nd Round Faults
• Money Won
• Rider
• Requirement 2.4: The system must handle cases where data is missing or incomplete in the USEF data source.
• Requirement 2.5: All dates will be based on today as the end date. Date ranges should be selectable for 1,3 or 5 years in the past.
3. Data Storage and Calculations
• Requirement 3.1: The parsed data must be stored in the MongoDB database. Design the schema to efficiently store and query the data.
• Requirement 3.2: Implement the following calculations:
• Final Placements: Sum of 1st, 2nd, 3rd, 4th, 5th, and 6th place finishes.
• Total Winnings: Sum of money won from all classes.
• Average Class Size: Sum of competitors in each class divided by the number of classes.
• Podium Win Percentage: (Count of 1st, 2nd, and 3rd place wins) / (Total number of classes).
• Height Increase: Display the range from lowest to highest class height during the period.
• Zone Placements: Average placement for each USEF Zone.
• Clear Round Percentage: (Number of clean rounds) / (Total number of rounds). (Assume a "clean round" is 0 faults in both 1st and 2nd round).
• Average Jumper Level: Sum of jumper levels / (number of shows).
• Rider Gender Chart: Generate a line graph showing Male vs. Female rider results for all heights with placement counts. (This will require a reliable way to determine rider gender).
• Requirement 3.3: Ensure calculations are performed efficiently and accurately.
• Requirement 3.4: Ensure that "DNP" is handled correctly by excluding from calculations
4. Report Generation and Delivery
• Requirement 4.1: Utilize three distinct PDF templates to present the calculated results.
• Requirement 4.2: Populate the selected PDF template with the calculated data.
• Requirement 4.3: Generate a PDF report based on the chosen template and the calculated results.
• Requirement 4.4: Send the generated PDF report to the user's email address.
• Requirement 4.5: Store the generated PDF report in a location accessible via the user's dashboard.
5. User Dashboard
• Requirement 5.1: Create a user dashboard where users can view a list of their generated reports.
• Requirement 5.2: Allow users to download previously generated reports from the dashboard.
• Requirement 5.3: Implement user authentication and authorization to secure the dashboard.
6. Admin Functionality
• Requirement 6.1: Create an admin interface with authentication.
• Requirement 6.2: Implement the ability for admins to run reports on demand by entering a USEF number.
• Requirement 6.3: Implement a scheduling mechanism to automatically run reports for subscribers every 11 days.
• Requirement 6.4: Implement a scheduled task to hard delete reports older than 365 days.
7. Technology Stack
• Requirement 7.1: The system must be built using Node.js, MongoDB, and hosted on Digital Ocean, utilizing existing codebase where applicable.
• Requirement 7.2: Ensure code is well-documented, modular, and follows best practices.
• Requirement 7.3: Implement robust error handling and logging.
8. Non-Functional Requirements
• Requirement 8.1: Performance: The system must generate reports in a reasonable timeframe (e.g., within 2-3 minutes). Optimize data retrieval and calculations for speed.
• Requirement 8.2: Scalability: The system should be designed to handle a growing number of users and reports.
User Stories
• As a customer, I want to be able to purchase a one-time report or a subscription to access data about show jumping performance.
• As a customer, after successful payment, I want to be redirected to a form where I can enter a USEF number to retrieve data for a specific horse or rider.
• As a customer, I want the system to automatically gather data for a specified date range (1, 3, or 5 years) using today as the end date.
• As a customer, I want to view the data presented on screen or download it as a PDF in the future.
• As a customer, I want to receive the generated report in my email.
• As a customer, I want to access all my reports through a dashboard on the website.
• As an admin, I need to be able to run reports on demand for any USEF number.
• As an admin, I need the system to automatically generate and send reports to subscribers every 11 days.
• As an admin, I need the system to automatically delete reports older than 365 days.
Requirements
1. Purchase Flow and Payment Integration
• Requirement 1.1: The website must display a list of available services (reports and subscriptions) with clear descriptions and pricing.
• Requirement 1.2: Implement a "Buy" button for each service which will determine the type and date range, redirecting the user to Stripe for payment processing.
• Requirement 1.3: Upon successful payment in Stripe, redirect the user to a data entry form.
• Requirement 1.4: The data entry form must include fields for:
• USEF Number (with validation)
• Horse/Rider Selection (with links to USEF search). Consider auto-suggest based on USEF number.
2. Data Retrieval and Parsing
• Requirement 2.1: The system must use the provided USEF number (Horse or Rider) to query and retrieve data from USEF.
• Requirement 2.2: Implement a data parsing mechanism to extract relevant information from the retrieved data (
• Requirement 2.3: The data parsing mechanism must extract the following fields from the USEF data source :
• Horse Name
• USEF #
• Show
• Jumper Level
• State
• Zone
• Section
• Description
• Height
• Placing
• Competed
• 1st Round Faults
• 2nd Round Faults
• Money Won
• Rider
• Requirement 2.4: The system must handle cases where data is missing or incomplete in the USEF data source.
• Requirement 2.5: All dates will be based on today as the end date. Date ranges should be selectable for 1,3 or 5 years in the past.
3. Data Storage and Calculations
• Requirement 3.1: The parsed data must be stored in the MongoDB database. Design the schema to efficiently store and query the data.
• Requirement 3.2: Implement the following calculations:
• Final Placements: Sum of 1st, 2nd, 3rd, 4th, 5th, and 6th place finishes.
• Total Winnings: Sum of money won from all classes.
• Average Class Size: Sum of competitors in each class divided by the number of classes.
• Podium Win Percentage: (Count of 1st, 2nd, and 3rd place wins) / (Total number of classes).
• Height Increase: Display the range from lowest to highest class height during the period.
• Zone Placements: Average placement for each USEF Zone.
• Clear Round Percentage: (Number of clean rounds) / (Total number of rounds). (Assume a "clean round" is 0 faults in both 1st and 2nd round).
• Average Jumper Level: Sum of jumper levels / (number of shows).
• Rider Gender Chart: Generate a line graph showing Male vs. Female rider results for all heights with placement counts. (This will require a reliable way to determine rider gender).
• Requirement 3.3: Ensure calculations are performed efficiently and accurately.
• Requirement 3.4: Ensure that "DNP" is handled correctly by excluding from calculations
4. Report Generation and Delivery
• Requirement 4.1: Utilize three distinct PDF templates to present the calculated results.
• Requirement 4.2: Populate the selected PDF template with the calculated data.
• Requirement 4.3: Generate a PDF report based on the chosen template and the calculated results.
• Requirement 4.4: Send the generated PDF report to the user's email address.
• Requirement 4.5: Store the generated PDF report in a location accessible via the user's dashboard.
5. User Dashboard
• Requirement 5.1: Create a user dashboard where users can view a list of their generated reports.
• Requirement 5.2: Allow users to download previously generated reports from the dashboard.
• Requirement 5.3: Implement user authentication and authorization to secure the dashboard.
6. Admin Functionality
• Requirement 6.1: Create an admin interface with authentication.
• Requirement 6.2: Implement the ability for admins to run reports on demand by entering a USEF number.
• Requirement 6.3: Implement a scheduling mechanism to automatically run reports for subscribers every 11 days.
• Requirement 6.4: Implement a scheduled task to hard delete reports older than 365 days.
7. Technology Stack
• Requirement 7.1: The system must be built using Node.js, MongoDB, and hosted on Digital Ocean, utilizing existing codebase where applicable.
• Requirement 7.2: Ensure code is well-documented, modular, and follows best practices.
• Requirement 7.3: Implement robust error handling and logging.
8. Non-Functional Requirements
• Requirement 8.1: Performance: The system must generate reports in a reasonable timeframe (e.g., within 2-3 minutes). Optimize data retrieval and calculations for speed.
• Requirement 8.2: Scalability: The system should be designed to handle a growing number of users and reports.