Mostrando entradas con la etiqueta Demanda. Mostrar todas las entradas
Mostrando entradas con la etiqueta Demanda. Mostrar todas las entradas

martes, 14 de octubre de 2025

Nueva escolarización.


Demanda




Con anterioridad he tratado [en otra sección] la formulación de demanda de evaluación psicopedagógica al SEO en un contexto diferente al actual. Diferente por varios motivos, todos los cuales obligan a un tratamiento específico del actual, ya que debe ser considerado específico.

Concretemos esas diferenciar empezando por el demandante y siguiendo por el momento de escolarización: 

  • Antes teníamos un demandante claro (el profesorado), ahora a ciencia cierta no existe un demandante claro, aunque formalmente se presupone su existencia (no puede ser de otro modo) y se identifica con el único legalmente posible (la familia). La realidad es menos clara y más compleja.
  • Antes la demanda presuponía un periodo previo de escolarización, una detección previa de dificultades y una respuesta “ordinaria”. Ahora simplemente no tiene porqué haber escolarización previa (con esto está la mayor parte dicho), motivo por el cual hablamos de nivel 0.
Las implicaciones de ambas condiciones (y diferencias), son relevantes, especialmente las del segundo bloque, pero no es ahora el momento de tratarlas en toda su amplitud; no especialmente las del segundo bloque.

Respecto a las cuestiones que sí podemos abordar aquí (la automatización de los modelos documentales, en este caso y más concretamente, del acceso al contenido), en términos formales (y aquí estos son importantes) no podemos identificar un documento único de demanda, tampoco una formulación prescriptiva del mismo, aunque es posible acercarnos a una formalización que se asemeja a lo anterior: el informe de Atención Temprana. No sirve como documento de demanda para todos los casos ni podemos esperar en él unidad de forma y/o contenido, pero es lo que más se acerca a ambas dimensiones.

A esta potencial diversidad podemos responder empleando un enfoque funcional como el que describí como estrategia del SEO para acceder al contenido de la demanda del profesorado, pero es que además es posible que el documento se presente en diferentes soportes. Aunque el más frecuente es como documento PDF, generalmente de texto, no podemos descartar que, en ocasiones, se trate de la imagen de un texto. La diferencia es que podemos acceder al contenido del primero mediante PyPDF2 (por ejemplo), pero para el segundo necesitamos capacidades de OCR.

En consecuencia deberemos plantear al menos dos propuestas de trabajo, ambas usando Python como lenguaje-herramienta, aunque ambas sean únicamente a modo de ejemplo:
  • una cuando el documento es accesible mediante PyPDF2 (u otro módulo similar) 
  • y otra para cuando necesitemos trabajar con imágenes. 
Todo ello lo veremos en las próximas entradas de esta sección. En breve.


jueves, 9 de octubre de 2025

Demanda. Propuesta.


Demanda de evaluación (VI)




Traslado de la demanda al SEO

Una vez que el Equipo Educativo ha elaborado su demanda, esta, de un modo u otro, pasa al SEO, que valora la información y se plantea qué hacer (y cómo), pero esas son cuestiones que pertenecen a otros procesos. Por lo que a éste se refiere, tras lo trabajado en las entradas anteriores y en lo que son los términos estrictos de esta sección, sólo queda resolver la recepción del documento por parte del SEO y el modo en que éste va a trabajar con dicho documento.

Al respecto, aunque son varias las posibilidades, la que me interesa plantear ahora es aquella en la que, quien corresponda, nos entrega un documento pdf (formato digital)(1). Nuestro objetivo como SEO es acceder al contenido, especialmente a la parte que contiene la información crítica (DA y dificultades EA, página 2), ya que sobre ella vamos a tomar decisiones y a montar un procedimiento de actuación. Nuestro interés es automatizar este acceso o, cuanto menos, ayudarnos de Python para acceder a esa información. Para este fin utilizaremos la biblioteca PyPDF2. Este sería el script básico...

from PyPDF2 import PdfReader

lector = PdfReader("solicitud.pdf")

pagina = lector.pages[1]

texto = pagina.extract_text()

