Saltearse al contenido

Base de datos

Schemas

OpenFactu usa multi-schema en PostgreSQL:

  • public — Tablas globales (usuarios, tenants, plugins, geodatos)
  • tenant_* — Un schema por empresa con todas las tablas de negocio

Tablas del schema publico

Tenant (Empresas)

CampoTipoDescripcion
idPKUUID
nameUNIQUENombre de la empresa
schemaNameUNIQUENombre del schema PostgreSQL
configTEXTJSON con configuracion
createdAtTIMESTAMP
updatedAtTIMESTAMP

GlobalUser (Usuarios)

CampoTipoDescripcion
idPKUUID
emailUNIQUE
usernameUNIQUE
passwordTEXTHash bcrypt
roleTEXTUSER / ADMIN / SUPERUSER
tenantIdFK TenantLegacy, usar membresías
permissionsTEXTJSON de permisos granulares
createdAtTIMESTAMP
updatedAtTIMESTAMP

UserTenantMembership (Membresías)

CampoTipoDescripcion
idPK
userIdFK GlobalUser
tenantIdFK Tenant
roleTEXTUSER / ADMIN
permissionsTEXTJSON
createdAtTIMESTAMP
updatedAtTIMESTAMP
UNIQUE(userId, tenantId)

PluginField (Campos de plugins)

CampoTipoDescripcion
idPK
pluginIdTEXTID del plugin
tableNameTEXTTabla destino
fieldNameTEXTNombre (prefijo p_)
fieldTypeTEXTTEXT / INTEGER / DECIMAL / BOOLEAN / JSONB
labelTEXTEtiqueta UI
isManagedBOOLEAN
createdAtTIMESTAMP

PluginTable (Tablas de plugins)

CampoTipoDescripcion
idPK
pluginIdTEXT
tableNameTEXTNombre (prefijo pt_)
definitionTEXTJSON con columnas
createdAtTIMESTAMP

TenantPlugin (Activacion de plugins)

CampoTipoDescripcion
idPK
tenantIdFK Tenant
pluginIdTEXT
isActiveBOOLEAN
configTEXTJSON config del plugin
activatedAtTIMESTAMP
deactivatedAtTIMESTAMP
UNIQUE(tenantId, pluginId)

AuditLog (Auditoria)

CampoTipoDescripcion
idPK
tenantIdFK Tenant
entityTypeTEXTItem, SalesInvoice, etc.
entityIdTEXT
actionTEXTCREATE / UPDATE / DELETE
userIdFK GlobalUser
oldValueJSONBEstado anterior
newValueJSONBEstado nuevo
createdAtTIMESTAMP

Country (Paises)

CampoTipoDescripcion
codePKISO 3166-1 alpha-2
nameTEXTNombre local
nameEnTEXTNombre en ingles
phonePrefixTEXT+34
currencyTEXTEUR
taxIdRegexTEXTValidacion NIF
taxIdLabelTEXTEtiqueta (NIF/CIF)
postalCodeRegexTEXT
regionLabelTEXTComunidad Autonoma
subRegionLabelTEXTProvincia
localityLabelTEXTMunicipio

Region, SubRegion, Locality

Jerarquia geografica: Pais → Region → Provincia → Municipio. Cada nivel tiene id, code, name y FK al nivel superior.


Tablas del schema de tenant

SystemConfig

CampoTipoDescripcion
idPK
keyUNIQUEEj: company_name, branding_color_primary
valueTEXT
descriptionTEXT
updatedAtTIMESTAMP

BusinessPartner (Socios)

CampoTipoDescripcion
idPK
codeUNIQUEAuto-generado (prefijo del grupo)
nameTEXTNombre/razon social
nifUNIQUENIF/CIF
foreignNameTEXT
phoneTEXT
emailTEXT
websiteTEXT
groupIdFK PartnerGroup
priceListIdFK PriceList
countryCodeTEXT

PartnerGroup

CampoTipoDescripcion
idPK
codeUNIQUECLI, PRV, MAY
nameTEXT
codePrefixTEXTPrefijo auto-numeracion
isCustomerBOOLEAN
isVendorBOOLEAN

PartnerAddress (Direcciones)

CampoTipoDescripcion
idPK
partnerIdFK BusinessPartner
nameTEXT
streetTEXT
cityTEXT
stateTEXT
zipCodeTEXT
countryCodeTEXT
typeTEXTB (facturacion) / S (envio)
isDefaultBOOLEAN

Item (Articulos)

CampoTipoDescripcion
idPK
codeUNIQUE
nameTEXT
descriptionTEXT
uomIdFK UnitsOfMeasure
categoryIdFK Category
taxGroupIdFK TaxGroup
manageByTEXTN / B (lotes) / S (series)
basePriceDECIMAL(12,4)
stockDOUBLE
minStockDOUBLE
createdAtTIMESTAMP
updatedAtTIMESTAMP

