Table of Contents

Class CreditNotesController

Namespace
KadicErp.WebApi.Controllers.FiscalAdjustments
Assembly
KadicErp.WebApi.dll
[ApiController]
[Authorize]
[RequireModule("ADJUSTMENT")]
[Route("api/fiscal-adjustments/credit-notes")]
public class CreditNotesController : ControllerBase
Inheritance
object
ControllerBase
CreditNotesController

Constructors

CreditNotesController(IMediator, IStringLocalizer<GeneralMessages>)

public CreditNotesController(IMediator mediator, IStringLocalizer<GeneralMessages> localizer)

Parameters

mediator IMediator
localizer IStringLocalizer<GeneralMessages>

Methods

Apply(Guid, ApplyCreditNoteRequest?)

Aplicar el crédito de una NC contra su documento original (factura de Ventas u otro documento de ajuste). Reduce el saldo pendiente real de ese documento y marca la NC como Applied/PartiallyApplied. Si no se envía AppliedAmount se aplica el máximo disponible.

[HttpPost("{id:guid}/apply")]
[Authorize(Policy = "ADJUSTMENT_CREDIT_NOTE_APPLY")]
public Task<IActionResult> Apply(Guid id, ApplyCreditNoteRequest? request)

Parameters

id Guid
request ApplyCreditNoteRequest

Returns

Task<IActionResult>

ApplyBatch(Guid, ApplyCreditNoteBatchRequest)

Aplica el crédito de una NC contra VARIOS documentos en una sola operación (p.ej. RD$1,000 a una ND y RD$1,000 a otra) — todo o nada: si cualquier línea falla la validación o el total excede el saldo disponible, no se aplica ninguna.

[HttpPost("{id:guid}/apply-batch")]
[Authorize(Policy = "ADJUSTMENT_CREDIT_NOTE_APPLY")]
public Task<IActionResult> ApplyBatch(Guid id, ApplyCreditNoteBatchRequest request)

Parameters

id Guid
request ApplyCreditNoteBatchRequest

Returns

Task<IActionResult>

ApplyCustomerCreditBalance(ApplyCustomerCreditBalanceRequest)

Aplica un recibo con saldo sin aplicar (saldo a favor) contra una factura u otro documento de CxC — reexpone ApplyReceiptToDocumentCommand aquí (con el permiso de NC, que sí sabemos que está concedido) porque el saldo a favor de un cliente suele venir de una Nota de Crédito.

[HttpPost("apply-customer-credit-balance")]
[Authorize(Policy = "ADJUSTMENT_CREDIT_NOTE_APPLY")]
public Task<IActionResult> ApplyCustomerCreditBalance(ApplyCustomerCreditBalanceRequest request)

Parameters

request ApplyCustomerCreditBalanceRequest

Returns

Task<IActionResult>

Create(CreateCreditNoteCommand)

Crear una Nota de Crédito fiscal (NC). Genera NCF y registra crédito disponible para el cliente.

[HttpPost]
[Authorize(Policy = "ADJUSTMENT_CREDIT_NOTE_CREATE")]
public Task<IActionResult> Create(CreateCreditNoteCommand command)

Parameters

command CreateCreditNoteCommand

Returns

Task<IActionResult>

GetAll(GetCreditNotesPaginatedQuery)

Listar Notas de Crédito con paginación y filtros opcionales. Filtros: customerId, branchId, fiscalStatus, financialStatus, issuedFrom, issuedTo.

[HttpGet]
[Authorize(Policy = "ADJUSTMENT_CREDIT_NOTE_VIEW")]
public Task<IActionResult> GetAll(GetCreditNotesPaginatedQuery query)

Parameters

query GetCreditNotesPaginatedQuery

Returns

Task<IActionResult>

GetApplications(Guid)

Historial de aplicacion de una Nota de Credito: a que documento(s) redujo saldo (otra ND o la factura de Ventas original).

[HttpGet("{id:guid}/applications")]
[Authorize(Policy = "ADJUSTMENT_CREDIT_NOTE_VIEW")]
public Task<IActionResult> GetApplications(Guid id)

Parameters

id Guid

Returns

Task<IActionResult>

GetById(Guid)

Obtener detalle completo de una Nota de Crédito por su Id.

[HttpGet("{id:guid}")]
[Authorize(Policy = "ADJUSTMENT_CREDIT_NOTE_VIEW")]
public Task<IActionResult> GetById(Guid id)

