Skip to main content
This guide walks you through the complete process of verifying your travel expenses (comprobaciones) in SMAF, from accessing your travel assignment to final submission.

Prerequisites

You can only begin expense verification after your travel has started. The system validates the start date before allowing access.
  • Travel assignment (comisión) must be approved and in status 9
  • Travel start date must have passed
  • Access to SMAF with appropriate permissions
  • All supporting documentation (invoices, receipts) ready to upload

Accessing Expense Verification

1

Navigate to Comprobaciones

From the SMAF main menu, select Comprobaciones to view your list of travel assignments
2

Select your assignment

Click on the folio of the travel you need to verify. The system loads your assignment details including:
  • Travel location and dates
  • Granted amounts (viaticos, combustible, peaje, pasaje)
  • Daily allowances calculation
3

Review granted resources

The system displays a summary table showing all granted resources:
Comision_Comprobacion.aspx.cs:182-195
total = Convert_Double(Total_Viaticos) + 
        Convert_Double(Combustible_Efectivo) + 
        Convert_Double(Peaje) + 
        Convert_Double(Pasaje);

// Display: "Efectivo total otorgado: $[total]"
// Display: "Recibí en efectivo la cantidad de: [total en letras]"

Submitting Fiscal Expenses

Fiscal expenses require CFDI invoices with XML validation.
1

Select expense type

Choose between Fiscal or Non-Fiscal expenses from the dropdown:
<asp:DropDownList ID="dplFiscales" runat="server" 
    AutoPostBack="True" 
    OnSelectedIndexChanged="dplFiscales_SelectedIndexChanged">
</asp:DropDownList>
2

Choose expense concept

Select the specific expense type from the concept dropdown:
  • Alimentos (Food) - Code 5
  • Combustible (Fuel) - Code 6
  • Peaje facturable (Toll fees) - Code 7
  • Pasaje (Transportation) - Code 8
  • Hospedaje (Lodging) - Code 9
  • Taxi - Code 11
  • Desayuno (Breakfast) - Code 14
  • Comida (Lunch) - Code 17
  • Cena (Dinner) - Code 20
3

Upload invoice files

For each fiscal expense, upload:
Upload the PDF version of your CFDI invoice:
ComprobacionSInXml.aspx.cs:496-514
if (!fuplPDF.HasFile)
{
    alert('Archivo pdf es necesario.');
    return;
}

// Validate file extension
String fileExtension = Path.GetExtension(fuplPDF.FileName).ToLower();
String[] allowedExtensions = { ".pdf", ".PDF" };
4

Enter invoice details

Manually enter the following information:
  • UUID (Folio Fiscal): The unique fiscal identifier from your invoice
  • Amount: Total invoice amount in MXN
  • Date: Invoice date (YYYY-MM-DD format)
ComprobacionSInXml.aspx.cs:476-491
if ((txtUUID.Text == "") | (txtUUID.Text == null))
{
    alert('Folio Fiscal es necesario.');
    return;
}

if ((txtImporteFac.Text == "") | (txtImporteFac.Text == null))
{
    alert('Importe necesario');
    return;
}
The system validates that the UUID hasn’t been used in another verification to prevent duplicate submissions.
5

Submit the expense

Click the submit button. The system will:
  1. Validate UUID uniqueness
  2. Save files to the commission folder
  3. Insert the expense record
  4. Update verification status to “9” (In Progress)
ComprobacionSInXml.aspx.cs:558-587
string existe = MngNegocioComprobacion.Exist_UUUID(txtUUID.Text);

if ((existe == "") | (existe == null))
{
    // Save files
    fuplXML.PostedFile.SaveAs(Ruta + "/" + fuplXML.FileName);
    fuplPDF.PostedFile.SaveAs(Ruta + "/" + fuplPDF.FileName);
    
    // Insert expense
    MngNegocioComision.Inserta_Comprobacion_Comision(
        Oficio, Archivo, Usuario, Ubicacion, 
        Fecha, Proyecto, Dep_Proy, "2", // Status: Fiscal
        ClaveConcepto, Concepto, 
        fuplPDF.FileName, Importe, fuplXML.FileName,
        "01", "01", Observaciones, 
        NombreArchivo, "", UUID, Periodo
    );
}
else
{
    alert('La factura ya fue usada para otra comprobación');
}