ItemBatch (Lotes)

CampoTipoDescripcion
idPK
batchNumTEXTNumero de lote
itemIdFK Item
quantityDOUBLE
expiryDateDATE

ItemSerial (Series)

CampoTipoDescripcion
idPK
serialNumUNIQUE
itemIdFK Item
statusTEXTA (activo) / I (inactivo)

Category (Categorias)

CampoTipoDescripcion
idPK
nameTEXT
codePrefixTEXT
parentIdFK CategoryPara jerarquia

UnitsOfMeasure

CampoTipoDescripcion
idPK
codeUNIQUEUD, KG, L, M, CJ, BL, H
nameTEXT
baseValueDECIMAL(12,4)Factor base (default 1)
baseUomIdFK UOMPara conversiones

ItemAlternativeUom

CampoTipoDescripcion
idPK
itemIdFK Item
uomIdFK UOM
factorDECIMAL(12,4)Ej: 12 (1 caja = 12 uds)

Warehouse (Almacenes)

CampoTipoDescripcion
idPK
nameTEXT
locationTEXT
isDefaultBOOLEAN

WarehouseZone (Zonas)

CampoTipoDescripcion
idPK
nameTEXT
descriptionTEXT
warehouseIdFK Warehouse

ItemWarehouseStock

CampoTipoDescripcion
itemIdFK Item
warehouseIdFK Warehouse
stockDOUBLE
UNIQUE(itemId, warehouseId)

ItemZoneStock

CampoTipoDescripcion
itemIdFK Item
warehouseIdFK Warehouse
zoneIdFK Zone
stockDOUBLE
UNIQUE(itemId, warehouseId, zoneId)

TaxGroup (Impuestos)

CampoTipoDescripcion
idPK
codeUNIQUEIVA0, IVA4, IVA10, IVA21
rateDECIMAL(5,2)Porcentaje

PriceList / ItemPrice

Lista de precios con precio por articulo. Cada socio puede tener una lista asignada.

AccountingPeriod (Periodos)

CampoTipoDescripcion
idPK
codeUNIQUE
nameTEXT
startDateDATE
endDateDATE
statusTEXTO (abierto) / C (cerrado)

DocumentSeries (Series)

CampoTipoDescripcion
idPK
nameUNIQUE
docTypeTEXTSINV, PINV, SDN, PDN, SO, PO
prefixTEXTFA, FC, AL, AC
suffixTEXT
firstNumberINT
nextNumberINT
periodIdFK Period
isDefaultBOOLEAN

DocumentTemplate (Plantillas PDF)

CampoTipoDescripcion
idPK
docTypeTEXT
nameTEXT
htmlTEXTHTML con Handlebars
isDefaultBOOLEAN

Documentos de venta

SalesOrder (Pedido de venta)

CampoTipoDescripcion
idPK
seriesIdFK Series
docNumINTNumero de documento
periodIdFK Period
partnerIdFK Partner
dateDATE
statusTEXTO / P / C / X
warehouseIdFK Warehouse
subtotalDECIMAL(15,4)
taxTotalDECIMAL(15,4)
totalDECIMAL(15,4)
taxBreakdownJSONDesglose IVA

SalesDeliveryNote (Albaran de venta)

Mismos campos que SalesOrder mas orderId (FK al pedido base). Al crear, descuenta stock.

SalesInvoice (Factura de venta)

Mismos campos. Estados: D (borrador) → O (asentada) / X (cancelada).

Lineas de documento

Todas las lineas de documento (SalesOrderLine, SalesDeliveryNoteLine, SalesInvoiceLine) comparten:

CampoTipoDescripcion
idPK
lineNumINT
itemIdFK Item
quantityDECIMAL(12,4)
priceDECIMAL(15,4)
taxGroupIdFK TaxGroup
lineTotalDECIMAL(15,4)
warehouseIdFK Warehouse
zoneIdFK Zone
uomIdFK UOM
uomFactorDECIMAL(12,4)
baseTypeTEXTSO, SDN, etc.
baseIdTEXTID del doc base
pluginDataJSONB

Lotes de linea (LineBatches)

CampoTipo
idPK
lineIdFK
batchNumTEXT
quantityDOUBLE
expiryDateDATE

Documentos de compra

PurchaseOrder, PurchaseDeliveryNote, PurchaseInvoice

Estructura identica a los documentos de venta. Los albaranes de compra suman stock. Las facturas de compra cierran albaranes.

Tipos de referencia: PO (pedido) → PDN (albaran) → PINV (factura).