... con el que podríamos dar por concluida esta tercera fase del proceso simplemente con este script, ya que cubre satisfactoriamente (aunque por la mínima) con el objetivo que enunciamos antes: nos permite acceder al documento (lector = PdfReader("solicitud.pdf")), concretamente a su página 2 (pagina = lector.pages[1]), de la cual extraemos su contenido (texto = pagina.extract_text()). Como puedes ver, mucho con muy poco (2).

Y ciertamente, en este punto podemos dar por finalizado el enfoque de trabajo que hemos mantenido en este proyecto hasta este momento (Python como lenguaje para construir script con los que abordar procedimientos), a la vez que iniciado (estamos aquí en una frontera borrosa) otro enfoque, más instrumental, en el que me planteo usar Python como herramienta para manejar el material (en este caso, el contenido de la segunda página de un documento pdf) que hemos recibido.

Como este planteamiento puede resultar un tanto confuso, aunque no es la primera vez que lo planteo, me parece una buena ocasión para ponerlo en práctica, lo que requiere que nos resituemos como SEO y nos planteemos con qué objetivos vamos a trabajar, ya que son estos los que nos van a guiar en el proceso.

En primer lugar, la finalidad última de nuestro trabajo se concreta como uso de la información sobre DA y dificultades EA para plantear actuaciones, la más inmediata es construir un guion de contenidos para una entrevista con el profesorado (tutor/a). 

Ahora bien, para esto necesitamos hacer algo más (que se aparta de lo que ahora nos planteamos), que es investigar en el expediente escolar del alumno, y no es estrictamente necesario que lo que sí podemos considerar parte de este nuestro actual procedimiento sea resuelto mediante Python: perfectamente podemos copiar el contenido de la salida que nos ofrece el script anterior si el añadimos un print(texto), y pegarlo en un documento (txt o Writer, por ejemplo) y ya podríamos trabajar con el contenido que nos interesa. Esta podría ser tu opción.

De hecho esto ya constituye una forma, la más simple que no la más útil (3), de aplicar ese enfoque directamente instrumental del uso de Python del que te estoy hablando. Lo que te propongo en esta entrada es desarrollarlo de forma más extensa y coherente con un planteamiento orientado a la automatización de los procedimientos de trabajo.

La cuestión está en que, desde este enfoque, no existe un script que entregar como base para tu uso (4); es el script lo que tienes que ir construyendo hasta obtener el resultado que te satisfaga. Esto implica formularlo y reformularlo conforme avanzas en un proceso que vas construyendo en parte en función de tu objetivo-guía, en parte en función de los resultados que vas obteniendo.

En este caso yo me planteo obtener por separado los datos DA observadas y dificultades EA observadas y almacenar ambos en sendos archivos txt para su posterior uso. Hasta aquí llegará mi trabajo con el contenido extraído de l documento PDF.

Esto implica desarrollar dos veces el siguiente proceso:

  • Extraer del documento las líneas correspondientes con la categoría 
  • Pasarlas a una lista específica 
  • Copiarlas en un archivo txt específico
Además, si se da el caso (que se da) será necesario modificar alguno de los elementos de estas listas (5)

Este planteamiento es el que se recoge en el código que te proporcionó en el archivo contenido en el zip que puedes descargar desde [este enlace] y que contiene todos los script del proyecto y todos los documentos auxiliares y aquellos que sirven a modo de ejemplo (6)

NOTAS

