Convenciones¶
Las convenciones de nomenclatura, llaves y nulabilidad son las del template y de los proyectos que lo usan. Esta página fija lo que es propio del dominio: los tipos de los datos de radar, los regímenes de escritura y la codificación de las series.
Tipos de dato canónicos¶
| Concepto | Tipo | Regla |
|---|---|---|
| Llave primaria | uuid |
uuidv7(), heredada de ApiModel |
| Instante | timestamptz |
Siempre UTC |
| Fecha de calendario | date |
En la zona horaria de la región, por RN-18 |
| Coordenada lon/lat | float8 |
WGS84, CHECK de rango |
| Coordenada proyectada | float8 |
Metros en el EPSG de la región |
| Código EPSG | integer |
CHECK de zona UTM (32601-32660, 32701-32760) |
| Decibeles en una serie | smallint[] |
dB × 100; -32768 = sin dato, por D-04 |
| Decibeles escalares | real |
Desfases, deltas y umbrales |
| Fracción | real |
CHECK entre 0 y 1 |
| Altura de marea | real |
Metros respecto al nivel medio; NULL = sin estimación |
| Clase por fecha | smallint[] |
Códigos de la tabla de clases, alineados con la serie |
| Track, frame, ciclo | smallint |
Tal como los numera NISAR |
| CRID | varchar(6) |
Patrón ^P[0-9]{5}$ |
| Identificador de celda | varchar(24) |
c_<E>_<N>, por RN-04 |
| Identificador de fecha | varchar(20) |
AAAA-MM-DD_TTT_orbita, en fecha UTC |
| Versión de datos | varchar(20) |
Semver, patrón ^\d+\.\d+\.\d+$ |
| Suma de archivo | char(64) |
SHA-256 en hexadecimal |
| Ruta de archivo local | varchar(255) |
Relativa a MANGROOVE_DATOS, por D-09 |
| Código estable de catálogo | varchar(50) |
Patrón ^[a-z][a-z0-9_]*$ |
| Lista cerrada | varchar(n) |
CHECK contra un TextChoices |
| País | varchar(2) |
ISO 3166-1 alfa-2; '' = sin asignar o región completa |
| Geometría | jsonb |
GeoJSON en lon/lat, por D-08 |
Códigos de clase¶
| Código | Clase | Significado |
|---|---|---|
0 |
NI |
No inundado |
1 |
IV |
Vegetación inundada |
2 |
OW |
Agua abierta |
3 |
NC |
No clasificado |
4 |
ND |
Sin dato en esa fecha, por RN-07 |
La API traduce los códigos a las letras del contrato. En la base son números
porque un arreglo de smallint ocupa dos bytes por fecha y se compara sin
cotejamiento.
¿Por qué decibeles enteros?¶
Dos bytes por valor alcanzan: 0,01 dB de precisión frente a un speckle de
0,9 dB. Un real
duplicaría el tamaño de cada fila de resultados sin cambiar ninguna clase.
Regímenes de escritura¶
Cada tabla hereda de una de las clases base del template, y esa elección decide qué escrituras admite la base. La ficha de cada tabla declara su régimen.
| Régimen | Clase base | Admite | Uso en el dominio |
|---|---|---|---|
| Mutable rastreada | ApiProtectedModel con track_table() |
Inserción y edición auditada; nunca borrado | Entidades con estado: Recorte, Adquisicion, Corrida |
| Borrado lógico | ApiSoftDeleteModel con track_table() |
DELETE se reescribe como is_active = false |
Region |
| Solo inserción | ApiAppendOnlyModel |
Inserción; la base rechaza el resto | Hechos y versiones: Producto, Insumo, PerfilUmbrales |
| Resultado de corrida | ApiAppendOnlyModel con excepción |
Inserción; borrado solo por la purga de una corrida retirada | CorridaFecha, ResultadoCelda, resúmenes, artefactos |
¿Por qué un régimen propio para los resultados?¶
Los resultados son tan inmutables como un hecho, pero una corrida retirada no
puede ocupar 230 000 filas para siempre. El régimen reemplaza el
trg_append_only heredado por trg_resultado_solo_insercion: rechaza toda
actualización y solo admite el borrado cuando la corrida de la fila está
retirada y su purgar_despues_de ya pasó. Es la misma garantía, con una única
puerta de salida que no depende de quién escriba.
Nomenclatura y nulabilidad¶
Se aplican sin cambios las del template:
- Restricciones con nombre explícito:
unq_,chk_,excl_,idx_,trg_, seguidos del nombre de la clase en minúsculas (%(class)s). - Booleanos nunca nulos. Un tercer estado es una lista cerrada.
- Texto y colecciones nunca nulos. La ausencia es
''o'{}'. NULLes la ausencia en números, fechas y llaves. Cada ficha dice si el nulo significa todavía no o no aplica.
En este dominio, el nulo numérico tiene un significado científico preciso:
if_alta nulo no es cero, es no hay fechas suficientes para saberlo. Por eso
los CHECK de RN-10 a RN-13 atan cada nulo a su motivo.