phronCare/docs/sql/55_sales_document_model_with_descriptions.sql

621 lines
30 KiB
MySQL
Raw Normal View History

-- ============================================================
-- Story #55 - Sales Document persistence model
-- ============================================================
-- Objetivo:
-- Crear la base de persistencia para comprobantes de venta:
-- - Facturas internas
-- - Notas de debito / credito
-- - FCE / NDE / NCE futuras
-- - Autorizacion fiscal ARCA futura
--
-- Decisiones:
-- - No se crean nuevos talonarios.
-- - Se reutiliza PhS_FormSeries / PhS_FormSeriesNextNumber.
-- - La numeracion interna queda separada de la numeracion fiscal.
-- - El documento comercial queda separado del documento fiscal ARCA.
-- - El remito NO es obligatorio ni se modela como dependencia directa.
-- - El vinculo principal con origen comercial se mantiene por quote_detail_id.
-- ============================================================
IF OBJECT_ID('dbo.PhS_SalesFiscalDocumentAssociations', 'U') IS NOT NULL
DROP TABLE dbo.PhS_SalesFiscalDocumentAssociations;
IF OBJECT_ID('dbo.PhS_SalesFiscalDocuments', 'U') IS NOT NULL
DROP TABLE dbo.PhS_SalesFiscalDocuments;
IF OBJECT_ID('dbo.PhS_SalesDocumentDetails', 'U') IS NOT NULL
DROP TABLE dbo.PhS_SalesDocumentDetails;
IF OBJECT_ID('dbo.PhS_SalesDocuments', 'U') IS NOT NULL
DROP TABLE dbo.PhS_SalesDocuments;
-- ============================================================
-- Documento comercial interno
-- ============================================================
CREATE TABLE dbo.PhS_SalesDocuments
(
id INT IDENTITY(1,1) NOT NULL,
formseries_id INT NULL,
internal_sequence_number INT NULL,
internal_document_number NVARCHAR(50) NULL,
document_type INT NOT NULL,
fiscal_voucher_type INT NULL,
fiscal_voucher_letter NVARCHAR(5) NULL,
status INT NOT NULL CONSTRAINT DF_PhS_SalesDocuments_status DEFAULT (0),
quote_id INT NULL,
customer_id INT NOT NULL,
bill_to_customer_id INT NOT NULL,
issue_date DATETIME NULL,
currency NVARCHAR(10) NOT NULL CONSTRAINT DF_PhS_SalesDocuments_currency DEFAULT ('ARS'),
exchange_rate DECIMAL(18,6) NOT NULL CONSTRAINT DF_PhS_SalesDocuments_exchange_rate DEFAULT (1),
net_amount DECIMAL(18,2) NOT NULL CONSTRAINT DF_PhS_SalesDocuments_net_amount DEFAULT (0),
tax_amount DECIMAL(18,2) NOT NULL CONSTRAINT DF_PhS_SalesDocuments_tax_amount DEFAULT (0),
total_amount DECIMAL(18,2) NOT NULL CONSTRAINT DF_PhS_SalesDocuments_total_amount DEFAULT (0),
associated_document_type NVARCHAR(50) NULL,
associated_document_number NVARCHAR(50) NULL,
associated_document_date DATETIME NULL,
observations NVARCHAR(MAX) NULL,
extra_info_json NVARCHAR(MAX) NULL,
createdat DATETIME NOT NULL CONSTRAINT DF_PhS_SalesDocuments_createdat DEFAULT (GETDATE()),
modifiedat DATETIME NULL,
CONSTRAINT PK_PhS_SalesDocuments PRIMARY KEY (id),
CONSTRAINT FK_PhS_SalesDocuments_FormSeries
FOREIGN KEY (formseries_id)
REFERENCES dbo.PhS_FormSeries(id),
CONSTRAINT FK_PhS_SalesDocuments_QuoteHeaders
FOREIGN KEY (quote_id)
REFERENCES dbo.PhS_QuoteHeaders(id),
CONSTRAINT FK_PhS_SalesDocuments_Customers
FOREIGN KEY (customer_id)
REFERENCES dbo.PhS_Customers(id),
CONSTRAINT FK_PhS_SalesDocuments_BillToCustomers
FOREIGN KEY (bill_to_customer_id)
REFERENCES dbo.PhS_Customers(id)
);
-- ============================================================
-- Detalle comercial
-- ============================================================
CREATE TABLE dbo.PhS_SalesDocumentDetails
(
id INT IDENTITY(1,1) NOT NULL,
salesdocument_id INT NOT NULL,
line_number INT NOT NULL,
origin_type NVARCHAR(50) NOT NULL,
origin_id INT NULL,
quote_detail_id INT NULL,
product_id INT NULL,
description NVARCHAR(255) NOT NULL,
quantity DECIMAL(18,2) NOT NULL,
authorized_unit_price DECIMAL(18,2) NULL,
authorized_amount DECIMAL(18,2) NULL,
billed_percentage DECIMAL(9,4) NULL,
unit_price DECIMAL(18,2) NOT NULL,
net_amount DECIMAL(18,2) NOT NULL,
tax_amount DECIMAL(18,2) NOT NULL,
total_amount DECIMAL(18,2) NOT NULL,
origin_snapshot_json NVARCHAR(MAX) NULL,
createdat DATETIME NOT NULL CONSTRAINT DF_PhS_SalesDocumentDetails_createdat DEFAULT (GETDATE()),
modifiedat DATETIME NULL,
CONSTRAINT PK_PhS_SalesDocumentDetails PRIMARY KEY (id),
CONSTRAINT FK_PhS_SalesDocumentDetails_SalesDocuments
FOREIGN KEY (salesdocument_id)
REFERENCES dbo.PhS_SalesDocuments(id),
CONSTRAINT FK_PhS_SalesDocumentDetails_QuoteDetails
FOREIGN KEY (quote_detail_id)
REFERENCES dbo.PhS_QuoteDetails(id),
CONSTRAINT FK_PhS_SalesDocumentDetails_Products
FOREIGN KEY (product_id)
REFERENCES dbo.PhS_Products(id)
);
-- ============================================================
-- Documento fiscal ARCA / AFIP
-- ============================================================
CREATE TABLE dbo.PhS_SalesFiscalDocuments
(
id INT IDENTITY(1,1) NOT NULL,
salesdocument_id INT NOT NULL,
fiscal_status INT NOT NULL CONSTRAINT DF_PhS_SalesFiscalDocuments_fiscal_status DEFAULT (0),
environment NVARCHAR(20) NOT NULL,
point_of_sale SMALLINT NULL,
voucher_type INT NULL,
voucher_letter NVARCHAR(5) NULL,
voucher_number INT NULL,
cae NVARCHAR(20) NULL,
cae_expiration_date DATETIME NULL,
request_fingerprint NVARCHAR(255) NULL,
is_final BIT NOT NULL CONSTRAINT DF_PhS_SalesFiscalDocuments_is_final DEFAULT (0),
arca_request_payload_json NVARCHAR(MAX) NULL,
arca_response_payload_json NVARCHAR(MAX) NULL,
errors_json NVARCHAR(MAX) NULL,
events_json NVARCHAR(MAX) NULL,
observations_json NVARCHAR(MAX) NULL,
attempted_at_utc DATETIME NULL,
completed_at_utc DATETIME NULL,
reconciled_after_timeout BIT NOT NULL CONSTRAINT DF_PhS_SalesFiscalDocuments_reconciled DEFAULT (0),
createdat DATETIME NOT NULL CONSTRAINT DF_PhS_SalesFiscalDocuments_createdat DEFAULT (GETDATE()),
modifiedat DATETIME NULL,
CONSTRAINT PK_PhS_SalesFiscalDocuments PRIMARY KEY (id),
CONSTRAINT FK_PhS_SalesFiscalDocuments_SalesDocuments
FOREIGN KEY (salesdocument_id)
REFERENCES dbo.PhS_SalesDocuments(id)
);
-- ============================================================
-- Asociaciones fiscales reales: CbtesAsoc
-- ============================================================
CREATE TABLE dbo.PhS_SalesFiscalDocumentAssociations
(
id INT IDENTITY(1,1) NOT NULL,
salesfiscaldocument_id INT NOT NULL,
associated_salesdocument_id INT NULL,
associated_voucher_type INT NOT NULL,
associated_point_of_sale SMALLINT NOT NULL,
associated_voucher_number INT NOT NULL,
associated_voucher_cuit NVARCHAR(20) NULL,
associated_voucher_date DATETIME NULL,
createdat DATETIME NOT NULL CONSTRAINT DF_PhS_SalesFiscalDocumentAssociations_createdat DEFAULT (GETDATE()),
CONSTRAINT PK_PhS_SalesFiscalDocumentAssociations PRIMARY KEY (id),
CONSTRAINT FK_PhS_SalesFiscalDocumentAssociations_FiscalDocuments
FOREIGN KEY (salesfiscaldocument_id)
REFERENCES dbo.PhS_SalesFiscalDocuments(id),
CONSTRAINT FK_PhS_SalesFiscalDocumentAssociations_SalesDocuments
FOREIGN KEY (associated_salesdocument_id)
REFERENCES dbo.PhS_SalesDocuments(id)
);
-- ============================================================
-- Indices
-- ============================================================
CREATE INDEX IX_PhS_SalesDocuments_FormSeries
ON dbo.PhS_SalesDocuments(formseries_id);
CREATE INDEX IX_PhS_SalesDocuments_Quote
ON dbo.PhS_SalesDocuments(quote_id);
CREATE INDEX IX_PhS_SalesDocuments_Customer
ON dbo.PhS_SalesDocuments(customer_id);
CREATE INDEX IX_PhS_SalesDocuments_BillToCustomer
ON dbo.PhS_SalesDocuments(bill_to_customer_id);
CREATE INDEX IX_PhS_SalesDocuments_Status
ON dbo.PhS_SalesDocuments(status);
CREATE INDEX IX_PhS_SalesDocuments_IssueDate
ON dbo.PhS_SalesDocuments(issue_date);
CREATE UNIQUE INDEX UX_PhS_SalesDocuments_InternalNumber
ON dbo.PhS_SalesDocuments(formseries_id, internal_sequence_number)
WHERE formseries_id IS NOT NULL
AND internal_sequence_number IS NOT NULL;
CREATE UNIQUE INDEX UX_PhS_SalesDocuments_InternalDocumentNumber
ON dbo.PhS_SalesDocuments(formseries_id, internal_document_number)
WHERE formseries_id IS NOT NULL
AND internal_document_number IS NOT NULL;
CREATE INDEX IX_PhS_SalesDocumentDetails_Document
ON dbo.PhS_SalesDocumentDetails(salesdocument_id);
CREATE UNIQUE INDEX UX_PhS_SalesDocumentDetails_Line
ON dbo.PhS_SalesDocumentDetails(salesdocument_id, line_number);
CREATE INDEX IX_PhS_SalesDocumentDetails_QuoteDetail
ON dbo.PhS_SalesDocumentDetails(quote_detail_id);
CREATE INDEX IX_PhS_SalesFiscalDocuments_Document
ON dbo.PhS_SalesFiscalDocuments(salesdocument_id);
CREATE UNIQUE INDEX UX_PhS_SalesFiscalDocuments_Document
ON dbo.PhS_SalesFiscalDocuments(salesdocument_id);
CREATE UNIQUE INDEX UX_PhS_SalesFiscalDocuments_FiscalNumber
ON dbo.PhS_SalesFiscalDocuments(environment, point_of_sale, voucher_type, voucher_number)
WHERE point_of_sale IS NOT NULL
AND voucher_type IS NOT NULL
AND voucher_number IS NOT NULL;
CREATE UNIQUE INDEX UX_PhS_SalesFiscalDocuments_Idempotency
ON dbo.PhS_SalesFiscalDocuments(environment, point_of_sale, voucher_type, request_fingerprint)
WHERE point_of_sale IS NOT NULL
AND voucher_type IS NOT NULL
AND request_fingerprint IS NOT NULL;
CREATE INDEX IX_PhS_SalesFiscalDocumentAssociations_FiscalDocument
ON dbo.PhS_SalesFiscalDocumentAssociations(salesfiscaldocument_id);
CREATE INDEX IX_PhS_SalesFiscalDocumentAssociations_AssociatedDocument
ON dbo.PhS_SalesFiscalDocumentAssociations(associated_salesdocument_id);
-- ============================================================
-- Extended properties / MS_Description
-- ============================================================
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Documentos comerciales internos de venta: facturas, notas de debito, notas de credito, FCE, NDE y NCE. Mantiene la emision interna separada de la autorizacion fiscal ARCA.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Identificador interno del documento comercial.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments',
@level2type=N'COLUMN', @level2name=N'id';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Talonario/serie interna existente en PhronCare. Reutiliza PhS_FormSeries para numeracion interna.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments',
@level2type=N'COLUMN', @level2name=N'formseries_id';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Numero secuencial interno asignado al emitir internamente el documento. No corresponde al numero fiscal ARCA.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments',
@level2type=N'COLUMN', @level2name=N'internal_sequence_number';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Numero visible interno del documento, formado desde la serie/talonario interno. Puede diferir del numero fiscal.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments',
@level2type=N'COLUMN', @level2name=N'internal_document_number';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Tipo comercial interno del documento. Ejemplos: Invoice, DebitNote, CreditNote, CreditInvoice, CreditDebitNote, CreditCreditNote.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments',
@level2type=N'COLUMN', @level2name=N'document_type';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Tipo de comprobante fiscal AFIP/ARCA previsto para autorizacion futura. Ejemplos: 1, 6, 11, 201, 202, 203.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments',
@level2type=N'COLUMN', @level2name=N'fiscal_voucher_type';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Letra fiscal prevista del comprobante: A, B, C u otras segun configuracion fiscal.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments',
@level2type=N'COLUMN', @level2name=N'fiscal_voucher_letter';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Estado comercial interno. Ejemplos: Draft, Validated, Issued, Cancelled. Independiente del estado fiscal.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments',
@level2type=N'COLUMN', @level2name=N'status';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Presupuesto origen opcional. Puede ser NULL para ventas manuales o de escritorio.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments',
@level2type=N'COLUMN', @level2name=N'quote_id';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Cliente origen de la operacion comercial.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments',
@level2type=N'COLUMN', @level2name=N'customer_id';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Cliente al que se factura realmente. Permite escenarios obra social / particular u otros terceros pagadores.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments',
@level2type=N'COLUMN', @level2name=N'bill_to_customer_id';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Fecha de emision interna del documento comercial.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments',
@level2type=N'COLUMN', @level2name=N'issue_date';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Moneda del documento comercial.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments',
@level2type=N'COLUMN', @level2name=N'currency';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Cotizacion utilizada para la moneda del documento.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments',
@level2type=N'COLUMN', @level2name=N'exchange_rate';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Importe neto total del documento.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments',
@level2type=N'COLUMN', @level2name=N'net_amount';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Importe total de impuestos del documento.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments',
@level2type=N'COLUMN', @level2name=N'tax_amount';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Importe total del documento.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments',
@level2type=N'COLUMN', @level2name=N'total_amount';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Tipo de documento interno asociado opcional, por ejemplo remito, orden de compra o autorizacion. No representa CbtesAsoc fiscal.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments',
@level2type=N'COLUMN', @level2name=N'associated_document_type';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Numero del documento interno asociado opcional.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments',
@level2type=N'COLUMN', @level2name=N'associated_document_number';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Fecha del documento interno asociado opcional.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments',
@level2type=N'COLUMN', @level2name=N'associated_document_date';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Observaciones comerciales del documento.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments',
@level2type=N'COLUMN', @level2name=N'observations';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Snapshot JSON con informacion extra contextual del documento.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocuments',
@level2type=N'COLUMN', @level2name=N'extra_info_json';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Detalles valorizados de documentos comerciales de venta.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocumentDetails';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Documento comercial al que pertenece el detalle.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocumentDetails',
@level2type=N'COLUMN', @level2name=N'salesdocument_id';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Numero de linea dentro del documento.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocumentDetails',
@level2type=N'COLUMN', @level2name=N'line_number';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Origen logico del item: Manual, QuoteDetail, Adjustment u otro valor definido por Domain/Core.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocumentDetails',
@level2type=N'COLUMN', @level2name=N'origin_type';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Identificador generico del origen cuando aplique.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocumentDetails',
@level2type=N'COLUMN', @level2name=N'origin_id';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Detalle del presupuesto aprobado que origina la linea, cuando exista. Puede ser NULL en ventas manuales.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocumentDetails',
@level2type=N'COLUMN', @level2name=N'quote_detail_id';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Producto asociado a la linea, si aplica.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocumentDetails',
@level2type=N'COLUMN', @level2name=N'product_id';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Descripcion visible de la linea facturada.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocumentDetails',
@level2type=N'COLUMN', @level2name=N'description';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Cantidad facturada.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocumentDetails',
@level2type=N'COLUMN', @level2name=N'quantity';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Precio unitario autorizado o de referencia proveniente del origen comercial.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocumentDetails',
@level2type=N'COLUMN', @level2name=N'authorized_unit_price';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Importe autorizado o de referencia proveniente del origen comercial.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocumentDetails',
@level2type=N'COLUMN', @level2name=N'authorized_amount';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Porcentaje facturado sobre el origen. Permite facturacion parcial obra social / particular.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocumentDetails',
@level2type=N'COLUMN', @level2name=N'billed_percentage';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Precio unitario efectivo de la linea del documento.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocumentDetails',
@level2type=N'COLUMN', @level2name=N'unit_price';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Importe neto de la linea.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocumentDetails',
@level2type=N'COLUMN', @level2name=N'net_amount';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Importe de impuestos de la linea.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocumentDetails',
@level2type=N'COLUMN', @level2name=N'tax_amount';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Importe total de la linea.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocumentDetails',
@level2type=N'COLUMN', @level2name=N'total_amount';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Snapshot JSON del origen de la linea para trazabilidad historica.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesDocumentDetails',
@level2type=N'COLUMN', @level2name=N'origin_snapshot_json';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Documento fiscal asociado a un documento comercial de venta. Guarda estado, CAE, numeracion fiscal, request/response e idempotencia ARCA.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocuments';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Documento comercial interno vinculado al documento fiscal.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocuments',
@level2type=N'COLUMN', @level2name=N'salesdocument_id';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Estado fiscal independiente del estado comercial. Ejemplos: None, Pending, Authorized, Rejected, Error, PendingReconciliation.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocuments',
@level2type=N'COLUMN', @level2name=N'fiscal_status';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Ambiente fiscal usado para autorizacion: homologacion, produccion u otro valor definido por configuracion.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocuments',
@level2type=N'COLUMN', @level2name=N'environment';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Punto de venta fiscal ARCA/AFIP.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocuments',
@level2type=N'COLUMN', @level2name=N'point_of_sale';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Tipo de comprobante fiscal ARCA/AFIP utilizado en FECAESolicitar.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocuments',
@level2type=N'COLUMN', @level2name=N'voucher_type';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Letra fiscal del comprobante autorizado o a autorizar.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocuments',
@level2type=N'COLUMN', @level2name=N'voucher_letter';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Numero fiscal del comprobante asignado para ARCA. Se mantiene separado del numero interno.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocuments',
@level2type=N'COLUMN', @level2name=N'voucher_number';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Codigo de autorizacion electronico obtenido desde ARCA/AFIP.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocuments',
@level2type=N'COLUMN', @level2name=N'cae';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Fecha de vencimiento del CAE.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocuments',
@level2type=N'COLUMN', @level2name=N'cae_expiration_date';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Huella de idempotencia fiscal para evitar duplicacion de solicitudes ante ARCA.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocuments',
@level2type=N'COLUMN', @level2name=N'request_fingerprint';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Indica si el resultado fiscal es final y no debe volver a mutar salvo procesos controlados de auditoria.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocuments',
@level2type=N'COLUMN', @level2name=N'is_final';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Payload JSON enviado a ARCA/AFIP.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocuments',
@level2type=N'COLUMN', @level2name=N'arca_request_payload_json';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Payload JSON recibido desde ARCA/AFIP.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocuments',
@level2type=N'COLUMN', @level2name=N'arca_response_payload_json';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Errores devueltos por ARCA/AFIP serializados como JSON.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocuments',
@level2type=N'COLUMN', @level2name=N'errors_json';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Eventos devueltos por ARCA/AFIP serializados como JSON.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocuments',
@level2type=N'COLUMN', @level2name=N'events_json';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Observaciones devueltas por ARCA/AFIP serializadas como JSON.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocuments',
@level2type=N'COLUMN', @level2name=N'observations_json';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Fecha/hora UTC del intento de autorizacion fiscal.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocuments',
@level2type=N'COLUMN', @level2name=N'attempted_at_utc';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Fecha/hora UTC de finalizacion del flujo fiscal.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocuments',
@level2type=N'COLUMN', @level2name=N'completed_at_utc';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Indica que el documento fiscal fue resuelto mediante reconciliacion posterior a timeout o resultado ambiguo.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocuments',
@level2type=N'COLUMN', @level2name=N'reconciled_after_timeout';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Comprobantes fiscales asociados enviados como CbtesAsoc. Aplica a notas de credito, notas de debito, NCE/NDE y casos FCE donde corresponda.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocumentAssociations';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Documento fiscal que contiene esta asociacion.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocumentAssociations',
@level2type=N'COLUMN', @level2name=N'salesfiscaldocument_id';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Documento comercial interno asociado, si existe dentro de PhronCare.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocumentAssociations',
@level2type=N'COLUMN', @level2name=N'associated_salesdocument_id';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Tipo fiscal ARCA/AFIP del comprobante asociado.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocumentAssociations',
@level2type=N'COLUMN', @level2name=N'associated_voucher_type';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Punto de venta fiscal del comprobante asociado.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocumentAssociations',
@level2type=N'COLUMN', @level2name=N'associated_point_of_sale';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Numero fiscal del comprobante asociado.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocumentAssociations',
@level2type=N'COLUMN', @level2name=N'associated_voucher_number';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'CUIT emisor del comprobante asociado, cuando sea requerido por ARCA.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocumentAssociations',
@level2type=N'COLUMN', @level2name=N'associated_voucher_cuit';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Fecha del comprobante fiscal asociado.',
@level0type=N'SCHEMA', @level0name=N'dbo',
@level1type=N'TABLE', @level1name=N'PhS_SalesFiscalDocumentAssociations',
@level2type=N'COLUMN', @level2name=N'associated_voucher_date';