> For the complete documentation index, see [llms.txt](https://docs.editran.onesait.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.editran.onesait.com/documentacion-editran/editran-sepa-v3/modo-de-uso/integracion/unix.md).

# UNIX

El script Previo a emisión que hace que se ejecute Editran/SEPA en una presentación de emisión se llama `PRVEMISEPA.sh`.

Para poder utilizar dicho script hay que definir `./SEPA/PRVEMISEPA.sh` en el apartado "Previo a emisión" de la opción "Aplicación" de la presentación de Editran/G que enviará ficheros SEPA.

> **IMPORTANTE:** Es necesario definir en el directorio de emisión con el metacaracter `*` al final de la ruta, y además no se pueden utilizar rutas relativas (`../`, `./`, etc.)

Por ejemplo, si los ficheros están en el directorio `/opt/ficheros/SEPA/`, en el apartado Ficheros de Editran/G habrá que definir: `/opt/ficheros/SEPA/*`.

También se puede definir un nombre común para los ficheros a emitir y al final definir el asterisco (`/opt/ficheros/SEPA/file*`)

El script tiene los siguientes pasos:

* Registra en el fichero de salida de Editran/G (`editrang.out`) la información general del resultado de la transmisión:

```sh
# -----------------------------------------------------------
#                         Funciones
# -----------------------------------------------------------
function escribeCabecera()
{   echo "################################################################################"
    echo SCRIPT DE USUARIO PREVIO A EMISION: $0.
    echo "`date`"
}

function escribeParametros()
{   echo "PRESENTACION : $SENTIDO-$SESION ($LOCAL-$REMOTO-$APLICACION)"
    echo "RETORNO      : $RETORNO"
    echo "################################################################################"
}

function borrarFichTrabajo()
{
    [ -f "$ARCHIVOS_ORIG" ] && rm "$ARCHIVOS_ORIG"
    [ -f "$FLISTA" ] && rm "$FLISTA"
}

function borrarFichConvertidos()
{ [ ! -f "${ARCHIVOS_ORIG}" ] && return

    while read fichConv
    do
        #Borrar archivos convertidos
        case "${fichConv}" in
            *.xml|*.XML)
                fsinExtension=${fichConv%????}
                if [ -f "${fsinExtension}" ]; then
                     rm "${fsinExtension}"
                fi;;
            *)
                if [ -f "${fichConv}".xml ]; then
                     rm "${fichConv}".xml
                fi;;
        esac
    done < "${ARCHIVOS_ORIG}"
}

function moverFichOriginales()
{ [ ! -f "${ARCHIVOS_ORIG}" ] && return

    while read fichOrig
    do
        directory=`dirname "${fichOrig}"`/"${DIR_ORIG}"
        if [ ! -d "${directory}" ]; then
            mkdir -p "${directory}"
        fi
        if [ -f "${fichOrig}" ]; then
            mv "${fichOrig}" "${directory}"
        fi
    done < "${ARCHIVOS_ORIG}"
}

function mensajeResultado()
{
    if [ ! -f "${ARCHIVOS_ORIG}" ]; then
        echo "No hay archivos a convertir"
        exit 0
    fi

     case `head -1 "${ARCHIVOS_ORIG}"` in
         *.xml|*.XML)
             echo "Conversion SEPA XML a plano correcta."
             ;;
         *)
             echo "Conversion SEPA plano a XML correcta."
             ;;
     esac
}

# -----------------------------------------------------------
#                         MAIN
# -----------------------------------------------------------
SALIDA=0
CLASSPATH=
DIR_ORIG=orig

# Escribe la cabecera del script ############################
escribeCabecera

# Valida las variables de entorno
validaEntorno && echo "Error validaEntorno" && exit 1

# Transforma los parámetros de entrada en parámetros Editran
getParametrosEditran "PRV" "$@"
[ $? -ne 0 ] && echo "Error getParametrosEditran" "PRV" "$@" && exit 1

# Escribe los parámetros Editran ############################
escribeParametros
```

Donde SESION es el nombre de la presentación, SENTIDO es el sentido de la transmisión (E (Emisión) o R (Recepción)), RETORNO es el resultado de la transmisión, LOCAL es el código local, REMOTO el código remoto y APLICACIÓN la aplicación de la presentación.

Se definen las variables necesarias, se comprueba que el directorio de emisión definido en Editran/G tiene el metacarácter `*` obligatorio y se ejecuta Editran/SEPA por cada fichero que encuentra en el directorio de emisión definido en el apartado Ficheros de Editran/G.

Si el fichero original tiene la extensión `.xml` Editran/SEPA lo convertirá a un fichero plano; si no tiene extensión `.xml` lo convertirá a un fichero con formato XML, ya que por defecto utiliza el modo de uso del comando con un solo parámetro, como se explica en 4.2 Proceso cliente.

Si ninguna de las conversiones realizadas sobre los ficheros a emitir termina con resultado de error se moverán los ficheros originales a un subdirectorio histórico llamado `orig`.

Si, por el contrario, alguna/s de esas conversiones finaliza con error, se eliminan los ficheros convertidos correctamente, si los hubiera, y se detiene el envío de la presentación, dejando los ficheros originales de envío como estaban para su posterior revisión.

Si el directorio de emisión definido en Editran/G no tiene el metacarácter `*` obligatorio el proceso se detiene. Si hubiera algún fichero convertido, se borraría:

```sh
# Si RETORNO no es 0 salir ##################################
if [ "${RETORNO}" != "0000" ]; then
  exit 0
fi

# Ficheros de trabajo #######################################
ARCHIVOS_ORIG=$LOCAL-$REMOTO-$APLICACION-$SENTIDO.orig
FLISTA=$LOCAL-$REMOTO-$APLICACION-$SENTIDO.list
borrarFichTrabajo

# Librerias SEPA ############################################
for f in ${DIR_LIB_SEPA}/*.jar; do
  CLASSPATH=${f}:${CLASSPATH}
done

for f in ${DIR_LIB_SEPA_SO}/*.jar; do
  CLASSPATH=${f}:${CLASSPATH}
done

# Obtenemos los ficheros a convertir ########################
# Se extrae el path de los ficheros a emitir, previamente definido en la presentacion de EDItran/G
cfgupt -r -i$SESION | grep "NOMBRE FICHERO" | cut -d"=" -f2 | sed 's/^ *//' > $FLISTA

while read fich
do
    case "${fich}" in
        */"*")
            fbuscar="${fich%??}"
            for fichconvert in "${fbuscar}"/*
            do
                if [ -f "${fichconvert}" ] ; then
                    echo "${fichconvert}" >> $ARCHIVOS_ORIG

                    diraux=${PWD}
                    cd "${DIR_SEPA}"
                    java -Dlog4j.configurationFile="conf/log4j2.properties" -cp ${CLASSPATH} \
$EDITRAN_XMLMAIN "${fichconvert}" 2>&1 > ${LOGOUT}
                    error=$?
                    cd "${diraux}"

                             if [ ${error} -ne 0 ]; then
                                 if [ ${error} -ne 36 ]; then
                                     echo "Fallo al convertir el fichero ${fichconvert}"
                                     echo "Error=${error}"
                                     echo "Conversion SEPA incorrecta"

                                      SALIDA=1
                                      break
                                  else
                                    echo "Conversion SEPA del fichero ${fichconvert} con warnings"
                                  fi
                             fi
                    fi
                done;;
           *)
                echo "Debe definir una máscara * en la ruta de los ficheros de emision de EDITRAN/G."

                SALIDA=1
                break
    esac
done < "$FLISTA"

# Conversion con errores ####################################
if [ $SALIDA -ne 0 ]; then
    echo "Salida con error"
    borrarFichConvertidos
    borrarFichTrabajo
    exit $SALIDA
fi

# Conversion correcta #######################################
mensajeResultado
moverFichOriginales
borrarFichTrabajo

# Terminar ##################################################
exit $SALIDA
```

El script Posterior a Emisión que hace que se muevan los ficheros convertidos y enviados correctamente se llama `PSTEMISEPA.sh`.

Para poder utilizar dicho script hay que definir `./SEPA/PSTEMISEPA.sh` en el apartado "Posterior a emisión" de la opción "Aplicación" de la presentación de Editran/G que enviará ficheros SEPA.

El script tiene los siguientes pasos:

* Registra en el fichero de salida de Editran/G (`editrang.out`) la información general del resultado de la transmisión:

```sh
# -----------------------------------------------------------
#                         Funciones
# -----------------------------------------------------------
function escribeCabecera()
{   echo "################################################################################"
    echo SCRIPT DE USUARIO POSTERIOR A EMISION: $0.
    echo "`date`"
}

function escribeParametros()
{   echo "PRESENTACION : $SENTIDO-$SESION ($LOCAL-$REMOTO-$APLICACION)"
    echo "FICHEROS     : $FLIST"
    echo "RETORNO      : $RETORNO"
    echo "################################################################################"
}

# -----------------------------------------------------------
#                         MAIN
# -----------------------------------------------------------
# Escribe la cabecera del script ############################
escribeCabecera

# Valida las variables de entorno ###########################
validaEntorno && echo "Error validaEntorno" && exit 1

# Transforma los parámetros de entrada en parámetros Editran
getParametrosEditran "PST" "$@"
[ $? -ne 0 ] && echo "Error getParametrosEditran" "PST" "$@" && exit 1

# Escribe los parámetros Editran ############################
escribeParametros
```

Donde SESION es el nombre de la presentación, SENTIDO es el sentido de la transmisión (E (Emisión) o R (Recepción)), RETORNO es el resultado de la transmisión, LOCAL es el código local, REMOTO el código remoto y APLICACIÓN la aplicación de la presentación.

* Se obtiene la lista de ficheros emitidos correctamente del fichero `.ficheros` del directorio de los tampones de Editran y se mueven a un directorio llamado "conv".

```sh
# Si RETORNO no es 0 salir ##################################
if [ "${RETORNO}" != "0000" ]; then
  exit 0
fi

# Variables de trabajo ######################################
DIR_CONV=conv
FICH_ANTERIOR=""

# Mueve los ficheros convertidos ############################
awk -F',' '{if ($1 != "") print $1}' "${FLIST}" | while read fileconv
do
    if [ -f "${fileconv}" ] && [ "${fileconv}" != "${FICH_ANTERIOR}" ]; then
        FICH_ANTERIOR="${fileconv}"

           directory=`dirname "${fileconv}"`/"${DIR_CONV}"

           if [ ! -d "${directory}" ]; then
               mkdir -p "${directory}"
           fi

           mv "${fileconv}" "${directory}"
    fi
done
```

El script Posterior a Recepción que hace que se ejecute Editran/SEPA en una presentación de recepción se llama `PSTRECSEPA.sh`.

Para poder utilizar dicho script hay que definir `./SEPA/PSTRECSEPA.sh` en el apartado "Posterior a recepción" de la opción "Aplicación" de la presentación de Editran/G que enviará ficheros SEPA.

> **IMPORTANTE:** Es recomendable definir el directorio de recepción con la opción `%o` para recibir los ficheros con el nombre con el que los envía el remoto.
>
> Si al recibir ficheros la conversión deseada es de XML a Plano, es necesario definir en el directorio de recepción que el fichero a descargar contenga extensión `.xml`, ya que el batch PSTRECSEPA por defecto utiliza el modo de uso del comando con un solo parámetro, como se explica en [4.2 Proceso cliente](#42-proceso-cliente). Con la opción `%o` se reciben los ficheros con el nombre con el que los envía el remoto, si éste los envía con la extensión `.xml` no habrá que realizar ninguna configuración; al contrario, si el remoto no incluye la extensión, habría que definir el parámetro `%o` con la extensión `.xml` al final.

También se puede hacer uso de otras variables, consulte el manual de Editran/G.

Por ejemplo, para recibir los ficheros en el directorio `/opt/ficheros/recepción/`, en el apartado Ficheros de Editran/G habrá que definir: `/opt/ficheros/recepción/%o`. Si la conversión es de XML a Plano y el remoto no incluye la extensión al emitir, habría que definir la ruta `/opt/ficheros/recepción/%o.xml`.

El script tiene los siguientes pasos:

* Registra en el fichero de salida de Editran/G (`editrang.out`) la información general del resultado de la transmisión:

```sh
# -----------------------------------------------------------
#                         Funciones
# -----------------------------------------------------------
function escribeCabecera()
{   echo "################################################################################"
    echo SCRIPT DE USUARIO POSTERIOR A RECEPCION: $0.
    echo "`date`"
}

function escribeParametros()
{   echo "PRESENTACION : $SENTIDO-$SESION ($LOCAL-$REMOTO-$APLICACION)"
    echo "FICHEROS     : $FLIST"
    echo "RETORNO      : $RETORNO"
    echo "################################################################################"
}

function borrarFichTrabajo()
{
    [ -f "$ARCHIVOS_ORIG" ] && rm "$ARCHIVOS_ORIG"
}

function borrarFichConvertidos()
{ [ ! -f "${ARCHIVOS_ORIG}" ] && return

    while read fichConv
    do
        #Borrar archivos convertidos
        case "${fichConv}" in
            *.xml|*.XML)
                fsinExtension=${fichConv%????}
                if [ -f "${fsinExtension}" ]; then
                     rm "${fsinExtension}"
                fi;;
                *)
                        if [ -f "${fichConv}".xml ]; then
                             rm "${fichConv}".xml
                        fi;;
        esac
    done < "${ARCHIVOS_ORIG}"
}

function moverFichOriginales()
{ [ ! -f "${ARCHIVOS_ORIG}" ] && return

    while read fichOrig
    do
        directory=`dirname "${fichOrig}"`/"${DIR_ORIG}"
        if [ ! -d "${directory}" ]; then
            mkdir -p "${directory}"
        fi
        if [ -f "${fichOrig}" ]; then
            mv "${fichOrig}" "${directory}"
        fi
    done < "${ARCHIVOS_ORIG}"
}

function mensajeResultado()
{
    if [ ! -f "${ARCHIVOS_ORIG}" ]; then
        echo "No hay archivos a convertir"
        exit 0
    fi

      case `head -1 "${ARCHIVOS_ORIG}"` in
          *.xml|*.XML)
              echo "Conversion SEPA XML a plano correcta."
              ;;
          *)
              echo "Conversion SEPA plano a XML correcta."
              ;;
      esac
}

# -----------------------------------------------------------
#                         MAIN
# -----------------------------------------------------------
SALIDA=0
CLASSPATH=
DIR_ORIG=orig

# Escribe la cabecera del script ############################
escribeCabecera

# Valida las variables de entorno ###########################
validaEntorno && echo "Error validaEntorno" && exit 1

# Transforma los parámetros de entrada en parámetros Editran
getParametrosEditran "PST" "$@"
[ $? -ne 0 ] && echo "Error getParametrosEditran" "PST" "$@" && exit 1

# Escribe los parámetros Editran ############################
escribeParametros
```

Donde SESION es el nombre de la presentación, SENTIDO es el sentido de la transmisión (E (Emisión) o R (Recepción)), RETORNO es el resultado de la transmisión, LOCAL es el código local, REMOTO el código remoto y APLICACIÓN la aplicación de la presentación.

Se definen las variables necesarias y se ejecuta Editran/SEPA por cada fichero que se recibe. Si el fichero original tiene la extensión `.xml` Editran/SEPA lo convertirá a un fichero plano; si no tiene extensión `.xml` lo convertirá a un fichero con formato XML.

Si ninguna de las conversiones realizadas sobre los ficheros a recibir termina con error se moverán los ficheros originales a un subdirectorio histórico llamado `orig`.

Si, por el contrario, alguna/de dichas conversiones termina con error, se eliminarán los ficheros convertidos correctamente, si los hubiera, y el script devolverá el correspondiente resultado, dejándose como estaban los ficheros originales de recepción para su posterior revisión.

```sh
# Si RETORNO no es 0 salir ##################################
if [ "${RETORNO}" != "0000" ]; then
  exit 0
fi

# Ficheros de trabajo #######################################
ARCHIVOS_ORIG=$LOCAL-$REMOTO-$APLICACION-$SENTIDO.orig
FICH_ANTERIOR=""
borrarFichTrabajo

# Librerias SEPA ############################################
for f in ${DIR_LIB_SEPA}/*.jar; do
    CLASSPATH=${f}:${CLASSPATH}
done

for f in ${DIR_LIB_SEPA_SO}/*.jar; do
    CLASSPATH=${f}:${CLASSPATH}
done

# Obtenemos los ficheros a convertir ########################
awk -F',' '{if ($1 != "") print $1}' "${FLIST}" | while read fich
do
    if [ -f "${fich}" ] && [ "${fich}" != "${FICH_ANTERIOR}" ]; then
        FICH_ANTERIOR="${fich}"
        echo "${fich}" >> $ARCHIVOS_ORIG

        diraux=${PWD}
        cd "${DIR_SEPA}"
        java -Dlog4j.configurationFile="conf/log4j2.properties" -cp ${CLASSPATH} $EDITRAN_XMLMAIN \
"${fich}" 2>&1 > ${LOGOUT}
        error=$?
        cd "${diraux}"

           if [ ${error} -ne 0 ]; then
               if [ ${error} -ne 36 ]; then
                   echo "Fallo al convertir el fichero ${fich}"
                   echo "Error=${error}"
                   echo "Conversion SEPA incorrecta"

                    # Sale del bucle read, no del script
                    exit 1
                else
                    echo "Conversion SEPA del fichero ${fich} con warnings"
                fi
        fi
    fi
done
SALIDA=$?

# Conversion con errores ####################################
if [ $SALIDA -ne 0 ]; then
    echo "Salida con error"
    borrarFichConvertidos
    borrarFichTrabajo
    exit $SALIDA
fi

# Conversion correcta #######################################
mensajeResultado
moverFichOriginales
borrarFichTrabajo

# Terminar ##################################################
exit $SALIDA
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.editran.onesait.com/documentacion-editran/editran-sepa-v3/modo-de-uso/integracion/unix.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
