French hands you two past tenses and a lifelong habit of choosing between them. Neither one maps onto แล้ว, and trying to make it fit is the reason แล้ว will look inconsistent for a month.
The passé composé says an event happened before now. แล้ว says an event has reached its end point. Those are different claims, and they only look the same because most finished events happen to be in the past.
- กินแล้วkin lɛ́ːw
have eaten
finished, and in this case also past
- พรุ่งนี้กินข้าวแล้วไปpʰrûŋ.níː kin kʰâːw lɛ́ːw paj
tomorrow I'll eat and then go
finished, and entirely in the future
The test
Ask whether the event is over, not when it happened. If it is over, แล้ว is available regardless of where it sits on the calendar. If a time word has already settled the calendar question, you often need nothing else at all.
The one marker that really does point at the recent past is เพิ่ง, and French speakers get it free: เพิ่งกิน is venir de manger, almost exactly.
- เพิ่งกินpʰɤ̂ŋ kin
just ate
the closest Thai comes to venir de
- ยังไม่กินjaŋ mâj kin
haven't eaten yet
ยัง is the not-yet half of the same system
The ongoing pair, and what you can drop
กำลัง before the verb and อยู่ after it both mark something in progress, and Thai routinely uses both at once. Either can be dropped and the sentence still works.
In practice the bare อยู่ version is the commonest in speech. กำลัง alone is slightly more deliberate, the version you use when the fact that it is happening right now is the point.
- กำลังกินอยู่kam.laŋ kin jùː
am eating
both halves, and perfectly normal
- กินอยู่kin jùː
am eating
what you will actually hear