@startuml state-enrollment !theme plain skinparam stateBackgroundColor #F8F9FA skinparam stateBorderColor #495057 title Estados del Estudiante y sus Inscripciones [*] --> Registrado : Registro inicial state "Cuenta" as cuenta { state "Registrado\n(Pendiente Activación)" as Registrado state "Activo" as Activo Registrado --> Activo : activar(código) Registrado --> Registrado : código expirado\n[regenerar código] } state "Inscripciones" as inscripciones { state "Sin Materias" as SinMaterias { state "0 créditos" as cred0 } state "Inscripción Parcial" as Parcial { state "3 créditos\n(1 materia)" as cred3 state "6 créditos\n(2 materias)" as cred6 } state "Inscripción Completa" as Completa { state "9 créditos\n(3 materias)" as cred9 } SinMaterias --> Parcial : inscribir(materia) Parcial --> Parcial : inscribir(materia)\n[créditos < 9] Parcial --> Completa : inscribir(materia)\n[créditos = 6] Completa --> Parcial : cancelar(inscripción) Parcial --> SinMaterias : cancelar(inscripción)\n[única materia] } Activo --> SinMaterias : cuenta activa state validacion <> SinMaterias --> validacion : intenta inscribir Parcial --> validacion : intenta inscribir validacion --> Parcial : [válido y cuenta activa] validacion --> [*] : [inválido]\nmuestra error note right of Registrado El estudiante recibe código de activación por email (24h validez) end note note right of Completa No puede inscribir más materias end note note left of Parcial Validaciones en cada inscripción: - Cuenta activa - Límite de créditos - No repetir profesor - Materia no duplicada end note note bottom of validacion Si la cuenta no está activa, redirige a página de activación end note @enduml