(1) En realidad no debería ser infrecuente recibir el conjunto de documentación generada, incluyendo el archivo datos.txt. No obstante ahora vamos a trabajar en base a una realidad tampoco inusual que si no es en este contexto puede perfectamente darse en otros. No es infrecuente tener que trabajar con información aportada en PDF e incluso, aun peor, con documentos en papel, los cuales deberemos escanear si deseamos acceder a su contenido. En ambas situaciones podremos hacer uso de la biblioteca PyPDF2 (u otra similar) como herramienta para automatizar (parcialmente) el acceso al contenido textual de esa documentación.
(2) Se debe entender que estamos usando Python (concretamente PyPDF2) como una herramienta, así que nuestro objetivo con este script no es crear una aplicación (por sencilla que sea) sino obtener un resultado inmediato usando el lenguaje como herramienta de trabajo que, en este caso, sustituye al copia-pega. Este enfoque de trabajo facilita interesantes desarrollos, como podremos ver a continuación en esta misma entrada.
(3) No es precisamente ésta la mejor solución, ya que el resultado del print()-copia-pega nos proporciona un texto plagado de trabajo, pero como ejemplo de lo que quiero decir me sirve perfectamente.
(4) Ese ha sido el planteamiento de los script anteriores dentro de este proyecto. En realidad sí podríamos crear un "borrador" de script con todas (o casi) las instrucciones comentadas para que tú las fueras activando conforme las fueras necesitando. Y puede ser una solución interesante cuando es de esperar que podamos repetir varias veces un mismo proceso, pero en la mayoría de los casos es más bien un esfuerzo excesivo para un resultado incierto. En cualquier caso lo que sí parece interesante es ir comentando el script conforme lo vamos construyendo para saber la motivación y objetivo de cada uno de los pasos que vamos dando: a partir de esta guía pueden surgir procedimientos de interés que podemos retomar como proyectos de script/app en otro momento.
(5) Cuando se trabaja con texto extraído de un PDF no hay garantías de correcta codificación, por lo que es posible que tengas que trabajar con el texto resultante. Este es el caso respecto a las tildes.
(6) Obviamente se trata de un supuesto, no de datos reales.

miércoles, 8 de octubre de 2025

Demanda. Propuesta.


Demanda de evaluación (V)




Elaboración del documento de solicitud

Aunque con algunos cambios respecto lo expuesto en la [entrada anterior] y admitiendo que la formulación de ese script se puede mejorar sustancialmente, damos por concluida esa primera fase del proyecto y nos embarcamos en la segunda: la elaboración del documento de demanda.

Este documento se genera automáticamente a partir de los datos recogidos en la fase anterior y almacenados para su uso posterior en un archivo llamado datos.txt, contenido en el subdirectorio datos (1). 

Opto por elaborar primeramente un documento en formato docx para que pueda se manipulado fácilmente por el profesorado una vez generado su contenido-base (2). Esto requiere trabajar con la biblioteca Python-docx (3). Una vez elaborado ese documento, propongo convertirlo a formato PDF para su tramitación segura (4).

Para el correcto desarrollo de esta fase del proceso se requiere acceder al archivo que contiene los datos (datos.txt) y manipularlo para obtener de él, de forma desglosada, toda la información. Dentro de este procedimiento es necesario convertir lo que son cadenas de caracteres en elementos de lista.

La segunda parte de la fase consiste en recuperar la información de los documentos que contienen los listados de DA, características EA y actuaciones MAD. Estos datos son necesarios para identificar los contenidos que son relevantes para el caso, ya que serán ellos los que consten en el documento (5)

Finalmente, la tercera parte de esta segunda fase es la creación del documento. Para ello necesitamos trabajar con Python-docx, aunque el objetivo es crear un documento simple, por lo que no me detendré en cuestiones de forma y estilo (6).

Paso a continuación a presentar este script.

#Importar bibliotecas

from docx import Document
from docx.shared import Inches

#CARGAR DATOS. Acceder al archivo datos.txt ------------------------------------------------

'''
Acceder al archivo, cargar la información y convertirla en lista.
'''

dir_archivo = 'datos/datos.txt'

archivo = open(dir_archivo,'r',encoding='utf-8')

texto=archivo.readlines()

archivo.close()

#Paso del contenido de cada línea a una variable

al = texto[0].rstrip()
da = texto[1].rstrip()
ea = texto[2].rstrip()
mad = texto[3].rstrip()

#Transformación de cada línea en una lista

datos_al = al.split('|')
datos_da = da.split('|')
datos_ea = ea.split('|')
datos_mad = mad.split('|')

#Extracción de información de datos_al

if datos_al[4] == 'EI':
    etapa = 'Educación Infantil'
else:
    etapa = 'Educación Primaria'

#Extracción de datos de las MAD (datos_mad)

'''
Requiere al acceso previo al documento que recoge estas medidas (ncc/mad.txt)
y la comparación de cada elemento de datos_mad con su contenido
'''

medidas_ap = []

mad_aplicadas = []

dir_datos = 'ncc/mad.txt'

archivo_mad = open(dir_datos,'r',encoding='utf-8')

medidas= archivo_mad.readlines()

for i in range(0,6,1):
    if datos_mad[i] == 'S':
        mad_aplicadas.append(medidas[i].strip())

