public override string Transformar(TRANSFORMACION_CAMPO entidadTransformacion, Mensaje mensaje)
        {
            List<PARAMETRO_TRANSFORMACION_CAMPO> listaParametros = entidadTransformacion.PARAMETRO_TRANSFORMACION_CAMPO.ToList();

            StringBuilder concatenacion = new StringBuilder();

            foreach (PARAMETRO_TRANSFORMACION_CAMPO parametro in listaParametros)
            {
                EnumTipoParametroTransformacionCampo tipoParametroTransformacion = (EnumTipoParametroTransformacionCampo)
                                Enum.ToObject(typeof(EnumTipoParametroTransformacionCampo), parametro.PTC_TIPO);

                Campo campoOrigen = mensaje.Campo(parametro.CAMPO);

                Valor cadenaBuscar = campoOrigen.ValorCuerpo.SubValor(parametro.PTC_POSICION_INICIAL.Value-1, parametro.PTC_LONGITUD.Value);
                string cadenaConcatenar = null;

                switch (tipoParametroTransformacion)
                {
                    case EnumTipoParametroTransformacionCampo.Tabla:
                        cadenaConcatenar = FactoryDa.ValorTabla(parametro.TABLA.TBL_NOMBRE, parametro.COLUMNA_ORIGEN.COL_NOMBRE, parametro.COLUMNA_DESTINO.COL_NOMBRE, cadenaBuscar.Dato.ToString());
                        //TablaDA.ObtenerValorTabla
                        break;
                    case EnumTipoParametroTransformacionCampo.CampoOrigen:
                        cadenaConcatenar = cadenaBuscar.Dato.ToString();
                        break;
                    default:
                        break;
                }
                concatenacion.Append(cadenaConcatenar ?? "").Append(separador);

            }

            return TransformacionEspecifica(entidadTransformacion,concatenacion.ToString());
        }
        public override EnumResultadoPaso EjecutarPaso(Mensaje mensajeOrigen)
        {
            foreach (CRIPTOGRAFIA_CAMPO entidadCriptografiaCampo in this.entidad.CRIPTOGRAFIA_CAMPO)
            {
                CriptografiaCampo criptografiaCampo = new CriptografiaCampo(mensajeOrigen, entidadCriptografiaCampo);
                Campo campo = mensajeOrigen.Campo(entidadCriptografiaCampo.CAMPO_RESULTADO);
                campo.ValorCuerpo = new Caracter(ValorPorTipoCriptografia(criptografiaCampo, campo));
            }

            return EnumResultadoPaso.Correcto;
        }
        public EnumResultadoPaso Validar(PASO_DINAMICA pasodinamica, Mensaje mensaje)
        {
            GRUPO_VALIDACION grupo = ObtenerGrupoValidacionPorPasoDinamica(pasodinamica);

            List<VALIDACION_CAMPO> listaVCampo = grupo.VALIDACION_CAMPO.ToList();

            foreach (VALIDACION_CAMPO vcampo in listaVCampo)
            {
                Valor valor = mensaje.Campo(vcampo.CAMPO).ValorCuerpo;
                bool pasaValidacion = validacionCampo.Validar(vcampo, valor); ;

                if (!pasaValidacion)
                    break;
            }
            return EnumResultadoPaso.Correcto;
        }
        public Valor ValorLlave(Mensaje mensaje, string llaveFija, CAMPO campo, int tipoLlave)
        {
            EnumTipoLlave tipoTransformacion = (EnumTipoLlave)
                Enum.ToObject(typeof(EnumTipoLlave), tipoLlave);

            switch (tipoTransformacion)
            {
                //TODO: Falta implementar WorkingKey
                case EnumTipoLlave.WorkingKey:
                    throw new NotImplementedException("No funciona WorkingKey");
                case EnumTipoLlave.Campo:
                    return mensaje.Campo(campo).ValorCuerpo;
                case EnumTipoLlave.LlaveFija:
                    return new Caracter(llaveFija);
                default:
                    throw new Exception("Error: Llave - ValorLlave");
            }
        }