Skip to content
View alcaan16's full-sized avatar

Block or report alcaan16

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
alcaan16/README.md

Ángel Alférez Castro

SAP ABAP Developer · Consultor Técnico SAP

ABAP Cloud · S/4HANA · SAP BTP · Integration Suite · CAP

SAP Certified SAP Certified SAP Certified

LinkedIn Email Web

Las tres capas de una extensión de S/4HANA: qué vive dentro del core, qué vive fuera y cómo se hablan las dos partes.


Antes de escribir código SAP pasé ocho años en una planta cárnica gestionando recepción, lotes, caducidades y trazabilidad, y participé durante dos años en la implantación del ERP de la fábrica formando a 40–50 operarios de planta.

Cuando un requerimiento habla de entradas de mercancía o de diferencias de inventario, no necesito que me lo traduzcan.


🏭 Proyecto destacado

zgr-goods-receipt · Entrada de mercancía con gestión de lote y doble unidad de medida

ABAP Cloud RAP CDS OData V4 ABAP Unit ATC License

Business object RAP managed con draft sobre un árbol de composición de tres niveles —entrada → posición → lote— con 6 determinations, 7 validations y 4 acciones con feature control por instancia, expuesto como servicio OData V4.

La lógica de negocio vive en clases ABAP independientes de la implementación del comportamiento, con 32 tests de ABAP Unit. Sobrevivieron sin una línea de cambio a dos refactorizaciones del modelo de datos — el historial de commits lo enseña.

Las reglas que lo separan de un tutorial salen de haber estado delante de la báscula. Plausibilidad del peso medio por pieza: 500 pollos y 6.500 kg no son una desviación, son un error de conteo o de báscula. Vida útil restante mínima: el producto que no está caducado pero ya no sirve. Y una aceptación de desviación que registra quién y por qué en lugar de sobrescribir el peso recibido, porque de ahí salen las reclamaciones al proveedor.

Validación de plausibilidad del peso medio por pieza Ejecución de los 32 tests de ABAP Unit
Plausibilidad del peso medio por pieza 32 tests de ABAP Unit

El README del repositorio incluye un apartado explícito de qué no está implementado, y un documento de decisiones técnicas con las alternativas descartadas y el motivo de cada una.


🌐 Base fullstack

La capa sobre la que se apoya el modelo de programación de CAP.

Proyecto Qué es Stack
canister-api API REST con arquitectura MVC, filtrado y paginación Node Express MongoDB
mundoacuatico SPA que consume esa API: estado global, rutas protegidas, carga diferida React Zustand
PokeApi Sitio en producción en alcaan16.es Astro TypeScript

🧰 Stack

SAP

ABAP Cloud RAP CDS ABAP SQL OO ABAP ABAP Unit Clean Core OData V4 BTP ABAP Environment CAP Integration Suite

Web

Node.js Express TypeScript React Astro Python MongoDB Docker Git

Entornos

Eclipse ADT SAP BAS VS Code abapGit


🎓 Certificaciones

Credencial Código
SAP Certified Associate — Back-End Developer, ABAP Cloud C_ABAPD
SAP Certified Associate — Backend Developer, SAP Cloud Application Programming Model C_CPE
SAP Certified Associate — Integration Developer C_CPI

Formación oficial: 270 h en Experis Academy — ABAP Cloud 205 h + SAP BTP 65 h.


📧 angelalferezcastro@gmail.com · 💼 linkedin.com/in/alcaan-dev · 🌐 alcaan16.es

Abierto a incorporación en plantilla como SAP ABAP Developer — remoto en Andalucía o presencial en Córdoba / Sevilla.

Pinned Loading

  1. zgr-goods-receipt zgr-goods-receipt Public

    Entrada de mercancía con gestión de lote y doble unidad de medida — RAP / ABAP Cloud sobre SAP BTP.

    ABAP 1

  2. PokeApi PokeApi Public

    Sitio estático en Astro 5 + TypeScript + Tailwind consumiendo PokeAPI. En producción en alcaan16.es.

    Astro

  3. mundoacuatico mundoacuatico Public

    SPA en React 19 con Zustand, React Router 7 y carga diferida. Consume la API canister-api.

    JavaScript

  4. canister-api canister-api Public

    API REST en Node.js + Express con arquitectura MVC, filtrado por categoría y paginación. Backend de MundoAcuático.

    JavaScript