Parameters

id Guid

Returns

Task<IActionResult>

GetByInvoice(Guid)

Obtener todas las Notas de Crédito vinculadas a una factura base.

[HttpGet("by-invoice/{invoiceId:guid}")]
[Authorize(Policy = "ADJUSTMENT_CREDIT_NOTE_VIEW")]
public Task<IActionResult> GetByInvoice(Guid invoiceId)

Parameters

invoiceId Guid

Returns

Task<IActionResult>

GetCustomerCreditBalance(Guid)

Saldo a favor disponible del cliente (recibos con UnappliedAmount > 0 — generados por NCs sin documento suficiente donde aplicarse, o anticipos normales). Se usa para ofrecer "Pagar con saldo a favor" al cobrar una factura.

[HttpGet("customer-credit-balance/{customerId:guid}")]
[Authorize(Policy = "ADJUSTMENT_CREDIT_NOTE_APPLY")]
public Task<IActionResult> GetCustomerCreditBalance(Guid customerId)

Parameters

customerId Guid

Returns

Task<IActionResult>

GetInvoicePaymentSummary(Guid)

Obtener el resumen de pagos de una factura para pre-llenar el formulario de Nota de Crédito. Si la factura no tiene CXC: PaidAmount = GrandTotal, PendingBalance = 0. Si tiene CXC: PaidAmount y PendingBalance calculados desde los documentos de CXC.

[HttpGet("invoice-payment-summary/{invoiceId:guid}")]
[Authorize(Policy = "ADJUSTMENT_CREDIT_NOTE_VIEW")]
public Task<IActionResult> GetInvoicePaymentSummary(Guid invoiceId)

Parameters

invoiceId Guid

Returns

Task<IActionResult>

GetSummary(GetCreditNoteSummaryQuery)

Totales para las tarjetas KPI del listado (Registradas, Emitidas, Aplicadas, Monto acumulado). Calculados sobre el total de filas que matchean los filtros, no sobre la página actual.

[HttpGet("summary")]
[Authorize(Policy = "ADJUSTMENT_CREDIT_NOTE_VIEW")]
public Task<IActionResult> GetSummary(GetCreditNoteSummaryQuery query)

Parameters

query GetCreditNoteSummaryQuery

Returns

Task<IActionResult>

Issue(Guid, IssueCreditNoteRequest?)

Emitir una Nota de Crédito borrador. Genera NCF y crea el documento de CXC.

[HttpPost("{id:guid}/issue")]
[Authorize(Policy = "ADJUSTMENT_CREDIT_NOTE_CREATE")]
public Task<IActionResult> Issue(Guid id, IssueCreditNoteRequest? request)

Parameters

id Guid
request IssueCreditNoteRequest

Returns

Task<IActionResult>

UnapplyApplication(Guid, Guid, UnapplyCreditNoteApplicationRequest)

Revierte ("Desaplicar") una aplicación puntual de esta NC contra otro documento — nunca borra el registro, lo marca revertido y devuelve el saldo a la NC y la deuda al documento destino. No afecta el NCF ni el estatus fiscal de la NC.

[HttpPost("{id:guid}/applications/{applicationId:guid}/unapply")]
[Authorize(Policy = "ADJUSTMENT_CREDIT_NOTE_APPLY")]
public Task<IActionResult> UnapplyApplication(Guid id, Guid applicationId, UnapplyCreditNoteApplicationRequest request)

Parameters

id Guid
applicationId Guid
request UnapplyCreditNoteApplicationRequest

Returns

Task<IActionResult>

Update(Guid, UpdateCreditNoteCommand)

Actualizar una Nota de Crédito en estado Borrador. Permite modificar motivo, código, tipo de cambio y líneas mientras el documento es un borrador.

[HttpPut("{id:guid}")]
[Authorize(Policy = "ADJUSTMENT_CREDIT_NOTE_UPDATE")]
public Task<IActionResult> Update(Guid id, UpdateCreditNoteCommand command)

Parameters

id Guid
command UpdateCreditNoteCommand

Returns

Task<IActionResult>

Void(Guid)

Anular una Nota de Crédito borrador.

[HttpPatch("{id:guid}/void")]
[Authorize(Policy = "ADJUSTMENT_CREDIT_NOTE_VOID")]
public Task<IActionResult> Void(Guid id)

Parameters

id Guid

Returns

Task<IActionResult>