Skip to content

Faturas de fornecedor ​

Consultar e registar faturas de fornecedores de um condomínio.

Listar as faturas de um condomínio ​

GET /buildings/{idBuilding}/supplier-invoices

Permissão · finance:read

Parâmetros ​

ParâmetroTipoPor omissãoDescrição
idBuildinginteiro—No caminho. O condomínio
idSupplierinteirotodosSó as faturas deste fornecedor
fromDatedata—Documentos a partir desta data
toDatedata—Documentos até esta data, inclusive
includetexto—lines para trazer as linhas de cada fatura
limitinteiro100Registos por página, no máximo 500
cursortexto—Cursor da página seguinte

Pedido ​

bash
curl "https://servidor.exemplo/api/integrations/v1/acme/buildings/12/supplier-invoices?include=lines&fromDate=2026-01-01" \
  -H "ApiKey: $GC_API_KEY"

Resposta · 200 ​

json
{
  "Items": [
    {
      "Id": 4412,
      "IdBuilding": 12,
      "BuildingCode": "0012",
      "DocumentId": "FT 2026/1180",
      "DocumentDate": "2026-09-10T00:00:00",
      "DueDate": "2026-10-10T00:00:00",
      "PeriodFrom": null,
      "PeriodTo": null,
      "DocumentType": { "Id": 1, "Description": "Fatura" },
      "TaxIncluded": true,
      "Supplier": { "Id": 88, "Description": "Elevadores Norte, Lda." },
      "SupplierTaxId": "501234567",
      "Amount": 246.0,
      "ExpenseAmount": 200.0,
      "OutstandingAmount": 246.0,
      "Settled": false,
      "AccountingReference": "2026/A/442",
      "HasFile": true,
      "Lines": [
        {
          "Id": 9901,
          "Description": "Manutenção mensal de elevadores - Setembro",
          "Amount": 246.0,
          "TaxPercentage": 23.0,
          "Account": "6226",
          "AccountDescription": "Conservação e reparação",
          "Category": { "Id": 5, "Description": "Elevadores" }
        }
      ]
    }
  ],
  "Paging": { "Limit": 100, "NextCursor": null, "HasMore": false }
}
CampoTipoDescrição
IdinteiroIdentificador da fatura no GC
IdBuilding · BuildingCodeinteiro · textoO condomínio
DocumentIdtextoNúmero do documento do fornecedor
DocumentDatedataData do documento
DueDatedataVencimento
PeriodFrom · PeriodTodataPeríodo a que respeita, nas faturas de consumo
DocumentTypeobjetoTipo de documento — fatura, nota de crédito, consumo
TaxIncludedbooleanoO tipo de documento inclui IVA
SupplierobjetoO fornecedor
SupplierTaxIdtextoContribuinte do fornecedor
AmountdecimalTotal do documento, com IVA
ExpenseAmountdecimalValor lançado em contas de gasto — o custo que o condomínio suporta
OutstandingAmountdecimalPor liquidar
SettledbooleanoSe está totalmente liquidada
AccountingReferencetextoReferência do lançamento contabilístico
HasFilebooleanoO documento do fornecedor está arquivado
LineslistaAs linhas, quando pedidas com include=lines. null caso contrário

A ordem é da mais recente para a mais antiga.

O valor sem IVA ​

A API devolve o total com IVA em Amount. O valor líquido deriva-se das linhas, cada uma com a sua taxa:

js
const net = invoice.Lines.reduce(
    (total, line) => total + line.Amount / (1 + line.TaxPercentage / 100), 0)

Repare que TaxIncluded diz se o tipo de documento já inclui IVA — quando for false, line.Amount já é o valor líquido e a divisão não se aplica.

Uma fatura não se liga a uma ocorrência

Não existe relação entre uma fatura e a ocorrência que lhe deu origem. Se precisa de relacionar custo com ocorrência, mantenha essa ligação do seu lado a partir do momento em que adjudica o trabalho.

Erros ​

EstadoCódigoQuando
400INVALID_CURSOR · UNSUPPORTED_INCLUDECursor inválido, ou include diferente de lines
401 · 403Ver Autenticação e Permissões
404BUILDING_NOT_FOUNDNão existe condomínio com esse identificador

Obter uma fatura ​

GET /supplier-invoices/{idSupplierInvoice}

Permissão · finance:read

Parâmetros ​

ParâmetroTipoDescrição
idSupplierInvoiceinteiroNo caminho
includetextolines para trazer as linhas

Pedido ​

bash
curl "https://servidor.exemplo/api/integrations/v1/acme/supplier-invoices/4412?include=lines" \
  -H "ApiKey: $GC_API_KEY"

Erros ​

EstadoCódigoQuando
400UNSUPPORTED_INCLUDEinclude diferente de lines
401 · 403Ver Autenticação e Permissões
404INVOICE_NOT_FOUNDNão existe fatura com esse identificador

Registar uma fatura ​

POST /supplier-invoices

Permissão · finance:write · aceita Idempotency-Key

Para um fornecedor que envia as suas faturas por via eletrónica. A fatura entra no GC já lançada na contabilidade do condomínio.

Corpo ​

