Table of Contents

Class CollectionsController

Namespace
KadicErp.WebApi.Controllers.Academy
Assembly
KadicErp.WebApi.dll

US#8 (#8488) — Cobranza: deudores, pagos (parciales), planes y vista 360. Campos condicionados por permiso (ncf, saldos de la 360) van null, nunca se filtra la fila.

[ApiController]
[Route("api/academies")]
[Authorize]
[RequireModule("ACADEMY")]
public class CollectionsController : ControllerBase
Inheritance
object
ControllerBase
CollectionsController

Constructors

CollectionsController(IMediator, ICurrentUser, IBranchAccessGuard)

public CollectionsController(IMediator mediator, ICurrentUser currentUser, IBranchAccessGuard branchAccessGuard)

Parameters

mediator IMediator
currentUser ICurrentUser
branchAccessGuard IBranchAccessGuard

Methods

GetAccount360(Guid, CancellationToken)

[HttpGet("collections/360/{studentId:guid}")]
[Authorize(Policy = "ACADEMY_COLLECTIONS_VIEW_360")]
public Task<IActionResult> GetAccount360(Guid studentId, CancellationToken cancellationToken)

Parameters

studentId Guid
cancellationToken CancellationToken

Returns

Task<IActionResult>

GetDebtors(Guid?, string?, int, int, CancellationToken)

[HttpGet("collections/debtors")]
[Authorize(Policy = "ACADEMY_COLLECTIONS_DEBTORS_VIEW")]
public Task<IActionResult> GetDebtors(Guid? branchId, string? search, int page = 1, int pageSize = 20, CancellationToken cancellationToken = default)

Parameters

branchId Guid?
search string
page int
pageSize int
cancellationToken CancellationToken

Returns

Task<IActionResult>

GetKpis(Guid?, CancellationToken)

[HttpGet("collections/kpis")]
[Authorize(Policy = "ACADEMY_COLLECTIONS_VIEW_KPI")]
public Task<IActionResult> GetKpis(Guid? branchId, CancellationToken cancellationToken)

Parameters

branchId Guid?
cancellationToken CancellationToken

Returns

Task<IActionResult>

GetOpenChargesByFamily(Guid, CancellationToken)

Cuotas abiertas de todos los alumnos de una familia, agrupadas por alumno — el modal "Registrar pago" a nivel pagador las carga de aquí (cobro por familia/empresa).

[HttpGet("collections/families/{familyId:guid}/open-charges")]
[Authorize(Policy = "ACADEMY_COLLECTIONS_REGISTER_PAYMENT")]
public Task<IActionResult> GetOpenChargesByFamily(Guid familyId, CancellationToken cancellationToken)

Parameters

familyId Guid
cancellationToken CancellationToken

Returns

Task<IActionResult>

GetPayerDebtors(Guid?, string?, int, int, CancellationToken)

Deudores agrupados por PAGADOR (familia/empresa) — alimenta la vista de cards con barra de progreso (patrón grv-vehicle-card). La lista por estudiante sigue en collections/debtors.

[HttpGet("collections/debtors-by-payer")]
[Authorize(Policy = "ACADEMY_COLLECTIONS_DEBTORS_VIEW")]
public Task<IActionResult> GetPayerDebtors(Guid? branchId, string? search, int page = 1, int pageSize = 20, CancellationToken cancellationToken = default)

Parameters

branchId Guid?
search string
page int
pageSize int
cancellationToken CancellationToken

Returns

Task<IActionResult>

GetPayments(string?, int, int, CancellationToken)

[HttpGet("payments")]
[Authorize(Policy = "ACADEMY_COLLECTIONS_PAYMENTS_VIEW")]
public Task<IActionResult> GetPayments(string? search, int page = 1, int pageSize = 20, CancellationToken cancellationToken = default)

Parameters

search string
page int
pageSize int
cancellationToken CancellationToken

Returns

Task<IActionResult>

GetPlanByStudent(Guid, CancellationToken)

[HttpGet("payment-plans/by-student/{studentId:guid}")]
[Authorize(Policy = "ACADEMY_COLLECTIONS_PLANS_VIEW")]
public Task<IActionResult> GetPlanByStudent(Guid studentId, CancellationToken cancellationToken)

Parameters

studentId Guid
cancellationToken CancellationToken

Returns

Task<IActionResult>

GetPlans(CancellationToken)

[HttpGet("payment-plans")]
[Authorize(Policy = "ACADEMY_COLLECTIONS_PLANS_VIEW")]
public Task<IActionResult> GetPlans(CancellationToken cancellationToken)

Parameters

cancellationToken CancellationToken

Returns

Task<IActionResult>

GetVoidCategories(CancellationToken)

US#16 (#8496) CA17 — catálogo global de motivos de anulación.

[HttpGet("payments/void-categories")]
[Authorize(Policy = "ACADEMY_COLLECTIONS_REGISTER_PAYMENT")]
public Task<IActionResult> GetVoidCategories(CancellationToken cancellationToken)

Parameters

cancellationToken CancellationToken

Returns

Task<IActionResult>

GetVoidHistory(Guid, CancellationToken)

US#16 (#8496) CA17 — historial append-only de anulaciones de un pago.

[HttpGet("payments/{id:guid}/void-history")]
[Authorize(Policy = "ACADEMY_COLLECTIONS_PAYMENTS_VIEW")]
public Task<IActionResult> GetVoidHistory(Guid id, CancellationToken cancellationToken)

Parameters

id Guid
cancellationToken CancellationToken

Returns

Task<IActionResult>

RegisterPayment(RegisterPaymentBody, CancellationToken)

[HttpPost("payments")]
[Authorize(Policy = "ACADEMY_COLLECTIONS_REGISTER_PAYMENT")]
public Task<IActionResult> RegisterPayment(RegisterPaymentBody body, CancellationToken cancellationToken)

Parameters

body RegisterPaymentBody
cancellationToken CancellationToken

Returns

Task<IActionResult>

RunRollingCharges(RunRollingChargesBody?, CancellationToken)

US#15 (#8495) CA5 — endpoint operativo de soporte, no el disparo normal (ese es 100% Hangfire vía AcademyRollingChargeWorkerExecutor). Sirve para forzar/reintentar una pasada manualmente, ej. tras un incidente. AsOf opcional — por defecto hoy (UTC).

[HttpPost("collections/rolling-charges/run")]
[Authorize(Policy = "ACADEMY_COLLECTIONS_RUN_ROLLING_CHARGES")]
public Task<IActionResult> RunRollingCharges(RunRollingChargesBody? body, CancellationToken cancellationToken)

Parameters

body RunRollingChargesBody
cancellationToken CancellationToken

Returns

Task<IActionResult>

VoidPayment(Guid, VoidPaymentBody, CancellationToken)

[HttpPost("payments/{id:guid}/void")]
[Authorize(Policy = "ACADEMY_COLLECTIONS_VOID_PAYMENT")]
public Task<IActionResult> VoidPayment(Guid id, VoidPaymentBody body, CancellationToken cancellationToken)

Parameters

id Guid
body VoidPaymentBody
cancellationToken CancellationToken

Returns

Task<IActionResult>