model and validations