Overview
ITV Gestion Concesionario implements a robust, multi-layer validation system that ensures data integrity at every stage of the inspection process. The validation architecture includes input-level checks, form-level validation, and pre-calculation verification.The system uses three validation layers: real-time input validation, submission validation, and pre-calculation verification.
Validation Layers
Input-Level Validation
Real-time validation as users type, preventing invalid data entry before submission
Form Submission Validation
Comprehensive checks when generating vehicle forms, validating completeness and format
Layer 1: Real-Time Input Validation
Vehicle Count Validation
The system validates the number of vehicles in real-time (script.js:489-499):Validation Rules:
- Maximum: 50 vehicles
- Minimum: 1 vehicle
- Type: Integer only
- Auto-correction: Values exceeding 50 are automatically set to 50
Numeric Input Enforcement
Keypress validation ensures only numeric input (script.js:502-506):script.js:502-506
- Allowed Keys
- Blocked Keys
- Digits: 0-9
- Backspace
- Delete
- Tab
- Enter
Text Field Auto-Formatting
Name and company fields are automatically capitalized (script.js:509-516):script.js:509-516
Auto-Formatting:
- First character is automatically capitalized
- Improves data consistency
- Applies to: nombre, apellidos, razonSocial
Layer 2: Form Submission Validation
Main Validation Function: enviar()
The enviar() function (script.js:8) performs comprehensive validation before form generation:
Validation Checks Performed
Required Field Validation
Required Field Validation
Fields Checked:
- nombre (Name)
- apellidos (Surname)
- razonSocial (Company Name)
- nAutos (Number of Vehicles)
- Uses
.trim()to remove whitespace - Checks for empty strings
- Displays error if any field is empty
Numeric Range Validation
Numeric Range Validation
Validations:
isNaN()check for non-numeric values<= 0check for zero or negative values> 50check for values exceeding maximum
Data Type Validation
Data Type Validation
Process:
- Input value is parsed using
parseInt() - Result is checked with
isNaN() - If parsing fails, error is displayed
- Text input in numeric field
- Special characters
- Empty strings
Layer 3: Pre-Calculation Validation
Vehicle Form Validation: validarFormulariosVehiculos()
Before calculations, all vehicle forms are validated (script.js:167-184):
Validation Logic:
- Iterates through all vehicle forms (1 to numeroAutos)
- Checks each vehicle has motorization selected
- Checks each vehicle has ITV status selected
- Returns
falseon first validation failure - Returns
trueonly if all vehicles are complete
Required Fields per Vehicle
Motorization
RequiredOne of:
- Diesel
- Gasoline
- Hybrid
- Electric
ITV Status
RequiredOne of:
- Approved
- Not Approved
Observations
OptionalFree text field with 250-character limit
Vehicle Number
AutomaticAuto-assigned during form generation
Validation Integration
The validation system is integrated throughout the workflow:Main Calculation Flow
Validation is called in thecalcular() function (script.js:119-148):
script.js:119-148
Calculate and Display Wrapper
ThecalcularYMostrar() function (script.js:693) validates before proceeding:
script.js:693-704
Error Display System
The validation system uses a sophisticated error notification function (script.js:381-464):View Complete Error Display Function
View Complete Error Display Function
script.js:381-464
Error Alert Features
Auto-Dismiss
Alerts automatically disappear after 5 seconds
Manual Close
Users can manually dismiss alerts with the × button
Fixed Position
Alerts appear in top-right corner, not blocking content
Slide Animation
Smooth slide-in and slide-out animations
Single Instance
Previous alerts are removed before showing new ones
High z-index
z-index: 1000 ensures alerts appear above all content
HTML Validation Attributes
The HTML form includes native validation attributes (index.html:34-50):index.html:34-50
The
required attribute provides browser-level validation as a first line of defense, complementing JavaScript validation.Accessibility Features
The validation system includes accessibility enhancements (styles.css:482-491):styles.css:482-491
Accessibility Benefits:
- Clear focus indicators for keyboard navigation
- WCAG 2.1 compliant focus states
- Visible outlines with proper offset
- Consistent focus styling across all interactive elements
Validation Event Initialization
All validation events are initialized on DOM load (script.js:706-715):script.js:706-715
Best Practices Implemented
Progressive Enhancement
Progressive Enhancement
- HTML5
requiredattributes provide baseline validation - JavaScript adds enhanced validation and UX improvements
- System remains functional even with JavaScript disabled (basic validation)
Fail-Fast Validation
Fail-Fast Validation
- Validation stops at first error
- Specific error messages guide users to the exact problem
- Early returns prevent cascading validation failures
User-Friendly Feedback
User-Friendly Feedback
- Clear, contextual error messages in Spanish
- Vehicle-specific error messages (“vehículo 3”)
- Visual indicators with icons (⚠️)
- Non-intrusive positioning
Data Sanitization
Data Sanitization
.trim()removes leading/trailing whitespaceparseInt()ensures numeric values are integers- Auto-capitalization maintains consistency
Next Steps
Dynamic Forms
See how validated data generates vehicle forms
Cost Calculation
Learn how validated data powers cost calculations