Documentos de venda
As rotas aqui descritas permitem gerir todos os processos relativos a documentos de venda: orçamentos, faturas-proforma, guias, faturas e notas.
Criação do documento
Cada documento é constituído por:
Um cabeçalho
Uma ou mais linhas
Após a sua criação, o documento fica no estado "em preparação", podendo, nesse estado, continuar a ser alterado. Para terminar definitivamente as alterações ao documento, assiná-lo e permitir a sua impressão, há depois que:
3. Finalizar o documento
Um documento finalizado já não pode ser alterado nem eliminado, apenas anulado.
1. Criação do cabeçalho
OK
POST /commercial_sales_documents HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 1179
{
"data": {
"type": "commercial_sales_documents",
"attributes": {
"document_type": "FT|FS|FR",
"date": "2023-01-01",
"document_series_prefix": "Prefixo da série",
"customer_tax_registration_number": "999999990",
"customer_business_name": "Nome do cliente",
"customer_address_detail": "Morada do cliente",
"customer_postcode": "0000-000",
"customer_city": "Cidade/Localidade do cliente",
"customer_country": "PT",
"due_date": "2023-01-01",
"settlement_expression": "7.5",
"payment_mechanism": "MO|CH|DC|CC|TR|CO|CS|DE|LC|MB|OU|RT|DDA",
"vat_included_prices": false,
"operation_country": "PT-MA",
"currency_iso_code": "USD",
"currency_conversion_rate": 1.21,
"retention": 7.5,
"retention_type": "IRS|IRC",
"apply_retention_when_paid": true,
"notes": "Notas ao documento",
"external_reference": "Referência do documento externo"
},
"relationships": {
"commercial_document_series": {
"data": {
"type": "commercial_document_series",
"id": "1"
}
},
"customer": {
"data": {
"type": "customers",
"id": "1"
}
},
"bank_accounts": {
"data": {
"type": "bank_accounts",
"id": "1"
}
},
"cash_accounts": {
"data": {
"type": "cash_accounts",
"id": "1"
}
},
"tax_exemption_reasons": {
"data": {
"type": "tax_exemption_reasons",
"id": "1"
}
},
"currency": {
"data": {
"type": "currencies",
"id": "1"
}
}
}
}
}OK
{
"data": {
"type": "commercial_sales_documents",
"id": "1",
"attributes": {
"status": 1,
"document_type": "FT|FS|FR",
"document_no": "FT 2023/1",
"date": "2023-01-01",
"document_series_prefix": "Prefixo da série",
"customer_tax_registration_number": "999999990",
"customer_business_name": "Nome do cliente",
"customer_address_detail": "Morada do cliente",
"customer_postcode": "0000-000",
"customer_city": "Cidade/Localidade do cliente",
"customer_country": "PT",
"due_date": "2023-01-01",
"settlement_expression": "7.5",
"payment_mechanism": "MO|CH|DC|CC|TR|CO|CS|DE|LC|MB|OU|RT|DDA",
"vat_included_prices": false,
"operation_country": "PT-MA",
"currency_iso_code": "USD",
"currency_conversion_rate": 1.21,
"retention": 7.5,
"retention_type": "IRS|IRC",
"apply_retention_when_paid": true,
"notes": "Notas ao documento",
"external_reference": "Referência do documento externo"
},
"relationships": {
"commercial_document_series": {
"data": {
"type": "commercial_document_series",
"id": "1"
}
},
"customer": {
"data": {
"type": "customers",
"id": "1"
}
},
"bank_accounts": {
"data": {
"type": "bank_accounts",
"id": "1"
}
},
"cash_accounts": {
"data": {
"type": "cash_accounts",
"id": "1"
}
},
"tax_exemption_reasons": {
"data": {
"type": "tax_exemption_reasons",
"id": "1"
}
},
"currency": {
"data": {
"type": "currencies",
"id": "1"
}
}
}
}
}No pedido acima, o access_token é o token de acesso válido devolvido pelo serviço de OAuth. O payload JSON a enviar contém a seguinte informação:
NOTA 1: A série associada ao documento tem já que existir, e o seu "id" interno pode ser obtido por um
NOTA 2: Se o cliente for identificado pelo seu "id" interno tem já que existir, e o seu "id" interno pode ser obtido por um
NOTA 3: São também suportados dois "países" adicionais: "PT-AC" (Portugal, Açores) e "PT-MA" (Portugal, Madeira). Os países disponíveis podem ser consultados por um GET /countries, ou um em particular por um
NOTA 4: O "id" interno da conta bancária da empresa deve ser obtido por um
NOTA 5: O "id" interno da conta de caixa da empresa deve ser obtido por um
NOTA 6: O "id" interno do motivo de isenção deve ser obtido por um
NOTA 7: O "id" interno da moeda deve ser obtido por um
2. Criação da(s) linha(s)
As linhas podem referenciar três tipos de itens: produtos, serviços ou descritores (juros, imobilizado, impostos especiais...). Para cada um destes o payload é ligeiramente diferente, e cada um será descrito de seguida. Podem ainda ser criadas linhas apenas de descrição, com ou sem valor associado.
OK
POST /commercial_sales_document_lines HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 722
{
"data": {
"type": "commercial_sales_document_lines",
"attributes": {
"item_type": "Service|Product|TaxDescriptor",
"item_code": "Código do serviço/produto/descritor",
"description": "Descrição da linha",
"unit_of_measure": "Unidade de medida",
"quantity": 1,
"unit_price": 9.99,
"settlement_expression": "3",
"tax_code": "NOR|INT|RED|ISE",
"tax_percentage": 22,
"tax_country_region": "PT-MA"
},
"relationships": {
"document": {
"data": {
"type": "commercial_sales_documents",
"id": "1"
}
},
"product": {
"data": {
"type": "products",
"id": "1"
}
},
"service": {
"data": {
"type": "services",
"id": "1"
}
},
"tax_descriptor": {
"data": {
"type": "tax_descriptors",
"id": "1"
}
},
"unit_of_measure": {
"data": {
"type": "units_of_measure",
"id": "1"
}
},
"tax": {
"data": {
"type": "taxes",
"id": "1"
}
}
}
}
}OK
{
"data": {
"type": "commercial_sales_document_lines",
"id": "1",
"attributes": {
"item_type": "Service|Product|TaxDescriptor",
"item_code": "Código do serviço/produto/descritor",
"description": "Descrição da linha",
"unit_of_measure": "Unidade de medida",
"quantity": 1,
"unit_price": 9.99,
"settlement_expression": "3",
"tax_code": "NOR|INT|RED|ISE",
"tax_percentage": 22,
"tax_country_region": "PT-MA"
},
"relationships": {
"document": {
"data": {
"type": "commercial_sales_documents",
"id": "1"
}
},
"product": {
"data": {
"type": "products",
"id": "1"
}
},
"service": {
"data": {
"type": "services",
"id": "1"
}
},
"tax_descriptor": {
"data": {
"type": "tax_descriptors",
"id": "1"
}
},
"unit_of_measure": {
"data": {
"type": "units_of_measure",
"id": "1"
}
},
"tax": {
"data": {
"type": "taxes",
"id": "1"
}
}
}
}
}No pedido acima, o access_token é o token de acesso válido devolvido pelo serviço de OAuth. O payload JSON genérico a enviar contém a seguinte informação:
NOTA 1: O "id" interno do documento (cabeçalho) a que a linha pertence é o devolvido no campo "id" da resposta ao pedido de criação do cabeçalho (ver ponto 1. Criação do cabeçalho).
NOTA 2: O item (serviço, produto ou descritor) tem já que existir, e o seu "id" interno pode ser obtido por um
NOTA 3: Além de "PT" (Portugal, Continente) são também suportadas as duas regiões de IVA "PT-AC" (Portugal, Açores) e "PT-MA" (Portugal, Madeira).
Para os regimes de IVA no âmbito do OSS, os códigos de região são os mesmos que os códigos do país, podendo ser consultadas por um
NOTA 4: A unidade de medida tem já que existir, e o seu "id" interno pode ser obtido por um
NOTA 5: O "id" interno da taxa de IVA deve ser obtido por um
2.1. Criação de uma linha de produto
Para o caso particular de uma linha de produto, o payload contém a seguinte informação:
2.2. Criação de uma linha de serviço
Para o caso particular de uma linha de serviço, este payload contém a seguinte informação:
2.3. Criação de uma linha de descritor
Para o caso particular de uma linha de descritor, este payload contém a seguinte informação:
2.4. Criação de uma linha de descrição com valor
Para o caso particular de uma linha de descrição com valor, este payload contém a seguinte informação:
2.5. Criação de uma linha de descrição sem valor
Para o caso particular de uma linha de descrição sem valor, este payload contém a seguinte informação:
3. Finalização do documento
Após todas as linhas criadas, e se não houver mais nenhuma alteração ao documento, este pode ser finalizado.
Após a finalização, a alteração ou eliminação do cabeçalho e das linhas deixa de ser possível, assim como a criação de linhas adicionais.
id of the document to update or finalize
OK
PATCH /commercial_sales_documents/{id} HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 1199
{
"data": {
"type": "commercial_sales_documents",
"id": "1",
"attributes": {
"status": 1,
"document_type": "FT|FS|FR",
"date": "2023-01-01",
"document_series_prefix": "Prefixo da série",
"customer_tax_registration_number": "999999990",
"customer_business_name": "Nome do cliente",
"customer_address_detail": "Morada do cliente",
"customer_postcode": "0000-000",
"customer_city": "Cidade/Localidade do cliente",
"customer_country": "PT",
"due_date": "2023-01-01",
"settlement_expression": "7.5",
"payment_mechanism": "MO|CH|DC|CC|TR|CO|CS|DE|LC|MB|OU|RT|DDA",
"vat_included_prices": false,
"operation_country": "PT-MA",
"currency_iso_code": "USD",
"currency_conversion_rate": 1.21,
"retention": 7.5,
"retention_type": "IRS|IRC",
"apply_retention_when_paid": true,
"notes": "Notas ao documento",
"external_reference": "Referência do documento externo"
},
"relationships": {
"commercial_document_series": {
"data": {
"type": "commercial_document_series",
"id": "1"
}
},
"customer": {
"data": {
"type": "customers",
"id": "1"
}
},
"bank_accounts": {
"data": {
"type": "bank_accounts",
"id": "1"
}
},
"cash_accounts": {
"data": {
"type": "cash_accounts",
"id": "1"
}
},
"tax_exemption_reasons": {
"data": {
"type": "tax_exemption_reasons",
"id": "1"
}
},
"currency": {
"data": {
"type": "currencies",
"id": "1"
}
}
}
}
}OK
{
"data": {
"type": "commercial_sales_documents",
"id": "1",
"attributes": {
"status": 1,
"document_type": "FT|FS|FR",
"document_no": "FT 2023/1",
"date": "2023-01-01",
"document_series_prefix": "Prefixo da série",
"customer_tax_registration_number": "999999990",
"customer_business_name": "Nome do cliente",
"customer_address_detail": "Morada do cliente",
"customer_postcode": "0000-000",
"customer_city": "Cidade/Localidade do cliente",
"customer_country": "PT",
"due_date": "2023-01-01",
"settlement_expression": "7.5",
"payment_mechanism": "MO|CH|DC|CC|TR|CO|CS|DE|LC|MB|OU|RT|DDA",
"vat_included_prices": false,
"operation_country": "PT-MA",
"currency_iso_code": "USD",
"currency_conversion_rate": 1.21,
"retention": 7.5,
"retention_type": "IRS|IRC",
"apply_retention_when_paid": true,
"notes": "Notas ao documento",
"external_reference": "Referência do documento externo"
},
"relationships": {
"commercial_document_series": {
"data": {
"type": "commercial_document_series",
"id": "1"
}
},
"customer": {
"data": {
"type": "customers",
"id": "1"
}
},
"bank_accounts": {
"data": {
"type": "bank_accounts",
"id": "1"
}
},
"cash_accounts": {
"data": {
"type": "cash_accounts",
"id": "1"
}
},
"tax_exemption_reasons": {
"data": {
"type": "tax_exemption_reasons",
"id": "1"
}
},
"currency": {
"data": {
"type": "currencies",
"id": "1"
}
}
}
}
}No pedido acima, o access_token é o token de acesso válido devolvido pelo serviço de OAuth e o id do documento é o "id" interno do documento (cabeçalho) é o devolvido no campo "id" da resposta ao seu pedido de criação (ver ponto 1. Criação do cabeçalho). O payload JSON a enviar contém a seguinte informação:
Alteração do documento
Enquanto o documento não for finalizado, tanto o seu cabeçalho como qualquer uma das suas linhas podem ser alteradas a qualquer momento. Além disso, qualquer uma das linhas pode ser eliminada (ver Eliminação de uma linha), e novas linhas criadas e adicionadas (ver 2. Criação da(s) linha(s)).
Alteração do cabeçalho
id of the document to update or finalize
OK
PATCH /commercial_sales_documents/{id} HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 1199
{
"data": {
"type": "commercial_sales_documents",
"id": "1",
"attributes": {
"status": 1,
"document_type": "FT|FS|FR",
"date": "2023-01-01",
"document_series_prefix": "Prefixo da série",
"customer_tax_registration_number": "999999990",
"customer_business_name": "Nome do cliente",
"customer_address_detail": "Morada do cliente",
"customer_postcode": "0000-000",
"customer_city": "Cidade/Localidade do cliente",
"customer_country": "PT",
"due_date": "2023-01-01",
"settlement_expression": "7.5",
"payment_mechanism": "MO|CH|DC|CC|TR|CO|CS|DE|LC|MB|OU|RT|DDA",
"vat_included_prices": false,
"operation_country": "PT-MA",
"currency_iso_code": "USD",
"currency_conversion_rate": 1.21,
"retention": 7.5,
"retention_type": "IRS|IRC",
"apply_retention_when_paid": true,
"notes": "Notas ao documento",
"external_reference": "Referência do documento externo"
},
"relationships": {
"commercial_document_series": {
"data": {
"type": "commercial_document_series",
"id": "1"
}
},
"customer": {
"data": {
"type": "customers",
"id": "1"
}
},
"bank_accounts": {
"data": {
"type": "bank_accounts",
"id": "1"
}
},
"cash_accounts": {
"data": {
"type": "cash_accounts",
"id": "1"
}
},
"tax_exemption_reasons": {
"data": {
"type": "tax_exemption_reasons",
"id": "1"
}
},
"currency": {
"data": {
"type": "currencies",
"id": "1"
}
}
}
}
}OK
{
"data": {
"type": "commercial_sales_documents",
"id": "1",
"attributes": {
"status": 1,
"document_type": "FT|FS|FR",
"document_no": "FT 2023/1",
"date": "2023-01-01",
"document_series_prefix": "Prefixo da série",
"customer_tax_registration_number": "999999990",
"customer_business_name": "Nome do cliente",
"customer_address_detail": "Morada do cliente",
"customer_postcode": "0000-000",
"customer_city": "Cidade/Localidade do cliente",
"customer_country": "PT",
"due_date": "2023-01-01",
"settlement_expression": "7.5",
"payment_mechanism": "MO|CH|DC|CC|TR|CO|CS|DE|LC|MB|OU|RT|DDA",
"vat_included_prices": false,
"operation_country": "PT-MA",
"currency_iso_code": "USD",
"currency_conversion_rate": 1.21,
"retention": 7.5,
"retention_type": "IRS|IRC",
"apply_retention_when_paid": true,
"notes": "Notas ao documento",
"external_reference": "Referência do documento externo"
},
"relationships": {
"commercial_document_series": {
"data": {
"type": "commercial_document_series",
"id": "1"
}
},
"customer": {
"data": {
"type": "customers",
"id": "1"
}
},
"bank_accounts": {
"data": {
"type": "bank_accounts",
"id": "1"
}
},
"cash_accounts": {
"data": {
"type": "cash_accounts",
"id": "1"
}
},
"tax_exemption_reasons": {
"data": {
"type": "tax_exemption_reasons",
"id": "1"
}
},
"currency": {
"data": {
"type": "currencies",
"id": "1"
}
}
}
}
}No pedido acima, o access_token é o token de acesso válido devolvido pelo serviço de OAuth e o id do documento é o "id" interno do documento (cabeçalho), devolvido no campo "id" da resposta ao seu pedido de criação (ver ponto 1. Criação do cabeçalho). O payload JSON a enviar contém a seguinte informação:
Alteração de uma linha
id of the document line to update
OK
PATCH /commercial_sales_document_lines/{id} HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 664
{
"data": {
"type": "commercial_sales_document_lines",
"id": "1",
"attributes": {
"item_type": "Service|Product|TaxDescriptor",
"item_code": "Código do serviço/produto/descritor",
"description": "Descrição da linha",
"unit_of_measure": "Unidade de medida",
"quantity": 1,
"unit_price": 9.99,
"settlement_expression": "3",
"tax_code": "NOR|INT|RED|ISE",
"tax_percentage": 22,
"tax_country_region": "PT-MA"
},
"relationships": {
"product": {
"data": {
"type": "products",
"id": "1"
}
},
"service": {
"data": {
"type": "services",
"id": "1"
}
},
"tax_descriptor": {
"data": {
"type": "tax_descriptors",
"id": "1"
}
},
"unit_of_measure": {
"data": {
"type": "units_of_measure",
"id": "1"
}
},
"tax": {
"data": {
"type": "taxes",
"id": "1"
}
}
}
}
}OK
{
"data": {
"type": "commercial_sales_document_lines",
"id": "1",
"attributes": {
"item_type": "Service|Product|TaxDescriptor",
"item_code": "Código do serviço/produto/descritor",
"description": "Descrição da linha",
"unit_of_measure": "Unidade de medida",
"quantity": 1,
"unit_price": 9.99,
"settlement_expression": "3",
"tax_code": "NOR|INT|RED|ISE",
"tax_percentage": 22,
"tax_country_region": "PT-MA"
},
"relationships": {
"document": {
"data": {
"type": "commercial_sales_documents",
"id": "1"
}
},
"product": {
"data": {
"type": "products",
"id": "1"
}
},
"service": {
"data": {
"type": "services",
"id": "1"
}
},
"tax_descriptor": {
"data": {
"type": "tax_descriptors",
"id": "1"
}
},
"unit_of_measure": {
"data": {
"type": "units_of_measure",
"id": "1"
}
},
"tax": {
"data": {
"type": "taxes",
"id": "1"
}
}
}
}
}No pedido acima, o access_token é o token de acesso válido devolvido pelo serviço de OAuth e o id da linha é o "id" interno da linha do documento, devolvido no campo "id" da resposta ao seu pedido de criação (ver ponto 2. Criação da(s) linha(s)). O payload JSON a enviar contém a seguinte informação:
Eliminação de uma linha
id of the document line to delete
OK
No content
DELETE /commercial_sales_document_lines/{id} HTTP/1.1
Accept: */*
OK
No content
No pedido acima, o access_token é o token de acesso válido devolvido pelo serviço de OAuth e o id da linha é o "id" interno da linha do documento, devolvido no campo "id" da resposta ao seu pedido de criação (ver ponto 2. Criação da(s) linha(s)).
Eliminação do documento
Enquanto estiver em preparação, o documento pode ser eliminado.
Após a finalização, no entanto, a sua eliminação — assim como a sua alteração — deixa de ser possível.
id of the document to delete
OK
No content
DELETE /commercial_sales_documents/{id} HTTP/1.1
Accept: */*
OK
No content
No pedido acima, o access_token é o token de acesso válido devolvido pelo serviço de OAuth e o id do documento é o "id" interno do documento (cabeçalho) é o devolvido no campo "id" da resposta ao seu pedido de criação (ver ponto 1. Criação do cabeçalho).
Esta operação é irreversível.
Anulação do documento
Após a sua finalização, o documento deixa de poder ser eliminado, podendo apenas ser anulado.
id of the document to update or finalize
OK
PATCH /commercial_sales_documents/{id} HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 1199
{
"data": {
"type": "commercial_sales_documents",
"id": "1",
"attributes": {
"status": 1,
"document_type": "FT|FS|FR",
"date": "2023-01-01",
"document_series_prefix": "Prefixo da série",
"customer_tax_registration_number": "999999990",
"customer_business_name": "Nome do cliente",
"customer_address_detail": "Morada do cliente",
"customer_postcode": "0000-000",
"customer_city": "Cidade/Localidade do cliente",
"customer_country": "PT",
"due_date": "2023-01-01",
"settlement_expression": "7.5",
"payment_mechanism": "MO|CH|DC|CC|TR|CO|CS|DE|LC|MB|OU|RT|DDA",
"vat_included_prices": false,
"operation_country": "PT-MA",
"currency_iso_code": "USD",
"currency_conversion_rate": 1.21,
"retention": 7.5,
"retention_type": "IRS|IRC",
"apply_retention_when_paid": true,
"notes": "Notas ao documento",
"external_reference": "Referência do documento externo"
},
"relationships": {
"commercial_document_series": {
"data": {
"type": "commercial_document_series",
"id": "1"
}
},
"customer": {
"data": {
"type": "customers",
"id": "1"
}
},
"bank_accounts": {
"data": {
"type": "bank_accounts",
"id": "1"
}
},
"cash_accounts": {
"data": {
"type": "cash_accounts",
"id": "1"
}
},
"tax_exemption_reasons": {
"data": {
"type": "tax_exemption_reasons",
"id": "1"
}
},
"currency": {
"data": {
"type": "currencies",
"id": "1"
}
}
}
}
}OK
{
"data": {
"type": "commercial_sales_documents",
"id": "1",
"attributes": {
"status": 1,
"document_type": "FT|FS|FR",
"document_no": "FT 2023/1",
"date": "2023-01-01",
"document_series_prefix": "Prefixo da série",
"customer_tax_registration_number": "999999990",
"customer_business_name": "Nome do cliente",
"customer_address_detail": "Morada do cliente",
"customer_postcode": "0000-000",
"customer_city": "Cidade/Localidade do cliente",
"customer_country": "PT",
"due_date": "2023-01-01",
"settlement_expression": "7.5",
"payment_mechanism": "MO|CH|DC|CC|TR|CO|CS|DE|LC|MB|OU|RT|DDA",
"vat_included_prices": false,
"operation_country": "PT-MA",
"currency_iso_code": "USD",
"currency_conversion_rate": 1.21,
"retention": 7.5,
"retention_type": "IRS|IRC",
"apply_retention_when_paid": true,
"notes": "Notas ao documento",
"external_reference": "Referência do documento externo"
},
"relationships": {
"commercial_document_series": {
"data": {
"type": "commercial_document_series",
"id": "1"
}
},
"customer": {
"data": {
"type": "customers",
"id": "1"
}
},
"bank_accounts": {
"data": {
"type": "bank_accounts",
"id": "1"
}
},
"cash_accounts": {
"data": {
"type": "cash_accounts",
"id": "1"
}
},
"tax_exemption_reasons": {
"data": {
"type": "tax_exemption_reasons",
"id": "1"
}
},
"currency": {
"data": {
"type": "currencies",
"id": "1"
}
}
}
}
}No pedido acima, o access_token é o token de acesso válido devolvido pelo serviço de OAuth e o id do documento é o "id" interno do documento (cabeçalho) é o devolvido no campo "id" da resposta ao seu pedido de criação (ver ponto 1. Criação do cabeçalho). O payload JSON a enviar contém a seguinte informação:
Após a sua anulação, o documento deixa de poder ser alterado. Esta operação é irreversível.
Last updated