Skip to main content

Overview

The DonaSF API uses the WSDonaciones SQL Server database to manage donations, missionaries, administrators, and receipt (talon) tracking. The schema is designed to support a donation management system with multi-level tracking and delivery confirmation.

Database Schema

The database consists of several interconnected entity groups:

Administration

Administrators and missionaries who manage the donation system

Donations

Donation keys (amounts), donors, and donation records

Receipts (Talones)

Receipt tracking across editions with state management

Delivery Tracking

Cash delivery records and delivery state management

Core Entities

Administration Entities

administrador

Administrators who oversee the donation system.
ColumnTypeDescription
idadminINT IDENTITYPrimary key
nombreNVARCHAR(150)Administrator name
correoNVARCHAR(150)Email (unique)
telefonoNVARCHAR(20)Phone number
activoBITActive status (default: 1)
fechacreacionDATETIMECreation date (default: GETDATE())
Key Characteristics:
  • Email must be unique
  • Soft delete via activo flag
  • Automatic timestamp on creation

misionero

Missionaries who collect donations and manage receipts.
ColumnTypeDescription
idmisioneroINT IDENTITYPrimary key
nombreNVARCHAR(150)Missionary name
correoNVARCHAR(150)Email
telefonoNVARCHAR(50)Phone number
activoBITActive status (default: 1)
idadminINTForeign key to administrador
fecharegistroDATETIMERegistration date (default: GETDATE())
Relationships:
  • Each missionary belongs to one administrator
  • Constraint: fk_misionero_adminadministrador(idadmin)

Donation Configuration

clavedonativo

Predefined donation amounts with unique codes.
ColumnTypeDescription
idclaveINT IDENTITYPrimary key
codigoNVARCHAR(10)Unique donation code (e.g., “X”, “V”)
cantidadDECIMAL(10,2)Donation amount
Example Data:
INSERT INTO clavedonativo (codigo, cantidad) VALUES 
  ('X', 10.00),
  ('V', 20.00),
  ('Z', 50.00);
Constraints:
  • uq_codigo - Ensures each code is unique

estado

Receipt/donation states (e.g., “Pending”, “Collected”, “Delivered”).
ColumnTypeDescription
idestadoINT IDENTITYPrimary key
descripcionNVARCHAR(100)State description

estadoentrega

Delivery states for tracking cash delivery progress.
ColumnTypeDescription
idestadoentregaINT IDENTITYPrimary key
descripcionentregaNVARCHAR(100)Delivery state description

Edition Management

edicion

Receipt editions with folio number ranges.
ColumnTypeDescription
idedicionINT IDENTITYPrimary key
nombreNVARCHAR(100)Edition name
folio_inicioINTStarting folio number
folio_finINTEnding folio number
fechacreacionDATETIMECreation date (default: GETDATE())
Constraints:
  • ck_rango_folio - Ensures folio_inicio < folio_fin
Purpose: Editions group receipts (talones) into batches with sequential folio numbers, allowing for organized distribution and tracking.

Receipt (Talon) Management

talon

Receipts assigned to missionaries for donation collection.
ColumnTypeDescription
idtalonINT IDENTITYPrimary key
folioINTReceipt folio number
idclaveINTForeign key to clavedonativo
idestadoINTForeign key to estado
idmisioneroINTForeign key to misionero
idedicionINTForeign key to edicion
fecharegistroDATETIMERegistration date (default: GETDATE())
Constraints:
  • uq_folio_clave - Unique combination of folio and donation key
  • ck_folio_positivo - Folio must be positive
  • Foreign keys to: clavedonativo, estado, misionero, edicion
Business Rules:
  • Folio numbers must fall within the edition’s range
  • Each folio + clave combination is unique
  • Tracks receipt lifecycle through estado

Donation Tracking

donante

Donors who make donations.
ColumnTypeDescription
iddonanteINT IDENTITYPrimary key
nombredonanteNVARCHAR(150)Donor name
domicilioNVARCHAR(150)Donor address

donacion

Actual donation records linking missionaries, receipts, donors, and amounts.
ColumnTypeDescription
iddonacionINT IDENTITYPrimary key
idmisioneroINTForeign key to misionero
idtalonINTForeign key to talon
iddonanteINTForeign key to donante
idclaveINTForeign key to clavedonativo
idestadoINTForeign key to estado
idestadoentregaINTForeign key to estadoentrega
Relationships:
  • Six foreign key constraints linking to all related entities
  • Tracks both donation state and delivery state independently
Purpose: This is the central transaction table that records when a missionary collects a donation from a donor using a specific receipt for a particular amount.

Delivery Management

entregaefectivo

Cash delivery records tracking when donations are delivered.
ColumnTypeDescription
identregaINT IDENTITYPrimary key
idonacionINTDonation ID (note: typo in schema, no FK)
idedicionINTForeign key to edicion
idtalonINTForeign key to talon
idmisioneroINTForeign key to misionero
idestadoentregaINTForeign key to estadoentrega
fechaentregaDATETIMEDelivery date (default: GETDATE())
Purpose: Tracks when missionaries deliver collected donations, organized by edition and receipt.

Entity Relationships

Primary Relationships

Workflow Relationships

1

Administrator Creates Missionary

An administrator (administrador) creates a missionary account (misionero) with idadmin linking them.
2

Edition and Receipts Created

An edition (edicion) is created with a folio range. Receipts (talon) are generated within this range, assigned to missionaries with specific donation keys (clavedonativo).
3

Donation Collected

A missionary collects a donation from a donor (donante). A donacion record is created linking the missionary, receipt, donor, donation key, and states.
4

Cash Delivered

The missionary delivers collected donations. An entregaefectivo record tracks the delivery with the edition, receipt, and delivery state.

Data Access Patterns

Stored Procedures

The API uses stored procedures for data operations, located in:
  • Database/ScriptDonaciones/Procedimientos/Procedimientos almacenados Donaciones.sql
  • Database/Stored Procedures/Procedimientos.sql

DataTable Returns

Data layer methods return DataTable objects that are processed in the business layer:
public InfoCompartidaCapas VerDonacion(JSONDonacioni jSONDonacioni)
{
    InfoCompartidaCapas info = new InfoCompartidaCapas();
    try
    {
        IDMDonacion consulta = new CDMDonacion(new DMDonacion());
        DataTable tabla = consulta.VerDonacion(jSONDonacioni);
        info.informacion = tabla;
        info.error = null;
    }
    catch (Exception ex)
    {
        info.informacion = null;
        info.error = ex.Message;
    }
    return info;
}

Result Handling

Stored procedures typically return results with:
  • Resultado (BIT) - Success/failure flag
  • resultados (NVARCHAR) - Message or error description
  • Additional columns with entity data

Key Design Decisions

The administrador and misionero tables use activo flags instead of hard deletes, preserving historical data and relationships.
Donations track both donation state (idestado) and delivery state (idestadoentrega) independently, allowing granular workflow control.
Receipts are organized into editions with folio ranges, enabling batch management and reporting.
The uq_folio_clave constraint ensures each receipt can only be used once per donation amount, preventing duplicate entries.

Build docs developers (and LLMs) love