El formato de intercambio estándar de bases de datos de construcción, abreviado como FIEBDC, es el formato estándar que han adoptado tanto los creadores de bases de datos de construcción como los de los programas de mediciones y presupuestos para compartir datos entre los distintos programas y de esta forma tener interoperabilidad entre los usuarios que elijan distintas opciones.
Las especificaciones del formato FIEBDC se encuentra en la web: http://www.fiebdc.org
Hasta la fecha hay cinco versiones de dichas especificaciones:
- FIEBDC-3/95
- FIEBDC-3/98
- FIEBDC-3/2002
- FIEBDC-3/2004
- FIEBDC-3/2007
Cada una de estas versiones es una actualización de la versión anterior, con pequeñas modificaciones y añadidos, pero siempre tendentes a ser retrocompatibles con la anterior especificación.
Dichas especificaciones en general me parecen algo confusas y dadas a interpretaciones, así que en adelante intentare exponer lo que yo interpreto de las especificaciones y en general la forma como leerá los archivos bc3 pyArq-Presupuestos. Si encuentra algún error o mala interpretación en lo expuesto le agradecería que no dude en contactar para subsanar el error, puede hacerlo en el foro o por correo electrónico .
Especificaciones FIEBDC
La información de una base de datos, presupuesto de obra o certificación de obra puede almacenarse en uno o varios archivos FIEBDC con la extensión «.BC3». La información contenida en los archivos estará en el orden deseado al estar los archivos ordenados por orden alfabético.
Se da el eterno problema de que solo se piensa en msdos/windows al escribir las especificaciones, y en su sistema de archivos que no distingue entre mayúsculas y minúsculas, sin embargo en otros sistemas de archivos si que se distinguen, así que no queda claro que la extensión tenga que ser exactamente «.BC3» o sin embargo también pueda ser «.bc3» o incluso «.Bc3» o «.bC3», en cualquier caso se tomará como estándar la extensión explícitamente definida «.BC3».
El fin de línea será marcado con los caracteres ASCII-13 y ASCII-10. El fin de archivo sera marcado con el carácter ASCII-26. El único carácter de control adicional que se permitirá será el tabulador (ASCII-9).
Cada archivo está dividido en registros. Estos registros se delimitan con el carácter que indica el principio de cada registro «~» (ASCII-126). Los archivos deben contener registros completos, es decir, si se divide un presupuesto en varios archivos la división se deberá realizar al final de un registro, inmediatamente antes del carácter «~» que señala el principio del registro. Comenzando así el segundo archivo con el carácter delimitador «~» que indica el principio del primer registro.
Como consecuencia de esto el carácter «~» queda reservado para este uso y no puede ser usado en ninguna información contenida dentro de los registros.
Cada registro está dividido en campos delimitados por el carácter «|» (ASCII-124). Todo campo que contenga datos tendrá que finalizar con el delimitador de campos. El registro deberá contener todos los separadores de campos anteriores aunque no contengan datos, ya que los distintos tipos de campos de cada registro se definen por orden. No es necesario disponer de delimitador de campos posteriores al delimitador que marca el fin del último campo con datos, es decir, la no existencia de campos es equiparable a que los campos restantes estuvieran vacíos.
Como consecuencia de esto el carácter «|» queda reservado para este uso y no puede ser usado en ninguna información contenida dentro de los campos.
Cada campo puede estar o no dividido en subcampos delimitados por el carácter «\» (ASCII-92). El delimitador final, entre el último dato de un campo y el delimitador de fin de campo es opcional.
Como consecuencia de esto el carácter «\» queda reservado para este uso y no puede ser usado en ninguna información contenida dentro de los subcampos.
El primer campo de cada registro es una letra mayúscula que indica el tipo de registro.
Se debe ignorar cualquier dato dispuesto entre el ultimo separador de campos «|» de un registro o el comienzo del archivo y el carácter indicador de nuevo registro «~».
Se deben ignorar los caracteres blancos (ASCII-32), tabuladores (ASCII-9) y de fin de línea (ASCII-13 y ASCII-10), delante de los separadores «~», «|» y «\».
Existe un problema en el caso de los registro tipo P (registro paramétrico), de forma que no se pueden borrar los caracteres (ASCII-32), (ASCII-9) y (ASCII-13 ASCII-10) delante de los separadores «\» ya que afectaría a su lectura.
Los campos vacíos se considerarán sin datos, no con datos nulos, de forma que los campos con datos vacíos no sobreescriben los datos que puedan haberse definido en registros anteriores, simplemente dejan los datos como están.
Un campo numérico nulo deberá contener explícitamente el valor 0 (cero).
Un campo alfanumérico nulo deberá contener explícitamente el valor NUL.
Respetar estás normas al cargar el archivo BC3 puede provocar dejar la base de datos, presupuesto o certificación en un estado inconsistente si el fichero no esta bien formado o faltan registros, por lo que una vez cargado el archivo es necesario realizar una comprobación de la integridad.
En un archivo FIEBDC se pueden definir distintos precios alternativos para todos los conceptos del presupuesto. Esto puede ser útil por ejemplo para definir distintos precios por zonas geográficas o para definir distintos precios para distintas divisas.
La razón de la clasificación de los distintos precios queda definido por la «Cabecera de precios alternativos» que se define en el registro V (Propiedad y versión). En este mismo registro se define también los distintos Títulos para cada precio alternativo. Quedando definido el número de precios alternativos por el número de títulos.
A cada juego de precios definido en el registro V, le tiene que corresponder un precio definido para cada concepto en los registro tipo C (Registro tipo Concepto).
Asimismo a cada juego de precios le tiene que corresponder un juego de espacios decimales para realizar los redondeos en los cálculos, estos decimales se definen en el registro K (Registro tipo Coeficientes).
Ejemplo de cabeceras y títulos de precios alternativos:
- Precios según divisas\euros\dolares\yenes
- Precios por comunidad autónoma\Castilla y León\Aragón\Madrid\
Proceso de lectura de FIEBDC
- Se intenta fijar la codificación del archivo. Para ello se busca en el primer registro, que debe ser de tipo V en el sexto campo. Si no existe registro V o no hay sexto campo o contiene una codificación invalida se fija la codificación por omisión (850).
Codificaciones admitidas:
- «ANSI» Codificación cp1252.
- «850» Codificación cp850.
- «437» Codificación cp437.
- Se eliminan los caracteres blancos (ASCII-32), tabuladores (ASCII-9) y de fin de línea (ASCII-13 y ASCII-10), delante de los delimitadores «~», y «|». Delante de los delimitadores «\» no se hace ya que afecta a la lectura de los registros P.
- Se eliminan cualquier dato existente delante del primer registro, es decir desde el principio del archivo hasta el primer delimitador «~» .
- Se eliminan los caracteres blancos (ASCII-32), tabuladores (ASCII-9) y de fin de línea (ASCII-13 y ASCII-10) situados al final del archivo.
- Se fragmenta el contenido de cada registro con el delimitador «~» y se analiza secuencialmente registro a registro.
- Se fragmenta el contenido de cada registro en campos con el delimitador «|».
Si el registro tiene mas campos de los que define el tipo de registro estos se ignoran.
Si el registro tiene menos campos de los que define el tipo de registro estos se añaden con contenido vacío.Tipo de registros:
- Se fragmenta el contenido de cada registro en campos con el delimitador «|».
...