Sugerencia: subdividir el archivo en porciones más pequeñas:
'd*',
/* definir variables, e.g. tipo de registro */
,@control-leader.prc, /* 905/919, 001, 003, 005, 008 */
/* TO-DO: para que el proceso pueda ser más fácilmente reutilizado, en el 008/18-34 separar completamente los distintos tipos de registro: libros, videos, etc. */
,@descripcion.prc, /* 020, 245, 246?, 250, 260, 300, 490 */
,@puntos-acceso.prc, /* 100, 110, 111, 130, 700, 710, 711, 730, 740 */
,@analisis-tematico.prc, /* 082, 600, 651?, 653 */
,@datos-locales.prc, /* 859, 980, 991 */
/* --------------------------------------------------------------------------------
* br2marc.proc - Proceso de migración a MARC 21 para la Biblioteca Rivadavia
*
* Este proceso actúa sobre la base unificada, y luego de la aplicación de un
* conjunto de gizmos.
*
* Uso:
* mx bru "proc=@br2marc.pft"
*
* Requisitos: mx versión 5.2
*
* Campos auxiliares empleados:
* 9000
* 9001
* 9010
* 9100
* --------------------------------------------------------------------------------
*/
/* ----------------------------------------------------------------------------------
* Eliminamos todos los campos del registro original, para así poder crear el nuevo
* registro desde cero.
* ----------------------------------------------------------------------------------
*/
'd*',
/* ----------------------------------------------------------------------------------
* Los registros de videograbaciones requieren un tratamiento diferente.
* Usamos un campo auxiliar para poder reconocer estos registros fácilmente.
* ----------------------------------------------------------------------------------
*/
proc('d9100a9100#',
if s(mpu,v65,mpl) : 'VIDEOGRABACION' then 'VIDEO' else 'LIBRO' fi,
'#'),
/* -----------------------------------------------------------------------
* Campos MARC 905/919 - Datos de la cabecera (campos locales de Catalis)
* -----------------------------------------------------------------------
*/
'<905>n905>', /* LDR/05: Estado del registro: nuevo */
'<906>', /* LDR/06: Tipo de registro: 'a' para material impreso, 'g' para videos */
if v9100 = 'VIDEO' then 'g' else 'a' fi,
'906>',
'<907>m907>', /* LDR/07 - Nivel bibliográfico del registro: 'm' para monográfico */
'<908>#908>', /* LDR/08 - */
'<909>#909>', /* LDR/09 - */
'<917>z917>', /* LDR/17 - Nivel de codificación: 'z' */
'<918>u918>', /* LDR/18 - Reglas de catalogación: 'u' */
'<919>#919>', /* LDR/19 - */
/* ------------------------------------------
* Campo MARC 001 - Número de control
*
* Almacenamos el MFN que tiene el registro en la base unificada (no tiene relación
* con los MFN de la base original).
* ------------------------------------------
*/
'<001>',mfn(6),'001>',
/* ------------------------------------------
* Campo MARC 003 - Código MARC de la biblioteca
*
* El código asignado por LC.
* Ver http://www.loc.gov/marc/organizations/org-search-results.php?oid=36589
* ------------------------------------------
*/
'<003>',
'AR-BbABR',
'003>',
/* ------------------------------------------------------------------------
* Campo MARC 005 - Fecha y hora de última modificación
*
* Usamos la fecha y hora de la migración.
* ------------------------------------------------------------------------
*/
'<005>',
s(date).8, s(date)*9.6, '.0',
'005>',
/* ------------------------------------------
* Campo MARC 008 - Datos codificados
*
* Este campo se construye con datos procedentes de varios campos del registro original.
* ATENCION: el significado de las posiciones 18-34 varía según se trate de libros o videos.
* Para encarar estas diferencias, podríamos separar completamente el tratamiento de cada caso,
* o bien (como hacemos acá) usar varios 'if-then-else-fi' a lo largo del camino cada vez que
* surgen las diferencias.
*
* CASOS RAROS PARA REVISAR
* D:\mig\pruebas>mx br0 gizmo=g_pais gizmo=g_idioma proc=@br2marc.proc "pft=if size(v8)<>40 then mfn,x3,f(size(v8),1,0),c16, v8/ fi" now
* 027337 31 070727fr############0#####und||
* 043015 38 070727s1900####F###########0#####und||
* 048823 38 070727s1937####A###########0#####und||
* 094923 31 070727ag#a##########0#####und||
* 117138 44 070727s1esu1817####sp############0#####und||
* 125256 31 070727xx#a##########0#####und||
* 125952 31 070727sp############0#####und||
* 125953 31 070727sp############0#####und||
* ------------------------------------------
*/
'<008>',
/* ------------------------------------------
* 008/00-05 - Fecha de creación del registro
* Usamos la fecha de la migración.
* ------------------------------------------
*/
mid(date,3,6),
/* ------------------------------------------
* 008/06 - Tipo de fechas
* 008/07-10 - Fecha 1
* 008/11-14 - Fecha 2
* Nos basamos en el campo FOCAD 45 (Fecha de publicación) y consideramos 3 casos.
* ------------------------------------------
*/
/* CASO 1: el campo FOCAD 45 posee una fecha completa (4 dígitos), y posiblemente un rango de fechas */
if val(v45*0.4) > 1500 then,
/* casos considerados:
a) 1956
b) 1956-
c) 1956-7
d) 1956-57
e) 1899-900
f) 1956-1957
Los rangos de fechas también pueden aparecer indicados con una barra, p.ej.: 1956/57.
*/
if v45*4.1 = '-' or v45*4.1 = '/' then /* fechas múltiples */
'm', /* tipo de fechas: 'm' para múltiples */
v45*0.4, /* fecha 1 */
select size(v45*5) /* fecha 2 */
case 0 : 'uuuu', /* si supiéramos que la publicación continúa, pondríamos '9999' */
case 1 : v45.3, v45*5,
case 2 : v45.2, v45*5,
case 3 : v45.1, v45*5,
case 4 : v45*5,
elsecase '####'
endsel,
else /* fecha simple */
's', /* tipo de fecha: 's' para fecha única */
v45*0.4, /* fecha 1 */
'####', /* fecha 2 */
fi,
/* CASO 2: el campo FOCAD 45 contiene una fecha estimada */
else if v45*3.1 = '-' then,
/* casos considerados:
a) 195-
b) 19--
*/
's', /* fecha única */
replace(v45,'-','u'), /* fecha 1 */
'####', /* fecha 2: no aplicable */
/* CASO 3: el campo FOCAD 45 no contiene una fecha o está ausente */
else if val(v45*0.4) = 0 then,
/* casos considerados:
a) el campo 45 está presente, pero no contiene ningún dígito > 0
b) el campo 45 está ausente
*/
'n', /* fecha desconocida */
'uuuu', /* fecha 1: desconocida */
'####', /* fecha 2: no aplicable */
fi,fi,fi,
/* ------------------------------------------
* 008/15-17 - Lugar de publicación
* Campo FOCAD 48 - Código de país (revisar nombre de campo ??)
* Sólo usamos la primera ocurrencia del campo FOCAD 48.
* NOTA: el código ISO fue previamente convertido al código MARC mediante un gizmo.
* ------------------------------------------
*/
if p(v48) then
if size(v48[1]) = 2 then
v48[1],'#',
else
v48[1].3,
fi,
else
'xx#', /* 'xx#' para lugar desconocido */
fi,
/* Comienzo del bloque de datos dependientes del tipo de material (008/18-34) */
if v9100 = 'LIBRO' then
/* ------------------------------------------
* 008/18-21 - Ilustraciones
* Campo FOCAD 52, subcampo i
* ------------------------------------------
*/
if p(v52^i) then
'a###',
else
'####',
fi,
else if v9100 = 'VIDEO' then
/* ------------------------------------------
* 008/18-20 - Duración
* Campo FOCAD ??
* ------------------------------------------
*/
'---',
/* ------------------------------------------
* 008/21 - Indefinido
* ------------------------------------------
*/
'|',
fi,fi,
/* ------------------------------------------
* 008/22 - Audiencia
* ------------------------------------------
*/
'|',
if v9100 = 'LIBRO' then
/* ------------------------------------------
* 008/23 - Forma del ítem
* ------------------------------------------
*/
'|',
/* ------------------------------------------
* 008/24-27 Naturaleza del contenido
* ------------------------------------------
*/
/* Averiguamos si hay algún descriptor 'DICCIONARIO' o 'ENCICLOPEDIA' */
proc('d9000a9000~',(if s(mpu,v65,mpl):'DICCIONARIO' then 'DICC',break, fi),'~'),
proc('d9001a9001~',(if s(mpu,v65,mpl):'ENCICLOPEDIA' then 'ENCIC',break, fi),'~'),
if v9000 = 'DICC' and v9001 = 'ENCIC' then
'de##',
else if v9000 = 'DICC' then
'd###',
else if v9001 = 'ENCIC' then
'e###',
else
'####',
fi,fi,fi,
else if v9100 = 'VIDEO' then
/* ------------------------------------------
* 008/23-27 - Indefinido
* ------------------------------------------
*/
'####',
fi,fi,
/* ------------------------------------------
* 008/28 - Publicación gubernamental
* ------------------------------------------
*/
'|',
if v9100 = 'LIBRO' then
/* ------------------------------------------
* 008/29 - Publicación de conferencia
* ------------------------------------------
*/
'|',
/* ------------------------------------------
* 008/30 - Festschrift
* ------------------------------------------
*/
'|',
/* ------------------------------------------
* 008/31 - Indice
* ------------------------------------------
*/
'|',
else if v9100 = 'VIDEO' then
/* ------------------------------------------
* 008/29 - Forma del ítem
* ------------------------------------------
*/
'|',
/* ------------------------------------------
* 008/30-31 - Indefinido
* ------------------------------------------
*/
'##',
fi,fi,
/* ------------------------------------------
* 008/32 - Indefinido
* ------------------------------------------
*/
'#',
if v9100 = 'LIBRO' then
/* ------------------------------------------
* 008/33 - Forma literaria
* ------------------------------------------
*/
'|',
/* ------------------------------------------
* 008/34 - Biografía
* ------------------------------------------
*/
/* Averiguamos si hay algún nro. de clasificación de la forma 92x */
proc('d9000a9000~',(if v60.2='92' and not v60.3='929' then 'BIOG',break, fi),'~'),
if s(mpu,v65,mpl) : 'AUTOBIOGRAFIA' then
'a', /* 'a': autobiografía */
else if s(mpu,v65,mpl) : 'BIOGRAFIA' or v9000 = 'BIOG' then
'd', /* 'd': contiene información biográfica */
else
'#', /* '#': sin material biográfico */
fi,fi,
else if v9100 = 'VIDEO' then
/* ------------------------------------------
* 008/33 - Tipo de material visual
* ------------------------------------------
*/
'v', /* 'v' para videograbación */
/* ------------------------------------------
* 008/34 - Técnica
* ------------------------------------------
*/
'|',
fi,fi,
/* Fin del bloque de datos dependientes del tipo de material (008/18-34) */
/* ------------------------------------------
* 008/35-37 - Idioma
* Campo FOCAD 50 - Idioma
* NOTA: el valor del campo fue previamente convertido mediante un gizmo.
* ------------------------------------------
*/
if size(v50[1]) = 3 then
v50[1],
else
'und', /* 'und' para idioma no determinado */
fi,
/* ------------------------------------------
* 008/38 - Registro modificado
* ------------------------------------------
*/
'|',
/* ------------------------------------------
* 008/39 - Fuente de la catalogación
* ------------------------------------------
*/
'|',
'008>',
/* ------------------------------------------------------------
* Campo MARC 020 - ISBN
*
* Campo FOCAD 10 - ISBN
* Campo FOCAD 11 - ISBN (monografía en varios volúmenes)
* Sólo estamos considerando ISBN-10. Hay ISBN-13 en la base ??? <-- PENDIENTE
* ------------------------------------------------------------
*/
if p(v10) or p(v11) then
/* Para poder procesar en una sola pasada tanto el campo 10 como el 11,
juntamos todos los campos 10 y 11 en un campo auxiliar (9010) */
proc(
'd9010',
if p(v10) then
(
'a9010~',v10,'~',
)
fi
if p(v11) then
(
'a9010~',v11,'~',
)
fi,
),
/* Y ahora recorremos todas las ocurrencias de este campo auxiliar */
(
/* Creamos un campo auxiliar 9000 con el ISBN normalizado (le quitamos espacios
y guiones, lo convertimos a mayúsculas ['x' => 'X'] y lo truncamos en 10 caracteres) */
proc('d9000a9000~',
left(
replace(replace(s(mpu,v9010,mpl),
' ',''),
'-',''),
10 /* trunca en 10 caracteres */
),
'~'),
/* 9001: campo auxiliar para validar el número */
/* Ver http://en.wikipedia.org/wiki/International_Standard_Book_Number#Check_digit_in_ISBN-10 */
proc('d9001a9001~',
f(
(
val(mid(v9000[1],1,1)) * 10 +
val(mid(v9000[1],2,1)) * 9 +
val(mid(v9000[1],3,1)) * 8 +
val(mid(v9000[1],4,1)) * 7 +
val(mid(v9000[1],5,1)) * 6 +
val(mid(v9000[1],6,1)) * 5 +
val(mid(v9000[1],7,1)) * 4 +
val(mid(v9000[1],8,1)) * 3 +
val(mid(v9000[1],9,1)) * 2 +
val(replace(mid(v9000[1],10,2),'X','10')) * 1
)
/11
,1,5
),
'~'),
/* '<9000>',v9000[1],'9000>','<9001>',v9001[1],'9001>' */
/* Creamos un campo MARC 020, y decidimos el subcampo a usar según si el número es válido o no */
'<020>',
'##',
if right(v9001[1],5) = '00000' then
/* resto cero => ISBN válido */
'^a',
else
/* ISBN inválido */
'^z',
fi,
replace(v9010,'-',''), /* conservamos el valor original del campo, previa eliminación de guiones */
'020>',
)
fi,
/* ------------------------------------------
* Campo MARC 041 - Códigos de idioma
*
* Campo FOCAD 50 - Idioma del documento
* Creamos un campo MARC 041 sólo si hay más de una ocurrencia del campo FOCAD 50.
* NOTA: Los códigos deben haber sido convertidos previamente de ISO 639-1 (2 letras)
* a ISO 639-2 (3 letras).
* ------------------------------------------
*/
if nocc(v50) > 1 then
'<041>',
'0#',
(
'^a',v50,
)
'041>',
fi,
/* ------------------------------------------
* Campo MARC 044 - Códigos de país (??verificar nombre)
*
* Campo FOCAD 48 - Código de país (??verificar nombre)
* Creamos un campo MARC 044 sólo si hay más de una ocurrencia del campo FOCAD 48.
* ------------------------------------------
*/
/* ------------------------------------------
* Campo MARC 082 - Clasificación decimal de Dewey
*
* Campo FOCAD 60 - Clasificación temática
* Campo FOCAD 75 - Signatura topográfica
*
* Casos:
* 1. Campo 60 contiene número Dewey (con o sin prefijo de país) => se preserva
* 2. Campo 60 contiene número Dewey con prefijo 'C ' (consulta) => se preserva, eliminando el prefijo
* 3. Campo 60 contiene 'JN', 'I-', 'IC' => se omite
* 4. No hay campo 60, pero el 1er subcampo del campo 75 contiene un número Dewey => se usa v75^*
* El criterio para determinar si un campo 60 o 75 contiene un nro. Dewey es que se cumplan
* estas dos condiciones:
* - que la función val() devuelva un nro. positivo (esto excluye 'JN', 'IC', 'I-')
* - que el campo no contenga un guión (esto excluye nros. Brunet)
* ------------------------------------------
*/
if val(v60^*) > 0 and not v60^* : '-' then
(
'<082>',
'0#',
'^a',replace(replace(v60,'C ',''),' ',''),
'082>',
),
else if val(v75^*) > 0 and not v75^* : '-' then
'<082>',
'0#',
'^a',replace(replace(v75^*,'C ',''),' ',''),
'082>',
fi,fi,
/* ------------------------------------------
* 09x ?? (juvenil, infantil)
* ------------------------------------------
*/
/* ----------------------------------------------------------------------------
* Campo MARC 245 - Título y mención de responsabilidad
*
* Campo FOCAD 24 - Título monográfico
* Campo FOCAD 14 - Normas, patentes, etc.
* Campo FOCAD 40 - Nombre de la reunión
*
* Mención de responsabilidad: ¡qué problemita!
* ----------------------------------------------------------------------------
*/
if p(v24) then
'<245>',
/* primer indicador */
if a(v28) and a(v29) then
'0', /* título como punto de acceso principal */
else
'1', /* título como punto de acceso secundario */
fi,
/* segundo indicador: caracteres a ignorar */
if `¬L'¬L´¬` : s('¬',v24.2,'¬') then
'2',
else if '¬La ¬El ¬Le ¬An ¬' : s('¬',v24.3,'¬') then
'3',
else if '¬Las ¬Los ¬The ¬Les ¬... ¬' : s('¬',v24.4,'¬') then
'4',
else if '...' = v24.3 then
'3',
else
'0',
fi,fi,fi,fi,
/* subcampos */
'^a',
if v24^* : ': ' then
mid(v24^*,1,instr(v24^*,': ')-1),
' :^b',
mid(v24^*,instr(v24^*,': ')+2,size(v24^*))
else if v24^* : '; ' then
mid(v24^*,1,instr(v24^*,'; ')-1),
' :^b',
mid(v24^*,instr(v24^*,'; ')+2,size(v24^*))
else,
v24^*,
fi,fi,
/* mención de responsabilidad */
if p(v24^b) and p(v24^a) then
'^c', v24^b, ' ', v24^a,
fi,
/* subcampo h para videos */
if v9100 = 'VIDEO' then
'^h[videograbaci¢n]',
/* PENDIENTE: controlar posición del subcampo h */
fi,
'245>',
fi,
/* ----------------------------------
* Campo MARC 246 - Variantes del título
*
* Campo FOCAD ??
* ----------------------------------
*/
/* ----------------------------------------------------------------------------
* Campo MARC 250 - Mención de edición
*
* Campo FOCAD 44 - Edición
* NOTA: los valores fueron previamente normalizados con un gizmo.
* ----------------------------------------------------------------------------
*/
if p(v44) then
'<250>',
'##',
'^a',v44,
if right(v44,1) <> '.' then '.', fi, /* puntuación final */
'250>',
fi,
/* ----------------------------------------------------------------------------
* Campo MARC 260 - Datos de edición: lugar, editor, fecha
*
* Campo FOCAD 47 - Editor y lugar de edición (R)
* Campo FOCAD 45 - Fecha de publicación
*
* Casos especiales para testeo:
* 000744 - p(v45) and a(v47)
* 001996 - a(v45) and p(v47)
* ?????? - a(v45) and a(v47)
* Casos pendientes:
* D:\mig\pruebas>mx br0 proc=@br2marc.proc from=96101 pft=mfn,x3,v260/
* 096101 ## :^bCONABIP :^bD.N.I. Documento nacional de identidad
* ----------------------------------------------------------------------------
*/
if p(v47) or p(v45) then
'<260>',
'##',
/* Editor y lugar */
if p(v47) then
if s(mpu,v47,mpl) = 'S.N.T.' then
'^a[S.l. :^bs.n.]',
else
if p(v47^l) then,
'^a',replace(v47^l,'s.l.','[S.l.]'),
fi,
/* el campo FOCAD 47 es repetible */
(
if v47.2 <> '^l' then /* ignoramos ocurrencias que no contienen lugar */
' :^b', replace(v47^*,'s.e.','[s.n.]'),
fi,
)
fi,
fi,
/* Fecha */
if p(v45) then
if p(v47) then ',', fi, /* el subcampo c va precedido de una coma */
'^c',
/* CASO 1: el campo 45 posee una fecha completa (4 dígitos), y posiblemente un rango de fechas */
if val(v45*0.4) > 1500 then,
/* casos considerados:
a) 1956
b) 1956-
c) 1956-7
d) 1956-57
e) 1899-900
f) 1956-1957
*/
v45,
/* CASO 2: el campo contiene una fecha estimada */
else if v45*3.1 = '-' then,
/* casos considerados:
a) 195-
b) 19--
*/
'[',v45,']',
/* CASO 3: el campo no contiene una fecha (esté o no presente el campo 45) */
else if val(v45*0.4) = 0 then,
/* casos considerados:
a) el campo 45 está presente, pero no contiene ningún dígito > 0
b) el campo 45 está ausente
*/
if p(v260) or p(v45) then /* no creamos un 260 si el registro original carece de datos de edición (47 y 45 de FOCAD) */
if p(v45) then
'[s.f.]',
fi,
fi,
fi,fi,fi,
fi,
'.', /* puntuación final */
'260>',
fi,
/* ------------------------------------------------
* Campo MARC 300 - Descripción física
*
* Campo FOCAD 52 - Descripción física
*
* ¿Es necesario hacer correcciones a los datos originales? (p.ej. normalizar valores)
*
* ATENCION: campo 52 repetido
* D:\mig\pruebas>mx br0 "pft=if nocc(v52)>1 then mfn,x3,v52+| --- |/ fi" now
* 086280 215 p.^iil. col.^d26,5 cm. --- Polimodal
* 096761 Duración 95' --- Versión en inglés con subtítulos en castellano
* ------------------------------------------------
*/
if p(v52) then
'<300>',
'##',
if v52.1 <> '^' then /* extensión (páginas) */
'^a',v52^*,
fi,
if p(v52^i) then /* ilustraciones */ /* es correcto dejar este subcampo tal como viene ??? */
if v52.1 <> '^' then ' :', fi,
'^b',v52^i,
fi,
if p(v52^d) then /* dimensiones */
if v52.1 <> '^' or p(v52^i) then ' ;', fi,
'^c',v52^d,
fi,
/* puntuación final ?? */
'300>',
fi,
/* ------------------------------------------------
* Campo MARC 490 - Mención de serie
* Campo FOCAD 30 - Título (nivel colección)
* ------------------------------------------------
*/
if p(v30) then
(
'<490>',
'0#',
if v30.1 <> '^' then '^a', fi,
v30,
'490>',
)
fi,
/*
Para las notas que provienen del campo 59 (que según el caso enviamos a los campos 500, 505 o 511),
podemos elegir entre 2 métodos:
1. recorrer una única vez todas las ocurrencias del campo FOCAD 59, y decidir para cada una de
ellas a qué campo MARC debe ir (500, 505, 511)
2. por cada uno de los campos MARC a crear (500, 505, 511), recorrer todas las ocurrencias del
campo FOCAD 59, y para cada una de ellas decidir si debe enviarse a este campo MARC
Acá estamos usando el método 2.
*/
/* ------------------------------------------------
* Campo MARC 500 - Nota general
*
* Campo FOCAD 59 - Notas
* Tomamos las notas que no enviamos a campos más específicos (505, 511).
* ------------------------------------------------
*/
if p(v59) then
(
if s(mpu,v59.7,mpl) <> 'ELENCO:' and s(mpu,v59.12,mpl) <> 'INTERPRETES:' and s(mpu,v59.11,mpl) <> 'CONTENIDO: ' then
'<500>',
'##',
'^a',v59
if right(v59,1) <> '.' then '.', fi, /* puntuación final */
'500>',
fi,
)
fi,
/* ------------------------------------------------
* Campo MARC 504 - Nota de bibliografía
*
* Campo FOCAD 49 - Número de referencias bibliográficas
* Construimos una nota usual ('Incluye referencias bibliográficas.') y le insertamos el número
* almacenado en el campo 49.
* ------------------------------------------------
*/
if val(v49) > 0 then
'<504>',
'##',
'^aIncluye ', f(val(v49),1,0),' referencias bibliogr ficas.', /* ATENCION: codificación del acento */
'504>',
fi,
/* ------------------------------------------------------------------------------
* Campo MARC 505 - Nota de contenido con formato
*
* Campo FOCAD 59 - Notas
* Tomamos las notas que comiencen con 'Contenido: '.
* No todas estas notas tendrán el formato prescripto por AACR2, pero se las podrá
* corregir más tarde.
* ------------------------------------------------------------------------------
* ATENCION: en algunos queda esta puntuación final: '.-.'
*/
if p(v59) then
(
if s(mpu,v59.11,mpl) = 'CONTENIDO: ' then
'<505>',
'##',
'^a',replace(replace(v59*11,'.- ',' -- '),'. -',' -- '), /* usamos el separador estándar ' -- ' */
if right(v59,1) <> '.' then '.', fi, /* puntuación final */
'505>',
fi,
)
fi,
/* ------------------------------------------------------------------------------
* Campo MARC 511 - Nota de elenco
*
* Campo FOCAD 59 - Notas
* Tomamos las notas que comiencen 'Elenco:' o 'Intérpretes:'.
* ------------------------------------------------------------------------------
*/
if p(v59) then
(
if s(mpu,v59.7,mpl) = 'ELENCO:' or s(mpu,v59.12,mpl) = 'INTERPRETES:' then
'<511>',
'0', /* el OPAC no genera etiqueta 'Elenco' */
'#',
'^a',v59
if right(v59,1) <> '.' then '.', fi, /* puntuación final */
'511>',
fi,
)
fi,
/* ------------------------------------------------
* Campo MARC 520 - Nota de resumen
*
* Campo FOCAD 69 - Resumen
* ------------------------------------------------
*/
if p(v69) then
'<520>',
'##',
'^a',v69,
if right(v69,1) <> '.' then '.', fi, /* puntuación final */
'520>',
fi,
/* --------------------------------------------------------------------------
* Campo MARC 100 - Punto de acceso principal--Nombre personal
* Campo MARC 700 - Punto de acceso secundario--Nombre personal
*
* Campo FOCAD 28 - Autor personal (nivel monográfico)
* Campo FOCAD 22 - Autor personal (nivel analítico)
* Campo FOCAD 65 - Descriptores
* Sólo nombres personales que aparezcan en registros de videograbaciones.
* Al usar el criterio de coma-espacio para detectar nombres personales,
* estamos omitiendo nombres como 'Aristóteles', que deben detectarse
* manualmente.
* --------------------------------------------------------------------------
*/
if p(v22) then
(
if not s(mpu,v24[1],mpl) : s(mpu,v22^*,mpl) then
'<700>',
if v22^b <> '' then
'1',
else
'0',
fi,
'#', /* 2do indicador */
'^a',replace(v22,'^b',', '),
if right(v22,1) <> '.' then '.', fi, /* puntuación final */
'700>',
fi,
)
fi,
if v9100 = 'VIDEO' and p(v65) then
(
if v65 : ', ' then /* si encontramos coma-espacio suponemos que es un nombre personal */
'<700>',
'1', /* 1er indicador */
'#', /* 2do indicador */
'^a',v65,
if right(v65,1) <> '.' then '.', fi, /* puntuación final */
'700>',
fi
)
fi,
/* ----------------------------------------------------------------------
* Campo MARC 110 - Punto de acceso principal--Nombre institucional
* Campo MARC 710 - Punto de acceso secundario--Nombre institucional
*
* Campo FOCAD 23 - Autor institucional (nivel analítico)
* Campo FOCAD 29 - Autor institucional (nivel monográfico)
* ----------------------------------------------------------------------
*/
if p(v23) or p(v29) then
/* PENDIENTE */
fi,
/* ------------------------------------------------
* Campo MARC 130 - Título uniforme
* ------------------------------------------------
*/
if p(v27) then
'<130>',
'0#',
'^a',v27,
if right(v27,1) <> '.' then '.', fi, /* puntuación final */
'130>',
fi,
/* ----------------------------------------------------------------------------------
* Campo MARC 600 - Punto de acceso temático--Nombre personal
*
* Campo FOCAD 65 - Descriptores
* Sólo aquellos que contienen una coma seguida de un espacio (excepto en videos).
* Campo FOCAD 22 - Autor personal (nivel analítico)
* Si el título (campo 24) contiene el apellido de esta persona.
* PENDIENTE: revisar indicadores
* ----------------------------------------------------------------------------------
*/
if p(v65) then
(
if v65 : ', ' and not v9100 = 'VIDEO' then
'<600>',
'##',
'^a',v65,
if right(v65,1) <> '.' then '.', fi, /* puntuación final */
'600>',
fi,
),
fi,
if p(v22) then
(
if s(mpu,v24[1],mpl) : s(mpu,v22^*,mpl) then
'<600>',
'14',
'^a',replace(v22,'^b',', '),
if right(v22,1) <> '.' then '.', fi, /* puntuación final */
'600>'
fi,
)
fi,
/* ------------------------------------------------------------------
* Campo MARC 653 - Descriptores (no controlados)
*
* Campo FOCAD 65 - Descriptores
* Campo FOCAD 20 - Título (nivel analítico)
* Esto se debe a una sobreutilización del campo 20 en B.R.
* Consideramos descriptores a aquellos que están en MAYUSCULAS.
* ------------------------------------------------------------------
*/
if p(v65) then
(
if not v65 : ', ' then
'<653>',
'##^a',v65,
if right(v65,1) <> '.' then '.', fi, /* puntuación final */
'653>',
fi,
),
fi,
if p(v20) then
(
if s(mpu,v20,mpl) = v20 and not v20 : '/' then /* excepciones: MS/DOS, CAD/CAM */
'<653>',
'##^a',v20,
if right(v20,1) <> '.' then '.', fi, /* puntuación final */
'653>'
fi,
)
fi,
/* -------------------------------------------------------
* Campo MARC 740 - Títulos relacionados/analíticos (no controlados)
*
* Campo FOCAD 20 - Título (nivel analítico)
* Omitimos aquellos que estén completamente en mayúsculas, pues se trata de descriptores
* y deben enviarse al campo MARC 653.
* -------------------------------------------------------
*/
if p(v20) then
(
if s(mpu,v20,mpl) <> v20 or v20 : '/' then /* omitimos los que estén en MAYUSCULAS */
'<740>',
/* 1er indicador: caracteres a ignorar */
/* ATENCION: comparar con 2do indicador del campo MARC 245 */
if `¬L'¬L´¬` : s('¬',v20.2,'¬') then
'2',
else if '¬La ¬El ¬Le ¬An ¬' : s('¬',v20.3,'¬') then
'3',
else if '¬Las ¬Los ¬The ¬Les ¬... ¬' : s('¬',v20.4,'¬') then
'4',
else if '...' = v20.3 then
'3',
else
'0',
fi,fi,fi,fi,
'2', /* 2do indicador: '2' para título analítico */
'^a',v20,
'740>',
fi,
)
fi,
/* ----------------------------------------------------------------------------
* Campo MARC 859 - Existencias (campo local de Catalis)
*
* Tomamos los datos que fueron almacenados en el campo 200 por el proceso de
* unión de familias de registros.
* ----------------------------------------------------------------------------
*/
/* ----------------------------------------------------------------------------
* Campo MARC 980 - Anotaciones al registro (campo local de Catalis)
*
* Conservamos los MFN de los registros originales.
* ----------------------------------------------------------------------------
*/
'<980>',
'^oMFN base original: ',
'980>',
/* ----------------------------------------------------------------------------
* Campo MARC 991 - Usuario que creó el registro (campo local de Catalis)
*
* Usamos un identificador para el proceso de migración.
* ----------------------------------------------------------------------------
*/
'<991>',
'_MIG_',
'991>',
{{tag>migracion}}