Submitting Non-Fiscal Expenses (10% Rule)

For expenses without fiscal documentation (limited to 10% of daily allowances):
Non-fiscal expenses are only allowed for commercial zones (1-13, 16-18, 20-23). Rural, maritime, and field work zones do NOT permit the 10% exception.
1

Verify 10% limit

The system calculates your 10% allowance:
ComprobacionSInXml.aspx.cs:862-880
if (Zona_Comercial in ["1","2","3","4","5","6","10","11","12","13"])
{
    diezporciento = Convert_Decimales(
        (Convert_Double(Dias_Comercial) * 
         Convert_Double(Obtiene_Tarifa(Zona_Comercial))) * 0.10
    );
}
else if (Zona_Comercial in ["16","17","18","20","21","22"])
{
    // Calculate based on commercial tariff only
    tarifa1 = Obtiene_Tarifa(commercial_zone);
    diezporciento = (Dias_Comercial * tarifa1) * 0.10;
}
2

Enter expense details

Fill in the non-fiscal expense form:
  • Concept: Description of the expense
  • Amount: Amount in MXN
  • Observations: Detailed justification
ComprobacionSInXml.aspx.cs:833-855
if ((txtConcepto.Text == null) | (txtConcepto.Text == ""))
{
    alert('Concepto obligatorio');
    return;
}
if (!IsNumeric(txtImporte.Text))
{
    alert('Importe debe ser numérico');
    return;
}
3

Validate against limit

The system checks that total non-fiscal expenses don’t exceed 10%:
ComprobacionSInXml.aspx.cs:883-891
double z = Total_NoFiscales_Previas;

if ((z + txtImporte.Text) > diezporciento)
{
    alert('El importe que intenta subir es mayor al permitido.');
    return;
}
else
{
    // Insert non-fiscal expense with code "12"
    Inserta_Comprobacion_Comision(..., "3", "12", ...);
}

Special Case: Toll Fees (Non-Facturable)

Some toll booths don’t issue invoices. For these cases:
1

Select toll concept

Choose Peaje no facturable (Code 16) from the concept dropdown
2

Prepare documentation

Scan the following into a single PDF:
  • Courtesy note (Atenta Nota) signed by supervisor
  • All toll receipts (tickets)
3

Upload and submit

ComprobacionSInXml.aspx.cs:752-757
if ((TotalPeajeFiscal + TotalPeajeNoFiscal + txtImportePeaje.Text) 
    > Peaje_Otorgado)
{
    alert('Cantidad de peaje superior al otorgado');
    return;
}

Fuel Expenses with Vouchers

If you received fuel vouchers (vales de combustible):
You must submit physical fuel receipts (tickets de carga) to prove the vouchers were used, even though no invoice is required.
Comision_Comprobacion.aspx.cs:232-235
"Se deberá comprobar de manera física y con ticket de carga de gasolina " +
"la cantidad de: $" + Combustible_Vales + 
", entregada en vales del folio: " + Vale_Comb_I + " al " + Vale_Comb_F;

Submitting Reimbursements

When your verified expenses are less than granted funds:
1

Calculate reimbursement

The system automatically displays the amount to reimburse:
Comision_Comprobacion.aspx.cs:277-281
double reintegro = (totalOtorgado - totalComprobado);

Label20.Text = "REINTEGRO A EFECTUAR: $" + 
               Convert_Decimales(reintegro.ToString());
2

Make bank deposit

Deposit the reimbursement amount to the institutional account
3

Upload deposit receipt

Scan your bank receipt and upload:
ComprobacionSInXml.aspx.cs:654-697
// Accepted formats: JPEG, JPG, PNG, BIT, PDF
String[] allowedExtensions = { ".jpeg", ".jpg", ".png", ".bit", ".pdf" };

fupdReintegros.PostedFile.SaveAs(Ruta + "/" + fupdReintegros.FileName);

