defmodule Sat.Csf.Document do
@moduledoc """
Estructura del resultado de parsear una Constancia de Situación Fiscal (CSF)
emitida por el SAT.
Los sub-structs viven en este mismo módulo (`Identificacion`, `Domicilio`,
`ActividadEconomica`, `Regimen`, `Obligacion`) para mantener el árbol de
archivos plano.
"""
alias Sat.Csf.{Identificacion, Domicilio, ActividadEconomica, Regimen, Obligacion}
@type t :: %__MODULE__{
identificacion: Identificacion.t(),
domicilio: Domicilio.t(),
actividades_economicas: [ActividadEconomica.t()],
regimenes: [Regimen.t()],
obligaciones: [Obligacion.t()]
}
defstruct identificacion: nil,
domicilio: nil,
actividades_economicas: [],
regimenes: [],
obligaciones: []
end
defmodule Sat.Csf.Identificacion do
@moduledoc "Datos de identificación del contribuyente."
@type t :: %__MODULE__{
rfc: String.t() | nil,
curp: String.t() | nil,
nombre: String.t() | nil,
primer_apellido: String.t() | nil,
segundo_apellido: String.t() | nil,
fecha_inicio_operaciones: String.t() | nil,
estatus_padron: String.t() | nil,
fecha_ultimo_cambio_estado: String.t() | nil,
nombre_comercial: String.t() | nil
}
defstruct [
:rfc,
:curp,
:nombre,
:primer_apellido,
:segundo_apellido,
:fecha_inicio_operaciones,
:estatus_padron,
:fecha_ultimo_cambio_estado,
:nombre_comercial
]
end
defmodule Sat.Csf.Domicilio do
@moduledoc "Datos del domicilio registrado."
@type t :: %__MODULE__{
codigo_postal: String.t() | nil,
tipo_vialidad: String.t() | nil,
nombre_vialidad: String.t() | nil,
numero_exterior: String.t() | nil,
numero_interior: String.t() | nil,
colonia: String.t() | nil,
localidad: String.t() | nil,
municipio_demarcacion_territorial: String.t() | nil,
entidad_federativa: String.t() | nil,
entre_calle: String.t() | nil,
y_calle: String.t() | nil
}
defstruct [
:codigo_postal,
:tipo_vialidad,
:nombre_vialidad,
:numero_exterior,
:numero_interior,
:colonia,
:localidad,
:municipio_demarcacion_territorial,
:entidad_federativa,
:entre_calle,
:y_calle
]
end
defmodule Sat.Csf.ActividadEconomica do
@moduledoc "Fila de la tabla `Actividades Económicas`."
@type t :: %__MODULE__{
orden: pos_integer(),
actividad_economica: String.t(),
porcentaje: integer(),
fecha_inicio: String.t() | nil,
fecha_fin: String.t() | nil
}
defstruct [:orden, :actividad_economica, :porcentaje, :fecha_inicio, :fecha_fin]
end
defmodule Sat.Csf.Regimen do
@moduledoc """
Fila de la tabla `Regímenes`.
`:codigo` se enriquece desde `Sat.Catalogos.RegimenFiscal` cuando hay match.
Es `nil` cuando el label del PDF no corresponde a ninguna entrada del catálogo.
"""
@type t :: %__MODULE__{
regimen: String.t(),
codigo: String.t() | nil,
fecha_inicio: String.t() | nil,
fecha_fin: String.t() | nil
}
defstruct [:regimen, :codigo, :fecha_inicio, :fecha_fin]
end
defmodule Sat.Csf.Obligacion do
@moduledoc "Fila de la tabla `Obligaciones`."
@type t :: %__MODULE__{
descripcion_obligacion: String.t(),
descripcion_vencimiento: String.t(),
fecha_inicio: String.t() | nil,
fecha_fin: String.t() | nil
}
defstruct [:descripcion_obligacion, :descripcion_vencimiento, :fecha_inicio, :fecha_fin]
end