#Extracción de datos de las DA  y EA observadas (condicionado al nivel escolar)

#Acceso a los documentos

dir_da = ''
dir_ea = ''
lista_da = []
lista_ea =[]

val_nivel = int(al[-1])

if val_nivel == 1:
    dir_da = 'ncc/da_n1.txt'
    dir_ea = 'ncc/ea_a.txt'
elif val_nivel == 2:
    dir_da = 'ncc/da_n2.txt'
    dir_ea = 'ncc/ea_b.txt'
elif val_nivel == 3:
    dir_da = 'ncc/da_n3.txt'
    dir_ea = 'ncc/ea_a.txt'

archivo_da = open(dir_da,'r',encoding='utf-8')

lista_da = archivo_da.readlines()

archivo_ea = open(dir_ea,'r',encoding='utf-8')

lista_ea = archivo_ea.readlines()

# Listado de características DA realmente observadas

caract_da = []

n_da = len(datos_da)

for i in range(0,n_da,1):
    if datos_da[i] == 'S':
        caract_da.append(lista_da[i].strip())

#Listado de características EA realmente observadas

caract_ea = []

n_ea = len(datos_ea)

for i in range(0,n_ea,1):
    if datos_ea[i] == 'S':
        caract_ea.append(lista_ea[i].strip())

#CREAR INFORME. Datos de identificación en formato docx  -------------------------------------

info_deriva = Document()

titulo = 'PROPUESTA DEL EQUIPO DOCENTE  DE SOLICITUD DE EVALUACIÓN PSICOPEDAGÓGICA'

info_deriva.add_heading(titulo, level = 0) #Título del documento

centro_curso = (f'Centro {datos_al[2]} \nCurso escolar {datos_al[3]}') #Datos de identificación

info_deriva.add_heading(centro_curso , level = 2)

dat_per = (f'Alumno/a: {datos_al[0]} {datos_al[1]}')

dat_escol = (f'Etapa y curso: {etapa} ({datos_al[5]})\nTutor/a: {datos_al[7]}')

dat_tut = (f'Fecha de emisión: {datos_al[6]}')

info_deriva.add_heading(dat_per , level = 3)

info_deriva.add_heading(dat_escol , level = 3)

info_deriva.add_heading(dat_tut , level = 3)

presenta = info_deriva.add_paragraph(f'\nMediante este documento el Equipo Educativo solicita al SEO la evaluación psicopedagógica de {datos_al[0]} {datos_al[1]} al observar la presencia de las dificultades de aprendizaje que se indican.\n') #Presentación del documento

medidas = info_deriva.add_paragraph(f'Previamente se informa de las medidas ordinarias de atención a la diversidad adoptadas con anterioridad a la formulación de esta demanda.\n') 

for mad in mad_aplicadas:

    info_deriva.add_paragraph(mad, style='List Bullet')

#Salto de página para crear los listados de las DA y las características EA observadas

info_deriva.add_page_break()

#Escritura de listado DA realmente observadas

info_deriva.add_paragraph('Se enumeran a continuación las dificultades de aprendizaje observadas\n')

for da_ob in caract_da:
    info_deriva.add_paragraph(da_ob, style='List Bullet')

#Escritura de las características (deficiencias) EA realmente observadas

info_deriva.add_paragraph('\nIgualmente se informa de las características del estilo de aprendizaje que se considera motivan la presente demanda de intervención del SEO:\n')

for ea_ob in caract_ea:
    info_deriva.add_paragraph(ea_ob, style='List Bullet')

#Fin y cierre del documento docx

print('FIN DEL SCRIPT DE COMPOSICIÓN DEL DOCUMENTO DE DERIVACIÓN')

info_deriva.save('solicitud.docx') # Cierre del documento docx

Espero que la aclaración que precede al script y los comentarios que éste contiene te sirvan para comprender su lógica y las instrucciones empleadas.

Cuando el procedimiento esté completo aportaré la documentación necesaria, de momento te propongo que estudies este script y manipules sus partes para entender cómo funciona. Para ello te aporto los documentos necesarios, incluyendo un ficticio datos.txt. Están disponibles en este [archivo zip].


NOTAS