// Insert reimbursement record (Code 13)
Inserta_Comprobacion_Comision(
    Oficio, Archivo, Usuario, Ubicacion,
    lsHoy, Proyecto, Dep_Proy, 
    "3", "13", "REINTEGRO",
    NombreArchivo, txtreintegro.Text, ...
);

// Send notification email
Mail_Reintegro(Comision, txtreintegro.Text);

Viewing Your Expense Summary

As you add expenses, they appear in two grids:

Fiscal Expenses Grid

FechaConceptoImporteObservacionesEliminar
2024-03-15Combustible$1,250.00Factura A123[X]
2024-03-16Hospedaje$800.00Hotel factura[X]

Non-Fiscal Expenses Grid

FechaConceptoImporteObservacionesEliminar
2024-03-15Propinas$50.00Tips for porters[X]
You can delete expenses before final submission by clicking the Eliminar button.

Deleting Expenses

To remove an expense before closing the verification:
ComprobacionSInXml.aspx.cs:181-211
protected void gvFiscales_SelectedIndexChanged(object sender, EventArgs e)
{
    string fechaEliminar = gvFiscales.Rows[SelectedIndex].Cells[0].Text;
    string lsImporte = gvFiscales.Rows[SelectedIndex].Cells[2].Text;
    
    // Update status to "2" (deleted)
    Update_Estatus_Comprobacion(Oficio, Usuario, Ubicacion, 
                                 fechaEliminar, lsImporte, 
                                 Referencia, "2");
    
    // Delete physical files
    if (File.Exists(Ruta + "/" + NombreArchivo + ".pdf")) 
        File.Delete(Ruta + "/" + NombreArchivo + ".pdf");
    if (File.Exists(Ruta + "/" + NombreArchivo + ".xml")) 
        File.Delete(Ruta + "/" + NombreArchivo + ".xml");
    
    // Reset status to "9" (In Progress)
    Update_estatus_Comision("9", ...);
}

Closing the Verification

1

Review totals

Verify that all expenses are correctly entered and the reimbursement (if any) is submitted
2

Click close button

Click Cerrar Comprobación (Button2)For Devengados (accrued expenses):
ComprobacionSInXml.aspx.cs:70-111
if (Forma_Pago_Viaticos == VIATICOS_DEVENGADOS)
{
    // No validation - can close immediately
    Update_Comprobacion(Ubicacion, Usuario, Folio, "7", "");
    Update_estatus_Comision("7", Comisionado, Oficio, ...);
    
    // Generate folio if needed
    folio_comprobante = Obtiene_Folio_Comprobacion(...);
    if (folio_comprobante == "0")
    {
        Insert_Folio_Comprobante(Oficio, Archivo, Comisionado);
    }
    
    // Generate PDF receipt
    Genera_Ministracion(DetalleComision, folio_comprobante);
}
For Anticipado (advance payment):
ComprobacionSInXml.aspx.cs:114-170
else
{
    double reintegro = totalOtorgado - totalComprobado;
    
    if (reintegro > 0)
    {
        alert('Aún no ha terminado de realizar el total de la comprobación');
        return; // Cannot close without full verification
    }
    else
    {
        // Proceed with closure
        Update_Comprobacion(..., "7", ...);
        Genera_Ministracion(...);
    }
}
3

Download receipt

The system generates a PDF receipt (ministracion) with:
  • Verification folio number
  • All verified expenses
  • Reimbursement confirmation
  • Digital signatures
For advance payment assignments, you cannot close the verification until:
  • Total verified expenses equal or exceed granted funds, OR
  • All reimbursements have been submitted and confirmed

Tips for Success

Keep Originals

Always keep physical copies of invoices and receipts until the verification is approved

Verify UUIDs

Double-check UUID numbers - duplicate UUIDs will be rejected

10% Tracking

Monitor your non-fiscal expenses to stay within the 10% limit

Save Progress

Use the Guardar button to save your progress before final submission

Next Steps

XML Invoice Details

Learn about CFDI XML structure and validation

International Travel

Special procedures for foreign expenses

Build docs developers (and LLMs) love