CampoTipoDescrição
SupplierTaxIdinteiroContribuinte do fornecedor. É por aqui que é reconhecido
IdSupplierinteiroEm alternativa ao contribuinte, o identificador do GC
IdBuilding ou BuildingCodeinteiro / textoO condomínio
DocumentIdtextoObrigatório. Número do documento do fornecedor
DocumentDatedataData do documento
DocumentDueDatedataVencimento
IsInvoicebooleanotrue numa fatura, false numa nota de crédito
AmountdecimalTotal do documento
PdfBase64textoObrigatório. O documento, em base64
LineslistaObrigatório. Pelo menos uma linha

Cada linha de lines:

CampoTipoDescrição
ProductCodetextoCódigo do artigo, mapeado para uma conta neste fornecedor
DescriptiontextoDescrição da linha
QuantityinteiroQuantidade
AmountdecimalValor da linha

Pedido ​

bash
curl -X POST "https://servidor.exemplo/api/integrations/v1/acme/supplier-invoices" \
  -H "ApiKey: $GC_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
        "SupplierTaxId": 501234567,
        "BuildingCode": "0012",
        "DocumentId": "FT 2026/1180",
        "DocumentDate": "2026-09-10",
        "DocumentDueDate": "2026-10-10",
        "IsInvoice": true,
        "Amount": 246.00,
        "PdfBase64": "JVBERi0xLjQK...",
        "Lines": [
          {
            "ProductCode": "MAN-ELEV",
            "Description": "Manutenção mensal de elevadores - Setembro",
            "Quantity": 1,
            "Amount": 246.00
          }
        ]
      }'

Resposta · 201 ​

json
{ "Id": 4412, "Reference": "2026/A/442" }

O Reference é a referência contabilística pela qual a fatura passa a ser conhecida no GC — não o número do documento, que já era seu.

Os códigos de artigo têm de estar mapeados

Cada ProductCode tem de corresponder a uma conta configurada para esse fornecedor. Um código não mapeado responde 400 INVALID_REFERENCE em vez de ser lançado numa conta errada — o que seria pior.

Combine os códigos com a empresa antes de começar a enviar, e tenha em conta que são por fornecedor.

Erros ​

EstadoCódigoQuando
400INVALID_BODYCorpo inválido, ou PdfBase64 não é base64 válido
400MISSING_FIELDFalta DocumentId, o documento, ou as linhas
400INVALID_REFERENCEO fornecedor não existe, ou um ProductCode não está mapeado
401 · 403Ver Autenticação e Permissões
404BUILDING_NOT_FOUNDO condomínio não existe, por identificador nem por código
409DOCUMENT_ALREADY_EXISTSJá existe documento com esse número, desse fornecedor, nesse condomínio
409IDEMPOTENCY_KEY_REUSEDA chave já foi usada noutro pedido
422INVOICE_NOT_CREATEDNão chegou a ser registada. Reporte

O DOCUMENT_ALREADY_EXISTS normalmente significa que a fatura já entrou. Confirme antes de a tratar como falha.


Registar uma fatura de consumo ​

POST /supplier-invoices/consumption

Permissão · finance:write · aceita Idempotency-Key

Água, eletricidade e gás. Aqui não se envia fornecedor nem condomínio: o ponto de entrega identifica o contrato, e o contrato já diz de quem é e a que condomínio pertence.

Corpo ​

CampoTipoDescrição
DeliveryPointCodetextoObrigatório. O código do ponto de entrega (CPE, CUI)
DocumentIdtextoObrigatório. Número do documento
CorrectedDocumentIdtextoNuma nota de crédito, a fatura que corrige
DocumentDatedataData do documento
DocumentDueDatedataVencimento
PeriodFrom · PeriodTodataPeríodo de consumo
IsInvoicebooleanotrue numa fatura, false numa nota de crédito
AmountdecimalTotal
PdfBase64textoObrigatório. O documento, em base64

Não há linhas: a conta e a categoria vêm do contrato do ponto de entrega.

Pedido ​

bash
curl -X POST "https://servidor.exemplo/api/integrations/v1/acme/supplier-invoices/consumption" \
  -H "ApiKey: $GC_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
        "DeliveryPointCode": "PT0002000012345678XY",
        "DocumentId": "FT 2026/998877",
        "DocumentDate": "2026-09-05",
        "DocumentDueDate": "2026-09-25",
        "PeriodFrom": "2026-08-01",
        "PeriodTo": "2026-08-31",
        "IsInvoice": true,
        "Amount": 87.43,
        "PdfBase64": "JVBERi0xLjQK..."
      }'

Resposta · 201 ​

json
{ "Id": 4413, "Reference": "2026/A/443" }

Numa nota de crédito, dê CorrectedDocumentId

Sem ele, a nota de crédito fica em aberto na conta do fornecedor em vez de acertar a fatura que corrige.

Erros ​

EstadoCódigoQuando
400INVALID_BODY · MISSING_FIELDCorpo inválido, ou falta um campo obrigatório
400DELIVERY_POINT_NOT_FOUNDNenhum contrato de consumo tem esse ponto de entrega
401 · 403Ver Autenticação e Permissões
409DOCUMENT_ALREADY_EXISTSDocumento já registado
409IDEMPOTENCY_KEY_REUSEDA chave já foi usada noutro pedido
422INVOICE_NOT_CREATEDNão chegou a ser registada. Reporte

API de Integração GC