(1) No era la única opción disponible y en cierto sentido puede resultar menos eficiente que otras, pero me ha parecido adecuada para facilitar la diferenciación de los dos subprocesos y aligerar de extensión y complejidad el script en el que he estado trabajando hasta ahora.
(2) Que es el que crea automáticamente el script anterior.
(3) Ver subsección del mismo nombre en la sección [Textos]
(4) En su momento trataré con más detalle estas cuestiones de procedimiento. De momento decir que esa última manipulación se realiza mediante la utilidad de conversión disponible en Word y en Writer. Como ya sabemos, aunque se cree un documento docx, es posible trabajar con él mediante Writer, incluyendo la posibilidad de exportar a formato PDF.
(5) Al contrario de la formulación de los soportes de las Administraciones educativas, los recursos de programación que empleamos y los script resultantes nos permiten identificar qué es lo relevante del caso y qué no lo es. No parece lógico renunciar a esta ventaja y reproducir fórmulas que son propias de modelos tipo formulario.
(6) Aun queda una última parte: la conversión del documento .docx en .pdf; pero no la considero relevante para esta exposición, como tampoco lo es la posible modificación que pueda realizar el profesorado del documento creado, opción disponible precisamente por crear el documento en un formato editable y accesible para los procesadores de texto de uso más común.

lunes, 6 de octubre de 2025

Demanda. Propuesta.


Demanda de evaluación (IV)



Categorización del nivel de escolarización

Ya tenemos todos los datos de identificación necesario, incluyendo los que nos permiten ubicar al alumno en un grupo de nivel de escolarización, ya que hemos decidido obtener automáticamente este dato mediante código, como alternativa a un procedimiento directo que exigiría una instrucción específica del profesorado.

En la práctica esto es, en parte, lo que vamos a hacer en esta entrada, en la que, además de resolver esa parte del procedimiento, expondré el script tal y como ha quedado desarrollado hasta este punto, añadiendo como colofón el archivo de los datos obtenidos en un documento txt que nos va a servir a modo de base de datos.

Lo primero que corresponde hacer es retomar el razonamiento expuesto en [esta entrada] donde, básicamente, expongo que los referentes DA (1) no pueden ser los mismos en las diferentes fases de la escolarización de un alumno, dado que el currículo (y el propio proceso de aprendizaje) se van modificando. Esa modificación también implica cambios en los referentes de lo que podemos identificar como mínimo causal de las DA.

La identificación y categorización de cada subperiodo y los contenidos de aprendizaje de referencia quedaron expuestos en esa entrada (2), implicando de paso la necesaria categorización (asignación a categoría) el sujeto, proceso que corresponde a esta entrada ya que, si deseamos automatizarla, previamente tendríamos que obtener tres datos: el mes de la fecha en que se tramita la demanda (en cuanto a referencia de desarrollo del curso), la etapa de escolarización del sujeto y el nivel o curso en que se encuentra (3).

Es a partir de estos datos con los que podremos aplicar el conjunto de condicionales que nos permitan obtener el dato que nos interesa. Previamente, eso sí, y para mayor seguridad, transformaremos el string del nivel en integer para que el orden quede fácilmente definido (4).

Pero antes de llegar a este nivel, falta exponer primero lo que en buena lógica debería haber sido expuesto en la entrada anterior, pero que, para no repetir y por no ser estrictamente necesario en aquel momento, he preferido hacerlo ahora para enlazar con mayor claridad en la lógica de la parte del procedimiento que toca explicar en esta entrada.

from datetime import date, time, datetime

#TOMA DE DATOS --------------------------------------------------------------------

#Variables para datos de identificación

al_nom = ''
al_ap = ''
centro = ''
curso= ''
etapa = ''
nivel_i = 'I1 - I2 - I3'
nivel_p = 'P1 - P2 - P3 - P4 - P5 - P6'
nivel_s = ''
nivel = ''
tutor = ''
fecha_date = 0
fecha_t = ''
fecha_a = 0
fecha_b = 0
fecha_m = 0
fecha_d = 0
f_aa = 0
f_ab = 0

#Solicitud de datos

al_nom = input ('Nombre del alumno o alumna:  ')

al_ap = input (f'Apellidos de {al_nom}: ')

centro = input ('Nombre del Centro: ')

