CREATE PROCEDURE dbo.sp_Api5_pvtMovCajaEncMovimientoCreate
    @correlativo         BIGINT,
    @correlativocierre   BIGINT = NULL,
    @tipo                INT,                -- 2=Entrada, 3=Salida
    @tipomovimiento      INT,
    @caja                NVARCHAR(20),
    @sucursal            NVARCHAR(20),
    @cajero              INT,
    @fechainicio         DATETIME2(0) = NULL,
    @montocaja           DECIMAL(18,2) = 0,
    @monto               DECIMAL(18,2),
    @fechacierre         DATETIME2(0) = NULL,
    @comentario          NVARCHAR(400) = NULL,
    @estado              INT = 0,
    @login_id            NVARCHAR(150),
    @unineg              NVARCHAR(20) = NULL,
    @tipdoc              INT = NULL,
    @numdoc              INT = NULL
AS
BEGIN
    -- IMPORTANTE: NO usar SET NOCOUNT ON si medirás @@ROWCOUNT o ExecuteNonQuery.
    DECLARE @rc INT = 0;

    IF EXISTS (
        SELECT 1
        FROM dbo.pvtMovCajaEnc WITH (READCOMMITTEDLOCK)
        WHERE tipo = @tipo AND correlativo = @correlativo
    )
    BEGIN
        UPDATE dbo.pvtMovCajaEnc
           SET tipomovimiento    = @tipomovimiento,
               caja              = @caja,
               sucursal          = @sucursal,
               cajero            = @cajero,
               fechainicio       = COALESCE(@fechainicio, fechainicio),
               montocaja         = @montocaja,
               monto             = @monto,
               fechacierre       = @fechacierre,
               correlativocierre = @correlativocierre,
               comentario        = @comentario,
               estado            = COALESCE(@estado, estado),
               logmod            = @login_id,
               fecmod            = GETDATE(),
               unineg            = @unineg,
               tipdoc            = @tipdoc,
               numdoc            = @numdoc
         WHERE tipo = @tipo
           AND correlativo = @correlativo;

        SET @rc = @@ROWCOUNT;
    END
    ELSE
    BEGIN
        INSERT INTO dbo.pvtMovCajaEnc
        (
            correlativo, tipo, tipomovimiento, caja, sucursal, cajero,
            fechainicio, montocaja, monto, fechacierre, correlativocierre,
            comentario, estado, loging, logmod, fecing, fecmod, unineg, tipdoc, numdoc
        )
        VALUES
        (
            @correlativo, @tipo, @tipomovimiento, @caja, @sucursal, @cajero,
            COALESCE(@fechainicio, GETDATE()), @montocaja, @monto, @fechacierre, @correlativocierre,
            @comentario, COALESCE(@estado, 0), @login_id, @login_id, GETDATE(), GETDATE(), @unineg, @tipdoc, @numdoc
        );

        SET @rc = @@ROWCOUNT;
    END

    -- Devuelve filas afectadas para que tu controller decida 200/400
    SELECT @rc AS rowsAffected;
END
GO