etapa = input ('Etapa escolar: \n EI para Educación Infantil \n EP para Educación Primaria \n ')

if etapa == 'EI':
    nivel_s = nivel_i
else:
    nivel_s = nivel_p

nivel = input(f'Nivel de escolarización: {nivel_s}\n (selecciona el curso o nivel que corresponda)\n') 

#Calculo de los valores para curso académico

fecha_date = date.today()

fecha_a = fecha_date.year
fecha_m = fecha_date.month
fecha_d = fecha_date.day

fecha_t = (f'{str(fecha_d)}/{str(fecha_m)}/{str(fecha_a)}')

if fecha_m >= 9:
    fecha_b = fecha_a +1
    f_aa = fecha_a
    f_ab = fecha_b
elif fecha_m <= 7:
    fecha_b = fecha_a - 1
    f_aa = fecha_b
    f_ab = fecha_a

curso = (f'{str(f_aa)}/{str(f_ab)}')

#Datos del tutor

tutor = input(f'Nombre y apellidos del tutor o tutora de {al_nom}: ')

#Obtener el código de posicionamiento de nivel educativo del alumno

'''
Se trata de posicionar al sujeto en un nivel de escolarización de modo que posteriormente se aplique el cuestionario ncc que se considere adecuado en función de dicho nivel: Variable nivel_esc
* 1 - EI a EP (P1-t2)
* 2 - EP(P1>T2)-P3
*3 - EP(>=P4)
'''

nivel_esc = 0

#Conversión curso/nivel EP en número

nivel_n = int(nivel[-1]) #Extraer el dato numérico de la cadena nivel

if etapa == 'EI': # Obtener el valor de nivel_esc
    nivel_esc = 1
else:
    if nivel_n == 1 and (fecha_m >= 9 or fecha_m <= 3):
        nivel_esc = 1
    elif nivel_n == 1 and (fecha_m >= 4 or fecha_m <= 6):
        nivel_esc = 2
    elif nivel_n >= 2 and nivel_n < 4:
        nivel_esc = 2
    elif nivel_n >= 4:
        nivel_esc = 3

#APLICACIÓN DE CUESTIONARIO de posibles DA en función del nivel de escolarización ---------

da = []
da_obs = []
dif = ''
dir_doc = ''
texto = ''

#Acceso a txt de nivel_da

for i in range(1,4,1):
    if i == nivel_esc:
        dir_doc = 'ncc/da_n'+ str(i)+'.txt'

docum = open (dir_doc,'r',encoding='utf-8')

texto = docum.read()

docum.close() 

#Converisón del texto en lista

da = texto.split('\n')

print('\nListados de elementos')

for item in da:
    dif = input(f'\n{item}\nDificultad presente (S/N): ')
    da_obs.append(dif)

print(da_obs)

Antes de nada advertir que este script aun está proceso de desarrollo y que es muy posible que pueda sufrir incluso importantes modificaciones hasta su formulación definitiva. Aun con todo, tal y como está en estos momentos nos permite obtener resultados de interés en relación con nuestro objetivo.

Decir como segunda advertencia para la correcta comprensión de su lógica que, aunque Python no exige la declaración previa de variables aquí se practica una forma simplificada de esta estrategia de programación por considerarla útil para mejorar la comprensión del script (5).

Lo que nuestro actual script facilita es la entrada de datos de identificación (parte primera, desde la marca #TOMA DE DATOS...), la identificación del posicionamiento del sujeto en función de su nivel de escolarización y la aplicación del cuestionario básico de identificación de dificultades de aprendizaje relevantes (dar) (6) asociadas a ese nivel. En consecuencia, se aplican diferentes estrategias de trabajo con los datos:

  • El más simple consiste en la solicitud directa del dato al usuario mediante la función input(). Tal es el caso del nombre del alumno (al_nom = input ('Nombre del alumno o alumna:  ')).
  • Otros datos también se solicitan directamente, pero están previamente determinados por otro dato que los condiciona. Dentro de esta categoría tenemos la identificación del nivel (curso) en que se encuentra escolarizado el alumno, que depende para su concreción del dato previo de etapa escolar:

etapa = input ('Etapa escolar: \n EI para Educación Infantil \n EP para Educación Primaria \n ')

... siendo el motivo de la especificación de contenido a las variables correspondiente (nivel_i = 'I1 - I2 - I3'  - nivel_p = 'P1 - P2 - P3 - P4 - P5 - P6') y su asociación condicionada a una tercera variable (nivel_s) mediante un condicional

 if etapa == 'EI':
    nivel_s = nivel_i
else:
    nivel_s = nivel_p

... antes de proceder a la solicitud directa del dato al usuario

nivel = input(f'Nivel de escolarización: {nivel_s}\n (selecciona el curso o nivel que corresponda)\n')

  • Finalmente un tercer procedimiento de obtención de un (determinado) dato se basa en el uso de una función en concreto que proporciona dicho dato en función de una condición específica: la obtención de la fecha actual mediante la función (today()) (7) (fecha_date = date.today()). A partir de este dato obtenemos aquellos (8) que necesitamos para obtener otros, pero también para expresar el propiamente calculado como dato solicitado dando un rodeo en el procedimiento (fecha_t = (f'{str(fecha_d)}/{str(fecha_m)}/{str(fecha_a)}')).
  • Con todo, lo más interesante de este procedimiento específico es que nos permite obtener el dato Curso (académico) sin solicitarlo al usuario...

if fecha_m >= 9:
    fecha_b = fecha_a +1
    f_aa = fecha_a
    f_ab = fecha_b
elif fecha_m <= 7:
    fecha_b = fecha_a - 1
    f_aa = fecha_b
    f_ab = fecha_a

curso = (f'{str(f_aa)}/{str(f_ab)}')

... aunque también es de sumo interés el papel que estos datos secundarios tienen para el desarrollo de la segunda fase del procedimiento, la cual consiste, como ya he dicho, en identificar el categorizador del desarrollo del nivel de escolarización que explico a continuación.

La segunda parte de este script, que se inicia en esta marca (#APLICACIÓN DE...), desarrolla la aplicación del cuestionario de detección de DA, que requiere, previamente dos datos: 

  • uno para asegurar el correcto funcionamiento del script y que consiste en la transformación del dato nivel por el número del mismo (vg P1)

nivel_n = int(nivel[-1]) #Extraer el dato numérico de la cadena nivel

  • y otro para obtener el dato que sirve de identificador del propio nivel de escolarización

 if etapa == 'EI': # Obtener el valor de nivel_esc
    nivel_esc = 1
else:
    if nivel_n == 1 and (fecha_m >= 9 or fecha_m <= 3):
        nivel_esc = 1
    elif nivel_n == 1 and (fecha_m >= 4 or fecha_m <= 6):
        nivel_esc = 2
    elif nivel_n >= 2 and nivel_n < 4:
        nivel_esc = 2
    elif nivel_n >= 4:
        nivel_esc = 3

Además necesitamos acceder al documento que contiene el listado de ítem...

for i in range(1,4,1):
    if i == nivel_esc:
        dir_doc = 'ncc/da_n'+ str(i)+'.txt'

... puesto que optamos por externalizar estos datos por medio de archivos txt en lugar de incorporarlos directamente al script, y cargar su contenido en una variable...

docum = open (dir_doc,'r',encoding='utf-8')
texto = docum.read()
docum.close() 

... que posteriormente convertiremos en una lista

da = texto.split('\n')

... que usaremos para aplicar el cuestionario (9)

for item in da:
    dif = input(f'\n{item}\nDificultad presente (S/N): ')
    da_obs.append(dif)


NOTAS

(1) Dificultades de aprendizaje.
(2) Que no grabados en piedra como tablas de la ley, aunque de momento los asumiremos como referencias válidas para el desarrollo de este procedimiento. Tiempo habrá de ponerlos en tela de juicio y proponer modificaciones.
(3) Datos todos ellos que obtuvimos en el proceso explicado en la [entrada anterior], aunque será en ésta en la que expongamos esa parte del script.
(4) Veremos cómo en la explicación del script.
(5) Por el momento no he aplicado el principio de declarar todas las variables al inicio del script, tal y como se recomienda. Esto puede ser aplicado en su momento, pero hasta el momento me ha parecido innecesario y hasta contraproducente.
(6) Aquí se entiende por dificultades de aprendizaje relevantes aquellas que se consideran identifican las propias DA como posiblemente determinantes de NEAE. Se diferencian así del concepto más general de DA, resultando más selectiva en términos del proceso de derivación del alumnado al SEO que se desarrolla en este soporte.
(7) Que como sabes el el motivo por el que se ha importado el módulo datetiem (from datetime import date, time, datetime)
(8) Me refiero a año, mes y día (vg fecha_a = fecha_date.year)
(9) He optado por este procedimiento (en lugar de otras formulaciones) para mostrar la funcionalidad de esta estrategia para obtener un listado a partir de un texto empleando la función de segmentación de cadenas (split()), ya que resulta ser un procedimiento más transparente.

domingo, 5 de octubre de 2025

Demanda. Propuesta.


Demanda de evaluación (III)




Datos de identificación

Aunque reducidos al mínimo, lo primero que debemos formular en esta propuesta son los datos de identificación del sujeto y del propio procedimiento. Esto es aun más necesario si tenemos en cuenta que la aplicación del núcleo principal del script se basa en el posicionamiento del sujeto dentro de una determinada categoría de nivel de escolarización.


Debemos concretar ahora la información mínima necesaria para, a partir de ella y mediante recursos del lenguaje Python, podamos complementar la que se precisa pero que no es necesario solicitar al usuario, así como obtener el dato de posicionamiento de nivel de escolarización indicado antes.
  • Alumno. Nombre
  • Alumno. Apellidos
  • Alumno. Fecha de nacimiento
  • Centro
  • Curso académico
  • Etapa [EI - EP]
  • Nivel escolarización [EI: I1 - I2 - I3 ] - [EP: P1 - P2 - P3 - P4 - P5 - P6]
  • Tutor/a: [Nombre y apellidos]
  • Fecha de demanda
De estos datos, podemos prescindir de la fecha de nacimiento por constar en el expediente y por no ser estrictamente necesaria. El nombre del centro no es necesario que conste en el documento porque se supone que el SEO puede identificarlo sin dificultad en el propio procedimiento de entrega de la demanda (el documento siempre será entregado en un centro). El nombre del tutor/a también consta en la documentación del centro (o en la base de datos institucional de la Consejería de Educación) (1).

El curso académico presenta una peculiaridad que explico a continuación y plantea qué tratamiento darle.

Podemos pedir al usuario que nos aporte este dato ya que interesa para el procedimiento, pero también para la autoevaluación y la investigación del SEO (y del Centro) sobre sus propias prácticas. También podemos obtenerlo contextualmente (del mismo modo que el nombre del centro), pero aun cabe otra opción: lo podemos inducir de otro dato que, además de necesario, no es posible inducirlo, por lo que debemos solicitarlo: la fecha en que se produce la demanda. 

Bien pensado tampoco éste dato tenemos necesariamente que pedirlo, ya que lo podemos obtener mediante una función, siempre que asumamos la simultaneidad de la cumplimentación de la documentación y la actuación en la que se produce, que ocurrirán ambas "hoy".

De este modo, con un solo dato, el que nos devuelve la función today() del módulo datatime (2), matamos varios pájaros; de momento la obtención del curso mediante la extracción y posterior manipulación del mes y del año de la fecha:
  • Si el mes es igual o superior a 9, entonces el año corresponde al primero de los dos que conforman la expresión del curso (el segundo es año+1)
  • Si el mes es inferior o igual a 7 (siendo extremadamente generosos), entonces el año corresponde al segundo del curso (el primero es año-1) 
Vemos que, además, el campo etapa y nivel están relacionados, determinando el primero las opciones del segundo (3). Esta cuestión también deberá ser tenida en cuenta en la elaboración del script.

El siguiente paso consistirá en obtener, a partir de los datos de etapa y nivel, el código de categorización del nivel de escolarización. De ello nos ocuparemos en la próxima entrada.

NOTAS 

(1) No obstante, por claridad y porque en algún momento vamos a tener que incorporar esta información al documento, en la formulación del script vamos a solicitar estos datos, con la excepción de la fecha de nacimiento, por considerarla innecesaria en este momento.
(2) Sobre este módulo ver en [esta entrada].
(3) Esta cuestión también deberá ser tenida en cuenta en la elaboración del script, en este caso haciendo uso de un condicional.